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 (v0.12.3)

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

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-0.14.0.tar.gz (5.6 MB view details)

Uploaded Source

Built Distributions

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

maskops-0.14.0-cp313-cp313-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.13Windows x86-64

maskops-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

maskops-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

maskops-0.14.0-cp313-cp313-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

maskops-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

maskops-0.14.0-cp312-cp312-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.12Windows x86-64

maskops-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

maskops-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

maskops-0.14.0-cp312-cp312-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

maskops-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

maskops-0.14.0-cp311-cp311-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.11Windows x86-64

maskops-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

maskops-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

maskops-0.14.0-cp311-cp311-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

maskops-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

maskops-0.14.0-cp310-cp310-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.10Windows x86-64

maskops-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

maskops-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

maskops-0.14.0-cp310-cp310-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

maskops-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

maskops-0.14.0-cp39-cp39-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.9Windows x86-64

maskops-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

maskops-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

maskops-0.14.0-cp39-cp39-macosx_11_0_arm64.whl (4.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

maskops-0.14.0-cp39-cp39-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for maskops-0.14.0.tar.gz
Algorithm Hash digest
SHA256 c20ab6997b9dc9737f6b7a2134601afba59c460e8aff42b5ade90fcef281e0ca
MD5 e2f229f9e2e8bbec0123d95e02c8f1b2
BLAKE2b-256 52a41ddd78fb67618f0a5d479f81332f234bb60dcf89e8dcbbb7de4a41f3473a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-0.14.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 5.4 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-0.14.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8a1eb7d2a596182dfb405c72a197191cd5ed29a6f710c2afed89723c1317183a
MD5 e3b76be754eba24ca60c77f55b09dafd
BLAKE2b-256 41f4761c6939a059e0e0f0e9985a96774d2843e015dbcf4048bd11dd569819f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 032c66acb45a8cc38e8006ba0716aff012136fcf49a54ecdc4ae7507ac301ed0
MD5 3f802ba1f091305ba9e14c8654519f54
BLAKE2b-256 4cb68b92b7d6f72638164bd989e1fe5e435660ee6ee585083c6407f41b266e56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e9d01334fc2d391386affc71b7d2f1841b2f05d3c25c96a123a8ee5e8d78235d
MD5 d74fadf148b64452eb59e0aa956ec031
BLAKE2b-256 8d1535c0613a119f4439057fd6b4f7ae07a27adc66ef922940c8b3b63dec1d2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf0e50426bcd10f9487a66543f9718a58aa5a014405964e2c803bd2a5a5530a3
MD5 a84a8989066b3bef6139192c13f0cd8e
BLAKE2b-256 1e680bca5438a881fb549a89781aa495d23afec467d875a23f4aac993e30df34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0446000db8ce732014a10e365d4eb887a2d6c5ec52c0dba869ba95c55ce65f47
MD5 c59655d95c7246c7cbda78b209519af9
BLAKE2b-256 295888769bc052f1fd695d7b25f17fc6fe5ee6cd82f4cc32c85b1c6ff0bf5e35

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-0.14.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 5.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 maskops-0.14.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 632b381050e989bebde02d01ee1fb38407e625c2bbe5c27bfdfe2593ae83b33a
MD5 9e03487bf0d34c0a172075032fb9a396
BLAKE2b-256 c1408d3e3f8951d06a92712ddfd3f0c17039265c47a3020c9caabe8414553df1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5a2e9ae90a806fc3fb4defe32a7efedc508498c693eead8cb3e882814f010181
MD5 e631becbb0e06e9d12cb3edeb50c6f7c
BLAKE2b-256 d219a37877cd1a1b53b6a65f733252e804354e948120db3d8db47718cb895f16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aad2c4bc07beae29d6e2603b6b953568b2329864515c35297d02744eb0b792db
MD5 71a597b71e650d7dc1e6f8f1d0574d3a
BLAKE2b-256 f0fd495a9185166269646d179175ea50786478fa10cbcf49d15ae08c69338a60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d53c5c4299e04f2f7ca218f1cef0a8fe0df94775aed5a15e95c01593d00ed23
MD5 35bb9056b4676774279f6ea9795f2e36
BLAKE2b-256 5219a6d1e1c857b8190c70fb56be82ee204b6ea48dbd6965fe543abbab40a355

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 746dce8d97276e8f9c172f089e75636130c5e55f2e6c9be1fdc35009dc747a76
MD5 af1a4b4f3867d143c908baff67a9e3fd
BLAKE2b-256 467042a35525dea13ad7c4bb8c4417a7817ff1238cc5fe987c1311356507b671

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-0.14.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 5.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 maskops-0.14.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 89c25353d0b16dd5453dade1812c7b6ea0302bb21b3d4c4c4f3a2fbde8ec38e8
MD5 3869286c5a6abaa89575934aac214859
BLAKE2b-256 299b446f1a5a9361793f264e168c174ddd17ac1c9ef30e3044e9669b922e0b02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ba7fed88b7dc71d7519dc1b347a0d6490fb1c904acd1ec1926c353e842dcdf20
MD5 7b98e6265100f0327690010a9466ebc5
BLAKE2b-256 2bab666725dd5b1f5085ecfb86d937cea45d823465b7bf889adbe65a30c1799b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 91ebf24c345f89fc5055fcde9503371fd3b3cbda4688ac4645b8fb75eee15c91
MD5 bb5cede2ea6d7b11c8726fc20907ee66
BLAKE2b-256 bce3642a5ddea19ff776a9cb485f9cfc1e4d0932de27a280f5187ae90e3e8854

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c9bbff361a59ae0c4734896d9265a753fc393dbca518321ace290b67311cf736
MD5 0cee00ec7ebb8900fbc8fa975c09b596
BLAKE2b-256 d75aeca5654b93f4d642be86e199ebee8c91c6e1363708f9fffb51bbe5e7ddbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 563c5b2abbffe9dfa8bd0ca2d9f150de59ec300bb0db5791f94cf93c4ec01fa7
MD5 a6dab0bd19d694a3b6dfb29cdecfdce2
BLAKE2b-256 6d26f5300c2330316a31705d10b6208185c70a76e25844292c42edd5a9efef9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-0.14.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 5.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 maskops-0.14.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f339cb01f4838cca09c63aaf2c1eb88c8d38a6af393f0f93378ba9fac5857a64
MD5 80e696c45e4b7b7ceeeee5381b02e08d
BLAKE2b-256 406d01c8b4078352f2b29056e83c3b3a7a35e12ab3052d488ed73430be6851e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f95169f34f682c3a6ba01bac26dde9a5ef778bb94c0b6a98d137020fe0acf81
MD5 3027b7f2aa075c6361a17c778b5fba97
BLAKE2b-256 9c69216060372a54270fb007ddaa228c55d86c59391c0f946a07940e100df518

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a119924aa271c70fdbc704f3a37b02ef022cff93160bf213bad20ce4ae3479ef
MD5 ee73aac185fcf287eb56fc45ffb9df7c
BLAKE2b-256 4e6b2c9e8519dc50cd9e2c8812d67fb041a26d5c423bafd818b0507f9624d7ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56cd883536f5da6e65c64d7cbc7a64a94debb9916039625305e859881211e316
MD5 7329b35c2d2f9cf3e41183feaacc7426
BLAKE2b-256 70416b22568aa0f3b03f804dd8fb3dd66cb130c150fac14fd321b61f7a0dde0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2ed2b40581c37dc43b6ee5c654fe2cf72349d8d213c3820be8ef01ea8e814b1f
MD5 77d7cce7bc2a8302c45c206e7cfe0d53
BLAKE2b-256 b832082c94a18ea7a5bfaf638891cac79e37e2a31bd4a2d130a8a4d2e6f98c80

See more details on using hashes here.

File details

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

File metadata

  • Download URL: maskops-0.14.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 5.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 maskops-0.14.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 73992ba427d73d7384c9fb7e0021a57f6fc4410fed74589859dec4d3048a04f1
MD5 61be8674b245f2df64f7f63bf6b19358
BLAKE2b-256 a6caec7669423fe71df94cbcb0b64d690a05e81bbdc8b2dd1223999bce64cd1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 db998ff87b831c9527d896d7c7d7d40bf77c4aa11fe776d67933bbdb7287ef14
MD5 bab32bcd243ed70f29a327744f655db5
BLAKE2b-256 f560f876e174c4832f2bb82c9be4357352e3404d21d0e581a28cbda03195d246

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f1e27baa55960eaee5a1ef1408637ad4631200102f8724189a46e5f8a1143566
MD5 494928cfb1b5e4f5d193369a0052e920
BLAKE2b-256 a652296fa79ad7f1cb52b47087f4087a14b66e3054d11bf43165a3d7b646ec25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d2fcd32d7ff9bfbc6cd81139e3339ba01e5fa42b78835464d89d089c5d2add8
MD5 3d2baa5c6f3e6a0a42cfc15165a5945d
BLAKE2b-256 f91d71eb684cf29cfa7353f85f2c9a1251934d5863f23e2cd613d0542ba612c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for maskops-0.14.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 353cc1f413143c3456057e13f98bf3f2ad2240da85a0c7c3d11c74f70d3c368f
MD5 dfd76d1d084acd83ed94bf3e78c081eb
BLAKE2b-256 d858f1d2db6aa68a084495bbc0c4714f5bc8165a680619f3d585c6bbfd95aa6f

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