Skip to content

Commit 147ea39

Browse files
author
m.lohmann
committed
Fields can now be added to the "highest" one
1 parent 9003572 commit 147ea39

File tree

4 files changed

+124
-119
lines changed

4 files changed

+124
-119
lines changed

odl/operator/operator.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,7 +1071,6 @@ class OperatorSum(Operator):
10711071
10721072
The sum is only well-defined for `Operator` instances where
10731073
`Operator.range` is a `LinearSpace`.
1074-
10751074
"""
10761075

10771076
def __init__(self, left, right, tmp_ran=None, tmp_dom=None):
@@ -1106,8 +1105,14 @@ def __init__(self, left, right, tmp_ran=None, tmp_dom=None):
11061105
rn(3).element([ 2., 4., 6.])
11071106
"""
11081107
if left.range != right.range:
1109-
raise OpTypeError('operator ranges {!r} and {!r} do not match'
1110-
''.format(left.range, right.range))
1108+
if isinstance(left.range, Field) and \
1109+
isinstance(right.range, Field):
1110+
range = left.range + right.range
1111+
else:
1112+
raise OpTypeError('operator ranges {!r} and {!r} do not match'
1113+
''.format(left.range, right.range))
1114+
else:
1115+
range = left.range
11111116
if not isinstance(left.range, (LinearSpace, Field)):
11121117
raise OpTypeError('`left.range` {!r} not a `LinearSpace` or '
11131118
'`Field` instance'.format(left.range))
@@ -1124,7 +1129,7 @@ def __init__(self, left, right, tmp_ran=None, tmp_dom=None):
11241129
''.format(tmp_dom, left.domain))
11251130

11261131
super(OperatorSum, self).__init__(
1127-
left.domain, left.range,
1132+
left.domain, range,
11281133
linear=left.is_linear and right.is_linear)
11291134
self.__left = left
11301135
self.__right = right

odl/set/sets.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,24 @@ def field(self):
310310
"""
311311
return self
312312

313+
def __add__(self, other):
314+
if isinstance(self, ComplexNumbers) or \
315+
isinstance(other, ComplexNumbers):
316+
return ComplexNumbers()
317+
elif isinstance(self, RealNumbers) or isinstance(other, RealNumbers):
318+
return RealNumbers()
319+
elif isinstance(self, Integers) and isinstance(other, Integers):
320+
return Integers()
321+
else:
322+
raise NotImplementedError('Addition of sets {!r} and {!r} '
323+
'not implemented'.format(self, other))
324+
325+
def __radd__(self, other):
326+
if other == 0:
327+
return self
328+
else:
329+
return self.__add__(other)
330+
313331

314332
class ComplexNumbers(Field):
315333

@@ -428,10 +446,7 @@ def __hash__(self):
428446

429447
def element(self, inp=None):
430448
"""Return a real number from ``inp`` or from scratch."""
431-
if inp is not None:
432-
return float(inp)
433-
else:
434-
return 0.0
449+
return float(getattr(inp, 'real', 0.0))
435450

436451
@property
437452
def examples(self):

0 commit comments

Comments
 (0)