Memory consumption for an average Obs reduced by another 5% Consider also dropping __dict__ for another 120 bytes per object |
||
---|---|---|
.github/workflows | ||
examples | ||
pyerrors | ||
tests | ||
.gitignore | ||
CHANGELOG.md | ||
conftest.py | ||
CONTRIBUTING.md | ||
LICENSE | ||
pytest.ini | ||
README.md | ||
setup.py |
pyerrors
pyerrors
is a python package for error computation and propagation of Markov chain Monte Carlo data.
It is based on the gamma method arXiv:hep-lat/0306017. Some of its features are:
- automatic differentiation as suggested in arXiv:1809.01289 (partly based on the autograd package)
- treatment of slow modes in the simulation as suggested in arXiv:1009.5228
- coherent error propagation for data from different Markov chains
- non-linear fits with x- and y-errors and exact linear error propagation based on automatic differentiation as introduced in [arXiv:1809.01289]
- real and complex matrix operations and their error propagation based on automatic differentiation (cholesky decomposition, calculation of eigenvalues and eigenvectors, singular value decomposition...)
There exist similar implementations of gamma method error analysis suites in
Installation
To install the most recent release of pyerrors
run
pip install git+https://github.com/fjosw/pyerrors.git@master
to install the current develop
version run
pip install git+https://github.com/fjosw/pyerrors.git@develop
Usage
The basic objects of a pyerrors analysis are instances of the class Obs
. They can be initialized with an array of Monte Carlo data (e.g. samples1
) and a name for the given ensemble (e.g. 'ensemble1'
). The gamma_method
can then be used to compute the statistical error, taking into account autocorrelations. The print
method outputs a human readable result.
import pyerrors as pe
obs1 = pe.Obs([samples1], ['ensemble1'])
obs1.gamma_method()
obs1.print()
Often one is interested in secondary observables which can be arbitrary functions of primary observables. pyerrors
overloads most basic math operations and numpy
functions such that the user can work with Obs
objects as if they were floats
import numpy as np
obs3 = 12.0 / obs1 ** 2 - np.exp(-1.0 / obs2)
obs3.gamma_method()
obs3.print()
More detailed examples can be found in the examples
folder: