Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, header=None, body=None, footer=None):
self.header = as_tuple(header)
self.body = as_tuple(body)
self.footer = as_tuple(footer)
def __init__(self, condition, body=None):
self.condition = condition
self.body = as_tuple(body)
def q_multivar(expr, vars):
"""
Return True if at least two variables in ``vars`` appear in ``expr``,
False otherwise.
"""
# The vast majority of calls here provide incredibly simple single variable
# functions, so if there are < 2 free symbols we return immediately
if not len(expr.free_symbols) > 1:
return False
return len(set(as_tuple(vars)) & expr.free_symbols) >= 2
def drop(self, functions):
"""
Create a new HaloScheme which contains all entries in ``self`` except those
corresponding to the provided ``functions``.
"""
fmapper = {f: v for f, v in self.fmapper.items() if f not in as_tuple(functions)}
return HaloScheme.build(fmapper, self.honored)
for j in range(len(my_coords)):
left_coord = list(my_coords)
left_coord[j] -= 1
left_neighbours.append(as_tuple(left_coord))
left_neighbours = as_tuple(left_neighbours)
n_slice = []
for j in range(len(my_coords)):
if left_neighbours[j][j] < 0:
start = 0
stop = dat_len_cum[my_coords][j]
else:
start = dat_len_cum[left_neighbours[j]][j]
stop = dat_len_cum[my_coords][j]
n_slice.append(slice(start, stop, 1))
n_rank_slice.append(as_tuple(n_slice))
n_rank_slice = as_tuple(n_rank_slice)
# Now fill each elements owner:
owners = np.zeros(global_size, dtype=np.int32)
send = np.zeros(global_size, dtype=np.int32)
for i in range(len(n_rank_slice)):
if any([j is None for j in n_rank_slice[i]]):
continue
else:
owners[n_rank_slice[i]] = i
send[:] = owners[transform]
# Construct local_si
local_si = np.zeros(global_size, dtype=tuple)
it = np.nditer(local_si, flags=['refs_ok', 'multi_index'])
while not it.finished:
index = it.multi_index
raise NotImplementedError
try:
# NOTE: required if input is an np.array
dtype = f.dtype.type
shape = f.shape
except AttributeError:
dtype = f.dtype
shape = f.shape_global
# TODO: Add s = 0 dim skip option
lw = tuple(int(truncate*float(s) + 0.5) for s in as_tuple(sigma))
if len(lw) == 1 and len(lw) < f.ndim:
lw = f.ndim*(lw[0], )
sigma = f.ndim*(as_tuple(sigma)[0], )
elif len(lw) == f.ndim:
sigma = as_tuple(sigma)
else:
raise ValueError("`sigma` must be an integer or a tuple of length" +
" `f.ndim`.")
# Create the padded grid:
objective_domain = ObjectiveDomain(lw)
shape_padded = tuple([np.array(s) + 2*l for s, l in zip(shape, lw)])
grid = dv.Grid(shape=shape_padded, subdomains=objective_domain)
f_c = dv.Function(name='f_c', grid=grid, space_order=2*max(lw),
coefficients='symbolic', dtype=dtype)
f_o = dv.Function(name='f_o', grid=grid, dtype=dtype)
weights = create_gaussian_weights(sigma, lw)
if isinstance(orders, Iterable):
orders = orders[0]
new_dims = tuple([dims[0]]*orders)
else:
# Iterable of 2-tuple, e.g. ((x, 2), (y, 3))
new_dims = []
orders = []
d_ord = kwargs.get('deriv_order', tuple([1]*len(dims)))
for d, o in zip(dims, d_ord):
if isinstance(d, Iterable):
new_dims.extend([d[0] for _ in range(d[1])])
orders.append(d[1])
else:
new_dims.extend([d for _ in range(o)])
orders.append(o)
new_dims = as_tuple(new_dims)
orders = as_tuple(orders)
# Finite difference orders depending on input dimension (.dt or .dx)
fd_orders = kwargs.get('fd_order', tuple([expr.time_order if
getattr(d, 'is_Time', False) else
expr.space_order for d in dims]))
if len(dims) == 1 and isinstance(fd_orders, Iterable):
fd_orders = fd_orders[0]
# SymPy expects the list of variable w.r.t. which we differentiate to be a list
# of 2-tuple `(s, count)` where s is the entity to diff wrt and count is the order
# of the derivative
variable_count = [sympy.Tuple(s, new_dims.count(s))
for s in filter_ordered(new_dims)]
return new_dims, orders, fd_orders, variable_count
def __init__(self, entries=None):
processed = []
for i in (entries or []):
if isinstance(i, StencilEntry):
processed.append((i.dim, i.ofs))
elif isinstance(i, tuple):
entry = StencilEntry(*i) # Implicit type check
processed.append((entry.dim, set(as_tuple(entry.ofs))))
else:
raise TypeError('Cannot construct a Stencil for %s' % str(i))
super(Stencil, self).__init__(set, processed)
def __indices_setup__(cls, **kwargs):
return as_tuple(kwargs['dimensions']), as_tuple(kwargs['dimensions'])
def __init__(self, header=None, body=None, footer=None):
body = as_tuple(body)
if len(body) == 1 and all(type(i) == List for i in [self, body[0]]):
# De-nest Lists
#
# Note: to avoid disgusting metaclass voodoo (due to
# https://stackoverflow.com/questions/56514586/\
# arguments-of-new-and-init-for-metaclasses)
# we change the internal state here in __init__
# rather than in __new__
self._args['header'] = self.header = as_tuple(header) + body[0].header
self._args['body'] = self.body = body[0].body
self._args['footer'] = self.footer = as_tuple(footer) + body[0].footer
else:
self.header = as_tuple(header)
self.body = as_tuple(body)
self.footer = as_tuple(footer)