def __init__(self, d): self._impl = d lhs_op = BlockOperator([[wrapper[d.get_local_operator(ss)] if ss == nn else wrapper[d.get_coupling_operator(ss, nn)] if nn in list(d.neighbouring_subdomains(ss)) else None for nn in np.arange(d.num_subdomains())] for ss in np.arange(d.num_subdomains())]) rhs_op = BlockOperator.hstack([wrapper[d.get_local_functional(ss)] for ss in np.arange(d.num_subdomains())]) operators = {'operator': lhs_op} functionals = {'rhs': rhs_op} vector_operators = {} self.operators = FrozenDict(operators) self.functionals = FrozenDict(functionals) self.vector_operators = FrozenDict(vector_operators) self.operator = operators['operator'] self.solution_space = self.operator.source self.rhs = functionals['rhs'] self.products = {k: BlockDiagonalOperator([wrapper[d.get_local_product(ss, k)] for ss in np.arange(d.num_subdomains())]) for k in list(d.available_products())} if self.products: for k, v in self.products.iteritems(): setattr(self, '{}_product'.format(k), v) setattr(self, '{}_norm'.format(k), induced_norm(v)) self.linear = all(op.linear for op in operators.itervalues()) self.num_subdomains = self._impl.num_subdomains() self.neighboring_subdomains = [self._impl.neighbouring_subdomains(ss) for ss in np.arange(self.num_subdomains)] self.build_parameter_type(inherits=operators.values()) assert self.parameter_type == self._wrapper[d.parameter_type()]
def test_hstack(): np.random.seed(0) A = np.random.randn(2, 3) B = np.random.randn(2, 4) Aop = NumpyMatrixOperator(A) Bop = NumpyMatrixOperator(B) Cop = BlockOperator.hstack((Aop, Bop)) assert Cop.source.dim == 7 assert Cop.range.dim == 2