Skip to main content

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:

  1. Core Loader & Diagnostics: Handles the dynamic importing of the C++ binary (winnerz_core), including binary size verification, truncation repair, and Windows DLL directory management.
  2. Document Object Model: Provides Pythonic abstractions (Document, Page) to interact with PDF files, managing resources and state safely.
  3. Thread-Safe Interpreter Pipeline: A C++ native, thread-safe PDF token interpreter that leverages std::async for parallel multi-page text extraction, eliminating GIL bottlenecks.
  4. Micro-OCR Fallback Engine: A pure C++ built-in OCR engine that activates automatically when encountering corrupted or missing ToUnicode tables. It uses 64-bit bitwise packing and hardware POPCOUNT for blazing fast template matching without external dependencies like Tesseract.
  5. Rendering & Editing Pipeline: A native C++ rendering and editing engine utilizing integrated PDFium capabilities, completely independent of external Python pip packages.
  6. 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., GLIBC mismatches) 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.

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 __popcnt64 instructions 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 with json.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 memory bytes (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 a Page object 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 to get_text("dict")) for all pages simultaneously using native C++ threads. Returns a massive JSON string. Use json.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 in fonts_dir on a per-character basis. Supports "multiline": true in 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 as bytes directly 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 be dict, rawdict, blocks, text, json, or rawjson.
  • get_drawings(): Extracts vector drawings and graphics, mapping them to structured dictionaries containing rect, fill, and stroke properties.
  • 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 fit rect while optionally keeping aspect ratio via keep_proportion. The actual merge is executed efficiently during doc.save().
  • rect (Property): Retrieves the bounding box of the page as a Rect.

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 include raw, rgba, png, jpg, and jpeg. Output formats other than raw require the Pillow library.

Geometry Classes

  • Rect(x0, y0, x1, y1): Represents a rectangle. Provides properties for width, height, and is_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 of winnerz.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


Download files

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

Source Distribution

winnerz-1.2.17.1.tar.gz (22.5 MB view details)

Uploaded Source

Built Distributions

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

winnerz-1.2.17.1-cp312-cp312-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.12Windows x86-64

winnerz-1.2.17.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (12.1 MB view details)

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

winnerz-1.2.17.1-cp312-cp312-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

winnerz-1.2.17.1-cp312-cp312-macosx_10_9_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

winnerz-1.2.17.1-cp311-cp311-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.11Windows x86-64

winnerz-1.2.17.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (10.3 MB view details)

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

winnerz-1.2.17.1-cp311-cp311-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

winnerz-1.2.17.1-cp311-cp311-macosx_10_9_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

winnerz-1.2.17.1-cp310-cp310-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.10Windows x86-64

winnerz-1.2.17.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (8.6 MB view details)

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

winnerz-1.2.17.1-cp310-cp310-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

winnerz-1.2.17.1-cp310-cp310-macosx_10_9_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

winnerz-1.2.17.1-cp39-cp39-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.9Windows x86-64

winnerz-1.2.17.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (6.9 MB view details)

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

winnerz-1.2.17.1-cp39-cp39-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

winnerz-1.2.17.1-cp39-cp39-macosx_10_9_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

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

Hashes for winnerz-1.2.17.1.tar.gz
Algorithm Hash digest
SHA256 2ce64011b471c34df227343e9db7ad338d7e9e8f339148828746d1b8d2b970ed
MD5 3a4951799dd371092e8275a8a1aa2e46
BLAKE2b-256 f44afa16569b6e76c89c07bccef61a2d027b481714606eec7dfd69039bee5124

See more details on using hashes here.

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

Hashes for winnerz-1.2.17.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 febb8eb7761d104ef90decd296863ac662d4599e83b3d87ca4399c24e2b2f706
MD5 4df6d3c9c474cf7eb6bb05b3157b455f
BLAKE2b-256 e3dfb1f083997c2f08ab7cc1ce21be05829628c45015cd14ad00f4fc08e776db

See more details on using hashes here.

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

File hashes

Hashes for winnerz-1.2.17.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44ebf7984d9aadc902bfe3cc1260621967043f1316ae9daed9fb75a23a0e6143
MD5 ec6c9237f317f82d0dfe6b4e94449f2a
BLAKE2b-256 06d5572b6b9d2890cea61e9167e24eb26ebb7b6a3fe38a5f5ba57f7259eae7c9

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a505d93e42d8f96d83a6450d3305295da2985f663a9b18ecca9e26d85dee2e83
MD5 037f54cc004cbfd418c84fb6e68a10c0
BLAKE2b-256 04f8d8807b9d95404092be3a9015fb39c71669d782e2ba2f5d6ed32a58378c24

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1381fce38659ecd82e237d03a286c9315f5af006ace5d3b355e54bb2d75acabc
MD5 05fb564f817e43be4f623671fed57101
BLAKE2b-256 d63eb859e4a1de21d867545a19464bdba642c0f7b7ea471bf10036af79ed87a2

See more details on using hashes here.

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

Hashes for winnerz-1.2.17.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f1aeff0c3c9d0645f6fe16115602cb530add1ad6f5bd1dcc9aeb09ec9acfb461
MD5 0b36b645f3910c92548a9d98fc40bd51
BLAKE2b-256 7936a8008faecf717a3bf9164b61b35dddd4742bef28e05e255b71801ce0a166

See more details on using hashes here.

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

File hashes

Hashes for winnerz-1.2.17.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b4a4464f60163369836c5075fbc83e6c7cd597544d8b2e5c3291208f622a46c9
MD5 196aa9ff7fb5413f5157ef17208899fe
BLAKE2b-256 80e587f20cf26451b44c47418cb00079b01aa1880e48fba5f5de1ff66823dfb2

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ab7c78c35c267d1730fc188909a0993c3b17513d13aff8e98131a18ee7bb486
MD5 b369b6ba5e5d03f4e224e5faca8df27a
BLAKE2b-256 1b8acce7da4650b06c77517c4445e689eec97d78c67cb536c63ef3bff3cc2da7

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4494aaf0ab3aaf8a24131cfea64396bcfcb068cc5c790d8972ba2cc8c97264d3
MD5 5d4d96ce808558eb7a68adcfd04fc1eb
BLAKE2b-256 a7eb6879291f602f1de1e3b7e2a6dd17f11921bc00fb4e23d454d99dd732ab0f

See more details on using hashes here.

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

Hashes for winnerz-1.2.17.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1fecb6d0d60a246201621c85008c4b729d07b57da3f3f9bcd91581dca90efda9
MD5 382d78d59c8242e09e93df427448a1e4
BLAKE2b-256 959667731c87becc97f7dd13910ed03b7a37d6f9dbb8904d225e6aa39d6e25af

See more details on using hashes here.

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

File hashes

Hashes for winnerz-1.2.17.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 434269f281d5bb08d1e188168dd868f52220c2820906938f3deab78eb8986a91
MD5 32c673e882eea0c5c2ad5880e3ef1652
BLAKE2b-256 8d29d084a6239604c3dffeadea53580b72b8822d38e750a13c81876f7ceaceb9

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9644c6ea609dfd637c1f3b78109abc56e284b1b20f1ce64dbdcbf0d2709f4ec9
MD5 e0a7101b652749569c8d96f510ff6b97
BLAKE2b-256 b0373831182ed44a6c9572d34b6f7eae1715598319ef1e375f1fcb5160958833

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7a1253a0e4adcddcbffc106c758381db4b2af98cf6e04986661e61bd6f5f8d56
MD5 16efda56233eaf49de4f4076e84be70a
BLAKE2b-256 c9eaef9a7fa990c2ee84786fffd86d4623b084814cf57a10372c95c641df0323

See more details on using hashes here.

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

Hashes for winnerz-1.2.17.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e29eed07f31adde1ef354fd85a2cd40246d05d03d848ce418bbb8958ebf41fa5
MD5 1c78e34a2afa627055dd36c47fe0e4ed
BLAKE2b-256 e8a6a1d73f6b319e5d051f0d7d7548b265cb1cd757e0f7937b0d11e031dbadb2

See more details on using hashes here.

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

File hashes

Hashes for winnerz-1.2.17.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f41bf04043243cad0e09ade6a55d0766721609ae09ccffd3ef35c08a2d5338ab
MD5 233bc61a820ae4e3d174492e387ed2fd
BLAKE2b-256 330c2b4d537430514476027da727decda947d57abddca8cb82f51c0cc1e2cb85

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7ce1ab027d84ed1b69a5ae2f3a212a1f567b862500351271f767340dba8836e4
MD5 9754ab03539129da523098640bbb41c1
BLAKE2b-256 67c401c5f46ab42c89ce4a5a07de1f13bd7b90d711c67a8cb092c55a4250836c

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fbc87965f13b68a5571bf437739131714fb5d5f0d57089fc98382a098ac567e8
MD5 975bf975e8f749f6f44faae9bd0e2672
BLAKE2b-256 ce747f55f00749d86fc2763b29b1148468af033e89de338830da87312f7efab4

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