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.4.tar.gz (338.8 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.4-cp313-cp313-win_amd64.whl (398.4 kB view details)

Uploaded CPython 3.13Windows x86-64

canns_lib-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl (574.6 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

canns_lib-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl (523.3 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

canns_lib-0.6.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (508.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

canns_lib-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (471.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

canns_lib-0.6.4-cp313-cp313-macosx_11_0_arm64.whl (429.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

canns_lib-0.6.4-cp313-cp313-macosx_10_13_x86_64.whl (478.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

canns_lib-0.6.4-cp312-cp312-win_amd64.whl (398.7 kB view details)

Uploaded CPython 3.12Windows x86-64

canns_lib-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl (574.8 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

canns_lib-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl (523.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

canns_lib-0.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (508.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

canns_lib-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (472.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

canns_lib-0.6.4-cp312-cp312-macosx_11_0_arm64.whl (429.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

canns_lib-0.6.4-cp312-cp312-macosx_10_13_x86_64.whl (478.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

canns_lib-0.6.4-cp311-cp311-win_amd64.whl (400.6 kB view details)

Uploaded CPython 3.11Windows x86-64

canns_lib-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl (576.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

canns_lib-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl (526.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

canns_lib-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (510.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

canns_lib-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (474.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

canns_lib-0.6.4-cp311-cp311-macosx_11_0_arm64.whl (429.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

canns_lib-0.6.4-cp311-cp311-macosx_10_12_x86_64.whl (478.7 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: canns_lib-0.6.4.tar.gz
  • Upload date:
  • Size: 338.8 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.4.tar.gz
Algorithm Hash digest
SHA256 e8afa4fd774ee50915e0e5a1b053a67b59f1804aac93bb92986fd9bf5958f50d
MD5 b9cf384c76927cd48d597b4cb3d0a721
BLAKE2b-256 4ba467e9ff98602253f051e9160f61497071b9be198ccc6adbb88ac2d60977f2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 398.4 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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7aed4bc84e6e84466ce1609ea12c0d995f855d441a5a66c516f369b500bcf9c
MD5 4de14993c0c106e7fee11f3730677f7d
BLAKE2b-256 750f2f591cc85bc4cf1b4e6576eacc086f1113bd167a482f0cb93df6f85cdb10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e6a7d293c0ac1a2c2620c7466b232d7d968f2e24cb25cbdf19b79859a369f389
MD5 0a53500b51ffb7d746e63ae02c9ae147
BLAKE2b-256 9531416131956cef24fa734a1dcb39f78861677dcb4229fe029cf5f23898a2a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1aa3d0422623b7528c9fc90e2471b2773b3e389c5df94bbdc162e024fea9fd20
MD5 a0ee6d36f0a64847ce09011cacab1fb5
BLAKE2b-256 0e6ce4703e0db67c4c438b30b7ed5076142fafb280e8680da8eb2c8c4c96d48f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0e57e7330e1d3e2a58f0e3551cb1f2b68d1f92312b7f0ef0968c9462781eb5c3
MD5 d2f28d71012ced67945916f1a20521b0
BLAKE2b-256 fb96375634ff07a4edd421794fca1a47b27a64a4747a22b6f653ed19fecc6378

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 afeeabaf8141807c38f254fa12d145850f55f334ff187b32e32436502036eb2b
MD5 6f93d390c2a16368886ab362a2b778bb
BLAKE2b-256 5d66263f6507776ab73aa531859b01da394a87f980fc77eea436e8f207079f5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c77754cefddb556d20100a056b5efff5dbc79a3362afe2642dfb6453b46d11d2
MD5 f6094ca5cec2166a78c4269a44846bf0
BLAKE2b-256 830504ced6dadfe15d5680e5022701919a0c9897d89695ba3799fafe67d59e24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 172326c5ec0c9981a353e44ed2d9e95532ae3cd09d60f455d6c8ba7b1035f673
MD5 271b8e2c87c5bcaba88646e2632b3bbb
BLAKE2b-256 51e584caeafa9c9acfc772f7e7fa88a131f9e2c6129e48b2451180a1def24b65

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 398.7 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fbbbb74adbc124897feb587e5f196bd4f9393c2b6875cfdc61ea479cf79b474d
MD5 8ae22dd971f287c44c37102587715530
BLAKE2b-256 ccc8d206226d3195d9e7433242cd86ee63e90684ebb67f1ab706fa8cf8e56772

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 54c7995c521181eb2c56c0ca4d592b0ec564a2c1efa42472572a8aa4dfc552f8
MD5 02c41356e9d925dd68b5ca2cbf996359
BLAKE2b-256 a67aaba937caea6f05b6d3cfc9727da4241e8bf5b6f8464880d9e428f846e585

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a34ab11411e14c2e29510366e56bc44b074b5ab18fe28df3b7a62ad36bbaa1d8
MD5 173887ee306440d96715e4763044f028
BLAKE2b-256 166239713dd52a71fe909a8f19099e89dffb546bfb53290565e1ddaa01e10726

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c8c33136456fc9b56f57bc85c2051dbf36224e3306160ac82891d2e5db06e022
MD5 05520f9b8f0d3cae54935c7e8bae2ecd
BLAKE2b-256 4ed1add633896a322cdef055ddc25b7ed5d0d3babce35d8a9f39162f3a8c38b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3b3b3d1c46d43c8859a68ed99d136da9309cb7c3e86f4f167f94d6c26bc3e828
MD5 9ef7185fef3eacb7b270fab9d279fdbd
BLAKE2b-256 f3d655d4008c0283ab597253413a76f186bfd041e999b5f76f6b3e8c540d9297

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b993d3361ccd8660c92bf3fa067ee43b2c7eeb63aca9ce7ac18d9468338aaf6d
MD5 6912a65347b2eb8a6ef65cda42973d6b
BLAKE2b-256 28a5f397c509494775d982957cea88759b1c039c5350fd29f8b8d819d338956a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e3e6660ca94301ad242c6824b1446d5222e6b477cb79951385aab75de883437b
MD5 cd074be64c03120a17486a1855f244dc
BLAKE2b-256 ff9a3dc5666537a343c51dbf55537934e5a2ab361f770ef514ea83031d71a1d3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 400.6 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 509779e404f49cda45574b0ef3513be04de4ddc792e327b839c8d9d494a0f16f
MD5 42c60e283f5bb617229241ef7b8d2fe3
BLAKE2b-256 20ca6e331509a9e08b57b9b462a2e068dcadc7e6e43363d5cc4584fc2342c7ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 55ca936f2fe726d4c822e82c626e309e3aad53c57f1202c90bf047ae9de0367d
MD5 163d2942e8718a266b7fb6a3751a793b
BLAKE2b-256 7a65a16fe194c7a44ecddbd2f74285373a13df01d4f2d08cd597549b4d11eb55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 50cb513d3ebfb48a2f0943faa4ead80d9c937fd38a59beaa870bb8a57f8b91c0
MD5 cd39251ae0a84cf98139d4f2a4f1b969
BLAKE2b-256 e435bd157e78d3a337b1b42061700f91f1ded11abff5bf7d13036e6654fd1d07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f4070d2d88c7000cdce80545c0ff13657429570f51fc36fd97558351030636fc
MD5 4288cb6e41f522560a140a3ebffb0804
BLAKE2b-256 7b14bdc431d7f702696dc7f14c9853e752af7ed31e6950ee57d61114e6f313a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9eea48d00aa85ae14addfa45397953126812ef9fa54be808b279514db97d229a
MD5 f5dea8985fe07f9664d48bde7b6b2bb3
BLAKE2b-256 7c7dfb5b5bf6ab3b748badc1fdf727e8bcb496bb07ba67146f5bc055cc8bb01f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36afff7a5ec183ea6488c08ed75a342d994e347e3a6d38b22d902abf066905ee
MD5 0dbb08c31925a1e68c29169ef005a526
BLAKE2b-256 c9a742c5b68f9cd2effba3bfa90fef68ec32636c5196425b1c3389955920785b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 84b7d3e0f3f08c65e8655f4708b562e9fe405ae7dd7021737e94a0425dccef98
MD5 592c8d6549439f7894d782b99d1e8d5b
BLAKE2b-256 0de94e806b66393c4e3aaed4cf80a4a7b0e12652ff61030db99508da8de59509

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