https://github.com/basnijholt/pfapack
Efficient numerical computation of the Pfaffian for dense and banded skew-symmetric matrices
https://github.com/basnijholt/pfapack
linear-algebra numpy python scipy
Last synced: 20 days ago
JSON representation
Efficient numerical computation of the Pfaffian for dense and banded skew-symmetric matrices
- Host: GitHub
- URL: https://github.com/basnijholt/pfapack
- Owner: basnijholt
- License: other
- Created: 2020-03-02T18:47:45.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2025-03-24T22:03:16.000Z (about 1 month ago)
- Last Synced: 2025-04-06T05:59:22.710Z (25 days ago)
- Topics: linear-algebra, numpy, python, scipy
- Language: Fortran
- Homepage: https://arxiv.org/abs/1102.3440
- Size: 266 KB
- Stars: 16
- Watchers: 3
- Forks: 7
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# `pfapack`: Efficient numerical computation of the Pfaffian for dense and banded skew-symmetric matrices
Code and algorithms are taken from [arXiv:1102.3440](https://arxiv.org/abs/1102.3440) which is authored by [Michael Wimmer](https://michaelwimmer.org/).
[](https://github.com/basnijholt/pfapack/actions?query=workflow%3Apytest)
[](https://codecov.io/gh/basnijholt/pfapack)
[](https://pfapack.readthedocs.io)
[](https://pypi.org/project/pfapack/)
[](https://pypi.org/project/pfapack/)
[](https://github.com/astral-sh/ruff)### Install
```bash
pip install pfapack
```Or using conda:
```bash
conda install -c conda-forge pfapack
```## Usage
```python
from pfapack import pfaffian as pf
import numpy.randomA = numpy.random.rand(100, 100)
A = A - A.T
pfa1 = pf.pfaffian(A)
pfa2 = pf.pfaffian(A, method="H")
pfa3 = pf.pfaffian_schur(A)
print(pfa1, pfa2, pfa3)
```The package includes optimized C/FORTRAN implementations that can be used for better performance:
```python
from pfapack.ctypes import pfaffian as cpf
pfa1 = cpf(A)
pfa2 = cpf(A, method="H")
print(pfa1, pfa2)
```> [!WARNING]
> On Windows, the C bindings require MSYS2 to be installed with the MinGW64 toolchain. The current Windows build system has some limitations and requires external dependencies. We welcome contributions to improve the Windows build system, such as using Microsoft's toolchain (MSVC) directly or finding better ways to handle the OpenBLAS dependency.## Citing
If you have used `pfapack` in your research, please cite it using the following `bib` entry:
```
@article{wimmer2012algorithm,
title={Efficient numerical computation of the pfaffian for dense and banded skew-symmetric matrices},
author={Michael Wimmer},
journal={ACM Transactions on Mathematical Software (TOMS)},
volume={38},
number={4},
pages={1--17},
year={2012},
publisher={ACM New York, NY, USA}
}
```## License
MIT License## Contributions
- Bas Nijholt
- [Michael Wimmer (author of the algorithms)](https://arxiv.org/abs/1102.3440)