Romanian PII detection and anonymization
Project description
ansemo - Usage Guide
Romanian PII detection and anonymization library. Detects and anonymizes personal data in Romanian and Moldovan documents — names, addresses, phone numbers, IBANs, organizations, codes, usernames, passwords, and more.
Table of Contents
- ansemo - Usage Guide
System Requirements
| Requirement | Details |
|---|---|
| Python | 3.10 or higher |
| RAM | ~2-3 GB (for model loading) |
| Disk | ~1.5 GB (for downloaded models) |
| OS | Windows (x64), Linux (x86_64), macOS (ARM / Apple Silicon) |
| Network | Required on first run to download the GLiNER model (~1 GB) |
Installation
pip install ansemo
python -m spacy download ro_core_news_sm
All Python dependencies (Presidio, spaCy, GLiNER, etc.) are installed automatically. The spaCy language model must be installed separately (see above).
Alternatively, install from a wheel file directly:
pip install ansemo-<version>-<platform>.whl
python -m spacy download ro_core_news_sm
On first use, the GLiNER NER model (~1 GB) is downloaded from HuggingFace. Set the HF_HOME environment variable to control where it is cached (see Environment Variables).
Quick Start
from ansemo import anonymize
text, mapping = anonymize(
"Dl. Ion Popescu (CNP 1850612345674) locuiește pe "
"Str. Eminescu nr. 45, București. Tel: 0745 123 456."
)
print(text)
# Dl. [PERSON_NAME_1] (CNP [CODE_1]) locuiește pe
# [STREET_ADDRESS_1], București. Tel: [PHONE_NUMBER_1].
print(mapping)
# {"PERSON_NAME": {"Ion Popescu": "[PERSON_NAME_1]"}, ...}
Note: The
anonymize()convenience function runs without SLM fallback. For AI-verified anonymization, usebuild_pipeline()— see Reusable Pipeline.
Python API
Convenience Function
from ansemo import anonymize
text, mapping = anonymize("some text with PII")
- Creates a singleton pipeline on first call (loads models once, reuses them).
- SLM fallback is disabled — for SLM verification, use
build_pipeline(). - Thread-safe.
Reusable Pipeline
For explicit control and SLM support, build your own pipeline:
from ansemo import build_pipeline
pipeline = build_pipeline()
text, mapping = pipeline.anonymize("some text with PII")
text2, mapping2 = pipeline.anonymize("another document")
- Models are loaded once and reused across calls.
- SLM fallback is enabled by default — requires an Ollama server (see SLM Fallback).
- To disable SLM:
build_pipeline(slm_fallback=None)
Selective Entity Detection
Anonymize only specific entity types:
pipeline = build_pipeline(slm_fallback=None)
text, mapping = pipeline.anonymize(
"Ion Popescu, ion@firma.ro, IBAN RO89BCRL0000000123456789",
entities=["PERSON_NAME", "EMAIL_ADDRESS"], # only these two
)
# IBAN is left untouched
See Supported Entity Types for the full list.
De-anonymization
Reverse the anonymization using the returned mapping:
from ansemo import build_pipeline
pipeline = build_pipeline(slm_fallback=None)
anonymized, mapping = pipeline.anonymize("Dl. Ion Popescu, tel 0745 123 456")
original = pipeline.deanonymize(anonymized, mapping)
# "Dl. Ion Popescu, tel 0745 123 456"
A standalone function is also available:
from ansemo import anonymize, deanonymize_text
anonymized, mapping = anonymize("Dl. Ion Popescu, tel 0745 123 456")
original = deanonymize_text(anonymized, mapping)
Custom Denylist
Suppress false positives with domain-specific terms that should not be anonymized:
pipeline = build_pipeline(
slm_fallback=None,
extra_denylist={
"PERSON_NAME": {"fidejusor", "cesionar", "mandatar"},
"ORGANIZATION": {"filială", "agenție"},
},
)
text, mapping = pipeline.anonymize("Fidejusor: Ion Popescu")
# "fidejusor" won't be detected as a person name
- Entries are merged with the built-in denylists (they add, never replace).
- Matching is case-insensitive and diacritic-insensitive.
Adjusting Detection Sensitivity
Override the default confidence thresholds per entity type. Lower values detect more entities (but may increase false positives); higher values are stricter.
Default thresholds:
| Entity Type | Default Threshold |
|---|---|
PERSON_NAME |
0.20 |
ORGANIZATION |
0.20 |
STREET_ADDRESS |
0.50 |
USERNAME |
0.20 |
PASSWORD |
0.45 |
from ansemo import build_pipeline
# Override specific thresholds (others keep their defaults)
pipeline = build_pipeline(
slm_fallback=None,
entity_thresholds={"PERSON_NAME": 0.35, "STREET_ADDRESS": 0.40},
)
Note: Thresholds only apply to GLiNER-detected entities (PERSON_NAME, ORGANIZATION, STREET_ADDRESS, USERNAME, PASSWORD). Structured-data entities (EMAIL_ADDRESS, PHONE_NUMBER, IBAN_CODE, etc.) use deterministic pattern matching and are not affected by thresholds.
Low-Level Access
For full control over the detection and anonymization steps:
from ansemo import build_analyzer, ENTITIES, GLINER_ENTITY_MAPPING, GLINER_ENTITY_THRESHOLDS
from ansemo.processing import filter_entity_denylist, resolve_overlaps, anonymize_text, postprocess_anonymized
analyzer = build_analyzer(
gliner_entity_mapping=GLINER_ENTITY_MAPPING,
entity_thresholds=GLINER_ENTITY_THRESHOLDS,
)
results = analyzer.analyze(text=text, language="ro", entities=ENTITIES, score_threshold=0.2)
results = filter_entity_denylist(text, results)
results = resolve_overlaps(results, text)
anonymized, mapping = anonymize_text(text, results)
anonymized = postprocess_anonymized(anonymized, mapping)
SLM Fallback (AI Verification)
The SLM (Small Language Model) fallback routes low-confidence detections through a local LLM for context-aware verification. This improves accuracy by filtering out false positives that pattern-based detection alone cannot resolve.
- Enabled by default when using
build_pipeline(). - Disabled when using the
anonymize()convenience function. - Applies by default to:
CODE,USERNAME,PASSWORD,ORGANIZATION.
Setting Up Ollama
- Install Ollama from https://ollama.com/download
- Pull the required model:
ollama pull qwen3.5:9b
- Ollama runs as a background service automatically — no manual start needed.
The pipeline connects to Ollama on its default port (http://127.0.0.1:11434/v1).
GPU acceleration
For best performance, the model should be loaded on the GPU. Verify with ollama ps — the PROCESSOR column should show gpu (not cpu).
If the model doesn't fit entirely in GPU memory, create a custom model configuration with a reduced context window and partial GPU offloading:
-
Create a file named
Modelfile:FROM qwen3.5:9b PARAMETER num_ctx 4096 PARAMETER num_gpu 28num_ctx 4096— context window in tokens (4096 is sufficient for ansemo)num_gpu 28— number of model layers offloaded to GPU (reduce if you run out of VRAM)
-
Build and use the custom model:
ollama create qwen3.5-ansemo -f Modelfile
-
Use it in the pipeline:
pipeline = build_pipeline(slm_model="qwen3.5-ansemo")
SLM Configuration
from ansemo import build_pipeline
# Disable SLM fallback entirely
pipeline = build_pipeline(slm_fallback=None)
# Allow pipeline to start without SLM (graceful degradation)
pipeline = build_pipeline(slm_required=False, slm_on_failure="accept")
# SLM for all entity types (not just the default 4)
pipeline = build_pipeline(slm_entity_types=None)
# SLM for specific entity types only
pipeline = build_pipeline(slm_entity_types={"PERSON_NAME", "CODE"})
slm_required (default: True):
True— raises an error if the SLM server is unreachable at startup.False— allows the pipeline to work without SLM. Ambiguous entities are handled based onslm_on_failure.
slm_on_failure (default: "accept"):
"accept"— keep ambiguous entities (fewer missed detections, more false positives)."reject"— discard ambiguous entities (fewer false positives, more missed detections)."error"— raise an error when the SLM server is unavailable.
A circuit breaker automatically disables SLM after 2 consecutive batch failures to avoid timeout delays.
Using a Different LLM Server
Any OpenAI-compatible server works (vLLM, llama.cpp, etc.):
pipeline = build_pipeline(
slm_base_url="http://custom-host:8080/v1",
slm_model="my-model",
slm_api_key="sk-...", # optional
)
Context window: A context window of 4096 tokens is sufficient. The SLM does not process the full document — it only receives short context snippets around each detected entity.
Advanced: Per-Entity Thresholds
For fine-grained control, construct SLMFallback directly:
from ansemo import build_pipeline
from ansemo.slm import SLMFallback
slm = SLMFallback(
per_entity_config={
"PERSON_NAME": {"slm_threshold": 0.6},
"ORGANIZATION": {"slm_threshold": 0.9},
},
required=True,
on_failure="accept",
)
pipeline = build_pipeline(slm_fallback=slm)
Detections with scores below slm_threshold are sent to the SLM for verification. Scores at or above slm_threshold are accepted without SLM.
Default slm_threshold values:
| Entity Type | slm_threshold |
|---|---|
PERSON_NAME |
0.70 |
CODE |
0.65 |
ORGANIZATION |
0.90 |
USERNAME |
1.00 (all sent to SLM) |
STREET_ADDRESS |
0.65 |
PASSWORD |
1.00 (all sent to SLM) |
Overriding Request Parameters
By default, reasoning/thinking is disabled via reasoning_effort: "none" in the request body. If your LLM provider uses a different parameter to control reasoning, override it with extra_body:
from ansemo.slm import SLMFallback
# Example: provider that uses a different reasoning control
slm = SLMFallback(
extra_body={"reasoning": {"enabled": False}},
)
pipeline = build_pipeline(slm_fallback=slm)
CLI Usage
The ansemo command is installed automatically with the package:
# Anonymize a file (SLM enabled by default)
ansemo document.txt
# Multiple files
ansemo file1.txt file2.txt
# Inline text
ansemo --text "Dl. Ion Popescu, email ion@firma.ro"
# Only specific entities
ansemo --entities PERSON_NAME,EMAIL_ADDRESS document.txt
# JSON output to stdout
ansemo --json --text "Dl. Ion Popescu, tel 0745 123 456"
# Without SLM fallback
ansemo --no-slm document.txt
# Custom SLM server
ansemo --slm-url http://localhost:8080/v1 --slm-model my-model document.txt
# Debug logging (verbose output)
ansemo --debug document.txt
CLI Flags
| Flag | Description |
|---|---|
files |
One or more file paths to anonymize |
--text |
Anonymize inline text instead of files |
--entities |
Comma-separated entity types to detect (default: all) |
--json |
Output results as JSON to stdout |
--slm-url |
SLM server URL (default: http://127.0.0.1:11434/v1) |
--slm-model |
SLM model name (default: qwen3.5:9b) |
--no-slm |
Disable SLM fallback |
--debug |
Enable debug logging |
--quiet, -q |
Suppress info logs (warnings and errors only) |
CLI Output
Results are saved to results/anonymization/{filename}_{timestamp}/:
results/anonymization/document_20250523_143021/
anonymized.txt # Anonymized text
mapping.json # Entity mapping (original -> placeholder)
slm_verdicts.json # SLM decisions summary (if SLM enabled)
slm_verdicts_detailed.json # Detailed SLM decisions (if SLM enabled)
Supported Entity Types
| Entity Type | Source | Description | Example |
|---|---|---|---|
PERSON_NAME |
GLiNER | Full and partial person names | Ion Popescu, Maria |
ORGANIZATION |
GLiNER | Companies, institutions, NGOs | SC Alfa Solutions SRL |
STREET_ADDRESS |
GLiNER + regex | Romanian/Moldovan addresses | Str. Eminescu nr. 45, Bl. A3 |
USERNAME |
GLiNER | Social media handles, login names | @ion_popescu |
PASSWORD |
GLiNER | Credential strings | Secure@2025! |
EMAIL_ADDRESS |
Presidio | Email addresses | ion@firma.ro |
PHONE_NUMBER |
phonenumbers | RO/MD phone numbers | 0745 123 456, +40 745 123 456 |
IBAN_CODE |
Presidio + schwifty | IBAN codes (compact and spaced) | RO89BCRL0000000123456789 |
CREDIT_CARD |
Presidio | Credit card numbers | 4532 1111 2222 3336 |
BIC |
Registry lookup | BIC/SWIFT codes | BTRLRO22 |
IP_ADDRESS |
Presidio | IP addresses | 192.168.1.1 |
URL |
Presidio | URLs | https://example.com |
CODE |
Regex | CUI, license plates, case numbers, etc. | J40/1234/2020, B 123 ABC |
CNP |
Regex + checksum | Romanian personal numeric code (13 digits) | 1850612345674 |
SLM-dependent entities:
USERNAME,PASSWORD, andORGANIZATIONare excluded by default when SLM fallback is disabled (i.e., when usinganonymize()orbuild_pipeline(slm_fallback=None)). These entity types produce too many false positives without AI verification. To include them without SLM, pass them explicitly:entities=["PERSON_NAME", "ORGANIZATION", ...].
Pipeline Architecture
Text
│
├─ 1. Presidio Analyzer (GLiNER + regex recognizers)
├─ 2. Denylist filter (remove known false positives)
├─ 3. Overlap resolution (greedy, score-based)
├─ 4. SLM fallback (enabled by default — verify low-confidence detections)
├─ 5. Anonymize (replace entities with [TYPE_N] placeholders)
└─ 6. Post-process (replace remaining occurrences of detected entities via regex)
│
▼
(anonymized_text, entity_map)
Output Format
Anonymized Text
Detected entities are replaced with numbered placeholders in the format [ENTITY_TYPE_N]:
Input: Dl. Ion Popescu, tel 0745 123 456, email ion@firma.ro
Output: Dl. [PERSON_NAME_1], tel [PHONE_NUMBER_1], email [EMAIL_ADDRESS_1]
If the same entity appears multiple times in the text, all occurrences receive the same placeholder.
Entity Mapping
The mapping is a nested dictionary: {entity_type: {original_text: placeholder}}:
{
"PERSON_NAME": {
"Ion Popescu": "[PERSON_NAME_1]"
},
"PHONE_NUMBER": {
"0745 123 456": "[PHONE_NUMBER_1]"
},
"EMAIL_ADDRESS": {
"ion@firma.ro": "[EMAIL_ADDRESS_1]"
}
}
This mapping can be used for:
- Auditing which entities were detected and replaced.
- De-anonymization to restore the original text (see De-anonymization).
- Downstream processing that needs to reference anonymized entities.
Environment Variables
| Variable | Description | Default |
|---|---|---|
HF_HOME |
Directory for HuggingFace model cache (GLiNER, ~1 GB) | ~/.cache/huggingface |
SLM_BASE_URL |
SLM server URL (used by CLI) | http://127.0.0.1:11434/v1 |
SLM_API_KEY |
SLM API key (used by CLI) | empty |
Logging
Enable logging to see pipeline step details:
import logging
logging.basicConfig(level=logging.INFO)
The pipeline logs each step — detection counts, denylist filtering, overlap resolution, SLM verdicts, and final entity counts.
For verbose output:
logging.basicConfig(level=logging.DEBUG)
In CLI mode, use the --debug flag. To suppress info logs, use --quiet (-q) — only warnings and errors will be shown.
Troubleshooting
GLiNER model download fails
Symptom: Error on first run about failing to download from HuggingFace.
Solutions:
- Ensure internet access is available on first run.
- If behind a proxy, configure
HTTP_PROXY/HTTPS_PROXYenvironment variables. - Set
HF_HOMEto a writable directory with sufficient disk space (~1 GB). - To pre-download the model on a machine with internet access, run:
from gliner import GLiNER GLiNER.from_pretrained("knowledgator/gliner-multitask-large-v0.5")
Then copy theHF_HOMEcache directory to the target machine.
SLM server connection error
Symptom: ConnectionError or SLMUnavailableError when using build_pipeline().
Solutions:
- Ensure Ollama is installed and running:
ollama listshould show available models. - Verify the model is pulled:
ollama pull qwen3.5:9b - If not using SLM, disable it:
build_pipeline(slm_fallback=None) - For non-critical use, allow graceful degradation:
pipeline = build_pipeline(slm_required=False, slm_on_failure="accept")
High memory usage
Symptom: Process uses excessive RAM or runs out of memory.
Solutions:
- The GLiNER model requires ~2 GB RAM. Ensure the machine has at least 4 GB available.
- Reuse the pipeline object across calls instead of creating new ones.
- For the
anonymize()convenience function, the pipeline is automatically reused (singleton).
Wrong wheel platform
Symptom: pip install fails with platform compatibility error.
Solution: Ensure the wheel matches your Python version and OS (see the naming breakdown in Installation).
Entity not detected
Possible causes:
- The entity type may not be in the default set. Check Supported Entity Types.
- The text may be matching a denylist entry (known false positive). Check if the term is a common Romanian word.
- For low-confidence detections with SLM enabled, the SLM may have rejected it. Try with
--debugorlogging.DEBUGto see SLM verdicts.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ansemo-0.1.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 737.5 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02989cc2ab944b4ac6599311fa5f9b763943ef0a3a49c7515c475900462cc4ac
|
|
| MD5 |
a67e3b538eb9cd38a588dbb2b7defe18
|
|
| BLAKE2b-256 |
d338fe5ce3bdc8b09c55f5e4edbd338918d70aa0ddc3a7979989e817e712c910
|
File details
Details for the file ansemo-0.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6239e8b0c11e961204a827289d5ab0995c4b97598f9b894b0faafde4018aec6
|
|
| MD5 |
2542ec4026d8dcd6b1e5b4367814d724
|
|
| BLAKE2b-256 |
8b376208b77cfb57f5a7d6e7bd7f2118474c727f178eb24f2afb782bebaa8c38
|
File details
Details for the file ansemo-0.1.0-cp313-cp313-macosx_10_13_universal2.whl.
File metadata
- Download URL: ansemo-0.1.0-cp313-cp313-macosx_10_13_universal2.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.13, macOS 10.13+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f126718a97d8c4b571484db045656604ecb760be3337c3dbe59b7aea0f69eeb5
|
|
| MD5 |
253dd6a3b8ee5b908078a80de79c01cc
|
|
| BLAKE2b-256 |
bb35916574a9db6d45902a3fb329db10ffe3e5bc578eb033748c9e107e17528e
|
File details
Details for the file ansemo-0.1.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 742.4 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
502fbe2dc53d8e8d999c4f12376c3dc75aa00a20ea99cac93d71781a014dfd4e
|
|
| MD5 |
e51c3b4e36a669aaa319c236767ba53b
|
|
| BLAKE2b-256 |
fea692a67a7d100291a1c5e762760ee363f7277d5cf646f6a5aef370c0aa638f
|
File details
Details for the file ansemo-0.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1051773209036acd9c4b91d6840a9701d64f6dd6d5198f8698ed1f516e0b5acc
|
|
| MD5 |
7dc51a91a2df9227bb70f898fc886661
|
|
| BLAKE2b-256 |
0e18a433816e64aa6c348d5d0d5ace2f83ee2052669b8a8c1dba0927d45aa2cb
|
File details
Details for the file ansemo-0.1.0-cp312-cp312-macosx_10_13_universal2.whl.
File metadata
- Download URL: ansemo-0.1.0-cp312-cp312-macosx_10_13_universal2.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.12, macOS 10.13+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af3a17b263e74f20627bf42a122bef0428154b48636cd733c2ecab6720fe5d87
|
|
| MD5 |
acd4d1e4627fb4959d43074753db4c05
|
|
| BLAKE2b-256 |
712b54b2f05c38f9495d3d48b5c2a2fcf57f0cc375d46acfea868ee9f94eb3d1
|
File details
Details for the file ansemo-0.1.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 751.7 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b3e14bc35b3afd23615cb0da9c33f131fc08e3324106d3b98916248fb3b8ff1
|
|
| MD5 |
9e85eccda51442077b3770693c6e4967
|
|
| BLAKE2b-256 |
4aa541843a17cf4a3466b1643b33ac215bcb5d5aae0c93672948087c05e3db11
|
File details
Details for the file ansemo-0.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c22f3496ebc3e2dbf2b8175e23b59b886271c06d530fb51671f0606a81e5bc5
|
|
| MD5 |
1c45e85f8ba8ec011ceaab8add050a6e
|
|
| BLAKE2b-256 |
8279288cf2305ba795f94751f24b3ebbb9f1145a52488c8b6f1e6f7513d0e6d7
|
File details
Details for the file ansemo-0.1.0-cp311-cp311-macosx_10_9_universal2.whl.
File metadata
- Download URL: ansemo-0.1.0-cp311-cp311-macosx_10_9_universal2.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.11, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abc3a7d52fbe9aa0965dc789bd085d30c067ac75f92fd044428221f080d437d0
|
|
| MD5 |
6899542c911d6ff67f62827410b39995
|
|
| BLAKE2b-256 |
238b77f2fd5628006bd0627c0c36c46381f007f49b4940592a2977b0c678bed4
|
File details
Details for the file ansemo-0.1.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 751.6 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bce00cdb6d8368bc7acd58378c355de556fab7ffca9ab476005ffc09666da40
|
|
| MD5 |
e83de3546fa5f8d05afd8a5fc3ea4511
|
|
| BLAKE2b-256 |
bfa44d62dc102f9bced8a577b27d9efc8ad545db21219750d4e371c14a707158
|
File details
Details for the file ansemo-0.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ansemo-0.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 4.3 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c9db893a22f6dd0f7f721bc860360f5651489efd84dcdb24f4ff6ad7f6d724d
|
|
| MD5 |
478ddd40c93110d6ab08ec0af77e1063
|
|
| BLAKE2b-256 |
103bea312e42cad34896061daaf55f3c9400712936a6f35e170cb6573ec48912
|
File details
Details for the file ansemo-0.1.0-cp310-cp310-macosx_10_9_universal2.whl.
File metadata
- Download URL: ansemo-0.1.0-cp310-cp310-macosx_10_9_universal2.whl
- Upload date:
- Size: 1.5 MB
- Tags: CPython 3.10, macOS 10.9+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e57d4b7e1114f44b6d160129ad7758fa0ac5cb8c72098c5aec614f5355c92718
|
|
| MD5 |
6b84a6fec25e6ca1ebf2df82f631a68b
|
|
| BLAKE2b-256 |
454651b5c45cb4e06b8ad0ece079a9ba714fe49bae16d66b9b664da00b615109
|