mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-15 23:00:25 +01:00
refactor: jackknife helper functions in linalg module refactored
This commit is contained in:
parent
bb91c37ac4
commit
6bc8102f87
1 changed files with 33 additions and 29 deletions
|
@ -174,6 +174,35 @@ def matmul(*operands):
|
||||||
return derived_array(multi_dot, operands)
|
return derived_array(multi_dot, operands)
|
||||||
|
|
||||||
|
|
||||||
|
def _exp_to_jack(matrix):
|
||||||
|
base_matrix = np.empty_like(matrix)
|
||||||
|
for index, entry in np.ndenumerate(matrix):
|
||||||
|
base_matrix[index] = entry.export_jackknife()
|
||||||
|
return base_matrix
|
||||||
|
|
||||||
|
|
||||||
|
def _imp_from_jack(matrix, name, idl):
|
||||||
|
base_matrix = np.empty_like(matrix)
|
||||||
|
for index, entry in np.ndenumerate(matrix):
|
||||||
|
base_matrix[index] = import_jackknife(entry, name, [idl])
|
||||||
|
return base_matrix
|
||||||
|
|
||||||
|
|
||||||
|
def _exp_to_jack_c(matrix):
|
||||||
|
base_matrix = np.empty_like(matrix)
|
||||||
|
for index, entry in np.ndenumerate(matrix):
|
||||||
|
base_matrix[index] = entry.real.export_jackknife() + 1j * entry.imag.export_jackknife()
|
||||||
|
return base_matrix
|
||||||
|
|
||||||
|
|
||||||
|
def _imp_from_jack_c(matrix, name, idl):
|
||||||
|
base_matrix = np.empty_like(matrix)
|
||||||
|
for index, entry in np.ndenumerate(matrix):
|
||||||
|
base_matrix[index] = CObs(import_jackknife(entry.real, name, [idl]),
|
||||||
|
import_jackknife(entry.imag, name, [idl]))
|
||||||
|
return base_matrix
|
||||||
|
|
||||||
|
|
||||||
def jack_matmul(*operands):
|
def jack_matmul(*operands):
|
||||||
"""Matrix multiply both operands making use of the jackknife approximation.
|
"""Matrix multiply both operands making use of the jackknife approximation.
|
||||||
|
|
||||||
|
@ -190,49 +219,24 @@ def jack_matmul(*operands):
|
||||||
name = operands[0].flat[0].real.names[0]
|
name = operands[0].flat[0].real.names[0]
|
||||||
idl = operands[0].flat[0].real.idl[name]
|
idl = operands[0].flat[0].real.idl[name]
|
||||||
|
|
||||||
def _exp_to_jack(matrix):
|
r = _exp_to_jack_c(operands[0])
|
||||||
base_matrix = np.empty_like(matrix)
|
|
||||||
for index, entry in np.ndenumerate(matrix):
|
|
||||||
base_matrix[index] = entry.real.export_jackknife() + 1j * entry.imag.export_jackknife()
|
|
||||||
return base_matrix
|
|
||||||
|
|
||||||
def _imp_from_jack(matrix):
|
|
||||||
base_matrix = np.empty_like(matrix)
|
|
||||||
for index, entry in np.ndenumerate(matrix):
|
|
||||||
base_matrix[index] = CObs(import_jackknife(entry.real, name, [idl]),
|
|
||||||
import_jackknife(entry.imag, name, [idl]))
|
|
||||||
return base_matrix
|
|
||||||
|
|
||||||
r = _exp_to_jack(operands[0])
|
|
||||||
for op in operands[1:]:
|
for op in operands[1:]:
|
||||||
if isinstance(op.flat[0], CObs):
|
if isinstance(op.flat[0], CObs):
|
||||||
r = r @ _exp_to_jack(op)
|
r = r @ _exp_to_jack_c(op)
|
||||||
else:
|
else:
|
||||||
r = r @ op
|
r = r @ op
|
||||||
return _imp_from_jack(r)
|
return _imp_from_jack_c(r, name, idl)
|
||||||
else:
|
else:
|
||||||
name = operands[0].flat[0].names[0]
|
name = operands[0].flat[0].names[0]
|
||||||
idl = operands[0].flat[0].idl[name]
|
idl = operands[0].flat[0].idl[name]
|
||||||
|
|
||||||
def _exp_to_jack(matrix):
|
|
||||||
base_matrix = np.empty_like(matrix)
|
|
||||||
for index, entry in np.ndenumerate(matrix):
|
|
||||||
base_matrix[index] = entry.export_jackknife()
|
|
||||||
return base_matrix
|
|
||||||
|
|
||||||
def _imp_from_jack(matrix):
|
|
||||||
base_matrix = np.empty_like(matrix)
|
|
||||||
for index, entry in np.ndenumerate(matrix):
|
|
||||||
base_matrix[index] = import_jackknife(entry, name, [idl])
|
|
||||||
return base_matrix
|
|
||||||
|
|
||||||
r = _exp_to_jack(operands[0])
|
r = _exp_to_jack(operands[0])
|
||||||
for op in operands[1:]:
|
for op in operands[1:]:
|
||||||
if isinstance(op.flat[0], Obs):
|
if isinstance(op.flat[0], Obs):
|
||||||
r = r @ _exp_to_jack(op)
|
r = r @ _exp_to_jack(op)
|
||||||
else:
|
else:
|
||||||
r = r @ op
|
r = r @ op
|
||||||
return _imp_from_jack(r)
|
return _imp_from_jack(r, name, idl)
|
||||||
|
|
||||||
|
|
||||||
def inv(x):
|
def inv(x):
|
||||||
|
|
Loading…
Add table
Reference in a new issue