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

Uploaded CPython 3.13Windows x86-64

canns_lib-0.6.2-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.2-cp313-cp313-musllinux_1_2_aarch64.whl (514.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

canns_lib-0.6.2-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.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

canns_lib-0.6.2-cp313-cp313-macosx_11_0_arm64.whl (421.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

canns_lib-0.6.2-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.2-cp312-cp312-win_amd64.whl (380.1 kB view details)

Uploaded CPython 3.12Windows x86-64

canns_lib-0.6.2-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.2-cp312-cp312-musllinux_1_2_aarch64.whl (515.0 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

canns_lib-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (501.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

canns_lib-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

canns_lib-0.6.2-cp312-cp312-macosx_11_0_arm64.whl (421.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

canns_lib-0.6.2-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.2-cp311-cp311-win_amd64.whl (382.2 kB view details)

Uploaded CPython 3.11Windows x86-64

canns_lib-0.6.2-cp311-cp311-musllinux_1_2_x86_64.whl (570.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

canns_lib-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (504.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

canns_lib-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (465.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

canns_lib-0.6.2-cp311-cp311-macosx_11_0_arm64.whl (422.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

canns_lib-0.6.2-cp311-cp311-macosx_10_12_x86_64.whl (471.0 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: canns_lib-0.6.2.tar.gz
  • Upload date:
  • Size: 336.9 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.2.tar.gz
Algorithm Hash digest
SHA256 281244ae630d52a13f80e12eae258f26c4895b92e1b4449277ec294909eede30
MD5 3d65c14ae020ff25afff3ef89a3d30aa
BLAKE2b-256 327de888612825de031983027544c7885790584871606e83e6e35a7a5e56c65c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.2-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.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 632553bbd1e08c2bb322eef2e6fdf25e140450d361369d519e03c8f3040cd21f
MD5 d32b2c9d38ce07561c6fae3ab2c5d6a8
BLAKE2b-256 19b8e92cddce722c6190fa8653fbe84bad163eb53483bcb73ad06d66f79b3347

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e44ed7137bb23e7f0951870edf5d400eb003ea7fe170b65d79f1dac7163e6108
MD5 c137994926f9b004f9014aac992ada7f
BLAKE2b-256 53cf6324c2336a4284548da821cf2dfadf392d14959022ac069e817f7931dbdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4735d2740752c47f0cf53b89fed81210151925434cee6100e2f4493cedffca6f
MD5 b9c85642437759b6ab0a362ed2da8a89
BLAKE2b-256 bc15494751b355272ea1172b324172649c2f5c4160dde0254c6867d2ab414758

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b1c7a2470a6c8b30029c4a0090ad598d3fcc16dd53a2bb625b84c9ae1a5ef021
MD5 32dd58e699e3aa80bc69fa895875700c
BLAKE2b-256 c15a38e7c016011226bd54c2bbd869c60fbca01cf9182e965ad77ad3c56b098c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8d2ac1e7eb5c3fbab670fc04dfeae657766e4f99fd777da7650929a344d70c31
MD5 1cc9cc6050d9e0e9f063d6187771d985
BLAKE2b-256 601b492aaf1cce49b62cafee1d5944adcf32520049de0603ed3726cde3f5daa6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 480dc3f5aff1c425b2e71c68404c18e198b5ca038b5069181a8fd455c7b9aff5
MD5 86d59e8b832f0ca180dc61a1599a8844
BLAKE2b-256 aedd08517df8180d60f8d1e514e37905d2d0d1df9111d6b36e75c7f8d8f4e941

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ccf1e5058472bb9874d4b4fc80824ad1dcf34f006216878878b612a0dce3c7b0
MD5 bedf010a4a22c5e765850cdec2d67f54
BLAKE2b-256 54a7a7a764b054cf947b208c1e9becb6f59ab21455805c42d5342ed28630333a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.2-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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ec9e7142e305980a142fc959db0b54c37bc2da574a0be5083f81b2a4e778ad62
MD5 4cd8a0bce3f0b50eb59e8287b2b068ed
BLAKE2b-256 2c7f36bdcd050ec442597abb86991b898d319a7672a64e9534a2e9181a7671fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b5fb8c6bcc32166464808a70e46849c3d68c2c3f4b52e71817277f986a90d7f6
MD5 29952dc2b1e7fc0f7fde060a13f13e17
BLAKE2b-256 59be59309a3c866b06513d02456f71f1425a535536601579d90a7ba92677c9ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 88b8cfef2dc1f278a490f3e8a2e7d70cf8900e64575a145da1c2274058b7c10d
MD5 dc54831b3169b8b27e7aa448c797bd6f
BLAKE2b-256 f4205b6b07ee757690e21e7a7c3b95b50a61cd7278cd82b992b672be2191766a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0eb8725c59061432b97a4bd954754acbf627b1e895383224922466641fd8ae57
MD5 7cb2ba14f1449863e3c2645460c59f88
BLAKE2b-256 b0946023294734b1621ebd4190144dbcfb3c145fc485c1e2b339178815c84a0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ea6488c0745938368c12654588c1ebcefa7ce02867107c12877b041a05719add
MD5 88345a6bcbbb277780c482d15812c13b
BLAKE2b-256 c8d919ca335bc9498c6622ac989b611afa341c41c4f837a6b7bfe79a08c129b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 614cdbb50d330b8ac3e0265b5840d0e7017b167803bd78b7fa59d0cb173dc8d1
MD5 1844d209ee8d74dd61b2335caa1b907b
BLAKE2b-256 7c4be3fd72d59e6fa9501cfeffa45c4aaf72b9adb8de261f7a036fe0676c0c5b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 554be2351b93a89724765149d19d3d4f4afd548875e9bf3fef9b2112c19cca7c
MD5 2557a8b6e6bbbebef6aca92e07a98925
BLAKE2b-256 7ff1b3bfcbc0f5be0dc0b69c7f3d2a4fa4d6a733b0c937aedeaa0b05113de9b9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.2-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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3527168016e861a3f617a604095cb07188371cd11e84dd36f8c230600e38d5f1
MD5 bfae8d6bab3f4b9d5f5b84bdbcb30a1c
BLAKE2b-256 308e940daed1becb064874b8797067c4d8612794859ef73e9e8c639915947d67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5557658bc79d91fddfe8fb2568b9512649cf002d3c4d14d81f99c6cbc9b7fa81
MD5 f46672b24becad52fddec40e9a6a4d5b
BLAKE2b-256 400bfa40e8f404e86661bebdd96d45b9b66b7b3e2792a9e8f07df8088d8c51e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 859e8ed669866d2755616e25d77a98892f90091b7bda45b122f764d4a53c5dd2
MD5 575c2d2c0226e3a2cd3b3de3084addd0
BLAKE2b-256 269a224bde5909d1958a255d90c5a74d8eb0824bbcf4f1217fcb73c5426fae18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da99aa788a98cd5bee05ad806e13bc0be837b69dffff0f5ee1a1c97435b03475
MD5 ba460403e6406773764eb4a479eb7c14
BLAKE2b-256 9c1d6c4db5e8f46fdc33c124c9d98ce6ae43a9f9ccd8def8e6ecf526543eb31e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 619d74dc9100c258384af68323eb95cbb3975f38a8918c75a23c9d0f26a4f0c4
MD5 927321f7a1bbe01167a22d49905c29fe
BLAKE2b-256 f60709fe1e21162921fb040d1d7785b09acf6eec7695b24e72d4eebd6ca2e022

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 46151034939d4b3a2d7cbe3a138963c4fe43ec3c3cf3fc92c78b44a7e4ef80a4
MD5 6518dd7a729be56bc7178401c850ff4f
BLAKE2b-256 70b02c463181a6932bcd2b07e137622a0eaf403198241c7064b29b1e2b254126

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 171f3d91243ec503cbdf463ad810f5194b680129a046c9c1f54b706ed5b566bc
MD5 49f6a07acbed8efc5a027d80dad94de5
BLAKE2b-256 88b8f4463d08bf9b0dcf2e19db331606a8636ceffd7b123e388316d0a1f598c4

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