Skip to main content

Sychronized, streaming dictionary that uses shared memory as a backend

Project description

UltraDict

Sychronized, streaming Python dictionary that uses shared memory as a backend

Warning: This is an early hack. There are only few unit tests and so on. Maybe not stable!

Features:

  • Fast (compared to other sharing solutions)
  • No running manager processes
  • Works in spawn and fork context
  • Safe locking between independent processes
  • Tested with Python >= v3.8 on Linux, Windows and Mac
  • Convenient, no setter or getters necessary
  • Optional recursion for nested dicts

PyPI Package Run Python Tests Python >=3.8 License

General Concept

UltraDict uses multiprocessing.shared_memory to synchronize a dict between multiple processes.

It does so by using a stream of updates in a shared memory buffer. This is efficient because only changes have to be serialized and transferred.

If the buffer is full, UltraDict will automatically do a full dump to a new shared memory space, reset the streaming buffer and continue to stream further updates. All users of the UltraDict will automatically load full dumps and continue using streaming updates afterwards.

Issues

On Windows, if no process has any handles on the shared memory, the OS will gc all of the shared memory making it inaccessible for future processes. To work around this issue you can currently set full_dump_size which will cause the creator of the dict to set a static full dump memory of the requested size. This full dump memory will live as long as the creator lives. This approach has the downside that you need to plan ahead for your data size and if it does not fit into the full dump memory, it will break.

Alternatives

There are many alternatives:

How to use?

Simple

In one Python REPL:

Python 3.9.2 on linux
>>>
>>> from UltraDict import UltraDict
>>> ultra = UltraDict({ 1:1 }, some_key='some_value')
>>> ultra
{1: 1, 'some_key': 'some_value'}
>>>
>>> # We need the shared memory name in the other process.
>>> ultra.name
'psm_ad73da69'

In another Python REPL:

Python 3.9.2 on linux
>>>
>>> from UltraDict import UltraDict
>>> # Connect to the shared memory with the name above
>>> other = UltraDict(name='psm_ad73da69')
>>> other
{1: 1, 'some_key': 'some_value'}
>>> other[2] = 2

Back in the first Python REPL:

>>> ultra[2]
2

Nested

In one Python REPL:

Python 3.9.2 on linux
>>>
>>> from UltraDict import UltraDict
>>> ultra = UltraDict(recurse=True)
>>> ultra['nested'] = { 'counter': 0 }
>>> type(ultra['nested'])
<class 'UltraDict.UltraDict'>
>>> ultra.name
'psm_0a2713e4'

In another Python REPL:

Python 3.9.2 on linux
>>>
>>> from UltraDict import UltraDict
>>> other = UltraDict(name='psm_0a2713e4')
>>> other['nested']['counter'] += 1

Back in the first Python REPL:

>>> ultra['nested']['counter']
1

Performance comparison

Lets compare a classical Python dict, UltraDict, multiprocessing.Manager and Redis.

Note that this comparison is not a real life workload. It was executed on Debian Linux 11 with Redis installed from the Debian package and with the default configuration of Redis.

Python 3.9.2 on linux
>>>
>>> from UltraDict import UltraDict
>>> ultra = UltraDict()
>>> for i in range(10_000): ultra[i] = i
...
>>> len(ultra)
10000
>>> ultra[500]
500
>>> # Now let's do some performance testing
>>> import multiprocessing, redis, timeit
>>> orig = dict(ultra)
>>> len(orig)
10000
>>> orig[500]
500
>>> managed = multiprocessing.Manager().dict(orig)
>>> len(managed)
10000
>>> r = redis.Redis()
>>> r.flushall()
>>> r.mset(orig)

Read performance

>>> timeit.timeit('orig[1]', globals=globals()) # original
0.03832335816696286
>>> timeit.timeit('ultra[1]', globals=globals()) # UltraDict
0.5248982920311391
>>> timeit.timeit('managed[1]', globals=globals()) # Manager
40.85506196087226
>>> timeit.timeit('r.get(1)', globals=globals()) # Redis
49.3497632863
>>> timeit.timeit('ultra.data[1]', globals=globals()) # UltraDict data cache
0.04309639008715749

We are factor 15 slower than a real, local dict, but way faster than using a Manager. If you need full read performance, you can access the underlying cache ultra.data directly and get almost original dict performance, of course at the cost of not having real-time updates anymore.

Write performance

>>> min(timeit.repeat('orig[1] = 1', globals=globals())) # original
0.028232071083039045
>>> min(timeit.repeat('ultra[1] = 1', globals=globals())) # UltraDict
2.911152713932097
>>> min(timeit.repeat('managed[1] = 1', globals=globals())) # Manager
31.641707635018975
>>> min(timeit.repeat('r.set(1, 1)', globals=globals())) # Redis
124.3432381930761

We are factor 100 slower than a real, local Python dict, but still factor 10 faster than using a Manager and much fast than Redis.

Testing performance

There is an automated performance test in tests/performance/performance.py. If you run it, you get something like this:

python ./tests/performance/performance.py

Testing Performance with 1000000 operations each

Redis (writes) = 24,351 ops per second
Redis (reads) = 30,466 ops per second
Python MPM dict (writes) = 19,371 ops per second
Python MPM dict (reads) = 22,290 ops per second
Python dict (writes) = 16,413,569 ops per second
Python dict (reads) = 16,479,191 ops per second
UltraDict (writes) = 479,860 ops per second
UltraDict (reads) = 2,337,944 ops per second
UltraDict (shared_lock=True) (writes) = 41,176 ops per second
UltraDict (shared_lock=True) (reads) = 1,518,652 ops per second

Ranking:
  writes:
    Python dict = 16,413,569 (factor 1.0)
    UltraDict = 479,860 (factor 34.2)
    UltraDict (shared_lock=True) = 41,176 (factor 398.62)
    Redis = 24,351 (factor 674.04)
    Python MPM dict = 19,371 (factor 847.33)
  reads:
    Python dict = 16,479,191 (factor 1.0)
    UltraDict = 2,337,944 (factor 7.05)
    UltraDict (shared_lock=True) = 1,518,652 (factor 10.85)
    Redis = 30,466 (factor 540.9)
    Python MPM dict = 22,290 (factor 739.31)

I am interested in extending the performance testing to other solutions (like sqlite, memcached, etc.) and to more complex use cases with multiple processes working in parallel.

Parameters

Ultradict(*arg, name=None, create=None, buffer_size=10000, serializer=pickle, shared_lock=False, full_dump_size=None, auto_unlink=None, recurse=False, recurse_register=None, **kwargs)

name: Name of the shared memory. A random name will be chosen if not set. By default, if a name is given a new shared memory space is created if it does not exist yet. Otherwise the existing shared memory space is attached.

create: Can be either True or False or None. If set to True, a new UltraDict will be created and an exception is thrown if one exists already with the given name. If kept at the default value None, either a new UltraDict will be created if the name is not taken or an existing UltraDict will be attached.

Setting create=True does ensure not accidentally attaching to an existing UltraDict that might be left over.

buffer_size: Size of the shared memory buffer used for streaming changes of the dict. The buffer size limits the biggest change that can be streamed, so when you use large values or deeply nested dicts you might need a bigger buffer. Otherwise, if the buffer is too small, it will fall back to a full dump. Creating full dumps can be slow, depending on the size of your dict.

Whenever the buffer is full, a full dump will be created. A new shared memory is allocated just big enough for the full dump. Afterwards the streaming buffer is reset. All other users of the dict will automatically load the full dump and continue streaming updates.

(Also see the section Memory management below!)

serializer: Use a different serialized from the default pickle, e. g. marshal, dill, jsons. The module or object provided must support the methods loads() and dumps()

shared_lock: When writing to the same dict at the same time from multiple, independent processes, they need a shared lock to synchronize and not overwrite each other's changes. Shared locks are slow. They rely on the atomics package for atomic locks. By default, UltraDict will use a multiprocessing.RLock() instead which works well in fork context and is much faster.

(Also see the section Locking below!)

full_dump_size: If set, uses a static full dump memory instead of dynamically creating it. This might be necessary on Windows depending on your write behaviour. On Windows, the full dump memory goes away if the process goes away that had created the full dump. Thus you must plan ahead which processes might be writing to the dict and therefore creating full dumps.

auto_unlink: If True, the creator of the shared memory will automatically unlink the handle at exit so it is not visible or accessible to new processes. All existing, still connected processes can continue to use the dict.

recurse: If True, any nested dict objects will be automaticall wrapped in an UltraDict allowing transparent nested updates.

recurse_register: Has to be either the name of an UltraDict or an UltraDict instance itself. Will be used internally to keep track of dynamically created, recursive UltraDicts for proper cleanup when using recurse=True. Usually does not have to be set by the user.

Memory management

UltraDict uses shared memory buffers and those usually live is RAM. UltraDict does not use any management processes to keep track of buffers. Also it cannot know when to free those shared memory buffers again because you might want the buffers to outlive the process that has created them.

By convention you should set the parameter auto_unlink to True for exactly one of the processes that is using the UltraDict. The first process that is creating a certain UltraDict will automatically get the flag auto_unlink=True unless you explicitly set it to False. When this process with the auto_unlink=True flag ends, it will try to unlink (free) all shared memory buffers.

A special case is the recursive mode using recurse=True parameter. This mode will use an additional internal UltraDict to keep track of recursively nested UltraDict instances. All child UltraDicts will write to this register the names of the shared memory buffers they are creating. This allows the buffers to outlive the processes and still being correctly cleanup up by at the end of the program.

Buffer sizes and read performance:

There are 3 cases that can occur when you read from an `UltraDict:

  1. No new updates: This is the fastes cases. UltraDict was optimized for this case to find out as quickly as possible if there are no updates on the stream and then just return the desired data. If you want even better read perforamance you can directly access the underlying data attribute of your UltraDict, though at the cost of not getting real time updates anymore.

  2. Streaming update: This is usually fast, depending on the size and amount of that data that was changed but not depending on the size of the whole UltraDict. Only the data that was actually changed has to be unserialized.

  3. Full dump load: This can be slow, depending on the total size of your data. If your UltraDict is big it might take long to unserialize it.

Given the above 3 cases, you need to balance the size of your data and your write patterns with the streaming buffer_size of your UltraDict. If the streaming buffer is full, a full dump has to be created. Thus, if your full dumps are expensive due to their size, try to find a good buffer_size to avoid creating too many full dumps.

On the other hand, if for example you only change back and forth the value of one single key in your UltraDict, it might be useless to process a stream of all these back and forth changes. It might be much more efficient to simply do one full dump which might be very small because it only contains one key.

Locking

Every UltraDict instance has a lock attribute which is either a multiprocessing.RLock or an UltraDict.SharedLock if you set shared_lock=True when creating the UltraDict.

RLock is the fastest locking method that is used by default but you can only use it if you fork your child processes. Forking is the default on Linux systems.

In contrast, on Windows systems, forking is not available and Python will automatically use the spawn method when creating child processes. You should then use the parameter shared_lock=True when using UltraDict. This requires that the external atomics package is installed.

How to use the locking?

ultra = UltraDict(shared_lock=True)

with ultra.lock:
	ultra['counter']++

# The same as above with all default parameters
with ultra.lock(timeout=None, block=True, steal=False, sleep_time=0.000001):
	ultra['counter']++

# Busy wait, will result in 99 % CPU usage, fastest option
# Ideally number of processes using the UltraDict should be < number of CPUs
with ultra.lock(sleep_time=0):
	ultra['counter']++

try:
	result = ultra.lock.acquire(block=False)
	ultra.lock.release()
except UltraDict.Exceptions.CannotAcquireLock as e:
	print(f'Process with PID {e.blocking_pid} is holding the lock')

try:
	with ultra.lock(timeout=1.5):
		ultra['counter']++
except UltraDict.Exceptions.CannotAcquireLockTimeout:
	print('Stale lock?')

with ultra.lock(timeout=1.5, steal_after_timeout=True):
	ultra['counter']++

Explicit cleanup

Sometimes, when your program crashes, no cleanup happens and you might have a corrupted shared memeory buffer that only goes away if you manually delete it.

On Linux/Unix systems, those buffers usually live in a memory based filesystem in the folder /dev/shm. You can simply delete the files there.

Another way to do this in code is like this:

# Unlink both shared memory buffers possibly used by UltraDict
name = 'my-dict-name'
UltraDict.unlink_by_name(name, ignore_errors=True)
UltraDict.unlink_by_name(f'{name}_memory', ignore_errors=True)

Advanced usage

See examples folder

>>> ultra = UltraDict({ 'init': 'some initial data' }, name='my-name', buffer_size=100_000)
>>> # Let's use a value with 100k bytes length.
>>> # This will not fit into our 100k bytes buffer due to the serialization overhead.
>>> ultra[0] = ' ' * 100_000
>>> ultra.print_status()
{'buffer': SharedMemory('my-name_memory', size=100000),
 'buffer_size': 100000,
 'control': SharedMemory('my-name', size=1000),
 'full_dump_counter': 1,
 'full_dump_counter_remote': 1,
 'full_dump_memory': SharedMemory('psm_765691cd', size=100057),
 'full_dump_memory_name_remote': 'psm_765691cd',
 'full_dump_size': None,
 'full_dump_static_size_remote': <memory at 0x7fcbf5ca6580>,
 'lock': <RLock(None, 0)>,
 'lock_pid_remote': 0,
 'lock_remote': 0,
 'name': 'my-name',
 'recurse': False,
 'recurse_remote': <memory at 0x7fcbf5ca6700>,
 'serializer': <module 'pickle' from '/usr/lib/python3.9/pickle.py'>,
 'shared_lock_remote': <memory at 0x7fcbf5ca6640>,
 'update_stream_position': 0,
 'update_stream_position_remote': 0}

Note: All status keys ending with _remote are stored in the control shared memory space and shared across processes.

Other things you can do:

>>> # Create a full dump
>>> ultra.dump()

>>> # Load latest full dump if one is available
>>> ultra.load()

>>> # Show statistics
>>> ultra.print_status()

>>> # Force load of latest full dump, even if we had already processed it.
>>> # There might also be streaming updates available after loading the full dump.
>>> ultra.load(force=True)

>>> # Apply full dump and stream updates to
>>> # underlying local dict, this is automatically
>>> # called by accessing the UltraDict in any usual way,
>>> # but can be useful to call after a forced load.
>>> ultra.apply_update()

>>> # Access underlying local dict directly for maximum performance
>>> ultra.data

>>> # Use any serializer you like, given it supports the loads() and dumps() methods
>>> import jsons
>>> ultra = UltraDict(serializer=jsons)

>>> # Close connection to shared memory; will return the data as a dict
>>> ultra.close()

>>> # Unlink all shared memory, it will not be visible to new processes afterwards
>>> ultra.unlink()

Contributing

Contributions are always welcome!

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

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

ultradict_wheels-0.0.6-cp314-cp314t-win_amd64.whl (172.4 kB view details)

Uploaded CPython 3.14tWindows x86-64

ultradict_wheels-0.0.6-cp314-cp314t-win32.whl (145.8 kB view details)

Uploaded CPython 3.14tWindows x86

ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl (944.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl (952.3 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (954.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (995.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp314-cp314t-macosx_10_13_x86_64.whl (177.5 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

ultradict_wheels-0.0.6-cp314-cp314-win_amd64.whl (145.2 kB view details)

Uploaded CPython 3.14Windows x86-64

ultradict_wheels-0.0.6-cp314-cp314-win32.whl (124.8 kB view details)

Uploaded CPython 3.14Windows x86

ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_x86_64.whl (992.0 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_aarch64.whl (962.9 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (987.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp314-cp314-macosx_10_13_x86_64.whl (167.6 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

ultradict_wheels-0.0.6-cp313-cp313-win_amd64.whl (143.0 kB view details)

Uploaded CPython 3.13Windows x86-64

ultradict_wheels-0.0.6-cp313-cp313-win32.whl (123.2 kB view details)

Uploaded CPython 3.13Windows x86

ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_aarch64.whl (964.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

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

ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (986.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp313-cp313-macosx_10_13_x86_64.whl (167.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

ultradict_wheels-0.0.6-cp312-cp312-win_amd64.whl (143.6 kB view details)

Uploaded CPython 3.12Windows x86-64

ultradict_wheels-0.0.6-cp312-cp312-win32.whl (123.9 kB view details)

Uploaded CPython 3.12Windows x86

ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_aarch64.whl (968.0 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.0 MB view details)

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

ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (991.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp312-cp312-macosx_10_13_x86_64.whl (168.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

ultradict_wheels-0.0.6-cp311-cp311-win_amd64.whl (149.8 kB view details)

Uploaded CPython 3.11Windows x86-64

ultradict_wheels-0.0.6-cp311-cp311-win32.whl (124.9 kB view details)

Uploaded CPython 3.11Windows x86

ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp311-cp311-macosx_10_9_x86_64.whl (172.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

ultradict_wheels-0.0.6-cp310-cp310-win_amd64.whl (148.2 kB view details)

Uploaded CPython 3.10Windows x86-64

ultradict_wheels-0.0.6-cp310-cp310-win32.whl (125.2 kB view details)

Uploaded CPython 3.10Windows x86

ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_x86_64.whl (987.2 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_aarch64.whl (967.4 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (985.6 kB view details)

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

ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (980.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp310-cp310-macosx_10_9_x86_64.whl (167.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

ultradict_wheels-0.0.6-cp39-cp39-win_amd64.whl (148.5 kB view details)

Uploaded CPython 3.9Windows x86-64

ultradict_wheels-0.0.6-cp39-cp39-win32.whl (125.5 kB view details)

Uploaded CPython 3.9Windows x86

ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_x86_64.whl (983.2 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_aarch64.whl (962.4 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (980.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (976.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

ultradict_wheels-0.0.6-cp39-cp39-macosx_10_9_x86_64.whl (168.0 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 184d7c1dea9e3c2f232bab2d968f41fdf872995a24f47b38cfafb44bf1a73f16
MD5 5cba463d6913243b567ad2598715f922
BLAKE2b-256 4ecd29a48972e713a3d7545b71f5a055fbc10ff7078b8faa6a1f3d56dd0dd1c1

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 915a26c2881c7cda475249cb11975290f6d7af2b34e84710acbd10c1ffe54b93
MD5 1047b4e43e348ae34b28db82afde130c
BLAKE2b-256 d9ac007e7675646021fab2dd32d42cb6508df4a9aca58d8dd53a2a485a45b28c

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3510ba0e3ffd38b4288a40edb1ffbb574143a2d9993fa435ff67f71352964af1
MD5 9d38758dce85f8fc96789cf215c42da3
BLAKE2b-256 740d0e8eed0b6d07ea7435fffc130e963b83d5a820c62d155f967e62225fe8ee

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 412dd6692b0070afcc2bb6f53c774f2daa45c4f695ba49c9cf1c9b67c7c6b585
MD5 949a9369a409e08178cd6e3926bd5ea8
BLAKE2b-256 a5bacb759f46b79c4df90762f8bb549f9a6a25c876ca00ce1447772a91639966

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af8553e1143a2b98d1c8509d771878841560678151b2d8f64a4076f943fd555f
MD5 785fe6f30bb2622ce4bf0e576e5311d5
BLAKE2b-256 180c942cb31e2a0f6a43b0f628a5eef225b7aa015cad9f56469f67a383b26cbb

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff9d257302ef95ed68403ad5dade9e7de538810d28e0246197ee0c6520fe0523
MD5 f9cbebd0a6e2740be6e63f9c0d15f667
BLAKE2b-256 d2b5f6c1378ea6c39be09ab7faba2fe22b005e95d1eceb62964c735b07cb5c9c

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 294b5837c7eed1da848c2294b9c20127f61e929bc26dc5a9dc0a3c522983c6b3
MD5 fbde15b2ce45ad5e15287602c028c5c7
BLAKE2b-256 5f8c81642bed5b8854d45ebe0bebe82cd7a28bea70bff7a9f6dca74730493900

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 57e7dbaf6bdfa33f2f92ca43033d009aebb4837a2458b2822bc6a07d6168712e
MD5 0c0f02709237b849c5e77f7b1d976c89
BLAKE2b-256 d2ee6462f80e2790e19ea3dab5c589fc60093b3d701b7702f6a8e81a85eec03c

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 5e0aeb61934d4127f4f3a5df4c2e7035ee878c70e2875d188018bdf4ffe45755
MD5 5a24511ca60475db5febb1446a8977a4
BLAKE2b-256 16b7829b800230f4941a0063a81130b3f19e9a314c613a0ec11a875dc99ba0b4

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 da7a2bb4cb90d9996c716dc5209cfb4c1fbd755bbe1cbf378640195e555ae829
MD5 51d4f8f7682f5cb4701f5c35bc7aa9f8
BLAKE2b-256 11f66a9248dc8c89d5e2789aa737c157f4be12aa8d40e95bdbe7179a410cb01d

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 20c97771ad2b09058195efb7757c92824ee09d45bb2ce86790622a65db3b501b
MD5 0b3c5f5e4ff8aa95dd89cfffd84045ab
BLAKE2b-256 86bc161bc586e48c34c41169b98d04012c5124be7e56656cf54f5040df5e2485

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8a5f291152e5c7f05debdbe8c6fa28f40a8bbc5cb37d735c8abe3a26d490434b
MD5 6ba6bf78eb44fcd648f5968ad74de22e
BLAKE2b-256 0cd0238a5f8f8c10a2b8913183861784f4e701ffc4132468164d2968a972dd2f

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 438549145ec0433a041f41cf44fe60a086ff3a797960edad64c31e9aa7a305fb
MD5 7741ab09141d5b5859f4cf7db9b12699
BLAKE2b-256 25a174768129d44181ad51a7054bff88b9299c5f2769b1e1e63d8be6aa7d2e2c

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp314-cp314-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b3511177da9295c2362fa1a5911001e9dda7e86bae9f828420de19048918c30a
MD5 2be13bab47ee665c06423ca12486e4ae
BLAKE2b-256 a2ff6f9f03797b70d73aa4458436010fbbf7e91d0a91d10c598b08fb3f8d279e

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 efc6b05f30c9711718522fba52ace34e60aad45861093f267b9a5e85a44b173c
MD5 9619368a3f3539a7a6907a5494b9e932
BLAKE2b-256 2c26c8c1e065e9e4dbc5e16c20940c319d0688c8d12f9fdac1fdd29ef784bd12

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 cdc6c20fbcb04a86857bb70003df6ebcf6ebf3b2a0887e48a8653a8daa84e8c3
MD5 c1144a6c2626f35459b2e543976bf745
BLAKE2b-256 501e6f94129834c76d5ae4c11660ba6b062ba0298233cbf5441374128287abc8

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b54919ed38a92043574e0a40fd7c5531fe0e56d20e3d5c29386c308d0e8919de
MD5 caed7306cd180be443cbf3f261f6b2ec
BLAKE2b-256 ccd9f098170c19817c662f144055c300531ce8ff16bb3e69ce00180cc028870f

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b02fb91def4d41e5c2873d03a01cd16bf9df0f75c221c47040c20953ff59d7dd
MD5 39209c0aca58fed230132f38eebf76bb
BLAKE2b-256 71754a36fdef0e752860e76e40ba55337bab40f4ee70f5532284332da4e1d3c3

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be87717b8038d2472e79c2ccd6a850e7bd93dbf4e3232751e82a3901f68804cc
MD5 90f7085f0e0eda4435485427fe864431
BLAKE2b-256 9656f3e52dbf89308718b2908c946e1c06f06ad304eed01c8a2b8802acbee3f6

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fadf23531aa784a3c9ef2050e24ac58e8581f3dd9a068e54ad6ea2fed4dd5eca
MD5 8e907956d66888aec666da1a1184d3be
BLAKE2b-256 474a862519718d93832fe35b4d0fe2302173435bd3876a4be52a412a62ed8ccd

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 66d8cfe50d2af37c60ec56c2882ef86ba09bf2cedf0cae82735106fc75668cea
MD5 64166a610ae1633325e8df6427e04759
BLAKE2b-256 3d14130cd17c66c416a389649074d10a49b6916ccd63addbcacf8e9c24d5e310

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 22db7846f2fe66d118c839fb6117dfa2bb5db369d1fd3e5499f97b73921a7c45
MD5 d8d24734f8d13daf2c79ea1539f83aef
BLAKE2b-256 c7d016894b4fdcdca6ee09791b8cee8acf962d78078f8a714db3706f58e11eb3

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 5bc78095ac22767c5b1e5623b64ce5bc8ac0f5c37326337ea427d2d390f59bb6
MD5 86d5c2051be752fda0e0e6ef76e4a24c
BLAKE2b-256 bdb488b42e7357f8a25db7bba964e816d91a341ac99c5b77f21e450bcb4dc936

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 639467b41e57db5fa092aa7c2b96cfb6279fab9a43b81cf6565759dbbeac9386
MD5 168351e782973bda2248030bd1356a11
BLAKE2b-256 dd79c9650fe86545fbdb6e6b75a5c5b3c6dfd9a90d99a663c8500e9b675e2011

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9767ef06b9054693ef0c8c8acaefe38aac569f6b7821a37ee8e06b1a0044cfe1
MD5 5dd39eb8812b9e90a7927cac6effe6e8
BLAKE2b-256 a8f2c0f657778822768a9402a1441546d71330d7820f5ea48b7db7222d3de904

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a771b6b99bd63512eae322c4aea213777c0cdfff35665253a0f0340252e8e998
MD5 908d95fbf6d09bf1e09c022e443debfc
BLAKE2b-256 c9f6768fe0cd4134c689ff1830a62b607c1fdae381c26baab37a7bc6d9300a12

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 83942d01e8fded272c0d28c3496b5425ec2c810ad196061f7d7b8b77c1a9e3dd
MD5 e5ebf47e19144c3a9e4d09793647ff54
BLAKE2b-256 fb0c5fd9f71c9efb73bd9ac6a78f6a7e7d44dcd822ad1bdc43787766e65c5879

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e26edf7ae6c811b39513fabba4ea001d2ea876480a40022d9c6496bc6818e147
MD5 9f54adf09e53324251ad39bbccf69c67
BLAKE2b-256 a37abb0eaeb56973f2a42483eaab175c3482065714d3f1dd49b264f572de2a50

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1ba05fdafd4c547dc87297cbafaabaa537d12b88370bca89f632805d8175c007
MD5 7d6b7b748d5887170f6fde3f188f2f75
BLAKE2b-256 0b40d30d78e80af93717f5e193ed49d00a7973a0a44666320e9345a8ed1e9c2e

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 363359cbc503a2d8bcd5d15ec6141c72d76f966be4f7b19cdf788091e1e5c5a1
MD5 6a7048639055a42cbb126ad167215eea
BLAKE2b-256 2e219e9ddd7ff4a7b4b782d97269019105bcf1adf9cc6ed145059b6292259e48

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 803ac7c5500fed5342f33040e50309c17bd37ef862a52ed83e52f81dc9d91acc
MD5 f4c69abf117d340a6fa4c392f39106c3
BLAKE2b-256 5e59647fe1c148b3503ced91cf59600274162befe51718481f13f1aa59c48234

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 614cbf83520eb51f4a3594d45f31e6108d35d6e0c87b3d5c78959705155d0719
MD5 fb116359fb305733d719fcc0b461c1a3
BLAKE2b-256 ac5c9d286c56c897f880a41cf66cf1e8019cf8f3c0cfe9634afed3a27e46fdd8

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fbef3ee563b255f6bd505cb953550b266beeed8ea8bb761eebc8770e893fdf7d
MD5 c1a4f2eabbff14a7360b320c0dfa8463
BLAKE2b-256 9ec60c7cb1bc6204d9e5aab6cf621739a9314b147206632e90f97ee8fdf633ba

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fa265e335c7ee206862de6c5e7bcc8033f0d6b0377b693543de768e6046276fe
MD5 a611c65a70eef74bc04d05f6c82ef8b8
BLAKE2b-256 ec26fc90863c12b2d118799c3b007c092d575ea79fada2d23fc62fa502b17cb4

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d55d73b8e3d713b685255df3891c16ecaa0b317064ae76ecdd9a9e3ac633d6a5
MD5 488956070284cc0cf2325994c1e48a1e
BLAKE2b-256 84a139341800d8d81b98781645e72dd25e1a360e0749e207eae9d9048ce618ce

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d47d84885061e8da05741a67bc82fef944f0163c6207faed27b21a915929ec73
MD5 34eccd85938e429de7a1fa6514fab78c
BLAKE2b-256 65fa447741b6fb57a5aefcb19bd9582f9d4627ef24c69f7969cd4510f1a47693

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 1b56869cda86a18295eeea3dad384c00b4bf3baad8eef72055a86ebdc22ea268
MD5 a101741bf8887c418c0870f9ffdc3d82
BLAKE2b-256 00071b001faa3479d910b58d84d39c37f0c9c227cdf6b6f997b5def2dcd3abdd

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f52b65b9726a8e01f750974cb8d9483e0a34f6b1caf61e9d4ede8fdbf389a514
MD5 1b5c0d92b37b226f02167e88e30a4066
BLAKE2b-256 afd39c484ce9be485a454a80fa49d1bafe6ca798b7a8ca5982cf7ac03868d5e6

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 fb5c00d74a40d20d51f69a0d2c9223abadff9b4ac6bdcfe158b3272bdbd660da
MD5 36807931fcf5e86951615c779caccc56
BLAKE2b-256 96fca7904e238a55a18741021d504606238b0307552a3dbc8655d9fe191685a3

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd0a2b18ffb7615dcb6e96691d50103b55eda3b031fe1999ed56bc7508411190
MD5 dc6fab3c8007bd7cf1f7bc2ac001ec4e
BLAKE2b-256 b245862a9fcfdf94f81360e275470cdc519b69e3565fe78d442a8d909da161cc

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 126b59530e79ef8395e7e218687f0b930d922cc1c818dd502afa57abd842d904
MD5 4272ba955b9207b90b5d33bc01c01397
BLAKE2b-256 94f76a60af08445a1728df79f517e3f523650efe55dafffef304952813f7cc06

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 68b1b5d443e5168a19435dbeb583702bca43255b71e8c847a70c5b7ba981d3b7
MD5 46b2a82c04b820bdfb60f2f96aec86cf
BLAKE2b-256 1b17a5c2010a55c106923b3a9a5e5c93a4c16b84deeea3ee0d647a5bbc133362

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2787d18a3db99ef5eddc768cefe61aaa6528692fdaa48b0293ca516c4778c7f7
MD5 e9bc48ff8795338d242fce327b8a6df0
BLAKE2b-256 17c1a8c26b9d57c9d335df0c0f0a62a8af0dd7f55c26517c863720c44fa5a7fe

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-win32.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 9fdce46098f059594b56c71d3562ce7ee1da9b9a0d7714e55d3f547418680da1
MD5 5858e3cf81391c5875e68ffc098682a2
BLAKE2b-256 1c756e84be580b49cd966707f6e2ceb71645362dcca9b9e18c488afd484d104b

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a3ac723ad2ee6b77c6ddec9649b27b8890643135de90c8b153ce599dd5509e96
MD5 005dcc90c5689838fe59a88daa021f26
BLAKE2b-256 a4f66d54f44899161f3a94f34f70dce3c7eefc70d30de0645737bc28262ac804

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 279b6a5a78d7b5d23d3e16a0d7ac0dbdd86bd4953a8440b37733267e4c81a301
MD5 36c7b41cb2b6759ada3a4cb008b70e5c
BLAKE2b-256 0bb3b36bf58841d6a18c3042edb45ea56634444e5620dc389a4edcb9a1eac6bb

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6d22255a61e75106d0a8266dd322635ec725a4c9c9ada94bb678173b02b8573
MD5 77e871ff107123539f47a6dad3267617
BLAKE2b-256 c7fae510594e5b98e4263001e6eb6009ccd5f1f6224e5889a22cc1d89c352dcd

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 297bcdf28d00eff18aa6cf1e4cab8c51668bba262a72950dd972d2e45589010f
MD5 0a197d1560abb5a021992b1230a93716
BLAKE2b-256 03476a987e5389ac76190f5c076331b28c57b98da5adf8402b1367b0d3efc39e

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.6-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for ultradict_wheels-0.0.6-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6768052aaf984cf975e83a60138b018113974b4d55ac466042edda0d5f0ce202
MD5 a8df1469848c2a66e88edceade6eeab4
BLAKE2b-256 0c7af9bdc24cce1d09bee71a052909da9f442fa444b64e1446e1f2024109e26e

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