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.3.tar.gz (337.0 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.3-cp313-cp313-win_amd64.whl (380.2 kB view details)

Uploaded CPython 3.13Windows x86-64

canns_lib-0.6.3-cp313-cp313-musllinux_1_2_x86_64.whl (568.4 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

canns_lib-0.6.3-cp313-cp313-musllinux_1_2_aarch64.whl (515.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

canns_lib-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (502.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

canns_lib-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

canns_lib-0.6.3-cp313-cp313-macosx_11_0_arm64.whl (421.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

canns_lib-0.6.3-cp313-cp313-macosx_10_13_x86_64.whl (470.4 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

canns_lib-0.6.3-cp312-cp312-win_amd64.whl (380.6 kB view details)

Uploaded CPython 3.12Windows x86-64

canns_lib-0.6.3-cp312-cp312-musllinux_1_2_x86_64.whl (568.7 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

canns_lib-0.6.3-cp312-cp312-musllinux_1_2_aarch64.whl (515.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

canns_lib-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (502.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

canns_lib-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (463.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

canns_lib-0.6.3-cp312-cp312-macosx_11_0_arm64.whl (422.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

canns_lib-0.6.3-cp312-cp312-macosx_10_13_x86_64.whl (470.7 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

canns_lib-0.6.3-cp311-cp311-win_amd64.whl (382.8 kB view details)

Uploaded CPython 3.11Windows x86-64

canns_lib-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl (571.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

canns_lib-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl (517.9 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

canns_lib-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (504.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

canns_lib-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (466.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

canns_lib-0.6.3-cp311-cp311-macosx_11_0_arm64.whl (422.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

canns_lib-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl (471.5 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: canns_lib-0.6.3.tar.gz
  • Upload date:
  • Size: 337.0 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.3.tar.gz
Algorithm Hash digest
SHA256 30f63ef08a09bfe7529fcedd2b6efa67c8870792681519606475f23e40de851a
MD5 6472ad9d9ff16a5f03e0526ed3c3360f
BLAKE2b-256 beb7aecc7e3b2b663239562c36192bedc6c22e6b32cbf287cdada6ca9202bf1d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 380.2 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.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bdbb02128237368d33ffbdff787e7502b93ecad95d7e8525012530370b107830
MD5 be51788ce3b240cc34f46fe463ef946f
BLAKE2b-256 133a9af530b244324444c582838012ba3bd9e27786e971946cc123d000220e6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d01cf4f6631869f54f4b3f8283fc92c9360ebe62b800ecf6490246505db9a0bb
MD5 79b757703b7ad1ddaa47694e7574d6aa
BLAKE2b-256 178a015bf698c82ae6f14fc1a9ea430d15c71e7c905b11b4c29353eabe82d0fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8ffcd781b999ab89554b91443dfd5780d1362a35517be113bc9b3556f1983a62
MD5 8e9dc07a96a44a03f87909d38fa79bbd
BLAKE2b-256 72f2fcaa23be9066ded65c9744d5ca9a9179846debc667f03ba728a0831a4d0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13c50e5f4ee075288e89594f69508b6ea3613090e6a5c41026b9f51afb0cf54f
MD5 6d25335defe0629cff0c4c8a3610018f
BLAKE2b-256 d952b1878dc1128168d23de8265eb5e1201262da6af7af6efeb606bad709613f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c318c8e03773cd9cc4134344025ceea3e299d031dc47e7c0bebbfb408d5ecd83
MD5 792f9245258881d1b10c3a672d665f8b
BLAKE2b-256 118e59327b0861cf849b74527c472078347f99ac370c4dfe5c4afba1ca879ca5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 894fd0782fb7046cb1e4494f573d0510b49206d3f849aca0faeaa7744b1b094c
MD5 2966c4d219053b8dac9ce5d1e49bf62e
BLAKE2b-256 b83a4b7fb29a4c6e682cf3aeb6c8c72aac9ee5b57dc3e430076571259a9ccf6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 312b598c409665e855a99f8ed55d5f013f43a84810e3c01922f6b72359f4ce6a
MD5 a5cf540b3c5885516cd9b22c7365b4c5
BLAKE2b-256 43e08a52f0a29d88fbc434cd3b109cc6a5ded851e134e44738f81682a75d20e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 380.6 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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dedbc05dc516bb5c162124ff943a7c39a0e9c7ff9e664c4e94b5c91aaba8d42f
MD5 402f875e708b35d3836b30ae52491aec
BLAKE2b-256 bb67e608aa59065c1547de585cd028795ec1ddb0b0e2a7c1eb2d38551020cf62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f73b62d7e0ab7b6c587bd8cf12e96e56e2aafd550c8846e8262b8384d2fbe288
MD5 6797a40fe55cda700c2cc0767361c23a
BLAKE2b-256 4b4ccd395910f1db4f0b5c23558eb0b78f3b44df74178523e36aa30e6c8eb9f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3d68d8992f0ada95232170ac62e38e82cb2f83a165b85b3a87cf95016a8106cb
MD5 7730c228893479007e34a9c6444a8db7
BLAKE2b-256 3f8ad2b081ae7556a9ffe15c4f805efba0ba945592df39bdafbd669b7c15dbdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bea5033efaf86f5e9d00207f6c797df50a9052c5a5d525dcd711f81c85fabc7e
MD5 1f7e765efc831eb1469c4fc589e7f008
BLAKE2b-256 94c30a9f4de13c04c9e70e40e5bb63b9a73c20fa72c55c6111afb9302c49db2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 17b8c4ab072d145a6533f8a19269f2d43438a873942eb5d08a96af2c64735e90
MD5 569ebaeef1a5f7701196f4a8d1cd69ec
BLAKE2b-256 d85667d1c5e3a16366fb7af545995c338f7c905e80d1c5e66b3ef9eb28bf0a97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5e2fe98e74e155e22a509a31871ebfb1edf6248d5086e9c8a6b77adfde8a75e
MD5 73fdde8e11ca5a036695170625cd72f4
BLAKE2b-256 56c4c623382105197d7b78e59e0846e1bce75fef4ea9246b498af834d4b3b1fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f801be95e8ce639b2921c4711a995cf41f8d0d3dad358d8fcc028b4cfd028750
MD5 dcf9ac3e627211dc223b89e5514f461f
BLAKE2b-256 2e1e3b89b978d4d4021668930a91b275408877d8f495d26eb64878fd51c58199

See more details on using hashes here.

File details

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

File metadata

  • Download URL: canns_lib-0.6.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 382.8 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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8492f9199ecb5558651a82d04c9a518990d193ea51aed659483a8c992e801d37
MD5 97a1792afc627d426f985264f7fe90d9
BLAKE2b-256 472ce57f442cc46b8a7e03802522539829d4f84efd6f8bb16f5d68cf10e446a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2e65de1ac31607916d0588cbbcc6759ad70975a4b19cced5a148c18c400c2d2a
MD5 e81ae32307637efed9ed32390e0a8939
BLAKE2b-256 8b2292964e58b81db906d6f908d74c7f68cc03a7a2ac251d5172f04b6487a272

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d5186ef1a1397503c2f09b15d764d33b0423275ed7700c98edd1d75fe7ad1759
MD5 2104890f17e124d1dbbf9648ace24a15
BLAKE2b-256 60fbf3a11ce08b05d5d410d5e86ade1d0b00f4d2e9ed9d6a7d7f494bd473cceb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71075cba608eaaf4f4ab0eed7c37e0fc54501bd25a801935011e353858eb9ad2
MD5 ba4ce9f8f54a8764b4c5d659318c073b
BLAKE2b-256 ce2459f0c8a2335219e49b40d2eca47d4b08097db668cd9f770a18a003ad3c2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5f263fb6f0f71f72128a66a4065ecee499eca2ae21f8d9098df329a6c9c7568
MD5 266a3e8046e1ca4141734a68e3118a10
BLAKE2b-256 002e86e5b17de012470de21a4f1f15f182bb1628d5d8ded0bc7bdc6dfbc52312

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6247bff25e9bd547fc26e13edac4b50254fcae90d4050501982728129d72b34
MD5 13ea7b00560299d93afc1e50f1e06f2b
BLAKE2b-256 37fc9d98caf56ed47657346d8ffac379e71edcb3116daaa8534db7ae350838b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for canns_lib-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 45319268b3011694321a3be8db4b263e12ce6da7386c67b9c6fc4cfbfbfd8111
MD5 8a62612e1b4d0ad2514ee5e5c392f82b
BLAKE2b-256 21a5ab9d5a81fb17dd2ae6e785987964d976732468d32fbf0fb46242d8d072c0

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