mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-14 19:43:41 +02:00
feat: added support for addition and multiplication of complex numbers (#209)
to Corr objects.
This commit is contained in:
parent
01ef97ffdf
commit
7f8c2ce33b
4 changed files with 21 additions and 2 deletions
|
@ -1075,7 +1075,7 @@ class Corr:
|
||||||
newcontent.append(self.content[t] + y.content[t])
|
newcontent.append(self.content[t] + y.content[t])
|
||||||
return Corr(newcontent)
|
return Corr(newcontent)
|
||||||
|
|
||||||
elif isinstance(y, (Obs, int, float, CObs)):
|
elif isinstance(y, (Obs, int, float, CObs, complex)):
|
||||||
newcontent = []
|
newcontent = []
|
||||||
for t in range(self.T):
|
for t in range(self.T):
|
||||||
if _check_for_none(self, self.content[t]):
|
if _check_for_none(self, self.content[t]):
|
||||||
|
@ -1103,7 +1103,7 @@ class Corr:
|
||||||
newcontent.append(self.content[t] * y.content[t])
|
newcontent.append(self.content[t] * y.content[t])
|
||||||
return Corr(newcontent)
|
return Corr(newcontent)
|
||||||
|
|
||||||
elif isinstance(y, (Obs, int, float, CObs)):
|
elif isinstance(y, (Obs, int, float, CObs, complex)):
|
||||||
newcontent = []
|
newcontent = []
|
||||||
for t in range(self.T):
|
for t in range(self.T):
|
||||||
if _check_for_none(self, self.content[t]):
|
if _check_for_none(self, self.content[t]):
|
||||||
|
|
|
@ -784,6 +784,8 @@ class Obs:
|
||||||
else:
|
else:
|
||||||
if isinstance(y, np.ndarray):
|
if isinstance(y, np.ndarray):
|
||||||
return np.array([self + o for o in y])
|
return np.array([self + o for o in y])
|
||||||
|
elif isinstance(y, complex):
|
||||||
|
return CObs(self, 0) + y
|
||||||
elif y.__class__.__name__ in ['Corr', 'CObs']:
|
elif y.__class__.__name__ in ['Corr', 'CObs']:
|
||||||
return NotImplemented
|
return NotImplemented
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -749,3 +749,13 @@ def test_corr_item():
|
||||||
corr_mat = pe.Corr(np.array([[corr_aa, corr_ab], [corr_ab, corr_aa]]))
|
corr_mat = pe.Corr(np.array([[corr_aa, corr_ab], [corr_ab, corr_aa]]))
|
||||||
corr_mat.item(0, 0)
|
corr_mat.item(0, 0)
|
||||||
assert corr_mat[0].item(0, 1) == corr_mat.item(0, 1)[0]
|
assert corr_mat[0].item(0, 1) == corr_mat.item(0, 1)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_complex_add_and_mul():
|
||||||
|
o = pe.pseudo_Obs(1.0, 0.3, "my_r345sfg16£$%&$%^%$^$", samples=47)
|
||||||
|
co = pe.CObs(o, 0.341 * o)
|
||||||
|
for obs in [o, co]:
|
||||||
|
cc = pe.Corr([obs for _ in range(4)])
|
||||||
|
cc += 2j
|
||||||
|
cc = cc * 4j
|
||||||
|
cc.real + cc.imag
|
||||||
|
|
|
@ -1333,3 +1333,10 @@ def test_vec_gm():
|
||||||
cc = pe.Corr(obs)
|
cc = pe.Corr(obs)
|
||||||
pe.gm(cc, S=4.12)
|
pe.gm(cc, S=4.12)
|
||||||
assert np.all(np.vectorize(lambda x: x.S["qq"])(cc.content) == 4.12)
|
assert np.all(np.vectorize(lambda x: x.S["qq"])(cc.content) == 4.12)
|
||||||
|
|
||||||
|
def test_complex_addition():
|
||||||
|
o = pe.pseudo_Obs(34.12, 1e-4, "testens")
|
||||||
|
r = o + 2j
|
||||||
|
assert r.real == o
|
||||||
|
r = r * 1j
|
||||||
|
assert r.imag == o
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue