Skip to main content

Manage calls to calloc/free through Cython

Project description

cymem: A Cython Memory Helper

cymem provides two small memory-management helpers for Cython. They make it easy to tie memory to a Python object's life-cycle, so that the memory is freed when the object is garbage collected.

tests pypi Version conda Version Python wheels

Overview

The most useful is cymem.Pool, which acts as a thin wrapper around the calloc function:

from cymem.cymem cimport Pool
cdef Pool mem = Pool()
data1 = <int*>mem.alloc(10, sizeof(int))
data2 = <float*>mem.alloc(12, sizeof(float))

The Pool object saves the memory addresses internally, and frees them when the object is garbage collected. Typically you'll attach the Pool to some cdef'd class. This is particularly handy for deeply nested structs, which have complicated initialization functions. Just pass the Pool object into the initializer, and you don't have to worry about freeing your struct at all — all of the calls to Pool.alloc will be automatically freed when the Pool expires.

Installation

Installation is via pip, and requires Cython. Before installing, make sure that your pip, setuptools and wheel are up to date.

pip install -U pip setuptools wheel
pip install cymem

Example Use Case: An array of structs

Let's say we want a sequence of sparse matrices. We need fast access, and a Python list isn't performing well enough. So, we want a C-array or C++ vector, which means we need the sparse matrix to be a C-level struct — it can't be a Python class. We can write this easily enough in Cython:

"""Example without Cymem

To use an array of structs, we must carefully walk the data structure when
we deallocate it.
"""

from libc.stdlib cimport calloc, free

cdef struct SparseRow:
    size_t length
    size_t* indices
    double* values

cdef struct SparseMatrix:
    size_t length
    SparseRow* rows

cdef class MatrixArray:
    cdef size_t length
    cdef SparseMatrix** matrices

    def __cinit__(self, list py_matrices):
        self.length = 0
        self.matrices = NULL

    def __init__(self, list py_matrices):
        self.length = len(py_matrices)
        self.matrices = <SparseMatrix**>calloc(len(py_matrices), sizeof(SparseMatrix*))

        for i, py_matrix in enumerate(py_matrices):
            self.matrices[i] = sparse_matrix_init(py_matrix)

    def __dealloc__(self):
        for i in range(self.length):
            sparse_matrix_free(self.matrices[i])
        free(self.matrices)


cdef SparseMatrix* sparse_matrix_init(list py_matrix) except NULL:
    sm = <SparseMatrix*>calloc(1, sizeof(SparseMatrix))
    sm.length = len(py_matrix)
    sm.rows = <SparseRow*>calloc(sm.length, sizeof(SparseRow))
    cdef size_t i, j
    cdef dict py_row
    cdef size_t idx
    cdef double value
    for i, py_row in enumerate(py_matrix):
        sm.rows[i].length = len(py_row)
        sm.rows[i].indices = <size_t*>calloc(sm.rows[i].length, sizeof(size_t))
        sm.rows[i].values = <double*>calloc(sm.rows[i].length, sizeof(double))
        for j, (idx, value) in enumerate(py_row.items()):
            sm.rows[i].indices[j] = idx
            sm.rows[i].values[j] = value
    return sm


cdef void* sparse_matrix_free(SparseMatrix* sm) except *:
    cdef size_t i
    for i in range(sm.length):
        free(sm.rows[i].indices)
        free(sm.rows[i].values)
    free(sm.rows)
    free(sm)

We wrap the data structure in a Python ref-counted class at as low a level as we can, given our performance constraints. This allows us to allocate and free the memory in the __cinit__ and __dealloc__ Cython special methods.

However, it's very easy to make mistakes when writing the __dealloc__ and sparse_matrix_free functions, leading to memory leaks. cymem prevents you from writing these deallocators at all. Instead, you write as follows:

"""Example with Cymem.

Memory allocation is hidden behind the Pool class, which remembers the
addresses it gives out.  When the Pool object is garbage collected, all of
its addresses are freed.

We don't need to write MatrixArray.__dealloc__ or sparse_matrix_free,
eliminating a common class of bugs.
"""
from cymem.cymem cimport Pool

cdef struct SparseRow:
    size_t length
    size_t* indices
    double* values

cdef struct SparseMatrix:
    size_t length
    SparseRow* rows


cdef class MatrixArray:
    cdef size_t length
    cdef SparseMatrix** matrices
    cdef Pool mem

    def __cinit__(self, list py_matrices):
        self.mem = None
        self.length = 0
        self.matrices = NULL

    def __init__(self, list py_matrices):
        self.mem = Pool()
        self.length = len(py_matrices)
        self.matrices = <SparseMatrix**>self.mem.alloc(self.length, sizeof(SparseMatrix*))
        for i, py_matrix in enumerate(py_matrices):
            self.matrices[i] = sparse_matrix_init(self.mem, py_matrix)

cdef SparseMatrix* sparse_matrix_init_cymem(Pool mem, list py_matrix) except NULL:
    sm = <SparseMatrix*>mem.alloc(1, sizeof(SparseMatrix))
    sm.length = len(py_matrix)
    sm.rows = <SparseRow*>mem.alloc(sm.length, sizeof(SparseRow))
    cdef size_t i, j
    cdef dict py_row
    cdef size_t idx
    cdef double value
    for i, py_row in enumerate(py_matrix):
        sm.rows[i].length = len(py_row)
        sm.rows[i].indices = <size_t*>mem.alloc(sm.rows[i].length, sizeof(size_t))
        sm.rows[i].values = <double*>mem.alloc(sm.rows[i].length, sizeof(double))
        for j, (idx, value) in enumerate(py_row.items()):
            sm.rows[i].indices[j] = idx
            sm.rows[i].values[j] = value
    return sm

All that the Pool class does is remember the addresses it gives out. When the MatrixArray object is garbage-collected, the Pool object will also be garbage collected, which triggers a call to Pool.__dealloc__. The Pool then frees all of its addresses. This saves you from walking back over your nested data structures to free them, eliminating a common class of errors.

Custom Allocators

Sometimes external C libraries use private functions to allocate and free objects, but we'd still like the laziness of the Pool.

from cymem.cymem cimport Pool, WrapMalloc, WrapFree
cdef Pool mem = Pool(WrapMalloc(priv_malloc), WrapFree(priv_free))

Download files

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

Source Distribution

cymem-2.0.10.tar.gz (10.2 kB view details)

Uploaded Source

Built Distributions

cymem-2.0.10-cp313-cp313-win_amd64.whl (39.0 kB view details)

Uploaded CPython 3.13 Windows x86-64

cymem-2.0.10-cp313-cp313-musllinux_1_2_x86_64.whl (219.1 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

cymem-2.0.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (222.9 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

cymem-2.0.10-cp313-cp313-macosx_11_0_arm64.whl (41.9 kB view details)

Uploaded CPython 3.13 macOS 11.0+ ARM64

cymem-2.0.10-cp313-cp313-macosx_10_13_x86_64.whl (42.3 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

cymem-2.0.10-cp312-cp312-win_amd64.whl (39.2 kB view details)

Uploaded CPython 3.12 Windows x86-64

cymem-2.0.10-cp312-cp312-musllinux_1_2_x86_64.whl (216.4 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

cymem-2.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (227.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cymem-2.0.10-cp312-cp312-macosx_11_0_arm64.whl (42.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

cymem-2.0.10-cp312-cp312-macosx_10_13_x86_64.whl (42.6 kB view details)

Uploaded CPython 3.12 macOS 10.13+ x86-64

cymem-2.0.10-cp311-cp311-win_amd64.whl (39.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

cymem-2.0.10-cp311-cp311-musllinux_1_2_x86_64.whl (207.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

cymem-2.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (218.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cymem-2.0.10-cp311-cp311-macosx_11_0_arm64.whl (41.7 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

cymem-2.0.10-cp311-cp311-macosx_10_9_x86_64.whl (42.0 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

cymem-2.0.10-cp310-cp310-win_amd64.whl (39.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

cymem-2.0.10-cp310-cp310-musllinux_1_2_x86_64.whl (195.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

cymem-2.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (204.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cymem-2.0.10-cp310-cp310-macosx_11_0_arm64.whl (41.6 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

cymem-2.0.10-cp310-cp310-macosx_10_9_x86_64.whl (41.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

cymem-2.0.10-cp39-cp39-win_amd64.whl (39.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

cymem-2.0.10-cp39-cp39-musllinux_1_2_x86_64.whl (199.7 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

cymem-2.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (208.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cymem-2.0.10-cp39-cp39-macosx_11_0_arm64.whl (42.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

cymem-2.0.10-cp39-cp39-macosx_10_9_x86_64.whl (42.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

File details

Details for the file cymem-2.0.10.tar.gz.

File metadata

  • Download URL: cymem-2.0.10.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10.tar.gz
Algorithm Hash digest
SHA256 f51700acfa1209b4a221dc892cca8030f4bc10d4c153dec098042f484c7f07a4
MD5 0140bc12ee02ca9bbcd99797587aa490
BLAKE2b-256 b662eac45989f3d3296133f292f3097cb4c1f9d3ad3e5a85e79bbd2c7f96278f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10.tar.gz:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.10-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 39.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 82f19a39052747309ced6b948b34aff62aa00c795c9d9d3d31a071e8c791efee
MD5 7aab41228af76b9d48124b5185c8a465
BLAKE2b-256 38f8a8c04468929043acf8048cce72e438412c7c949f6983b6dc14209e4371ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp313-cp313-win_amd64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 33d7f5014ad36af22995847fccd82ca0bd4b0394fb1d9dd9fef1e8cefdab2444
MD5 31368596fe27eb402aa396bcf08fdc48
BLAKE2b-256 b7ee47f412bdf64ab5ad9d14ce6ed9378a989dac3651f61ae190a5ff9fb866f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ea72cf0e369f3cf1f10038d572143d88ce7c959222cf7d742acbeb45e00ac5c0
MD5 b497f52d4b6c9a4ceb27b82e7a2ce8c2
BLAKE2b-256 76335d62b0e0461aed0a93d3a14a17e0e869d8eab9b2c0e9407f69ff763818ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6580d657d0f208d675d62cc052fb908529d52d24282342e24a9843de85352b88
MD5 7606091ee59619d9f644c36b2763bc0a
BLAKE2b-256 e4275f76934645f53704fb116802480b21af5c3cbb71ba4661f5af1a1e5ba210

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5698a515900dc697874444fa05d8d852bbad43543de2e7834ec3895156cc2aad
MD5 0d0949b7f273dc0af4df175272bbe7a9
BLAKE2b-256 fa88e5c8f44e80a64fdca827f2dd2e323afdef339ae83f1a32763940f40232de

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.10-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 39.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6ae7f22af4bc4311f06c925df61c62219c11939dffc9c91d67caf89a7e1557a5
MD5 d1f294cd3e40288b7ab3876d237b0a64
BLAKE2b-256 16401b6bdfaab3f80eeb302cd6212c2dcaa735d055db509487cf8da51764b74d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp312-cp312-win_amd64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f4bc6c823b400d32cddcfeefb3f352d52a0cc911cb0b5c1ef64e3f9741fd56b9
MD5 0293b899a7754d1a594d43ebf5c8a0dd
BLAKE2b-256 8e116bc72829cef14d1598a4c9f9381ac3d8b4e09d98f8496c9042cd994b7f13

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc4932060a5d55648fa4a3960f1cad9905572ed5c6f02af42f849e869d2803d4
MD5 b9cfb70078272fbeab335f1709c98f7c
BLAKE2b-256 35aff93d0fdd5f6174038c6745b708bb97e71f4568e7a9b25501ea481e269e3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e57928d9e93c61265281ea01a1d24499d397625b2766a0c5735b99bceb3ba75
MD5 ad71c6679cc3f9d5342fba043f2f3802
BLAKE2b-256 55de068d791d77c5f46844ee00c56414a6c7d9a3e80a82228ecb17c6530886bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c6ed8b1ed448cd65e12405a02aa71b22a4094d8a623205625057c4c73ba4b133
MD5 35899037133aa825a9109b7da4b9c738
BLAKE2b-256 1727a4383a1f534676f1fccb90e35154b3cd1d333954c756b1b01839b5554169

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.10-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 39.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 51218af9645541005a1313d6640bf6e86e7fb4b38a87268a5ea428d50ac3cec2
MD5 40835bf784728726f8788098c34e5bba
BLAKE2b-256 b384dd8e3bc7a773abb7d33dc654594323a31e2f79bde3f245feb09dc3f4996d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp311-cp311-win_amd64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 34406e2bff8707719f3f4b262e50b04876369233d5277a7c2d0c2e73a8579b46
MD5 e9b824a3f9edea404004921ba8104b9c
BLAKE2b-256 a770a12fea4fc0518a076df319aea5c30d13750739447c6d2c7b46d233e6f867

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ce6cb07416c82633503974f331abde9e1514c90aae8b3240884e749c2a60adbc
MD5 a2ee0cb809ba5997901c81932e50786d
BLAKE2b-256 2f8590d3222ead3a3c12005128100877ee6cb6c280d6cd100f53eaa9dc02d260

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d30ce83ff9009e5c5c8186845d9d583f867dace88113089bfc0ee1c348e45d5a
MD5 250f53dd5e9e922525f9fba08487df45
BLAKE2b-256 16d404fe526361d32f823da4a9a7af0ae4be745439c71bf70d15a87da2c48f89

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 18dc5a7b6a325d5fc0b2b40beb02673f36f64655ee086649c91e44ce092c7b36
MD5 3b89b3287dba6633b2cb42020ce88b63
BLAKE2b-256 05036dd38133209a100f9e5468dfd60aabf081eb8f4f9bb1fe171601e593dfb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.10-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 39.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a03abe0e2f8925707c3dee88060bea1a94b9a24afc7d07ee17f319022126bcb4
MD5 8210135d488067c28960345e5c474d60
BLAKE2b-256 496b2fe6abc7f4577f681625b9b374c88ad7f68b7d9c249049409c4d8ca67c37

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp310-cp310-win_amd64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4d45b99c727dfc303db3bb9f136b86731a4d231fbf9c27ce5745ea4a527da0b5
MD5 86344e353edb4268240467acb9883881
BLAKE2b-256 975b3de3d725c88a9aad0dca72a42da576d76f19e83b660cec912cb60585c46c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 61ce538c594f348b90037b03910da31ce7aacca090ea64063593688c55f6adad
MD5 a867df69198ba69539dcda018f79c768
BLAKE2b-256 16d8889f7b98211919f4bf53b901712440c2110ebfc69fcf234af063eed5c9a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9688f691518859e76c24c37686314dc5163f2fae1b9df264714220fc087b09a5
MD5 379a42a25a3caaec3c82e0ce4e02c1b1
BLAKE2b-256 72270a7e6f2b4f4183ce707aeae65880194600d0d42964753c256074b9d0fca9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 010f78804cf5e2fbd08abad210d2b78a828bea1a9f978737e28e1614f5a258b4
MD5 38a4c2990ae50fe54199016be61c0cb3
BLAKE2b-256 9854304b4f262524aa3bbf4e41b21fb7aa90fc507979995a12ad3b81c30d5650

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.10-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 39.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for cymem-2.0.10-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9805f7dbf078a0e2eb417b7e1166cedc590887b55e38a3f3ba5349649c93e6be
MD5 adb8ed6c605e73515ca263cff729b2fa
BLAKE2b-256 f956b1e79ace8590d7309d35134214c838cff320bc852194a35ec4da44c5ed07

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp39-cp39-win_amd64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ffb6181d589e65c46c2d515d8326746a2e0bda31b67c8b1edfbf0663249f84fb
MD5 e03dc1f142243f6b991743b691a250de
BLAKE2b-256 efa964b7d68d6cdcaf0f9c56b665977156ae344ae38d37c01e978916560ebca2

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5369f1974854102ee1751577f13acbbb6a13ba73f9fbb44580f8f3275dae0205
MD5 4fb3f2104e4e2a9fcc66052101076555
BLAKE2b-256 c135dd4e55ba3ebeca0fc71662ad53a150472b9d654e49cda22f3a776687bb0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f2bc8c69a23e3243e3a0c0feca08c9d4454d3cb7934bb11f5e1b3333151d69d
MD5 0793a9b8ccb5cf334093db18cbca6155
BLAKE2b-256 48b84df61a854855a2bbb311236140142ffd823d35dd1b97c988bc8898969be9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

File details

Details for the file cymem-2.0.10-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.10-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e644c3c48663d2c0580292e1d636e7eb8885bfe9df75f929d8ad0403621b75fe
MD5 75ec06270cf58c20e63516e8047d2876
BLAKE2b-256 f92b7d21a744ffd1bb23a1be32d7a5c2654acde45879f50ea5cdf4b98acd344b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.10-cp39-cp39-macosx_10_9_x86_64.whl:

Publisher: publish_pypi.yml on explosion/cymem

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

Supported by

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