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.3.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.3-cp312-cp312-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.12Windows x86-64

winnerz-1.2.17.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (12.2 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

winnerz-1.2.17.3-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.3-cp311-cp311-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.11Windows x86-64

winnerz-1.2.17.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (10.4 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

winnerz-1.2.17.3-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.3-cp310-cp310-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.10Windows x86-64

winnerz-1.2.17.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (8.7 MB view details)

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

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

Uploaded CPython 3.10macOS 11.0+ ARM64

winnerz-1.2.17.3-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.3-cp39-cp39-win_amd64.whl (11.4 MB view details)

Uploaded CPython 3.9Windows x86-64

winnerz-1.2.17.3-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.3-cp39-cp39-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

winnerz-1.2.17.3-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.3.tar.gz.

File metadata

  • Download URL: winnerz-1.2.17.3.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.3.tar.gz
Algorithm Hash digest
SHA256 bb1d7e72ab4fa16edc0d39d465fc5058da92d1f4550afb0fdbdc1bc30e230c1b
MD5 ed833afcba5fa5b75053aad0393c9875
BLAKE2b-256 5de1e2d63d11218730a79cab773028f364178a264a322de1e9758e18a6690ce4

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: winnerz-1.2.17.3-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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d4771aaa6699ca69e5b2f43cd8a3a73cc6125994d987bb348352dbe867661350
MD5 18c6c17afeef736d3f3e494d53310fc5
BLAKE2b-256 42a0ae56c6e4c9a2cea3877c64bcebd06664ff5152aa6d194ecd53dd95e3fd7f

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f9898e640cb88d2b9ca8b77b4093b67f78c396f54372d5efb6f5762727871862
MD5 7ead84816768746723c3426b69134973
BLAKE2b-256 b2ff25bbf9f6f43b8da1c074095f731b28b4ba72e2abb1b072a5657d3618bcfa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 46b7e08aa1e9adb2f66726bb5ec4a431014bc95440270f013a176a5d7686a26e
MD5 c062da875cf1cd8f22815902cbe31922
BLAKE2b-256 4c9d7244253ebc0811a6a6ea1fe463924d72662fae31d0604a609cb59ddcb780

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aae4ca688a6284aee69fcdfd3d13c2693d5ec952c6e0b8bd2ccd2194802ca936
MD5 9fc2485cbf7ccac91b83fee2d477ed28
BLAKE2b-256 c8ba6412a3edab865a8cba8f5054759a1fa0774edd58d80cdb50afe775562c0e

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: winnerz-1.2.17.3-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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6898df8012df0935a3baf7fc379458655de2da2c691dfa3a20e2e2535a0dcbaa
MD5 c9352148a0e7456a5d1847c2f08a6942
BLAKE2b-256 18c1c99e1c2a187af6208c123f77d1e2d9bc7656b9ec35d760b7d62f51876744

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6bad9004035427b488f8a33263cbbd99dfaf7e42ded758dd91eb7ab6a0b63e9e
MD5 7eb215369578bcd33589cb2edc8027f6
BLAKE2b-256 3d1501ac6227df56c864c84e8756a95da2997c2023b1279b7565cf21da623214

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5a92c68be07713a02dec137b87079bfb8caa7722b1d1455b368c93c93ed8d96
MD5 72d8b60e1a9f616cd1241aa082f84327
BLAKE2b-256 4300e7cb5ba876940ee7fb09784f97a89c7901db5fb91add4083b17fa14cb330

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 641ae6f318379b044acbebcf951c1207b8068eddb887b2808aad0afd76ae93b7
MD5 10d808591145e3e74a65acc9567f6474
BLAKE2b-256 fa64b6538d172f6fb5f6f9548a7c608592c880a42368c147cef7c7373673dbc5

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: winnerz-1.2.17.3-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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2c9a9bfb92bc616b4b83ec0a35411fb8719d5263e14ff07d737982fd35f04c65
MD5 dfa5088171e00c09deec59f76da8ce3f
BLAKE2b-256 be028b24679a85eaf63163bad72cf52061eb80842c2f8c419e0e3e693ae5e0fc

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ea984b481ab7b3d0cd7cf0d27d164efd04878af7a97aea7918ceffd87e15f89
MD5 5cb5a4594756c5132efe72a698eaeb87
BLAKE2b-256 03deca1d5c55ca532c2627ef922d7a216ad43ddc953d1514db10032cac32fe44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cc7b102378642cbfd28e526ea6c4672512a5ea20fa30c8df404338a21e16cc03
MD5 288e8e00454e4b5758d63338a7eb6d61
BLAKE2b-256 fe79b016915cabefbba81fbb96c5155ed17d8712fb99a6aaa27981741518361a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 87fdf0f78d96a9a458ab85e74befdafeed729ffcf43fe875a22104e8c08f38b3
MD5 f1aa540ffe1f7fd8d9766afbc2d7124e
BLAKE2b-256 9cf4a915c6b354f43402623e2fc47b9f9d556b8d11f25fae871ddb634f18772e

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: winnerz-1.2.17.3-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.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 cc251df4292970dee9906061d6ccac73a4566d1845fa52489296371daa4d87eb
MD5 b2275e0dd627086efcc9e438ba7fbe2e
BLAKE2b-256 8bd0ee783b6d00255d9b30344728f1bd11d0624f7179748a07e5ee3bfb648473

See more details on using hashes here.

File details

Details for the file winnerz-1.2.17.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 20641e60ca7b4621e113f8c141a2c54e8ce0915d37135bb99b68219e92f9e833
MD5 d7006c901131aeacc236ed76280cf0dc
BLAKE2b-256 26d898450cdd0a1212e9f27d7428aaaf76f3f417d75f2bdeada07a0e35790bbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ad80b8312f821ad7d23a5e841ee03483f8281f3fbd0e4cd1c4953f69f6caa5a
MD5 62131ae527437c3be46590978768ce43
BLAKE2b-256 a7df0773d0ed96d39efb5010b6c1e5bbf2e8d723431f2e0a8dbd327353b6c054

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c0cc8a3b507008b1c8f74696c135acc61492abfd7d9a39bca848abcc321b8bf9
MD5 3034bb0c503c848cc0cae5cb544abd8b
BLAKE2b-256 1dbec6b2b389ff36204b589aecf91b0c8a2d6c153815ce6fb4621687f6969743

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