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
  • 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.8.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.8.0-cp313-cp313-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.13Windows x86-64

maskops-1.8.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.8.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.8.0-cp313-cp313-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

maskops-1.8.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.8.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.8.0-cp312-cp312-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

maskops-1.8.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.8.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.8.0-cp311-cp311-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

maskops-1.8.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.8.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.8.0-cp310-cp310-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.12+ x86-64

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

Uploaded CPython 3.9Windows x86-64

maskops-1.8.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.8.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.8.0-cp39-cp39-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

maskops-1.8.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.8.0.tar.gz.

File metadata

  • Download URL: maskops-1.8.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.8.0.tar.gz
Algorithm Hash digest
SHA256 b04c71fc612e0bbd3d7583f54cd4dc10ecaf3b5daf863f377bc52b04ba6e3463
MD5 7ea608508023137a4c0b98710ee3b823
BLAKE2b-256 fd810379f61611300af0b359d95b9f0d1a8b90d965f0e7d7301db85c4a5ceb73

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-1.8.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.8.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 374b1b29503179547988de75779225991677ec7a03add3a49f072c685562606b
MD5 418ada949d780215d9221c534ca77c6c
BLAKE2b-256 ea1734e659f3f6ec57d57651b359c9e6055963c48d6e8838628c8486fd19bdc0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37835395f501d49c2366770ccd5e169b00e9b2c28bcc6d356036af4219783350
MD5 3830ec3f5823d810b0d65558f60fb9b3
BLAKE2b-256 e76c4d4cc259fa49072d4b30e3dbe50d743f6f1b585dba94db1afa9545a2afbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bfae1a5c5f688922a6dbe3ba18eb7ea72066ecf07e1dab08315d57d9fbfeee8d
MD5 6483845a7e09554122a7e055a9b3e1b9
BLAKE2b-256 701dc391b50d55c23a8fe8e00122119a98c49a8bb20ba53335ffafc07bd4918a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3435cb5866937009ad04be39b10724c4aa4e9d8aee0bb451c07c18b6dede8db3
MD5 f4b227ccb155474052e939166a45ff95
BLAKE2b-256 f80194ccc02c1c8e18e88564d7a22239b6ea5f41cfaf1379f955932224b0830d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c6fc13b5ac6e70deff684296345e49a8fa6b2a0f0d365a34e24c9bfc94c98543
MD5 6acc48a5fcb6e88765e911c9e29b48bd
BLAKE2b-256 d120e8347421ec181747124fe8d5016757b7f7a2cc62e4bbecef3fe5c656405d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-1.8.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.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5d3a13020032d003e212c2f1bc046cbc4e05f4e92d1a5faedc08c3920a84bc69
MD5 6a2a9b8a0271e8ca30f70d3eaac4d11c
BLAKE2b-256 192db1c0b1c97489d7cc29d7c77b7aa7a257f92f7494da28e006915503007c76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5113a31fd04f359e2bd09e9a111e5e1a2d767a531e0c52c5c7f89dca8a0b7ca7
MD5 7332b4e86bce9e8d443450fb7fa61689
BLAKE2b-256 5b88944884df15842409550f6f373ec1ee412a456808fa9d9f6699cd685014d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4af0f26a9070b8d82b97b0d5f302192aa6b72f33f64c5b8937c393c43df381ae
MD5 29ed59572773c68fd0a6888f33e79b84
BLAKE2b-256 370ab9ca0536da2f83d3b9fcce7df71a55bda4f50f596486be978bd41d182415

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 692a0542611a4ebefc8cb1ee70ecad3e4d19d7dbfa6ea871afb5b8d2965ea34d
MD5 41c74c914772d01f5fde35159ac57af5
BLAKE2b-256 d9f667dc3a632453b601b37720373c8a4f55fc99e901e7bab17490a22ec580f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 59403d7916f8749ea227b1103bfab804f02f6dfc260f4bd0ba7adfc78732f46e
MD5 7a462bda008011f2e75528cabd45380e
BLAKE2b-256 b79475b9bbb456cd5bad68157ef3da7662bc4088a7a6ad2c3e14de92b14bcbab

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-1.8.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.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5a4b447238c3d29f4d001ccc298b01ca6a1187554e9a4a01d039593ea0fec4a5
MD5 aab6a744a67b3eaf10f709be046bd45d
BLAKE2b-256 07e48851090137f07cd73cb6ec2b68e9d0e2c70432d22cd3f5a4518266f5b75b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 519acfd583448b85e56e7b976c37cf2585b378ee40542dc1e0f82efe7880eb73
MD5 45488613ace6d3e369c35d57ee0e8e83
BLAKE2b-256 e25c8a875b7d91bafc114b7f98b1db62a64c4663920c032ae9d7233d1de5bd06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cff453703fe037297c3ad8de400001faa19ead22e3f79691f60bfbeb378e6dbe
MD5 b5dd44d797abfea82450b79fab184a20
BLAKE2b-256 ea75f044728794e1902fc60041224cf2a6d4ea60928ffd14fc265049f4681064

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d25a3677654efb695582ddf64edefb67eaf9d6e877fa58093d6a0621109294b
MD5 b9aaf5469513cc7dcdb734e92eb41ac7
BLAKE2b-256 d0fb905dbf943bba0eb993263a346275d90d5ef87de68310ff4fb4e923ad93bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4e3b28e43077d0644c13a605f8e002e4431588a265931d0671d1234435620f95
MD5 41b7ed8bf1a8873718b22f4a217fd5bc
BLAKE2b-256 85f49db01c27755dd201fe902b727232094c09eddda9e7729ba313081f8cfaa8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-1.8.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.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 006e424c6ac15feea6491eb0b30f75ed8bdc39343b2a858684bd3a222d12aca8
MD5 715dfecef65b0400a17b7b4b061d94a9
BLAKE2b-256 c423cf8f4ec56836bed73396426d7fb192428b4dbbd2adfe437bf147726e5f4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4cb0ece45d4eab324e760cfe61e8b100edcdf7ab121a21afd9d640e7796e6471
MD5 a49e23dfa977669d2bdfcef0e2befdfb
BLAKE2b-256 e5025074c344c59da7175ee39ac47b85cf7a5365fe1354db2fe7172f328792ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 35f2e4c70e64da4858b3f6ce4fb53956640823b2baf460e4976f52ea8efaa545
MD5 adc9e18e1e4d11bcacbed28cf81428ea
BLAKE2b-256 6d6be228c82e53a328cbaf9f8a0a90a4deb0a004fa03f34c1b499e0a6ac02fba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0cc21c29d8f1692cb5f3ad32fead45f0e6815f37be321d18ddf786c382a1e854
MD5 83832ec29bad6b6b1f9951a2496a8ca2
BLAKE2b-256 bf859ad35e73f5488981215fbe8d06878e00fc77171b86daf1fdce74d3de8fc0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f142fb01a70a0bb3445288c8a241d301333106819f8e1ffda7603fa58895e7c
MD5 4f28a9b13fc65d453b3a0b6003f37e37
BLAKE2b-256 73d770db981ee7611f935e36d0894915c882a42b8c71ba11b4662a946ba66547

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-1.8.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.8.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 aa116d7c557e3174a423f2709510c9747d9364120fca28300b7d66ed784db7d6
MD5 df3c6c066177f7e9d8a7bb64015365bd
BLAKE2b-256 11dd962bc77fb7587f9824e61ba15d6fae4877929fa1e730222d0f9add8e544d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c972c439e0e106234ad2712286e6d10deaac24ca4b70bc9ad07b10220c78060a
MD5 2611016c4d582a89853952d6231e4ee3
BLAKE2b-256 3c4c4b8bab8aea05bee2b4ae814a1a4c85c6b97364c40828350bc5fd1c9aab2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9d849ef44bd93d5648d93777958591ef724ca731249b7adcf768518e57861e4c
MD5 c8c12cc2dffdb3d014d749ef5786ce08
BLAKE2b-256 dee4b69527013e5f4257f7ed576b7f368fe352a9ee772b75dbe8d3bc18025846

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 94baec6e32462022af26d1228ac1225756216985303d054d10cbc13c4f4a0811
MD5 a14ca38784424b223cc46a111db08dca
BLAKE2b-256 5fac88288987ae01c032a60366d65e6a815bf1a63ee9c98e4b9cfc94ad0c3dbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-1.8.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ff3657cf662614beb34716850f20d4dc973c501c752aaed76f6d39b17583479a
MD5 eb19bf75a56659304396b0a123a2ef5f
BLAKE2b-256 2b516e1cfaa015424af7494a17ff22bce4d20fa768eccd4634826037f776ad22

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