canns 0.13.1__py3-none-any.whl → 0.14.0__py3-none-any.whl

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.
Files changed (99) hide show
  1. canns/analyzer/data/__init__.py +5 -1
  2. canns/analyzer/data/asa/__init__.py +27 -12
  3. canns/analyzer/data/asa/cohospace.py +336 -10
  4. canns/analyzer/data/asa/config.py +3 -0
  5. canns/analyzer/data/asa/embedding.py +48 -45
  6. canns/analyzer/data/asa/path.py +104 -2
  7. canns/analyzer/data/asa/plotting.py +88 -19
  8. canns/analyzer/data/asa/tda.py +11 -4
  9. canns/analyzer/data/cell_classification/__init__.py +97 -0
  10. canns/analyzer/data/cell_classification/core/__init__.py +26 -0
  11. canns/analyzer/data/cell_classification/core/grid_cells.py +633 -0
  12. canns/analyzer/data/cell_classification/core/grid_modules_leiden.py +288 -0
  13. canns/analyzer/data/cell_classification/core/head_direction.py +347 -0
  14. canns/analyzer/data/cell_classification/core/spatial_analysis.py +431 -0
  15. canns/analyzer/data/cell_classification/io/__init__.py +5 -0
  16. canns/analyzer/data/cell_classification/io/matlab_loader.py +417 -0
  17. canns/analyzer/data/cell_classification/utils/__init__.py +39 -0
  18. canns/analyzer/data/cell_classification/utils/circular_stats.py +383 -0
  19. canns/analyzer/data/cell_classification/utils/correlation.py +318 -0
  20. canns/analyzer/data/cell_classification/utils/geometry.py +442 -0
  21. canns/analyzer/data/cell_classification/utils/image_processing.py +416 -0
  22. canns/analyzer/data/cell_classification/visualization/__init__.py +19 -0
  23. canns/analyzer/data/cell_classification/visualization/grid_plots.py +292 -0
  24. canns/analyzer/data/cell_classification/visualization/hd_plots.py +200 -0
  25. canns/analyzer/metrics/__init__.py +2 -1
  26. canns/analyzer/visualization/core/config.py +46 -4
  27. canns/data/__init__.py +6 -1
  28. canns/data/datasets.py +154 -1
  29. canns/data/loaders.py +37 -0
  30. canns/pipeline/__init__.py +13 -9
  31. canns/pipeline/__main__.py +6 -0
  32. canns/pipeline/asa/runner.py +105 -41
  33. canns/pipeline/asa_gui/__init__.py +68 -0
  34. canns/pipeline/asa_gui/__main__.py +6 -0
  35. canns/pipeline/asa_gui/analysis_modes/__init__.py +42 -0
  36. canns/pipeline/asa_gui/analysis_modes/base.py +39 -0
  37. canns/pipeline/asa_gui/analysis_modes/batch_mode.py +21 -0
  38. canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py +56 -0
  39. canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py +194 -0
  40. canns/pipeline/asa_gui/analysis_modes/decode_mode.py +52 -0
  41. canns/pipeline/asa_gui/analysis_modes/fr_mode.py +81 -0
  42. canns/pipeline/asa_gui/analysis_modes/frm_mode.py +92 -0
  43. canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py +123 -0
  44. canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py +199 -0
  45. canns/pipeline/asa_gui/analysis_modes/tda_mode.py +112 -0
  46. canns/pipeline/asa_gui/app.py +29 -0
  47. canns/pipeline/asa_gui/controllers/__init__.py +6 -0
  48. canns/pipeline/asa_gui/controllers/analysis_controller.py +59 -0
  49. canns/pipeline/asa_gui/controllers/preprocess_controller.py +89 -0
  50. canns/pipeline/asa_gui/core/__init__.py +15 -0
  51. canns/pipeline/asa_gui/core/cache.py +14 -0
  52. canns/pipeline/asa_gui/core/runner.py +1936 -0
  53. canns/pipeline/asa_gui/core/state.py +324 -0
  54. canns/pipeline/asa_gui/core/worker.py +260 -0
  55. canns/pipeline/asa_gui/main_window.py +184 -0
  56. canns/pipeline/asa_gui/models/__init__.py +7 -0
  57. canns/pipeline/asa_gui/models/config.py +14 -0
  58. canns/pipeline/asa_gui/models/job.py +31 -0
  59. canns/pipeline/asa_gui/models/presets.py +21 -0
  60. canns/pipeline/asa_gui/resources/__init__.py +16 -0
  61. canns/pipeline/asa_gui/resources/dark.qss +167 -0
  62. canns/pipeline/asa_gui/resources/light.qss +163 -0
  63. canns/pipeline/asa_gui/resources/styles.qss +130 -0
  64. canns/pipeline/asa_gui/utils/__init__.py +1 -0
  65. canns/pipeline/asa_gui/utils/formatters.py +15 -0
  66. canns/pipeline/asa_gui/utils/io_adapters.py +40 -0
  67. canns/pipeline/asa_gui/utils/validators.py +41 -0
  68. canns/pipeline/asa_gui/views/__init__.py +1 -0
  69. canns/pipeline/asa_gui/views/help_content.py +171 -0
  70. canns/pipeline/asa_gui/views/pages/__init__.py +6 -0
  71. canns/pipeline/asa_gui/views/pages/analysis_page.py +565 -0
  72. canns/pipeline/asa_gui/views/pages/preprocess_page.py +492 -0
  73. canns/pipeline/asa_gui/views/panels/__init__.py +1 -0
  74. canns/pipeline/asa_gui/views/widgets/__init__.py +21 -0
  75. canns/pipeline/asa_gui/views/widgets/artifacts_tab.py +44 -0
  76. canns/pipeline/asa_gui/views/widgets/drop_zone.py +80 -0
  77. canns/pipeline/asa_gui/views/widgets/file_list.py +27 -0
  78. canns/pipeline/asa_gui/views/widgets/gridscore_tab.py +308 -0
  79. canns/pipeline/asa_gui/views/widgets/help_dialog.py +27 -0
  80. canns/pipeline/asa_gui/views/widgets/image_tab.py +50 -0
  81. canns/pipeline/asa_gui/views/widgets/image_viewer.py +97 -0
  82. canns/pipeline/asa_gui/views/widgets/log_box.py +16 -0
  83. canns/pipeline/asa_gui/views/widgets/pathcompare_tab.py +200 -0
  84. canns/pipeline/asa_gui/views/widgets/popup_combo.py +25 -0
  85. canns/pipeline/gallery/__init__.py +15 -5
  86. canns/pipeline/gallery/__main__.py +11 -0
  87. canns/pipeline/gallery/app.py +705 -0
  88. canns/pipeline/gallery/runner.py +790 -0
  89. canns/pipeline/gallery/state.py +51 -0
  90. canns/pipeline/gallery/styles.tcss +123 -0
  91. canns/pipeline/launcher.py +81 -0
  92. {canns-0.13.1.dist-info → canns-0.14.0.dist-info}/METADATA +11 -1
  93. canns-0.14.0.dist-info/RECORD +163 -0
  94. canns-0.14.0.dist-info/entry_points.txt +5 -0
  95. canns/pipeline/_base.py +0 -50
  96. canns-0.13.1.dist-info/RECORD +0 -89
  97. canns-0.13.1.dist-info/entry_points.txt +0 -3
  98. {canns-0.13.1.dist-info → canns-0.14.0.dist-info}/WHEEL +0 -0
  99. {canns-0.13.1.dist-info → canns-0.14.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,51 @@
1
+ """State management for the model gallery TUI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass, field
6
+ from pathlib import Path
7
+
8
+ MODEL_ANALYSIS_OPTIONS: dict[str, list[tuple[str, str]]] = {
9
+ "cann1d": [
10
+ ("Connectivity Matrix", "connectivity"),
11
+ ("Energy Landscape", "energy"),
12
+ ("Tuning Curves", "tuning"),
13
+ ("Template Matching", "template"),
14
+ ("Neural Manifold", "manifold"),
15
+ ],
16
+ "cann2d": [
17
+ ("Connectivity Matrix", "connectivity"),
18
+ ("Energy Landscape", "energy"),
19
+ ("Firing Field", "firing_field"),
20
+ ("Trajectory Comparison", "trajectory"),
21
+ ("Neural Manifold", "manifold"),
22
+ ],
23
+ "gridcell": [
24
+ ("Connectivity Matrix", "connectivity"),
25
+ ("Energy Landscape", "energy"),
26
+ ("Firing Field", "firing_field"),
27
+ ("Path Integration", "path_integration"),
28
+ ("Neural Manifold", "manifold"),
29
+ ],
30
+ }
31
+
32
+
33
+ @dataclass
34
+ class GalleryState:
35
+ """Centralized state for the model gallery TUI."""
36
+
37
+ workdir: Path = field(default_factory=lambda: Path("."))
38
+ model: str = "cann1d"
39
+ analysis: str = "connectivity"
40
+ artifacts: dict[str, Path] = field(default_factory=dict)
41
+
42
+
43
+ def get_analysis_options(model: str) -> list[tuple[str, str]]:
44
+ """Return analysis options for the selected model."""
45
+ return MODEL_ANALYSIS_OPTIONS.get(model, [("Connectivity Matrix", "connectivity")])
46
+
47
+
48
+ def get_default_analysis(model: str) -> str:
49
+ """Return the default analysis key for the selected model."""
50
+ options = get_analysis_options(model)
51
+ return options[0][1] if options else "connectivity"
@@ -0,0 +1,123 @@
1
+ /* Gallery TUI Styles */
2
+
3
+ .hidden {
4
+ display: none;
5
+ }
6
+
7
+ #main-container {
8
+ layout: horizontal;
9
+ height: 1fr;
10
+ }
11
+
12
+ #left-panel {
13
+ width: 24;
14
+ min-width: 22;
15
+ max-width: 28;
16
+ height: 100%;
17
+ border-right: solid $primary;
18
+ padding: 1;
19
+ }
20
+
21
+ #middle-panel {
22
+ layout: vertical;
23
+ width: 1fr;
24
+ min-width: 30;
25
+ height: 100%;
26
+ border-right: solid $primary;
27
+ overflow: hidden;
28
+ }
29
+
30
+ #params-panel {
31
+ layout: vertical;
32
+ height: 100%;
33
+ width: 100%;
34
+ overflow: hidden;
35
+ }
36
+
37
+ #right-panel {
38
+ width: 2fr;
39
+ min-width: 32;
40
+ height: 100%;
41
+ padding: 1;
42
+ }
43
+
44
+ #params-header {
45
+ background: $boost;
46
+ padding: 1;
47
+ text-style: bold;
48
+ dock: top;
49
+ height: 3;
50
+ }
51
+
52
+ #params-scroll {
53
+ height: 1fr;
54
+ width: 100%;
55
+ overflow-y: scroll;
56
+ scrollbar-size-vertical: 1;
57
+ padding: 0 1 2 1;
58
+ }
59
+
60
+ #params-cann1d,
61
+ #params-cann2d,
62
+ #params-gridcell {
63
+ height: auto;
64
+ width: 100%;
65
+ overflow: auto;
66
+ }
67
+
68
+ ParamGroup {
69
+ border: round $secondary;
70
+ padding: 1;
71
+ margin: 1 0;
72
+ height: auto;
73
+ width: 100%;
74
+ }
75
+
76
+ .param-group-title {
77
+ text-style: bold;
78
+ color: $accent;
79
+ dock: top;
80
+ }
81
+
82
+ #workdir-label {
83
+ background: $boost;
84
+ padding: 1;
85
+ margin-bottom: 1;
86
+ }
87
+
88
+ Button {
89
+ margin: 1 0;
90
+ }
91
+
92
+ #progress-bar {
93
+ margin: 1 0;
94
+ }
95
+
96
+ #run-status {
97
+ margin-top: 1;
98
+ }
99
+
100
+ ImagePreview {
101
+ height: 3fr;
102
+ min-height: 20;
103
+ border: solid $accent;
104
+ padding: 1;
105
+ }
106
+
107
+ #log-viewer {
108
+ height: 1fr;
109
+ border: solid $primary;
110
+ padding: 1;
111
+ }
112
+
113
+ .running {
114
+ background: $warning;
115
+ }
116
+
117
+ .success {
118
+ background: $success;
119
+ }
120
+
121
+ .error {
122
+ background: $error;
123
+ }
@@ -0,0 +1,81 @@
1
+ """Launcher for selecting ASA or Gallery TUI."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from textual.app import App, ComposeResult
8
+ from textual.binding import Binding
9
+ from textual.containers import Container, Vertical
10
+ from textual.widgets import Button, Label
11
+
12
+
13
+ class ModePicker(App[str | None]):
14
+ """Select which TUI to run."""
15
+
16
+ TITLE = "CANNs TUI Launcher"
17
+
18
+ CSS = """
19
+ Screen {
20
+ align: center middle;
21
+ }
22
+
23
+ #card {
24
+ width: 68;
25
+ height: 18;
26
+ border: thick $accent;
27
+ background: $surface;
28
+ padding: 2;
29
+ }
30
+
31
+ #title {
32
+ text-style: bold;
33
+ margin-bottom: 1;
34
+ }
35
+
36
+ #subtitle {
37
+ color: $text-muted;
38
+ margin-bottom: 2;
39
+ }
40
+
41
+ Button {
42
+ width: 100%;
43
+ margin: 1 0;
44
+ }
45
+ """
46
+
47
+ BINDINGS = [
48
+ Binding("escape", "quit", "Quit"),
49
+ ]
50
+
51
+ def compose(self) -> ComposeResult:
52
+ with Container(id="card"):
53
+ yield Label("Choose a workflow", id="title")
54
+ yield Label("ASA analysis or Model Gallery", id="subtitle")
55
+ with Vertical():
56
+ yield Button("ASA (Attractor Structure Analyzer)", id="btn-asa", variant="primary")
57
+ yield Button("Model Gallery", id="btn-gallery", variant="primary")
58
+ yield Button("Quit", id="btn-quit")
59
+
60
+ def on_button_pressed(self, event: Button.Pressed) -> None:
61
+ if event.button.id == "btn-asa":
62
+ self.exit(result="asa")
63
+ elif event.button.id == "btn-gallery":
64
+ self.exit(result="gallery")
65
+ elif event.button.id == "btn-quit":
66
+ self.exit(result=None)
67
+
68
+
69
+ def main() -> None:
70
+ """Entry point for the unified canns-tui launcher."""
71
+ os.environ.setdefault("MPLBACKEND", "Agg")
72
+
73
+ selection = ModePicker().run()
74
+ if selection == "gallery":
75
+ from .gallery import GalleryApp
76
+
77
+ GalleryApp().run()
78
+ elif selection == "asa":
79
+ from .asa import ASAApp
80
+
81
+ ASAApp().run()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canns
3
- Version: 0.13.1
3
+ Version: 0.14.0
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>
@@ -20,10 +20,15 @@ Requires-Dist: brainpy[cpu]
20
20
  Requires-Dist: canns-lib>=0.6.2
21
21
  Requires-Dist: climage>=0.2.2
22
22
  Requires-Dist: furo>=2025.7.19
23
+ Requires-Dist: h5py>=3.7
24
+ Requires-Dist: igraph>=1.0.0
23
25
  Requires-Dist: imageio[ffmpeg]>=2.37.0
26
+ Requires-Dist: leidenalg>=0.11.0
27
+ Requires-Dist: matplotlib>=3.5
24
28
  Requires-Dist: notebook>=7.4.4
25
29
  Requires-Dist: numba>=0.56.0
26
30
  Requires-Dist: numpy<2.3,>=1.24
31
+ Requires-Dist: scikit-image>=0.19
27
32
  Requires-Dist: scipy>=1.9.0
28
33
  Requires-Dist: seaborn>=0.13.2
29
34
  Requires-Dist: textual>=7.3.0
@@ -34,6 +39,11 @@ Provides-Extra: cuda12
34
39
  Requires-Dist: brainpy[cuda12]; (platform_system == 'Linux') and extra == 'cuda12'
35
40
  Provides-Extra: cuda13
36
41
  Requires-Dist: brainpy[cuda13]; (platform_system == 'Linux') and extra == 'cuda13'
42
+ Provides-Extra: gui
43
+ Requires-Dist: imageio; extra == 'gui'
44
+ Requires-Dist: pillow; extra == 'gui'
45
+ Requires-Dist: pyside6>=6.6.0; extra == 'gui'
46
+ Requires-Dist: qtawesome; extra == 'gui'
37
47
  Provides-Extra: tpu
38
48
  Requires-Dist: brainpy[tpu]; (platform_system == 'Linux') and extra == 'tpu'
39
49
  Description-Content-Type: text/markdown
@@ -0,0 +1,163 @@
1
+ canns/__init__.py,sha256=ZK4buN-csoLKXaKtoDrOoZbNGCoLCNuF2XS96X8LbH8,1523
2
+ canns/_version.py,sha256=zIvJPOGBFvo4VV6f586rlO_bvhuFp1fsxjf6xhsqkJY,1547
3
+ canns/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ canns/analyzer/__init__.py,sha256=EQ02fYHkpMADp-ojpVCVtapuSPkl6j5WVfdPy0mOTs4,506
5
+ canns/analyzer/data/__init__.py,sha256=RfS8vwApLkNF05Y_lfPaJpN_bRv-mOA_uFziaduDHgI,354
6
+ canns/analyzer/data/asa/__init__.py,sha256=w1RC5QbCXh9UH1PrrBXdclopH86jAJyxNw-nCymGgA8,2312
7
+ canns/analyzer/data/asa/cohospace.py,sha256=wiTu03IqxnkJeSRzlJpcN31OZRG3jfgq4TG8mVvs3R0,37246
8
+ canns/analyzer/data/asa/config.py,sha256=qm0k0nt0xuDUK5t63MG7ii7fgs2XbxyLxKOaOKJuB_s,6398
9
+ canns/analyzer/data/asa/decode.py,sha256=NG8vVx2cPG7uSJDovnC2vzk0dsqU8oR4jaNPxxrvCc0,16501
10
+ canns/analyzer/data/asa/embedding.py,sha256=fa1wEH2puMw8HiZIYCufas51uvnlduxwNMUPpwkbdoc,9643
11
+ canns/analyzer/data/asa/filters.py,sha256=D-1mDVn4hBEAphKUgx1gQEUfgbghKcNQhZmr4xEExQA,7146
12
+ canns/analyzer/data/asa/fly_roi.py,sha256=_scBOd-4t9yv_1tHk7wbXJwPieU-L-QtFJY6fhHpxDI,38031
13
+ canns/analyzer/data/asa/fr.py,sha256=jt99H50e1RRAQgMIdkfK0rBbembZJEr9SMrxK-ZI_LA,13449
14
+ canns/analyzer/data/asa/path.py,sha256=dL6hsqBoPFfC4ZrHDVFDWprbRfJAAYpiq4tIkZ6NvHY,15540
15
+ canns/analyzer/data/asa/plotting.py,sha256=o0fErGzDtbERiZK7uzyQN6Jd7Hm6jXZFg4aGZ100BQU,42766
16
+ canns/analyzer/data/asa/tda.py,sha256=7IdxhBNEE99qenG6Zi4B5tv_L9K6gAW6HHxYGiErx4c,30574
17
+ canns/analyzer/data/cell_classification/__init__.py,sha256=ho8yYcBf0Do_M3V1l0Li26gLDi_DIS4F-Pr5IMLcJ5A,2221
18
+ canns/analyzer/data/cell_classification/core/__init__.py,sha256=Lv1zkGI3UnFT4yGkj351Jj-KEVtZlmRUM37SDby1bIE,761
19
+ canns/analyzer/data/cell_classification/core/grid_cells.py,sha256=fRFixjvPVJy0QF9MygGqpIk1lnTToMZvvbGubM5woRk,21547
20
+ canns/analyzer/data/cell_classification/core/grid_modules_leiden.py,sha256=xWrbL51BeU9pIaCzak54upFBeSUtnx_V_naILjzzExk,9032
21
+ canns/analyzer/data/cell_classification/core/head_direction.py,sha256=CQKyon9pb3K5SBkesuqkBTU-QXx_-g0FBa0bblWDPOw,12060
22
+ canns/analyzer/data/cell_classification/core/spatial_analysis.py,sha256=VT00mKVdxmudTICHI3lAk4ppHM3UKwxd-t1kTsYoFpA,13315
23
+ canns/analyzer/data/cell_classification/io/__init__.py,sha256=ec9fN-abmsoQZH0pn0sEgrfFW0dtfXEuVFPOyRihvzM,132
24
+ canns/analyzer/data/cell_classification/io/matlab_loader.py,sha256=3Rj5Lu-Zzj-oxBKhgME541tZZJ_NztgXM7aNrK_Ivrw,13297
25
+ canns/analyzer/data/cell_classification/utils/__init__.py,sha256=Hplr3LWYLZqP-zRbGbU_EmuDR-Ayyt95JIJ6zc-43k0,969
26
+ canns/analyzer/data/cell_classification/utils/circular_stats.py,sha256=fQ1PNBiF_ZtHSVhL4FCWC49Y6qiMwq2hibOnXZnvoV8,11077
27
+ canns/analyzer/data/cell_classification/utils/correlation.py,sha256=57Ckn8OQGLipT7qZIGl6wgooQ_8gwp01g9lVc8I3Cs0,10354
28
+ canns/analyzer/data/cell_classification/utils/geometry.py,sha256=jOLh3GeO-riR5a7r7Q7uON3HU_bYOZZJLbokU5bjCOQ,12683
29
+ canns/analyzer/data/cell_classification/utils/image_processing.py,sha256=o9bLT4ycJ_IF7SKBe2RqSWIQwNcpi9v4AI-N5vpm_jM,12805
30
+ canns/analyzer/data/cell_classification/visualization/__init__.py,sha256=HJy71bZuvvfFxrd4PTj3AUon68FBjZjtmjgky20oo5o,450
31
+ canns/analyzer/data/cell_classification/visualization/grid_plots.py,sha256=NFtyYOe2Szt0EOIwQmZradwEvvRjjm7mm6VnnGThDQ0,7914
32
+ canns/analyzer/data/cell_classification/visualization/hd_plots.py,sha256=nzw1jck3VHvAFsJAGelhrJf1q27A5PI0r3NKVgeea8U,5670
33
+ canns/analyzer/metrics/__init__.py,sha256=DTsrv1HW133_RgvhWzz7Gx-bP2hOZbPO2unCPPyf9gs,178
34
+ canns/analyzer/metrics/spatial_metrics.py,sha256=ZdS7tGH3lMgNlSYoHlH8IPsCw4XL0KtEnGALg_WHRX8,8965
35
+ canns/analyzer/metrics/systematic_ratemap.py,sha256=MzXfa6_fGgrxD5xEd4hfrZR_fyUmhXQCxnPE3hUonE8,14004
36
+ canns/analyzer/metrics/utils.py,sha256=Ft6lagKdTRJIz6hj9Zmy0i-IU--_Kdrrfzh6xVOQb8g,7402
37
+ canns/analyzer/model_specific/__init__.py,sha256=UCw_MwJJh2AQtnfVeJSzvTVTdVN1ev5oGGoyZtSt1PU,80
38
+ canns/analyzer/model_specific/hopfield.py,sha256=zNPChxX_GuCgc5-KP1KMwHyUDVUh_5EMQzZygOGtIW0,7741
39
+ canns/analyzer/slow_points/__init__.py,sha256=teH7uaVLCXeZGirfez8i3VkbR49pd4isedEtSzweHQs,532
40
+ canns/analyzer/slow_points/checkpoint.py,sha256=s4_-5HZJvmnyFqpK1O9WWYkhAhZj1i5jn9SH6XTGwoY,2980
41
+ canns/analyzer/slow_points/finder.py,sha256=y-YKg-LI7lRM4JMghfcb5NGSYhIM2VPRA37YSCkVK_4,25437
42
+ canns/analyzer/slow_points/fixed_points.py,sha256=Qp-iezwydWWUTchb2hGXJv0QKJqIm9gSG6hh0H9Eb6E,10099
43
+ canns/analyzer/slow_points/visualization.py,sha256=sRmmxs900OSB680MTp0PNIGLpS5i5AmJ58ek20vmrSE,10610
44
+ canns/analyzer/visualization/__init__.py,sha256=pNIokzS8y3ydzEMmVm1FNrOMRALDeuOHbcwZicPUm90,2131
45
+ canns/analyzer/visualization/energy_plots.py,sha256=u0TOLzd7AWEfs-tRYZg1UBwsGYGPF_eWsMip1ZG9jPA,35671
46
+ canns/analyzer/visualization/spatial_plots.py,sha256=30m02xhYkZfEETCtvBSwLix9SEOPcLZTg0AGGFvPc2w,34605
47
+ canns/analyzer/visualization/spike_plots.py,sha256=wOm4gh_3obJy6gwo31maoaiZ7O8rsoYeFdhseoVmX78,12280
48
+ canns/analyzer/visualization/theta_sweep_plots.py,sha256=2kiP7-IizqGm0q-ohQ4HhDZpm3sqs_lgn3GErHEZzbI,62262
49
+ canns/analyzer/visualization/tuning_plots.py,sha256=9JOeC4dlulVzpHQWDVy3dlJnxcBZiOPeapPdVFR-7Zk,5178
50
+ canns/analyzer/visualization/core/__init__.py,sha256=Vngm2A05cTu9ZVEYepTF7lVpuwQvMRjXs9XPLfZzedI,1928
51
+ canns/analyzer/visualization/core/animation.py,sha256=qfBYMd81_GwWEw4MHOu3GrVXJtHS9W1xxtmOx-J5ZyM,7664
52
+ canns/analyzer/visualization/core/backend.py,sha256=Nbk-ARL_xeWlb3nl5SUPrFQNns2wq5BeHU3Q_tAbd_c,9539
53
+ canns/analyzer/visualization/core/config.py,sha256=PI4GnEwjwDhRpWPfe-bdYBLIO9ica5B3dYUC_VhpSek,25542
54
+ canns/analyzer/visualization/core/jupyter_utils.py,sha256=JD56VeeWb7w9t5DJ8TpgnxRWkUK46ArbbPSTlFdIM10,6034
55
+ canns/analyzer/visualization/core/rendering.py,sha256=YCbiXu8MOAqE9FVb_id5JKr5g9O64sCh-dOs0EK4gnU,18291
56
+ canns/analyzer/visualization/core/writers.py,sha256=HLsP953hgsv140ZX2XPzHfCUTqenjmjbLNrbknKam_s,15607
57
+ canns/data/__init__.py,sha256=cEHoZAgeTGVmPheo_GFijpoCr_al-FEwLr9VQbEe3_A,1030
58
+ canns/data/datasets.py,sha256=2Jp6hEb8PWkCq4JeiCbRKll5FZW693GuIVGr2v_WWtM,18664
59
+ canns/data/loaders.py,sha256=SuYH5tdcHmZXjWWEicaZVaIIhCD9DZR3IaMGyHXQXqI,14654
60
+ canns/models/__init__.py,sha256=2j5josUkwQQq8Of_gLjecYry65DuC96J8X-RlRqskYs,305
61
+ canns/models/basic/__init__.py,sha256=mNqyGz_z29YNMC345b_VyuVI9hQQ9NFe9mIU9f5KGVU,329
62
+ canns/models/basic/_base.py,sha256=L7oECkO5-5j9r1faaz6RDIqQKHy6DEflHRGHyaW9ARg,3800
63
+ canns/models/basic/cann.py,sha256=uR7j5u71b4qLFK_0xS5pXTZoLyEOa0tvsmT3D0O-CMQ,24588
64
+ canns/models/basic/grid_cell.py,sha256=8nGXgXAh8UDNx3j3taqwBOsgOBVxjIk9u45v9zFSvrE,31955
65
+ canns/models/basic/hierarchical_model.py,sha256=V2QRuTVirT3_7quFC6sJb1JyNIMbo5WlAo7BybV6QKE,53847
66
+ canns/models/basic/theta_sweep_model.py,sha256=GGd3_X81eNzPoguXbleVWO_ID253FzQOqdxEPA5VJUo,34075
67
+ canns/models/brain_inspired/__init__.py,sha256=MuG-adTkIIhOxs63u0f0b0oO6srilGQzR_Gta8qXeXY,620
68
+ canns/models/brain_inspired/_base.py,sha256=YyzgmCh-YzUsK22NbSAapUWHk03jwJ49b1kRCfMWbQk,3820
69
+ canns/models/brain_inspired/hopfield.py,sha256=KQmXWBvUTdQ17t9VG-8Sy_uJznEt4eunONYJsiN5GvY,6903
70
+ canns/models/brain_inspired/linear.py,sha256=oRjJnTqrheAADA5unYBu83RSm4UoUH-BK2Mt_liwDtw,6141
71
+ canns/models/brain_inspired/spiking.py,sha256=hr2w7c6Eobxwp2z6vkV9Yivpv1964-cno-XOfMSh3RU,5557
72
+ canns/models/hybrid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ canns/pipeline/__init__.py,sha256=6NQqkpSV6AW83FxInGh44Xz0R-p-3B307Z3P2VIDDNA,454
74
+ canns/pipeline/__main__.py,sha256=wUC2N3YPdMpED1nlgmlnO19EcOaM303JxUiM5_an7p0,113
75
+ canns/pipeline/launcher.py,sha256=GASiWSfezljY56swjfLUR_QZCUU5Acm4v3mh9kNYayE,1988
76
+ canns/pipeline/asa/__init__.py,sha256=JR4T0onfmkKMOrUq-k0San1RTSb1om6cd27tWovBp0c,466
77
+ canns/pipeline/asa/__main__.py,sha256=_KgAeuGQ2-SXmuZhvZCkRx9luFf7VgKUCuszNlUswyA,197
78
+ canns/pipeline/asa/app.py,sha256=L5al6PrGoEzRNosZlHbn-VaTxXCoVyfKFn0f1e-0FUI,49906
79
+ canns/pipeline/asa/runner.py,sha256=Bq1uKEEtn-qzOnftpmQ1YCbDr_ygYFj98C1H2Oylkfo,45246
80
+ canns/pipeline/asa/screens.py,sha256=DbqidxmoKe4KzSLuxuriVv1PIVFn5Z-PfScVfjrIiEA,5954
81
+ canns/pipeline/asa/state.py,sha256=XukidfcFIOmm9ttT226FOTYR5hv2VAY8_DZt7V1Ml2g,6955
82
+ canns/pipeline/asa/styles.tcss,sha256=eaXI3rQeWdBYmWdLJMMiSO6acHtreLRVKKoIHb2-dBk,3349
83
+ canns/pipeline/asa/widgets.py,sha256=3vPGGQWP9V5FwuwqykCVp7dzAHdpcFkDqib0DtIw-lQ,8087
84
+ canns/pipeline/asa_gui/__init__.py,sha256=tkomNZgnipnsIf7BzP8rNZ4JLTVS-RZNPM7Et20Y4mI,1953
85
+ canns/pipeline/asa_gui/__main__.py,sha256=2UOQtIE5oXkcq9HcuY13M3Jk6-uaDu8A0VJfvr203ck,134
86
+ canns/pipeline/asa_gui/app.py,sha256=Wd-tVGNPE1mQ0S9bET-cyjfj5UWsTIFFHOQRu0lngBs,833
87
+ canns/pipeline/asa_gui/main_window.py,sha256=rZpqAXCY5KyrVQRmOzogX-8SaA-Xep7KyzJq34TIoA4,6927
88
+ canns/pipeline/asa_gui/analysis_modes/__init__.py,sha256=m5tra-3lOcKi09HV3WxvTnDuF5lgV92C_fHH_4V87zw,990
89
+ canns/pipeline/asa_gui/analysis_modes/base.py,sha256=-xuzrr5-XItZldl7DUYfeLLvvXi-i7wpzk1IkTaPAzQ,1220
90
+ canns/pipeline/asa_gui/analysis_modes/batch_mode.py,sha256=sua3cD6G4vTGT7fUSrdvYNwldA3KZ1O4MCCsSOX4knc,531
91
+ canns/pipeline/asa_gui/analysis_modes/cohomap_mode.py,sha256=RCZv2TZ7_BmaQZFFradsLlumB7MgfiMENxWjxGFZB8Q,1748
92
+ canns/pipeline/asa_gui/analysis_modes/cohospace_mode.py,sha256=HBb7nrdfKz8hY5QkY8YhKVWxtvRyyneFo6fN7dumVSw,7115
93
+ canns/pipeline/asa_gui/analysis_modes/decode_mode.py,sha256=wPuuoXA2eQt_tv4Nh57cBNvzrW87cqRlKS6ckVgt280,1586
94
+ canns/pipeline/asa_gui/analysis_modes/fr_mode.py,sha256=mS6FpLBwJB-ugYKgPBsVP6X4cKMlw6S0gsT5Q8qTNls,2928
95
+ canns/pipeline/asa_gui/analysis_modes/frm_mode.py,sha256=OYl0CkUjqy2azu_T7mFWJ58lSTaFCsFFfBhmg1nRebE,3038
96
+ canns/pipeline/asa_gui/analysis_modes/gridscore_mode.py,sha256=xcq-HLJxqYFu5Nck9cLN6Rp2g8eUDjSGI8_3AkEXNYg,4321
97
+ canns/pipeline/asa_gui/analysis_modes/pathcompare_mode.py,sha256=5aZpClyO813tXQsbUuBchR2uNHyjQXQeNEINNaZyfrM,6877
98
+ canns/pipeline/asa_gui/analysis_modes/tda_mode.py,sha256=jNlRwpzsYIKUKFqRyjDVChoJib7h_5iz2te-mK7Qf1I,4119
99
+ canns/pipeline/asa_gui/controllers/__init__.py,sha256=RuQz960T4kEuQsBI_cjS0cQgFyqAdblLXy_dDoLPbTE,198
100
+ canns/pipeline/asa_gui/controllers/analysis_controller.py,sha256=8cKs-RYHh_NflP7xeS0u0_y9WsZ268H1Wyp-wHZC97I,1769
101
+ canns/pipeline/asa_gui/controllers/preprocess_controller.py,sha256=uNZifNGadYPxAVyWnfonOs5pwCgxwB1nrBGqvv8Y3hU,2825
102
+ canns/pipeline/asa_gui/core/__init__.py,sha256=vfJVs5T999vh04Fi98kRLjD8AkbqpIGxmRiUhaxCNYY,371
103
+ canns/pipeline/asa_gui/core/cache.py,sha256=qAg9Su_T1xIR5j8DK9KzwSdCGs0lKtMaZKr0Lhcj0KU,327
104
+ canns/pipeline/asa_gui/core/runner.py,sha256=6Gz9ptWhVrUfsxW0EkyrSjilEj5GjyajhJ08RU8wye8,74509
105
+ canns/pipeline/asa_gui/core/state.py,sha256=hjv8NrgROlACgjm5VZtQL58_podJFWS2sLHi5YiVLJY,10148
106
+ canns/pipeline/asa_gui/core/worker.py,sha256=ig6fwcMLNR6N3oSX3LW-bJdXm3Hol29iAVX9pU6KWSc,7778
107
+ canns/pipeline/asa_gui/models/__init__.py,sha256=Pr5wfeu_iA8bh2ob9tfWQcWmzWydYjMwups29R6c8-U,217
108
+ canns/pipeline/asa_gui/models/config.py,sha256=oDAeNlReKJEITc8B5AT9xxQl3Ug1yaGs6DrzSJcABXc,314
109
+ canns/pipeline/asa_gui/models/job.py,sha256=_HdhJIzdH9OSKrRpcl3WCS4O04Bvur5uT9yb9oOWBuE,852
110
+ canns/pipeline/asa_gui/models/presets.py,sha256=zEtR1_35ovSuGa3xMOvZoVDJJUK0rSi8OOlfkQWFvFE,519
111
+ canns/pipeline/asa_gui/resources/__init__.py,sha256=t2gkV9PuOV_HVRqR7qzBOA4ADBlyTEnVHy-0jQlWJTA,432
112
+ canns/pipeline/asa_gui/resources/dark.qss,sha256=s9Uhyod7aLwIC5QqYOVIKN7NofcXbV1ESZk-j98YMY4,2990
113
+ canns/pipeline/asa_gui/resources/light.qss,sha256=B8rU85VrYMKf8QasvRiR-tCypov7pzIOFr7lcL81mcw,2883
114
+ canns/pipeline/asa_gui/resources/styles.qss,sha256=MaWWGn3f9yvOYpgdgy8VyITWk5vGGPut2H_rnQM4-EU,2188
115
+ canns/pipeline/asa_gui/utils/__init__.py,sha256=UDPlNIUi5Jl16YiQbmOWz7TTTjFFJn_nDwDuYleAlKM,35
116
+ canns/pipeline/asa_gui/utils/formatters.py,sha256=w9MP0mGior_hxPqGhjNCXxwNbItgnaCDTdxJ1zUPGgk,347
117
+ canns/pipeline/asa_gui/utils/io_adapters.py,sha256=MVYxpI6-TYbIJb1LpT2N24t2X7JlNhcUrEurs25pH_A,1144
118
+ canns/pipeline/asa_gui/utils/validators.py,sha256=x5Tw2Pk434vlfQKBYgUOJPL6MLw0OhlvI83xRgiebFI,1341
119
+ canns/pipeline/asa_gui/views/__init__.py,sha256=ThoLlMw7bKxA7lkv_AvIR1mbpaoM0vkIxVP1p7mlzQM,28
120
+ canns/pipeline/asa_gui/views/help_content.py,sha256=kL7MSwc9v3gHLz86Apiy64xbwymt9r7sPEjz5ka6EB0,8452
121
+ canns/pipeline/asa_gui/views/pages/__init__.py,sha256=xB7VTY_hKfoCNMGeWZbV3gHG9ErrzmwqW30UlUkbqgE,161
122
+ canns/pipeline/asa_gui/views/pages/analysis_page.py,sha256=CNt-ZXaWuHa1gOkTgBpZYYsrklW0L8WS74PL_9NnlZ4,22538
123
+ canns/pipeline/asa_gui/views/pages/preprocess_page.py,sha256=N7IwQCNtqd30cV81S2AgejWJKIJ2aD9IVHVWSFa26dA,19472
124
+ canns/pipeline/asa_gui/views/panels/__init__.py,sha256=Spqmc0Sjh38cgr42gszmiogZQFFOLN1yL7ekSpVJCrE,36
125
+ canns/pipeline/asa_gui/views/widgets/__init__.py,sha256=xaTYXw99OL8ye1cpfoKgSwqC7c2B6lrLLsYHRB16m64,481
126
+ canns/pipeline/asa_gui/views/widgets/artifacts_tab.py,sha256=U_fuOCfSmkDhx3G97aod-8UPSIFVz_MrsU4b_ik_5qE,1431
127
+ canns/pipeline/asa_gui/views/widgets/drop_zone.py,sha256=ubllx8LpkpodRRMxsbF9RLQFdEoeUmrSARCrqlDp8Lg,2493
128
+ canns/pipeline/asa_gui/views/widgets/file_list.py,sha256=Q4nXL0YQEdJ9hsMzkW9CaDb-t0I-p6zuu5cFsv0n-no,746
129
+ canns/pipeline/asa_gui/views/widgets/gridscore_tab.py,sha256=abiSsiv-kjR4rkf1aMkW-a0-oQQuoghCFDDSkw9mv9Y,10802
130
+ canns/pipeline/asa_gui/views/widgets/help_dialog.py,sha256=8basm3vFY_elYZKVb59Pc0xzCopi8KpqSN9ks5AO3bI,825
131
+ canns/pipeline/asa_gui/views/widgets/image_tab.py,sha256=_EFuN2cDR1JhkpXYfXNpBGGQm-KXofgEoVWPMIl0tD0,1618
132
+ canns/pipeline/asa_gui/views/widgets/image_viewer.py,sha256=HGTamX9ks2PBNRRk7L7RPhO4MEW4zcYGDFK3behbthY,3632
133
+ canns/pipeline/asa_gui/views/widgets/log_box.py,sha256=YNRU2eJcHtaM864bpGhkJM1SqmSSda3-A_8AgG-EWrc,394
134
+ canns/pipeline/asa_gui/views/widgets/pathcompare_tab.py,sha256=FsHYWjAO_RWu971anOnmEHpTLYxlO3E3x_PsQn2eSpY,6812
135
+ canns/pipeline/asa_gui/views/widgets/popup_combo.py,sha256=M_MbDNm7pbCr1xm2z6Ffge6tjEliAoOPc5LpJ29QHC0,857
136
+ canns/pipeline/gallery/__init__.py,sha256=Plw_j37H5R8-w4Xw29cCsTgh1CEe2rAJrGgX_F-iBG0,288
137
+ canns/pipeline/gallery/__main__.py,sha256=_WuxDPMKGrfvNTJvKRjXhgm9RxbhUsOXxrUIZziC7g0,213
138
+ canns/pipeline/gallery/app.py,sha256=gi5bd3eFVA4SFm7m8EJaOfBRdfquF_iHFu1ntLW6om4,31857
139
+ canns/pipeline/gallery/runner.py,sha256=oJ3VCanwlAukwPtkYid57jSFKZdneq5QGD6Ts_6Of_E,29842
140
+ canns/pipeline/gallery/state.py,sha256=UD1uP3xF2vYOQ0xj-o4117e83L2iQ7EAC3FTwhvV0d8,1635
141
+ canns/pipeline/gallery/styles.tcss,sha256=E2xDFpTp03t-L0uK1BW8YJztMJMQsg9p2e7Eh5zHwS0,1615
142
+ canns/task/__init__.py,sha256=sfo8TBBVAqkx73Nu5lVv77UCwZjKqjt042ezW4Wv2Ec,350
143
+ canns/task/_base.py,sha256=rdRy4mr6x53z4aJv04UJcpqCyv78AxB1k1DhxnriLpg,4401
144
+ canns/task/closed_loop_navigation.py,sha256=QxxLdAg4Zd8763bS001jFqfts3A6_r6hpTTfrh1LdW8,10204
145
+ canns/task/navigation_base.py,sha256=s7mgXKhJyxIEUnSY8zXL3k9kH26MMQDv2xptzObu7Fc,40692
146
+ canns/task/open_loop_navigation.py,sha256=jD77GVIGLaBVm0zKmOfghKk_Vj_9pjkjK8_a40907bU,45402
147
+ canns/task/tracking.py,sha256=KNJ7QkecRimxDa4lLC9JnzTvQGB-c0_lvU-InlmcLOY,31866
148
+ canns/trainer/__init__.py,sha256=ouHRuCuLuwFyrsOWbaotGxHIs5BdiYBtMhqE2k7HcKI,660
149
+ canns/trainer/_base.py,sha256=EQIXnvRvhCo0veTItGQumNeGuerHzsqipxyGZGIt2QI,1536
150
+ canns/trainer/bcm.py,sha256=-KjncsWsVGZVpmcIJIA9BvQf9AFw0M_4PcavAFIwkvA,6349
151
+ canns/trainer/hebbian.py,sha256=b6HcLrYPgcoBJUN6nZSoFILFMFaKYn-cz3FZ9SVOppI,23740
152
+ canns/trainer/oja.py,sha256=I6oCXmZj4wb30_cBVaNrye8YTxPRYLL2cdwULNaaops,5617
153
+ canns/trainer/sanger.py,sha256=cvBB7v9EA-69semVjJu_Pg9AQffZZ5sj0KGnw63CJAo,6638
154
+ canns/trainer/stdp.py,sha256=kH0FYkHbluPhczkTf7TxZrlFME65Y4fRY6b-jqPl10c,8670
155
+ canns/trainer/utils.py,sha256=ZdoLiRqFLfKXsWi0KX3wGUp0OqFikwiou8dPf3xvFhE,2847
156
+ canns/typing/__init__.py,sha256=mXySdfmD8fA56WqZTb1Nj-ZovcejwLzNjuk6PRfTwmA,156
157
+ canns/utils/__init__.py,sha256=OMyZ5jqZAIUS2Jr0qcnvvrx6YM-BZ1EJy5uZYeA3HC0,366
158
+ canns/utils/benchmark.py,sha256=oJ7nvbvnQMh4_MZh7z160NPLp-197X0rEnmnLHYlev4,1361
159
+ canns-0.14.0.dist-info/METADATA,sha256=ZU3RhccxC_TpCagJoT_ML-icvE2CcayxlrV-oMygYhE,9163
160
+ canns-0.14.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
161
+ canns-0.14.0.dist-info/entry_points.txt,sha256=57YF2HZp_BG3GeGB8L0m3wR1sSfNyMXF1q4CKEjce6U,164
162
+ canns-0.14.0.dist-info/licenses/LICENSE,sha256=u6NJ1N-QSnf5yTwSk5UvFAdU2yKD0jxG0Xa91n1cPO4,11306
163
+ canns-0.14.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ canns = canns:master
3
+ canns-gallery = canns.pipeline.gallery:main
4
+ canns-gui = canns.pipeline.asa_gui:main
5
+ canns-tui = canns.pipeline.launcher:main
canns/pipeline/_base.py DELETED
@@ -1,50 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from abc import ABC, abstractmethod
4
- from pathlib import Path
5
- from typing import Any
6
-
7
-
8
- class Pipeline(ABC):
9
- """Abstract base class for CANNs pipelines.
10
-
11
- Pipelines orchestrate multi-step workflows (data preparation, model execution,
12
- visualization, etc.). This base class standardizes how we manage results and
13
- output directories so derived pipelines can focus on domain-specific logic.
14
- """
15
-
16
- def __init__(self) -> None:
17
- self.results: dict[str, Any] | None = None
18
- self.output_dir: Path | None = None
19
-
20
- @abstractmethod
21
- def run(self, *args: Any, **kwargs: Any) -> dict[str, Any]:
22
- """Execute the pipeline and return a mapping of generated artifacts."""
23
-
24
- def reset(self) -> None:
25
- """Reset stored state so the pipeline can be executed again cleanly."""
26
- self.results = None
27
- self.output_dir = None
28
-
29
- def prepare_output_dir(self, output_dir: str | Path, *, create: bool = True) -> Path:
30
- """Validate and optionally create the output directory for derived pipelines."""
31
- path = Path(output_dir)
32
- if create:
33
- path.mkdir(parents=True, exist_ok=True)
34
- self.output_dir = path
35
- return path
36
-
37
- def set_results(self, results: dict[str, Any]) -> dict[str, Any]:
38
- """Store pipeline results and return them for convenient chaining."""
39
- self.results = results
40
- return results
41
-
42
- def get_results(self) -> dict[str, Any]:
43
- """Return stored results or raise if the pipeline has not been executed."""
44
- if self.results is None:
45
- raise RuntimeError("Pipeline results are not available; call run() first.")
46
- return self.results
47
-
48
- def has_results(self) -> bool:
49
- """Check whether the pipeline has already produced results."""
50
- return self.results is not None
@@ -1,89 +0,0 @@
1
- canns/__init__.py,sha256=ZK4buN-csoLKXaKtoDrOoZbNGCoLCNuF2XS96X8LbH8,1523
2
- canns/_version.py,sha256=zIvJPOGBFvo4VV6f586rlO_bvhuFp1fsxjf6xhsqkJY,1547
3
- canns/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- canns/analyzer/__init__.py,sha256=EQ02fYHkpMADp-ojpVCVtapuSPkl6j5WVfdPy0mOTs4,506
5
- canns/analyzer/data/__init__.py,sha256=5LJ8Q4SyDpi6CAzyW3lSpra3I0BgG20kmQMceONw7A4,158
6
- canns/analyzer/data/asa/__init__.py,sha256=vfZCggZ_FvXwlYXLKErc_eltN6nOQiHWIivGYqpt8NM,1885
7
- canns/analyzer/data/asa/cohospace.py,sha256=n6DfPWUH_k67KrPbNMt1EUdxMuRFFmXCaqh4gcuXngM,27847
8
- canns/analyzer/data/asa/config.py,sha256=zVs-snLkD93hGc97GEX9CkcjTtUqORvMCs3khHhqd64,6288
9
- canns/analyzer/data/asa/decode.py,sha256=NG8vVx2cPG7uSJDovnC2vzk0dsqU8oR4jaNPxxrvCc0,16501
10
- canns/analyzer/data/asa/embedding.py,sha256=rT3hOHk6BzHF1X5YznIFxE_dDveklbT0fx9GtA2w3z0,9550
11
- canns/analyzer/data/asa/filters.py,sha256=D-1mDVn4hBEAphKUgx1gQEUfgbghKcNQhZmr4xEExQA,7146
12
- canns/analyzer/data/asa/fly_roi.py,sha256=_scBOd-4t9yv_1tHk7wbXJwPieU-L-QtFJY6fhHpxDI,38031
13
- canns/analyzer/data/asa/fr.py,sha256=jt99H50e1RRAQgMIdkfK0rBbembZJEr9SMrxK-ZI_LA,13449
14
- canns/analyzer/data/asa/path.py,sha256=p3r8EGcJi8NewNFutr3kdO-ekdU_5Icpy6nAoELzSq4,12233
15
- canns/analyzer/data/asa/plotting.py,sha256=xuKRuq12pITK0BOC4Bj3ZfJs-07DA2OUHCpJmtJLOnw,40852
16
- canns/analyzer/data/asa/tda.py,sha256=Hn110SBN4wKgHmcwPRkxHdbQ5DFW2xLdSv26J37_Zxc,30342
17
- canns/analyzer/metrics/__init__.py,sha256=WaTCJE2WhqPtZXYTtMilF_f0LZUfz2h9a25HzwmCwP8,132
18
- canns/analyzer/metrics/spatial_metrics.py,sha256=ZdS7tGH3lMgNlSYoHlH8IPsCw4XL0KtEnGALg_WHRX8,8965
19
- canns/analyzer/metrics/systematic_ratemap.py,sha256=MzXfa6_fGgrxD5xEd4hfrZR_fyUmhXQCxnPE3hUonE8,14004
20
- canns/analyzer/metrics/utils.py,sha256=Ft6lagKdTRJIz6hj9Zmy0i-IU--_Kdrrfzh6xVOQb8g,7402
21
- canns/analyzer/model_specific/__init__.py,sha256=UCw_MwJJh2AQtnfVeJSzvTVTdVN1ev5oGGoyZtSt1PU,80
22
- canns/analyzer/model_specific/hopfield.py,sha256=zNPChxX_GuCgc5-KP1KMwHyUDVUh_5EMQzZygOGtIW0,7741
23
- canns/analyzer/slow_points/__init__.py,sha256=teH7uaVLCXeZGirfez8i3VkbR49pd4isedEtSzweHQs,532
24
- canns/analyzer/slow_points/checkpoint.py,sha256=s4_-5HZJvmnyFqpK1O9WWYkhAhZj1i5jn9SH6XTGwoY,2980
25
- canns/analyzer/slow_points/finder.py,sha256=y-YKg-LI7lRM4JMghfcb5NGSYhIM2VPRA37YSCkVK_4,25437
26
- canns/analyzer/slow_points/fixed_points.py,sha256=Qp-iezwydWWUTchb2hGXJv0QKJqIm9gSG6hh0H9Eb6E,10099
27
- canns/analyzer/slow_points/visualization.py,sha256=sRmmxs900OSB680MTp0PNIGLpS5i5AmJ58ek20vmrSE,10610
28
- canns/analyzer/visualization/__init__.py,sha256=pNIokzS8y3ydzEMmVm1FNrOMRALDeuOHbcwZicPUm90,2131
29
- canns/analyzer/visualization/energy_plots.py,sha256=u0TOLzd7AWEfs-tRYZg1UBwsGYGPF_eWsMip1ZG9jPA,35671
30
- canns/analyzer/visualization/spatial_plots.py,sha256=30m02xhYkZfEETCtvBSwLix9SEOPcLZTg0AGGFvPc2w,34605
31
- canns/analyzer/visualization/spike_plots.py,sha256=wOm4gh_3obJy6gwo31maoaiZ7O8rsoYeFdhseoVmX78,12280
32
- canns/analyzer/visualization/theta_sweep_plots.py,sha256=2kiP7-IizqGm0q-ohQ4HhDZpm3sqs_lgn3GErHEZzbI,62262
33
- canns/analyzer/visualization/tuning_plots.py,sha256=9JOeC4dlulVzpHQWDVy3dlJnxcBZiOPeapPdVFR-7Zk,5178
34
- canns/analyzer/visualization/core/__init__.py,sha256=Vngm2A05cTu9ZVEYepTF7lVpuwQvMRjXs9XPLfZzedI,1928
35
- canns/analyzer/visualization/core/animation.py,sha256=qfBYMd81_GwWEw4MHOu3GrVXJtHS9W1xxtmOx-J5ZyM,7664
36
- canns/analyzer/visualization/core/backend.py,sha256=Nbk-ARL_xeWlb3nl5SUPrFQNns2wq5BeHU3Q_tAbd_c,9539
37
- canns/analyzer/visualization/core/config.py,sha256=9_n5hrvJXZgv32OlE_PuNh4JaPgw3dRAp_8LRzYnt_w,24131
38
- canns/analyzer/visualization/core/jupyter_utils.py,sha256=JD56VeeWb7w9t5DJ8TpgnxRWkUK46ArbbPSTlFdIM10,6034
39
- canns/analyzer/visualization/core/rendering.py,sha256=YCbiXu8MOAqE9FVb_id5JKr5g9O64sCh-dOs0EK4gnU,18291
40
- canns/analyzer/visualization/core/writers.py,sha256=HLsP953hgsv140ZX2XPzHfCUTqenjmjbLNrbknKam_s,15607
41
- canns/data/__init__.py,sha256=BjQWgDYxh4jqtcKzcEZbdTech92AUzt_1KsDU1S88kM,864
42
- canns/data/datasets.py,sha256=TRHxQGlMPoboiTPKhjTv1AMGbMnIt9T472Juyz4PYS0,13480
43
- canns/data/loaders.py,sha256=S2JFUN83MsXCN0FBRIrxpJvW_EyXGGptis4QXvS3FSI,13622
44
- canns/models/__init__.py,sha256=2j5josUkwQQq8Of_gLjecYry65DuC96J8X-RlRqskYs,305
45
- canns/models/basic/__init__.py,sha256=mNqyGz_z29YNMC345b_VyuVI9hQQ9NFe9mIU9f5KGVU,329
46
- canns/models/basic/_base.py,sha256=L7oECkO5-5j9r1faaz6RDIqQKHy6DEflHRGHyaW9ARg,3800
47
- canns/models/basic/cann.py,sha256=uR7j5u71b4qLFK_0xS5pXTZoLyEOa0tvsmT3D0O-CMQ,24588
48
- canns/models/basic/grid_cell.py,sha256=8nGXgXAh8UDNx3j3taqwBOsgOBVxjIk9u45v9zFSvrE,31955
49
- canns/models/basic/hierarchical_model.py,sha256=V2QRuTVirT3_7quFC6sJb1JyNIMbo5WlAo7BybV6QKE,53847
50
- canns/models/basic/theta_sweep_model.py,sha256=GGd3_X81eNzPoguXbleVWO_ID253FzQOqdxEPA5VJUo,34075
51
- canns/models/brain_inspired/__init__.py,sha256=MuG-adTkIIhOxs63u0f0b0oO6srilGQzR_Gta8qXeXY,620
52
- canns/models/brain_inspired/_base.py,sha256=YyzgmCh-YzUsK22NbSAapUWHk03jwJ49b1kRCfMWbQk,3820
53
- canns/models/brain_inspired/hopfield.py,sha256=KQmXWBvUTdQ17t9VG-8Sy_uJznEt4eunONYJsiN5GvY,6903
54
- canns/models/brain_inspired/linear.py,sha256=oRjJnTqrheAADA5unYBu83RSm4UoUH-BK2Mt_liwDtw,6141
55
- canns/models/brain_inspired/spiking.py,sha256=hr2w7c6Eobxwp2z6vkV9Yivpv1964-cno-XOfMSh3RU,5557
56
- canns/models/hybrid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- canns/pipeline/__init__.py,sha256=OgFh5UXId99j_W4MkcpTaYD9qpQVXt-v9xN8cCY8sSc,371
58
- canns/pipeline/_base.py,sha256=bYCmvXQ_0vGF-MEVpi0sUljrqmW6Ax8csQ5fcnX7nAE,1869
59
- canns/pipeline/asa/__init__.py,sha256=JR4T0onfmkKMOrUq-k0San1RTSb1om6cd27tWovBp0c,466
60
- canns/pipeline/asa/__main__.py,sha256=_KgAeuGQ2-SXmuZhvZCkRx9luFf7VgKUCuszNlUswyA,197
61
- canns/pipeline/asa/app.py,sha256=L5al6PrGoEzRNosZlHbn-VaTxXCoVyfKFn0f1e-0FUI,49906
62
- canns/pipeline/asa/runner.py,sha256=PfHXlI-m3m-IYVFcFRhSODfPoRlCrloDOqEftvAfasg,42723
63
- canns/pipeline/asa/screens.py,sha256=DbqidxmoKe4KzSLuxuriVv1PIVFn5Z-PfScVfjrIiEA,5954
64
- canns/pipeline/asa/state.py,sha256=XukidfcFIOmm9ttT226FOTYR5hv2VAY8_DZt7V1Ml2g,6955
65
- canns/pipeline/asa/styles.tcss,sha256=eaXI3rQeWdBYmWdLJMMiSO6acHtreLRVKKoIHb2-dBk,3349
66
- canns/pipeline/asa/widgets.py,sha256=3vPGGQWP9V5FwuwqykCVp7dzAHdpcFkDqib0DtIw-lQ,8087
67
- canns/pipeline/gallery/__init__.py,sha256=PPOvxmTRzEnj33jHlsFlaWuEfhrcNe39pMPQkTisjlo,187
68
- canns/task/__init__.py,sha256=sfo8TBBVAqkx73Nu5lVv77UCwZjKqjt042ezW4Wv2Ec,350
69
- canns/task/_base.py,sha256=rdRy4mr6x53z4aJv04UJcpqCyv78AxB1k1DhxnriLpg,4401
70
- canns/task/closed_loop_navigation.py,sha256=QxxLdAg4Zd8763bS001jFqfts3A6_r6hpTTfrh1LdW8,10204
71
- canns/task/navigation_base.py,sha256=s7mgXKhJyxIEUnSY8zXL3k9kH26MMQDv2xptzObu7Fc,40692
72
- canns/task/open_loop_navigation.py,sha256=jD77GVIGLaBVm0zKmOfghKk_Vj_9pjkjK8_a40907bU,45402
73
- canns/task/tracking.py,sha256=KNJ7QkecRimxDa4lLC9JnzTvQGB-c0_lvU-InlmcLOY,31866
74
- canns/trainer/__init__.py,sha256=ouHRuCuLuwFyrsOWbaotGxHIs5BdiYBtMhqE2k7HcKI,660
75
- canns/trainer/_base.py,sha256=EQIXnvRvhCo0veTItGQumNeGuerHzsqipxyGZGIt2QI,1536
76
- canns/trainer/bcm.py,sha256=-KjncsWsVGZVpmcIJIA9BvQf9AFw0M_4PcavAFIwkvA,6349
77
- canns/trainer/hebbian.py,sha256=b6HcLrYPgcoBJUN6nZSoFILFMFaKYn-cz3FZ9SVOppI,23740
78
- canns/trainer/oja.py,sha256=I6oCXmZj4wb30_cBVaNrye8YTxPRYLL2cdwULNaaops,5617
79
- canns/trainer/sanger.py,sha256=cvBB7v9EA-69semVjJu_Pg9AQffZZ5sj0KGnw63CJAo,6638
80
- canns/trainer/stdp.py,sha256=kH0FYkHbluPhczkTf7TxZrlFME65Y4fRY6b-jqPl10c,8670
81
- canns/trainer/utils.py,sha256=ZdoLiRqFLfKXsWi0KX3wGUp0OqFikwiou8dPf3xvFhE,2847
82
- canns/typing/__init__.py,sha256=mXySdfmD8fA56WqZTb1Nj-ZovcejwLzNjuk6PRfTwmA,156
83
- canns/utils/__init__.py,sha256=OMyZ5jqZAIUS2Jr0qcnvvrx6YM-BZ1EJy5uZYeA3HC0,366
84
- canns/utils/benchmark.py,sha256=oJ7nvbvnQMh4_MZh7z160NPLp-197X0rEnmnLHYlev4,1361
85
- canns-0.13.1.dist-info/METADATA,sha256=4HIOm94szk2GaS6A9Kbp9nZHXfoqVvNj_rOBdrExZWE,8827
86
- canns-0.13.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
87
- canns-0.13.1.dist-info/entry_points.txt,sha256=HDzYp0e9E1wfKYRkYtnUgVKK_u33_7eIn9exgm7t-wg,75
88
- canns-0.13.1.dist-info/licenses/LICENSE,sha256=u6NJ1N-QSnf5yTwSk5UvFAdU2yKD0jxG0Xa91n1cPO4,11306
89
- canns-0.13.1.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- canns = canns:master
3
- canns-tui = canns.pipeline.asa:main
File without changes