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 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, one can install from source with the following shell commands:

$ git clone https://github.com/zoj613/polyagamma.git
$ cd polyagamma/
$ pip install cython==3.0.*
$ cythonize polyagamma/*.pyx
$ 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-2.0.2.tar.gz (119.8 kB view details)

Uploaded Source

Built Distributions

polyagamma-2.0.2-cp313-cp313-win_amd64.whl (87.2 kB view details)

Uploaded CPython 3.13Windows x86-64

polyagamma-2.0.2-cp313-cp313-musllinux_1_2_x86_64.whl (255.9 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

polyagamma-2.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (243.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

polyagamma-2.0.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (248.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

polyagamma-2.0.2-cp313-cp313-macosx_10_13_x86_64.whl (85.8 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

polyagamma-2.0.2-cp312-cp312-win_amd64.whl (87.3 kB view details)

Uploaded CPython 3.12Windows x86-64

polyagamma-2.0.2-cp312-cp312-musllinux_1_2_x86_64.whl (259.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

polyagamma-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (246.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

polyagamma-2.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

polyagamma-2.0.2-cp312-cp312-macosx_10_13_x86_64.whl (86.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

polyagamma-2.0.2-cp311-cp311-win_amd64.whl (86.8 kB view details)

Uploaded CPython 3.11Windows x86-64

polyagamma-2.0.2-cp311-cp311-musllinux_1_2_x86_64.whl (247.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

polyagamma-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (235.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

polyagamma-2.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (240.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

polyagamma-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl (85.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

polyagamma-2.0.2-cp310-cp310-win_amd64.whl (86.8 kB view details)

Uploaded CPython 3.10Windows x86-64

polyagamma-2.0.2-cp310-cp310-musllinux_1_2_x86_64.whl (237.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

polyagamma-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (226.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

polyagamma-2.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (232.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

polyagamma-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl (85.5 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: polyagamma-2.0.2.tar.gz
  • Upload date:
  • Size: 119.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for polyagamma-2.0.2.tar.gz
Algorithm Hash digest
SHA256 7fbadf5845433c7a81293503edf73020a3825935433d2bae2a5dd68183516f4c
MD5 937f77bf4f477f9c812227147ec04db7
BLAKE2b-256 5ef3d829de9140ad15ffb011a81e1c252cea5815bd178ecea94d6f89b6c2ccf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2.tar.gz:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: polyagamma-2.0.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 87.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for polyagamma-2.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e1d4e74ade9a15c0f10dac24c09f5ed8ff4e1d82a397429883fa89e3b11537f5
MD5 d435bf902d664900d4381f58e4fa0742
BLAKE2b-256 5fd8f7cc36de96fdc44bced6692a369e946ee55b93eed8ef1b8d087973a9b5ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp313-cp313-win_amd64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ecad80cbcf292602889ad98e62e2e69781012ec52c851d1047218904c0fbc33f
MD5 ecd5b5233445ef138c37be7f02076eb6
BLAKE2b-256 d2ac645627380460d1104f4c16ac58470b6fff634ec9168eeaaeaaace806f33f

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bfd5b8f935009cf56ad170807ba84c975e75d2d1d87fe6e702ea0341a79928b7
MD5 d06ad3e35a8b91b80bd6cb5bd38d4333
BLAKE2b-256 51a69eb863ed43e225f08330c74e3e5b1f2ef0a29805033cf7348fdd468571d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 72bae2316e9bebfc2dd7b85cb7e725e35013b3b241f51f2cf4069f105322e2c3
MD5 1729fb4a7b1025b4c5b0f11c3de207a2
BLAKE2b-256 7a5b97403c8f77e92bd362ed2ee54bfe333b481f095c57ca15d7340c5e8d65a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 324326defcb0d5f694a762388489d95b36f9dafb2ed6be9a311df6751b24ff3c
MD5 c728201a02904daae11713b19487d08a
BLAKE2b-256 ef44a8317c505beb8083d1cf78c990608d6ddae2f7a74d5d52e7edb8eaaeb40c

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: polyagamma-2.0.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 87.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for polyagamma-2.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e7f80da4fb34e9e69a7671ceff72e7a27b5866f72364593bf9a0c7468569ce6e
MD5 e6d14748120221205514d309770752b4
BLAKE2b-256 f7b08310fa61dfa6c5e07c7c701bc3b1170bac371f8f6acdd584574146c76dc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp312-cp312-win_amd64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 815a4adfdaf5c1ae9cebbe20dfdfb13234e06d1da8d786b68e83d9d6412bc01a
MD5 0356e9648c4b00d56ae87224569ffa37
BLAKE2b-256 78436c6c52a193b2ecc966e5a2e5c9aa04e2c102d57fe36ffe793917d1d48a2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d6a83e4be7acb4d8ae4b507e50d211d016c76670f78bae116ff02432dfdc1d4
MD5 7f19942dd0de426f1d0bc0d35283b09a
BLAKE2b-256 f03ddce3d3c404bb686751f5c55ad1190c55ee5e9d17c9913a8ed5fddb727041

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d0429c4a398e4a36142b7eac1e061bd6b42def85c6281be7db32cc58d1d9760
MD5 b37c83d07376bf643beb149dde437f65
BLAKE2b-256 c7c32f36de5ab1c75cda80532339eb13470ad5c200e4c90b598220592f605ed8

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 67a3004f99bd5d4a9cceeb82cd7554f131c2eb4aa98b17d76a4a75c3ba38fcaf
MD5 7f127debcaa1f87fe09160b1fd5043bf
BLAKE2b-256 4a250a1610694a925f5f66e3626140617209c2255a684a865278e0dd36a163ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: polyagamma-2.0.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 86.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for polyagamma-2.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a52ff80b41f02b3c3930743c024f632e21a37e35cd0444ba6d7ab19db210104a
MD5 781a6baf42758279e2c3f5a1ad434a75
BLAKE2b-256 d8de88afda42d1eb553f5a759e3e18417e172ea2ad89d438b98db44087890df7

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp311-cp311-win_amd64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5181b896bd62a6c6bf9b9ee91d796e8c6537e1edc507936ca775c75a03e38421
MD5 bad47ff46bbc00eac7eca4b84f855df4
BLAKE2b-256 ef053d67adcdea30c57f21b1bbb8bed845a221622fc5e637556fe996573695c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aa8f2ee20e78db0acf1f5603f7020337be95e6a29d290fbdf2d521aff4dbb684
MD5 3a77078c3e7594aa29d248d57365f791
BLAKE2b-256 bf04e0885204b4fd551ec009a63e348342c4eff7420bfd4fba01afde860238f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c51089f24cb7caf855cab7e1e1277467e1c0b03df2d8c8899e723c8561616140
MD5 4bac459066d5960e31a34d3521e1dd80
BLAKE2b-256 e49b36dfad2564ab332b81fd8791fce74c42f15abe7ee87b681b5f1dbf39f159

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d52cc24077c66cc25130d7047eb24edaaf7ff68025be77ea6a3de7a8659bdd1d
MD5 1627ff0c6281bb4966795bad3c7fb062
BLAKE2b-256 d615a662d7850d8b8ddedf92bb93906d7725d73077bdb9eaa1da127575dae41f

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: polyagamma-2.0.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 86.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for polyagamma-2.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 224284be13ff4ff05733e45a9f804220431b29fd56b08f1917d0848862164fee
MD5 e8e761ce8cebc9a348d99aba41c4b056
BLAKE2b-256 86b4237c484ae57e474a5fe5bd55d55759bec3e8d31050a7152a16554cc8edfd

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp310-cp310-win_amd64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cd807eea4ebb60e074399f058aa626280e7188f8f0dadda084ffb05e724cd6aa
MD5 070249010357e5bfc50f451a1c5c939c
BLAKE2b-256 4d842edf4baf81c41b19394830296ee800e5e00df1519ea336ab13c0821b1e19

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a2581e6f3bb4086c5c3970172a5ccbb8acdab79284e36c5615c452de9dfa0a4b
MD5 a0aa7101806e4f905dd43de6a08155fd
BLAKE2b-256 81618b411b977b3f855222fed207c08b73ec09ae36a85e1834fe5d77162cd1f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyagamma-2.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c4f8b00eafe34d3ad47c40b5b32c48f44f8452f94a894dd2e440be8cc0fb4006
MD5 f4ead5c012532cbb38a5fc7d5a0c81a4
BLAKE2b-256 4f0c964e6ea012c2c224d8ecc1f1de7484b8e9b6be8d7598ea8c29bc1d48ed49

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for polyagamma-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b2bb325d3ed04ca186b780461dfa196cd492919c1bb5d86a6f3d95b6065b6283
MD5 80f9e2a25e49d993e82dda6c322aca5c
BLAKE2b-256 adf2f3fab90f4d5c677357ab41498b10c64a732e9d7667ba926e79b63043c8f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyagamma-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: release.yml on zoj613/polyagamma

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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