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 55+ open issues across all skill levels.

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.

📖 Full Contributing 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.0.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.0-cp313-cp313-win_amd64.whl (187.9 kB view details)

Uploaded CPython 3.13Windows x86-64

arnio-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

arnio-1.1.0-cp313-cp313-macosx_11_0_arm64.whl (177.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

arnio-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl (192.6 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

arnio-1.1.0-cp312-cp312-win_amd64.whl (187.9 kB view details)

Uploaded CPython 3.12Windows x86-64

arnio-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

arnio-1.1.0-cp312-cp312-macosx_11_0_arm64.whl (177.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

arnio-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl (192.5 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

arnio-1.1.0-cp311-cp311-win_amd64.whl (185.8 kB view details)

Uploaded CPython 3.11Windows x86-64

arnio-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (234.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

arnio-1.1.0-cp311-cp311-macosx_11_0_arm64.whl (176.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

arnio-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl (191.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

arnio-1.1.0-cp310-cp310-win_amd64.whl (185.0 kB view details)

Uploaded CPython 3.10Windows x86-64

arnio-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (232.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

arnio-1.1.0-cp310-cp310-macosx_11_0_arm64.whl (175.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

arnio-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl (189.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

arnio-1.1.0-cp39-cp39-win_amd64.whl (191.7 kB view details)

Uploaded CPython 3.9Windows x86-64

arnio-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (233.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

arnio-1.1.0-cp39-cp39-macosx_11_0_arm64.whl (175.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

arnio-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl (189.7 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: arnio-1.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c5002469f6c01a258a321d588b230705ee8a179451ee327e3fe04540e210475a
MD5 63e3e0958c16d4081b7091da47a3a284
BLAKE2b-256 2991c9e39206cec632b109a21542fc6cf92bdc7f5b2743e93d6c174c7900eeac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 187.9 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3124fcef370d3a56fd8c621f24ccedd443f315996a187ed65ac247273f0ff714
MD5 92f54342f114d08c4d13bdb00b4193b9
BLAKE2b-256 f93216de75fb69207a3b55a6cebcd2015b35efc5ae9f8ccbd3a92e8dad916810

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1b5b15a7b39a793afc9cd77e5d5782fab72d22476a548bb21b4e81b27df0a60b
MD5 47ca2e67a11321b7b059915c600eb312
BLAKE2b-256 aaa58cfe48c5f33fdc313f6d6bd7f04d4104d46ee27784758ddcb8d97f929722

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e65b46f68a52741e5adcd91a9c8f2ea6c3eb96e83aef2c7f8976c3c743ea51d
MD5 59325d2376aba8bf4cc130e8d3f97b6e
BLAKE2b-256 714c1b054a3555fa31d482d467564bf6c99cb168bddcc18b11352ccac03dc404

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 196a90841e33d1474f1b3d8235f549d13d8001eee64ef42f47765ed52a7f4dda
MD5 7e7b5923453787a1cd1757ba47fb3816
BLAKE2b-256 3b100fa995f08971cc6909d348647d7b65c94b0bba06e0372cdf90303ca10f88

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 187.9 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f6235ebd29a87f60bdfaf4b448c9155fa95232fbc4a40446afc575feb57cd9c9
MD5 614d046e45f37fb487a73af970049f43
BLAKE2b-256 ecb35daf5ce445ebdac2e22eabfc77b74a8bc0675d7039f7bf7a54cb9033c730

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e115330c1dd0d966b791ca84abb0be9d0daaed962a9d6338e617a88151fb8e99
MD5 54dcdcf8b2f43ff21aae56989edc0813
BLAKE2b-256 0ece26002e0deb8c820756465f9f5ebe174e6f40ab5c5f09eb8422febff5d04b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 890984cb4ae379c09f0265812a65c8e28a16035342c4de6976cfc86c6c8ce270
MD5 163b24c552c6f9919c948c0505ae5f7c
BLAKE2b-256 0c4ff981786d76fa741d8ee28f73ec93efbaad1a39ff9daafb17858bc6f76e1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 4348b0b1d63d10aa8f6997c78b9842f76600ae3dbaf9ebeb7a2cf978f36d7842
MD5 e048bb553805a9cba531dac037c4f98a
BLAKE2b-256 cc8d5f29455ce7a290fd434007f03dc6309dc7d0edc28e9097633c0c1a7e9ff8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 185.8 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 406fb08f370dffdeed16a4aacafc0880ae483149e853a6f7df93a672100eab63
MD5 e1d2ae6d80e30c5ea1ababb09f2ec7cf
BLAKE2b-256 47e1a1835a4e2f9c59ccea63ba71879c022d0fb2f7d53f463788e5909dc56b82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54a316422737207f2b54b76e9ac684a4c6b211ba170aabda4f9d3202fc457fef
MD5 f0a0689de5a085bd2259f00921f1a16b
BLAKE2b-256 f3871e070d950716d7d0557043376c3a124005cf0c5312b873f816c663ff465a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f7490e898ed31c44117e1a4cb4bf1b85ba0ff9871088827ea6a7eb8b38f01a74
MD5 08ee494f936cc7fce76c2e3478d32789
BLAKE2b-256 5998035a3dd0e6bbab32fc53c40b63b4ab811771ff006c6a20895025f8f8fc2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 33813ca2862ee94f3e4eacd7daa42a7fcad2878fdd7d569ae219f5bcfab20fe5
MD5 a563a99ee3bdbfc7c0c01b7d5babd1de
BLAKE2b-256 043e751bb9ffa9d617d46b840b5b822b2ed48db34cf4faa75f6156c730686ce8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 185.0 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 fe9270d8c29b656ed0acfdac88b4d548343ecea301cd3c3c808917f4ee53f07a
MD5 e7b4776273534e87689a021e99f20f90
BLAKE2b-256 635539d062c60cbbb999f321ea7ab8acde11f957bac7348cdb1de0476c6ab9da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1fab5519434e73411704a26af8b00965bdfd5d57af8b7913b83fd35affb0dbe4
MD5 9bf4cc1369af6fcb4e7aaa7e757c42a0
BLAKE2b-256 029a0f4cc38e075105f5edef0c2a100fd729056b1e2c1cbf559e7fd54454b9e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cfc5377248bd2cef148148ecc83e18c3a779356b656c27a02e96ad40e163272e
MD5 3721af150d871d0cf6b59ce6cb06059f
BLAKE2b-256 dd9d02d7ab9b0062ac596f62eb49670455211abfb1ed1c06accd20163f7aec4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 64a35c58ff1e9ef46d762dc63a818a27c4ab23c874f6f8703d6f622b9003a112
MD5 fb6befb9002f3673b661dc79675d813e
BLAKE2b-256 370eb5bc652d95dfaf19a571550bfaa427dbf266e3ccfec7c72332aa9be22f50

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 191.7 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.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 dc8cd855ec629cc658b0f8a4ad1cc0c154d974bebc726b0327b518498a00377e
MD5 88e177b72e3097a5cc8c78807f2b1059
BLAKE2b-256 c5576d2cd17c5975bafe87975dfa4bce2c0ba1ede1a902e1b1d945a6fbefab99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for arnio-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 06fb2f425609e86e8f3bea387e5ab2958a45adca3b7d8ffe6e03fb24c3862739
MD5 5bcc9c93e8b0a96386ac865588ced094
BLAKE2b-256 59138c1fa52f2fc492fa89768240cd523ff297879727f8dde60877def97f95c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 175.9 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.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63fbc646835c3934fbc05ffcb567ff92d768f4fbc89940688ba4c2e09e1b274a
MD5 239c6807bb5da20e877bdb3e95d16cd1
BLAKE2b-256 a4605336c396e5f5bf3c4d1bbe26e57e897c55e4ba9555ffebe850ed38765ff9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: arnio-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 189.7 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.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ab01c9ad105b5414584fe50d05d427b5af7238ebce0a731280985dc531cff85b
MD5 44b98ab4d6861fb1833fbc9917f4ca61
BLAKE2b-256 edbd3d0503751e44176b88925d55679cd7307e3934e54ea4d0ced1d03c744f0c

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