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

Uploaded CPython 3.12Windows x86-64

winnerz-1.2.17.2-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.2-cp312-cp312-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

winnerz-1.2.17.2-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.2-cp311-cp311-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

winnerz-1.2.17.2-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.2-cp310-cp310-macosx_11_0_arm64.whl (6.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

winnerz-1.2.17.2-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.2.tar.gz.

File metadata

  • Download URL: winnerz-1.2.17.2.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.2.tar.gz
Algorithm Hash digest
SHA256 9cf255112bac4906be07001b151b48f49fba8a00947a748dfc7b94beccf765ff
MD5 fc1d03da9cb6528b2fe5255c031b8485
BLAKE2b-256 3081461b2c292a667cf3f9b33d7a6585d0806812d5a34a149d18583e57cb2afb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.2-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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a3b27608464452811ba1bbec68ff10cf328af8df1a0cf05a1f386b64d5075a8f
MD5 9ca038256c6fe6a75aac0ce3c6de3abc
BLAKE2b-256 f94386fb907c60dc06dff75dc274814565bb2d631283dce49f14bd31c03b8c91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e6766d9fa49b38d8fc181ddd293fb719230c81fe87a6195fccb292982e00b42
MD5 f4ab2c0b691e5226773f25040271e3a0
BLAKE2b-256 4b892ffa65391aae00f4d9461dc6cf4766be61e96500581f99379b1ed0ba95a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb7c33b911e47a1cc6bee7ac9761a0be99633af6b4898f393caa215373f747e7
MD5 06e99361b88b84046e6f1b13275ba024
BLAKE2b-256 18f8826faa71ecc23ff473d1f178c101fc23572125651914422c62954d146626

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 644b59dc371a178252b91d19ada6df8bba99f4fb1306bbec97162d009149fcbe
MD5 00c56a373f4b90285f12b75dc449527d
BLAKE2b-256 7e7c6d6a1a280160ece46c0b2cc51fe4a2fee73609d994d3d3979e21dd58fc50

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.2-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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 62de851458600ddbfd61fa8adb0436efd93c71a8c57c6e8b5e4e93df8c3ec203
MD5 ded11a28d77749b8390702c4dd24bdac
BLAKE2b-256 c10a7ae1bb11c68b3533415e36c336eb26cfeafeb860fec860d8452e00a0b768

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d88101def5ca6f056b3e0c605ba772699f320afd8d1727315cdc0f17898c85e5
MD5 5c8f04975e0bc9a7464f92daa3807cd4
BLAKE2b-256 b42aa2ae0a9fe1f1cfd3acdf6bf711059abb2432f50c14ec820ab7c1bde0c590

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67b6b87042813bd6e72bdfdf8422a27c473a3457da49096f29205d4585afe09b
MD5 0e58436107c3ab482e1cacceb99cc606
BLAKE2b-256 79f193eb13d02c8555858cd14d601903f2399a7c788d2294127b99104ed9e64c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 831c1fc37db2baa54e074d6ed2f76ea0bb20dd8c64454dada36e0a17f36d73ea
MD5 2136f08b637a6a9d2b88df9fc35f52df
BLAKE2b-256 f991f5bc932efb2d7e07ea26fe29812ac618ccca07870faff932e02ae2027c1b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.2-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.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 28a076a5c56a57fe3884f4ad1ac4354a65bd5531095066aac4ec4cc9022a7d12
MD5 89cabffe2ecbd4a48f54b26d46fbadc4
BLAKE2b-256 7c01b49fbaee3c6c3e35aa24c20a97b7a175344ee84178cd7d14995919f7016b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0197018cd26fb3f4442f0d62408946b66cc4ca27f91ca838dd4b0c7febd277ab
MD5 9cccaee145b06fb7196c4c1dc15a9b03
BLAKE2b-256 4426b08dab8ff890d4d1a63b6a3d50cacd3b173596f574147ccf169e45969743

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 953211ff285ce957bc20803aa78444e0f630b2a3b7bc9de0eb69d6929238e4dd
MD5 5f9979f6bfb7612ebbc493d64db2a701
BLAKE2b-256 159990aa1dbb7bd29b218d870cb91289fbd9a13e7b64f377b9325a0027539009

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 845c5bb678b003939b2c892616150f93291395234a644a5e7d458bdad303b8b0
MD5 808ea3ab1b49e5411a8e718acfc2816b
BLAKE2b-256 57788beb18d4bf04906c0b42b179e76c76643ed24f9cca10d871fc70ea6c4351

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.2-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.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6676990aaeb52390ac733a4487f730f685515137caa4cf74ef1918bb4ab812cb
MD5 6f0da8b0fb8c024f2ffff03292ce0706
BLAKE2b-256 df65a2ac6e750580e473c7407db922300683f05a5a3d4371493f86ea246d9ca2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 301f363f81c73c04a25641c4abe2da08b388191a1d9160452cbebd79a874b286
MD5 da3a0414523d25e180cb5e925f9bd571
BLAKE2b-256 08d9a0068104044cd80da0a0dfe0f2acca94c546616b50e165da55ffa7718122

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40823ef320e1acc9ea739015e0c0ddbaf45207da05a343659e16445812772fc5
MD5 92f7ac15b0cea2987385b797b60b2708
BLAKE2b-256 79b58bd15e439c585e8345d748bb76cd7c94176ab29cc55aacb06987850e3727

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 386aa65bcf25f176363983e64d00da81c77f1e49a2154581782ee24ab2628e95
MD5 ae4042fb07da175f5e26cf10e217f6bb
BLAKE2b-256 862c96db85f6d1889be595425ee836c7db116df9993059800c97b1a2216985b5

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