docstring and test added for Corr.reweight

This commit is contained in:
Fabian Joswig 2021-11-02 14:19:00 +00:00
parent 3e60403a51
commit b07f16fe1c
3 changed files with 27 additions and 5 deletions

View file

@ -233,13 +233,28 @@ class Corr:
"""Reverse the time ordering of the Corr""" """Reverse the time ordering of the Corr"""
return Corr(self.content[::-1]) return Corr(self.content[::-1])
def reweight(self, weight): def reweight(self, weight, **kwargs):
"""Reweight the correlator.
Parameters
----------
weight : Obs
Reweighting factor. An Observable that has to be defined on a superset of the
configurations in obs[i].idl for all i.
Keyword arguments
-----------------
all_configs : bool
if True, the reweighted observables are normalized by the average of
the reweighting factor on all configurations in weight.idl and not
on the configurations in obs[i].idl.
"""
new_content = [] new_content = []
for t_slice in self: for t_slice in self:
if t_slice is None: if t_slice is None:
new_content.append(None) new_content.append(None)
else: else:
new_content.append(np.array(reweight(weight, t_slice))) new_content.append(np.array(reweight(weight, t_slice, **kwargs)))
return Corr(new_content) return Corr(new_content)
def T_symmetry(self, partner, parity=+1): def T_symmetry(self, partner, parity=+1):

View file

@ -1105,9 +1105,10 @@ def reweight(weight, obs, **kwargs):
Keyword arguments Keyword arguments
----------------- -----------------
all_configs -- if True, the reweighted observables are normalized by the average of all_configs : bool
the reweighting factor on all configurations in weight.idl and not if True, the reweighted observables are normalized by the average of
on the configurations in obs[i].idl. the reweighting factor on all configurations in weight.idl and not
on the configurations in obs[i].idl.
""" """
result = [] result = []
for i in range(len(obs)): for i in range(len(obs)):

View file

@ -54,6 +54,12 @@ def test_m_eff():
my_corr.m_eff('cosh') my_corr.m_eff('cosh')
my_corr.m_eff('sinh') my_corr.m_eff('sinh')
def test_reweighting():
my_corr = pe.correlators.Corr([pe.pseudo_Obs(10, 0.1, 't'), pe.pseudo_Obs(0, 0.05, 't')])
assert my_corr.reweighted is False
r_my_corr = my_corr.reweight(pe.pseudo_Obs(1, 0.1, 't'))
assert r_my_corr.reweighted is True
def test_T_symmetry(): def test_T_symmetry():
my_corr = pe.correlators.Corr([pe.pseudo_Obs(10, 0.1, 't'), pe.pseudo_Obs(0, 0.05, 't')]) my_corr = pe.correlators.Corr([pe.pseudo_Obs(10, 0.1, 't'), pe.pseudo_Obs(0, 0.05, 't')])
with pytest.warns(RuntimeWarning): with pytest.warns(RuntimeWarning):