Skip to main content

High-performance in-memory graph API with RoaringBitmaps, Python bindings via PyO3

Project description

RustyChickpeas

Coverage Status

RustyChickpeas Logo

An in-memory graph API written in Rust, using RoaringBitmaps as a fundamental data structure.

Overview

RustyChickpeas provides a high-performance, in-memory graph database API that:

  • Uses RoaringBitmaps: Efficient set operations for node/relationship IDs
  • Rust-First: High-performance core implementation
  • Python-Friendly: PyO3 bindings for seamless Python integration
  • In-Memory: Optimized for fast graph operations

Project Status

Implementation Complete - Core functionality implemented with comprehensive benchmarks and Python bindings.

  • ✅ Immutable GraphSnapshot with CSR adjacency and columnar properties
  • ✅ GraphSnapshotBuilder for efficient bulk loading (requires u32 node IDs)
  • ✅ Parallel finalization using rayon for improved performance
  • ✅ Python bindings via PyO3
  • ✅ Bulk loading from Parquet files

See rustychickpeas-core/benches/README.md for benchmark information.

Key Features

  • Immutable GraphSnapshot - Read-optimized graph with CSR adjacency and columnar properties
  • GraphSnapshotBuilder - Efficient bulk loading (requires u32 node IDs directly)
  • RustyChickpeas Manager - Version management for multiple graph snapshots
  • Parallel Finalization - Uses rayon to parallelize index building during finalization
  • ✅ Label and property support with inverted indexes
  • ✅ Efficient traversal using CSR (Compressed Sparse Row) format
  • ✅ Python bindings via PyO3
  • ✅ Bulk loading from Parquet files

Installation

pip install rustychickpeas

Or from source:

git clone https://github.com/freeeve/rustychickpeas.git
cd rustychickpeas/rustychickpeas-python
pip install maturin
maturin develop --release

Platform Support

RustyChickpeas is tested and supported on:

  • Linux x86_64 - Full support
  • macOS x86_64 (Intel) - Full support
  • macOS arm64 (Apple Silicon) - Full support
  • Windows x86_64 - Full support

Limitations:

  • ⚠️ Linux aarch64 (ARM servers, e.g., AWS Graviton) - Not currently tested in CI. The Rust core should compile and work, but Python bindings require native runners or complex cross-compilation setup. Contributions welcome!

Python Version Support

RustyChickpeas requires Python >= 3.10 and is tested against Python 3.10, 3.11, 3.12, 3.13, and 3.14.

Supported Python Versions by Platform

Platform Python Versions
Linux x86_64 3.10, 3.11, 3.12, 3.13, 3.14
macOS x86_64 (Intel) 3.11, 3.12, 3.13, 3.14
macOS arm64 (Apple Silicon) 3.10, 3.11, 3.12, 3.13, 3.14
Windows x86_64 3.10, 3.11, 3.12, 3.13, 3.14

Note: Python 3.10 is not available on macOS x86_64 runners due to dependency issues with the GitHub Actions environment. Python 3.10 works fine on macOS arm64 (native runners) and all other platforms.

PyO3 Compatibility

  • Python 3.10-3.12: Fully supported by PyO3 0.20.3

  • Python 3.13-3.14: Uses stable ABI compatibility mode (PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1) since PyO3 0.20.3 doesn't officially support these versions yet. This works correctly but uses the stable ABI for forward compatibility.

    Note for local development: When using cargo check or cargo build with Python 3.13/3.14, you may need to set the environment variable:

    export PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1
    cargo check --package rustychickpeas-python
    

    maturin builds automatically handle this via the py-limited-api = "auto" setting in pyproject.toml.

Quick Start

Python

Basic Usage (with Manager)

import rustychickpeas as rcp

# Create a manager for version management
manager = rcp.RustyChickpeas()

# Create a builder with a version
builder = manager.create_builder(version="v1.0")

# Add nodes with labels (node_id is optional - auto-generates if not provided)
builder.add_node(["Person"], node_id=1)
builder.add_node(["Person"], node_id=2)
builder.add_node(["Company"], node_id=3)

# Add relationships (node IDs are required)
builder.add_relationship(1, 2, "KNOWS")
builder.add_relationship(1, 3, "WORKS_FOR")

# Set properties (automatic type detection)
builder.set_prop(1, "name", "Alice")
builder.set_prop(1, "age", 30)
builder.set_prop(2, "name", "Bob")
builder.set_prop(3, "name", "Acme Corp")

# Finalize and add to manager (uses the version set when creating the builder)
builder.finalize_into(manager)

# Retrieve snapshot by version
graph = manager.graph_snapshot("v1.0")

# Get graph statistics
print(f"Graph has {graph.node_count()} nodes and {graph.relationship_count()} relationships")

# Query nodes
node = graph.node(1)  # Get Node object (node ID 1)
print(f"Node labels: {node.labels()}")  # ["Person"]
print(f"Node property 'name': {node.get_property('name')}")  # "Alice"

# Query relationships - get neighbor Node objects
neighbors = graph.neighbors(1, rcp.Direction.Outgoing)
print(f"Node 1 has {len(neighbors)} outgoing neighbors")
for neighbor in neighbors:
    print(f"  Neighbor ID: {neighbor.id()}, labels: {neighbor.labels()}")

# Or get just the neighbor IDs
neighbor_ids = graph.neighbor_ids(1, rcp.Direction.Outgoing)
print(f"Neighbor IDs: {neighbor_ids}")  # [2, 3]

# Get relationships as Relationship objects (includes type, start/end nodes)
relationships = graph.relationships(1, rcp.Direction.Outgoing)
for rel in relationships:
    print(f"  {rel.reltype()}: {rel.start_node().id()} -> {rel.end_node().id()}")

Standalone Usage (without Manager)

import rustychickpeas as rcp

# Create a standalone builder
builder = rcp.GraphSnapshotBuilder(version="v1.0")

# Add nodes and relationships
builder.add_node(["Person"], node_id=1)
builder.add_node(["Person"], node_id=2)
builder.add_relationship(1, 2, "KNOWS")

# Finalize into a snapshot
graph = builder.finalize()

# Query the graph
node = graph.node(1)
neighbors = graph.neighbors(1, rcp.Direction.Outgoing)

Loading from Parquet Files

import rustychickpeas as rcp

# Direct loading (creates a standalone snapshot)
graph = rcp.GraphSnapshot.read_from_parquet(
    nodes_path="nodes.parquet",
    relationships_path="relationships.parquet",
    node_id_column="id",
    label_columns=["label"],
    start_node_column="from",
    end_node_column="to",
    rel_type_column="type"
)

# Or load into a builder for more control
manager = rcp.RustyChickpeas()
builder = manager.create_builder(version="v1.0")
builder.load_nodes_from_parquet("nodes.parquet", node_id_column="id", label_columns=["label"])
builder.load_relationships_from_parquet("relationships.parquet", 
                                       start_node_column="from", 
                                       end_node_column="to", 
                                       rel_type_column="type")
builder.finalize_into(manager)
graph = manager.graph_snapshot("v1.0")

Rust

use rustychickpeas_core::RustyChickpeas;

// Create a manager (handles multiple snapshots by version)
let manager = RustyChickpeas::new();

// Create a builder from the manager with version
let mut builder = manager.create_builder(Some("v1.0"), None, None);

// Add nodes and relationships (node_id is optional - auto-generates if None)
builder.add_node(Some(1), &["Person"]);
builder.add_node(Some(2), &["Person"]);
// Relationships require explicit node IDs
builder.add_relationship(1, 2, "KNOWS");

// Finalize the builder
let snapshot = builder.finalize(None);

// Add to manager
manager.add_snapshot(snapshot);

// Retrieve the snapshot by version
let snapshot = manager.graph_snapshot("v1.0").unwrap();

// Query the snapshot
let neighbors = snapshot.neighbors(1, Direction::Outgoing);
println!("Node 1 neighbors: {:?}", neighbors);

Version Management

RustyChickpeas supports version management at the snapshot level using the RustyChickpeas manager. Each snapshot can have a version string (e.g., "v1.0", "v2.0") that identifies it.

Python

import rustychickpeas as rcp

# Create a manager
manager = rcp.RustyChickpeas()

# Create and build version 1.0
builder1 = manager.create_builder(version="v1.0")
# ... add nodes/relationships ...
builder1.finalize_into(manager)

# Create and build version 2.0
builder2 = manager.create_builder(version="v2.0")
# ... add nodes/relationships ...
builder2.finalize_into(manager)

# Retrieve snapshots by version
v1_snapshot = manager.graph_snapshot("v1.0")
v2_snapshot = manager.graph_snapshot("v2.0")

# List all versions
versions = manager.versions()  # ["v1.0", "v2.0"]

How Version Management Works

  1. Setting Version: Pass version parameter to create_builder() when creating the builder, or use GraphSnapshotBuilder.set_version(version_string) to set it later.

  2. Storage: After calling builder.finalize(), add the snapshot to the manager using manager.add_snapshot(snapshot). The snapshot will be stored under its version (if set) or "latest" if no version is set.

  3. Retrieval: Use manager.graph_snapshot(version_string) to retrieve a snapshot by version.

  4. Version Storage: Versions are stored as strings and can be any identifier you choose (e.g., "v1.0", "2024-01-01", "production").

Capacity and Auto-Growing

The capacity_nodes and capacity_rels parameters are optional performance hints for pre-allocation:

  • Defaults: If not specified, starts with 2^20 (1,048,576) nodes/relationships capacity
  • Auto-Growing: The builder automatically grows as needed (doubling capacity each time)
  • Maximum Limits:
    • Nodes: Up to 2^32 - 1 (4.3 billion) - enforced by u32 NodeId
    • Relationships: Up to 2^64 - 1 (18.4 quintillion) - limited by memory
  • When to Specify Capacity: Only specify if you know the approximate size upfront to avoid reallocations. For most use cases, the default auto-growing behavior is sufficient.

Example:

# Uses default (2^20 = 1,048,576), auto-grows as needed
builder = manager.create_builder(version="v1.0")

# Large graph - specify capacity hint to avoid reallocations
builder = manager.create_builder(version="v1.0", capacity_nodes=10_000_000, capacity_rels=50_000_000)

API Naming Conventions

RustyChickpeas follows Pythonic naming conventions with clear, descriptive method names:

# Get graph statistics
nodes = graph.node_count()
relationships = graph.relationship_count()

Performance

See rustychickpeas-core/benches/README.md for benchmark information.

For Python-specific performance tests, see rustychickpeas-python/tests/benchmark_large_parquet.py.

Highlights:

  • Node existence: ~7ns (constant time)
  • Property lookup: ~44ns (constant time)
  • Label queries: ~56ns for 100 nodes, ~348ns for 100K nodes
  • BFS traversal: ~130ns per node
  • Bitmap operations: Sub-microsecond for millions of elements

Analytical query workload (LDBC SNB BI-style):

Measured on a synthetic LDBC-style social graph — 1,110,000 nodes and 4,500,000 relationships (Person/Post/Comment/Tag connected by hasCreator/hasTag/hasInterest), generated deterministically by the ldbc_snb_bi benchmark — on an Apple M3 Max. Median of 10 samples per query:

Query Description Time
BI1 Tag co-evolution (pairs co-occurring across posts & comments) 123 ms
BI2 Tag person path (persons linked via shared interests) 2.0 ms
BI3 Popular topics (most-referenced tags) 99 ms
BI4 Top commenters 18 ms
BI5 Active users (most posts) 7.2 ms
BI6 Tag co-occurrence (frequently paired tags) 31 ms

This is a generated dataset, not the official LDBC SNB data — it requires no download and its size scales with the LDBC_SYNTH_SCALE environment variable (the figures above use scale 50). To benchmark against a real LDBC SNB dataset, point the ldbc_snb_bi_benchmark integration test at a Parquet snapshot via LDBC_DATA_DIR.

Limits and Scalability

Hard Limits

  • Nodes: Up to 2^32 - 1 (4,294,967,295 nodes) - Limited by u32 NodeId
  • Node IDs: Must be u32 (0 to 2^32 - 1) - Users should map their own IDs to u32 if needed
  • Relationships: Up to 2^64 - 1 (18,446,744,073,709,551,615) - Limited by u64 counter, but practically constrained by memory
  • Unique Strings (labels, relationship types, property keys): Up to 2^32 - 1 (4,294,967,295) - Limited by u32 InternedStringId
  • Properties per Node: No hard limit, constrained by available memory
  • Property Values: No hard limit, constrained by available memory

Note: While relationships can theoretically reach 2^64 - 1, practical limits are determined by available system memory. Each relationship requires storage in CSR arrays and indexes.

Tested Scales

1 Million Nodes + 1 Million Relationships - Tested and verified:

  • Memory usage: ~2.7GB (with string interning) to ~3.4GB (without)
  • Bulk load rate: ~4M entities/sec from Parquet files
  • Direct builder rate: 21-31M nodes/sec, 12-19M rels/sec
  • Query performance: Sub-millisecond for most operations
  • See rustychickpeas-python/tests/benchmark_large_parquet.py for large-scale benchmarks

Practical Considerations

Memory Usage:

  • Base overhead: ~3.5 bytes per node/relationship (structure + indexes)
  • Properties: Additional memory depends on property count and size
  • String interning: Reduces memory significantly for graphs with high string duplication
  • Property value interning: Optional feature saves 32-50% memory when property values have high duplication

Performance Characteristics:

  • Direct Builder Operations: 21-31M nodes/sec, 12-19M rels/sec (exceeds 10M/sec target)
  • Bulk Loading: ~4M entities/sec from Parquet files (sequential processing, I/O bound)
  • Finalization: Parallelized using rayon for label/type indexes, property columns, and inverted indexes
  • Queries: Constant-time for indexed operations (label/type lookups)
  • Traversal: Linear with graph connectivity (BFS, shortest path)
  • Memory: Linear growth with graph size

Recommended Usage:

  • Small graphs (< 100K nodes): Excellent performance, minimal memory footprint
  • Medium graphs (100K - 10M nodes): Good performance, manageable memory requirements
  • Large graphs (10M+ nodes): Feasible but memory becomes the primary constraint; finalization benefits from parallelization
  • Very large graphs (100M+ nodes): Possible with sufficient RAM (100GB+); parallel finalization helps reduce finalization time

Memory Estimation:

Base memory ≈ (nodes + relationships) × 3.5 bytes
+ Properties (varies by property count/size)
+ String interning overhead (minimal)
- String interning savings (~21.5% if enabled)

Example: 1M nodes + 1M relationships with properties:

  • Without interning: ~3.4GB
  • With basic interning: ~2.7GB
  • With property value interning (50% reuse): ~1.4GB

Testing

Running Tests

Rust Tests:

cargo test --workspace

Python Tests:

cd rustychickpeas-python
pytest tests/

Test Coverage

Test coverage is set up for both Rust and Python:

Run Coverage:

./scripts/coverage.sh  # Linux/macOS
.\scripts\coverage.ps1  # Windows

Coverage Reports:

  • Rust: coverage/rust/tarpaulin-report.html
  • Python: coverage/python/htmlcov/index.html

See cursor_md/COVERAGE.md for detailed coverage documentation.

License

Licensed under MIT license (LICENSE or http://opensource.org/licenses/MIT).

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

rustychickpeas-0.9.0.tar.gz (289.0 kB view details)

Uploaded Source

Built Distributions

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

rustychickpeas-0.9.0-cp314-cp314-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.14Windows x86-64

rustychickpeas-0.9.0-cp314-cp314-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.34+ x86-64

rustychickpeas-0.9.0-cp314-cp314-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rustychickpeas-0.9.0-cp314-cp314-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

rustychickpeas-0.9.0-cp313-cp313-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.13Windows x86-64

rustychickpeas-0.9.0-cp313-cp313-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

rustychickpeas-0.9.0-cp313-cp313-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustychickpeas-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rustychickpeas-0.9.0-cp312-cp312-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.12Windows x86-64

rustychickpeas-0.9.0-cp312-cp312-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

rustychickpeas-0.9.0-cp312-cp312-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustychickpeas-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rustychickpeas-0.9.0-cp311-cp311-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.11Windows x86-64

rustychickpeas-0.9.0-cp311-cp311-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

rustychickpeas-0.9.0-cp311-cp311-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustychickpeas-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl (7.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rustychickpeas-0.9.0-cp310-cp310-win_amd64.whl (6.5 MB view details)

Uploaded CPython 3.10Windows x86-64

rustychickpeas-0.9.0-cp310-cp310-manylinux_2_34_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

rustychickpeas-0.9.0-cp310-cp310-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file rustychickpeas-0.9.0.tar.gz.

File metadata

  • Download URL: rustychickpeas-0.9.0.tar.gz
  • Upload date:
  • Size: 289.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustychickpeas-0.9.0.tar.gz
Algorithm Hash digest
SHA256 720b3b8dce85935399bda3dee321483b54edbef24029504c11891e227066ecac
MD5 83a103dfbc5fc1b4ad1a411fdf78d1ef
BLAKE2b-256 7a48801d2c617613ff68ab097ec195822d2564f85e88a7508e82146f1d10160c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0.tar.gz:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a8d34029eb1343e5b5b9289b39e22a88f06b98f64d3dda6f9836d11f0003d9f0
MD5 31e70fe51ca1b7b21afba9455227e259
BLAKE2b-256 4f3a26ee34d39590f6330d5a296d6952c86157b13221a9ad13570f3ba79f2d8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp314-cp314-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp314-cp314-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1d0e4795b03ef4ccb33d36a120663c5f11b3f82702e0683fed08912873d9f81e
MD5 12f1c29e2a4febed7637e821bf584431
BLAKE2b-256 5eb035c5259f8e131c84be31f5806f23984bd08a83897484a4d006b36129b05e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp314-cp314-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 135a2f87bf42a36ecd13a117444d16cdc94e0797518b1a266e062411242bbd94
MD5 4c82236424a4105ac56e471f20c5b65b
BLAKE2b-256 dbb3e610906d5008d9d872e08bb54c4855b1d319b57799f2da8f54643d4134b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dd1c0e78a7715a6d29118689cf733644a67a92c989da2700ba590030e07cf824
MD5 e15617ed38bbc5d82d5aeea9ab40f2ae
BLAKE2b-256 b4f7dc9ff822ede80b61c1cbff70a579bd560de774e19c88258de4dec2153ffc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 abe0477b5d088f6bc589af3c1e540969156b855031ee67aa4a14a723f1d8aeea
MD5 06d41068097203dbb3f169e4df7fcd3b
BLAKE2b-256 7221946612dc95fce8c558604bd1e569e779d52efa72cd3ce1015450e4af4b62

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 708df608bc5c6d84ff8441f4bebba8d2624108131b720570339610bce48052ec
MD5 b58de7571552d10eb54fd541614c66a2
BLAKE2b-256 cb1d15062b0d8b153d847fc180b6c10a280e773bb13b6e8b6787b8173e965759

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72dba0e5ef11bb801f5dee28714d95146919642bcb203b7239bb0792d6d3203c
MD5 8d32051fea5d0f8e7bcba37327d0aea5
BLAKE2b-256 b24e3a498fe9b4e0dae52a0afe2ca7f92044d98e21dc4c75ee004a5a29b8aa81

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0240f05676f83d8d00fdc5ea8c402fdc61826d5d1cf3dca44cdf6ed4c1beee19
MD5 bb399eec42c73d73a92fb141af2f7a3f
BLAKE2b-256 753b3ba7e81f923e391d28ad768e8b1663ed136763c4eae3c05a7532be6e2ed3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 12bc42f0e90e1f22a69e43cc49ba486ef496fb69f8e92c06c3e1f40f402af877
MD5 a61c4b77597c236f822ccc2c11ff6d68
BLAKE2b-256 6d32caaadd6a60b5bcdd4d1c8494fa0f00f902b5742cb54f2b548f13999028a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 571695387cda54bbc9bbc2dad62e929e9fc2a0ebb10b74d90fb0e5e0821a31fd
MD5 395f4f16689bbb91104874f1e3c72d57
BLAKE2b-256 e11f1983523ac59aa8eebcd3fb1f86b31c13423480bfc129c56c1b4ba36135c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e0540c4802fe74f9aa02c6ad01d6c57a7ce934301b24181ecc92dec9f3f8647b
MD5 ef43af0987d85fd3e354f7d6d1ceabf8
BLAKE2b-256 957a30a5d82f873adc0842f8fc933b7bca1c54fdeb4abf8ec44253d90515c7e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4545660e6ae2f4601666638a92c251928226f019e4ea25ef1eb05d42768db346
MD5 282990cac84e8941966cda919219d9b0
BLAKE2b-256 0979c2fbffcfe5aa08d6b4807b77b9ff8f940ca1bc4a343d7d6fb65a2ab15917

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dd2faa366bacc181b23b8bb16e672e2b47a204f92817fce93afe42ed97dac98e
MD5 7d79cedbe74a62ea8ff32895e9ec6dbc
BLAKE2b-256 0773caf4fd2922715dca0c4bf2036f8c9bdae659f21d13bc8b5457c3dd771bd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a4f8510f56f99c4c0d3016bce5a4c57935df7b37fad98bf3477a9ff7ed56f565
MD5 4fef327685405b2968247b05fb9d7a13
BLAKE2b-256 5e0afdfb4b3749ebe523328fd50c04439f01fb8e6a02c72e046db73edcdefc9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 754b472df26785d9e830064a72020923b83fe490ee6d59053bbb018281349eca
MD5 986540e50d83c6c1e805580d4046bb2e
BLAKE2b-256 a8195d332879ff339230feefcb0db613cceb608b1a83971be296216f5d6e6494

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0985a8c3ceb4949b68416f93e55e48c8d4d2831bd640e107516661307a684c23
MD5 619a93b6fa14aabdb77c2559acd1f470
BLAKE2b-256 019d7f1312475faa2061c0b60abcfad9dcde66abc4ddb4339507d5c9572b23a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 df330b6e3d4a20636a9621235b0e8f282bc5a206e4aefaa757ce4d567798a295
MD5 212cc21c5e7920f8c6993b96f8c9722f
BLAKE2b-256 82b7129053c9b4018da8a6e17869443d9232aaea26fc0fb44cddf093287be867

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 04699e6e8da9cbbc01e85b81c019f804c8b6163e59610ba548279562de0f9c6b
MD5 599bc7c5e8fd764bc00610efc61089ce
BLAKE2b-256 0399101b87b7bc3f83c1371e95c94c119ed7b6c09adc812e4b32c0d242dbb2eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustychickpeas-0.9.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustychickpeas-0.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a64616169aaf1f135327bc3097f1833df9f422c9518d13449189aa5f69352cc
MD5 991c77a6b088cfd917d40342856882f8
BLAKE2b-256 e75634f77a211882d9e53a7b4c2d98794e0f40817b0f9ed57744e4b14d4d4881

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustychickpeas-0.9.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on freeeve/rustychickpeas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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