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 Distribution

ultradict_wheels-0.0.7.tar.gz (220.3 kB view details)

Uploaded Source

Built Distributions

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

ultradict_wheels-0.0.7-cp314-cp314t-win_amd64.whl (172.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

ultradict_wheels-0.0.7-cp314-cp314t-win32.whl (145.9 kB view details)

Uploaded CPython 3.14tWindows x86

ultradict_wheels-0.0.7-cp314-cp314t-musllinux_1_2_x86_64.whl (944.4 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-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.7-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.7-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.7-cp314-cp314-win_amd64.whl (145.2 kB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

ultradict_wheels-0.0.7-cp314-cp314-musllinux_1_2_x86_64.whl (992.3 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.7-cp314-cp314-musllinux_1_2_aarch64.whl (963.1 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-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.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (987.6 kB view details)

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

ultradict_wheels-0.0.7-cp314-cp314-macosx_10_13_x86_64.whl (167.5 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

ultradict_wheels-0.0.7-cp313-cp313-win_amd64.whl (143.1 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

ultradict_wheels-0.0.7-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.7-cp313-cp313-musllinux_1_2_aarch64.whl (964.4 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-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.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (987.0 kB view details)

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

ultradict_wheels-0.0.7-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.7-cp312-cp312-win_amd64.whl (143.7 kB view details)

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

ultradict_wheels-0.0.7-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.7-cp312-cp312-musllinux_1_2_aarch64.whl (968.2 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-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.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (991.8 kB view details)

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

ultradict_wheels-0.0.7-cp312-cp312-macosx_10_13_x86_64.whl (168.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

ultradict_wheels-0.0.7-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.7-cp311-cp311-musllinux_1_2_aarch64.whl (1.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-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.7-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.7-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.7-cp310-cp310-win_amd64.whl (148.2 kB view details)

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

ultradict_wheels-0.0.7-cp310-cp310-musllinux_1_2_x86_64.whl (987.3 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.7-cp310-cp310-musllinux_1_2_aarch64.whl (967.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (985.8 kB view details)

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

ultradict_wheels-0.0.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (980.6 kB view details)

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

ultradict_wheels-0.0.7-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.7-cp39-cp39-win_amd64.whl (148.5 kB view details)

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9Windows x86

ultradict_wheels-0.0.7-cp39-cp39-musllinux_1_2_x86_64.whl (983.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

ultradict_wheels-0.0.7-cp39-cp39-musllinux_1_2_aarch64.whl (962.6 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

ultradict_wheels-0.0.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (981.1 kB view details)

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

ultradict_wheels-0.0.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (976.3 kB view details)

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

ultradict_wheels-0.0.7-cp39-cp39-macosx_10_9_x86_64.whl (168.1 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file ultradict_wheels-0.0.7.tar.gz.

File metadata

  • Download URL: ultradict_wheels-0.0.7.tar.gz
  • Upload date:
  • Size: 220.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for ultradict_wheels-0.0.7.tar.gz
Algorithm Hash digest
SHA256 bb373c92f4afe85befdd5b938fa265421de8faab025581bf3b3a82be5526008c
MD5 bb3a48014c4611fc01bd03be86b1f583
BLAKE2b-256 c8a8f44d7be4659b0ec896f485d0a2927e13a8b03d1874c443faee97ad6580f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 0060ec59e7e0a648aee2e238fa214a157cafce480bc67a451466717ed3948385
MD5 1a5bbb5448aca08512da4f1c84ce9aa9
BLAKE2b-256 02129e6d87b4b410eda1b917231d88667e36a946af7ed93a320ec3cd96538e22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 4d34c18f1e155891874d51412f8c3c821a2276afa1817946b38c4c3080204ef3
MD5 e9bc3bfc90766087f1d79b02db9e3886
BLAKE2b-256 064f9e2a92cbba291d97adc040848a2a232e3e477cb76ffd7d9f615954014744

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9869134f304de273f4b1195483b44f8a10f688b886818ab17184d8cc60061863
MD5 aac7477a10a53f9b3b13cbb619395745
BLAKE2b-256 dbf281ce139d1294944b89241ca2f4af9cd61d3042124d30e13fc00374cc12b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6eab754cd7d03f0893905df503228c51b0a8f188242dae01aa03846606ed8c84
MD5 79e8daf2212c74adc738417cbe73c7d5
BLAKE2b-256 364adead62c3c5b959d11b6f3948ec02ccc858c078cd48ce95fa231a45b52c15

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05f90424e342f293c5b74d664d980ee95e526d7a64f6ee4dc1646f2dee2521df
MD5 4edf5ed93509f11041f11eb9976e82ac
BLAKE2b-256 ddbc051782bb475cb75a86c78705b0da220a8c3cb4210deaa5df948c6ca77913

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8ba871fc8ffd5b7d5599853b9679fd7ccf06b2ac8f41a1593365f4d9d24ddc00
MD5 e6683d584773b68392e6de3e4d27c041
BLAKE2b-256 87125208372155ee40b6798058b7c034ac8c1e246ac4e43bffae764fd5ee7e6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5a3b95f7da5d1dc21d89872eddb800f63264e261934db8bc6c363773d689668a
MD5 1d0961b0b1317f1d61ee6441f54a8c10
BLAKE2b-256 7c184342baaf4ac8ae52cdf98cd8f1786f2ced55a0378c759c4f2d77ef86753f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f0d56fdf16c49ef9fe2b23b70af8f775d82a1d4a6874a76214245caf0f28569f
MD5 1c5d2fcc8f14c359dc0ec3754d09f0ed
BLAKE2b-256 bd6b91e19502d624264c055888d9e7208fd024c5a23eced772c045a3a39831a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e04874eb17165de407c5765b481eb0647f7279617e3d66012627d49f86cd2dec
MD5 cf913ef39847a8e5e062008fbd05b58f
BLAKE2b-256 442e5a1d3103e81e9f0520e50dfaf9ef40d170ded77b72e9c519d8ac4030c561

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f225b0589d7489f35d7dac000043e055b8236a5becc2b7bec10f370e9265f88b
MD5 65d2a05dd954c6c3b9af97e01cde83ad
BLAKE2b-256 e5350492bea7bc7826d1a89f32be76769c7970c82b30237da46944a62b585d6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ddc74842e5aa7559b91e71761dd4df532a02fc71bab67d2cdd284b3f5e12cd13
MD5 af85c7e2ea5d011c11f56c481efd1620
BLAKE2b-256 b422d64dc76539dc33ab2c6eb5ab5aebf130d695706e99426c148500900ce90e

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59014c04a1f0ad43daa313528f2d45f0b929d260369e1884279603d70adef846
MD5 7678b8dc27f3b0bd1367c08af67b9aac
BLAKE2b-256 2026c4c32f1075217c5078fe2383ab6997cb95b3ff22080ba104fa023bc19386

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 715257d8ff648ea1753ee29c0c0ad50e8e581529484fc44fd32dd7e6c7c548a9
MD5 aac8d9d583211c052a8cf582331d8fc0
BLAKE2b-256 70ed12c032b8d420891371076b46dcd08be2929abe96d32efbc6d1e641d451ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 524c39c49410825fecc61cabbcb540285ae7b0542bd46985ba065a570c60f658
MD5 834bd1ab8e03b589d7eb668eea1d0d11
BLAKE2b-256 3028a0e357d0f9e4009049974fdd595b4fc00974ba871d7a166410e88de00966

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1d79f981e31e71d1d9e3b959b02964b5e98e39097964a5446dbf86716cf367ee
MD5 906e96191abc2a96845d3a4b64bf49eb
BLAKE2b-256 d5324596db637e18bf84275049ec8933ffe2f29dc4b12114ef09005c347e0108

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 c89891d7f26e18aefb4584a6040898656af5b8738fe5babea28476689b917037
MD5 d9d18d00c0108ed2107a5fde0a7c2dce
BLAKE2b-256 2d7d8f775592966768916713104f0a6fb689c2da23643f78d25e5feaf3640cbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2aec504bce14de8319b6862761b7b0b22733ba834366e26f82672345a580b7d8
MD5 e5ac462b40fff609abefdfc837b9027b
BLAKE2b-256 0caa22b4ac021fcc22ed6310a04fc0786f5eb10f6c85665a043d35e2873f2e5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f041af28af6106d454d7a87387cc6dfee14a1d5be1dad98e7c79b10d16e91801
MD5 5dff5f33319c65d145a6c822156f3f50
BLAKE2b-256 d2c3462b8e7d49ae2aac2bdb31d946b0dcdc42a856b6dff5d4daa18902a9911c

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7fe60e2404666372059fc0d0637529a333ccd9b64b883d7941f168f8d8aa1aff
MD5 86b0500f9021a1fe3fc0d6764da7e388
BLAKE2b-256 70f9f72fdf6050b93816ba11b1705404d7505b666d7453be2c41814496093f0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9fdb4d10c1584615d8ce71e5addae741d3c9d93fc7f074b10686b6600d33adcc
MD5 35f866825c16203da4c95e4239e0f042
BLAKE2b-256 6f4e695d820299fa2c072654291b260459136500e9bff84fc97114808c4cb8ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 100c2b013ff4f4de97a7a639b82bb8e81244236139e9960d85841127b9ae8818
MD5 2e2022b4f303ecd3c5b34136330fceb8
BLAKE2b-256 bb4b07d1d7649bf18159531b6ee0d28f6248a9b8efaa08758e6df06f9542dbb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a5720d95c06b8eb3339c5207fb0332508cfc87ade884f5c8bec72758e4bc4f1f
MD5 56dd6700f626a0d09175b83f2dba43f2
BLAKE2b-256 48e5dea01b5359882282bb7e207f4e41bbed51078957738998c21f93af94d0f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 6a00700d2f5f566cbcba95e8f3d8a417d6ac9f0264aa9272d870a2d3d616a465
MD5 7437694f232249fe2c10bd98707a437b
BLAKE2b-256 80e99d9daa0b24b954a3d40fb67fac4f8b74642cae9b27bdbe6b03025d6e2629

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a239adda468fa73afb104957da9867181791072ea7659dd9a150abbb9ed3aac7
MD5 7a8c3c7a0c5f6cb977c4a48099b35e65
BLAKE2b-256 728f43bb7713512709588bf8f2fe7928510069921f22594f0e9a5267f1fe151a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5d09fe64da1ab52a47c7317fc3dccb742ad2ea632e3b40962f1e8f0b61bad982
MD5 92d3876b99dc93f97c5701a1575477f7
BLAKE2b-256 10b89761248bd7f6cbcfa51c12b29c99201bcbbce98884d79e646fe52775d660

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3dcc1fcefb102ef0987e6713eafce1271710215910508947e409ac3474e7d417
MD5 dbff975d01de584c77ac96bbf1fe3358
BLAKE2b-256 a10c6279e857462b56be3653746b6d68965062532265d1ac4950189d20b6c638

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b016b9d66172a307bfe753184fe745b914aa8b79155798b4d585bdceb2ec32b4
MD5 95b875216ed165b42f4fbbab55e67d5a
BLAKE2b-256 d1ae088170824365b9540fe8817fdb51c3d214945c1a7023d51db9eacb6640cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ea4235787f1c50633dbbb5b3687ff19ee35b4783d5c4dafa0fe825f3fc73da46
MD5 871059b33ba6bb5337c271a5cac59618
BLAKE2b-256 9e48e88d3bf078ce426ec8d4fb9f68649536cc4ae89c7f9ab91b2f5900eeec72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2aa4ec9803271e5bc35d25c41eef1fb43bbdb67d4ee4c944cdf1a94054a85dd6
MD5 90b0eea69856d2c2d8309eaa07df880c
BLAKE2b-256 d5c7f1a81048f4c0395fc40a286f34c02cab56f07e1ef8a3f1495492b6e1f736

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 48c0dd8901cbb6d7bab536fe555b4a9665fe3404bf9cf2a66002ee52f285fdc2
MD5 e69b2b8e10df04164828f09fef9d00e5
BLAKE2b-256 866369065c524a2b95233f9810cc7f24b2ba3efdda9c3236ab028b30f62067c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1c663503b6b984977c9435d65fbcc33c03891d3cba0194717897949a34efdda8
MD5 a253065bdb7f53769f3a5a9b5060ef68
BLAKE2b-256 6bb6e2adb01b3e1bf1b5fb94cd9a50e21bfb79c6945ec8602270ec4951acf146

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cad186b4e105f1995e4f1268ddfbfa4855ce0eb723f4b2bc4989bbfd4a78568b
MD5 d9e1676e4c568aced58fab810a759e06
BLAKE2b-256 9b341f9a7c4a6dbb6358a7ade42d23b4824a6cdca56c575e5216e9fca9ccd8ef

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eca61e6653361bfdf48abdfdbd9d2778bdd7e5b818fb617b162ddaf6f69d279b
MD5 02b2971e75505c94b1b4fa5e9dfdaf2a
BLAKE2b-256 b8c00c888781d64f6a57eba7cb659433aa2c6c99f5ad5e1682f76a61781b9e7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8c1f24a9b8f7af7bb25894c53453b0e69e14178af1ffffe6038b8dd96d72732c
MD5 bc877271be55a3ecfa7282f8ed86bea5
BLAKE2b-256 2a3706b20fab6facf1376ea3dc400f73ff4cb9d179134863d3d0ca26c51b5a31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 967eb3e38e3631659a070981ffd9ad639fbbad35503602775d86fb6bf84957a6
MD5 cdc6f3da7f34be882cade2a958bac249
BLAKE2b-256 506e5e4c4efb09d141d6a32e87735e487d84e349a57782f7600dab34a2d2f5bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1f954a1845f55715660ed3e75785edbdb57e6da6864ca22f2759e9b19620ba92
MD5 973d1a2dfa94f4c4375c5bb295c235fe
BLAKE2b-256 03c824e1e8ad1916aac413535f2ddd1aeb7db8a972bf9486b4e338b6bb7e6c45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 0617c81a1c01f71e71f1cec861bbfa794377f1b9c9689bf9ffc25ad6662ba044
MD5 7511b734e707a3c377110e3f2706d62c
BLAKE2b-256 4bf3d4f938a9a331c241341cf3bc4603a0b83b599ef36c60606f0ed4a52673dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 46b98c61d06dcf57cdbade8cb3f67009293740be9a0d1cffe71a966d005c8a4b
MD5 1530f4bf5ae2db9329b5922ce7d28887
BLAKE2b-256 7cddd560083869dc6c568d9497bb27d1ad0b765a8b61b7526e82aecf7a5ac21b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cf0fa9f8f3320d6340d5f21711514154e6d50ffea62b100d19febbecc5e47390
MD5 11c8740d9d9088243145c59ec1de8a15
BLAKE2b-256 123b57ba365c63fa6bf8cedccb914d58c7a46e3c6ddbe1d736f1eb759a167fbc

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1ec12fc1275115abbb17281798b1bc0cd8f0d4d50271b5ff98b49b2c87febd8e
MD5 0ce6aa94b9a64eaf90ebaf635051ec07
BLAKE2b-256 1649e3757a1b1c4e50fc3d093c45afe37c77002300c7c33c9559baa3c60d3cd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c1825e75e0273b16004171001d60a3f169288bff287963d923d194d42f62082a
MD5 8572b0d30aac21952758fc0a0b059079
BLAKE2b-256 0592bd1e21b68203a811123e8aceebd93056d71b0b6ab1d5e17b6982f4ca56a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6b66bedc9efefbb6ba102525086f9fb9981b46e44554304347a5788a9e077887
MD5 761731dfe8f25df10981e378466b2332
BLAKE2b-256 f888bfc62466dcb5497fbd158b08fa8120c00825b0cebf0333e69ac9414125fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 04d7d1fd2a8583c048eed03a22eef70c1f6c58fc5e956fc4267cf29fe76835af
MD5 4eafea855a748b4e965c90fdea49a871
BLAKE2b-256 9721f57353423c85a28925c98849a9621fdbdc3c25738e42174b03f7534d4cf8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 11a9806b8cb5a1c0f4ff8cb697e6fd4ade67688718a5654ae87f964b90314738
MD5 9cfab1e9e76f20c2e4f5c38f532aa32e
BLAKE2b-256 66eb003c50be9dd64b17814d15623d1e8ad0018a3a35497a1f94a445576963fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fa44c9ca977f5526c3ef1e3aba38ef71e8bce848b5a0b1cca3befb44a6c9bd28
MD5 b7299497c33ae97bc4a636f1960c9557
BLAKE2b-256 b44c7417616bab1d4a39da305f9f97fb5b63f4ff70f22098b87223e17a516578

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9ea1dc8535089887d7d72b5f1c55b8a071ca8a9526058b3540b7b3bba441c14b
MD5 2e562c2b21b81fc29deb52f3d9acecb9
BLAKE2b-256 a04191df5f6d67c50b86df921298ba2d9eb6f7848b3aff260a54127731acd35f

See more details on using hashes here.

File details

Details for the file ultradict_wheels-0.0.7-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.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 08afecb2085d5c9c40e53ff81c7e1f534a2f18623606fe99a6a699ada9ba0f12
MD5 807c3589b8d132ccf6cd02786d4c2292
BLAKE2b-256 60d1a1c2ab91be2e68f43e6d74656ce25c1848724c81fd1a6f4a188142276534

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c2ff0197060a35e7667cb5c459e7f27de404c442ac6e851821f3fe0f4988021c
MD5 645c2e5ade4edd0ab98f39d7178cc983
BLAKE2b-256 a7dc39e4f36ce7700d9e6588cafd36c06c808a6fbeaa97cf0ccf89821628b37f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ultradict_wheels-0.0.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 89c9459a5857eca29fa627a27c340d421dfa6d25946511eb1bf7d96f935aea96
MD5 168aff164e9e4c86b99cd2be769e42a0
BLAKE2b-256 3af71d88f532c30b92b90adb5df39f45c6e7892bfef7dbdf497a5b0c5f6bb7aa

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