Complex matrix multiplication speed up my explicitly coding the

derivatives
This commit is contained in:
Fabian Joswig 2021-10-18 17:36:49 +01:00
parent b1e5777586
commit 877b1a4467
2 changed files with 15 additions and 1 deletions

View file

@ -655,6 +655,9 @@ class CObs:
if isinstance(self.imag, Obs):
self.imag.gamma_method(**kwargs)
def is_zero(self):
return self.real == 0.0 and self.imag == 0.0
def conjugate(self):
return CObs(self.real, -self.imag)
@ -678,7 +681,14 @@ class CObs:
return -1 * (self - other)
def __mul__(self, other):
if hasattr(other, 'real') and hasattr(other, 'imag'):
if all(isinstance(i, Obs) for i in [self.real, self.imag, other.real, other.imag]):
return CObs(derived_observable(lambda x, **kwargs: x[0] * x[1] - x[2] * x[3],
[self.real, other.real, self.imag, other.imag],
man_grad=[other.real.value, self.real.value, -other.imag.value, -self.imag.value]),
derived_observable(lambda x, **kwargs: x[2] * x[1] + x[0] * x[3],
[self.real, other.real, self.imag, other.imag],
man_grad=[other.imag.value, self.imag.value, other.real.value, self.real.value]))
elif hasattr(other, 'real') and hasattr(other, 'imag'):
return CObs(self.real * other.real - self.imag * other.imag,
self.imag * other.real + self.real * other.imag)
else: