faster-fishers 0.1.1

Rust version of Scipy's Fisher exact test.
Documentation

faster_fishers

Fast implementation of Fisher's exact test in Rust for Python.
Benchmarks show that this version is about 30x faster than scipy's version when running on a large range of inputs and about 10x faster when running on 1 input:

---------------------------------------------------------------------------------------------- benchmark: 2 tests ---------------------------------------------------------------------------------------------
Name (time in ms)                        Min                   Max                  Mean             StdDev                Median                IQR            Outliers      OPS            Rounds  Iterations
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
test_benchmark_faster_fischer        59.3260 (1.0)         65.8875 (1.0)         60.6495 (1.0)       1.4096 (1.0)         60.3958 (1.0)       0.4898 (1.0)           1;2  16.4882 (1.0)          17           1
test_benchmark_scipy              1,814.7296 (30.59)    1,864.8661 (28.30)    1,833.9733 (30.24)    21.2606 (15.08)    1,821.9229 (30.17)    32.0363 (65.41)         1;0   0.5453 (0.03)          5           1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Usage:

>>> import numpy as np
>>> import faster_fishers
>>> lefts, right, two_tails = faster_fishers.exact(np.array([1, 3]), np.array([2, 5]), np.array([1, 4]), np.array([5, 50]))
>>> lefts
array([0.9166666666666647, 0.9963034765672586])
>>> rights
array([0.5833333333333326, 0.03970749246529451])
>>> two_tails
array([1.0, 0.03970749246529451])

Developing

Building with cargo

  • Run cargo build in the main directory to build the project.

Publishing on pypi

docker run --rm -v $(pwd):/io ghcr.io/pyo3/maturin publish -u {USER} -p {PASSWORD}

Publishing on cargo

todo

Using locally

  • Install environment: poetry install
  • Add environment to current shell poetry shell
  • Install faster_fishers in current environment: maturin develop
  • Check that it works: python -c "import faster_fishers; print(dir(faster_fishers))"

To try the library in a different environment:
1. maturin build --release
2. cd folder
3. pip install {wheel_path}.whl

Benchmarks

  • Make sure to compile in release mode with maturin first: RUSTFLAGS='-C target-cpu=native' maturin develop --release *python: pytest --benchmark-warmup -m benchmark