Skip to main content

C++ accelerated CSV preprocessing and data cleaning for pandas

Project description


Arnio



Your CSV hits C++ before Python even wakes up.


Arnio is a compiled C++ data cleaning engine that slots in before pandas.
It parses, infers types, strips whitespace, deduplicates, and normalizes —
all natively, in columnar memory — then hands you a pristine DataFrame.
No .apply(). No lambda chains. No spaghetti.


PyPI  Python  CI  Coverage  MIT  GSSoC 2026 PyPI Downloads



pip install arnio

Quickstart · Why Arnio · Architecture · Benchmarks · Contribute




⚡ Quickstart

Three lines. That's the entire workflow.

import arnio as ar

# Load CSV directly through C++ — no Python parsing overhead
frame = ar.read_csv("messy_sales_data.csv")

# Declare what clean data looks like — arnio handles the rest
clean = ar.pipeline(frame, [
    ("strip_whitespace",),
    ("normalize_case", {"case_type": "lower"}),
    ("fill_nulls", {"value": 0.0, "subset": ["revenue"]}),
    ("drop_nulls",),
    ("drop_duplicates",),
])

# Out comes a standard pandas DataFrame — use it like you always have
df = ar.to_pandas(clean)

Every step above executes in C++. Your Python code is a configuration — not the execution engine.


📸 Peek at a 100 GB file without loading it

scan_csv reads only the header + a sample to infer the schema. Zero data loaded.

schema = ar.scan_csv("100GB_file.csv")
# {'id': 'int64', 'name': 'string', 'is_active': 'bool', 'revenue': 'float64'}

Useful for exploring datasets before committing memory.

🧩 Add custom steps without touching C++

Register any Python function as a pipeline step. It receives a DataFrame, returns a DataFrame.

def remove_outliers(df, column="revenue", threshold=100_000):
    return df[df[column] <= threshold]

ar.register_step("remove_outliers", remove_outliers)

# Now use it in any pipeline alongside native C++ steps
clean = ar.pipeline(frame, [
    ("strip_whitespace",),
    ("remove_outliers", {"column": "revenue", "threshold": 50000}),
    ("drop_duplicates",),
])

Custom steps run through a pandas↔ArFrame conversion bridge. Prototype in Python, then optionally migrate hot paths to C++ for full speed.




🔍 Why Arnio exists

Every data project starts the same way:

df = pd.read_csv("data.csv")              # 💥 RAM spike — entire file as raw strings
df.columns = df.columns.str.strip()        # Why is this not automatic?
df["name"] = df["name"].str.strip()        # Python loop over every cell
df["name"] = df["name"].str.lower()        # Another Python loop
df = df.dropna()                           # Another pass
df = df.drop_duplicates()                  # Another pass

Six lines. Four full-data passes. All in interpreted Python. This is fine for a Jupyter demo — but it doesn't scale, it doesn't compose, and it definitely doesn't belong in production.

Arnio intercepts this entire pattern. It moves the heavy lifting to C++, replaces imperative chains with a declarative pipeline, and gives you a clean DataFrame in one shot.

Without Arnio

df = pd.read_csv(path)
df.columns = df.columns.str.strip()
for col in str_cols:
    df[col] = df[col].str.strip()
    df[col] = df[col].str.lower()
df = df.dropna(subset=["revenue"])
df = df.drop_duplicates()
# 6+ lines, multiple passes, pure Python

With Arnio

frame = ar.read_csv(path)
df = ar.to_pandas(ar.pipeline(frame, [
    ("strip_whitespace",),
    ("normalize_case", {"case_type": "lower"}),
    ("drop_nulls", {"subset": ["revenue"]}),
    ("drop_duplicates",),
]))
# Declarative. Single pipeline. C++ execution.



🏗️ Architecture

Arnio is not a pandas wrapper. It's a separate runtime with its own data model.

┌──────────────────────────────────────────────────────────────┐
│  Your Python Code                                            │
│  frame = ar.read_csv("data.csv")                             │
│  clean = ar.pipeline(frame, [...])                           │
│  df = ar.to_pandas(clean)                                    │
└────────────────────────┬─────────────────────────────────────┘
                         │  pybind11 boundary
┌────────────────────────▼─────────────────────────────────────┐
│  C++ Runtime  (_arnio_cpp)                                   │
│                                                              │
│  ┌─────────────┐  ┌─────────────────┐  ┌──────────────────┐ │
│  │  CsvReader   │  │  Frame/Column   │  │  Cleaning Engine │ │
│  │  • RFC 4180  │  │  • Columnar     │  │  • drop_nulls    │ │
│  │  • BOM strip │  │  • std::variant │  │  • fill_nulls    │ │
│  │  • Type      │  │  • Bool null    │  │  • drop_dupes    │ │
│  │    inference │  │    masks        │  │  • strip_ws      │ │
│  │  • Quoted    │  │  • O(1) column  │  │  • normalize     │ │
│  │    fields    │  │    lookup       │  │  • rename/cast   │ │
│  └─────────────┘  └─────────────────┘  └──────────────────┘ │
│                                                              │
│  to_pandas() ──→ zero-copy NumPy buffer (numerics/bools)     │
└──────────────────────────────────────────────────────────────┘

Design decisions that matter

Decision What it means
Columnar storage Data lives in typed std::vectors — vector<int64_t>, vector<double>, vector<string> — not rows of variants. Cache-friendly and SIMD-ready.
Boolean null masks Nulls are tracked in a separate vector<bool>, keeping data vectors dense. No sentinel values, no NaN tricks.
Two-pass CSV read Pass 1 infers types across all rows. Pass 2 parses values directly into the correct typed column. No string→object→cast overhead.
Zero-copy bridge to_pandas() exposes C++ memory directly via NumPy's buffer protocol. Numeric and boolean columns cross the boundary without copying.
Step registry Pipeline steps map to C++ function pointers. Adding a new cleaning primitive is a single function + one registry entry.

Full architecture documentation: ARCHITECTURE.md




🏎️ Benchmarks

Setup: Ubuntu, Python 3.12, 1M rows × 12 columns, synthetic messy CSV.
Reproduce: make benchmark — generates data and runs both engines.

                     pandas         arnio
────────────────────────────────────────────
Exec Time (avg)       4.73s         5.75s
Peak RAM               211MB         212MB
API Clarity         Imperative    Declarative

Arnio is near memory parity in the reference benchmark while replacing ad-hoc Python string loops with a compiled, declarative pipeline. Validate memory and speed on your own workload. The execution time gap is a known, active optimization target — the current drop_duplicates and strip_whitespace implementations use unoptimized row-key serialization.

What's already won 🎯 What's being optimized
  • Native C++ parsing eliminates Python memory spikes
  • Columnar storage matches pandas' internal efficiency
  • Declarative API eliminates .apply() spaghetti
  • Zero-copy bridge for numeric conversions
  • drop_duplicates — replace string serialization with hash-based comparisons
  • strip_whitespace — in-place mutation instead of copy-on-write
  • Parallel column processing via std::thread
  • Help close the gap →



🧰 Cleaning primitives

Every operation below runs natively in C++. No Python loops.

Primitive What it does Example
drop_nulls Remove rows with null/empty values ar.drop_nulls(frame, subset=["age"])
fill_nulls Replace nulls with a scalar ar.fill_nulls(frame, 0, subset=["revenue"])
drop_duplicates Deduplicate rows (first/last/none) ar.drop_duplicates(frame, keep="first")
strip_whitespace Trim leading/trailing spaces from strings ar.strip_whitespace(frame)
normalize_case Force lower/upper/title case ar.normalize_case(frame, case_type="title")
rename_columns Rename columns via mapping ar.rename_columns(frame, {"old": "new"})
cast_types Cast column types ar.cast_types(frame, {"age": "int64"})
clean Convenience shorthand ar.clean(frame, drop_nulls=True)

Or compose them all into a pipeline:

clean = ar.pipeline(frame, [
    ("strip_whitespace",),
    ("normalize_case", {"case_type": "lower"}),
    ("fill_nulls", {"value": "unknown", "subset": ["city"]}),
    ("drop_duplicates", {"keep": "first"}),
])



🧠 Data quality engine

Arnio now includes built-in dataset understanding before you analyze in pandas.

report = ar.profile(frame)
print(report.summary())

suggestions = ar.suggest_cleaning(frame)
clean = ar.pipeline(frame, suggestions)

For production data contracts:

schema = ar.Schema({
    "id": ar.Int64(nullable=False, unique=True),
    "email": ar.Email(nullable=False),
    "revenue": ar.Float64(nullable=True, min=0),
})

result = ar.validate(frame, schema)
if not result.passed:
    print(result.to_pandas())

For low-risk automatic cleanup:

clean, report = ar.auto_clean(frame, mode="strict", return_report=True)

This is the layer pandas does not try to own: profiling, data contracts, row-level validation issues, and safe cleaning suggestions for messy incoming datasets.




🗺️ Roadmap

Version Focus Status
v1.0 Stable release · cross-platform wheels · CI/CD · PyPI publishing · Google Colab support ✅ Shipped
v0.2 C++ pipeline optimization · speed parity with pandas · hash-based deduplication 🔨 Active
v0.3 Chunked / streaming processing · Parquet & JSON readers 📋 Planned
v0.4 Parallel column processing · SIMD string operations 💭 Exploring



🤝 Contribute

Arnio is a GSSoC 2026 project with a structured contributor backlog across beginner, intermediate, and advanced tracks.

You don't need C++ to contribute

Most new features are pure Python pipeline steps:

# 1. Write a function that takes a DataFrame and returns a DataFrame
def remove_special_chars(df, columns=None):
    cols = columns or df.select_dtypes("object").columns
    for col in cols:
        df[col] = df[col].str.replace(r"[^a-zA-Z0-9\s]", "", regex=True)
    return df

# 2. Register it
ar.register_step("remove_special_chars", remove_special_chars)

# 3. Write tests, open a PR. That's it.

If you do know C++

The biggest performance wins are in:

  • drop_duplicates — replacing std::ostringstream row serialization with proper hash-based comparisons
  • strip_whitespace — converting from copy-on-write to in-place mutation
  • Parallel column processingstd::thread across independent columns

Getting started

# macOS / Linux
git clone https://github.com/im-anishraj/arnio.git && cd arnio
make install   # pip install -e ".[dev]" + pre-commit
make test      # pytest with coverage
make lint      # ruff + black

# Windows
pip install -e ".[dev]"
pre-commit install
pytest tests/ -v

PR titles must follow Conventional Commitsfeat:, fix:, docs:, chore:. Our release pipeline auto-generates changelogs from these.

For GSSoC contributors, please read GSSOC_GUIDE.md before asking to be assigned. It explains issue claiming, contribution levels, review expectations, and what maintainers look for in a strong PR.

📖 Full Contributing Guide ·  GSSoC Guide ·  🐛 Open Issues ·  💬 Discussions




📐 Project structure

arnio/
├── cpp/
│   ├── include/arnio/      # C++ headers — types, column, frame, csv_reader, cleaning
│   └── src/                 # C++ implementations (~30 KB of compiled logic)
├── bindings/
│   └── bind_arnio.cpp       # pybind11 module — the Python↔C++ bridge
├── arnio/
│   ├── __init__.py          # Public API surface
│   ├── io.py                # read_csv, scan_csv
│   ├── cleaning.py          # Python wrappers for C++ cleaning functions
│   ├── pipeline.py          # Step registry + pipeline executor
│   ├── convert.py           # to_pandas (zero-copy), from_pandas
│   ├── frame.py             # ArFrame — lightweight C++ Frame wrapper
│   └── exceptions.py        # ArnioError, UnknownStepError, CsvReadError, TypeCastError
├── tests/                   # pytest suite — CSV, cleaning, pipeline, conversions
├── benchmarks/              # Reproducible arnio vs pandas benchmark
├── examples/                # basic_usage.py, custom_step.py
└── website/                 # Project website — arnio.vercel.app



Arnio



Stop writing cleaning scripts. Declare clean data.


DownloadsStarsForksWebsite


Built with C++ and pybind11 · Licensed under MIT · Maintained by @im-anishraj

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

arnio-1.1.1.tar.gz (2.0 MB view details)

Uploaded Source

Built Distributions

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

arnio-1.1.1-cp313-cp313-win_amd64.whl (188.1 kB view details)

Uploaded CPython 3.13Windows x86-64

arnio-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

arnio-1.1.1-cp313-cp313-macosx_11_0_arm64.whl (177.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

arnio-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl (192.7 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

arnio-1.1.1-cp312-cp312-win_amd64.whl (188.0 kB view details)

Uploaded CPython 3.12Windows x86-64

arnio-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

arnio-1.1.1-cp312-cp312-macosx_11_0_arm64.whl (177.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

arnio-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl (192.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

arnio-1.1.1-cp311-cp311-win_amd64.whl (186.0 kB view details)

Uploaded CPython 3.11Windows x86-64

arnio-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (234.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

arnio-1.1.1-cp311-cp311-macosx_11_0_arm64.whl (177.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

arnio-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl (191.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

arnio-1.1.1-cp310-cp310-win_amd64.whl (185.1 kB view details)

Uploaded CPython 3.10Windows x86-64

arnio-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (232.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

arnio-1.1.1-cp310-cp310-macosx_11_0_arm64.whl (175.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

arnio-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl (189.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

arnio-1.1.1-cp39-cp39-win_amd64.whl (191.9 kB view details)

Uploaded CPython 3.9Windows x86-64

arnio-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (233.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

arnio-1.1.1-cp39-cp39-macosx_11_0_arm64.whl (176.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

arnio-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl (189.8 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file arnio-1.1.1.tar.gz.

File metadata

  • Download URL: arnio-1.1.1.tar.gz
  • Upload date:
  • Size: 2.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1.tar.gz
Algorithm Hash digest
SHA256 432bf85e36ba79c56a3a8198cf46c10c24271b251991a857c9cc86c896933d7a
MD5 ed58dde98ce5b39814d0bd6df898430b
BLAKE2b-256 2ec19fca9c51fa9c9d27495cd094febece1d8e09ff762d106bfd522376f738fb

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 188.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f876d71dcdb5c51c320f3e5985c4b7c88f3c469140c13cb2db8af7f33285f8f8
MD5 c96cc69ea01f160b4f4322446344a9e7
BLAKE2b-256 3faa1e795c034494c638d5c146d782f83876c3acc4990f5d2170eecb7af5a51e

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b1ca5af64e3496f1c941a61311a3c654c7007c11845f4c3fc598ee6b436bdcc2
MD5 ce273a174694225758250f65c4833ed4
BLAKE2b-256 ea6723f66930ea7bcd069ff0a22af8eb7287495d4fb9d0e6d1a80112ca74f7f6

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c61ebed51777777903b97c84836b446827ece05405f22f244f4eb4ac69c50b98
MD5 0d79fde4ac5bb84c6cb0a7e116774f01
BLAKE2b-256 b77d104aed68f4ff168dab61627f2361842e422221112609c5caac5b79448194

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 fb86342cdffa200b9104341749b44830b771f27b5af5408906626f67e0b54e5e
MD5 d2b677e419c03f48104ded79094e1129
BLAKE2b-256 fc022fe9e926553843d0cc859a760e50e603505e6e078957b2a9c6b87377691e

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 188.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e5f2d2af7171966ef0e94e6a06252d7ca5b00a641d0580c5e70d28db2aad466b
MD5 20d3768d9f50194173ebb4290f9b0b28
BLAKE2b-256 65bb9009400e229a90c9807bdafe8ad3b72abdd11ab96417b8b91e4c9c125fec

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0a4e762a0561e3bbfca8d2fe0030c428a49be37df730bea2f005541374ef0258
MD5 30448cdd3c7fbe8a73fe6a6d9c6ac59a
BLAKE2b-256 3198a90eecd9fbbbd515af9ca4ef2c47e04819c6947e3261e702546bf7343f7a

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f968d805587ec9c018cd7b5bf19d24a7032e07a9ad767d1fadba6a331d48c5b6
MD5 b41cc09d51a1337ce86320057a43013f
BLAKE2b-256 64ff6e27891dd83b9f7bb8d44e93cd45e225a46f195c7c6ed848ea715ed3cce7

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 8a813769b942d5601b4dafb47c4bd4bb6653d4455dae54638a94497da0ca8c66
MD5 8dd8d278218d40c06bb78683c8d964fb
BLAKE2b-256 9fe00a14884cf443c2667ede8d9eedcc4121f7128bd1f37b3c1d6643ef04f112

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 186.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 47d5e8b217e3304190fceac7bb831e076d5f5c7120a4ccf127efa4533e3bbbbf
MD5 5aaf601b53db9357305397566c04cd7a
BLAKE2b-256 030d20c65d657eaf26265548af0d0479a8544392e2e52dc8050a16656fd3f07b

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6278cf18c4852f85c565d7155d786b424f4c7dc3f9ebc4f95caac31d88b3ab9e
MD5 aebbbdb471940cd93b437ed2399ff817
BLAKE2b-256 5496114bc8c05ef211c90ab0a5da5d4f735d05750f5779350a8ac4545cce9d68

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd487679e6bd2653318fd7d985a39137491fd7653684a03878d97815b0a563db
MD5 e7976084730934fe789c8cf2105bdb60
BLAKE2b-256 334d8fabf03e8f7aace9c57b425c89985f7670b8c34481bb045266279a6b7f74

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fa542fc340e4812f0a8af258cbe24e44784c0f82eb4c88971066657b3416dca0
MD5 c28d0101d4a11298d7879b75ce6b0daa
BLAKE2b-256 1eebf81a435202fcb09bf30c1dc1aeb275f271a3ef4cd409e55ca6ba7c0f4331

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 185.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b54b1a7415ee8b8c97163b2b1438f6db0f85ad31e0c8ecfa2ef6a39dbb6daea8
MD5 2af0fd12ceb840d4f1dd20e1a79474c7
BLAKE2b-256 27aed59680196b647be8745546f21a75cfee9a415f3c8a88b6c8b89a91cb95cf

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed85cf184bad64cc4b4dcbc1012fd4a725012968b99166989cc143f0a4be7117
MD5 56f0f80303dac3c1941c86d102a348e8
BLAKE2b-256 68db822005ef7df9f51851625d7bc87f34f9e54a3f832ecbd381dcf30100ef19

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 44ac343a6119c5e41ff74904d4ffe148ea2acc84c59804c69a7c52ddf2ca9db1
MD5 cdda4c96d34407d512b6b84aee64bf2e
BLAKE2b-256 1fc5c2df270073e84c2a24d96d724b7c43645ea77a3e92dce530a7f27a31b406

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4a1f54eae36c6113780be78a7a3eb64677f6f9c85f6b767312746c064946390
MD5 0245d8e2f505406955289f4f9f437a2c
BLAKE2b-256 e98c38207aa0a90f1c6553aa37f32b0dfd0ba2c0852a53475791a9d707dc426c

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 191.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 43d21c834a03189ef5e6184e23f1b3fda1089058f0e773847bb5c47cb78cc9e4
MD5 5ac132a8eb4ce5ad6e9db75c66ad45e6
BLAKE2b-256 f563b3bae5d981434ebfbe5090a7f0b0fbabd93781e43883825f6e40c8f341e1

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for arnio-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54b27b5e0f99d77a9a702a5a9616b3e726cef65489fe385747c63a18dd2258c7
MD5 6e80cc592d7acbcd4a7bbed227fedea1
BLAKE2b-256 9485f71aa02e513f6fd900a768bc2a1abd0fc010c2415587335672bc4c532c32

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 176.0 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b474c2758e174651716f11a51cb68091e4a93415e4eb93c5dd93e4b3bc1928c2
MD5 23326bedf612538e3bec64ffd74ca5d5
BLAKE2b-256 a27920e553c3c056542dc27e73582ba204acd2d37dfeb5437b8519103fe09fe9

See more details on using hashes here.

File details

Details for the file arnio-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: arnio-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 189.8 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arnio-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 547b9affef80abb96cf453adc71ad86b0b4b629df15917f7e2af8fb2f86a2033
MD5 814f5fc9ae9ff17161677205e24d4144
BLAKE2b-256 f87d110c2e63556738b79d0cbbdb1a808a229fa5c937fda82c48640808e030bb

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