Skip to main content

High-speed PII masking as a Polars plugin — powered by Rust

Project description

MaskOps

CI PyPI Downloads License: MPL-2.0 Docs

High-speed PII masking for Polars — powered by Rust. GDPR-compliant asterisk masking and FF3-1 format-preserving encryption for EU and Latin American PII.

MaskOps extends Polars with zero-overhead PII detection and masking expressions. No NLP models. No intermediate files. Just regex + Rust running directly on Arrow buffers.

Contents

Documentation

Full docs, regulatory coverage, and pricing plans: fcarvajalbrown.github.io/MaskOps

MaskOps is also listed in awesome-polars under Security / Privacy.

Install

pip install maskops

v1.0.0+ API stability guarantee — no breaking changes to mask_pii, contains_pii, or mask_pii_fpe signatures without a major version bump.

Usage

import polars as pl
import maskops

df = pl.read_csv("payments.csv")

# Mask all PII in a column
df.with_columns(maskops.mask_pii("notes"))

# Filter rows that contain PII
df.filter(maskops.contains_pii("free_text"))

Supported patterns

Pattern Example input Masked output
IBAN DE89370400440532013000 DE89******************
EU VAT DE123456789 DE*********
Email john.doe@example.com ********@example.com
Phone +14155552671 +1**********
IP Address 192.168.1.100 192.168.*.*
RUT (Chile) 76.354.771-K **********-K
CPF (Brazil) 529.982.247-25 *********-25
CURP (Mexico) BADD110313HCMLNS09 ******************
DNI (Spain) 12345678Z ********Z
NIE (Spain) X1234567L ********L
NIN (UK) AB 12 34 56 C *********** C
Personalausweis (Germany) T220001293 **********
Credit Card (Visa/MC/Amex/Discover/Maestro) 4111111111111111 411111******1111

Tested against 8 EU locales: DE, FR, ES, IT, NL, PL, PT, SE. Email and phone follow RFC 5322 and E.164 respectively. RUT and CPF include Módulo 11 check digit validation. DNI and NIE include modulo 23 check letter validation. Credit cards include Luhn validation — format-only matches are rejected. Personalausweis: weighted-sum check digit (weights [7,3,1] cyclic, mod 10). NIN: HMRC-excluded prefix validation (BG, GB, KN, NK, NT, TN, ZZ rejected).

How It Works

flowchart TD
    IN["Python · Polars DataFrame"]

    subgraph API ["  Polars Expression API  "]
        direction LR
        MP["mask_pii"]
        CP["contains_pii"]
        FP["mask_pii_fpe"]
    end

    RUST["Rust Core — Arrow buffers · zero-copy"]

    subgraph MODES ["  Masking modes  "]
        direction LR
        AST["Asterisk\nirreversible"]
        ENC["FF3-1 FPE\npseudonymization"]
    end

    OUT["Masked Polars Series"]

    IN --> API --> RUST --> MODES --> OUT

    style IN   fill:#0d1117,stroke:#3DDB81,color:#e6edf3
    style RUST fill:#0d1117,stroke:#CE422B,color:#e6edf3
    style OUT  fill:#0d1117,stroke:#3DDB81,color:#e6edf3
    style AST  fill:#0d1117,stroke:#4e8adb,color:#e6edf3
    style ENC  fill:#0d1117,stroke:#9f6fcf,color:#e6edf3
    style MP   fill:#0d1117,stroke:#3c4450,color:#8b949e
    style CP   fill:#0d1117,stroke:#3c4450,color:#8b949e
    style FP   fill:#0d1117,stroke:#3c4450,color:#8b949e

No Python objects created per row. No NLP model loaded. No intermediate files.

  • Presidio is heavy — it spins up NLP models for structured CSV data that doesn't need them.
  • Pure Python regex on large DataFrames is slow.
  • MaskOps compiles to a native .so that Polars calls directly — same speed as built-in expressions.

Architecture

maskops/
├── Cargo.toml               # Rust dependencies
├── pyproject.toml           # maturin build backend + PyPI metadata
├── src/
│   ├── lib.rs               # Polars expression registration (mask_pii, contains_pii, mask_pii_fpe)
│   └── patterns/
│       ├── mod.rs           # mask_all(), mask_all_fpe(), contains_any_pii() aggregators
│       ├── eu/
│       │   ├── iban.rs      # IBAN regex + masking
│       │   ├── vat.rs       # EU VAT regex + masking
│       │   └── european_id.rs # DNI/NIE (Spain), NIN (UK), Personalausweis (Germany)
│       ├── latam/
│       │   └── latam_id.rs  # RUT (Chile), CPF (Brazil), CURP (Mexico) + FPE
│       ├── contact/
│       │   ├── email.rs     # Email regex + masking (local part)
│       │   ├── phone.rs     # E.164 phone regex + masking + FPE
│       │   └── ip.rs        # IPv4/IPv6 regex + masking
│       ├── financial/
│       │   └── credit_card.rs # Visa, Mastercard, Amex, Discover, Maestro + Luhn + FPE
│       ├── fpe.rs           # FF3-1 AES-256 format-preserving encryption (NIST SP 800-38G Rev.1)
│       └── country_codes.rs # Country prefix lookup table
├── maskops/
│   └── __init__.py          # Python API (mask_pii, contains_pii, mask_pii_fpe)
├── benchmarks/
│   └── benchmark.py         # Per-family throughput benchmarks (1M rows)
└── tests/
    ├── test_masking.py      # pytest suite (246 tests)
    ├── generate_fixtures.py # Faker-based test data generator (5 fixture files)
    └── fixtures/            # Generated CSVs (gitignored)

The Rust layer operates directly on Arrow buffers — zero Python object overhead per row. Each PII type is its own module: adding a new pattern = new file + one line in mod.rs.

When to use MaskOps

Situation Recommended tool
Structured data with schema-defined PII columns (CSV, Parquet, database exports) MaskOps
Unstructured free text — need NER for names, places, organisations Presidio
Both structured columns + free-text fields in the same pipeline MaskOps + Presidio
Reversible pseudonymization required (GDPR Art. 4(5)) MaskOps (mask_pii_fpe)
Air-gapped or offline environment MaskOps — no network calls, ever

contains_pii is useful as a pre-filter: scan cheaply first, then mask only flagged rows.

Benchmarks

Tested on 1,000,000 rows, Intel i-series CPU, Python 3.14, Windows.

Median of 3 runs per benchmark. Baseline uses equivalent regex coverage to maskops per family.

Note on per-family benchmarks: maskops always runs the full pattern set — there is no per-family dispatch. A "Credit Card only" benchmark still pays for IBAN, VAT, email, phone, LatAm ID, and EU ID checks. The Python baseline only runs one regex. This is why maskops underperforms on isolated families with dense PII. The advantage emerges when all patterns are active simultaneously, which is the realistic production case.

EU patterns (IBAN, VAT, Email, Phone)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 2.455s 407,300 4.268s 1.7×
clean contains_pii 1.184s 844,846
dense mask_pii 3.184s 314,093 1.784s 0.6×
dense contains_pii 0.133s 7,497,325
mixed mask_pii 2.943s 339,774 1.993s 0.7×
mixed contains_pii 0.282s 3,551,833

LatAm patterns (RUT, CPF, CURP)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 2.276s 439,367 2.319s 1.0×
clean contains_pii 0.795s 1,258,169
dense mask_pii 3.048s 328,080 1.690s 0.6×
dense contains_pii 0.640s 1,562,313
mixed mask_pii 2.880s 347,173 1.854s 0.6×
mixed contains_pii 0.705s 1,418,784

RUT and CPF include Módulo 11 check digit validation per row — this is the cost of zero false positives.

Network patterns (IP)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 2.301s 434,502 2.093s 0.9×
clean contains_pii 0.799s 1,251,735
dense mask_pii 2.509s 398,628 1.553s 0.6×
dense contains_pii 0.215s 4,655,272
mixed mask_pii 2.504s 399,408 1.684s 0.7×
mixed contains_pii 0.374s 2,671,550

Credit card patterns (Visa, Mastercard, Amex, Discover, Maestro)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 2.243s 445,762 0.954s 0.4×
clean contains_pii 0.792s 1,261,873
dense mask_pii 2.797s 357,473 1.005s 0.4×
dense contains_pii 0.628s 1,591,805
mixed mask_pii 2.687s 372,166 1.014s 0.4×
mixed contains_pii 0.674s 1,484,572

Luhn validation runs per candidate match — this eliminates false positives at the cost of single-family throughput.

European ID patterns (DNI/NIE, NIN, Personalausweis)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 2.282s 438,149 1.410s 0.6×
clean contains_pii 0.801s 1,248,547
dense mask_pii 2.609s 383,334 1.107s 0.4×
dense contains_pii 0.604s 1,654,937
mixed mask_pii 2.590s 386,037 1.179s 0.5×
mixed contains_pii 0.665s 1,504,806

All patterns active

This is the realistic production workload — all 15 pattern types running simultaneously. maskops is up to 5.7× faster than an equivalent pure Python approach. contains_pii reaches 1.9M rows/s on mixed data — use it to pre-filter before masking in hot pipelines.

Profile Expression maskops Python re Speedup
clean mask_pii 2.344s 13.445s 5.7×
clean contains_pii 0.822s
dense mask_pii 3.269s 6.625s 2.0×
dense contains_pii 0.520s
mixed mask_pii 3.285s 6.581s 2.0×
mixed contains_pii 0.545s

maskops throughput stays roughly flat as pattern count grows — Python regex degrades with each additional pattern. The clean profile gap (5.7×) reflects Python's overhead of compiling and scanning a large combined regex on short-circuit misses.

vs Microsoft Presidio (measured)

Benchmarked on 10,000 rows of mixed real-world text (email, phone, IBAN, credit cards, IP), Python 3.11, Ubuntu, en_core_web_lg model. Extrapolated to 1M rows.

Tool Profile Time (10K rows) Rows/s Speedup
maskops clean 0.021s 479,441
Presidio (en_core_web_lg) clean 101.131s 99 4,849× slower
maskops dense 0.028s 351,645
Presidio (en_core_web_lg) dense 115.599s 87 4,065× slower
maskops mixed 0.028s 358,118
Presidio (en_core_web_lg) mixed 118.125s 85 4,230× slower

At Presidio's measured throughput of ~85–99 rows/s, processing 1M rows would take 2.8–3.3 hours. maskops processes the same 1M rows in under 3 seconds.

Entity coverage

Pattern maskops Presidio
IBAN
EU VAT
Email
Phone (E.164)
IP Address
Credit Card
RUT (Chile)
CPF (Brazil)
CURP (Mexico)
DNI/NIE (Spain)
NIN (UK)
Personalausweis (Germany)
Person names (NER)
Locations (NER)
Organisations (NER)

Presidio's strength is unstructured text with named entities (names, locations, organisations) — use it when NER is required. maskops is purpose-built for structured data pipelines where schema-defined PII fields don't need NLP. For mixed workloads, both tools can be combined: maskops for bulk structured columns, Presidio for free-text fields.

maskops is purpose-built for structured data pipelines where Presidio's NLP overhead is unnecessary.

Build from source

Windows (PowerShell)

python -m venv .venv
.venv\Scripts\activate
pip install maturin faker polars pytest
maturin develop --release
python tests/generate_fixtures.py
pytest tests/ -v

Linux / macOS

python -m venv .venv
source .venv/bin/activate
pip install maturin faker polars pytest
maturin develop --release
python tests/generate_fixtures.py
pytest tests/ -v

Key dependency versions

Package Version
pyo3 0.25
pyo3-polars 0.23
polars 0.46
maturin >=1.7,<2.0

Note: pyo3 must be 0.25 to match pyo3-polars 0.23. Do not bump pyo3 independently.

Roadmap

  • Email, phone patterns
  • IP address patterns
  • Latin American IDs (RUT, CPF, CURP)
  • European IDs (DNI/NIE Spain, NIN UK, Personalausweis Germany)
  • Credit cards (Visa, Mastercard, Amex, Discover, Maestro) with Luhn validation
  • PyPI publish via GitHub Actions
  • Check digit validation for Personalausweis (Germany) and NIN (UK)
  • Format-Preserving Encryption (FPE/FF3-1) for reversible masking
  • Benchmark vs Presidio
  • Parquet streaming support
  • extract_pii expression — returns a 31-field Struct column with the first match per PII family, enabling routing, reporting, and selective masking without re-scanning
  • mask_pii_audit expression — masks and reports per-family match counts in a single pass, returning a nested Struct (masked value + counts) for compliance auditing
  • Brazilian CNPJ (legal-entity) — two-check-digit validated detection and masking, in asterisk, FPE, and consistent modes
  • masking_manifest / write_manifest — per-column PII inventory with match counts, built-in family→regulation mapping, and mask mode, exported as a JSON RAT / data-processing register (Ley 21.719 Art. 30 evidence)
  • FF1 mode (NIST SP 800-38G) alongside FF3-1 — mask_pii_fpe(..., mode="ff1"), reversible and length-preserving
  • FPE key management — derive_key / derive_tweak (HKDF/HMAC, offline) and validate_key / validate_tweak weak-key guards
  • rekey_pii_fpe — FPE key rotation on a token column without exposing plaintext
  • MEA identifiers — South African ID (Luhn + DOB + citizenship, POPIA) and Israeli ID / Teudat Zehut (weighted checksum, PPL)
  • Performance sweep — Opus 4.8 deep review: bug hunting across all 31 pattern modules, regex optimization, allocation reduction, rayon parallelism, and benchmark refresh targeting positive per-family speedups vs Python baseline

License

Mozilla Public License 2.0. Commercial use requires a separate license — see CLA.md or contact fcarvajalbrown@gmail.com.

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

maskops-1.9.0.tar.gz (5.5 MB view details)

Uploaded Source

Built Distributions

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

maskops-1.9.0-cp313-cp313-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.13Windows x86-64

maskops-1.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

maskops-1.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

maskops-1.9.0-cp313-cp313-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

maskops-1.9.0-cp313-cp313-macosx_10_12_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

maskops-1.9.0-cp312-cp312-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.12Windows x86-64

maskops-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

maskops-1.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

maskops-1.9.0-cp312-cp312-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

maskops-1.9.0-cp312-cp312-macosx_10_12_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

maskops-1.9.0-cp311-cp311-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.11Windows x86-64

maskops-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

maskops-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

maskops-1.9.0-cp311-cp311-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

maskops-1.9.0-cp311-cp311-macosx_10_12_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

maskops-1.9.0-cp310-cp310-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.10Windows x86-64

maskops-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

maskops-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

maskops-1.9.0-cp310-cp310-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

maskops-1.9.0-cp310-cp310-macosx_10_12_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

maskops-1.9.0-cp39-cp39-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.9Windows x86-64

maskops-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

maskops-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

maskops-1.9.0-cp39-cp39-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

maskops-1.9.0-cp39-cp39-macosx_10_12_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file maskops-1.9.0.tar.gz.

File metadata

  • Download URL: maskops-1.9.0.tar.gz
  • Upload date:
  • Size: 5.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maskops-1.9.0.tar.gz
Algorithm Hash digest
SHA256 da5eca8cbee0ee74660966feb4bdcfdd47b84a28c92cca7b376d3b760e996450
MD5 60b8d80f68a60850215d788f01c91178
BLAKE2b-256 49e19231f3a6fc80c939696d775e212ba181a53b271ed30dceba2817b29297ce

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: maskops-1.9.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for maskops-1.9.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a5bbaaa91b292a1100f17270e62e3b74913fd7ac18db492d35fcdd85a106afc3
MD5 01df126e0edc70baf2799d37215e2fcb
BLAKE2b-256 76db963d0a6194d4df7ec9f2492c1cb8953303efc49117377c19c1c424c2efa0

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28883920c30854ae3fd09ca53ef67e8884e20c576c543a2eea388f986b77d4c8
MD5 f676de61ee2f25e46df89f1271eab00c
BLAKE2b-256 f1fd3bc8b37a0f09b12ff2c853fcb671efedee840a8cf87f752979525b837dfa

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b28d14f148eedbf96302d23f8b32ec4500c6c38d38c2bccf37874aa0f1105e25
MD5 77ee94ed6749391e45e72e1834772cdc
BLAKE2b-256 aee105c917418787d7afa13e90b040150287a7fdd2c09e51e57da771b81461d9

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93da7f811ad2a96b5c7281b49783cd2869d0345ca2f194b4e277663fc4797ae8
MD5 1ef63447610d872e3ce0499dbfe592ec
BLAKE2b-256 9a359520faf6c817defa4a63bb4a0c4d1bb02cb0ccdc590e8bb01767c67bcaf7

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 078c89f043f097fdf045ee5dc529ea8b4e48c39fb2819377ae9be0dfd86450d9
MD5 f5faddb5a85c737b57054c65d8f10a21
BLAKE2b-256 32f307b039804e8e891a5bb2a1c74aec0034de02eba445c9a2a10ac5f8f55404

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: maskops-1.9.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 5.1 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 maskops-1.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 cdda1d9a7419eb4165f3e7110dab6882d75cc6c326ea751237ddf1bc0c077dd4
MD5 93d13205f003f1cd997180126a288697
BLAKE2b-256 c39289ca73d1cd3ea81a53325a91671636fa37426ca321028d9715dcdf7a7a84

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf417bf74465dceebbfb5c145faab4da8477aa0345c371ac90a6f2a1503df656
MD5 f9e7781c63d92d020e3a49647fa70a65
BLAKE2b-256 7d5a27444432fee077d4057d3ad50765fa500b4cf4f8208aed6427cc1b7ce036

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6308803b56bd706bc301e75d578bc2fccd146542b8cbc6c8f8be4c17af4166bb
MD5 cbc7ffed7462cf9bb40360206fa03c56
BLAKE2b-256 b1886a45cd3fd2b679c74fb773eb2717c147b33cc84aa5019ccc040131e36186

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 574b5da044ff49097cabb45ea5e7ecfe2bcedb71e1023105b42972e79d602beb
MD5 70c29d5a405c439d1deb051dd4c5de7c
BLAKE2b-256 64a9c43e0df933d7cde7d1ccc52494d9c5d9dd738f9c2443c2e04cef5966d86b

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 59576ddfc355829c8ba7fbd7578a32793cb727fd4ca31cc0511ac13177a8112d
MD5 3f1482c60f444d80ff95930f22f8c01a
BLAKE2b-256 c4a628086665e3777b3ea21124ad34f03197cb91ceb227f6910531448339052e

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: maskops-1.9.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 5.1 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 maskops-1.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d07ca4033cd6abb013fc9673cadf51becb87b80f96f98a6791b30fde7f75b580
MD5 93d5687ca349048cd8aac97fd0181dd1
BLAKE2b-256 13612d9012d840bda5d0433c918fd94be1de1b5bad198fe71375c95f4a15a999

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6dfa4f580329852ec239fc772e2e610233b51341968ef6f0627ec1fb13e9700
MD5 2c7eb2c9ae0dc8f274c680a56e68e110
BLAKE2b-256 a06153a74e9f78ea3bfe738464b2690c51bb8c945fe6c5186ff98050716437f8

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d4d9f12da1691a125bac2af66049b861b971f1e187746e09766f265fd1eb453d
MD5 c47593287e0f045013709a11d89b9d4d
BLAKE2b-256 347ca6a57180a6f93d782435506a18a200cbcfde3c90f8023fb8b76234502781

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7a85d91f82599ce76841b83908a415cf9f64fe366fd25186ead925a2554a2ac1
MD5 dde4b2a8582e5fb9103b85f1deebd5cb
BLAKE2b-256 fce126dd9bcef630a1c95d1ff9ea817f0f5693dde00419aecc5a2f40d4a2679a

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c553969a43b205adbc7bcc21a102efd304add9c253e8840e8738e1a268df1253
MD5 eb935106314b6a377e8aec202dd527ad
BLAKE2b-256 9e5d198dd4416643471bfa8977f84f4cfbdc6e90dd075070bf894efb15627404

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: maskops-1.9.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 5.1 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 maskops-1.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e0bbbde7216e63a660cc4ea72f041ec9e4a58c86251a7f61ee14c97c0d126a6c
MD5 a4ba90191f6566937f53c9b5ae7a4061
BLAKE2b-256 ddca4e44e5fcd67be79a60e95904cb843c58daf02a95cb48b179ab5e01ebf7cc

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cc9eeabf9af600d424eb985a6b926f3e0d796563e7f98d8ddc41c566250b86d3
MD5 3cfc48b0d88e5005aa76091e87b52297
BLAKE2b-256 df6138a98ade9a93f3d0214ab9fe622f663dcbef0f3eccc00e75fdcd2ae391b4

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fdc861022351045962b5b4a06aa5516101b4b5a42ad3c27a5c0a0bff9c0310b4
MD5 676e1c4629819a5425c7dfa7c676951a
BLAKE2b-256 23f207bca59f2c70c9980bf9af073216a60c55ff6d44a102c5d0b6ca4cbd6974

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fd8a7b7299466e5c280d70f7e26ef75729adca37b8b3567d1acbdaf016d0ce8
MD5 0c94d901cd3a745c95200d6e1c921369
BLAKE2b-256 c0233bc02a039e39c8b065a0770faf86237d38f75a379b1cbf2ce7229ddda77d

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1286582fd413e1d7d80cfb360ba446edf15c042a9a5ce69f5e8921751a0e3326
MD5 67d30f3eb89200830c0bdaabb7e428f2
BLAKE2b-256 ac867b7a961d2b573707ddace7b8b8da906fdd7c12bdc36811af1d9cffc7c865

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: maskops-1.9.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 5.1 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 maskops-1.9.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3c3addfad5cfabfeaff4c02a759cb4b92141faf81bdde56f4b449dfc8a2ca0bb
MD5 8f158de53fdd39acadb93219428351dd
BLAKE2b-256 3ad905c1a2535dca446e48ef50ab675e651e848e9c8ff87242ee353c36aef239

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c26170ba5d3d3d0ed4b4af3236199604bdf099bff3886df7ac42ca35d95e3c33
MD5 015b8e496f7e4bc69afce16365574d32
BLAKE2b-256 9419614f3ed44ba7fff04859b19336c69d726c914a4dcdf448b6118aa6bccbf9

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b492b49026ce9a9edf3358e0ac85ee21a8e33cbc4e2dc56598c9281e623c5ee8
MD5 a345de58ddc72e508f684f1718810e5a
BLAKE2b-256 7b694c6fcde56ee77c6a1b89f9b3db0f0eab841a42ba487b5699df6eb4628366

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 65565295f33761ba2f8dac1cf7b308eb9697b886c9925c992143053507bd14a7
MD5 a6b4e9493c7e31e16ae09e0b6f03f6a1
BLAKE2b-256 8ba7893a6818727a322a618e10819edb7da5c036ddb0c16b439092c069507c17

See more details on using hashes here.

File details

Details for the file maskops-1.9.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for maskops-1.9.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8f1a142ccf5fd90fd63663367df2fa81fca19a40229d0b1ebdfa40b404a67f97
MD5 81c1943c5daaf5c94a935f5f30f4681e
BLAKE2b-256 82d2d001c7c7696af862048c0c8af75e43dc9cc754ceeebb0dcf957356bc6b9d

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