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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9Windows x86-64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

winnerz-1.2.17.4-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.4.tar.gz.

File metadata

  • Download URL: winnerz-1.2.17.4.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.4.tar.gz
Algorithm Hash digest
SHA256 91aa35910351e15cb9070e1ad746d0cd89d459e9a4938ab6ce2a64658bc59af2
MD5 2b58475cf41a39bdece107ee4b08b73f
BLAKE2b-256 036cc9b90722c3321a2bef918569bcb59e53f12e2d443214012086314473dee1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.4-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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7c7654f8012a244f7a7a1c95f2c970291611edf94a14865da17d5dce58abb9fa
MD5 023fb4aa0373e1e4206c2920230be8eb
BLAKE2b-256 bd872d3ac12926b7d4f56abdd788f0615699045ce1810487d2a08799c3221589

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a2aa49b0cd604bafa473e501767c14161b9e38484a85116bbd1838ccb289a3f7
MD5 d8af90dd061221ec4aef3c2d40c1b866
BLAKE2b-256 be430269a3800c3bee5f4255681605b1553f0af97a680018646e2ff9c304feb1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dadc3946d8e7f35922a92c3a2885e9550d3408fa3384105380f31af8096fac9a
MD5 d1c90a0ce1710c9c5f934bad0f9cf98c
BLAKE2b-256 5635fcfd41f88cedc1a813e3512610631da0f7239daddabff5298675cdd601ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9eb09d6c975f7778f1ff80a7064fec0c2ce3dd6f296d169e1fbd9baa5e5fb0db
MD5 65c2c7361aa6f329847c3ee545e8b283
BLAKE2b-256 bb8c7b6bda7c0b3af3fe28ceae0aa71b11ecd59914f50dc3001509b7840eb5ca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.4-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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 194a60ac1f3890b71ad3d77557c32c62cf866deaae343d858b7bc1543d29731e
MD5 29432da4f9563b577f3ee2a2066cef51
BLAKE2b-256 6ace9a8608c44bd7279dc5da4df8c5f3b04e6f96ab66dfbb2a6be8b553470f20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0fb742e58380a56a91f1e24af5c806f530fb3d0f82d8f294aea5f23a9046c2e1
MD5 e5fba8222175570275a62eb8ca35c70a
BLAKE2b-256 81efbbf1342b16fe878a016710a592b098cbf902fc873cf063d56cb935dadf54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d6f1be2de372d4f1dcfc66a75b0f4d1f134d6b155a3399d440200a319c1a19a
MD5 f99198b7151cf01a4a189b194f1d367f
BLAKE2b-256 777865dbcdcbbe5303fd4ae256106cb32e00de182b7365a22b8ffb934ff651ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d6ba6a5d23f1a079789d395eab8878ac2e060db2f850323be1ee8181d3e800a9
MD5 d27766227512be1e7e5efd30e78ad959
BLAKE2b-256 995b53f0ef0768abcfdba09daaf643ee10c13927c28e3c00ee1341ab36cfda06

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.4-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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 92dc12e0ff6d953959dfae80953c214294ed7bf60ca5613d46ac4a2203c22344
MD5 aa353d6a22684de0a0433db3a96ef10c
BLAKE2b-256 5839dd45b2b21848b2443c40669291ef8ee0f3c8d89db0a2359640ebbb14270a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 618e918910372e1f53e35dc395e43997fd9f0f94f6c3fdc8fe42ec61bd9840bb
MD5 93123eb8a7f5c8947c193eda142dc6b0
BLAKE2b-256 f1bd25479918b10dd022edb3a9b9e6f4f75d7bc96a907189fec45c6caf50dc44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 25c3c253ece359fdcbc0638cc898a0d9c41a108f3a598e4c0752b06288287042
MD5 e82d361efc3b9cdf5bedb19489f783d3
BLAKE2b-256 c49bc963949e1aefabe417af2eef41b81405261b738ad8d0ba9207b604c54e82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 26292563f0bb22e978dc41f40d6ec2d085f57cea505a38e25e7be5d118919f8b
MD5 dece3a3b1b124797298c737fe925613e
BLAKE2b-256 aca8cb609c26e18d3a1ac1422c6924127af1bd6d4f49a4e3178dedf3b77d7b2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: winnerz-1.2.17.4-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.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f5b41d9790b749aa067677f7ebc21a1a06cf35193a520066020e954d039e6d51
MD5 6997832b5bebd6f3c83796c852367815
BLAKE2b-256 ce8d3947ae9d70ae942947835bf26c6e570ba754165f53f6a7c0ff9bd683c9da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9c9e3fff6bca3a128c377a645ced3cf6ac15b7c64c7745cb9cd86df03103550
MD5 a4379445e82b98ff0cf5514d47d8e143
BLAKE2b-256 48c6c05d2f1f60a35b89c53c2a6da2bd5aa5fdc71d29b5ba811cbc724db8d243

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3e9ce21924d350609138bfa5e5ae9cc360a5295d6ff4b6ffaeb79807251896ce
MD5 2f94950c8e1073cddc277124ae46fefc
BLAKE2b-256 095fb9d1af2b47a58f738aa5faa0eba9bbbdec5d55bee0f79b8b4faf6dcb2a1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for winnerz-1.2.17.4-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 19d5a47a57c4df601754c293890268d2d0a98fc331f276653779ecff31e217f4
MD5 61c70fc15ffb01516ad272ebc237d469
BLAKE2b-256 98b6b5958b1971dff71e050919f498cfb10da074fc5a21903eef38f9ac280471

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