Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
>>> input = np.array([0, 1, 2, 3, 4, 5])
>>> print(array_to_blocks(input, [2], [2]))
[[0, 1],
[2, 3],
[4, 5]]
"""
ndim = input.ndim
if ndim != len(blk_shape) or ndim != len(blk_strides):
raise ValueError('Input must have same dimensions as blocks.')
num_blks = [(i - b + s) // s for i, b,
s in zip(input.shape, blk_shape, blk_strides)]
device = backend.get_device(input)
xp = device.xp
with device:
output = xp.zeros(num_blks + blk_shape, dtype=input.dtype)
if ndim == 1:
if device == backend.cpu_device:
_array_to_blocks1(output, input,
blk_shape[-1],
blk_strides[-1],
num_blks[-1])
else: # pragma: no cover
_array_to_blocks1_cuda(input,
blk_shape[-1],
blk_strides[-1],
num_blks[-1],
output,
def _fftc(input, oshape=None, axes=None, norm='ortho'):
ndim = input.ndim
axes = util._normalize_axes(axes, ndim)
device = backend.get_device(input)
xp = device.xp
if oshape is None:
oshape = input.shape
with device:
tmp = input
tshape = list(input.shape)
for a in axes:
i = oshape[a]
tshape[a] = i
tmp = tmp.swapaxes(a, -1)
tshape[a], tshape[-1] = tshape[-1], tshape[a]
tmp = util.resize(tmp, tshape)
dom0dt (float): off-resonance phase in radians.
Returns:
2-element tuple containing
- **a** (*array*): SLR alpha parameter.
- **b** (*array*): SLR beta parameter.
References:
Pauly, J., Le Roux, Patrick., Nishimura, D., and Macovski, A.(1991).
'Parameter Relations for the Shinnar-LeRoux Selective Excitation
Pulse Design Algorithm'.
IEEE Transactions on Medical Imaging, Vol 10, No 1, 53-65.
"""
device = backend.get_device(rf)
xp = device.xp
with device:
Ns = xp.shape(xx)
Ns = Ns[0] # Ns: # of spatial locs
Nt = xp.shape(gamgdt)
Nt = Nt[0] # Nt: # time points
a = xp.ones((Ns,))
b = xp.zeros((Ns,))
for ii in xp.arange(Nt):
# apply phase accural
z = xp.exp(-1j * (xx * gamgdt[ii, ] + dom0dt))
b = b * z
# apply rf
def _apply(self, input):
device = backend.get_device(input)
xp = device.xp
with device:
output = xp.empty(self.oshape, dtype=input.dtype)
for n, linop in enumerate(self.linops):
if n == 0:
start = 0
else:
start = self.indices[n - 1]
if n == self.nops - 1:
end = None
else:
end = self.indices[n]
if self.axis is None:
output[start:end] = linop(input).ravel()
Args:
rf (array): rf waveform input.
x (array): spatial locations.
g (array): gradient waveform.
auxa (None or array): auxa
auxb (array): auxb
af (array): forward sim a.
bf( array): forward sim b.
Returns:
array: SLR alpha parameter
array: SLR beta parameter
"""
device = backend.get_device(rf)
xp = device.xp
with device:
drf = xp.zeros(xp.shape(rf), dtype=complex)
ar = xp.ones(xp.shape(af), dtype=complex)
br = xp.zeros(xp.shape(bf), dtype=complex)
for mm in range(xp.size(rf) - 1, -1, -1):
# calculate gradient blip phase
if g.ndim > 1:
z = xp.exp(1j / 2 * x @ g[mm, :])
else:
z = xp.exp(1j / 2 * x * g[mm])
# strip off gradient blip from forward sim
af = af * xp.conj(z)
def _apply(self, input):
device = backend.get_device(input)
data = backend.to_device(self.data, device)
with device:
return conv.convolve_filter_adjoint(
input, data, self.oshape,
mode=self.mode, strides=self.strides,
multi_channel=self.multi_channel)
def _prox(self, alpha, input):
with backend.get_device(input):
return input - alpha * self.prox(1 / alpha, input / alpha)
def estimate_shape(coord):
"""Estimate array shape from coordinates.
Shape is estimated by the different between maximum and minimum of
coordinates in each axis.
Args:
coord (array): Coordinates.
"""
ndim = coord.shape[-1]
with backend.get_device(coord):
shape = [int(coord[..., i].max() - coord[..., i].min()) for i in range(ndim)]
return shape