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.

.. image:: https://img.shields.io/travis/explosion/cymem/master.svg?style=flat-square&logo=travis
:target: https://travis-ci.org/explosion/cymem

.. image:: https://img.shields.io/appveyor/ci/explosion/cymem/master.svg?style=flat-square&logo=appveyor
:target: https://ci.appveyor.com/project/explosion/cymem
:alt: Appveyor Build Status

.. image:: https://img.shields.io/pypi/v/cymem.svg?style=flat-square
:target: https://pypi.python.org/pypi/cymem
:alt: pypi Version

.. image:: https://img.shields.io/conda/vn/conda-forge/cymem.svg?style=flat-square
:target: https://anaconda.org/conda-forge/cymem
:alt: conda Version

.. image:: https://img.shields.io/badge/wheels-%E2%9C%93-4c1.svg?longCache=true&style=flat-square&logo=python&logoColor=white
:target: https://github.com/explosion/wheelwright/releases
:alt: Python wheels

Overview
========

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

.. code:: python

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 <https://pypi.python.org/pypi/pip>`_, and requires `Cython <http://cython.org/>`_.

.. code:: bash

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:

.. code:: 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:

.. code:: cython

"""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``.

.. code:: python

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

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

cymem-2.0.2.tar.gz (47.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cymem-2.0.2-cp37-cp37m-win_amd64.whl (31.3 kB view details)

Uploaded CPython 3.7mWindows x86-64

cymem-2.0.2-cp37-cp37m-win32.whl (28.0 kB view details)

Uploaded CPython 3.7mWindows x86

cymem-2.0.2-cp37-cp37m-manylinux1_x86_64.whl (32.0 kB view details)

Uploaded CPython 3.7m

cymem-2.0.2-cp37-cp37m-manylinux1_i686.whl (28.9 kB view details)

Uploaded CPython 3.7m

cymem-2.0.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (52.8 kB view details)

Uploaded CPython 3.7mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.6+ Intel (x86-64, i386)macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

cymem-2.0.2-cp36-cp36m-win_amd64.whl (31.2 kB view details)

Uploaded CPython 3.6mWindows x86-64

cymem-2.0.2-cp36-cp36m-win32.whl (28.0 kB view details)

Uploaded CPython 3.6mWindows x86

cymem-2.0.2-cp36-cp36m-manylinux1_x86_64.whl (31.9 kB view details)

Uploaded CPython 3.6m

cymem-2.0.2-cp36-cp36m-manylinux1_i686.whl (28.8 kB view details)

Uploaded CPython 3.6m

cymem-2.0.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (52.7 kB view details)

Uploaded CPython 3.6mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.6+ Intel (x86-64, i386)macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

cymem-2.0.2-cp35-cp35m-win_amd64.whl (31.1 kB view details)

Uploaded CPython 3.5mWindows x86-64

cymem-2.0.2-cp35-cp35m-win32.whl (27.9 kB view details)

Uploaded CPython 3.5mWindows x86

cymem-2.0.2-cp35-cp35m-manylinux1_x86_64.whl (31.7 kB view details)

Uploaded CPython 3.5m

cymem-2.0.2-cp35-cp35m-manylinux1_i686.whl (28.7 kB view details)

Uploaded CPython 3.5m

cymem-2.0.2-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (52.1 kB view details)

Uploaded CPython 3.5mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.6+ Intel (x86-64, i386)macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

cymem-2.0.2-cp27-cp27mu-manylinux1_x86_64.whl (31.3 kB view details)

Uploaded CPython 2.7mu

cymem-2.0.2-cp27-cp27mu-manylinux1_i686.whl (27.7 kB view details)

Uploaded CPython 2.7mu

cymem-2.0.2-cp27-cp27m-win_amd64.whl (29.8 kB view details)

Uploaded CPython 2.7mWindows x86-64

cymem-2.0.2-cp27-cp27m-win32.whl (27.3 kB view details)

Uploaded CPython 2.7mWindows x86

cymem-2.0.2-cp27-cp27m-manylinux1_x86_64.whl (31.3 kB view details)

Uploaded CPython 2.7m

cymem-2.0.2-cp27-cp27m-manylinux1_i686.whl (27.7 kB view details)

Uploaded CPython 2.7m

cymem-2.0.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (53.7 kB view details)

Uploaded CPython 2.7mmacOS 10.10+ Intel (x86-64, i386)macOS 10.10+ x86-64macOS 10.6+ Intel (x86-64, i386)macOS 10.9+ Intel (x86-64, i386)macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: cymem-2.0.2.tar.gz
  • Upload date:
  • Size: 47.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.3

File hashes

Hashes for cymem-2.0.2.tar.gz
Algorithm Hash digest
SHA256 ab88b1534f06df07262d9bc5efb3ba07948cdbe9a363eb9eaa4ad42fae6c7b5e
MD5 a4029a8cb19488ddf1aea712ce656fd1
BLAKE2b-256 8bdc0976e04cc46f86e0dd3ee3797ec68057eaafebf31daca9a076dc138b9920

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 bf049dc9cf0d3aa4a48ba514b7f1699fb6f35b18ad8c6f018bd13e0bccd9d30c
MD5 8c1fc1e962647fb943babb8d23aaaa1e
BLAKE2b-256 7326fb9d708e2570bb48f35ce8b6f796ece9b0805191eb11545697a4e9fe06bc

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp37-cp37m-win32.whl.

File metadata

  • Download URL: cymem-2.0.2-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 a5966b3171bad9c84a2b19dccda5ab37ae8437c0709a6b72cb42b64ea76a4bd3
MD5 060ba78f459dd0241d08e33e4c1c65b4
BLAKE2b-256 ebcb4ff546a491f764f67284572d25c57927e3f17103adf979bc99d90128f3eb

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 32.0 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ba47b571d480c0b76d282ff1634372070031d4998a46ae5d8305d49563b74ca6
MD5 ba903bcba4c41bfc33b75a065a7f7a1c
BLAKE2b-256 6526e534148e509cbebbea3ee29f50f59eb206621d12c35e4594507da8dc54cc

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: cymem-2.0.2-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 28.9 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 7f01ba6153427811cd7d35630081c69b32c188a1d330599a826ef3bf17edbd7c
MD5 302e9d0ad45e4a50ee38068270a5a3f2
BLAKE2b-256 1d9e9f8a486259f8c9539aa686fdac94568c734a517cb495ae787c6ca4dd98e3

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 ec51273ea08a2c6389bc4dd6b5183354826d916b149a041f2f274431166191bc
MD5 57c6a1078ceb3fcf7998485b0eec6367
BLAKE2b-256 d71137da628920bf2999bd8c4ffc40908413622486d5dbc4e60d87a58c428367

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 31.2 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 6e3194135b21bb268030f3473beb8b674b356c330a9fa185dced2f5006cbd5ba
MD5 7fc474faa71c5c7a8a8e7c84252bfa20
BLAKE2b-256 c2934b543adf6c0d73ed4e05d92abfb644c2743cd656adc8058510fdfac80680

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp36-cp36m-win32.whl.

File metadata

  • Download URL: cymem-2.0.2-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 081c652ae1aff4759813e93a2fc4df4ba410ce214a0e542988e24c62110d4cd0
MD5 db5c44673f98c3b3d97d65da55769133
BLAKE2b-256 897942db53e48df72e88be9294f0253c4c7905d89a8d1f065c3661c56a8723c9

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 31.9 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 71710ee0e946a6bd33c86dd9e71f95ad584c65e8bb02615f00ceb0d8348fb303
MD5 7a26ce33579abb5525f5b5beb30b9f66
BLAKE2b-256 3d619b0520c28eb199a4b1ca667d96dd625bba003c14c75230195f9691975f85

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: cymem-2.0.2-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 28.8 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 c63337aa7e1ad4ec182cc7847c6d85390589fbbf1f9f67d1fde8133a9acb7fa8
MD5 89800e571630cf0917044311a1dba329
BLAKE2b-256 6680a68db1eb9dbec84fa76cd0d6ec194d030871b3622d19bd7a91cca17502ef

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 2c8267dcb15cc6ab318f01ceaf16b8440c0386ae44014d5b22fefe5b0398d05c
MD5 9e6219517aa7c070317969273ac0acbb
BLAKE2b-256 db6ec6d1650f09b8b2910f149ec7c51fd2298e0e93a657f4496d4636c0a43675

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 c46a122c524a3270ac5249f590ac2f75f1a83692a3d3a03479cea49de72a0a89
MD5 bc66692923094dc521c34cba9cc76245
BLAKE2b-256 dda885cc3cf89b797dc11c2907af5362d7ff06538fadeda449acc72379b3cc35

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp35-cp35m-win32.whl.

File metadata

  • Download URL: cymem-2.0.2-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 27.9 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 0e447fa4cb6dccd0b96257a798370a17bef3ec254a527230058e41816a777c04
MD5 e27f73954f27d89b36d6d4d59a2c4fb4
BLAKE2b-256 b9b7449ccb56e6ea980496217e4be3058903a93e585e9cf15b66ab4720338027

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 31.7 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4994c1f3e948bd58a6e38c905221680563b851983a15f1f01e5ff415d560d153
MD5 0c20bc31ba5482e05b00a04a8e30d837
BLAKE2b-256 6bd5c1583c90023608e71ee35b6943d2a5dc488d463b84ecd1c0fddbf23eed44

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: cymem-2.0.2-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 28.7 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 8dd169ece1629ec4db1a592321e3ae0a9bb62fda2052a351fc36871f314c3569
MD5 841f771d406219e6b151ad00e2ed1f33
BLAKE2b-256 7bf4a682df70ccc0b1d1af894bf9c9be472e0bd543aa50fa08142d4a3cd38c80

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.2-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 584872fd3df176e50c90e37aaca6cb731ac0abcdea4f5b8ad77c30674cfaaa99
MD5 83e3afbd2b3bed08fc4905a6c1a83c96
BLAKE2b-256 b26f7cd2bb18876940a8e7e107b35a3a46723df5f539db59da2f94a94c60f49d

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8e6ad29636edd559b0dfe0a19c5cb5e6257461a5df90839e8c7710ddb005f4b4
MD5 0ae8d40ccd7ffe6a7803ada06c2781ce
BLAKE2b-256 dfb14ff2cbd423184bd68e85f1daa6692753cd7710b0ba68552eb64542906a57

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27mu-manylinux1_i686.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27mu-manylinux1_i686.whl
  • Upload date:
  • Size: 27.7 kB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27mu-manylinux1_i686.whl
Algorithm Hash digest
SHA256 b08b0dd7adafbff9f0fd7dc8dcad5f3ce6f23c126c81ad8d1666880cc94e6974
MD5 19ea652db54a0e1f9bf443778eb5b49c
BLAKE2b-256 28dfebb43502e994d52d138fb7225ef8c9e40a6bacfca05569811fbecf6538c5

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 29.8 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 8d96e95902e781950d7c255b19364a1ed50a204843d63dd386b0abc5e6df5e44
MD5 ce9bf8c97cf2ca7efac3bc6f1fe65877
BLAKE2b-256 1c7d5821f0790c69a92a603e7f326fec4ad6d327dad5f7223b8aa077cd07d22a

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27m-win32.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 741957f541fb8322de5a8c711d5d58f80d684225d2aec32fec92484cac931a52
MD5 841860480415fa516686f3ba205ea48a
BLAKE2b-256 fe0f98f689fa2addfff6da5191a57af8563a3190ac96bbb65172765ddfd99702

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a38b3229782411e4b23240f5f90000c4e7a834af88ed8763c66f8e4603db6b51
MD5 b3c961eb52b459ef0dc50e77cc90a54d
BLAKE2b-256 57eb5ee9da40b9b4ce370f86f4af9b41a7d16d3e273214d51048f2eaa46d909d

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27m-manylinux1_i686.whl.

File metadata

  • Download URL: cymem-2.0.2-cp27-cp27m-manylinux1_i686.whl
  • Upload date:
  • Size: 27.7 kB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.0

File hashes

Hashes for cymem-2.0.2-cp27-cp27m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 9935b233882732f03fd0fadbeb9e9aa672edcdd126e6d52c36d60adf1def8ea5
MD5 ceb144110b5b4f4a6286d8a4d8e40392
BLAKE2b-256 455396b2a4ba57faeb6e17e07c5a450db3cc428bdc43af534b31bb04deefbbaa

See more details on using hashes here.

File details

Details for the file cymem-2.0.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl.

File metadata

File hashes

Hashes for cymem-2.0.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Algorithm Hash digest
SHA256 46141111eedbb5b0d8c9386b00226a15f5727a1202b9095f4363d425f259267e
MD5 b80f75b76f04718d69923542d0f1e0c6
BLAKE2b-256 dedb39fcb8b6bd5aa15bde172830a989896cc3040b7d17ba4365f67ae176245d

See more details on using hashes here.

Supported by

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