Skip to main content

Efficiently generate samples from the Polya-Gamma distribution using a NumPy/SciPy compatible interface.

Project description

Polya-Gamma

PyPI - Wheel CI Codecov PyPI - License PyPI Conda

Efficiently generate samples from the Polya-Gamma distribution using a NumPy/SciPy compatible interface.

Why?

If you are reading this, you probably have already used the pypolyagamma package before. It is a great package that I have also used in the past, however I encountered several issues:

  • Generating an array of samples is awkward because it requires using a list comprehension if parameter values are scalars or have pre-allocated arrays of a known size to pass for both the parameters and the output array. Moreover, broadcasting of input is not supported and thus requiring the user to write another layer to support it.
  • It requires extra effort to be used in multiprocessing because pickling of the sampler is not supported.
  • There is no parameter validation supported meaning it is easy to get the wrong samples if you do not check the inputs manually.
  • The sampling API is very different from the ones used by popular packages like numpy/scipy, making it harder to just "plug-n-play" in existing code bases.
  • It does not allow passing in an instance of a np.random.RandomState or np.random.Generator for seeding, requiring extra effort when changing the seed if used in a larger code base.
  • The C++ code wrapped by the package is GPLv3 licensed, making it difficult to use the source code in a project that prefers licenses like MIT/Apache/BSD.

The above issues are the reason why this package exists. And the aim of polyagamma is to "fix" them.

Features

  • Input parameters can be scalars, arrays or both; allowing for easy generation of multi-dimensional samples without specifying the size.
  • Input validation is done internally with clear error messages upon failure.
  • It is flexible and allows the user to sample using one of 4 available algorithms.
  • Implements functions to compute the CDF and density of the distribution as well as their logarithms.
  • Random number generation is thread safe.
  • The functional API resembles that of common numpy/scipy functions, therefore making it easy to plugin to existing libraries.
  • polyagamma is optimized for performance and tests show that it is faster than other implementations.
  • Pre-built wheels are provided for easy installation on Linux, MacOS and Windows.

Examples

Python

import array
import numpy as np
from polyagamma import random_polyagamma

# generate a PG(1, 0) sample
o = random_polyagamma()

# Get a 5 by 1 array of PG(1, 2) variates.
o = random_polyagamma(z=2, size=5)

# We can pass sequences as input. Numpy's broadcasting rules apply here.
# Get a 10 by 2 array where column 1 is PG(2, -10) and column 2 is PG(1, 10)
o = random_polyagamma([2, 1], [-10, 10], size=(10, 2))
z = [[1.5, 2, -0.75, 4, 5],
     [9.5, -8, 7, 6, -0.9]]
o = random_polyagamma(1, z)

# We can pass an output array using the `out` parameter. It does not have to be
# a numpy array. it can be any object that implements the array or buffer protocols.
# As long as its type is 64bit float, contiguous in memory and aligned (e.g. Python's array object).
numpy_out = np.empty(5)
array_out = array.array('d', [0] * 5)
random_polyagamma(out=numpy_out)
print(numpy_out)
random_polyagamma(out=array_out)
print(array_out)

# one can choose a sampling method from {devroye, alternate, gamma, saddle}.
# If not given, the default behaviour is a hybrid sampler that picks the most
# efficient method based on the input values.
o = random_polyagamma(method="saddle")

# one can also use an existing instance of `numpy.random.Generator` as a parameter.
# This is useful to reproduce samples generated via a given seed.
rng = np.random.default_rng(12345)
o = random_polyagamma(random_state=rng)

# If one is using a `numpy.random.RandomState` instance instead of the `Generator`
# class, the object's underlying bitgenerator can be passed as the value of random_state
bit_gen = np.random.RandomState(12345)._bit_generator
o = random_polyagamma(random_state=bit_gen)

# When passing a large input array for the shape parameter `h`, parameter value
# validation checks can be disabled if the values are guaranteed to be positive
# to avoid some overhead, which may boost performance.
large_h = np.ones(1000000)
o = random_polyagamma(large_h, disable_checks=True)

Functions to compute the density and CDF are available. Broadcasting of input is supported.

from polyagamma import polyagamma_pdf, polyagamma_cdf

>>> polyagamma_pdf(0.1)
# 3.613955566329298
>>> polyagamma_cdf([1, 2], h=2, z=1)
# array([0.95637847, 0.99963397])
>>> polyagamma_pdf([2, 0.1], h=[[1, 2], [3, 4]], return_log=True)
# array([[   -8.03172733,  -489.17101125]
#        [   -3.82023942, -1987.09156971]])
>>> polyagamma_cdf(4, z=[-100, 0, 2], return_log=True)
# array([ 3.72007598e-44, -3.40628215e-09, -1.25463528e-12])

Cython

The package also provides low-level functions that can be imported in cython modules. They are:

  • random_polyagamma
  • random_polyagamma_fill
  • random_polyagamma_fill2

Refer to the pgm_random.h header file for more info about the function signatures. Below is an example of how these functions can be used.

from cpython.pycapsule cimport PyCapsule_GetPointer
from polyagamma cimport random_polyagamma_fill, DEVROYE
from numpy.random cimport bitgen_t
import numpy as np

# assuming there exists an instance of the Generator class called `rng`.
bitgenerator = rng._bit_generator
# get pointer to the underlying bitgenerator struct
cdef bitgen_t* bitgen = <bitgen_t*>PyCapsule_GetPointer(bitgenerator.capsule, "BitGenerator")
# set distribution parameters
cdef double h = 1, z = 0
# get a memory view of the array to store samples in
cdef double[:] out = np.empty(300)
with bitgenerator.lock, nogil:
    random_polyagamma_fill(bitgen, h, z, DEVROYE, <size_t>out.shape[0], &out[0])
print(out.base)
...

PyMC

As of pymc>=4.0.0b1, this distribution can be accessed as a PyMC distribution object. See the pymc documentation for more details.

C

For an example of how to use polyagamma in a C program, see here.

Dependencies

  • Numpy >= 1.19.0

Installation

To get the latest version of the package, one can install it by downloading the wheel/source distribution from the releases page, or using pip with the following shell command:

$ pip install --pre -U polyagamma

or using conda with the following command:

$ conda install -c conda-forge polyagamma

Alternatively, once can install from source with the following shell commands:

$ git clone https://github.com/zoj613/polyagamma.git
$ cd polyagamma/
$ pip install .

Benchmarks

Below are runtime plots of 20000 samples generated for various values of h and z, using each method. We restrict h to integer values to accomodate the devroye method, which cannot be used for non-integer h. The version of the package used to generate them is v1.3.1.

Generally:

  • The gamma method is slowest and should be avoided in cases where speed is paramount.
  • For h >= 8, the saddle method is the fastest for any value of z.
  • For 0 <= z <= 1 and integer h <= 4, the devroye method should be preferred.
  • For z > 1 and 1 < h < 8, the alternate method is the most efficient.
  • For h > 50 (or any value large enough), the normal approximation to the distribution is fastest (not reported in the above plot but it is around 10 times faster than the saddle method and also equally accurate).

Therefore, we devise a "hybrid/default" sampler that picks a sampler based on the above guidelines.

We also benchmark the hybrid sampler runtime with the sampler found in the pypolyagamma package (version 1.2.3). The version of NumPy we use is 1.19.0. We compare our sampler to the pgdrawv functions provided by the package. Below are runtime plots of 20000 samples for each value of h and z. Values of h range from 0.1 to 50, while z is set to 0, 2.5, 5, and 10.

It can be seen that when generating many samples at once for any given combination of parameters, polyagamma outperforms the pypolyagamma package by a large margin. The exception is when the scale parameter is very small (e.g h < 1). It is also worth noting that the pypolygamma package is on average faster than ours at generating exactly 1 sample value from the distribution. This is mainly due to the overhead introduced by creating the bitgenerator + acquiring/releasing the thread lock + doing parameter validation checks at every call to the function. This overhead can somewhat be mitigated by passing in a random generator instance at every call to the polyagamma function. To eliminate this overhead, it is best to use the Cython functions directly. Below is a timing example to demonstrate the benefit of passing a generator explicitly:

In [3]: rng = np.random.SFC64(1)

In [4]: %timeit random_polyagamma()
90 µs ± 1.65 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [5]: %timeit random_polyagamma(random_state=rng)
1.69 µs ± 6.96 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

To generate the above plots locally, run

$ pip install -r scripts/requirements.txt
$ python scripts/benchmark.py --size=<some size> --z=<z value>

Note that the runtimes may differ than the ones reported here, depending on the machine this script is ran on.

Distribution Plots

Below is a visualization of the Cumulative distribution and density functions for various values of the parameters.

We can compare these plots to the Kernel density estimate and empirical CDF plots generated from 20000 random samples using each of the available methods.

Contributing

All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome.

To submit a PR, follow the steps below:

  1. Fork the repo.
  2. Install and setup the dev environment with pip install -r requirements-dev.txt or make dev.
  3. Start writing your changes, including unittests.
  4. Run tests to make sure they all pass with make test.
  5. Once finished, you can submit a PR for review.

References

  • Luc Devroye. "On exact simulation algorithms for some distributions related to Jacobi theta functions." Statistics & Probability Letters, Volume 79, Issue 21, (2009): 2251-2259.
  • Polson, Nicholas G., James G. Scott, and Jesse Windle. "Bayesian inference for logistic models using Pólya–Gamma latent variables." Journal of the American statistical Association 108.504 (2013): 1339-1349.
  • J. Windle, N. G. Polson, and J. G. Scott. "Improved Polya-gamma sampling". Technical Report, University of Texas at Austin, 2013b.
  • Windle, Jesse, Nicholas G. Polson, and James G. Scott. "Sampling Polya-Gamma random variates: alternate and approximate techniques." arXiv preprint arXiv:1405.0506 (2014)
  • Windle, J. (2013). Forecasting high-dimensional, time-varying variance-covariance matrices with high-frequency data and sampling Pólya-Gamma random variates for posterior distributions derived from logistic likelihoods.(PhD thesis). Retrieved from http://hdl.handle.net/2152/21842 .

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

polyagamma-1.3.6.tar.gz (42.3 kB view details)

Uploaded Source

Built Distributions

polyagamma-1.3.6-pp39-pypy39_pp73-win_amd64.whl (120.6 kB view details)

Uploaded PyPy Windows x86-64

polyagamma-1.3.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (140.3 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

polyagamma-1.3.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (118.3 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

polyagamma-1.3.6-cp312-cp312-win_amd64.whl (124.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

polyagamma-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl (521.2 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

polyagamma-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (513.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

polyagamma-1.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (502.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

polyagamma-1.3.6-cp312-cp312-macosx_11_0_arm64.whl (98.8 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

polyagamma-1.3.6-cp312-cp312-macosx_10_9_x86_64.whl (133.0 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

polyagamma-1.3.6-cp311-cp311-win_amd64.whl (123.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

polyagamma-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl (597.8 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

polyagamma-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (542.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

polyagamma-1.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (540.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

polyagamma-1.3.6-cp311-cp311-macosx_11_0_arm64.whl (99.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

polyagamma-1.3.6-cp311-cp311-macosx_10_9_x86_64.whl (143.1 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

polyagamma-1.3.6-cp310-cp310-win_amd64.whl (129.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

polyagamma-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl (586.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

polyagamma-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (527.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

polyagamma-1.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (525.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

polyagamma-1.3.6-cp310-cp310-macosx_11_0_arm64.whl (138.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

polyagamma-1.3.6-cp310-cp310-macosx_10_9_x86_64.whl (145.4 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

polyagamma-1.3.6-cp39-cp39-win_amd64.whl (126.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

polyagamma-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl (555.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

polyagamma-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (515.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

polyagamma-1.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (502.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

polyagamma-1.3.6-cp39-cp39-macosx_11_0_arm64.whl (100.6 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

polyagamma-1.3.6-cp39-cp39-macosx_10_9_x86_64.whl (135.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

File details

Details for the file polyagamma-1.3.6.tar.gz.

File metadata

  • Download URL: polyagamma-1.3.6.tar.gz
  • Upload date:
  • Size: 42.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for polyagamma-1.3.6.tar.gz
Algorithm Hash digest
SHA256 0b823b4b386fc7ac5e1a1829b123eaefe881bce078240693c209a30b9da3d7b2
MD5 c77dc5ded22a7547b26f9d6fc63eda79
BLAKE2b-256 1e8c55f90cb1c19f7a5ddecec62c3d0cd27e8114c0739938caa947d6a4ecb664

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 9596f15188aa81392f84506c6faa0505aa3732ba4dc3243b872b377850a47b43
MD5 4f9f5be66d2ff4c22138a655392e3429
BLAKE2b-256 2b297f3c5c488c49b75f7f81543cf45a2a735f24180c21f88365106390f621a3

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fdc724f1fe7fd920cda3ebc02d55910cea1e85cb7b6f264502fba7acd9176db
MD5 33002b1f322df6bdd459c958b1523f82
BLAKE2b-256 231b7101a4fe154aca4b03adf681a7bcec93d50fba141069c5d975418ffd23a4

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6d742351d9f51d09867adfe528244b7cf0c64c0f81726a8c394d820525c1f3ef
MD5 e45af0e7c0434d01b8a9a517e707948f
BLAKE2b-256 26c965f48f0a1d05ea52bbb6f95d5032b3a2741aba83053a3eed0bc3567318de

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab049cfe0c3b97b2ddb52efe4dbb1661fc7c87d1f604cd5ebb521d4651acf2dd
MD5 801e83fb7ae10339c1926218172a7327
BLAKE2b-256 14f3377c5edd5d1d3a234aff220c2d30f2e2976ef2cc3be3dbe357b98d64eeac

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 01a9007880ef29a8ebd524253d84dc40ab07d1e27cbb1cbab176d17625aa0656
MD5 23e7856752beff6167636b6cb3f8e3f5
BLAKE2b-256 cefeed4a34dc802014591486cc10bd8780c355770dbe28f07397d2543ed39e12

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1a9ed1d04a54caf11197176e5e0f70796cc3269df08be9cb1cfe7eba68685f31
MD5 d09f45ab715a5e70ece5ab562c86b471
BLAKE2b-256 947be9311f39eb62ef51be9fd1eb4c6ef42bc6d28fc07237eaec8fc214b384b7

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c00be46911b641471c7d18458b3bc1a934c9d904980c8ba00b4f798a716c6fa4
MD5 9280433158b031cb2f1fe72484a2c7f2
BLAKE2b-256 1487526200cdccd474a88a4aef0bd989b533cf2048eb7986716ecde1c5fb7985

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 741b9c230242776f0f082e98d025462df57dc6911c9ba29eaf1ff5c19ca012c6
MD5 b0e89daddd72894dfa7f1e535cd708c4
BLAKE2b-256 67bda929d8f4e3a280b593be9f700eeb46455547ffb9e79e0dcf0857853bbc72

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 816db8b388e3727f9cb5d51adebff17998a1f38629f486c3c5c445e9190ba304
MD5 8e37b07039acff4fbe4f2ee3fd9893e2
BLAKE2b-256 3e1e3051db3bfe82d2a6fa95fedc9f0f9534d35ce02a90cebc15d41a995389a0

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 255b3155b1d0ffd93140a7371a7aee4ea70f57a4c3b1b9934360061860fc35b9
MD5 cd2849dc4fe00dd08bfae35da17e930d
BLAKE2b-256 d61634add2405946cb6d234a650f41e8d4fb39aece34397b205b23470ec3d3c8

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ec3aef31972ac9612d6c5dfbda19cc68e93fd96054bdabb0ca167e35f3074db9
MD5 d1b538fd8c665af8cc1b31f7485873ca
BLAKE2b-256 876979124fba0f38c0f7a7fef68f3a57f591bf59c311526b6c136d2444435943

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 574ae551fde9d372e96a78f42d6adba2e46ae623e996a578d1f88cc606f965a7
MD5 c8138f1572ebc1c9676e5da1625ba318
BLAKE2b-256 abfd75e87d825ef27cd982e5efd1ac7ad6c0466499d3ed9f2d02fa5e75325dda

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7b6503402bb5be10079a1713c9fb9d5c24c21e5bf6fe1d5b0e9ae6f6efa414b5
MD5 0585ea7cd92c36e2aa083b1940bd4884
BLAKE2b-256 ec38b7a3e53e8cfd1678526bf9438c14fff234b30ec544a8fd90d41c9dd8ce89

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ebdc87767b698b5b28f407d1f9db34282204fb780671d9e2784d2e22d8b7d505
MD5 bd9c2f08f3f0365740c0983d88d027a0
BLAKE2b-256 8d956041e4196589de10843c56c673f4f8b42e703bec9580ce5fc241c15db15b

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a2131264b896ae85063656c12b3f738ea7791ddb47941c1d61dcbb3161f0faca
MD5 7b371c2e1da61ac157d82e0864e56ff2
BLAKE2b-256 a0e335c3277c5d06ac73717434e01e16ed780791ff134cd13923cf5729839f96

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 de3d2a9626be11e2b89f039caac454467edeb9445523caf98af925ce39a0a2ec
MD5 bea1d4408a49bb38797d49b5491bafb0
BLAKE2b-256 f72bea6dcbe704e984ba0fda7f5ce587b4e6b380039739d6e8d5ce81d93bf193

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d2dbb5ea91b5a1e25ac75963a809fa83a2b157001664c9bf637bd6f5579494b7
MD5 f9459c4f1a4d13300f87549871f8cb94
BLAKE2b-256 2eba2f6ed20af5651e0f029be29bbeb64cd476fecad3fa07dcdc75dfab7ea3e6

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f475ed37daca61a65a507bd98831b8052b078f6b2fa9c68a26a0c68c389c56c9
MD5 61e45fd1f679b4168eaa7f663c271747
BLAKE2b-256 2db7bcf3a94f568b51db330b6e05e16713ba8c41657a3ce335678c25b8225dbc

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8dae815fb22d6cc50146c03bb4183d96c9d0febfa242fa42a1afeac7e2438914
MD5 5a2c4f889ec5f87474ed88cefddddf7e
BLAKE2b-256 2fe8009fd18d7f8e0d273a9b92ed1e599c0392c859776735faa4a5c300315e3b

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9871e29fe3652604c9fb03d55ba7954f5fbef97ab1d1ee06d499f88bec7a90ed
MD5 5321d7a1dc0ea4c7174dc38759c63692
BLAKE2b-256 ab47525addeab78bca58f38f40a92181d3b9b7d679d5dfe7208582c7852fab4a

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 167bd98163b2d73bb5180f07967520142a5006c817249bc86374ac7e67c40c4b
MD5 ad01e2d91902bd6d7850186e479e0fcb
BLAKE2b-256 4f7cf0e37cc1cf959e346dbabd4223c0400ebe37ce11e53fa5ad77d8bd22eb13

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: polyagamma-1.3.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 126.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5a220ea378cf9f999b5eba716a76b209cb4abdc9fa7cf8fafa07795fb46e5444
MD5 b35e15c5c1d1ebf55fff998fbc55a598
BLAKE2b-256 a9b0c754fceaa22d01a460b7f67a11473a186860862982f446616ecee8822793

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e74fce6a9d035ceb1ad6e11ca59c37111b8b74f830a5640a8718e5b75e3f4d95
MD5 64c60e23ce136da476ecec0e3d07e234
BLAKE2b-256 5877ba97ae0185f1f89720fe7d49b4beb72d303d0f16e2009173e9a724a4c9d8

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d4de377d82eb38af39b810311c7d3fee3047b81ec5932380942ab64fd6ec129
MD5 036cd70526f7e1a77a7f17a5d25a0441
BLAKE2b-256 67de317771b10b854ac70de64d65ce750721ed42d90e45e7a13505aaba83e25d

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2f32b0f863c860adc1be6308cd20b0a0d07e1041f46623c9f16aef3da979f926
MD5 e258ddc0f5e50376ea987ef39da3ec16
BLAKE2b-256 29804854df6a7d845cfc3fac90a4ab3c0435d2d22f5d8a973eca10296a6533d7

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 437caa1e24cd4b9db7e69f0323293d0f5b70d6f294dcc80731885090e188172f
MD5 484d7560c838c42a93e9b9630a951c1b
BLAKE2b-256 8a2abadbd692fbc64981a9b1300d3cf476192df6ac7b2bc1e08fb2a814ab8af6

See more details on using hashes here.

File details

Details for the file polyagamma-1.3.6-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-1.3.6-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7ae309be75d861c0b3d870545bd38479f06887bb08cb23aeaa0165e0b2541708
MD5 956e142823ec1c26c352ee02d3287c20
BLAKE2b-256 c2a53245953c2df5a9cad4874c29f8335957c8152283a5b5ed630fe062ae8688

See more details on using hashes here.

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