canns 1.0.0__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {canns-1.0.0 → canns-1.0.1}/.gitignore +1 -0
- {canns-1.0.0 → canns-1.0.1}/CHANGELOG.md +31 -5
- canns-1.0.1/CITATION.cff +139 -0
- {canns-1.0.0 → canns-1.0.1}/PKG-INFO +36 -10
- {canns-1.0.0 → canns-1.0.1}/README.md +35 -9
- {canns-1.0.0 → canns-1.0.1}/README_zh.md +35 -9
- {canns-1.0.0 → canns-1.0.1}/pyproject.toml +23 -4
- {canns-1.0.0 → canns-1.0.1}/src/canns/__init__.py +25 -6
- canns-1.0.1/src/canns/__main__.py +69 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/cohospace_scatter.py +0 -1
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/visualization/btn_plots.py +0 -2
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/theta_sweep_plots.py +1 -3
- canns-1.0.0/CITATION.cff +0 -43
- {canns-1.0.0 → canns-1.0.1}/LICENSE +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/_version.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/coho.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/cohomap.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/cohomap_vectors.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/cohospace.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/cohospace_phase_centers.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/config.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/decode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/embedding.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/fly_roi.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/fr.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/path.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/plotting.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/tda.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/asa/utils.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/btn.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/grid_cells.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/grid_modules_leiden.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/head_direction.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/core/spatial_analysis.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/io/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/io/matlab_loader.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/utils/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/utils/circular_stats.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/utils/correlation.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/utils/geometry.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/utils/image_processing.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/visualization/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/visualization/grid_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/data/cell_classification/visualization/hd_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/metrics/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/metrics/spatial_metrics.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/metrics/systematic_ratemap.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/metrics/utils.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/model_specific/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/model_specific/hopfield.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/slow_points/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/slow_points/checkpoint.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/slow_points/finder.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/slow_points/fixed_points.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/slow_points/visualization.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/animation.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/backend.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/config.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/jupyter_utils.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/rendering.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/core/writers.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/energy_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/spatial_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/spike_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/analyzer/visualization/tuning_plots.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/data/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/data/datasets.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/data/loaders.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/_base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/cann.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/grid_cell.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/hierarchical_model.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/basic/theta_sweep_model.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/brain_inspired/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/brain_inspired/_base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/brain_inspired/hopfield.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/brain_inspired/linear.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/brain_inspired/spiking.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/models/hybrid/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/__main__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/__main__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/app.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/runner.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/screens.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/state.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/styles.tcss +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa/widgets.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/__main__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/batch_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/decode_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/fr_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/frm_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/analysis_modes/tda_mode.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/app.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/controllers/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/controllers/analysis_controller.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/controllers/preprocess_controller.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/core/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/core/cache.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/core/runner.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/core/state.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/core/worker.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/main_window.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/models/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/models/config.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/models/job.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/models/presets.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/dark.qss +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/light.qss +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/logo.ico +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/logo.svg +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/resources/styles.qss +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/utils/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/utils/formatters.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/utils/io_adapters.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/utils/validators.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/help_content.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/pages/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/pages/analysis_page.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/pages/preprocess_page.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/panels/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/artifacts_tab.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/drop_zone.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/file_list.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/gridscore_tab.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/help_dialog.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/image_tab.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/image_viewer.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/log_box.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/pathcompare_tab.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/asa_gui/views/widgets/popup_combo.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/__main__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/app.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/runner.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/state.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/gallery/styles.tcss +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/pipeline/launcher.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/py.typed +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/_base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/closed_loop_navigation.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/navigation_base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/open_loop_navigation.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/task/tracking.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/_base.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/bcm.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/hebbian.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/oja.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/sanger.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/stdp.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/trainer/utils.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/typing/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/utils/__init__.py +0 -0
- {canns-1.0.0 → canns-1.0.1}/src/canns/utils/benchmark.py +0 -0
|
@@ -5,12 +5,37 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.1] - 2026-02-06
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- CLI module (`src/canns/__main__.py`) for command-line interface support
|
|
12
|
+
- Comprehensive test coverage for CLI, lazy imports, data loaders, and utilities
|
|
13
|
+
- Integration tests for pipeline launcher
|
|
14
|
+
- Unit tests for task base classes and benchmarking utilities
|
|
15
|
+
- 1D CANN smooth-tracking example in documentation
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Restructured test suite into `unit/` and `integration/` directories (PR #96)
|
|
19
|
+
- Optimized CI pipeline for faster test execution (PR #96)
|
|
20
|
+
- Relocated documentation images from `images/` to `docs/_static/`
|
|
21
|
+
- Updated status badge to "stable" and maintenance year to 2026
|
|
22
|
+
- Enhanced installation instructions with accelerator options (cuda12, cuda13, tpu, gui)
|
|
23
|
+
- Expanded architecture diagram caption with five-layer hierarchy description
|
|
24
|
+
- Normalized pip install examples by removing unnecessary quotes
|
|
25
|
+
- Updated documentation URL to https://routhleck.com/canns
|
|
26
|
+
- Added Zenodo DOI badge for v1.0.0 release
|
|
27
|
+
- Updated citation information with expanded author list and affiliations
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
- Improved test organization and maintainability
|
|
31
|
+
- Updated all documentation image references to new paths
|
|
32
|
+
|
|
8
33
|
## [1.0.0] - 2026-02-02
|
|
9
34
|
|
|
10
35
|
### Added
|
|
11
|
-
- Architecture diagram (`
|
|
12
|
-
- Comprehensive analyzer visualization showcase (`
|
|
13
|
-
- ASA GUI preview animation (`
|
|
36
|
+
- Architecture diagram (`docs/_static/architecture.png`) explaining modular design principles
|
|
37
|
+
- Comprehensive analyzer visualization showcase (`docs/_static/analyzer-display.png`, 4.7MB)
|
|
38
|
+
- ASA GUI preview animation (`docs/_static/asa-gui.gif`, 898KB)
|
|
14
39
|
|
|
15
40
|
### Changed
|
|
16
41
|
- **Production Ready Milestone**: v1.0.0 marks API stability and production readiness
|
|
@@ -235,7 +260,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
235
260
|
- Comprehensive plotting functions for ASA analysis types
|
|
236
261
|
- New example scripts: cohomap.py, cohospace.py, firing_field_map.py, path_compare.py, tda_vis.py
|
|
237
262
|
- Research paper draft (paper.md) with comprehensive bibliography (paper.bib)
|
|
238
|
-
- Architecture diagram (
|
|
263
|
+
- Architecture diagram (docs/_static/architecture.png)
|
|
239
264
|
- GitHub Actions workflow for draft PDF generation
|
|
240
265
|
- CLI entry point for ASA TUI: `python -m canns.pipeline.asa`
|
|
241
266
|
- Image preview and external viewer support in TUI
|
|
@@ -602,6 +627,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
602
627
|
- Basic structure template
|
|
603
628
|
- Core application structure
|
|
604
629
|
|
|
630
|
+
[1.0.1]: https://github.com/routhleck/canns/compare/v1.0.0...v1.0.1
|
|
605
631
|
[1.0.0]: https://github.com/routhleck/canns/compare/v0.15.1...v1.0.0
|
|
606
632
|
[0.15.1]: https://github.com/routhleck/canns/compare/v0.15.0...v0.15.1
|
|
607
633
|
[0.15.0]: https://github.com/routhleck/canns/compare/v0.14.3...v0.15.0
|
|
@@ -642,4 +668,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
642
668
|
[0.4.0]: https://github.com/routhleck/canns/compare/v0.3.0...v0.4.0
|
|
643
669
|
[0.3.0]: https://github.com/routhleck/canns/compare/v0.2.0...v0.3.0
|
|
644
670
|
[0.2.0]: https://github.com/routhleck/canns/compare/v0.1.0...v0.2.0
|
|
645
|
-
[0.1.0]: https://github.com/routhleck/canns/releases/tag/v0.1.0
|
|
671
|
+
[0.1.0]: https://github.com/routhleck/canns/releases/tag/v0.1.0
|
canns-1.0.1/CITATION.cff
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, please cite it as below."
|
|
3
|
+
type: software
|
|
4
|
+
title: "CANNs: Continuous Attractor Neural Networks Toolkit"
|
|
5
|
+
authors:
|
|
6
|
+
- family-names: "He"
|
|
7
|
+
given-names: "Sichao"
|
|
8
|
+
email: "sichaohe@outlook.com"
|
|
9
|
+
affiliation:
|
|
10
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
11
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
12
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
13
|
+
- "Center of Quantitative Biology, Peking University"
|
|
14
|
+
orcid: "https://orcid.org/0009-0009-4564-1753"
|
|
15
|
+
- family-names: "Tuerhong"
|
|
16
|
+
given-names: "Aiersi"
|
|
17
|
+
affiliation: "College of Mathematics and Statistics, Chongqing University"
|
|
18
|
+
orcid: "https://orcid.org/0009-0006-4603-4734"
|
|
19
|
+
- family-names: "She"
|
|
20
|
+
given-names: "Shangjun"
|
|
21
|
+
affiliation:
|
|
22
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
23
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
24
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
25
|
+
- "Center of Quantitative Biology, Peking University"
|
|
26
|
+
orcid: "https://orcid.org/0009-0008-4490-7612"
|
|
27
|
+
- family-names: "Chu"
|
|
28
|
+
given-names: "Tianhao"
|
|
29
|
+
affiliation:
|
|
30
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
31
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
32
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
33
|
+
- "Center of Quantitative Biology, Peking University"
|
|
34
|
+
orcid: "https://orcid.org/0000-0001-9910-9361"
|
|
35
|
+
- family-names: "Wu"
|
|
36
|
+
given-names: "Yuling"
|
|
37
|
+
affiliation:
|
|
38
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
39
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
40
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
41
|
+
- "Center of Quantitative Biology, Peking University"
|
|
42
|
+
orcid: "https://orcid.org/0009-0001-5303-5413"
|
|
43
|
+
- family-names: "Zuo"
|
|
44
|
+
given-names: "Junfeng"
|
|
45
|
+
affiliation:
|
|
46
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
47
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
48
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
49
|
+
- "Center of Quantitative Biology, Peking University"
|
|
50
|
+
- family-names: "Wu"
|
|
51
|
+
given-names: "Si"
|
|
52
|
+
affiliation:
|
|
53
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
54
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
55
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
56
|
+
- "Center of Quantitative Biology, Peking University"
|
|
57
|
+
orcid: "https://orcid.org/0000-0001-9650-6935"
|
|
58
|
+
repository-code: "https://github.com/Routhleck/canns"
|
|
59
|
+
url: "https://routhleck.com/canns"
|
|
60
|
+
abstract: "A research toolkit built on BrainPy and JAX that bundles model collections, task generators, analyzers, and the ASA pipeline (GUI/TUI) so researchers can run simulations and analyze results in a consistent workflow."
|
|
61
|
+
keywords:
|
|
62
|
+
- continuous attractor neural networks
|
|
63
|
+
- CANNs
|
|
64
|
+
- computational neuroscience
|
|
65
|
+
- spatial cognition
|
|
66
|
+
- neural dynamics
|
|
67
|
+
- JAX
|
|
68
|
+
- brain-inspired computing
|
|
69
|
+
license: Apache-2.0
|
|
70
|
+
version: "v1.0.0"
|
|
71
|
+
date-released: "2026-02-02"
|
|
72
|
+
identifiers:
|
|
73
|
+
- type: doi
|
|
74
|
+
value: "10.5281/zenodo.18453893"
|
|
75
|
+
description: "The versioned DOI for version v1.0.0"
|
|
76
|
+
- type: doi
|
|
77
|
+
value: "10.5281/zenodo.17412545"
|
|
78
|
+
description: "The concept DOI (always resolves to latest version)"
|
|
79
|
+
preferred-citation:
|
|
80
|
+
type: software
|
|
81
|
+
title: "CANNs: Continuous Attractor Neural Networks Toolkit"
|
|
82
|
+
authors:
|
|
83
|
+
- family-names: "He"
|
|
84
|
+
given-names: "Sichao"
|
|
85
|
+
email: "sichaohe@outlook.com"
|
|
86
|
+
affiliation:
|
|
87
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
88
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
89
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
90
|
+
- "Center of Quantitative Biology, Peking University"
|
|
91
|
+
orcid: "https://orcid.org/0009-0009-4564-1753"
|
|
92
|
+
- family-names: "Tuerhong"
|
|
93
|
+
given-names: "Aiersi"
|
|
94
|
+
affiliation: "College of Mathematics and Statistics, Chongqing University"
|
|
95
|
+
orcid: "https://orcid.org/0009-0006-4603-4734"
|
|
96
|
+
- family-names: "She"
|
|
97
|
+
given-names: "Shangjun"
|
|
98
|
+
affiliation:
|
|
99
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
100
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
101
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
102
|
+
- "Center of Quantitative Biology, Peking University"
|
|
103
|
+
orcid: "https://orcid.org/0009-0008-4490-7612"
|
|
104
|
+
- family-names: "Chu"
|
|
105
|
+
given-names: "Tianhao"
|
|
106
|
+
affiliation:
|
|
107
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
108
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
109
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
110
|
+
- "Center of Quantitative Biology, Peking University"
|
|
111
|
+
orcid: "https://orcid.org/0000-0001-9910-9361"
|
|
112
|
+
- family-names: "Wu"
|
|
113
|
+
given-names: "Yuling"
|
|
114
|
+
affiliation:
|
|
115
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
116
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
117
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
118
|
+
- "Center of Quantitative Biology, Peking University"
|
|
119
|
+
orcid: "https://orcid.org/0009-0001-5303-5413"
|
|
120
|
+
- family-names: "Zuo"
|
|
121
|
+
given-names: "Junfeng"
|
|
122
|
+
affiliation:
|
|
123
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
124
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
125
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
126
|
+
- "Center of Quantitative Biology, Peking University"
|
|
127
|
+
- family-names: "Wu"
|
|
128
|
+
given-names: "Si"
|
|
129
|
+
affiliation:
|
|
130
|
+
- "School of Psychological and Cognitive Sciences, Peking University"
|
|
131
|
+
- "Peking-Tsinghua Center for Life Sciences, Academy for Advanced Interdisciplinary Studies, Peking University"
|
|
132
|
+
- "PKU-IDG/McGovern Institute for Brain Research, Peking University"
|
|
133
|
+
- "Center of Quantitative Biology, Peking University"
|
|
134
|
+
orcid: "https://orcid.org/0000-0001-9650-6935"
|
|
135
|
+
doi: "10.5281/zenodo.18453893"
|
|
136
|
+
url: "https://github.com/Routhleck/canns"
|
|
137
|
+
version: "v1.0.0"
|
|
138
|
+
year: 2026
|
|
139
|
+
month: 2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: canns
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: A Python Library for Continuous Attractor Neural Networks
|
|
5
5
|
Project-URL: Repository, https://github.com/routhleck/canns
|
|
6
6
|
Author-email: Sichao He <sichaohe@outlook.com>
|
|
@@ -60,7 +60,7 @@ Description-Content-Type: text/markdown
|
|
|
60
60
|
[<img src="https://badges.ws/maintenance/yes/2026" />](https://github.com/routhleck/canns)
|
|
61
61
|
<picture><img src="https://badges.ws/github/release/routhleck/canns" /></picture>
|
|
62
62
|
<picture><img src="https://badges.ws/github/license/routhleck/canns" /></picture>
|
|
63
|
-
[](https://doi.org/10.5281/zenodo.18453893)
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
<picture><img src="https://badges.ws/github/stars/routhleck/canns?logo=github" /></picture>
|
|
@@ -77,9 +77,9 @@ CANNs (Continuous Attractor Neural Networks toolkit) is a research toolkit built
|
|
|
77
77
|
## Architecture
|
|
78
78
|
|
|
79
79
|
<p align="center">
|
|
80
|
-
<img src="
|
|
80
|
+
<img src="docs/_static/architecture.png" alt="CANNs Architecture" width="900">
|
|
81
81
|
<br>
|
|
82
|
-
<span style="color: grey; font-size: 14px;">
|
|
82
|
+
<span style="color: grey; font-size: 14px;">Layer hierarchy of the CANNs library showing five levels: Application (Pipeline orchestration), Functional (Task, Trainer, Analyzer, Utils modules), Core Models (CANN implementations), Foundation (BrainPy/JAX and Rust FFI backends), and Hardware (CPU/GPU/TPU support)</span>
|
|
83
83
|
</p>
|
|
84
84
|
|
|
85
85
|
The CANNs library follows a modular architecture guided by two core principles: **separation of concerns** and **extensibility through
|
|
@@ -115,12 +115,12 @@ seamlessly integrate with the built-in ecosystem.
|
|
|
115
115
|
</p>
|
|
116
116
|
|
|
117
117
|
<p align="center">
|
|
118
|
-
<img src="
|
|
118
|
+
<img src="docs/_static/analyzer-display.png" alt="Analyzer Display" width="900">
|
|
119
119
|
<br>
|
|
120
120
|
<span style="color: grey; font-size: 14px;">Rich Analyzer Visualization Results</span>
|
|
121
121
|
</p>
|
|
122
122
|
<p align="center">
|
|
123
|
-
<img src="
|
|
123
|
+
<img src="docs/_static/asa-gui.gif" alt="ASA GUI Preview" width="720">
|
|
124
124
|
<br>
|
|
125
125
|
<span style="color: grey; font-size: 14px;">ASA GUI preview</span>
|
|
126
126
|
</p>
|
|
@@ -229,12 +229,12 @@ energy_landscape_1d_animation(
|
|
|
229
229
|
pip install canns
|
|
230
230
|
|
|
231
231
|
# Optional accelerators (Linux)
|
|
232
|
-
pip install
|
|
233
|
-
pip install
|
|
234
|
-
pip install
|
|
232
|
+
pip install canns[cuda12]
|
|
233
|
+
pip install canns[cuda13]
|
|
234
|
+
pip install canns[tpu]
|
|
235
235
|
|
|
236
236
|
# GUI (ASA Pipeline)
|
|
237
|
-
pip install
|
|
237
|
+
pip install canns[gui]
|
|
238
238
|
```
|
|
239
239
|
|
|
240
240
|
Optional (uv):
|
|
@@ -250,6 +250,32 @@ uv pip install canns
|
|
|
250
250
|
- Sphinx docs and notebooks: `docs/`
|
|
251
251
|
- ASA GUI entry: `canns-gui`
|
|
252
252
|
|
|
253
|
+
## Citation
|
|
254
|
+
|
|
255
|
+
If you use CANNs in your research, please cite:
|
|
256
|
+
|
|
257
|
+
```bibtex
|
|
258
|
+
@software{he_2026_canns,
|
|
259
|
+
author = {He, Sichao and
|
|
260
|
+
Tuerhong, Aiersi and
|
|
261
|
+
She, Shangjun and
|
|
262
|
+
Chu, Tianhao and
|
|
263
|
+
Wu, Yuling and
|
|
264
|
+
Zuo, Junfeng and
|
|
265
|
+
Wu, Si},
|
|
266
|
+
title = {CANNs: Continuous Attractor Neural Networks Toolkit},
|
|
267
|
+
month = feb,
|
|
268
|
+
year = 2026,
|
|
269
|
+
publisher = {Zenodo},
|
|
270
|
+
version = {v1.0.0},
|
|
271
|
+
doi = {10.5281/zenodo.18453893},
|
|
272
|
+
url = {https://doi.org/10.5281/zenodo.18453893}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
**Plain text:**
|
|
277
|
+
> He, S., Tuerhong, A., She, S., Chu, T., Wu, Y., Zuo, J., & Wu, S. (2026). CANNs: Continuous Attractor Neural Networks Toolkit (v1.0.0). Zenodo. https://doi.org/10.5281/zenodo.18453893
|
|
278
|
+
|
|
253
279
|
## Contributing & License
|
|
254
280
|
|
|
255
281
|
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
[<img src="https://badges.ws/maintenance/yes/2026" />](https://github.com/routhleck/canns)
|
|
10
10
|
<picture><img src="https://badges.ws/github/release/routhleck/canns" /></picture>
|
|
11
11
|
<picture><img src="https://badges.ws/github/license/routhleck/canns" /></picture>
|
|
12
|
-
[](https://doi.org/10.5281/zenodo.18453893)
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
<picture><img src="https://badges.ws/github/stars/routhleck/canns?logo=github" /></picture>
|
|
@@ -26,9 +26,9 @@ CANNs (Continuous Attractor Neural Networks toolkit) is a research toolkit built
|
|
|
26
26
|
## Architecture
|
|
27
27
|
|
|
28
28
|
<p align="center">
|
|
29
|
-
<img src="
|
|
29
|
+
<img src="docs/_static/architecture.png" alt="CANNs Architecture" width="900">
|
|
30
30
|
<br>
|
|
31
|
-
<span style="color: grey; font-size: 14px;">
|
|
31
|
+
<span style="color: grey; font-size: 14px;">Layer hierarchy of the CANNs library showing five levels: Application (Pipeline orchestration), Functional (Task, Trainer, Analyzer, Utils modules), Core Models (CANN implementations), Foundation (BrainPy/JAX and Rust FFI backends), and Hardware (CPU/GPU/TPU support)</span>
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
The CANNs library follows a modular architecture guided by two core principles: **separation of concerns** and **extensibility through
|
|
@@ -64,12 +64,12 @@ seamlessly integrate with the built-in ecosystem.
|
|
|
64
64
|
</p>
|
|
65
65
|
|
|
66
66
|
<p align="center">
|
|
67
|
-
<img src="
|
|
67
|
+
<img src="docs/_static/analyzer-display.png" alt="Analyzer Display" width="900">
|
|
68
68
|
<br>
|
|
69
69
|
<span style="color: grey; font-size: 14px;">Rich Analyzer Visualization Results</span>
|
|
70
70
|
</p>
|
|
71
71
|
<p align="center">
|
|
72
|
-
<img src="
|
|
72
|
+
<img src="docs/_static/asa-gui.gif" alt="ASA GUI Preview" width="720">
|
|
73
73
|
<br>
|
|
74
74
|
<span style="color: grey; font-size: 14px;">ASA GUI preview</span>
|
|
75
75
|
</p>
|
|
@@ -178,12 +178,12 @@ energy_landscape_1d_animation(
|
|
|
178
178
|
pip install canns
|
|
179
179
|
|
|
180
180
|
# Optional accelerators (Linux)
|
|
181
|
-
pip install
|
|
182
|
-
pip install
|
|
183
|
-
pip install
|
|
181
|
+
pip install canns[cuda12]
|
|
182
|
+
pip install canns[cuda13]
|
|
183
|
+
pip install canns[tpu]
|
|
184
184
|
|
|
185
185
|
# GUI (ASA Pipeline)
|
|
186
|
-
pip install
|
|
186
|
+
pip install canns[gui]
|
|
187
187
|
```
|
|
188
188
|
|
|
189
189
|
Optional (uv):
|
|
@@ -199,6 +199,32 @@ uv pip install canns
|
|
|
199
199
|
- Sphinx docs and notebooks: `docs/`
|
|
200
200
|
- ASA GUI entry: `canns-gui`
|
|
201
201
|
|
|
202
|
+
## Citation
|
|
203
|
+
|
|
204
|
+
If you use CANNs in your research, please cite:
|
|
205
|
+
|
|
206
|
+
```bibtex
|
|
207
|
+
@software{he_2026_canns,
|
|
208
|
+
author = {He, Sichao and
|
|
209
|
+
Tuerhong, Aiersi and
|
|
210
|
+
She, Shangjun and
|
|
211
|
+
Chu, Tianhao and
|
|
212
|
+
Wu, Yuling and
|
|
213
|
+
Zuo, Junfeng and
|
|
214
|
+
Wu, Si},
|
|
215
|
+
title = {CANNs: Continuous Attractor Neural Networks Toolkit},
|
|
216
|
+
month = feb,
|
|
217
|
+
year = 2026,
|
|
218
|
+
publisher = {Zenodo},
|
|
219
|
+
version = {v1.0.0},
|
|
220
|
+
doi = {10.5281/zenodo.18453893},
|
|
221
|
+
url = {https://doi.org/10.5281/zenodo.18453893}
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Plain text:**
|
|
226
|
+
> He, S., Tuerhong, A., She, S., Chu, T., Wu, Y., Zuo, J., & Wu, S. (2026). CANNs: Continuous Attractor Neural Networks Toolkit (v1.0.0). Zenodo. https://doi.org/10.5281/zenodo.18453893
|
|
227
|
+
|
|
202
228
|
## Contributing & License
|
|
203
229
|
|
|
204
230
|
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a PR.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
[<img src="https://badges.ws/maintenance/yes/2026" />](https://github.com/routhleck/canns)
|
|
10
10
|
<picture><img src="https://badges.ws/github/release/routhleck/canns" /></picture>
|
|
11
11
|
<picture><img src="https://badges.ws/github/license/routhleck/canns" /></picture>
|
|
12
|
-
[](https://doi.org/10.5281/zenodo.18453893)
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
<picture><img src="https://badges.ws/github/stars/routhleck/canns?logo=github" /></picture>
|
|
@@ -26,9 +26,9 @@ CANNs(Continuous Attractor Neural Networks toolkit)是基于 [BrainPy](https
|
|
|
26
26
|
## 架构
|
|
27
27
|
|
|
28
28
|
<p align="center">
|
|
29
|
-
<img src="
|
|
29
|
+
<img src="docs/_static/architecture.png" alt="CANNs Architecture" width="900">
|
|
30
30
|
<br>
|
|
31
|
-
<span style="color: grey; font-size: 14px;"
|
|
31
|
+
<span style="color: grey; font-size: 14px;">CANNs 库的层级结构,展示了五个层级:应用层(流水线编排)、功能层(任务、训练器、分析器、工具模块)、核心模型层(CANN 实现)、基础层(BrainPy/JAX 和 Rust FFI 后端)以及硬件层(CPU/GPU/TPU 支持)</span>
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
CANNs 采用模块化架构,遵循两条核心原则:**关注点分离** 与 **通过基类实现可扩展性**。
|
|
@@ -62,12 +62,12 @@ CANNs 采用模块化架构,遵循两条核心原则:**关注点分离** 与
|
|
|
62
62
|
</p>
|
|
63
63
|
|
|
64
64
|
<p align="center">
|
|
65
|
-
<img src="
|
|
65
|
+
<img src="docs/_static/analyzer-display.png" alt="Analyzer Display" width="900">
|
|
66
66
|
<br>
|
|
67
67
|
<span style="color: grey; font-size: 14px;">丰富的 Analyzer 可视化结果</span>
|
|
68
68
|
</p>
|
|
69
69
|
<p align="center">
|
|
70
|
-
<img src="
|
|
70
|
+
<img src="docs/_static/asa-gui.gif" alt="ASA GUI Preview" width="720">
|
|
71
71
|
<br>
|
|
72
72
|
<span style="color: grey; font-size: 14px;">ASA GUI 预览</span>
|
|
73
73
|
</p>
|
|
@@ -176,12 +176,12 @@ energy_landscape_1d_animation(
|
|
|
176
176
|
pip install canns
|
|
177
177
|
|
|
178
178
|
# 可选加速(Linux)
|
|
179
|
-
pip install
|
|
180
|
-
pip install
|
|
181
|
-
pip install
|
|
179
|
+
pip install canns[cuda12]
|
|
180
|
+
pip install canns[cuda13]
|
|
181
|
+
pip install canns[tpu]
|
|
182
182
|
|
|
183
183
|
# GUI(ASA Pipeline)
|
|
184
|
-
pip install
|
|
184
|
+
pip install canns[gui]
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
可选(uv):
|
|
@@ -198,6 +198,32 @@ uv pip install canns
|
|
|
198
198
|
- Sphinx 文档与 Notebook:`docs/`
|
|
199
199
|
- ASA GUI 入口:`canns-gui`
|
|
200
200
|
|
|
201
|
+
## 引用
|
|
202
|
+
|
|
203
|
+
如果您在研究中使用了 CANNs,请引用:
|
|
204
|
+
|
|
205
|
+
```bibtex
|
|
206
|
+
@software{he_2026_canns,
|
|
207
|
+
author = {He, Sichao and
|
|
208
|
+
Tuerhong, Aiersi and
|
|
209
|
+
She, Shangjun and
|
|
210
|
+
Chu, Tianhao and
|
|
211
|
+
Wu, Yuling and
|
|
212
|
+
Zuo, Junfeng and
|
|
213
|
+
Wu, Si},
|
|
214
|
+
title = {CANNs: Continuous Attractor Neural Networks Toolkit},
|
|
215
|
+
month = feb,
|
|
216
|
+
year = 2026,
|
|
217
|
+
publisher = {Zenodo},
|
|
218
|
+
version = {v1.0.0},
|
|
219
|
+
doi = {10.5281/zenodo.18453893},
|
|
220
|
+
url = {https://doi.org/10.5281/zenodo.18453893}
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**纯文本格式:**
|
|
225
|
+
> He, S., Tuerhong, A., She, S., Chu, T., Wu, Y., Zuo, J., & Wu, S. (2026). CANNs: Continuous Attractor Neural Networks Toolkit (v1.0.0). Zenodo. https://doi.org/10.5281/zenodo.18453893
|
|
226
|
+
|
|
201
227
|
## 贡献&许可证
|
|
202
228
|
|
|
203
229
|
欢迎提交 Issue / PR。请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
|
|
@@ -64,6 +64,7 @@ dependencies = [
|
|
|
64
64
|
dev = [
|
|
65
65
|
"pytest>=8.3.5",
|
|
66
66
|
"pytest-sugar>=1.0.0",
|
|
67
|
+
"pytest-cov>=6.0.0",
|
|
67
68
|
"ruff>=0.11.9",
|
|
68
69
|
"codespell>=2.4.1",
|
|
69
70
|
"rich>=14.0.0",
|
|
@@ -116,7 +117,7 @@ gui = [
|
|
|
116
117
|
|
|
117
118
|
[project.scripts]
|
|
118
119
|
# Add script entry points here:
|
|
119
|
-
canns = "canns:
|
|
120
|
+
canns = "canns.__main__:main"
|
|
120
121
|
canns-tui = "canns.pipeline.launcher:main"
|
|
121
122
|
canns-gallery = "canns.pipeline.gallery:main"
|
|
122
123
|
canns-gui = "canns.pipeline.asa_gui:main"
|
|
@@ -245,13 +246,31 @@ reportOperatorIssue = false
|
|
|
245
246
|
# skip = "foo.py,bar.py"
|
|
246
247
|
|
|
247
248
|
[tool.pytest.ini_options]
|
|
248
|
-
python_files = ["*.py"]
|
|
249
|
+
python_files = ["test_*.py"]
|
|
249
250
|
python_classes = ["Test*"]
|
|
250
251
|
python_functions = ["test_*"]
|
|
251
252
|
testpaths = [
|
|
252
|
-
"src",
|
|
253
253
|
"tests",
|
|
254
254
|
]
|
|
255
255
|
norecursedirs = []
|
|
256
256
|
filterwarnings = []
|
|
257
|
-
addopts = "--assert=plain"
|
|
257
|
+
addopts = "--assert=plain -ra"
|
|
258
|
+
markers = [
|
|
259
|
+
"integration: tests that exercise multi-module flows or external dependencies",
|
|
260
|
+
"visualization: tests that generate plots or graphics",
|
|
261
|
+
"slow: tests that are notably slower than unit tests",
|
|
262
|
+
]
|
|
263
|
+
|
|
264
|
+
[tool.coverage.run]
|
|
265
|
+
branch = true
|
|
266
|
+
source = ["canns"]
|
|
267
|
+
|
|
268
|
+
[tool.coverage.report]
|
|
269
|
+
skip_covered = true
|
|
270
|
+
show_missing = true
|
|
271
|
+
exclude_lines = [
|
|
272
|
+
"pragma: no cover",
|
|
273
|
+
"if TYPE_CHECKING:",
|
|
274
|
+
"if __name__ == .__main__.:",
|
|
275
|
+
"raise NotImplementedError",
|
|
276
|
+
]
|
|
@@ -11,12 +11,10 @@ Examples:
|
|
|
11
11
|
>>> print(list(canns.data.DATASETS))
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
from
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
from
|
|
18
|
-
from . import trainer as trainer
|
|
19
|
-
from . import utils as utils
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import importlib
|
|
17
|
+
from typing import TYPE_CHECKING
|
|
20
18
|
|
|
21
19
|
# Version information
|
|
22
20
|
try:
|
|
@@ -49,6 +47,27 @@ Examples:
|
|
|
49
47
|
>>> print(canns.version_info)
|
|
50
48
|
"""
|
|
51
49
|
|
|
50
|
+
_LAZY_SUBMODULES = {
|
|
51
|
+
"analyzer",
|
|
52
|
+
"data",
|
|
53
|
+
"models",
|
|
54
|
+
"pipeline",
|
|
55
|
+
"trainer",
|
|
56
|
+
"utils",
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
60
|
+
from . import analyzer, data, models, pipeline, trainer, utils
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def __getattr__(name: str):
|
|
64
|
+
if name in _LAZY_SUBMODULES:
|
|
65
|
+
module = importlib.import_module(f"{__name__}.{name}")
|
|
66
|
+
globals()[name] = module
|
|
67
|
+
return module
|
|
68
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
69
|
+
|
|
70
|
+
|
|
52
71
|
__all__ = [
|
|
53
72
|
"analyzer",
|
|
54
73
|
"data",
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Command-line entry point for the CANNs toolkit.
|
|
2
|
+
|
|
3
|
+
`pip/uv install canns` installs several console scripts:
|
|
4
|
+
- `canns`: convenience wrapper (this module)
|
|
5
|
+
- `canns-tui`: Textual launcher (ASA / Gallery)
|
|
6
|
+
- `canns-gallery`: Gallery TUI
|
|
7
|
+
- `canns-gui`: ASA GUI (requires `canns[gui]`)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import sys
|
|
14
|
+
from collections.abc import Sequence
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def main(argv: Sequence[str] | None = None) -> int:
|
|
18
|
+
parser = argparse.ArgumentParser(prog="canns", description="CANNs toolkit entry point.")
|
|
19
|
+
parser.add_argument(
|
|
20
|
+
"--version",
|
|
21
|
+
action="store_true",
|
|
22
|
+
help="Print installed CANNs version and exit.",
|
|
23
|
+
)
|
|
24
|
+
group = parser.add_mutually_exclusive_group()
|
|
25
|
+
group.add_argument("--asa", action="store_true", help="Run the ASA TUI directly.")
|
|
26
|
+
group.add_argument("--gallery", action="store_true", help="Run the model gallery TUI directly.")
|
|
27
|
+
group.add_argument("--gui", action="store_true", help="Run the ASA GUI (requires canns[gui]).")
|
|
28
|
+
|
|
29
|
+
args = parser.parse_args(list(argv) if argv is not None else None)
|
|
30
|
+
|
|
31
|
+
if args.version:
|
|
32
|
+
try:
|
|
33
|
+
from importlib.metadata import version
|
|
34
|
+
|
|
35
|
+
print(version("canns"))
|
|
36
|
+
except Exception:
|
|
37
|
+
try:
|
|
38
|
+
from canns._version import __version__
|
|
39
|
+
|
|
40
|
+
print(__version__)
|
|
41
|
+
except Exception:
|
|
42
|
+
print("unknown")
|
|
43
|
+
return 0
|
|
44
|
+
|
|
45
|
+
if args.gui:
|
|
46
|
+
from canns.pipeline.asa_gui import main as gui_main
|
|
47
|
+
|
|
48
|
+
return int(gui_main())
|
|
49
|
+
|
|
50
|
+
if args.gallery:
|
|
51
|
+
from canns.pipeline.gallery import main as gallery_main
|
|
52
|
+
|
|
53
|
+
gallery_main()
|
|
54
|
+
return 0
|
|
55
|
+
|
|
56
|
+
if args.asa:
|
|
57
|
+
from canns.pipeline.asa import main as asa_main
|
|
58
|
+
|
|
59
|
+
asa_main()
|
|
60
|
+
return 0
|
|
61
|
+
|
|
62
|
+
from canns.pipeline.launcher import main as launcher_main
|
|
63
|
+
|
|
64
|
+
launcher_main()
|
|
65
|
+
return 0
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
if __name__ == "__main__":
|
|
69
|
+
raise SystemExit(main(sys.argv[1:]))
|
|
@@ -10,7 +10,6 @@ from ...visualization.core import PlotConfig, finalize_figure
|
|
|
10
10
|
from .path import _align_activity_to_coords, skew_transform
|
|
11
11
|
from .utils import _ensure_parent_dir, _ensure_plot_config
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
# =====================================================================
|
|
15
14
|
# CohoSpace visualization and selectivity metrics (CohoScore)
|
|
16
15
|
# =====================================================================
|