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

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

  • Mean speedup: 1.13x across 54 benchmarks vs ripser.py
  • Peak speedup: Up to 1.82x on certain datasets
  • Memory efficiency: 1.01x memory ratio (stable usage)
  • Perfect accuracy: 100% match with ripser.py results

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.

🚀 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:

@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.6.1.tar.gz (336.1 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.6.1-cp313-cp313-win_amd64.whl (379.7 kB view details)

Uploaded CPython 3.13Windows x86-64

canns_lib-0.6.1-cp313-cp313-musllinux_1_2_x86_64.whl (567.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

canns_lib-0.6.1-cp313-cp313-musllinux_1_2_aarch64.whl (514.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

canns_lib-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (501.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

canns_lib-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (462.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

canns_lib-0.6.1-cp313-cp313-macosx_11_0_arm64.whl (421.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

canns_lib-0.6.1-cp313-cp313-macosx_10_13_x86_64.whl (469.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

canns_lib-0.6.1-cp312-cp312-win_amd64.whl (380.1 kB view details)

Uploaded CPython 3.12Windows x86-64

canns_lib-0.6.1-cp312-cp312-musllinux_1_2_x86_64.whl (568.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

canns_lib-0.6.1-cp312-cp312-musllinux_1_2_aarch64.whl (514.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

canns_lib-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (501.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

canns_lib-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

canns_lib-0.6.1-cp312-cp312-macosx_11_0_arm64.whl (421.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

canns_lib-0.6.1-cp312-cp312-macosx_10_13_x86_64.whl (470.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

canns_lib-0.6.1-cp311-cp311-win_amd64.whl (382.2 kB view details)

Uploaded CPython 3.11Windows x86-64

canns_lib-0.6.1-cp311-cp311-musllinux_1_2_x86_64.whl (570.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

canns_lib-0.6.1-cp311-cp311-musllinux_1_2_aarch64.whl (517.4 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

canns_lib-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (503.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

canns_lib-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (465.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

canns_lib-0.6.1-cp311-cp311-macosx_11_0_arm64.whl (422.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

canns_lib-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl (470.9 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for canns_lib-0.6.1.tar.gz
Algorithm Hash digest
SHA256 7de39a711c802dd05c5cb6813cea92f467ee4d5992e319ce4a226c8d6f115a8c
MD5 47cdf0dfe5f684f864af1d0d9f65e279
BLAKE2b-256 a4b1700836257549d564d27da6a7514ac932c9459a5bd76c38c4b56f695b659b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 daa30f958f48affe478cbfa7fc49b3c5a40ddc5f4487a15963c28ade0ed28096
MD5 d37511dced37cd23ee0d889804c55d63
BLAKE2b-256 2737975d88abdbe1254c275e6d10f8b51ac2ecfa85de3d98a84b124d7150c4e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d4022b26a3a9ba29722c0fac11edc07f65c885551ff3401c9bfd670196f58ee5
MD5 9485ba8b3bc1a1e0b9ef5e00c6303500
BLAKE2b-256 f029d1be6a640045c80de4c9545fa4fef5a73a5559682195384c717ecb3ba419

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c9b8cbe2c5a9a458b9a6568b325aafc64070ad139ff6a4af2c1947af55f40251
MD5 5384151135b109654acfde551cf2c3a6
BLAKE2b-256 cedd461ec76601b31983220c789e2ac5a491e8903f78c11d6063586902018767

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b84f0a9981a1017cb66b560f1b435b13c72e58739340b7c6efed150b258d69ed
MD5 b056533e05693aad6cbf975b84882fa4
BLAKE2b-256 07fe613465580e51a9c25e3cf160b2db37c59de06ba6d3d5f0fd4512a983bfe7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c88414b1cd0b2c58705ff60e0fa4da4855f5462afe7fbc1f4ca320192deac46d
MD5 da69854684bd71c3bd2319a73ce8de39
BLAKE2b-256 ad0dda2bedbaaeb089c71f9826f07a8028bd7675b72ce2a0dc83eafc4a5010bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 60f35e8bcdc8aa6b8bdab019b271736dc592a46f295d132793ebb3a0af308587
MD5 bf61dfe349a943b4f3903529a8501cca
BLAKE2b-256 056c7741ef7ffb279844ce852e27bfe403fea25fecee5b98eb99fdb16d0d5f3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 29f637ae23b405e5425cc626204c134f6216e7d9aefafaa3dbca3c41ba924fa7
MD5 4a464575f6a07e5c3d25b50f022ae750
BLAKE2b-256 dbd3ed68846d96bbea2280a4037038bfd688be16289820cd74b0288b84b53843

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 50b80fe2650f422a2b25fe4a298a792a8d764eeaac04c5d03edb700e707d2bf8
MD5 bd8989266b34ca2b8068362e49630468
BLAKE2b-256 220f5d849953615a8a5b76a7ca7de0822a3608b35e626e962951a61f9709b6c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5d24472dadf7304e9f77aba61d2dce7edd4fdf17838042021a0064aee89fa7bf
MD5 029e1e61a8150b5364722450dad7e004
BLAKE2b-256 dff4b225687c3ab0ba7d8ba4de0a1605b3bd2eb45d49e5ec6b1ac663e7bab895

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ffee89c157c2532b6b8da33822ebc68753f67b78a787ff68afcc57d459ed8f6b
MD5 063d18649ca93b3aaf06cb82777b4e9f
BLAKE2b-256 177b7d35da54bb380d8c37781d7be47102fd05de741fcfb87974f618facefe12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bd5edf8eba26a05f759d144896c5c152d6977364d977a75c3478419977328c45
MD5 e609595272ebc54332b2a842c995f47b
BLAKE2b-256 d2a2f6400220c597a075562b0cf2f42ef151dd574bcbafc135315d75b393348c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 005b7ef9a65074254de5d959dfdaa2d52e7efd0726befcec432bcc7dec878da4
MD5 953b6a99105ebb427253fe608ae83e9a
BLAKE2b-256 e743098f57ca33c3a9b3da0085925c05d2da93f721a111d829d8af66783c402d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11e80a0fd5576bcfcd900241b35577823fcc1e6361c205e5a5586b0cbc694fd0
MD5 4c99d79d396452a99eec4c16ba22cfbf
BLAKE2b-256 1e925e68d270f24dd81151bbf58d6cc51f3365e35a762cdc329d88cb937c768f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ad84f296fe3c9dc0315b8682d00e108bdd051dc5a93befc948dc485bd66d42c3
MD5 91f0bd06c01ff7c34ce53193efbf30e0
BLAKE2b-256 a519449a0ae930edeaed4841efe1e2133a21f800bccbf561abe2a5a4843f65f9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 16a941c8e61ecd48871351d0fee1f181a83de18be95e34b7fedb439e97dd4222
MD5 6e2eb75343b08c9a368007d48c14e6ac
BLAKE2b-256 7bf95b54cb335ad6f9c532af79db3d29162f971cfa21b729cc3bbe59f821d269

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4c4e4bee58a9c0e513512fb215214b521126448e81cab75bda0d66ccd6f3498c
MD5 d43aa865451cdb0ecff54327ea3c0040
BLAKE2b-256 e4ccc27878808a9dec1b354158ccb0d83a98c18301a81a2bab808757c01f8ce3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0db532bfc2867980e6a3b5bbf5efe4061f1864e03ad4eca84b6a82aba8896f81
MD5 a4577e0127fce1432a15d134426929e8
BLAKE2b-256 c5187ff2d6c0911ca6524b2e729ef2f9f2f728c698b20570f0f41c57a2a26eab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ab5d05cd723631f71b2a0fb33fc7392b992f80b489a86192fcb3cc51dd970c29
MD5 1c242d4cea059b7844664e130be5345a
BLAKE2b-256 bee872c29408c5d6563daff446eb3682751a81190b47ea4f79cab492b07203ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7ab136636ebedea32a17d88bd1025356ad4e641a70c4220ae9e3bbce59f6cc71
MD5 bc1ef6a0a01011d0fda4bb5513acbe1e
BLAKE2b-256 8a7dc592691d33cee6fb277a32eed367638284579ce47a2430e47107a43a624d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc165c728d53b1f6118a8d7a064941555666715012c1d4f3a629665b60eaf905
MD5 30eb6b9330a71468f12c849fe0ecd1a8
BLAKE2b-256 219a7e86d9ef2d13fc6fd63ec2eac2e97b55e1d8edd364c81a5860c9a07382db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f0af2c1ce188e1733562db97991d010dc987869504b1a66e070d8180e19abb89
MD5 30389171fb2db13a3946b4956e2ed399
BLAKE2b-256 db31a3e3b9d181cb4b2cdb3079161782fda25f5a0b28e8452cef1a53783b0998

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