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.11.tar.gz (10.3 kB view details)

Uploaded Source

Built Distributions

cymem-2.0.11-cp313-cp313-win_amd64.whl (39.1 kB view details)

Uploaded CPython 3.13 Windows x86-64

cymem-2.0.11-cp313-cp313-musllinux_1_2_x86_64.whl (219.2 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ x86-64

cymem-2.0.11-cp313-cp313-musllinux_1_2_aarch64.whl (213.4 kB view details)

Uploaded CPython 3.13 musllinux: musl 1.2+ ARM64

cymem-2.0.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (223.0 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

cymem-2.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (219.4 kB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13 macOS 11.0+ ARM64

cymem-2.0.11-cp313-cp313-macosx_10_13_x86_64.whl (42.4 kB view details)

Uploaded CPython 3.13 macOS 10.13+ x86-64

cymem-2.0.11-cp312-cp312-win_amd64.whl (39.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

cymem-2.0.11-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.11-cp312-cp312-musllinux_1_2_aarch64.whl (215.3 kB view details)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

cymem-2.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (228.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cymem-2.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (224.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.12 macOS 11.0+ ARM64

cymem-2.0.11-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.11-cp311-cp311-win_amd64.whl (39.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

cymem-2.0.11-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.11-cp311-cp311-musllinux_1_2_aarch64.whl (206.1 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

cymem-2.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (218.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cymem-2.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (217.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

cymem-2.0.11-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.11-cp310-cp310-win_amd64.whl (39.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

cymem-2.0.11-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.11-cp310-cp310-musllinux_1_2_aarch64.whl (194.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

cymem-2.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (204.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cymem-2.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (203.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

cymem-2.0.11-cp310-cp310-macosx_11_0_arm64.whl (41.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

cymem-2.0.11-cp310-cp310-macosx_10_9_x86_64.whl (41.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

cymem-2.0.11-cp39-cp39-win_amd64.whl (39.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

cymem-2.0.11-cp39-cp39-musllinux_1_2_x86_64.whl (199.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

cymem-2.0.11-cp39-cp39-musllinux_1_2_aarch64.whl (198.4 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

cymem-2.0.11-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.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (206.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.9 macOS 11.0+ ARM64

cymem-2.0.11-cp39-cp39-macosx_10_9_x86_64.whl (42.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: cymem-2.0.11.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11.tar.gz
Algorithm Hash digest
SHA256 efe49a349d4a518be6b6c6b255d4a80f740a341544bde1a807707c058b88d0bd
MD5 507fecc2fe325f51bac8ef70bbefe10e
BLAKE2b-256 f24a1acd761fb6ac4c560e823ce40536a62f886f2d59b2763b5c3fc7e9d92101

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11.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.11-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.11-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 39.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 25da111adf425c29af0cfd9fecfec1c71c8d82e2244a85166830a0817a66ada7
MD5 0c346c1ab3f17e3ab170a95b21634318
BLAKE2b-256 7465c162fbac63e867a055240b6600b92ef96c0eb7a1895312ac53c4be93d056

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5461e65340d6572eb64deadce79242a446a1d39cb7bf70fe7b7e007eb0d799b0
MD5 8736959dc76fe32df9a5173d35ece14d
BLAKE2b-256 5cc8accf7cc768f751447a5050b14a195af46798bc22767ac25f49b02861b1eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e3385a47285435848e0ed66cfd29b35f3ed8703218e2b17bd7a0c053822f26bf
MD5 26fe0a51d1c4c2f70b62a8f1d1bd52db
BLAKE2b-256 6afcce016bb0c66a4776345fac7508fddec3b739b9dd4363094ac89cce048832

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp313-cp313-musllinux_1_2_aarch64.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.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87ec985623624bbd298762d8163fc194a096cb13282731a017e09ff8a60bb8b1
MD5 20148d15c7afe5ab343b197ecfb97ccf
BLAKE2b-256 9b3a8f96e167e93b7f7ec105ed7b25c77bbf215d15bcbf4a24082cdc12234cd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44ddd3588379f8f376116384af99e3fb5f90091d90f520c341942618bf22f05e
MD5 d103d71118ba82c4405c3363c4216639
BLAKE2b-256 5f4e88a29cc5575374982e527b4ebcab3781bdc826ce693c6418a0f836544246

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.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.11-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02ed92bead896cca36abad00502b14fa651bdf5d8319461126a2d5ac8c9674c5
MD5 2e44560b556e15e4a5ec92928779fcce
BLAKE2b-256 fd607aa0561a6c1f0d42643b02c4fdeb2a16181b0ff4e85d73d2d80c6689e92a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f4a311c82f743275c84f708df89ac5bf60ddefe4713d532000c887931e22941f
MD5 4b92f3a17cadff2b31c59e202fbdc2ef
BLAKE2b-256 bd90b064e2677e27a35cf3605146abc3285d4f599cc1b6c18fc445ae876dd1e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.11-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 39.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0c269c7a867d74adeb9db65fa1d226342aacf44d64b7931282f0b0eb22eb6275
MD5 2023dd9fe4451aac2bf86f8f33a01938
BLAKE2b-256 7bbe8e02bdd31e557f642741a06c8e886782ef78f0b00daffd681922dc9bbc88

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e1048dae7e627ee25f22c87bb670b13e06bc0aecc114b89b959a798d487d1bf4
MD5 30c07b856524debd451e03e30fd10f5d
BLAKE2b-256 d3476915eaa521e1ce7a0ba480eecb6870cb4f681bcd64ced88c2f0ed7a744b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 04ee6b4041ddec24512d6e969ed6445e57917f01e73b9dabbe17b7e6b27fef05
MD5 122b159122cf79e7df5980324e5ff525
BLAKE2b-256 e4f3ceda70bf6447880140602285b7c6fa171cb7c78b623d35345cc32505cd06

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp312-cp312-musllinux_1_2_aarch64.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.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b02f2b17d760dc3fe5812737b1ce4f684641cdd751d67761d333a3b5ea97b83
MD5 b6caf8a2ffa9325656fd1efeca4964c7
BLAKE2b-256 1d688fa6efae17cd3b2ba9a2f83b824867c5b65b06f7aec3f8a0d0cabdeffb9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bee4395917f6588b8ac1699499128842768b391fe8896e8626950b4da5f9a406
MD5 d3403118eb3ed59805034d2ec7eb0256
BLAKE2b-256 d760cdc434239813eef547fb99b6d0bafe31178501702df9b77c4108c9a216f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.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.11-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de72101dc0e6326f6a2f73e05a438d1f3c6110d41044236d0fbe62925091267d
MD5 8297b8babfc994e0df645d5e34ab3a9c
BLAKE2b-256 4ad6f7a19c63b48efc3f00a3ee8d69070ac90202e1e378f6cf81b8671f0cf762

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a0fbe19ce653cd688842d81e5819dc63f911a26e192ef30b0b89f0ab2b192ff2
MD5 7e15ebc763095ba6d139da8ef83b7a58
BLAKE2b-256 71670d74f7e9d79f934368a78fb1d1466b94bebdbff14f8ae94dd3e4ea8738bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.11-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 39.4 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 aa54af7314de400634448da1f935b61323da80a49484074688d344fb2036681b
MD5 f58fccd13ff3cb316cfe2b33ba4263ed
BLAKE2b-256 56c875f75889401b20f4c3a7c5965dda09df42913e904ddc2ffe7ef3bdf25061

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2203bd6525a80d8fd0c94654a263af21c0387ae1d5062cceaebb652bf9bad7bc
MD5 8d3537c08b3bfc186b8f1e2ab51f6d71
BLAKE2b-256 25f9d0fc0191ac79f15638ddb59237aa76f234691374d7d7950e10f384bd8a25

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 39b78f2195d20b75c2d465732f6b8e8721c5d4eb012777c2cb89bdb45a043185
MD5 504380271cf286aae826ded4cec7502c
BLAKE2b-256 317a76ae3b7a39ab2531029d281e43fcfcaad728c2341b150a81a3a1f5587cf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp311-cp311-musllinux_1_2_aarch64.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.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2b9d3f42d7249ac81802135cad51d707def058001a32f73fc7fbf3de7045ac7
MD5 083d920c2b2751cc510d47a2fbe01cde
BLAKE2b-256 48cb2207679e4b92701f78cf141e1ab4f81f55247dbe154eb426b842a0a993de

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a8d5381e5793ce531bac0dbc00829c8381f18605bb67e4b61d34f8850463da40
MD5 bb0b5b9882917c3aeb2f7abed7cb69a2
BLAKE2b-256 7d4e042f372e5b3eb7f5f3dd7677161771d301de2b6fa3f7c74e1cebcd502552

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.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.11-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c05ef75b5db217be820604e43a47ccbbafea98ab6659d07cea92fa3c864ea58
MD5 1d51b565b376588c35d6654a171302da
BLAKE2b-256 41b47546faf2ab63e59befc95972316d62276cec153f7d4d60e7b0d5e08f0602

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3ee54039aad3ef65de82d66c40516bf54586287b46d32c91ea0530c34e8a2745
MD5 9d0e35649e3f6fdd90986cd37c2afd02
BLAKE2b-256 03e3d98e3976f4ffa99cddebc1ce379d4d62e3eb1da22285267f902c99cc3395

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.11-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 39.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7f05ed5920cc92d6b958ec5da55bd820d326fe9332b90660e6fa67e3b476ceb1
MD5 d721cf255f030ded0ce328112bc75c02
BLAKE2b-256 ebd5eda823d639258d2ed1db83403c991a9a57d5a4ddea3bf08e59060809a9aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f503f98e6aa333fffbe657a6854f13a9c3de68860795ae21171284213b9c5c09
MD5 edb3bfd2dae50c07371a3924cded2e63
BLAKE2b-256 ed0caee4ad2996a4e24342228ccf44d7835c7784042f0ee0c47ad33be1443f18

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 40159f6c92627438de970fd761916e745d70dfd84a7dcc28c1627eb49cee00d8
MD5 195f6d9add17fa02cf7c338f9106294d
BLAKE2b-256 695186ed323585530558bcdda1324c570abe032db2c1d5afd1c5e8e3e8fde63a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp310-cp310-musllinux_1_2_aarch64.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.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a69c470c2fb118161f49761f9137384f46723c77078b659bba33858e19e46b49
MD5 56d13d73b22bbdd465bd2ffa5ce17786
BLAKE2b-256 52d1dc4a72aa2049c34a53a220290b1a59fadae61929dff3a6e1a830a22971fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 739c4336b9d04ce9761851e9260ef77508d4a86ee3060e41302bfb6fa82c37de
MD5 c528bb96f0a9d5b5b3f662a1f7ab9347
BLAKE2b-256 d30c90aa41f258a67ea210886c5c73f88dc9f120b7a20e6b5d92c5ce73a68276

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.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.11-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d46ba0d2e0f749195297d16f2286b55af7d7c084db2b853fdfccece2c000c5dc
MD5 3079ee96fbaf87168aaf04de668335ac
BLAKE2b-256 a69d03299eff35bd4fd80db33e4fd516661b82bb7b898cb677829acf22391ede

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1b4dd8f8c2475c7c9948eefa89c790d83134600858d8d43b90276efd8df3882e
MD5 83fc5e83176bff72c8ae261928331de9
BLAKE2b-256 6d55f453f2b2f560e057f20eb2acdaafbf6488d72a6e8a36a4aef30f6053a51c

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.11-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 39.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for cymem-2.0.11-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 332ea5bc1c13c9a186532a06846881288eb846425898b70f047a0820714097bf
MD5 190ffa55539487aa74b5b783167360b7
BLAKE2b-256 11f616044e000072ae452e006930ca8eb7d21bad1b45d1a5978f82944482a9c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dec13c1a84612815365939f59e128a0031cae5f6b5a86e4b8fd7c4efa3fad262
MD5 0a340a1e4c86ec10e1d10b12bdb191cb
BLAKE2b-256 877fe48a20534b121fb84c526743f8cae878a4f0c097b48af6b7c027f1dda944

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7a2b4d1a9b1674d6ac0e4c5136b70b805535dc8d1060aa7c4ded3e52fb74e615
MD5 aec81630eb59e33f392f7f3b612c14b6
BLAKE2b-256 a9a04d664bec2eadf5d27a121d54a62bf4ef5805a5eedf1005afc2788edfcc72

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp39-cp39-musllinux_1_2_aarch64.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.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d8f11149b1a154de0e93f5eda0a13ad9948a739b58a2aace996ca41bbb6d0f5
MD5 5f66562bc88227aa021e10262fae21c3
BLAKE2b-256 2091ca365ed2c4da383a1b4fd698960b9ab72f6fd1b61f7bfcebda4150224327

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6347aed08442679a57bcce5ad1e338f6b717e46654549c5d65c798552d910591
MD5 73e697f308fbadff0051ea13f6204f4c
BLAKE2b-256 59f4906e3c7c48d2a5c15b008e9fac33732435860634642bbefb18815868faf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.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.11-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a407fd8766e1f666c48cb232f760267cecf0acb04cc717d8ec4de6adc6ab8e0
MD5 e9458f79d76a066c5b6c8b05781700da
BLAKE2b-256 1235d176ca37dfc746cf5125d3fe682fd0949b23dde78b23e13e010b1bcffdf1

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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.11-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.11-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1450498623d9f176d48578779c4e9d133c7f252f73c5a93b762f35d059a09398
MD5 4560652c6ca871f4087074ff13104598
BLAKE2b-256 f113b51db4b79e4e50bdb2f230d69ba26af0f6da3c522c4a2b334cdf538ba939

See more details on using hashes here.

Provenance

The following attestation bundles were made for cymem-2.0.11-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