Skip to main content

canns-lib

CI PyPI version License PyPI - Python Version

DOI arXiv

PyPI Downloads Ask DeepWiki

High-performance computational acceleration library for CANNs (Continuous Attractor Neural Networks), providing optimized Rust implementations for computationally intensive tasks in neuroscience and topological data analysis.

Overview

canns-lib is a modular library designed to provide high-performance computational backends for the CANNS Python package. It currently includes the Ripser module for topological data analysis, with plans for additional modules covering approximate nearest neighbors, dynamics computation, and other performance-critical operations.

Modules

🔬 Ripser - Topological Data Analysis

High-performance implementation of the Ripser algorithm for computing Vietoris-Rips persistence barcodes. Drop-in replacement for ripser.py with identical output (verified at the level of bar counts and per- dimension birth/death values on dense and sparse inputs).

Performance vs ripser.py (v0.9.0)

Measured by benchmarks/ripser/comprehensive_benchmark.py --fast (24 dense point-cloud tests, n ∈ {50, 100, 150, 300}, maxdim ∈ {1, 2}, categories: circle, sphere, torus, random, clusters, grid, swiss_roll, moons, circles). Cross-validated on macOS arm64 and Linux x86_64 (16-core A100 server, RAYON_NUM_THREADS=16).

Platform maxdim=1 maxdim=2 overall median
Linux x86_64 / 16 cores 0.97× 1.58× 1.30×
macOS arm64 (single benchmark) 0.63× 1.10× 0.79×

Headline Linux maxdim=2 result: peak 1.91× on torus n=300. Per-dimension persistence values match ripser.py exactly on both platforms (counts_match=True | birth/death values match=True).

Performance vs ripser.py (v0.8.0 baseline, before this release)

Same harness, same matrices:

Platform v0.8.0 maxdim=1 v0.8.0 maxdim=2 v0.8.0 overall v0.9.0 deltas
Linux x86_64 / 16 cores 0.97× 1.03× 1.03× maxdim=2 +0.55×
macOS arm64 (single benchmark) 0.51× 0.98× 0.70× overall +0.09×, maxdim=2 +0.12×

The dominant end-user win in this release is the shuffle null-model FFI shipped for downstream consumers — see the next section.

Shuffle null-model acceleration (v0.9.0 vs canns<1.2.1 legacy multiprocessing.Pool)

canns_lib._ripser_core.shuffle_null_model is a single Rust+rayon call that replaces the per-shuffle Python multiprocessing.Pool.imap loop in canns.analyzer.data.asa.tda._run_shuffle_analysis (used when TDAConfig.do_shuffle=True).

Measured with canns/scripts/bench_shuffle.py (macOS arm64, maxdim=1, 24-cell matrix T∈{60,300}×N∈{20,40,80}×n_shuffles∈{10,50,200,1000}):

n_shuffles median FFI vs legacy speedup range
10 5 081× 763× – 28 555×
50 2 602× 315× – 15 584×
200 2 017× 243× – 15 961×
1000 1 733× 139× – 16 144×

Aggregate across all 24 cells: FFI 4.5 s vs legacy 2 175 s ≈ 36 min, a 484× total wall-clock ratio. From canns 1.2.1 onwards this is the default behaviour; older canns releases pick up the speedup as soon as they upgrade canns-lib to 0.9.0 (the FFI falls back to the legacy path automatically if missing).

Semantic difference: the FFI computes Euclidean distances on the raw (T, N) spike-train matrix; the legacy multiprocessing.Pool path applies timepoint downsampling, PCA, UMAP denoising, and an nbs distance threshold before ripser. The resulting null-distribution shape will differ even at the same random seed — opt out with use_ffi_shuffle=False if you specifically need the legacy pipeline.

Features

  • Algorithmic improvements: Row-by-row edge generation, cleared coboundary enumeration
  • Memory optimization: Structure-of-Arrays reduction matrix, k-major binomial coefficient table, packed (index, coefficient) EntryT (24 → 16 bytes), GAT-based static-dispatch cofacet enumeration with inline simplex-vertex stack array
  • Parallel processing: Multi-threading with Rayon (enabled by default)
  • Full Compatibility: Drop-in replacement for ripser.py with identical API
  • Multiple Metrics: Support for Euclidean, Manhattan, Cosine, and custom distance metrics
  • Sparse Matrices: Efficient handling of sparse distance matrices
  • Cocycle Computation: Optional computation of representative cocycles
  • Shuffle null-model FFI: single-call parallel Rust path for per-shuffle persistence (when used by canns)

Two experimental paths are kept under env-flag opt-in only: CANNS_RIPSER_USE_LOCKFREE=1 and CANNS_RIPSER_APPARENT=1. Both are correctness-fixed and match ripser.py outputs but are currently net- slower than sequential on this codebase.

🧭 Spatial Navigation (RatInABox parity)

Accelerated reimplementation of RatInABox environments and agents with PyO3/ Rust. Supports solid and periodic boundaries, arbitrary polygons, holes, and thigmotaxis wall-following.

Performance Snapshot

The spatial backend delivers ~700× runtime speedups vs. the pure-Python reference when integrating long trajectories. Benchmarked with benchmarks/spatial/step_scaling_benchmark.py (dt=0.02, repeats=1).

Steps RatInABox Runtime canns-lib Runtime Speedup
10² 0.020 s <0.001 s 477×
10³ 0.190 s <0.001 s 713×
10⁴ 1.928 s 0.003 s 732×
10⁵ 19.481 s 0.027 s 718×
10⁶ 192.775 s 0.266 s 726×

Spatial Runtime Scaling

Spatial Speedup Scaling

Plots and CSV summaries are emitted to benchmarks/spatial/outputs/.

Highlights

  • Full parity with RatInABox API (Environment, Agent, trajectory import/export)
  • Polygon & hole support with adaptive projection and wall vectors
  • Parity comparison tools in example/trajectory_comparison.py
  • Visualization utilities: drop-in replacements for RatInABox's plotting helpers (trajectory, heatmaps, histograms)
  • Benchmark scripts for long-step drift and speedup under benchmarks/spatial/

Visualization Helpers

from canns_lib import spatial

env = spatial.Environment(dimensionality="2D", boundary_conditions="solid")
agent = spatial.Agent(env, rng_seed=2025)

for _ in range(2_000):
    agent.update(dt=0.02)

# Trajectory with RatInABox-style colour fading and agent marker
agent.plot_trajectory(color="changing", colorbar=True)

# Other helpers mirror RatInABox naming
agent.plot_position_heatmap()
agent.plot_histogram_of_speeds()
agent.plot_histogram_of_rotational_velocities()

See example/spatial_plotting_demo.py for a full script that produces the trajectory, heatmap, and histogram figures showcased above.

Drift Velocity Control

Guide agent movement toward target directions while maintaining natural stochastic motion (matches RatInABox API):

# Basic drift usage
agent.update(
    dt=0.02,
    drift_velocity=[0.05, 0.02],  # Target velocity vector
    drift_to_random_strength_ratio=5.0  # Drift strength relative to random motion
)

Parameters:

  • drift_velocity: Target velocity vector (must match environment dimensionality)
  • drift_to_random_strength_ratio: Controls balance between drift and randomness
    • 0.0 = pure random motion (no drift)
    • 1.0 = equal weighting (default)
    • > 1.0 = stronger drift toward target

Use cases: Goal-directed navigation, reinforcement learning, biased exploration.

See example/drift_velocity_demo.py for detailed examples with visualizations.

🚀 Coming Soon

  • Dynamics: High-performance dynamics computation for neural networks
  • And more...

Installation

From PyPI (Recommended)

pip install canns-lib

From Source

git clone https://github.com/Routhleck/canns-lib.git
cd canns-lib
pip install maturin
maturin develop --release

Quick Start

Using the Ripser Module

import numpy as np
from canns_lib.ripser import ripser

# Generate sample data
data = np.random.rand(100, 3)

# Compute persistence diagrams
result = ripser(data, maxdim=2)
diagrams = result['dgms']

print(f"H0: {len(diagrams[0])} features")
print(f"H1: {len(diagrams[1])} features")
print(f"H2: {len(diagrams[2])} features")

Advanced Options

# High-performance computation with progress tracking
result = ripser(
    data,
    maxdim=2,
    thresh=1.0,                    # Distance threshold
    coeff=2,                       # Coefficient field Z/2Z
    do_cocycles=True,              # Compute representative cycles
    verbose=True,                  # Detailed output
    progress_bar=True,             # Show progress
    progress_update_interval=1.0   # Update every second
)

# Access results
diagrams = result['dgms']          # Persistence diagrams
cocycles = result['cocycles']      # Representative cocycles
num_edges = result['num_edges']    # Number of edges in complex

Sparse Matrix Support

from scipy import sparse

# Create sparse distance matrix
row = [0, 1, 2]
col = [1, 2, 0]
data = [1.0, 1.5, 2.0]
sparse_dm = sparse.coo_matrix((data, (row, col)), shape=(3, 3))

# Compute with sparse matrix (automatically detected)
result = ripser(sparse_dm, distance_matrix=True, maxdim=1)

Compatibility

The ripser module maintains 100% API compatibility with ripser.py:

# These work identically
import ripser as original_ripser
from canns_lib.ripser import ripser

result1 = original_ripser.ripser(data, maxdim=2)
result2 = ripser(data, maxdim=2)

# Results are numerically identical
assert np.allclose(result1['dgms'][0], result2['dgms'][0])

Development

Building from Source

# Prerequisites
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install maturin

# Build and install
git clone https://github.com/Routhleck/canns-lib.git
cd canns-lib
maturin develop --release --features parallel

# Run tests
python -m pytest tests/ -v

Running Benchmarks

cd benchmarks
python compare_ripser.py --n-points 100 --maxdim 2 --trials 5

Technical Details

Ripser Module Architecture

  • Dual API paths: High-performance versions and full-featured versions with progress tracking
  • Memory optimization: Structure-of-Arrays layout, intelligent buffer reuse
  • Sparse matrix support: Efficient handling via neighbor intersection algorithms
  • Progress tracking: Built-in progress bars using tqdm when available
  • Parallel processing: Multi-threading with Rayon

Algorithmic Optimizations

  • Dense edge enumeration: O(n²) row-by-row generation vs O(n³) vertex decoding
  • Sparse queries: O(log k) binary search vs O(k) linear scan
  • Cache-friendly data structures: SoA matrix layout, k-major binomial tables
  • Packed simplex entries: (index, coefficient) packed into one 64-bit word, halving DiameterEntryT size from 24 → 16 bytes

License

Licensed under the Apache License, Version 2.0. See LICENSE for details.

Citation

If you use canns-lib in your research, please cite the toolkit paper (which describes both canns and canns-lib):

@misc{he2026canns,
  title        = {CANNs: A Toolkit for Research on Continuous Attractor Neural Networks},
  author       = {He, Sichao and
                  Tuerhong, Aiersi and
                  She, Shangjun and
                  Chu, Tianhao and
                  Wu, Yuling and
                  Zuo, Junfeng and
                  Wu, Si},
  year         = 2026,
  eprint       = {2606.27783},
  archivePrefix = {arXiv},
  primaryClass  = {q-bio.NC},
  doi          = {10.48550/arXiv.2606.27783},
  url          = {https://arxiv.org/abs/2606.27783}
}

Plain text:

He, S., Tuerhong, A., She, S., Chu, T., Wu, Y., Zuo, J., & Wu, S. (2026). CANNs: A Toolkit for Research on Continuous Attractor Neural Networks. arXiv:2606.27783. https://arxiv.org/abs/2606.27783

If you want to cite this Rust backend specifically, you can additionally reference the Zenodo archive:

@software{canns_lib,
  title={canns-lib: High-Performance Computational Acceleration Library for CANNS},
  author={He, Sichao},
  url={https://github.com/Routhleck/canns-lib},
  year={2025}
}

Acknowledgments

Ripser Module

  • Ulrich Bauer: Original Ripser algorithm and C++ implementation
  • Christopher Tralie & Nathaniel Saul: ripser.py Python implementation
  • Rust community: Amazing ecosystem of high-performance libraries

Related Projects

  • Ripser: Original C++ implementation
  • ripser.py: Python bindings for Ripser
  • CANNS: Continuous Attractor Neural Networks
  • scikit-tda: Topological Data Analysis in Python

Release files for canns-lib 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for canns-lib 0.9.1
File Size Uploaded
canns_lib-0.9.1.tar.gz 355.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for canns-lib 0.9.1
File
canns_lib-0.9.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
canns_lib-0.9.1-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
canns_lib-0.9.1-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
canns_lib-0.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
canns_lib-0.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
canns_lib-0.9.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
canns_lib-0.9.1-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
canns_lib-0.9.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
canns_lib-0.9.1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
canns_lib-0.9.1-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
canns_lib-0.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
canns_lib-0.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
canns_lib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
canns_lib-0.9.1-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
canns_lib-0.9.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
canns_lib-0.9.1-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
canns_lib-0.9.1-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details
canns_lib-0.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
canns_lib-0.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
canns_lib-0.9.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
canns_lib-0.9.1-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details

Total release size: 11.0 MB

Release files / canns_lib-0.9.1.tar.gz

Download URL canns_lib-0.9.1.tar.gz
Size 355.2 kB
Tags Source
SHA-256 checksum
How to use checksums
85a8d603781a5130fd0820da8be1374625a7ae0d41d3a9552329d4400946cb79
BLAKE2b-256 checksum
How to use checksums
11c3b0ad30198c3907630cbaf33e5667d97841c81af58d818a029541ada7f842
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-win_amd64.whl

Download URL canns_lib-0.9.1-cp313-cp313-win_amd64.whl
Size 421.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
6e61132feb431386d531e22ead4721604bbc9b54841fd947d593d12cb4d4430e
BLAKE2b-256 checksum
How to use checksums
0776cd72e272e97420fc8ee58115d577c8d81b791ddb7b860349aa298528c0e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL canns_lib-0.9.1-cp313-cp313-musllinux_1_2_x86_64.whl
Size 594.0 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
596a22bee3baa78513558e328d58d608cebf2da7c8a31c33d8e0682186731e3c
BLAKE2b-256 checksum
How to use checksums
88bcc9df0ac08caa7c17b8df8828a8b5d4b52ccf1b6d945e2696b990a120e82e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL canns_lib-0.9.1-cp313-cp313-musllinux_1_2_aarch64.whl
Size 546.1 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
9f021faaad4262a434c67a68e165345da036a7f075fee339c1fc6d0c06101d79
BLAKE2b-256 checksum
How to use checksums
a8649a40553effed122a313fe211de65ee7ba2282ceb6c0c16f79b954779d2d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL canns_lib-0.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 529.9 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
75d1328e26f25a4eb20b42cd7eeb7077ccfc1854ba8948a6fc79c38e03d030d9
BLAKE2b-256 checksum
How to use checksums
8ec4879776ea63ee8b6fbb856dcf7263618aebda74086ae7346bc0d9ddf407c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL canns_lib-0.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 494.3 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
78f11174f8c417d01fb8857f85f17bb65f5d85eec8f997e4e5055ec1fa1a0622
BLAKE2b-256 checksum
How to use checksums
18b719ad795f85661075001df06b14abceb5394b0297a8e57630e4e6cbf2d860
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL canns_lib-0.9.1-cp313-cp313-macosx_11_0_arm64.whl
Size 447.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0b1a6d7b697f47a3e73b202768b548737078ede933a327a480e17852c7a5a70c
BLAKE2b-256 checksum
How to use checksums
4b35427c91f2d4981879117798666e969a83371ca80f995d72cadaea74a5c5ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp313-cp313-macosx_10_13_x86_64.whl

Download URL canns_lib-0.9.1-cp313-cp313-macosx_10_13_x86_64.whl
Size 494.9 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
d9f0805abdc05b43b171e16002b7eaca054bf2ca934092a6065ab52344f1eeff
BLAKE2b-256 checksum
How to use checksums
498c109740eac7ca475fdfc3fc7248e76bd7f05db6e41e6438d40b8cb030b75f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-win_amd64.whl

Download URL canns_lib-0.9.1-cp312-cp312-win_amd64.whl
Size 421.1 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
77c7be5f4404686c14fb6112a85e8e65de435bb6d50ca0728976d84af59aa9f5
BLAKE2b-256 checksum
How to use checksums
2d90bbd49ef3ae3d27a03c4467ba6195090c3f3b8620ad083351d24ff4938b98
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL canns_lib-0.9.1-cp312-cp312-musllinux_1_2_x86_64.whl
Size 594.3 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
cb69d13d0267271e6ceec2e18dc746eaf85b79b399bb451c502338399a390e22
BLAKE2b-256 checksum
How to use checksums
d7e40a3a5193a91a95e8505a5cf1f46ee668fa6bc292ffa27f9d354ca27c3a6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL canns_lib-0.9.1-cp312-cp312-musllinux_1_2_aarch64.whl
Size 546.4 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
59adf5634b6d2859c3256aeb06481ef8f4298d2f41fd825aff1ee475765a0043
BLAKE2b-256 checksum
How to use checksums
6da947e3b2d622258f70f69cfc0abdb4777248d1110c6f7b051a8ebaa2631fed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL canns_lib-0.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 530.2 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
470c763137e9358e4692478afea49dd4a964ab5698adf115bb7e8b14ae357969
BLAKE2b-256 checksum
How to use checksums
5f1a2b19f0b66f078ea2c00325ba8a9d3fdf41b9c9226f8c9f21c459f98aefca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL canns_lib-0.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 494.7 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
1b1ef5e6173332cdaf63849af6a3de26179d85ff7d76d6daf45de7a382fc59e1
BLAKE2b-256 checksum
How to use checksums
31f8abf0b74a36efcb6181904b8c7e1a96e965475161c396b08ec569e444a0cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL canns_lib-0.9.1-cp312-cp312-macosx_11_0_arm64.whl
Size 447.8 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
70d995f991ab34419c3e88dfdcd12405cb354e0fc5abccf474d681a4b7bf29a3
BLAKE2b-256 checksum
How to use checksums
752f780a0a3ef749696e81ba4b0d5b44ef459a856c1d9f9f9ec19d267f54ae34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp312-cp312-macosx_10_13_x86_64.whl

Download URL canns_lib-0.9.1-cp312-cp312-macosx_10_13_x86_64.whl
Size 495.1 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
8e3f785b15c0b5516c06f2da1daca7ffd36af260d42f4f3e98886c460148683b
BLAKE2b-256 checksum
How to use checksums
fb9e3ede8f0bf79618cf76df7ee0b01b0ce566fa8a25a111477ba0fc5f5697ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-win_amd64.whl

Download URL canns_lib-0.9.1-cp311-cp311-win_amd64.whl
Size 423.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
b973d12ba903ca7db2f03bb5dac5ae641674a5a0edb3f1f10cfd83c09d3b64ad
BLAKE2b-256 checksum
How to use checksums
f0f51000a3be17f53d2f0df602f3c005634a925a52b227c7089fa900e070849e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL canns_lib-0.9.1-cp311-cp311-musllinux_1_2_x86_64.whl
Size 596.6 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6c2e337aee213ec1af44ffd726da77952dc0167705f3ac66da715cd6f94970b7
BLAKE2b-256 checksum
How to use checksums
761eeb1c77998064d8fb4111a4420b584ca0db4fc52b6f891c2de204c56f49ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-musllinux_1_2_aarch64.whl

Download URL canns_lib-0.9.1-cp311-cp311-musllinux_1_2_aarch64.whl
Size 548.8 kB
Tags CPython 3.11 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
635de0cae77e40db44f0babd55dcca5e4a9904e93f11cb363a7862eaa57a10d3
BLAKE2b-256 checksum
How to use checksums
02a96fa35215927aec2210fc8fe41aee82f8beb30689edf269941cc6205a76f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL canns_lib-0.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 532.6 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
61d84e09631a8f31d7bbdafd32c8fb3e2eed4b91a98b73515a063fe3eb1bc11d
BLAKE2b-256 checksum
How to use checksums
6a9708b983ddc0f52224d7dee48404ecc8720ee4a6f9f1014f762c8e273ac6f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL canns_lib-0.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 497.2 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
10459c484e2606fde8c1893675b595e360b7745d11821c1bd8f68b54b8cbd3f1
BLAKE2b-256 checksum
How to use checksums
313102b2e74cc64068c9f38c0648e9c89923ba761f1e39ca6d3a8eae7ac1f778
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL canns_lib-0.9.1-cp311-cp311-macosx_11_0_arm64.whl
Size 448.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5c5ae0dee17409b99701d9aaeda1419e62bf6952939fb4a15efabaf80a31b31b
BLAKE2b-256 checksum
How to use checksums
1a4383836526b4a6725718230f998414683266800d647c631276bcb29849bbcd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / canns_lib-0.9.1-cp311-cp311-macosx_10_12_x86_64.whl

Download URL canns_lib-0.9.1-cp311-cp311-macosx_10_12_x86_64.whl
Size 496.0 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7089e4fe1aa8653d05315e31cbc087b73a76d2dee8b92787478f71bc99114c7b
BLAKE2b-256 checksum
How to use checksums
2dd558fc3c765543dcf9fa87ed03a7e4a012de4f34ad4797e532a069179f52fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.9.1 This release

22 release files

0.7.0

22 release files

0.6.5

22 release files

0.6.4

22 release files

0.6.3

22 release files

0.6.2

22 release files

0.6.1

22 release files

0.6.0

22 release files

0.5.0

22 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page