Skip to main content

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, at the 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. Each family is compared like-for-like: maskops runs only that family's patterns (mask_pii(..., patterns=[...])), matching the exact coverage of the Python re baseline. The three data profiles are clean (no PII), dense (every row has PII), and mixed (50/50 — the realistic production case).

Why the clean profile is so fast: every supported pattern requires at least one digit or an @, so maskops short-circuits any row without those bytes before running a single regex. Real-world text is mostly PII-free, so this dominates throughput.

EU patterns (IBAN, VAT, Email, Phone)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.102s 9,791,624 3.224s 31.6×
clean contains_pii 0.028s 35,608,478 — —
dense mask_pii 1.430s 699,175 1.832s 1.3×
dense contains_pii 0.143s 7,002,522 — —
mixed mask_pii 1.159s 862,821 2.085s 1.8×
mixed contains_pii 0.119s 8,419,309 — —

LatAm patterns (RUT, CPF, CURP)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.083s 11,995,024 2.364s 28.4×
clean contains_pii 0.022s 44,911,928 — —
dense mask_pii 1.301s 768,811 2.220s 1.7×
dense contains_pii 0.351s 2,851,885 — —
mixed mask_pii 1.147s 871,941 2.392s 2.1×
mixed contains_pii 0.329s 3,039,982 — —

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

Network patterns (IP)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.101s 9,895,621 2.777s 27.5×
clean contains_pii 0.029s 34,285,322 — —
dense mask_pii 0.891s 1,122,653 1.902s 2.1×
dense contains_pii 0.292s 3,424,025 — —
mixed mask_pii 0.699s 1,430,777 2.211s 3.2×
mixed contains_pii 0.228s 4,384,771 — —

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

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.107s 9,331,431 1.233s 11.5×
clean contains_pii 0.028s 35,165,948 — —
dense mask_pii 1.061s 942,647 1.337s 1.3×
dense contains_pii 0.345s 2,902,612 — —
mixed mask_pii 0.819s 1,220,878 1.371s 1.7×
mixed contains_pii 0.290s 3,447,494 — —

Luhn validation runs per candidate match, which eliminates false positives.

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

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.100s 9,996,062 1.748s 17.5×
clean contains_pii 0.026s 37,979,203 — —
dense mask_pii 1.541s 649,021 1.392s 0.9×
dense contains_pii 0.370s 2,703,177 — —
mixed mask_pii 1.248s 800,992 1.472s 1.2×
mixed contains_pii 0.308s 3,249,503 — —

The four EU-ID formats run as four separate regex passes; on 100%-dense data this is the one profile where a single combined Python regex edges ahead. Clean and mixed (realistic) still favour maskops.

US patterns (SSN, Passport)

Profile Expression Time Rows/s Python re Speedup
clean mask_pii 0.099s 10,066,631 1.680s 16.9×
clean contains_pii 0.028s 35,939,291 — —
dense mask_pii 0.972s 1,028,341 1.570s 1.6×
dense contains_pii 0.447s 2,238,417 — —
mixed mask_pii 0.739s 1,352,974 1.628s 2.2×
mixed contains_pii 0.343s 2,912,967 — —

All 15 benchmarked families active

The realistic production workload — all 15 families the Python baseline implements, running together. maskops supports many more families; they are excluded here only to keep coverage equal on both sides. contains_pii reaches ~1M rows/s on dense data — use it to pre-filter before masking in hot pipelines.

Profile Expression maskops Python re Speedup
clean mask_pii 0.114s 18.681s 163.4×
clean contains_pii 0.028s — —
dense mask_pii 4.693s 12.659s 2.7×
dense contains_pii 0.959s — —
mixed mask_pii 5.239s 10.620s 2.0×
mixed contains_pii 1.037s — —

maskops throughput stays roughly flat as pattern count grows, while Python regex degrades with each additional pattern. That is why the all-families gap (163× clean) dwarfs any single family.

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). Reach for 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.

On structured data pipelines, maskops does the masking without carrying Presidio's NLP overhead.

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)
  • Unified patterns= selection across extract_pii and mask_pii_audit (v2.0 enterprise release) + migration guide
  • Performance sweep — byte pre-check short-circuit (skips all regex on PII-free rows), like-for-like benchmark methodology, and a full benchmark refresh: per-family speedups now 11–163× (clean) and 1.2–3.2× (mixed) vs the Python baseline
  • Type hints — PEP 561 py.typed marker and .pyi stubs for the full public API, so mypy and pyright type-check MaskOps out of the box

License

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

Release files for maskops 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for maskops 2.1.0
File Size Uploaded
maskops-2.1.0.tar.gz 6.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for maskops 2.1.0
File
maskops-2.1.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
maskops-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
maskops-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
maskops-2.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
maskops-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
maskops-2.1.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
maskops-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
maskops-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
maskops-2.1.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
maskops-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
maskops-2.1.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
maskops-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
maskops-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
maskops-2.1.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
maskops-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
maskops-2.1.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
maskops-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
maskops-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
maskops-2.1.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
maskops-2.1.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
maskops-2.1.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
maskops-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
maskops-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
maskops-2.1.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
maskops-2.1.0-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details

Total release size: 117.0 MB

Release files / maskops-2.1.0.tar.gz

Download URL maskops-2.1.0.tar.gz
Size 6.4 MB
Tags Source
SHA-256 checksum
How to use checksums
7bf88fc8377c56bfe12cb911c945e743df9cace2d4f886078a0bb0785c0082b8
BLAKE2b-256 checksum
How to use checksums
2fd2882988aa3822be61d1f52dfb4f912360b94bfdbdc8eb0207b1909f38f5c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp313-cp313-win_amd64.whl

Download URL maskops-2.1.0-cp313-cp313-win_amd64.whl
Size 5.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
d978f6fa4d6a8dcf7d9dd7c7bba1a86e9ebbf3a576034665b97c99b966cc1910
BLAKE2b-256 checksum
How to use checksums
2ce3ffe2f86e1a3a215e42f73282489f082afc564cee5ba0b14bda06fa6abbbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL maskops-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
0c61eaa2b16f0a9af9e7e84b023e9e4ec3c9fb3af55d51a90eb81ca222b08cf6
BLAKE2b-256 checksum
How to use checksums
0d2e90033944d6a721ec0de2f381687003e412c3538bade1fc50abbd81e8c513
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL maskops-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
0af0546fca9d47e012b93be37ad637a40439bf7ca782de0362a14d0ed4faa122
BLAKE2b-256 checksum
How to use checksums
fb5680f50de2e0379a9737ed1e8c3663f5a64fa356bbcb253f607fd100c68ee5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL maskops-2.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 4.0 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
74cabc482db32658c809284d68dab5d8d929d946f67e2d67d01d34bfeb95cbb5
BLAKE2b-256 checksum
How to use checksums
8267ece50c2eeaee67eee6f7dfb2655c99cec04bca8054f370c50e2c966e4fde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL maskops-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
f0cc92d29cb88fc8e893579c2fe0a95cc9bf1bde986e28997c6bd5b9f33c0c8c
BLAKE2b-256 checksum
How to use checksums
dd0c494f7db78f977f76b56d58dce77bfba1352b7af3ffa1a231a02e50fbc4eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp312-cp312-win_amd64.whl

Download URL maskops-2.1.0-cp312-cp312-win_amd64.whl
Size 5.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
574bad61f15695df42910c2f1cb6f983b7016983bd39554c971bd213edbcc99a
BLAKE2b-256 checksum
How to use checksums
c614e80314250000bc4853637ff3b1371846d6818585a4e5262b71367dc143ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL maskops-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e612666c8d3c9925142a4bc82a0ce29e5396edaf0e4be518ded063d5e26ab2b6
BLAKE2b-256 checksum
How to use checksums
da07c11fd22fe4dcbd1f42b2d58e140510b9c9c93ba2849b5f13e0d857131a7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL maskops-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
a5cd3eace96d53b48fa7bd1f218abfb8afb0823728fc413be9029baef668f568
BLAKE2b-256 checksum
How to use checksums
dc3dc0bdf4a3393e0bb2c8837ee277996abf6f24db23e565c8c01ecd12157061
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL maskops-2.1.0-cp312-cp312-macosx_11_0_arm64.whl
Size 4.0 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e756e8af99dfadc74704431c3135872e270532c46039e74fd8522347db0e3bd1
BLAKE2b-256 checksum
How to use checksums
21fff83909c8896f591b3b308748add9431ed3d682c6ec65412beea87f5f0102
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL maskops-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6fd472af33bcc61e52d08735362bdb0e3c6b180b74fa0eca38a0bd3b607df10f
BLAKE2b-256 checksum
How to use checksums
31eb5189671f4661c0152036f4b4b5d54654846e2bea90ccac8fe4e70431b94a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp311-cp311-win_amd64.whl

Download URL maskops-2.1.0-cp311-cp311-win_amd64.whl
Size 5.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e81d3f9c7b57c34c05f66e7c1d3a1347ef787f3ce6e43d5a0983b40f7ecb1535
BLAKE2b-256 checksum
How to use checksums
1bad78dfec2045677bcd87c41ce54227e0777c2c24701f1f9b4532561721e294
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL maskops-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
704b531f8a6ed6b421d917523d3c965234987b681847da70cdae6ca7bda580ba
BLAKE2b-256 checksum
How to use checksums
c54763dc617563c42c54af1c93c2d571fc61a05bad8eecbefaa4a442ef9bd3f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL maskops-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
deefead680c4293141c3147c9d567a69c515c94da66678c53457722202698014
BLAKE2b-256 checksum
How to use checksums
9a9cbb29eec65ec78d9aafe24a8031b2a47385028aa0d64cacdaf96e0bcf3016
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL maskops-2.1.0-cp311-cp311-macosx_11_0_arm64.whl
Size 4.0 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0eefc7ed892b11d365c88b0edcc902b96f8cea0b52a6628038161a6851c9e7c2
BLAKE2b-256 checksum
How to use checksums
02869cd1cfd278f1acab0ed5b4a4b9fe3d98f7b4c0382aed30d9cc0aa7303f5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL maskops-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c8fa5159de94c7fe531e280c91b61a9146be599f4e113d1256041f3f35fb6be9
BLAKE2b-256 checksum
How to use checksums
70cb1625c27fed63212487179f8a701175c00426c53ccb43da3d9849fa8a7ac2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp310-cp310-win_amd64.whl

Download URL maskops-2.1.0-cp310-cp310-win_amd64.whl
Size 5.0 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
ab1acdb69e869ef6c1219dab1244e6af1804d419dfadd11c0d12a08488daceac
BLAKE2b-256 checksum
How to use checksums
e47e26ab01de6790737d651dce0b8ebad25b2a8eca8fcdf43c127bc77719f75b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL maskops-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fc86400f1df8111a1888b8c8a8fdc2dd57d671ca19724f9b25eaa6dd1793a644
BLAKE2b-256 checksum
How to use checksums
3372a9bdaae3e750524b3999bc12768aaf561c8019bc80ff372ba2ac81998c3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL maskops-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f692b79271539021afb2e8b95889eddae11eefe6351b18b83c9edc2e26b0e0dd
BLAKE2b-256 checksum
How to use checksums
60e2a10e38d63fb75767892433377af5d36482e8af5edbd00f5e3c7cd5f42124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL maskops-2.1.0-cp310-cp310-macosx_11_0_arm64.whl
Size 4.0 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4d8ffe0a9c84d6cc8bb084750a1f21d4e25e11bde777b407d328363b1679e13c
BLAKE2b-256 checksum
How to use checksums
1f815755bf4f947771d4c496e3e4b9b6e4e33c55db2d06c5e347d4264fe00446
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp310-cp310-macosx_10_12_x86_64.whl

Download URL maskops-2.1.0-cp310-cp310-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
0c769cf2c9894dc1541442a4a70d9b6f16852336ef8ffd9c6ef5c2c2b8d07957
BLAKE2b-256 checksum
How to use checksums
8c6c08069b524fcd752aa2881d68653943f5256f4c4637a0a89eba0a1a20f66a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp39-cp39-win_amd64.whl

Download URL maskops-2.1.0-cp39-cp39-win_amd64.whl
Size 5.0 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
dfb89c5cbaf876fedb93c75b88b4c722ce8d7bcaa6bdde30f3688aa8bd376917
BLAKE2b-256 checksum
How to use checksums
b2b9f57c5be0eab769f13313496fb17c03fe39a16726929f2a7ca8424a9813fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL maskops-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
c609913e17f535d627b5ae5fab0ebaa85f98b4217f863930a90a0838f2a74a89
BLAKE2b-256 checksum
How to use checksums
162475fd43e8f75f3240eaa7851196956c3e0864f4ae40c3bbadb63af61296d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL maskops-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
17629f6294624511ca0025eeeb2f75d9d01e1f599074acc71ab7d8e695651695
BLAKE2b-256 checksum
How to use checksums
4d145030900451b3c200a07c5e0efdbc73b170bec60d238d07c0272921276850
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL maskops-2.1.0-cp39-cp39-macosx_11_0_arm64.whl
Size 4.0 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
03e96281f2dce8dff440347138cdffa5d5f94ba7fd9c1f08e75cac2da3fc2eb7
BLAKE2b-256 checksum
How to use checksums
112e724c292cc4d433403d246300537ca9f21873121c1878c3128832e7b7efb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / maskops-2.1.0-cp39-cp39-macosx_10_12_x86_64.whl

Download URL maskops-2.1.0-cp39-cp39-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.9 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2bed6f0825e0c321ad82319bae1ff74443c466485d0fef733cbf63628b321462
BLAKE2b-256 checksum
How to use checksums
c247e090fd20c60f722342addece96a03c4d6f8c6bd83dc5faad2ec14948c305
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

2.1.0 This release

26 release files

0.2.0

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page