Commit 59bf1166 authored by Martin Reinecke's avatar Martin Reinecke
Browse files

fixes

parent 570f8d8a
Pipeline #29515 passed with stages
in 3 minutes and 59 seconds
...@@ -15,7 +15,7 @@ class BlockDiagonalOperator(EndomorphicOperator): ...@@ -15,7 +15,7 @@ class BlockDiagonalOperator(EndomorphicOperator):
""" """
super(BlockDiagonalOperator, self).__init__() super(BlockDiagonalOperator, self).__init__()
self._operators = operators self._operators = operators
self._domain = MultiDomain( self._domain = MultiDomain.make(
{key: op.domain for key, op in self._operators.items()}) {key: op.domain for key, op in self._operators.items()})
self._cap = self._all_ops self._cap = self._all_ops
for op in self._operators.values(): for op in self._operators.values():
...@@ -43,12 +43,13 @@ class BlockDiagonalOperator(EndomorphicOperator): ...@@ -43,12 +43,13 @@ class BlockDiagonalOperator(EndomorphicOperator):
res = {} res = {}
for key in self._operators.keys(): for key in self._operators.keys():
res[key] = self._operators[key]*op._operators[key] res[key] = self._operators[key]*op._operators[key]
return res return BlockDiagonalOperator(res)
def _combine_sum(self, op, selfneg, opneg): def _combine_sum(self, op, selfneg, opneg):
from ..operators.sum_operator import SumOperator
res = {} res = {}
for key in self._operators.keys(): for key in self._operators.keys():
res[key] = SumOperator.make([self._operators[key], res[key] = SumOperator.make([self._operators[key],
op._operators[key]], op._operators[key]],
[selfneg, opneg]) [selfneg, opneg])
return res return BlockDiagonalOperator(res)
...@@ -121,6 +121,15 @@ class MultiField(object): ...@@ -121,6 +121,15 @@ class MultiField(object):
return MultiField({key: Field.full(dom, val) return MultiField({key: Field.full(dom, val)
for key, dom in domain.items()}) for key, dom in domain.items()})
def to_global_data(self):
return {key: val.to_global_data() for key, val in self._val.items()}
@staticmethod
def from_global_data(domain, arr, sum_up=False):
return MultiField({key: Field.from_global_data(domain[key],
val, sum_up)
for key, val in arr.items()})
def norm(self): def norm(self):
""" Computes the L2-norm of the field values. """ Computes the L2-norm of the field values.
......
...@@ -32,7 +32,6 @@ class Test_Functionality(unittest.TestCase): ...@@ -32,7 +32,6 @@ class Test_Functionality(unittest.TestCase):
assert_allclose(f1.vdot(f2), np.conj(f2.vdot(f1))) assert_allclose(f1.vdot(f2), np.conj(f2.vdot(f1)))
def test_lock(self): def test_lock(self):
s1 = ift.RGSpace((10,))
f1 = ift.full(dom, 27) f1 = ift.full(dom, 27)
assert_equal(f1.locked, False) assert_equal(f1.locked, False)
f1.lock() f1.lock()
...@@ -42,13 +41,26 @@ class Test_Functionality(unittest.TestCase): ...@@ -42,13 +41,26 @@ class Test_Functionality(unittest.TestCase):
assert_equal(f1.locked_copy() is f1, True) assert_equal(f1.locked_copy() is f1, True)
def test_fill(self): def test_fill(self):
s1 = ift.RGSpace((10,)) f1 = ift.full(dom, 27)
f1 = ift.full(s1, 27) f1.fill(10)
assert_equal((f1.fill(10) == 10).all(), True) for val in f1.values():
assert_equal((val == 10).all(), True)
def test_dataconv(self): def test_dataconv(self):
s1 = ift.RGSpace((10,)) f1 = ift.full(dom, 27)
ld = np.arange(ift.dobj.local_shape(s1.shape)[0]) f2 = ift.from_global_data(dom, f1.to_global_data())
gd = np.arange(s1.shape[0]) for key, val in f1.items():
assert_equal(ld, ift.from_local_data(s1, ld).local_data) assert_equal(val.local_data, f2[key].local_data)
assert_equal(gd, ift.from_global_data(s1, gd).to_global_data())
def test_blockdiagonal(self):
op = ift.BlockDiagonalOperator({"d1": ift.ScalingOperator(20., dom["d1"])})
op2 = op*op
assert_equal(type(op2), ift.BlockDiagonalOperator)
f1 = op2(ift.full(dom, 1))
for val in f1.values():
assert_equal((val == 400).all(), True)
op2 = op+op
assert_equal(type(op2), ift.BlockDiagonalOperator)
f1 = op2(ift.full(dom, 1))
for val in f1.values():
assert_equal((val == 40).all(), True)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment