Skip to main content

High-performance computational acceleration library for CANNS, providing optimized implementations for topological data analysis and neural network computations

Project description

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.

Performance Highlights

Measured by benchmarks/ripser/phase_baseline.py on dense point clouds (n ∈ {100, 150, 300}, circle / sphere / torus / random); bar counts and per-dim birth/death values match ripser.py exactly on both dense and sparse inputs.

Linux x86_64, 16 cores:

  • maxdim=1: 0.97× median
  • maxdim=2: 1.58× median (peak 1.74× on torus n=300)
  • Overall median: 1.30×

macOS arm64 (reference):

  • maxdim=1: 0.63× median
  • maxdim=2: 1.10× median
  • Overall median: 0.79×

For the high-leverage shuffle null-model workflow used in canns TDA analysis, canns_lib._ripser_core.shuffle_null_model runs ~100-3000× faster than the legacy Python multiprocessing.Pool path on typical shapes (T=100, N=40, 50 shuffles: 12 ms vs 31 s).

Performance by Category

Top Performing Scenarios

Dataset Type Configuration Speedup
Random N(0,I) d=2, n=500, maxdim=2 1.82x
Two moons n=400, noise=0.08, maxdim=2 1.77x
Random N(0,I) d=2, n=200, maxdim=2 1.72x

Features

  • Algorithmic improvements: Row-by-row edge generation, binary search for sparse matrices
  • Memory optimization: Structure-of-Arrays layout, intelligent buffer reuse
  • 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

🧭 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
  • Zero-apparent pairs: Skip redundant column reductions in higher dimensions

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

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

canns_lib-0.9.0.tar.gz (351.7 kB view details)

Uploaded Source

Built Distributions

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

canns_lib-0.9.0-cp313-cp313-win_amd64.whl (418.5 kB view details)

Uploaded CPython 3.13Windows x86-64

canns_lib-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl (593.3 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

canns_lib-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl (546.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

canns_lib-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (529.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

canns_lib-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (493.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

canns_lib-0.9.0-cp313-cp313-macosx_11_0_arm64.whl (447.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

canns_lib-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl (494.6 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

canns_lib-0.9.0-cp312-cp312-win_amd64.whl (418.7 kB view details)

Uploaded CPython 3.12Windows x86-64

canns_lib-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl (593.5 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

canns_lib-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl (546.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

canns_lib-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (529.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

canns_lib-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (494.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

canns_lib-0.9.0-cp312-cp312-macosx_11_0_arm64.whl (447.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

canns_lib-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl (494.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

canns_lib-0.9.0-cp311-cp311-win_amd64.whl (421.6 kB view details)

Uploaded CPython 3.11Windows x86-64

canns_lib-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl (595.8 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

canns_lib-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl (548.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

canns_lib-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (531.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

canns_lib-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (496.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

canns_lib-0.9.0-cp311-cp311-macosx_11_0_arm64.whl (447.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

canns_lib-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl (495.5 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for canns_lib-0.9.0.tar.gz
Algorithm Hash digest
SHA256 42270359232e0a65b2744fb3590e4d21a55c648c7d4497ddc999c77e7ddd2d83
MD5 284da6e0084ecf9d61939e2916662c84
BLAKE2b-256 0df6e87cb382b9fbeaca8f3dedf693946155ec4d03ea22132e823124cc165e0b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.9.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 418.5 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9d1c6f2100c1b2c7f6d55552d62ec5a6f25a9ee00e00f1b15e234a774acffb01
MD5 c54bfb2c8f6b2faa907778fe5bf07da4
BLAKE2b-256 422c207218a5a262134ebd22f60ab83d1dc024c828635844124106129696c633

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e4066907bff501d165d34eff4c90e7b1c05dbb7503656d41b9cf3efcbd4e357f
MD5 f86b55db29b4f43036287f0869467ee1
BLAKE2b-256 be4d8537e8a6f77d05bcff5f701d66c821ed09eda0f14c34de848bff2f90a29c

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f8262dfc85001eb8d35ff51d7843882b8773211a5cfda86c46399db8c3263c01
MD5 fbbdd0feb3f88a7048932231a7c6bade
BLAKE2b-256 95be19d987f29d2c2c15db2093d03b0de5f968af074e1784b1cfa57b70949a83

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2cef4e8418a7105a97eb168ff846b704bdba7b4b012b0d9b841a872e13facf62
MD5 3a85f6f6a46fa8c4790f2d47e6f6b6bf
BLAKE2b-256 42ae46a9d91789d063fc6c29cf19117ff6323e045d486671c74187976125d745

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 33794d9247f67ad5c301ea85c87163250d7421324cf5db515823e0f4c90f934f
MD5 cace3912dfca642cc92ccd2ca349b57d
BLAKE2b-256 533184560eca9ad066036f6de35750a0b68877563c1f4c798e8530b127b47bbf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ddbce9aac4c183340acf8afd606ccb72a0c2882dad83ad0b284060918012bfb7
MD5 d43713394e34464ae87f1aef9f2b85cb
BLAKE2b-256 e04740e4903c7173f4b98e90226f38e5092aaad68b25551bd796144a814588f8

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 95e5a710d13634ff66adae731929e912f446ee4d72577cb8adec2c11ffde600b
MD5 17443c79097f2688f0e283428fd00dd3
BLAKE2b-256 86a99103602944112f7fa7a6e34dca48760aa6986a3e7ee272e38982f83ed5d8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.9.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 418.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 968b81c7e1f6bc75ad98dce8d6f6554a0b6171a07b508dbb4fe00dcbf024eb10
MD5 65e5d21495da1d65815075e4e906dde3
BLAKE2b-256 8e52bfc759c80e90f947b52e19b2a938b3bdfe86f073cedf1c24c9983955099c

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 932b1b7ca5a37769af43baa2c4cc3f0aa576c646fa83d25f269d9fa25792f2d8
MD5 ae8e0bd272032a3538a666874f634cff
BLAKE2b-256 102325938926ef20b2dd62edaa5b045bb1329e0640c82bfcb630882e2b57e8a8

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 64dc8e8ae8dc56f71c7daa30fe72abe1e0a9c0e8252d1b61c6ee6c6af42d6753
MD5 76fa1602705f1c819d16c3f6e748977b
BLAKE2b-256 d84ad3d10bf898e51a0910d8ad9e5c6138929ab10626a4a49b778c9f70358864

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df9d5f78fffd0b0e9823a06332385b908b47e85c8e153766f1a6c3006f00e19d
MD5 295ef874cc37f21f36f8ad93d85cadea
BLAKE2b-256 4b1d182cdeb70bc8d4e1b9f590796b59930dfb8ae02663fecbdbed29daf09c76

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 73304e58c5d491a27d6e46e759a667fbdc5dcca25f23694d1ef943f63b4deaea
MD5 2e7f3d88dcf19a02884d2efce636df38
BLAKE2b-256 756525873135ca7e579e16d3d47806c5272f9c6cf80831a757321041a1211204

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e7bd256c9671862ce608c38eba5fa9cd4eab6a6b3d932ccce74bb8bd1cb7b6e3
MD5 e90c1334e7f1b336325df32aba1868fd
BLAKE2b-256 25c95ba40705af51a31cfc4fe29d69c346640ca85241debbdcbd544d0f007a4d

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9394b113081d63b413344e69112998b8d309c5f6781f4d243a621a97d91b9769
MD5 1826430f8f0cd2be1a06394a6476c733
BLAKE2b-256 80c4d8eaf45b7301bf5b6fd5943b7338de6405ff8240c5a519012be3cb81aac0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.9.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 421.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4327d4b6567dea3496012a202197e172b9829133ad1a95ecfaeaf1c7d3c2993e
MD5 c570dac741f72c3abb48a31b6a9dec87
BLAKE2b-256 f07957d2386d0909b44698e58472f4efb9418a2ef98764cecf60f2e5f7b9e49f

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1f7cdbe624089fa3b1265f75fe2790db20c64351fc94013058ab7f9fced931a7
MD5 480a6b136d82b5ff8708fe61f62e7d39
BLAKE2b-256 2da69acbf916ec2b1acbaf8b21ae841592b5ac29bd56848bb4a1cbb16956e3c7

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 397490308907323592f72933f38354bd871625d87be78680114b45b510243c93
MD5 31073fe204a45cbfbcda7cbf0fc22f16
BLAKE2b-256 b410ff8620e10d8b276fe830ce26256893f592fcb87f9ae7fd527a29eb23cb46

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ad026f1160ca22bcce933b97801b4e879a92d89e6d9db66e31e4107b13b5f95
MD5 e600a995d8bcfe5e19d621e3fa3ca897
BLAKE2b-256 23713085e59fa080bd20f22db5ad7a72121cd200875c9f64588376dc5cb988ef

See more details on using hashes here.

File details

Details for the file canns_lib-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 80c839d2ba8a06c9e5b2a6188d856ad8d0a7b36ce94a24605813ae11c694870e
MD5 4a7f14137acb6ad95a18c935b9c835df
BLAKE2b-256 a5f559477a4e9f5b3302d3c7701ff16f10f094e5e103c69bc73c1fd0e91c710e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 60418e594642ca169542544840251ab5dec379a9874bf7d49782e6e31e7165ad
MD5 c97234f2838c0a822e8fffe887386d2a
BLAKE2b-256 79045f6e9046d0d6e004273593b28b9eea9e12036619b77979f99d37e5994067

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2a7826e20106d0b13eae6cb913f70bffd1c2b2968ecee7aedeeb9d13cf8547ef
MD5 76d8f8392a4a9258f6f55558ed57febd
BLAKE2b-256 b709d983b45d470a9543ca61ad88c47f6096e7ffeeeaed9bcf09dab384ac382c

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