Hypertile
A unified, work-stealing executor collocating free-threaded Python coroutines and Send Rust futures in one right-sized thread pool.
1. Installation & Quickstart
pip install hypertile
Free-threaded interpreters (3.14t, PEP 779) unlock true parallel bytecode execution; the package also works in cooperative mode on GIL builds (3.11+). See the honest support matrix.
Python 3.13t is not supported. PyO3 dropped free-threaded 3.13 in the same release that added 3.14 support, so no single PyO3 version can target both. 3.14t is the CPython release that declared free-threading supported, so Hypertile targets that. Users who need 3.13t must stay on Hypertile 0.1.1, which pins PyO3 0.23 and therefore cannot build for 3.14.
Wheels: pre-built wheels are published for CPython 3.11–3.14 on Linux, macOS and Windows. If no wheel matches your interpreter,
pip installbuilds from the sdist and needs a Rust toolchain — see Development.
import asyncio
import hypertile
def cpu_heavy(payload: bytes, rounds: int = 50) -> bytes:
# Any blocking, synchronous callable: hashing, compression, JSON, a DB driver...
return hypertile.native_pipeline_transform(payload, rounds) # stand-in for real work
async def main() -> None:
# 1. Offload a blocking callable to the shared pool (no extra OS threads).
digest = await hypertile.to_thread(cpu_heavy, b"payload", rounds=25)
print("via to_thread:", digest.hex()[:16])
# 2. Vectorized batch: one FFI crossing for the whole batch.
results = await hypertile.gather_to_thread(cpu_heavy, [b"a" * 32, b"b" * 32, b"c" * 32])
print("batch results:", len(results))
# 3. Native pipeline: dispatch straight onto the work-stealing queue.
native = hypertile.spawn_native_pipeline(b"raw-bytes", rounds=100)
print("native digest:", (await native).hex()[:16])
asyncio.run(main())
asyncio.to_thread compatibility: hypertile.to_thread is a drop-in replacement for
asyncio.to_thread that dispatches onto the shared pool instead of a separate
ThreadPoolExecutor. Under the hood, hypertile.run(coro) installs the pool behind
asyncio for full ecosystem compatibility.
Source-comment note: doc comments refer to sections such as
PRD_v2 §2.1. That was an internal design note; its content is reproduced in Architecture below, so no external document is needed to work on this codebase.
2. Executive Summary & Problem Space
Modern high-performance applications combining Python and Rust (such as FastAPI web services, AI/ML inference servers, and distributed ETL pipelines) conventionally run two completely independent async runtime stacks:
- Python's Async Stack: Single-threaded
asyncioevent loop driving coroutines, combined with a separateThreadPoolExecutor(allocating 8–32 OS threads) for offloading blocking work. - Rust's Async Stack: A native multi-threaded runtime (Tokio-style) with its own thread pool sized to available CPU cores.
The Hidden Bottlenecks of Dual Pools:
- 💥 Hardware Oversubscription: Two independent pools sized against hardware cores create $2 \times \text{CPUs}$ active OS threads, resulting in relentless thread parking, context switching, and cache-line invalidation.
- 🐢 Double-Hop Boundary Latency: Crossing between Python and Rust requires two scheduling hops: $$\text{Native Wake} \longrightarrow \text{Native Tick} \longrightarrow \texttt{call_soon_threadsafe} \longrightarrow \texttt{eventfd} \longrightarrow \text{Asyncio Tick} \longrightarrow \text{Python Task}$$
- 🔒 Zero Capacity Sharing: Idle interpreter threads cannot assist with stranded native CPU work, and idle native threads cannot step Python coroutines.
- 🛑 GIL Overhead vs. Free-Threaded Promise: Standard CPython serializes bytecode execution under the Global Interpreter Lock (GIL). However, with PEP 779 free-threaded Python (
3.14t+), Python bytecode can execute truly in parallel across multiple OS threads—if and only if the executor is designed to step coroutines natively without lock contention.
3. Architecture & Core Innovations
Hypertile provides one unified multi-threaded runtime whose workers are individually either native-only (pure Rust) or bilingual (interpreter-attached):
+-----------------------------------------------+
| HYPERTILE GLOBAL POOL |
| shared injector (MPSC) + per-worker local |
| Chase-Lev deques (crossbeam-deque) |
+-----------------------------------------------+
| | |
+-------------+---------+ +------+------+ +------+---------+
| Bilingual worker | | Native | | Bilingual |
| (interpreter-attach | | worker | | worker |
| on 3.14t+) | | (Rust-only)| | (… N workers) |
+----------------------+ +-------------+ +----------------+
| | |
+---------+ | +------------------+
| Step Python | | Poll Rust |
| coroutines, in | | futures (any |
| batches, via | | Send future, |
| coro.send() | | never two |
| (interpreter | | threads at once)|
| mode) | | |
+--------------------+ +------------------+
Architectural Highlights:
- Single-Hop Continuation Handoff: When a native task finishes on worker $W$, $W$ pushes the awaiting continuation directly onto its own local Chase-Lev deque. $W$ resumes it immediately without returning to an event loop or waking another thread (~1.01 µs per hop).
- Cache-Line False-Sharing Elimination (
CachePadded): Hot atomics (idle_count) and worker locks (idle_stack,stealers_cache) are isolated viacrossbeam_utils::CachePadded, eliminating MESI/MOESI cache-line bouncing across 64-byte (x86/ARM) and 128-byte (Apple Silicon M-series/POWER) lines. - Sub-Nanosecond PRNG (
fast_rand): Replaced thread-local cryptographic RNG calls with an ultra-fast non-cryptographic SplitMix64 PRNG, executing victim selection in 2–3 single-cycle ALU instructions. - Inter-Core Batch Work-Stealing (
steal_batch_and_pop): When stealing from the global injector or peer workers, an idle thread atomically claims half of the victim's queue in a single transaction, executing remaining tasks locally out of L1 cache with zero contention. - Hardware-Adaptive Vectorized Batching:
Vectorized APIs (
batch_native_pipelineandgather_to_thread) cross the Python $\leftrightarrow$ Rust FFI boundary once per slice and dynamically chunk workloads across physical cores, yielding >237,000 to >697,000 operations/sec. - Dynamic Worker Registration & Capacity Sharing: External server threads (e.g. FastAPI / Uvicorn workers) dynamically join Hypertile's work-stealing pool as auxiliary workers while idle and leave cleanly in 2.76 µs / cycle.
- Panic Containment:
Native panics are caught via
catch_unwindand surfaced ashypertile.PanicInTaskwithout poisoning mutexes or killing worker threads.
4. GIL vs. Free-Threaded Support (Honest Matrix)
| Capability | Free-Threaded (3.14t+, PEP 779) |
Standard GIL Builds (3.11–3.14) |
|---|---|---|
| Parallel Python Bytecode Execution | Yes (bilingual workers step simultaneously) | No (bytecode requires GIL) |
| Native Task Work-Stealing | Yes (all workers) | Yes (all workers) |
| Single-Hop Continuation Handoff | Yes (on any bilingual worker) | Yes (on event loop thread) |
| Vectorized Micro-Batching | Yes (>237,000 req/s) | Yes (>226,000 req/s) |
| Dynamic Worker Registration | Yes (2.76 µs / cycle) | Yes (2.76 µs / cycle) |
| Operating Mode | Full Native Work-Stealing | Cooperative Mode |
Known limitations
- Level 1 mode is intentionally minimal.
hypertile.run(coro, level1=True)drives pure coroutines without an event loop and can only await objects exposingadd_done_callback. Anything else raisesTypeErrorimmediately rather than hanging. Usehypertile.run(coro)forasyncio.sleep,httpx,aiohttp, and the rest of the asyncio ecosystem. - The asyncio policy API is deprecated upstream. Python 3.14 deprecated
asyncio.set_event_loop_policy(removal in 3.16).hypertile.install()still works there, logs a warning where the API is gone, and the native/offload APIs are unaffected because they never depend on the event loop. - Bilingual stepping is cooperative, not preemptive. A Python coroutine that never awaits on a free-threaded build will not be descheduled by Hypertile.
5. API Reference & Developer Ergonomics
Asynchronous Offloading: hypertile.to_thread
Ultra-low-latency drop-in replacement for asyncio.to_thread(). Dispatches callables directly to Hypertile's bilingual workers without allocating OS threads or intermediate asyncio futures:
import hypertile
# Dispatch arbitrary Python callable
result = await hypertile.to_thread(crypto_hash, payload, rounds=50)
Vectorized Parallel Dispatch: hypertile.gather_to_thread
Vectorized parallel execution across an iterable of inputs. Crosses the FFI boundary once for the entire batch:
# Process a collection of items in parallel across bilingual workers
results = await hypertile.gather_to_thread(process_record, [r1, r2, r3, r4])
Function Decorator: @hypertile.task
Converts synchronous functions into awaitable Hypertile tasks:
@hypertile.task
def verify_token(raw_jwt: str) -> dict:
return jwt.decode(raw_jwt, key, algorithms=["RS256"])
# Inside an async endpoint:
claims = await verify_token(header_auth)
Native Pipelines: hypertile.spawn_native_pipeline
Route CPU-intensive numerical and cryptographic transforms directly onto the native Rust work-stealing queue with single-hop continuation:
native_task = hypertile.spawn_native_pipeline(raw_bytes, rounds=100)
digest = await native_task
High-Throughput Batch Pipeline: hypertile.batch_native_pipeline
Submits a batch of payloads directly into the native work-stealing engine in a single FFI crossing:
# Dispatches thousands of payloads with sub-5µs amortized latency
digests = await hypertile.batch_native_pipeline(payload_chunks, rounds=100)
Dynamic Worker Registration
Join the work-stealing pool from long-running server threads (e.g., FastAPI lifespan):
with hypertile.register_worker(kind="bilingual") as worker:
# Assist the executor while waiting for requests
worker.run_until_idle()
Pool Sizing: hypertile.configure & HYPERTILE_WORKERS
A single process-wide pool backs every Hypertile call. Its size is fixed once the pool has been used, so configure it first - or set an environment variable, which also covers pools started by code that runs before yours.
import hypertile
hypertile.configure(workers=32) # I/O-bound service: more threads than cores
assert hypertile.worker_count() == 32
HYPERTILE_WORKERS=32 python app.py # same thing, resolvable before import
hypertile.configure() with no argument (or HYPERTILE_WORKERS=0) restores the default,
and hypertile.default_worker_count() reports what that is on the current machine.
Calling configure() after the pool has started raises RuntimeError naming the size in
use, rather than silently ignoring the request.
Why the default is not just the CPU count. CPU-bound and blocking work want opposite thread counts, and they share one pool:
| Workload | Wants | Why |
|---|---|---|
| CPU-bound | around one thread per logical CPU | extra threads contend for the same execution units |
Blocking (to_thread around a sync driver, time.sleep, file I/O) |
more threads than CPUs | a blocked thread consumes no CPU, so a CPU-sized pool just queues |
The second row is the one a CPU-sized pool gets wrong. Measured on a 4-core/8-thread machine, 24 blocking tasks of 100 ms each:
| Pool size | Wall time |
|---|---|
| 8 (CPU count) | 0.31 s |
| 12 (the default) | 0.21 s |
That matches asyncio.to_thread()'s own default executor, which sizes itself to
min(32, cores + 4) for the same reason. The compute side pays nothing measurable: with
the same 24 CPU-bound tasks the default and a CPU-sized pool finish together (0.95-1.00 s
vs 0.95-0.97 s).
Measured on a 15 W mobile CPU. Under sustained load that part throttles to a fixed power ceiling, at which point both pool sizes converge and the comparison stops being meaningful - so compare pool sizes on short workloads, or on hardware without a tight power budget.
So the default is the CPU count plus a small blocking headroom, capped at 32 and never below one worker per CPU. Compute-bound applications can ask for exactly the CPU count; I/O-heavy services should ask for considerably more.
Cooperative Cancellation: CancellationToken
Propagate cooperative cancellation across bilingual and native workers:
token = hypertile.CancellationToken()
token.cancel()
assert token.is_cancelled()
6. C / C++ Embeddable ABI (hypertile-capi & include/hypertile.h)
For applications written in C, C++, Go (cgo), or Zig, Hypertile provides a lightweight, zero-overhead extern "C" ABI via the hypertile-capi crate and include/hypertile.h.
No heavy C++ framework is imposed; the C ABI maps directly to Hypertile's Chase-Lev deques and work-stealing pool without intermediate runtime overhead.
Building the C ABI Libraries
# Build release dynamic (.dll/.so/.dylib) and static (.lib/.a) libraries
cargo build --release -p hypertile-capi
Artifacts are generated in target/release/:
- Dynamic Library:
hypertile_capi.dll(Windows) /libhypertile_capi.so(Linux) /libhypertile_capi.dylib(macOS) - Static Library:
hypertile_capi.lib(MSVC) /libhypertile_capi.a(GCC/Clang)
Core C API Functions:
hypertile_init(size_t num_workers): Initialize global pool (pass 0 for CPU core count; the first call fixes the worker count).hypertile_spawn(work, arg): Asynchronously dispatch a task; returns an opaquehypertile_task_t*.hypertile_wait(task, &out_result): Efficiently park the calling thread until task completes.hypertile_poll(task, &out_result): Non-blocking completion poll (0ready,1pending).hypertile_task_destroy(task): Free task handle (safe before or after completion).hypertile_spawn_with_callback(work, arg, callback, user_data): Fire-and-forget task with completion callback.hypertile_batch_spawn(work, args, out_results, count): Vectorized parallel batch execution (>5,000,000 items/sec).hypertile_register_worker(): Dynamically join the work-stealing pool from external C/C++ threads. Returns a non-zero worker ID, or0on failure.hypertile_shutdown(): Cleanly drain and stop worker threads.
The ABI reports panics instead of unwinding across the boundary: a panicking work function
is caught and surfaced as HYPERTILE_ERR_PANIC. See SECURITY.md for the
caller's obligations (argument lifetime, thread-safety, and shutdown ordering).
C Example
#include <stdio.h>
#include <stdint.h>
#include "hypertile.h"
void* compute(void* arg) {
uintptr_t x = (uintptr_t)arg;
return (void*)(x * 2);
}
int main(void) {
hypertile_init(0); // auto CPU cores
// 1. Single Task Spawning
hypertile_task_t* task = hypertile_spawn(compute, (void*)21);
void* result = NULL;
hypertile_wait(task, &result);
printf("Result: %zu\n", (uintptr_t)result); // 42
hypertile_task_destroy(task);
// 2. Vectorized Parallel Batch (10,000 items)
const size_t COUNT = 10000;
void* args[COUNT];
void* results[COUNT];
for (size_t i = 0; i < COUNT; ++i) args[i] = (void*)(uintptr_t)i;
hypertile_batch_spawn(compute, args, results, COUNT);
hypertile_shutdown();
return 0;
}
Compiling and Linking:
# GCC / Clang (Dynamic link)
gcc -O3 -I include main.c -L target/release -lhypertile_capi -o app
# MSVC (cl.exe)
cl /O2 /I include main.c target\release\hypertile_capi.dll.lib
A complete executable verification program is located at examples/c/main.c.
7. Benchmarks & Empirical Performance
All benchmarks were measured on Windows AMD64 (8 physical cores / 16 threads) comparing identical cryptographic/numerical workloads. Re-measure locally before drawing conclusions — see CONTRIBUTING.md.
A. Free-Threaded (No-GIL) Benchmark:
These figures were recorded on Python 3.13t. The script still runs unchanged on 3.14t — the interpreter that Hypertile currently builds for — but the numbers below have not been re-measured on it, so treat them as indicative rather than as a 3.14t result.
python showcase/free_threaded_showcase.py
| Metric | Standard ThreadPool (Baseline) | Hypertile Direct (Scalar) | Hypertile Vector (Batch) | Speedup vs Baseline |
|---|---|---|---|---|
| Throughput (req/s) | 10,747 req/s | 19,340 req/s | 237,270 req/s | 1.80x (scalar) / 22.1x (vector) |
| Wall Time (10,000 reqs) | 0.930 s | 0.517 s | 0.042 s | -44.4% (scalar) / -95.5% (vector) |
| Median Latency (p50) | 17.54 ms | 8.21 ms | 4.21 µs / item | -53.2% latency reduction |
| Tail Latency (p95) | 24.08 ms | 11.23 ms | 4.21 µs / item | -53.4% tail latency reduction |
| Tail Latency (p99) | 74.17 ms | 56.39 ms | 4.21 µs / item | -24.0% tail latency reduction |
B. Standard GIL (Python 3.11) Honest Benchmark:
python showcase/showcase_benchmark.py
| Metric | Standard asyncio (Baseline) | Hypertile L2 Hook | Hypertile Vector Batch | Speedup vs Baseline |
|---|---|---|---|---|
| Cross-Thread Offload Latency | 115.41 µs | 113.22 µs | N/A | 1.02x faster offload |
| Pipeline Throughput | 9,653 req/s | 8,295 req/s | 226,924 req/s | 23.5x throughput multiplier |
| Median Latency (p50) | 21.68 ms | 25.62 ms | 4.41 µs / item | Sub-5µs per item |
| Dynamic Worker Cycle | N/A | 2.76 µs / cycle | N/A | Sub-3µs thread registration |
8. Development Setup
Prerequisites: Rust stable (rust-version = 1.79 floor), Python 3.11+, and
maturin >= 1.8. uv is a
convenient way to get a free-threaded interpreter.
Any interpreter layout works — the commands below use python to mean your venv's
interpreter (.venv/bin/python on Linux/macOS, .venv\Scripts\python.exe on Windows).
# 1. A free-threaded environment (recommended for scheduler work)
uv python install 3.14t
uv venv --python 3.14t .venv-314t
# 2. Tooling
python -m pip install --upgrade "maturin>=1.8,<2.0" pytest ruff
# 3. Build the extension in place
maturin develop --release
On Windows, maturin develop needs the venv to be discoverable:
$env:VIRTUAL_ENV = "$PWD\.venv-314t"
maturin develop --release
Run the same gates CI runs (see CONTRIBUTING.md for details):
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test -p hypertile-core -p hypertile-capi --locked
ruff check .
pytest -v tests/
Rebuild (
maturin develop --release) after any Rust change, otherwisepytestruns against a stale extension binary.
Scheduler, task-lifecycle and worker-registry changes are also covered by a seeded
concurrency harness (hypertile-core/tests/race_harness.rs) that replays any failure from
its seed. Sweep it across many seeds at high iteration counts when hunting:
scripts/race_stress.sh # debug: keeps overflow checks on
scripts/race_stress.sh release # faster, for long sweeps
ThreadSanitizer and AddressSanitizer runs live in the scheduled
Sanitizers workflow; see
CONTRIBUTING.md for the manual commands.
9. Production Examples
Complete, executable production examples are provided in examples/:
- C / C++ Embeddable Driver (
examples/c/main.c): Zero-overhead C API driver testing single tasks, polling, callbacks, vectorized batch execution, and worker registration. - FastAPI Microservice (
examples/fastapi_service.py): Lifespan worker registration,@hypertile.taskoffloading, and native pipeline endpoints.python examples/fastapi_service.py - Batch Data Pipeline (
examples/data_pipeline.py): Multi-stage ETL pipeline, cooperative cancellation tokens, dynamic worker scaling, and vectorized native batches.python examples/data_pipeline.py
10. Multi-OS & Hardware Compatibility Matrix
| Platform | Architecture | Tier | Verification Status |
|---|---|---|---|
| Windows | x86_64, aarch64 | Tier 1 | Verified with MSVC toolchain, WaitOnAddress, keyed events, PyO3 .pyd, C ABI .dll/.lib. |
| Linux | x86_64, aarch64 | Tier 1 | POSIX threads, standard futexes, C ABI .so/.a, multi-OS GitHub Actions CI workflow enabled. |
| macOS | x86_64, aarch64 (Apple Silicon) | Tier 1 | Pthread primitives, Mach monotonic timing, 128B Apple Silicon cache alignment, C ABI .dylib/.a. |
CI exercises GIL (3.11–3.14) and free-threaded (3.14t) interpreters on all three platforms, plus the C ABI test suite.
11. Contributing, Security & License
- CONTRIBUTING.md — build, test, lint and PR expectations.
- CODE_OF_CONDUCT.md — this project follows the Contributor Covenant.
- SECURITY.md — how to report vulnerabilities privately, and the threat model.
- CHANGELOG.md — notable changes per release.
- Issue templates are available under
.github/ISSUE_TEMPLATE.
License
Dual-licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you shall be dual-licensed as above, without any additional terms or conditions.
Metadata
Release files for hypertile 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hypertile-0.1.2.tar.gz | 72.5 kB | Details |
Built distributions (wheels)
Total release size: 7.6 MB
Release files / hypertile-0.1.2.tar.gz
| Download URL | hypertile-0.1.2.tar.gz |
|---|---|
| Size | 72.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
df81fccc90903e201d9c4f72cbe4a33150f6bee00a5d6f9c4773323bc5ff6e90
|
|
BLAKE2b-256 checksum How to use checksums |
d5888f0d1e06af76b087062bfaa9fc8afd503ef274ea15f4b69104d9c4e7e680
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hypertile-0.1.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 370.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ce0c11296d62c61927efa9438fc04a81cb4bd5f28119ab106a29178f510ed10e
|
|
BLAKE2b-256 checksum How to use checksums |
478f33f054a7c5863b73eb981c58e1d2ec920b0b0b67e1710ce1cf631e8e865f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hypertile-0.1.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 360.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
99622249d2eb4b0ca91615dc1ba77d622d1d895064fd7322899a54712157e0d2
|
|
BLAKE2b-256 checksum How to use checksums |
c5b5cbb44c7b9b420ee7b0023db16d37a4a5987baf3322440b6806b7eee27987
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314-win_amd64.whl
| Download URL | hypertile-0.1.2-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 278.9 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ab89201a5883de3fc69ed49967bb5a4379d3a3a11448c0d59449bae464cde870
|
|
BLAKE2b-256 checksum How to use checksums |
756b7105172c764c90462edd4fbd15b08164f8b39f4bb4e41735bf545842de17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hypertile-0.1.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 372.7 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
45e18368dbeda1b81db3dc710766687777a9c1b385218009b5409ec5d01f6366
|
|
BLAKE2b-256 checksum How to use checksums |
9447723234e2573065a2af50fc0f29da090c9318a1db2b6530bc233c0dcb1bfb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hypertile-0.1.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 363.4 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c6af90cc1840a62aebda771010070424fbb5a822035519a4672a03cc888c8039
|
|
BLAKE2b-256 checksum How to use checksums |
fb8c4d86889472c16d155c52bafc6cbf598fa9b38babb88e770e818ec8af0fdc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | hypertile-0.1.2-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 332.4 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fdb44df39c6b801ab46c5e3a1c8c5e265ffbe6d8e7129f856c0ae565cf9cb308
|
|
BLAKE2b-256 checksum How to use checksums |
4c8046ba1fa49e0efcec3496dc194360c0e98a9ec88ec8ba11e72da16fe16afd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl
| Download URL | hypertile-0.1.2-cp314-cp314-macosx_10_12_x86_64.whl |
|---|---|
| Size | 343.2 kB |
| Tags | CPython 3.14 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2d2716701cf75e192ad18581761d8c0ce6d7f2c598144d9eb2ac10a15fa40a9d
|
|
BLAKE2b-256 checksum How to use checksums |
1674c863f0435f0416e7b0546a3d6a609e47dece7d70c1b8da6a8f30149f3f49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp313-cp313-win_amd64.whl
| Download URL | hypertile-0.1.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 279.4 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ff3ec0b2cd830bc63102e7308386b23dc7b2d92e777ed1faccc6d5cbd18f0554
|
|
BLAKE2b-256 checksum How to use checksums |
3ec04cd0f66f6327b144c23439e78cccb271d2cf48b9d18d587744c37857e1c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hypertile-0.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 372.5 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
8adab83fe363d557b6c1692f8f53ca2cea273eca29df2bf09e64d0eed56415c0
|
|
BLAKE2b-256 checksum How to use checksums |
f9cbcd139b7c95eca622aa9453c88c3684ec944ea364a66b9185a8afe66fab8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hypertile-0.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 363.0 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
204c5086249b2e516f7fccc0fd99e220343df6ef4b5c52080b1b4b413f19e5cc
|
|
BLAKE2b-256 checksum How to use checksums |
c032fc67f16a4337cc54e6669e30041c8619ce52c94ea90fe17413bf81de0bb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | hypertile-0.1.2-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 332.3 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
89e494f9b91e0921aea7b88b6aa0037bdc67606df660dcba18e11df04bb58de3
|
|
BLAKE2b-256 checksum How to use checksums |
e1368ef3bde7e8bc128a13cac7218247dd4825ddc91b3e30fe78a133cbb851f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | hypertile-0.1.2-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 342.9 kB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5fc0e7a0506777d0d05ca0cb0ae01d3146fb97e78329b55af4933459d6ec60c3
|
|
BLAKE2b-256 checksum How to use checksums |
e71eccd18a7c0698711b4280e1d08e2861897352b5212f208c77f3b6fa901848
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp312-cp312-win_amd64.whl
| Download URL | hypertile-0.1.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 278.7 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
978a5397e0cf4cc2fc8278c4a697f8cd984f8b63af0c19a170d8213519cc4163
|
|
BLAKE2b-256 checksum How to use checksums |
493f395deb410390dbdf22f87b95c3359636a7330a07a4f9acbcb601fa85c331
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hypertile-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 371.9 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
08b8d6dba52a27aa00f6012bc966722ad8f2c88a53328c135d1b9931b2597be6
|
|
BLAKE2b-256 checksum How to use checksums |
3b750c05c2d5ce81629ed93208576956ce6a55bab04f4ec011913e15b7a8bdde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hypertile-0.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 362.8 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
c81ac0a6f6ab5be682ba8b7f06aaf5afea41f0746470ca6e93f4038cd247fbfd
|
|
BLAKE2b-256 checksum How to use checksums |
0ff55e148bf07d4da86f8625239493eda13dd8c71fc498e8ea040e873d0dc741
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | hypertile-0.1.2-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 332.0 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b6624be183bd1f16d32aefdd147638c8cd482162d05c09dbff9e79ba2613aac8
|
|
BLAKE2b-256 checksum How to use checksums |
21922a72de3a2545ea8a3efd078229970d2e17174d7d21b736130ea532e0076b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | hypertile-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 342.4 kB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f450bd6813bdbe637fc5952cf51052a54074990f1f9a3ecaf8650174f610fadf
|
|
BLAKE2b-256 checksum How to use checksums |
3f7fdf6fae81765a04a3a058e8c100179c28be0fe31634413f4d649aca3e2102
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp311-cp311-win_amd64.whl
| Download URL | hypertile-0.1.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 282.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
62f13feba4de950c09376f8ff155442c741d3be2a3acac36307968add7ced325
|
|
BLAKE2b-256 checksum How to use checksums |
b5c33db3824e74a2a58cead2660a9dcfc43a3e1d28e3289d1dbae4a73a27dc7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | hypertile-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 369.2 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
5663d41bfb8840de5a264464fc9e6dd4b5110d9cfef5ac5cd02a7aa614001cab
|
|
BLAKE2b-256 checksum How to use checksums |
4549e4cba1ea732626126c148e089ed7db0b69c271a7b8ce1b611258b2ebf260
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | hypertile-0.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 361.6 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
84e31988d57958b5a3edbaf8b78442524655309d884023cfeb9c91088fc423ef
|
|
BLAKE2b-256 checksum How to use checksums |
269e57343bb5cf912ee1a74ea6099684203051e09be4a7e3e7c42c19c5ad8468
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | hypertile-0.1.2-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 334.9 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d8ad294016865c10786c32fabed42521934fa45a32477e00209533bb1675e12d
|
|
BLAKE2b-256 checksum How to use checksums |
0edb0a555c7e826124a6c5435e8f635f1f56cfacdc38c29a7cf94d1916d6ad65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hypertile-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | hypertile-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 338.4 kB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
2b1eed1c2968cf1e08689e521a0c050335946efa0bfae473dbec58c724d59069
|
|
BLAKE2b-256 checksum How to use checksums |
2f6ead2c3877dfcf57f633b4629da86e9f33936981a5035618977d01795c364b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|