Skip to main content

pypocketmap - a memory-efficient hashtable for CPython

Project description

pypocketmap

NOTE: this package is in beta. The current repo only contains implementations for string-keyed maps.

A high performance python hash table library that consumes significantly less memory than Python Dictionaries. It currently supports Python 3.6+. It is forked from Microdict to remove the limitation on the length of string keys, and add utility methods like get and setdefault. It also has a slightly different table design, making use of code ported to C from abseil-cpp.

Benchmarks

The latest charts are at https://observablehq.com/@dylan-burati-ws/pypocketmap-benchmarks

Installation and Building

You can install using pip: pip install pypocketmap.

pypocketmap is tested to work on Linux, Mac OSX, and Windows systems. You will need GCC 7+ on linux/mac osx systems and Visual C++ 14+ compiler on Windows systems to build the package. For the best performance use on a 64 bit system.

Usage

The following code snippet shows common uses of the library.

>>> import pypocketmap as pkm

# Generates a dictionary with string keys and signed 64 bit integer values.
>>> d = pkm.create(str, int)
>>> d = pkm.create(pkm.string, pkm.i64)  # or explicitly

# Works just like a python dictionary, although insertion order != iteration order
>>> d["a"] = 2
>>> "a" in d, "b" in d
(True, False)

# `get` default value can be any type
>>> d.get("a"), d.get("b"), d.get("b", False)
(2, None, False)

# `setdefault` default value must be an int
>>> d.setdefault("a", -10)
2
>>> d.setdefault("b", -10)
-10
>>> d.update({"okc": 1997, "yhf": 2002})
>>> d
<pypocketmap[str, int64]: {'b': -10, 'okc': 1997, 'a': 2, 'yhf': 2002}>
>>> [k for k in d], list(d.keys())
(['b', 'okc', 'a', 'yhf'], ['b', 'okc', 'a', 'yhf'])
>>> list(d.values()), list(d.items())
([-10, 1997, 2, 2002], [('b', -10), ('okc', 1997), ('a', 2), ('yhf', 2002)])
>>> len(d)
4
>>> d.clear()
>>> len(d)
0

How it works

The C parts

The map part of pypocketmap is just a C port of abseil-cpp's SwissTable, which is explained nicely in this blog post series: https://www.kylematsuda.com/blog/writing_a_hashmap_part_2.

The memory savings (pocket part) are partially due to an optimization for small strings - when stored in the key or value array of the map, a string is a 16-byte packed_str_t. This is a union:

  • contained: the data fits in 15 bytes, and the length and sentinel bit 1 fit in 1 byte.
  • spilled: the struct holds a char * pointing to the data, and the length and sentinel bit 0 take up the remaining 8 bytes.
    • 4 bytes are padding on 32-bit platforms; 8 bytes end up unused because the longer lengths would fail to allocate.

The C++ standard library and Rust crate byteyarn do something similar - I learned about this from the crate author's blog post: https://mcyoung.xyz/2023/08/09/yarns/.

The Python C API parts

The file str_int64_Py.c is the only Python module definition which should be edited. That file and abstract.h use C macros and typedef to fake generics. Many Python-specific blocks in the former file are also annotated with custom template! comments, which I came up with for this library's Java equivalent, pocketmap.

The template! comments are the reason for the nearly equivalent *_Py.c files in the repo. Essentially, the macros and comments implement the following traits for the key and value types. Since the "implementations" are just inlined into the files, this is prone to errors. It is probably doable in C++, but for now I'm choosing to add tests rather than convert the C code.

trait Value {
  type Packed;

  // the `&` operator indicates something borrowed.
  // physically, both Self and &Self can be a struct { char* data, uint64_t len }
  // semantically, &Self means that the data field is readonly, and its not safe
  // to use the pointer once the source of the borrow is possibly freed/dropped.
  // ===

  /// Converts the possibly-borrowed value to an owned value independent of any
  /// PyObjects and stores it.
  fn p_set(arr: *mut Self::Packed, index: usize, elem: &Self);

  /// Frees anything alloc'd in a previous `p_set(arr, index)`.
  /// No-op for everything except spilled strings.
  fn p_unset(arr: *mut Self::Packed, index: usize);

  /// Borrows the value - the caller is responsible for making sure `arr[index]` is
  /// set, and stays set while the returned &Self is in use.
  fn p_get(arr: *Self::Packed, index: usize) -> &Self;

  /// Converts the Python object to a C value.
  fn from_py(obj: &PyObject) -> Result<&Self, ()>;

  /// Convert the C value to a new Python object which owns its data. The caller
  /// owns the returned Python object, and should eventually either decrement its
  /// reference count, or return it as the result of a pymethodfunc.
  fn as_py(&self) -> PyObject;

  /// For `repr`.
  fn fmt(&self, f: &mut _PyUnicodeWriter) -> Result<(), ()>;

  /// For `setdefault` when the value arg is left out.
  fn default() -> &'static Self;

  /// For `__eq__` when acting as the value type. For pretty much all methods
  /// when acting as the key type.
  fn eq(&self, other: &Self) -> bool;
}

trait Key: Value + Hash {}

Not yet supported

  • Automatic or manual shrink_to_fit
  • Concurrent modification exceptions if an iterator is used after the table has been rehashed. The implementation can skip elements or yield them twice if used incorrectly.
  • update should work on any arg when PyDict_Check returns true or PyMapping_Keys returns non-null
    • __or__ and __ior__ operators can be implemented with this
  • The METH_FASTCALL convention is stable since Python 3.10, and it should be possible to alter the *Py.c files to use it in place of METH_VARARGS when compiling for 3.10+.
  • Additional overflow checking when LLONG_MAX != INT64_MAX or (more likely) LONG_MAX != INT32_MAX

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pypocketmap-0.0.1b0-cp312-cp312-win_amd64.whl (90.1 kB view details)

Uploaded CPython 3.12 Windows x86-64

pypocketmap-0.0.1b0-cp312-cp312-win32.whl (87.1 kB view details)

Uploaded CPython 3.12 Windows x86

pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (406.4 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (394.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (341.8 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pypocketmap-0.0.1b0-cp312-cp312-macosx_11_0_arm64.whl (77.4 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_x86_64.whl (77.6 kB view details)

Uploaded CPython 3.12 macOS 10.15+ x86-64

pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_universal2.whl (129.1 kB view details)

Uploaded CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64)

pypocketmap-0.0.1b0-cp311-cp311-win_amd64.whl (89.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

pypocketmap-0.0.1b0-cp311-cp311-win32.whl (86.9 kB view details)

Uploaded CPython 3.11 Windows x86

pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (391.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (338.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pypocketmap-0.0.1b0-cp311-cp311-macosx_11_0_arm64.whl (77.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_x86_64.whl (77.0 kB view details)

Uploaded CPython 3.11 macOS 10.15+ x86-64

pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_universal2.whl (128.2 kB view details)

Uploaded CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)

pypocketmap-0.0.1b0-cp310-cp310-win_amd64.whl (89.8 kB view details)

Uploaded CPython 3.10 Windows x86-64

pypocketmap-0.0.1b0-cp310-cp310-win32.whl (86.8 kB view details)

Uploaded CPython 3.10 Windows x86

pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (401.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (390.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (338.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pypocketmap-0.0.1b0-cp310-cp310-macosx_11_0_arm64.whl (77.1 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_x86_64.whl (77.0 kB view details)

Uploaded CPython 3.10 macOS 10.15+ x86-64

pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_universal2.whl (128.2 kB view details)

Uploaded CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)

pypocketmap-0.0.1b0-cp39-cp39-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

pypocketmap-0.0.1b0-cp39-cp39-win32.whl (86.8 kB view details)

Uploaded CPython 3.9 Windows x86

pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (400.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (389.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (337.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pypocketmap-0.0.1b0-cp39-cp39-macosx_11_0_arm64.whl (77.1 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_x86_64.whl (77.0 kB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_universal2.whl (128.2 kB view details)

Uploaded CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64)

pypocketmap-0.0.1b0-cp38-cp38-win_amd64.whl (89.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

pypocketmap-0.0.1b0-cp38-cp38-win32.whl (86.8 kB view details)

Uploaded CPython 3.8 Windows x86

pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (405.6 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (394.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (342.3 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pypocketmap-0.0.1b0-cp38-cp38-macosx_11_0_arm64.whl (77.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_x86_64.whl (77.0 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_universal2.whl (128.2 kB view details)

Uploaded CPython 3.8 macOS 10.15+ universal2 (ARM64, x86-64)

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ff7e9000d78cd7facd7ad78e5eeba83b9870a3f63a9b058b4efccb6974441d8a
MD5 14b5af1c718128100387c9bd764c15cc
BLAKE2b-256 2e1f0beec75a8511cb4ea4ee5ce44fadfcb8466243046452e545473b00752c5c

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 c91e2b3919a71ad52bfdc66f2408ba3d78612f92acd3bff05d6cc196843be5cd
MD5 aa70602f2c5eef03d8f96a464d41ffde
BLAKE2b-256 5cc91c3f4611af3005f895d3ca2db5f726519f374b5c376e6b7b408ed4b8969b

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 187cdea0254d461ad88e352e24feff0d0d6216331d281f7e849033ea7b567cf5
MD5 01ee1012e6d57b336da43af859c0706b
BLAKE2b-256 837f946d1a74bd05726dbae75e024d2234a060dfb6ea2eab36896b0f250d6b2f

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 58156a063ba604507be70fcc6f76db5aeb9695b727008ee4649a16dffd9981f5
MD5 09a37d285f5007e902b90f53573c2074
BLAKE2b-256 a1c6ede11b469c9a1140c79b23b7494d21ef35d3092f4120aa62f21521fabb9e

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 83004ef1908821440f3c3a7a64176475389706b6bb9d580a516bec352780f32e
MD5 c83a577694529c0ec2d4bb26d1e0f8b1
BLAKE2b-256 dc0401e1de2db9dee6c6a8845ba95dd6592eae788a0c9ccd80ee487fd662f0f8

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3219dcf8f3be55b408fa4c6878b7d369d0ac42c7fe99960224bdf80583a6a562
MD5 44bccb5c1f96aa72d10c2afb38078e38
BLAKE2b-256 d21f6cb7602195bbf21877d24085a99629d9b77664e5197bdd19bf6ea2e6580c

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a7d7b70aebbc522fec263f612385c5d7584abc734e7196aa74a152dfda5412b6
MD5 66387a677f9ae8316c69312cdddf48aa
BLAKE2b-256 3b2b5176a90e4ece5811bcbec228065e8c66c12ceb49cb91c72d66f4a5f6f08c

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp312-cp312-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 c539e6fd096c77e1cc154af48eeba3c6c999dbb2676c27208d05d27dbff6843c
MD5 c0b0ab92dac3a59e1bf04b976d56d079
BLAKE2b-256 954dfe1840f0d8dc4c60ce43150c5c93316c4fbb161dad2fb2859597becf293d

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 50907edc83a0e87c90f114786fcc64e2e4c3c9f8b821cd2294309ae2b8d87ec2
MD5 b68a49bb9ef3feda5abfc918341d9a4b
BLAKE2b-256 ed7d29fb0c55f2dd1b29ac50a94190aa5bb46e0c09438fe3dc5ee76bd6d23b72

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 341cc239a64fbc453c543e97e4ab75b2f6add3e5de8a46a9c3c4abb967556973
MD5 a9180d9569eb444a1ae3ba6a1dc91f72
BLAKE2b-256 39a0b6c9c61ef51e6f84a3ebe1893672c752bc24c5fcf556d9d2e629e386c2af

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d36d500c5d73103850131e2d84119db1533ce44ccaa638ad1025cb62f627864d
MD5 9c87b4ab439fc4bd4b2dc1d4b81a6a75
BLAKE2b-256 f2715606c1763c56bd888a2b5faf5d8428663033ceddfb7bcf4039c9aa2c40b4

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 062dba3cb2657b0df440879185d3d79e2f5646649fc4c8d47d8177f7a9fb1362
MD5 abc2ba6411564853001b9ee40ddfc893
BLAKE2b-256 1d7ff16c33ab4a7b77a09578b1483cf523e5079e6aded5536fff95ab4ba44bde

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ddee47c9d52c97d00c143361c84f5e8747852b20d9b71371a865d888a6670486
MD5 da8cf82371fe21d5086ce05de206abab
BLAKE2b-256 458574bbfbb8045e9555befc7151e98077348996e327e7b7b4b3cb2c159decb6

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf1b46446d6885e1967c75bfef4738f12c56bccd51962a09cb262f6c5297c74a
MD5 ff456b9598e8feb4afa55b29dd46955e
BLAKE2b-256 d39a1c2e6881e3df4d1168398d73672bf79806874dab4ecff5472738fc966891

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 1506ecfb3c447075f389bc2989e671af71861fd3195e2f7df64c284681c1ae50
MD5 4ad34807e3cfc205412da6a5eb3dce43
BLAKE2b-256 bc87bb430fac47583f94b2c594b34dd6a1daab9735b8a618156560f0c5528e01

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp311-cp311-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 266110e236f52c5e9653a098a8dd7a6efe5f6e298e0c5e253be72f51f76deb48
MD5 ac2e6e93cd6e293dd7fbd2c7d176eb1e
BLAKE2b-256 c5a8808c81d42f64752a78fa34f521578868c625b48d98240d26f93cbb1ec752

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f2eb2968c34078529f42baec3d041e0868a38ca15a71b0e173bc6f4ce9d5fc90
MD5 6a2243c43865f83a53875c2eac994f32
BLAKE2b-256 c4b75f4754d71a41d57d13d93f01d9dc7a723d5f658da5a0c2c2d5b6c409609d

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 86b1fbbfe6b2fa15bd5039986a298b712d54fdf2c7bcdd44ea99a16c08324e0c
MD5 0ff59591f7c2f8b0c4c31d8eb1ee25a9
BLAKE2b-256 daa0198e47396e7b99538e64ef7b35b03f879dbd5e4838529e8ad148bf9af2a7

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83a6ad411bc5ceea706f3eb415f26603fdff40e44015c2ea45bcbe2c50361fe2
MD5 25f37caf4aec31dffc12f6c273738e76
BLAKE2b-256 9d69c908c33e10de6e4edeb9538ef8a999a9c9407c1c10362c90cac0b05b7cf6

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 67260a1933a960662d798f83882e95a3b43b3e647a86fd1ec7234916e19d1b15
MD5 7898fea093f319227c84bb1a2fabfd3e
BLAKE2b-256 86cfc74bce7c02b9cce7a4261bd7f31c42886c5f25d6ffb20a01bc922e7559f1

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d47327b6179907d8251d44e8b018025316522d17cc0cc11b0e4c7fd284b48764
MD5 8729c27391cac1fd090d62a4d0831185
BLAKE2b-256 055ee41f27887408f2262018b4584c7e959410de1bd0c298423ad255b6534b4b

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8528ffcd80bca7f9a2d8b0da063d97b36a2d091ffc6d241d48d8afc9499ca89
MD5 1fb9786a2404b974e76ace4481e80738
BLAKE2b-256 d4d3ce055b554b0c2fcacbf76465aff733b33c63254f7ee3f887b925966cc812

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ea2c697ead928ef5c8d69ce54b4d1465970c8ff8d6070663831a781f71d6bf02
MD5 6f0e4269bf162faacd2e0c71a1b5969c
BLAKE2b-256 1f2492758a8edfacf5078a496457e9c253f6f5583cfa8d4b3f283e25db96c1d1

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp310-cp310-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 521cc4034258805d7451de228b599a5f3b3282db0ce183410b27debc19a631ef
MD5 e840dd3ee678d9b64d9f7437de74719d
BLAKE2b-256 d3eb7537508bcf5d9808ab9cb2c52c154698e1bd5c8c7ea52065cdc07817713c

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 24e44ebbd35d74266e8dc795700a0b09b8ff9c4a0219fdeac3b2800df3376ad7
MD5 e71f0327529af79ccaa7b83d19ab36ae
BLAKE2b-256 d3fc45ab35e41c9f9e174ac2d2e674d9ed088690802056716307bfeb810ba2b3

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-win32.whl.

File metadata

  • Download URL: pypocketmap-0.0.1b0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 86.8 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 35458293a5d07cd13112e983966647a97eb5b80877c91e6e6dee8bffa5b6fe8d
MD5 8c8fde404231a06ddcfe65e1af2ef79d
BLAKE2b-256 5b82baa5ed403ff7e5b60414b85bfa262bc22d69c06daab3f95ceecdb1c55a37

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 15ca47a2bb95bc8d328eff50a2ae2a3c6200200c89f00c4597ccd88ef6e98303
MD5 7e520c9f88381790974ce0612f541ee8
BLAKE2b-256 83784afb5bdfc8ee2edfa19b964c41fff08ef454a90aabf95e843f2279223ecc

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c41e923d8efaf3069d7ddb8475369134eeecdfb4859a88951ce6da7649fb36b5
MD5 5b54e626d0d4848415571e85910df6ad
BLAKE2b-256 011e9d59ae5be82f1e6aad6976508543518be352d5d5a1722b313cf23fb4dd16

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 833f5de36e49611d8119e1104df5a50a9b4a0c4a85eb1668891698678ccca577
MD5 1896a4f972c3594ce2e875c33e178aab
BLAKE2b-256 c07506fddc9410d5425fe93b934d4392d7aea40846bccf92fd7663dcb5b09b22

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 45af8dcfc4cfbfb032614669f5f0e3e499a7f00151d5a16d39b47795c754fefd
MD5 b29531dab56ec8ba727e24cd242c7523
BLAKE2b-256 49cef579313542b94035126cae95b00bbd76f7b3e9df2563f6b7c6e2f0cde951

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 3f842c8b8c663219425471b63ee98acef559465107d35c062671ade2d5318032
MD5 e1730ce7be5c24a406eafa362847629a
BLAKE2b-256 6f1586866fb2d2946c95f8afbeaa5275e870747cf62130c033469419b75af4d1

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp39-cp39-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 0a385eca576af08f72e5ca1b0d0ebd64629f223416becf5d2560b872a7b6e95f
MD5 5e5988f82c8eed264bc3ea700863770d
BLAKE2b-256 af35338a522a35525b3409bf194f1d503f739dfefad0e2fdadf3cb9432f3bd06

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 4a1431162b2126ac11f44eb744195290d8dfabe3fc7866db27251cd3d21aa5c7
MD5 23ee11b218a5996f6e5646a77901808d
BLAKE2b-256 14aedaf80ed6f91952c12d16b38afbee06c23ff937ee8f563a2a44f6520b3362

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-win32.whl.

File metadata

  • Download URL: pypocketmap-0.0.1b0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 86.8 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 469f1e800764d71c0e95307a048e87a816fc40996ca339a97a86640eb994d273
MD5 e105522f86a0fe9c233c798985480650
BLAKE2b-256 b67ce5dca09d7c505e5d8ed847d5ed34b16bd500561e95b1419de25b8a075a9d

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b37eca4eede3d828808a6ff9df76c7f33339b7f9c9e82bc676b71a0a7bbf6188
MD5 697c3932afd395b85e3aff160605ae5a
BLAKE2b-256 684a3f22010fe12d05978a17255140719dcb5b897026d7738f1b4d1b7b100893

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cc406ea23a99c1ca38f1a2dbc0976d8277f7855ec860d8be5a907843f9cbe194
MD5 2ae49e2121b608d3371171fdf1b63960
BLAKE2b-256 81d50966011b7449da456d0018db744e8131dc850a9a514c1bcd994ceb79beb6

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 de636a5e890389056ff3e07c8b38d92299268402505c01ec495eb34ed32a7c80
MD5 1409453369ff086fef68ec8c46a47721
BLAKE2b-256 d59eb4a5b105af6f084a9c67b2bdf7513a36d7236766c277610506ec51b33360

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49ff787d5fc95d14b59007b46e062169ccc988889707646e95704bca6d41b229
MD5 c3e7e16fac83d858e21e2a29bd19a8be
BLAKE2b-256 0c245597457eca58452142a824d7d47d91ef1a30911d27692a294c51b015afc9

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 51655574d8d2989dd1e33cd7c9419c00d38f772c2e421005bd6c04bdd4370ba2
MD5 fbc9e12a4789f0a92a7645c9e18acde8
BLAKE2b-256 cbfb6265f75b9e22a0ef5cf92398dbdf54394c8f74051a2375526f9afef36378

See more details on using hashes here.

File details

Details for the file pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_universal2.whl.

File metadata

File hashes

Hashes for pypocketmap-0.0.1b0-cp38-cp38-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 1369282014e1662b6d4bb4a671ed5843d0d19c8d57516bdc059a57c4ea0b3c9a
MD5 2fa98eb5aa336ae58ea92dbccc7177e7
BLAKE2b-256 74abf3462e5d41183090f1a3b265e2de0b76d7a822aacac060b93e6a00d3d630

See more details on using hashes here.

Supported by

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