sinabs 3.1.1.dev1__tar.gz → 3.1.3__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.
Files changed (325) hide show
  1. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/PKG-INFO +2 -2
  2. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/README.md +1 -1
  3. sinabs-3.1.3/docs/_static/visualize_spike_count/spike_count.png +0 -0
  4. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/release_notes.md +18 -0
  5. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/conf.py +0 -1
  6. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/utils.py +7 -1
  7. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/iaf_neuron_model.ipynb +0 -1
  8. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/available_network_arch.md +80 -67
  9. sinabs-3.1.3/docs/speck/faqs/imgs/complex-network.png +0 -0
  10. sinabs-3.1.3/docs/speck/faqs/imgs/network-with-residual-connection.png +0 -0
  11. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/leak_neuron.ipynb +3 -3
  12. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/nmnist_quick_start.ipynb +142 -50
  13. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/play_with_speck_dvs.ipynb +28 -18
  14. sinabs-3.1.3/docs/speck/notebooks/power_monitoring.ipynb +703 -0
  15. sinabs-3.1.3/docs/speck/notebooks/using_readout_layer.ipynb +1023 -0
  16. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/notebooks/visualize_speck_dvs_input.ipynb +45 -17
  17. sinabs-3.1.3/docs/speck/notebooks/visualize_spike_count.ipynb +588 -0
  18. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/nmnist.ipynb +0 -1
  19. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/dynapcnn.py +2 -2
  20. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_visualizer.py +9 -5
  21. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/io.py +4 -1
  22. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/nir_graph_extractor.py +4 -3
  23. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/pool2d.py +1 -1
  24. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/nir.py +4 -3
  25. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/PKG-INFO +2 -2
  26. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/SOURCES.txt +5 -2
  27. sinabs-3.1.3/sinabs.egg-info/pbr.json +1 -0
  28. {sinabs-3.1.1.dev1/tests/test_dynapcnn → sinabs-3.1.3/tests}/hw_utils.py +7 -4
  29. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_device_movement.py +1 -1
  30. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_discover_device.py +1 -1
  31. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_large_net.py +1 -1
  32. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_neuron_leak.py +1 -6
  33. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_single_neuron_hardware.py +1 -2
  34. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_visualizer.py +27 -25
  35. sinabs-3.1.3/tests/test_dynapcnnnetwork/__init__.py +0 -0
  36. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/conftest_dynapcnnnetwork.py +15 -0
  37. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_1.py +13 -14
  38. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_2.py +20 -21
  39. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_4.py +6 -4
  40. sinabs-3.1.3/tests/test_dynapcnnnetwork/model_dummy_5.py +199 -0
  41. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/test_dynapcnnnetwork.py +24 -1
  42. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_nir.py +15 -0
  43. sinabs-3.1.1.dev1/docs/_static/visualize_spike_count/spike_count.png +0 -0
  44. sinabs-3.1.1.dev1/docs/speck/faqs/imgs/two-independent-networks.png +0 -0
  45. sinabs-3.1.1.dev1/docs/speck/notebooks/power_monitoring.ipynb +0 -755
  46. sinabs-3.1.1.dev1/docs/speck/notebooks/using_readout_layer.ipynb +0 -1090
  47. sinabs-3.1.1.dev1/docs/speck/notebooks/visualize_spike_count.ipynb +0 -719
  48. sinabs-3.1.1.dev1/sinabs.egg-info/pbr.json +0 -1
  49. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.coveragerc +0 -0
  50. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.github/workflows/ci-pipeline.yml +0 -0
  51. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.pre-commit-config.yaml +0 -0
  52. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/.readthedocs.yaml +0 -0
  53. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/AUTHORS +0 -0
  54. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/CITATION.cff +0 -0
  55. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/LICENSE +0 -0
  56. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/codecov.yml +0 -0
  57. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/Makefile +0 -0
  58. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/dataflow_layers.png +0 -0
  59. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/event_preprocessing_pipeline.png +0 -0
  60. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/memory_constraints.png +0 -0
  61. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/sinabs-dynapcnn-role.png +0 -0
  62. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/speck_dynapcnn.png +0 -0
  63. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/Overview/speck_top_level.png +0 -0
  64. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/dynapcnn_devkit.png +0 -0
  65. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_devkit.png +0 -0
  66. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_module.png +0 -0
  67. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/devkits_images/speck_module_devkit.png +0 -0
  68. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/dvs_input_flow.png +0 -0
  69. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/dynapcnn_visualizer.png +0 -0
  70. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/nmnist_quick_start/spike_input_flow.png +0 -0
  71. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/dynamic_power_samna_graph.png +0 -0
  72. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/idle_power_samna_graph.png +0 -0
  73. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/power_monitoring/power_plot.png +0 -0
  74. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/sinabs-logo-lowercase-whitebg.png +0 -0
  75. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/sinabs-logo-lowercase.png +0 -0
  76. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/tips_for_training/exceeding_bandwidth.png +0 -0
  77. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/handcraft_weights.png +0 -0
  78. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/neuron_id_mismatch.png +0 -0
  79. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/readout_layer.png +0 -0
  80. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/using_readout_layer/samna_graph.png +0 -0
  81. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/visualize_speck_dvs/samna_graph.png +0 -0
  82. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_static/visualize_spike_count/samna_graph.png +0 -0
  83. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_templates/class_activation.rst +0 -0
  84. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/_templates/class_layer.rst +0 -0
  85. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/about.rst +0 -0
  86. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/contributing.md +0 -0
  87. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/differences.md +0 -0
  88. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/about/info.md +0 -0
  89. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/activation.rst +0 -0
  90. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/api.rst +0 -0
  91. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/from_torch.rst +0 -0
  92. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/hooks.rst +0 -0
  93. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/layers.rst +0 -0
  94. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/network.rst +0 -0
  95. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/nir.rst +0 -0
  96. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/synopcounter.rst +0 -0
  97. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/api/utils.rst +0 -0
  98. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/contact.md +0 -0
  99. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/README.rst +0 -0
  100. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/README.rst +0 -0
  101. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_alif.py +0 -0
  102. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_exp_leaky.py +0 -0
  103. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_iaf.py +0 -0
  104. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/layers/plot_lif.py +0 -0
  105. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/README.rst +0 -0
  106. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_maxspike.py +0 -0
  107. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_multispike.py +0 -0
  108. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/spike_fns/plot_singlespike.py +0 -0
  109. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/README.rst +0 -0
  110. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_gaussian.py +0 -0
  111. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_heaviside.py +0 -0
  112. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_multigaussian.py +0 -0
  113. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_periodicexponential.py +0 -0
  114. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/gallery/surrogate_grad_fns/plot_singleexponential.py +0 -0
  115. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/fundamentals.rst +0 -0
  116. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/getting_started.rst +0 -0
  117. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/install.rst +0 -0
  118. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/python_pyenv_pipenv.rst +0 -0
  119. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/getting_started/quickstart.ipynb +0 -0
  120. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/activations.ipynb +0 -0
  121. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/custom_hooks.ipynb +0 -0
  122. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/how_tos.rst +0 -0
  123. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/synops_loss_ann.ipynb +0 -0
  124. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/how_tos/synops_loss_snn.ipynb +0 -0
  125. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/index.md +0 -0
  126. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/make.bat +0 -0
  127. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/plugins/plugins.rst +0 -0
  128. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/requirements.txt +0 -0
  129. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/advanced_concepts.rst +0 -0
  130. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/chip_factory.rst +0 -0
  131. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/config_builder.rst +0 -0
  132. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/crop2d.rst +0 -0
  133. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/discretize.rst +0 -0
  134. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dvs_layer.rst +0 -0
  135. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn.rst +0 -0
  136. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_layer.rst +0 -0
  137. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_network.rst +0 -0
  138. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/dynapcnn_visualizer.rst +0 -0
  139. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/exceptions.rst +0 -0
  140. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/flipdims.rst +0 -0
  141. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/io.rst +0 -0
  142. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/mapping.rst +0 -0
  143. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/specksim.rst +0 -0
  144. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/api/dynapcnn/utils.rst +0 -0
  145. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/dangers.md +0 -0
  146. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/add_new_device.md +0 -0
  147. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/available_algorithmic_operation.md +0 -0
  148. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/chip_errata.md +0 -0
  149. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/device_management.md +0 -0
  150. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/imgs/network-with-merge-and-split.png +0 -0
  151. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/imgs/two-networks-merging-output.png +0 -0
  152. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/index.rst +0 -0
  153. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/output_monitoring.md +0 -0
  154. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/save_hardware_config_as_binary.md +0 -0
  155. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/faqs/tips_for_training.md +0 -0
  156. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/index.rst +0 -0
  157. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/overview.md +0 -0
  158. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/specksim.md +0 -0
  159. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/the_basics.md +0 -0
  160. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/tutorials.rst +0 -0
  161. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/speck/visualizer.md +0 -0
  162. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/LeNet_5_EngChinese.ipynb +0 -0
  163. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/bptt.ipynb +0 -0
  164. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/nir_to_speck.ipynb +0 -0
  165. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/scnn_mnist.nir +0 -0
  166. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/tutorials.rst +0 -0
  167. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/weight_scaling.md +0 -0
  168. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/docs/tutorials/weight_transfer_mnist.ipynb +0 -0
  169. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_DVSLayer_given.ipynb +0 -0
  170. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_DVSLayer_given_followed_by_pool.ipynb +0 -0
  171. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_deployment.ipynb +0 -0
  172. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_need_create_DVSLayer.ipynb +0 -0
  173. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_no_DVSLayer.ipynb +0 -0
  174. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_with_batchnorm.ipynb +0 -0
  175. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/dynapcnn_network/snn_with_multiple_batchnorm.ipynb +0 -0
  176. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/dynapcnn_network.py +0 -0
  177. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/mnist_params.pt +0 -0
  178. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/mnist/specksim_network.py +0 -0
  179. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/dvs_gesture_params.pt +0 -0
  180. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/gesture_viz.py +0 -0
  181. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/01_armroll.png +0 -0
  182. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/02_handclap.png +0 -0
  183. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/03_lefthandclockwise.png +0 -0
  184. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/04_lefthandcounterclockwise.png +0 -0
  185. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/05_lefthandwave.png +0 -0
  186. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/06_righthandwave.png +0 -0
  187. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/07_righthandclockwise.png +0 -0
  188. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/08_righthandcounterclockwise.png +0 -0
  189. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/09_airdrums.png +0 -0
  190. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/10_airguitar.png +0 -0
  191. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/examples/visualizer/icons/11_other.png +0 -0
  192. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/jupyterlab-requirements.txt +0 -0
  193. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/pull_request_template.md +0 -0
  194. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/requirements.txt +0 -0
  195. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/setup.cfg +0 -0
  196. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/setup.py +0 -0
  197. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/__init__.py +0 -0
  198. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/__init__.py +0 -0
  199. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/quantize.py +0 -0
  200. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/reset_mechanism.py +0 -0
  201. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/spike_generation.py +0 -0
  202. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/activation/surrogate_gradient_fn.py +0 -0
  203. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/__init__.py +0 -0
  204. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/__init__.py +0 -0
  205. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chip_factory.py +0 -0
  206. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/__init__.py +0 -0
  207. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/speck2e.py +0 -0
  208. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/chips/speck2f.py +0 -0
  209. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/config_builder.py +0 -0
  210. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/connectivity_specs.py +0 -0
  211. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/crop2d.py +0 -0
  212. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/discretize.py +0 -0
  213. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dvs_layer.py +0 -0
  214. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_layer.py +0 -0
  215. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_layer_utils.py +0 -0
  216. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnn_network.py +0 -0
  217. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/dynapcnnnetwork_module.py +0 -0
  218. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/exceptions.py +0 -0
  219. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/flipdims.py +0 -0
  220. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/mapping.py +0 -0
  221. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/sinabs_edges_handler.py +0 -0
  222. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/specksim.py +0 -0
  223. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/utils.py +0 -0
  224. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/backend/dynapcnn/weight_rescaling_methods.py +0 -0
  225. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/cnnutils.py +0 -0
  226. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/conversion.py +0 -0
  227. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/from_torch.py +0 -0
  228. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/hooks.py +0 -0
  229. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/__init__.py +0 -0
  230. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/alif.py +0 -0
  231. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/channel_shift.py +0 -0
  232. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/crop2d.py +0 -0
  233. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/exp_leak.py +0 -0
  234. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/__init__.py +0 -0
  235. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/alif.py +0 -0
  236. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/functional/lif.py +0 -0
  237. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/iaf.py +0 -0
  238. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/lif.py +0 -0
  239. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/merge.py +0 -0
  240. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/neuromorphic_relu.py +0 -0
  241. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/quantize.py +0 -0
  242. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/reshape.py +0 -0
  243. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/stateful_layer.py +0 -0
  244. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/layers/to_spike.py +0 -0
  245. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/network.py +0 -0
  246. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/synopcounter.py +0 -0
  247. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/utils.py +0 -0
  248. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs/validate_memory_speck.py +0 -0
  249. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/dependency_links.txt +0 -0
  250. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/not-zip-safe +0 -0
  251. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/requires.txt +0 -0
  252. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/sinabs.egg-info/top_level.txt +0 -0
  253. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/__init__.py +0 -0
  254. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/conv_input.pth +0 -0
  255. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/conv_layer_synops.pth +0 -0
  256. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/firing_rates.pth +0 -0
  257. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/firing_rates_per_neuron.pth +0 -0
  258. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/input_diffs.pth +0 -0
  259. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/inputs_and_results/hooks/model_synops.pth +0 -0
  260. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/mnist_params.pt +0 -0
  261. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/models/README.txt +0 -0
  262. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/models/synop_hook_model.pth +0 -0
  263. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/requirements.txt +0 -0
  264. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_activations.py +0 -0
  265. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_batch_mismatch.py +0 -0
  266. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_batch_size_update.py +0 -0
  267. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_conversion.py +0 -0
  268. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_copy.py +0 -0
  269. {sinabs-3.1.1.dev1/tests/test_dynapcnnlayer → sinabs-3.1.3/tests/test_dynapcnn}/__init__.py +0 -0
  270. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/custom_jit_filters.py +0 -0
  271. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_auto_mapping.py +0 -0
  272. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_compatible_layer_build.py +0 -0
  273. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_config_making.py +0 -0
  274. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_device_name_mapping.py +0 -0
  275. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_discretized.py +0 -0
  276. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_doorbell.py +0 -0
  277. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_dvs_input.py +0 -0
  278. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_dvs_layer.py +0 -0
  279. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_event_conversion.py +0 -0
  280. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_individual_cases.py +0 -0
  281. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_learning.py +0 -0
  282. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_monitoring.py +0 -0
  283. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnn/test_speck2e.py +0 -0
  284. {sinabs-3.1.1.dev1/tests/test_dynapcnnnetwork → sinabs-3.1.3/tests/test_dynapcnnlayer}/__init__.py +0 -0
  285. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/conftest_dynapcnnlayer.py +0 -0
  286. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_1.py +0 -0
  287. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_2.py +0 -0
  288. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_3.py +0 -0
  289. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/model_dummy_4.py +0 -0
  290. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnlayer/test_dynapcnnlayer.py +0 -0
  291. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_3.py +0 -0
  292. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/model_dummy_seq.py +0 -0
  293. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_dynapcnnnetwork/test_failcases.py +0 -0
  294. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_from_model.py +0 -0
  295. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/conftest_graph_extractor.py +0 -0
  296. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_1.py +0 -0
  297. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_2.py +0 -0
  298. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_3.py +0 -0
  299. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/model_dummy_4.py +0 -0
  300. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_graph_extractor/test_graph_extractor.py +0 -0
  301. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_hooks.py +0 -0
  302. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_alif.py +0 -0
  303. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_channelshift.py +0 -0
  304. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_crop2d.py +0 -0
  305. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_exp_leak.py +0 -0
  306. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_iaf.py +0 -0
  307. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_img2spk.py +0 -0
  308. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_lif.py +0 -0
  309. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_maxpooling.py +0 -0
  310. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_merge.py +0 -0
  311. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_neuromorphic_relu.py +0 -0
  312. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_reshaping.py +0 -0
  313. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_sig2spk.py +0 -0
  314. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_layers/test_stateful_layer.py +0 -0
  315. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_network_class.py +0 -0
  316. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_normalize_weights.py +0 -0
  317. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_onnx.py +0 -0
  318. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_quantize.py +0 -0
  319. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_bindings.py +0 -0
  320. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_conversion.py +0 -0
  321. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_specksim/test_specksim_network.py +0 -0
  322. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_surrogate_gradients.py +0 -0
  323. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_synops_counter.py +0 -0
  324. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/test_utils.py +0 -0
  325. {sinabs-3.1.1.dev1 → sinabs-3.1.3}/tests/weights/README.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sinabs
3
- Version: 3.1.1.dev1
3
+ Version: 3.1.3
4
4
  Summary: SynSense Spiking Neural Network simulator for deep neural networks (DNNs).
5
5
  Author: SynSense (formerly AiCTX)
6
6
  Author-email: support@synsense.ai
@@ -87,7 +87,7 @@ Sinabs is published under Apache v2.0. See the LICENSE file for details.
87
87
 
88
88
  Contributing to Sinabs
89
89
  ------------------------
90
- Checkout the [contributing](https://sinabs.readthedocs.io/en/develop/about/contributing.html) page for more info.
90
+ Checkout the [contributing](https://sinabs.readthedocs.io/develop/about/contributing.html) page for more info.
91
91
 
92
92
 
93
93
  Citation
@@ -49,7 +49,7 @@ Sinabs is published under Apache v2.0. See the LICENSE file for details.
49
49
 
50
50
  Contributing to Sinabs
51
51
  ------------------------
52
- Checkout the [contributing](https://sinabs.readthedocs.io/en/develop/about/contributing.html) page for more info.
52
+ Checkout the [contributing](https://sinabs.readthedocs.io/develop/about/contributing.html) page for more info.
53
53
 
54
54
 
55
55
  Citation
@@ -1,5 +1,23 @@
1
1
  # Release notes
2
2
 
3
+ ## v3.1.3 (04/02/2026)
4
+
5
+ * Add tests for mapping non-sequential networks
6
+ * Fix networks used for tests, they didnt meet the hardware constraints
7
+ * Update documentation with the non-sequential networks types that have a test
8
+
9
+ ## v3.1.2 (12/12/2025)
10
+
11
+ * Update use of visualizer in Sinabs tutorials, previous tutorials were using a deprecated visualizer version.
12
+ * Fix issue with `chip_layers_ordering` in the visualizer. `chip_layers_ordering` was deprecated in Sinabs 3.1.0 and `layer2core_map` needs to be used instead.
13
+
14
+ ## v3.1.1 (27/11/2025)
15
+
16
+ * Fix NIR export of Conv1d layer which expected an input_shape parameter.
17
+ * Fix broken link on documentation.
18
+ * Fix missing plots on `Neuron Models` gallery.
19
+ * Fix `open_device` function that would thrown an error if an unsupported SynSense device was connected to the computer.
20
+
3
21
  ## v3.1.0 (31/10/2025)
4
22
 
5
23
  * Add mapping of non-sequential networks:
@@ -31,7 +31,6 @@ sphinx_gallery_conf = {
31
31
  # "backreferences_dir": "gen_modules/backreferences",
32
32
  "doc_module": ("sinabs",),
33
33
  "download_all_examples": False,
34
- "ignore_pattern": r"utils\.py",
35
34
  }
36
35
 
37
36
  # Napoleon settings
@@ -1,8 +1,14 @@
1
+ """
2
+ ==============================
3
+ Utility Function
4
+ ==============================
5
+ Utility function for plots in the documentation.
6
+ """
7
+
1
8
  import matplotlib.pyplot as plt
2
9
  import torch
3
10
 
4
11
  import sinabs
5
- import sinabs.layers as sl
6
12
 
7
13
 
8
14
  def plot_evolution(neuron_model: sinabs.layers, input: torch.Tensor):
@@ -163,7 +163,6 @@
163
163
  "import torch\n",
164
164
  "import sinabs.layers as sl\n",
165
165
  "\n",
166
- "\n",
167
166
  "# Define a neuron in 'SINABS'\n",
168
167
  "neuron = sl.IAF()\n",
169
168
  "\n",
@@ -39,28 +39,31 @@ dynapcnn.to(devcie="your device", chip_layers_ordering=[2, 5, 7, 1])
39
39
 
40
40
  ## What network structure can I define?
41
41
 
42
- `Sinabs` can parse a `torch.nn.Sequential` like architecture, so it is recommended to
43
- use a `Sequential` like network.
42
+ `Sinabs` can parse a `torch.nn.Sequential` like architecture, so it is recommended to use a `Sequential` like network.
44
43
 
45
44
  As of `v3.1.0`, we released a network graph extraction feature that helps users deploy their networks with more complex architectures into the devkit.
46
45
  Our `Speck` chip, in fact, supports branched architectures. With the graph extraction feature, we support a range of network structures, as shown below:
47
46
 
47
+ A network with a merge and a split:
48
48
 
49
- Two independent networks:
50
-
51
- ![Two independent networks](imgs/two-independent-networks.png)
49
+ ![A network with a merge and a split](imgs/network-with-merge-and-split.png)
52
50
 
53
51
  Two networks with merging outputs:
54
52
 
55
53
  ![Two networks with merging outputs](imgs/two-networks-merging-output.png)
56
54
 
57
- A network with a merge and a split:
55
+ A network with residual connections:
58
56
 
59
- ![A network with a merge and a split](imgs/network-with-merge-and-split.png)
57
+ ![A network with residual connections](imgs/network-with-residual-connection.png)
58
+
59
+ A more complex network:
60
60
 
61
+ ![A more complex network](imgs/complex-network.png)
61
62
 
62
63
  Note: with the graph extracture feature it is possible to implement recurrent neural networks. However, this is not recommended or supported as it can result in deadlock on the chip.
63
64
 
65
+ Note2: the use of two parallel network although supported by our chip was not fully considered in our sinabs implementation.
66
+
64
67
  ## How to make use of the graph extraction feature?
65
68
 
66
69
  For general architectures, users need to define their classes, by defining at least the `__init__` method with all the layers, as well as an appropriate `forward` method.
@@ -68,64 +71,70 @@ For general architectures, users need to define their classes, by defining at le
68
71
  Here is an example to define a network with a merge and a split:
69
72
 
70
73
  ```python
74
+ import torch
71
75
  import torch.nn as nn
72
76
 
73
77
  from sinabs.activation.surrogate_gradient_fn import PeriodicExponential
74
78
  from sinabs.layers import IAFSqueeze, Merge, SumPool2d
75
79
 
80
+
76
81
  class SNN(nn.Module):
77
82
  def __init__(self, batch_size) -> None:
78
83
  super().__init__()
79
-
80
- self.conv1 = nn.Conv2d(2, 1, 2, 1, bias=False)
81
- self.iaf1 = IAFSqueeze(
84
+ # -- graph node A --
85
+ self.conv_A = nn.Conv2d(2, 4, 2, 1, bias=False)
86
+ self.iaf_A = IAFSqueeze(
82
87
  batch_size=batch_size,
83
88
  min_v_mem=-1.0,
84
89
  spike_threshold=1.0,
85
90
  surrogate_grad_fn=PeriodicExponential(),
86
91
  )
87
-
88
- self.conv2 = nn.Conv2d(1, 1, 2, 1, bias=False)
89
- self.iaf2 = IAFSqueeze(
92
+ # -- graph node B --
93
+ self.conv_B = nn.Conv2d(4, 4, 2, 1, bias=False)
94
+ self.iaf2_B = IAFSqueeze(
90
95
  batch_size=batch_size,
91
96
  min_v_mem=-1.0,
92
97
  spike_threshold=1.0,
93
98
  surrogate_grad_fn=PeriodicExponential(),
94
99
  )
95
- self.pool2 = SumPool2d(2, 2)
96
-
97
- self.conv3 = nn.Conv2d(1, 1, 2, 1, bias=False)
98
- self.iaf3 = IAFSqueeze(
100
+ self.pool_B = SumPool2d(2, 2)
101
+ # -- graph node C --
102
+ self.conv_C = nn.Conv2d(4, 4, 2, 1, bias=False)
103
+ self.iaf_C = IAFSqueeze(
99
104
  batch_size=batch_size,
100
105
  min_v_mem=-1.0,
101
106
  spike_threshold=1.0,
102
107
  surrogate_grad_fn=PeriodicExponential(),
103
108
  )
104
- self.pool3 = SumPool2d(2, 2)
105
- self.pool3a = SumPool2d(5, 5)
106
-
107
- self.conv4 = nn.Conv2d(1, 1, 2, 1, bias=False)
108
- self.iaf4 = IAFSqueeze(
109
+ self.pool_C = SumPool2d(2, 2)
110
+ # -- graph node D --
111
+ self.conv_D = nn.Conv2d(4, 4, 2, 1, bias=False)
112
+ self.iaf_D = IAFSqueeze(
109
113
  batch_size=batch_size,
110
114
  min_v_mem=-1.0,
111
115
  spike_threshold=1.0,
112
116
  surrogate_grad_fn=PeriodicExponential(),
113
117
  )
114
- self.pool4 = SumPool2d(3, 3)
115
-
116
- self.flat1 = nn.Flatten()
117
- self.flat2 = nn.Flatten()
118
-
119
- self.conv5 = nn.Conv2d(1, 1, 2, 1, bias=False)
120
- self.iaf5 = IAFSqueeze(
118
+ # -- graph node E --
119
+ self.conv_E = nn.Conv2d(4, 4, 2, 1, bias=False)
120
+ self.iaf3_E = IAFSqueeze(
121
121
  batch_size=batch_size,
122
122
  min_v_mem=-1.0,
123
123
  spike_threshold=1.0,
124
124
  surrogate_grad_fn=PeriodicExponential(),
125
125
  )
126
-
127
- self.fc2 = nn.Linear(25, 10, bias=False)
128
- self.iaf2_fc = IAFSqueeze(
126
+ self.pool_E = SumPool2d(2, 2)
127
+ # -- graph node F --
128
+ self.conv_F = nn.Conv2d(4, 4, 2, 1, bias=False)
129
+ self.iaf_F = IAFSqueeze(
130
+ batch_size=batch_size,
131
+ min_v_mem=-1.0,
132
+ spike_threshold=1.0,
133
+ surrogate_grad_fn=PeriodicExponential(),
134
+ )
135
+ # -- graph node G --
136
+ self.fc3 = nn.Linear(144, 10, bias=False)
137
+ self.iaf3_fc = IAFSqueeze(
129
138
  batch_size=batch_size,
130
139
  min_v_mem=-1.0,
131
140
  spike_threshold=1.0,
@@ -134,43 +143,47 @@ class SNN(nn.Module):
134
143
 
135
144
  # -- merges --
136
145
  self.merge1 = Merge()
137
- self.merge2 = Merge()
146
+
147
+ # -- falts --
148
+ self.flat_D = nn.Flatten()
149
+ self.flat_F = nn.Flatten()
138
150
 
139
151
  def forward(self, x):
140
152
  # conv 1 - A/0
141
- con1_out = self.conv1(x)
142
- iaf1_out = self.iaf1(con1_out)
153
+ convA_out = self.conv_A(x)
154
+ iaf_A_out = self.iaf_A(convA_out)
143
155
 
144
156
  # conv 2 - B/1
145
- conv2_out = self.conv2(iaf1_out)
146
- iaf2_out = self.iaf2(conv2_out)
147
- pool2_out = self.pool2(iaf2_out)
157
+ conv_B_out = self.conv_B(iaf_A_out)
158
+ iaf_B_out = self.iaf2_B(conv_B_out)
159
+ pool_B_out = self.pool_B(iaf_B_out)
148
160
 
149
161
  # conv 3 - C/2
150
- conv3_out = self.conv3(iaf1_out)
151
- iaf3_out = self.iaf3(conv3_out)
152
- pool3_out = self.pool3(iaf3_out)
153
- pool3a_out = self.pool3a(iaf3_out)
154
-
155
- # conv 4 - D/3
156
- merge1_out = self.merge1(pool2_out, pool3_out)
157
- conv4_out = self.conv4(merge1_out)
158
- iaf4_out = self.iaf4(conv4_out)
159
- pool4_out = self.pool4(iaf4_out)
160
- flat1_out = self.flat1(pool4_out)
161
-
162
- # conv 5 - E/4
163
- conv5_out = self.conv5(pool3a_out)
164
- iaf5_out = self.iaf5(conv5_out)
165
- flat2_out = self.flat2(iaf5_out)
166
-
167
- # fc 2 - F/5
168
- merge2_out = self.merge2(flat2_out, flat1_out)
169
-
170
- fc2_out = self.fc2(merge2_out)
171
- iaf2_fc_out = self.iaf2_fc(fc2_out)
172
-
173
- return iaf2_fc_out
162
+ conv_C_out = self.conv_C(pool_B_out)
163
+ iaf_C_out = self.iaf_C(conv_C_out)
164
+ pool_C_out = self.pool_C(iaf_C_out)
165
+
166
+ # conv 4 - D/4
167
+ conv_D_out = self.conv_D(pool_C_out)
168
+ iaf_D_out = self.iaf_D(conv_D_out)
169
+ # fc 1 - E/3
170
+ conv_E_out = self.conv_E(pool_B_out)
171
+ iaf3_E_out = self.iaf3_E(conv_E_out)
172
+ pool_E_out = self.pool_E(iaf3_E_out)
173
+
174
+ # fc 2 - F/6
175
+ conv_F_out = self.conv_F(pool_E_out)
176
+ iaf_F_out = self.iaf_F(conv_F_out)
177
+
178
+ # fc 2 - G/5
179
+ flat_D_out = self.flat_D(iaf_D_out)
180
+ flat_F_out = self.flat_F(iaf_F_out)
181
+
182
+ merge1_out = self.merge1(flat_D_out, flat_F_out)
183
+ fc3_out = self.fc3(merge1_out)
184
+ iaf3_fc_out = self.iaf3_fc(fc3_out)
185
+
186
+ return iaf3_fc_out
174
187
  ```
175
188
 
176
189
  ## Can I achieve a "Residual Connection" like ResNet does?
@@ -180,9 +193,9 @@ change the `samna.speck2f.configuration.CNNLayerDestination.layer` to achieve th
180
193
  familiar with the `samna-configuration`.
181
194
  You can also make use of our network graph extraction feature, to implement residual networks.
182
195
 
183
- ## How to use "Residual Connection" manually?
196
+ ## How can I define "Residual Connection" manually?
184
197
 
185
- Alright! Here I will give an example of achieving the "Residual Connection" by manually modify the `samna-configuration`.
198
+ You can also achieve "Residual Connection" by manually modify the `samna-configuration`.
186
199
 
187
200
  Let's say you want an architecture like below:
188
201
 
@@ -221,7 +234,7 @@ class ResidualBlock(nn.Module):
221
234
 
222
235
  ```
223
236
 
224
- Since currently Sinabs can only parse Sequential like network, we need to do some tedious work like below:
237
+ You can write it like:
225
238
 
226
239
  ```python
227
240
  # define a Sequential first
@@ -264,8 +277,8 @@ devkit.get_model().apply_configuration(samna_cfg)
264
277
 
265
278
  ```
266
279
 
267
- I have to say it is not an elegant solution though, it should help you to achieve an initial Residual Block. We will
268
- improve this part after Sinabs has the ability for extracting model's graph.
280
+ It is a lot of manual work but it will let you have your Residual Block.
281
+ We recommend to use our network graph extraction feature for residual connections.
269
282
 
270
283
  ## What execution order should I be aware of when I am implementing a sequential structure?
271
284
  You should be aware with the internal layer order.
@@ -110,7 +110,7 @@
110
110
  },
111
111
  {
112
112
  "cell_type": "code",
113
- "execution_count": 6,
113
+ "execution_count": 5,
114
114
  "id": "500e2d79",
115
115
  "metadata": {},
116
116
  "outputs": [
@@ -230,7 +230,7 @@
230
230
  ")\n",
231
231
  "# don't forget to set the slow clock frequency!\n",
232
232
  "# here we set the frequency to 1Hz, which mean the Vmem should decrease after every 1 second\n",
233
- "dynapcnn.to(device=\"speck2fmodule\", slow_clk_frequency=1)\n",
233
+ "dynapcnn.to(device=\"speck2fdevkit\", slow_clk_frequency=1)\n",
234
234
  "\n",
235
235
  "# Check if neuron states decrease along with time pass by\n",
236
236
  "\n",
@@ -276,7 +276,7 @@
276
276
  "name": "python",
277
277
  "nbconvert_exporter": "python",
278
278
  "pygments_lexer": "ipython3",
279
- "version": "3.8.0"
279
+ "version": "3.12.3"
280
280
  }
281
281
  },
282
282
  "nbformat": 4,