Skip to main content

Rust version of Scipy's Fisher exact test.

Project description

faster_fishers

Fast implementation of Fisher's exact test in Rust for Python.
Benchmarks show that this version is about 20x 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       114.5763 (1.0)        119.2121 (1.0)        116.1288 (1.0)       1.6386 (1.0)        115.5922 (1.0)       1.6018 (1.0)           2;1  8.6111 (1.0)           9           1
test_benchmark_scipy              2,403.8024 (20.98)    2,458.8598 (20.63)    2,423.2871 (20.87)    21.4687 (13.10)    2,415.6504 (20.90)    24.6082 (15.36)         1;0  0.4127 (0.05)          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}

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: maturin develop --release *python: pytest --benchmark-warmup -m benchmark

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

faster_fishers-0.1.1.tar.gz (15.2 kB view hashes)

Uploaded Source

Built Distributions

faster_fishers-0.1.1-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.whl (253.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ x86-64

faster_fishers-0.1.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl (251.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.5+ x86-64

faster_fishers-0.1.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (251.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.5+ x86-64

faster_fishers-0.1.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (251.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.5+ x86-64

faster_fishers-0.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (251.1 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.5+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page