A robust Python wrapper for high-performance PDF rendering and text extraction using C++ core.
Project description
WinnerZ Python Library Documentation
Overview
The winnerz library is a robust Python wrapper designed for processing, rendering, and manipulating PDF documents. It relies on a high-performance, multi-threaded C++ core extension (winnerz_core) for intensive operations while providing seamless fallback mechanisms and caching strategies in Python.
The architecture emphasizes blistering-fast text extraction, reliability, and fault-tolerance, specifically in handling binary dependencies, dynamic core library loading, and flexible preview rendering via PDFium.
Architecture
The system is divided into several conceptual layers:
- Core Loader & Diagnostics: Handles the dynamic importing of the C++ binary (
winnerz_core), including binary size verification, truncation repair, and Windows DLL directory management. - Document Object Model: Provides Pythonic abstractions (
Document,Page) to interact with PDF files, managing resources and state safely. - Thread-Safe Interpreter Pipeline: A C++ native, thread-safe PDF token interpreter that leverages
std::asyncfor parallel multi-page text extraction, eliminating GIL bottlenecks. - Micro-OCR Fallback Engine: A pure C++ built-in OCR engine that activates automatically when encountering corrupted or missing
ToUnicodetables. It uses 64-bit bitwise packing and hardwarePOPCOUNTfor blazing fast template matching without external dependencies like Tesseract. - Rendering & Editing Pipeline: A native C++ rendering and editing engine utilizing integrated PDFium capabilities, completely independent of external Python pip packages.
- Geometry & Data Structures: Implements domain-specific types (
Rect,Matrix,Pixmap) to standardize data flow between the C++ layer and Python runtime.
Core Loading Mechanism
The library initializes the C++ binary through _load_core(). This system provides the following safety guarantees:
- Thread Safety: Uses
threading.Lock()to ensure the core is initialized exactly once. - Retry Logic: Implements a retry loop (
_CORE_IMPORT_RETRIES = 3) to mitigate transient filesystem or OS-level loading issues. - Self-Healing: If a truncated binary is detected (e.g., due to an interrupted build or copy),
_try_repair_truncated_core_binary()attempts to restore it from other valid candidate binaries in the directory. - Diagnostic Reporting: Generates detailed error messages specifying binary ABI mismatches (e.g.,
GLIBCmismatches) or binary sizes to accelerate debugging.
Environment Variables
WINNERZ_PREVIEW_BACKEND: Controls the backend used for rendering preview data when the C++ core returns placeholder data.- Valid values:
auto(default),pdfium. - Resolution order for
auto: Uses PDFium when available.
- Valid values:
Advanced Features
Micro-OCR Anti-Obfuscation
WinnerZ includes a built-in, lightweight Micro-OCR engine written entirely in C++. When a PDF intentionally hides its text by removing the ToUnicode table or scrambling encodings, the engine automatically falls back to rendering the vector glyphs and performing Image-over-Union (IoU) template matching.
- Broad Language Support: Contains 2170+ built-in templates covering English, Vietnamese, Latin Extended, Cyrillic, Greek, and Thai.
- Hardware Accelerated: Uses 64-bit Bitwise Packing and CPU
__popcnt64instructions to evaluate millions of pixel comparisons in milliseconds. - Zero Dependencies: Does not require Tesseract, ONNX, or any heavy AI models.
Concurrency & Multi-threading Architecture
WinnerZ features a sophisticated threading model designed to maximize hardware utilization while complying with Python's Global Interpreter Lock (GIL). Functions are grouped into three categories:
Group 1: Native C++ Multi-threading (Fully Automatic)
These functions automatically spawn C++ threads to utilize all CPU cores. They bypass the Python GIL and run at maximum hardware speeds.
doc.get_all_text(): Extracts plain text only from all pages simultaneously. Extremely fast, but strips out all spatial coordinates and font data.doc.get_all_dicts_json(include_chars=False, sort=False): High-performance multi-threaded extraction of rich text structures (bbox, fonts, colors, ascender, descender). Returns a JSON string of the entire document's data in seconds. Parse withjson.loads()to bypass GIL object-creation overhead.doc.insert_text_json(): Batch inserts text tasks across hundreds of pages in parallel.doc.redact_pages_bytes(): Performs batch redaction across multiple pages simultaneously.
Group 2: GIL-Released Methods (Python ThreadPool Ready)
These functions process a single page at a time but explicitly release the Python GIL (py::gil_scoped_release) during computation. To achieve multi-threading, you must wrap them in Python's concurrent.futures.ThreadPoolExecutor. This is the optimal architecture for extracting complex Python objects (like dicts) concurrently without lock contention.
page.get_text("dict"): Extracts text along with precise spatial coordinates (bbox), fonts, and colors.page.get_text("blocks"),page.get_text("rawdict")page.get_text_plain()
Group 3: Single-threaded (GIL Locked)
These functions execute sequentially.
page.get_drawings()page.get_pixmap()
Class Reference
Document
Represents a PDF document instance. It manages the lifecycle of the underlying file, featuring a lazy-loading fallback architecture: it natively opens the PDF via C++ by default and only invokes the native C++ PDFium backend for decryption or file repair if the document is encrypted or structurally corrupted.
Constructor:
Document(path_or_bytes): Resolves the file path or raw memorybytes(Zero-Disk mode) and instantly initializes the C++ core. If encryption is detected (e.g. RC4/AES), it falls back to an automatic decryption routine seamlessly in RAM or via a temporary file.
Methods:
__getitem__(index): Retrieves aPageobject at the specified 0-based index. Supports negative indexing.__len__(): Returns the total number of pages in the document.get_all_text(): A highly optimized utility that utilizes C++ multi-threading to extract plain text only from all pages. It scales automatically with CPU cores and bypasses the Python GIL. Note: This function discards all spatial coordinates (bboxes) and font data.get_all_dicts_json(include_chars=False, sort=False): Extracts rich structural data (similar toget_text("dict")) for all pages simultaneously using native C++ threads. Returns a massive JSON string. Usejson.loads()to parse it instantly into a list of Python dictionaries, completely bypassing the single-threaded PyBind11 object creation overhead.tobytes(): (Zero-Disk) Returns the finalized PDF as a raw byte array directly from RAM, avoiding any disk I/O.insert_text_json(json_str, fonts_dir="", progress_cb=None): High-speed native multi-threaded C++ text insertion. Renders a JSON string of tasks directly into the PDF document in RAM in parallel. Bypasses intermediate rendering pipelines and significantly boosts performance. Evaluates fallback fonts infonts_diron a per-character basis. Supports"multiline": truein JSON to enable Word-wrap mode within the bounding box.redact_pages_bytes(page_rects_map): (Native C++) Performs parallel Block Redaction across multiple pages and returns the cleaned PDF asbytesdirectly in RAM. Use with caution on very large files to avoid memory pressure.get_page_font_basenames(page_index=0): Extracts the true BaseFont name (e.g., 'TimesNewRomanPS-BoldMT') from internal PDF resource identifiers (e.g., 'R14') by automatically stripping subset prefixes ('ABCDEF+'). Crucial for accurate font mapping and reconstruction.close(): Cleans up temporary resources, such as decrypted temporary files and in-memory editing buffers.
Page
Represents a single page within a Document.
Methods:
get_text(mode="dict", sort=False): Extracts text content.mode: Can bedict,rawdict,blocks,text,json, orrawjson.
get_drawings(): Extracts vector drawings and graphics, mapping them to structured dictionaries containingrect,fill, andstrokeproperties.get_pixmap(matrix=None, clip=None): Renders the page to a bitmap image (Pixmap) using the C++ core engine.redact_text(rects, output_path, min_overlap_ratio=0.0): (Legacy C++ Core) Applies text-only redaction to the specified rectangles and saves the output to a new PDF file.clean_contents(): Completely wipes out the vector graphics and text layer of the current page.insert_image(rect, stream=None): Inserts an image (from bytes) into the specified rectangle. It handles internal PDF matrix transformations automatically.show_pdf_page(rect, doc_src, page_idx, overlay=True, keep_proportion=True): Queues a complex overlay operation. It places a page from another document (doc_src) onto the current page, scaling it to fitrectwhile optionally keeping aspect ratio viakeep_proportion. The actual merge is executed efficiently duringdoc.save().rect(Property): Retrieves the bounding box of the page as aRect.
Pixmap
Represents an uncompressed image buffer containing pixel data.
Properties:
width,height: Dimensions in pixels.n: Number of channels (e.g., 4 for RGBA).stride: Number of bytes per row.samples: Raw byte array of pixel data.
Methods:
pixel(x, y): Returns a tuple representing the pixel color at the specified coordinates.tobytes(fmt="raw"): Encodes the pixmap to the requested format. Supported formats includeraw,rgba,png,jpg, andjpeg. Output formats other than raw require thePillowlibrary.
Geometry Classes
- Rect(x0, y0, x1, y1): Represents a rectangle. Provides properties for
width,height, andis_empty. Overloads the&operator to compute the intersection of two rectangles. - Matrix(sx=1.0, sy=1.0): Represents a 2D scaling matrix.
Caching Strategy
The module implements file-based caching for document instances to minimize redundant initialization and file I/O operations.
- Global Document Cache: Managed via
winnerz.open(path). Validates cache hits using file signature metrics (file size and modification time in nanoseconds).[!TIP] If you need to open multiple copies of the same file concurrently or bypass this cache (e.g., in background workers), initialize the document directly using
winnerz.Document(path)instead ofwinnerz.open(). - Preview Document Cache: A separate caching layer for rendering backends to keep the preview document context alive across multiple page renders.
- C++ Thread-Safe Font Cache: The C++ core utilizes a lock-guarded (
std::recursive_mutex) internal cache for Unicode, Width, and CodeSpace maps to prevent data races during parallel text extraction.
Logging
WinnerZ uses standard Python logging under the winnerz logger namespace. Error and debug messages are routed seamlessly to this logger, allowing you to configure professional logging streams similar to pymupdf.
import logging
logging.getLogger("winnerz").setLevel(logging.DEBUG)
Performance Benchmark
Thanks to the native C++ multi-threading pipeline and persistent object caching, WinnerZ outperforms established industry standards like PyMuPDF (fitz) significantly in bulk text extraction tasks.
Tested on a standard 185-page PDF file (Plain Text Extraction):
- ⏱️ PyMuPDF (
fitz): ~0.44s - 🚀 WinnerZ (
get_all_text()): ~0.18s (2.5x Faster)
Tested on a 22MB Russian Chemistry Book (Structured Dictionary/JSON Extraction):
- ⏱️ PyMuPDF Single-Thread (
get_text("json")): ~24.2s - 🚀 WinnerZ Native Multi-Thread (
get_all_dicts_json()): ~11.4s (> 2x Faster)
C++ Micro-OCR Benchmark
Tested on a 100% text-obfuscated PDF file (Forcing the system to Micro-OCR all characters):
- 🐢 Traditional OCR (Tesseract): ~3 - 5 seconds / page
- ⚡ WinnerZ Micro-OCR (Bitwise Optimized): ~0.33 seconds / page (~15x Faster)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file winnerz-1.2.17.1.tar.gz.
File metadata
- Download URL: winnerz-1.2.17.1.tar.gz
- Upload date:
- Size: 22.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ce64011b471c34df227343e9db7ad338d7e9e8f339148828746d1b8d2b970ed
|
|
| MD5 |
3a4951799dd371092e8275a8a1aa2e46
|
|
| BLAKE2b-256 |
f44afa16569b6e76c89c07bccef61a2d027b481714606eec7dfd69039bee5124
|
File details
Details for the file winnerz-1.2.17.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
febb8eb7761d104ef90decd296863ac662d4599e83b3d87ca4399c24e2b2f706
|
|
| MD5 |
4df6d3c9c474cf7eb6bb05b3157b455f
|
|
| BLAKE2b-256 |
e3dfb1f083997c2f08ab7cc1ce21be05829628c45015cd14ad00f4fc08e776db
|
File details
Details for the file winnerz-1.2.17.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 12.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44ebf7984d9aadc902bfe3cc1260621967043f1316ae9daed9fb75a23a0e6143
|
|
| MD5 |
ec6c9237f317f82d0dfe6b4e94449f2a
|
|
| BLAKE2b-256 |
06d5572b6b9d2890cea61e9167e24eb26ebb7b6a3fe38a5f5ba57f7259eae7c9
|
File details
Details for the file winnerz-1.2.17.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a505d93e42d8f96d83a6450d3305295da2985f663a9b18ecca9e26d85dee2e83
|
|
| MD5 |
037f54cc004cbfd418c84fb6e68a10c0
|
|
| BLAKE2b-256 |
04f8d8807b9d95404092be3a9015fb39c71669d782e2ba2f5d6ed32a58378c24
|
File details
Details for the file winnerz-1.2.17.1-cp312-cp312-macosx_10_9_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp312-cp312-macosx_10_9_x86_64.whl
- Upload date:
- Size: 6.7 MB
- Tags: CPython 3.12, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1381fce38659ecd82e237d03a286c9315f5af006ace5d3b355e54bb2d75acabc
|
|
| MD5 |
05fb564f817e43be4f623671fed57101
|
|
| BLAKE2b-256 |
d63eb859e4a1de21d867545a19464bdba642c0f7b7ea471bf10036af79ed87a2
|
File details
Details for the file winnerz-1.2.17.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1aeff0c3c9d0645f6fe16115602cb530add1ad6f5bd1dcc9aeb09ec9acfb461
|
|
| MD5 |
0b36b645f3910c92548a9d98fc40bd51
|
|
| BLAKE2b-256 |
7936a8008faecf717a3bf9164b61b35dddd4742bef28e05e255b71801ce0a166
|
File details
Details for the file winnerz-1.2.17.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 10.3 MB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4a4464f60163369836c5075fbc83e6c7cd597544d8b2e5c3291208f622a46c9
|
|
| MD5 |
196aa9ff7fb5413f5157ef17208899fe
|
|
| BLAKE2b-256 |
80e587f20cf26451b44c47418cb00079b01aa1880e48fba5f5de1ff66823dfb2
|
File details
Details for the file winnerz-1.2.17.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ab7c78c35c267d1730fc188909a0993c3b17513d13aff8e98131a18ee7bb486
|
|
| MD5 |
b369b6ba5e5d03f4e224e5faca8df27a
|
|
| BLAKE2b-256 |
1b8acce7da4650b06c77517c4445e689eec97d78c67cb536c63ef3bff3cc2da7
|
File details
Details for the file winnerz-1.2.17.1-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 6.7 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4494aaf0ab3aaf8a24131cfea64396bcfcb068cc5c790d8972ba2cc8c97264d3
|
|
| MD5 |
5d4d96ce808558eb7a68adcfd04fc1eb
|
|
| BLAKE2b-256 |
a7eb6879291f602f1de1e3b7e2a6dd17f11921bc00fb4e23d454d99dd732ab0f
|
File details
Details for the file winnerz-1.2.17.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fecb6d0d60a246201621c85008c4b729d07b57da3f3f9bcd91581dca90efda9
|
|
| MD5 |
382d78d59c8242e09e93df427448a1e4
|
|
| BLAKE2b-256 |
959667731c87becc97f7dd13910ed03b7a37d6f9dbb8904d225e6aa39d6e25af
|
File details
Details for the file winnerz-1.2.17.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 8.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
434269f281d5bb08d1e188168dd868f52220c2820906938f3deab78eb8986a91
|
|
| MD5 |
32c673e882eea0c5c2ad5880e3ef1652
|
|
| BLAKE2b-256 |
8d29d084a6239604c3dffeadea53580b72b8822d38e750a13c81876f7ceaceb9
|
File details
Details for the file winnerz-1.2.17.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9644c6ea609dfd637c1f3b78109abc56e284b1b20f1ce64dbdcbf0d2709f4ec9
|
|
| MD5 |
e0a7101b652749569c8d96f510ff6b97
|
|
| BLAKE2b-256 |
b0373831182ed44a6c9572d34b6f7eae1715598319ef1e375f1fcb5160958833
|
File details
Details for the file winnerz-1.2.17.1-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 6.7 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a1253a0e4adcddcbffc106c758381db4b2af98cf6e04986661e61bd6f5f8d56
|
|
| MD5 |
16efda56233eaf49de4f4076e84be70a
|
|
| BLAKE2b-256 |
c9eaef9a7fa990c2ee84786fffd86d4623b084814cf57a10372c95c641df0323
|
File details
Details for the file winnerz-1.2.17.1-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 11.4 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e29eed07f31adde1ef354fd85a2cd40246d05d03d848ce418bbb8958ebf41fa5
|
|
| MD5 |
1c78e34a2afa627055dd36c47fe0e4ed
|
|
| BLAKE2b-256 |
e8a6a1d73f6b319e5d051f0d7d7548b265cb1cd757e0f7937b0d11e031dbadb2
|
File details
Details for the file winnerz-1.2.17.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 6.9 MB
- Tags: CPython 3.9, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f41bf04043243cad0e09ade6a55d0766721609ae09ccffd3ef35c08a2d5338ab
|
|
| MD5 |
233bc61a820ae4e3d174492e387ed2fd
|
|
| BLAKE2b-256 |
330c2b4d537430514476027da727decda947d57abddca8cb82f51c0cc1e2cb85
|
File details
Details for the file winnerz-1.2.17.1-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 6.4 MB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ce1ab027d84ed1b69a5ae2f3a212a1f567b862500351271f767340dba8836e4
|
|
| MD5 |
9754ab03539129da523098640bbb41c1
|
|
| BLAKE2b-256 |
67c401c5f46ab42c89ce4a5a07de1f13bd7b90d711c67a8cb092c55a4250836c
|
File details
Details for the file winnerz-1.2.17.1-cp39-cp39-macosx_10_9_x86_64.whl.
File metadata
- Download URL: winnerz-1.2.17.1-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 6.7 MB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbc87965f13b68a5571bf437739131714fb5d5f0d57089fc98382a098ac567e8
|
|
| MD5 |
975bf975e8f749f6f44faae9bd0e2672
|
|
| BLAKE2b-256 |
ce747f55f00749d86fc2763b29b1148468af033e89de338830da87312f7efab4
|