sinabs 2.0.1.dev10__tar.gz → 2.0.1.dev16__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 (285) hide show
  1. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/ChangeLog +1 -0
  2. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/PKG-INFO +1 -1
  3. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/dynapcnn_visualizer.py +33 -15
  4. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/PKG-INFO +1 -1
  5. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/SOURCES.txt +1 -0
  6. sinabs-2.0.1.dev16/sinabs.egg-info/pbr.json +1 -0
  7. sinabs-2.0.1.dev16/tests/test_dynapcnn/custom_jit_filters.py +88 -0
  8. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_visualizer.py +16 -2
  9. sinabs-2.0.1.dev10/sinabs.egg-info/pbr.json +0 -1
  10. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/.coveragerc +0 -0
  11. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/.github/workflows/ci-pipeline.yml +0 -0
  12. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/.pre-commit-config.yaml +0 -0
  13. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/.readthedocs.yaml +0 -0
  14. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/AUTHORS +0 -0
  15. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/CITATION.cff +0 -0
  16. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/LICENSE +0 -0
  17. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/Pipfile +0 -0
  18. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/Pipfile.lock +0 -0
  19. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/README.md +0 -0
  20. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/codecov.yml +0 -0
  21. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/Makefile +0 -0
  22. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/dataflow_layers.png +0 -0
  23. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/event_preprocessing_pipeline.png +0 -0
  24. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/memory_constraints.png +0 -0
  25. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/sinabs-dynapcnn-role.png +0 -0
  26. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/speck_dynapcnn.png +0 -0
  27. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/Overview/speck_top_level.png +0 -0
  28. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/devkits_images/dynapcnn_devkit.png +0 -0
  29. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/devkits_images/speck_devkit.png +0 -0
  30. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/devkits_images/speck_module.png +0 -0
  31. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/devkits_images/speck_module_devkit.png +0 -0
  32. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/nmnist_quick_start/dvs_input_flow.png +0 -0
  33. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/nmnist_quick_start/dynapcnn_visualizer.png +0 -0
  34. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/nmnist_quick_start/spike_input_flow.png +0 -0
  35. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/power_monitoring/dynamic_power_samna_graph.png +0 -0
  36. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/power_monitoring/idle_power_samna_graph.png +0 -0
  37. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/power_monitoring/power_plot.png +0 -0
  38. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/sinabs-logo-lowercase-whitebg.png +0 -0
  39. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/sinabs-logo-lowercase.png +0 -0
  40. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/tips_for_training/exceeding_bandwidth.png +0 -0
  41. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/using_readout_layer/handcraft_weights.png +0 -0
  42. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/using_readout_layer/neuron_id_mismatch.png +0 -0
  43. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/using_readout_layer/readout_layer.png +0 -0
  44. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/using_readout_layer/samna_graph.png +0 -0
  45. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/visualize_speck_dvs/samna_graph.png +0 -0
  46. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/visualize_spike_count/samna_graph.png +0 -0
  47. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_static/visualize_spike_count/spike_count.png +0 -0
  48. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_templates/class_activation.rst +0 -0
  49. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/_templates/class_layer.rst +0 -0
  50. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/about/about.rst +0 -0
  51. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/about/contributing.md +0 -0
  52. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/about/differences.md +0 -0
  53. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/about/info.md +0 -0
  54. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/about/release_notes.md +0 -0
  55. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/activation.rst +0 -0
  56. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/api.rst +0 -0
  57. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/from_torch.rst +0 -0
  58. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/hooks.rst +0 -0
  59. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/layers.rst +0 -0
  60. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/network.rst +0 -0
  61. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/nir.rst +0 -0
  62. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/synopcounter.rst +0 -0
  63. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/api/utils.rst +0 -0
  64. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/conf.py +0 -0
  65. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/contact.md +0 -0
  66. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/README.rst +0 -0
  67. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/README.rst +0 -0
  68. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/plot_alif.py +0 -0
  69. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/plot_exp_leaky.py +0 -0
  70. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/plot_iaf.py +0 -0
  71. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/plot_lif.py +0 -0
  72. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/layers/utils.py +0 -0
  73. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/spike_fns/README.rst +0 -0
  74. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/spike_fns/plot_maxspike.py +0 -0
  75. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/spike_fns/plot_multispike.py +0 -0
  76. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/spike_fns/plot_singlespike.py +0 -0
  77. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/README.rst +0 -0
  78. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/plot_gaussian.py +0 -0
  79. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/plot_heaviside.py +0 -0
  80. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/plot_multigaussian.py +0 -0
  81. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/plot_periodicexponential.py +0 -0
  82. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/gallery/surrogate_grad_fns/plot_singleexponential.py +0 -0
  83. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/fundamentals.rst +0 -0
  84. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/getting_started.rst +0 -0
  85. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/iaf_neuron_model.ipynb +0 -0
  86. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/install.rst +0 -0
  87. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/python_pyenv_pipenv.rst +0 -0
  88. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/getting_started/quickstart.ipynb +0 -0
  89. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/how_tos/activations.ipynb +0 -0
  90. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/how_tos/custom_hooks.ipynb +0 -0
  91. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/how_tos/how_tos.rst +0 -0
  92. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/how_tos/synops_loss_ann.ipynb +0 -0
  93. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/how_tos/synops_loss_snn.ipynb +0 -0
  94. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/index.md +0 -0
  95. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/make.bat +0 -0
  96. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/plugins/plugins.rst +0 -0
  97. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/requirements.txt +0 -0
  98. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/advanced_concepts.rst +0 -0
  99. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/chip_factory.rst +0 -0
  100. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/config_builder.rst +0 -0
  101. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/crop2d.rst +0 -0
  102. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/discretize.rst +0 -0
  103. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/dvs_layer.rst +0 -0
  104. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/dynapcnn.rst +0 -0
  105. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/dynapcnn_layer.rst +0 -0
  106. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/dynapcnn_network.rst +0 -0
  107. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/dynapcnn_visualizer.rst +0 -0
  108. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/exceptions.rst +0 -0
  109. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/flipdims.rst +0 -0
  110. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/io.rst +0 -0
  111. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/mapping.rst +0 -0
  112. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/specksim.rst +0 -0
  113. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/api/dynapcnn/utils.rst +0 -0
  114. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/dangers.md +0 -0
  115. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/add_new_device.md +0 -0
  116. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/available_algorithmic_operation.md +0 -0
  117. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/available_network_arch.md +0 -0
  118. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/chip_errata.md +0 -0
  119. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/device_management.md +0 -0
  120. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/index.rst +0 -0
  121. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/output_monitoring.md +0 -0
  122. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/save_hardware_config_as_binary.md +0 -0
  123. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/faqs/tips_for_training.md +0 -0
  124. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/index.rst +0 -0
  125. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/leak_neuron.ipynb +0 -0
  126. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/nmnist_quick_start.ipynb +0 -0
  127. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/play_with_speck_dvs.ipynb +0 -0
  128. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/power_monitoring.ipynb +0 -0
  129. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/using_readout_layer.ipynb +0 -0
  130. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/visualize_speck_dvs_input.ipynb +0 -0
  131. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/notebooks/visualize_spike_count.ipynb +0 -0
  132. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/overview.md +0 -0
  133. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/specksim.md +0 -0
  134. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/the_basics.md +0 -0
  135. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/tutorials.rst +0 -0
  136. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/speck/visualizer.md +0 -0
  137. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/LeNet_5_EngChinese.ipynb +0 -0
  138. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/bptt.ipynb +0 -0
  139. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/nir_to_speck.ipynb +0 -0
  140. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/nmnist.ipynb +0 -0
  141. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/scnn_mnist.nir +0 -0
  142. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/tutorials.rst +0 -0
  143. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/weight_scaling.md +0 -0
  144. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/docs/tutorials/weight_transfer_mnist.ipynb +0 -0
  145. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/mnist/dynapcnn_network.py +0 -0
  146. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/mnist/mnist_params.pt +0 -0
  147. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/mnist/specksim_network.py +0 -0
  148. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/dvs_gesture_params.pt +0 -0
  149. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/gesture_viz.py +0 -0
  150. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/01_armroll.png +0 -0
  151. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/02_handclap.png +0 -0
  152. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/03_lefthandclockwise.png +0 -0
  153. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/04_lefthandcounterclockwise.png +0 -0
  154. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/05_lefthandwave.png +0 -0
  155. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/06_righthandwave.png +0 -0
  156. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/07_righthandclockwise.png +0 -0
  157. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/08_righthandcounterclockwise.png +0 -0
  158. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/09_airdrums.png +0 -0
  159. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/10_airguitar.png +0 -0
  160. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/examples/visualizer/icons/11_other.png +0 -0
  161. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/jupyterlab-requirements.txt +0 -0
  162. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/pull_request_template.md +0 -0
  163. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/requirements.txt +0 -0
  164. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/setup.cfg +0 -0
  165. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/setup.py +0 -0
  166. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/__init__.py +0 -0
  167. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/activation/__init__.py +0 -0
  168. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/activation/quantize.py +0 -0
  169. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/activation/reset_mechanism.py +0 -0
  170. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/activation/spike_generation.py +0 -0
  171. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/activation/surrogate_gradient_fn.py +0 -0
  172. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/__init__.py +0 -0
  173. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/__init__.py +0 -0
  174. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chip_factory.py +0 -0
  175. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/__init__.py +0 -0
  176. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/dynapcnn.py +0 -0
  177. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2.py +0 -0
  178. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2b.py +0 -0
  179. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2cmini.py +0 -0
  180. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2dmini.py +0 -0
  181. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2e.py +0 -0
  182. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/chips/speck2f.py +0 -0
  183. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/config_builder.py +0 -0
  184. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/crop2d.py +0 -0
  185. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/discretize.py +0 -0
  186. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/dvs_layer.py +0 -0
  187. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/dynapcnn_layer.py +0 -0
  188. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/dynapcnn_network.py +0 -0
  189. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/exceptions.py +0 -0
  190. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/flipdims.py +0 -0
  191. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/io.py +0 -0
  192. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/mapping.py +0 -0
  193. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/specksim.py +0 -0
  194. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/backend/dynapcnn/utils.py +0 -0
  195. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/cnnutils.py +0 -0
  196. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/conversion.py +0 -0
  197. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/from_torch.py +0 -0
  198. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/hooks.py +0 -0
  199. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/__init__.py +0 -0
  200. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/alif.py +0 -0
  201. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/channel_shift.py +0 -0
  202. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/crop2d.py +0 -0
  203. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/exp_leak.py +0 -0
  204. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/functional/__init__.py +0 -0
  205. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/functional/alif.py +0 -0
  206. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/functional/lif.py +0 -0
  207. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/iaf.py +0 -0
  208. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/lif.py +0 -0
  209. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/merge.py +0 -0
  210. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/neuromorphic_relu.py +0 -0
  211. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/pool2d.py +0 -0
  212. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/quantize.py +0 -0
  213. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/reshape.py +0 -0
  214. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/stateful_layer.py +0 -0
  215. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/layers/to_spike.py +0 -0
  216. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/network.py +0 -0
  217. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/nir.py +0 -0
  218. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/synopcounter.py +0 -0
  219. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs/utils.py +0 -0
  220. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/dependency_links.txt +0 -0
  221. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/not-zip-safe +0 -0
  222. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/requires.txt +0 -0
  223. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/sinabs.egg-info/top_level.txt +0 -0
  224. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/conv_input.pth +0 -0
  225. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/conv_layer_synops.pth +0 -0
  226. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/firing_rates.pth +0 -0
  227. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/firing_rates_per_neuron.pth +0 -0
  228. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/input_diffs.pth +0 -0
  229. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/inputs_and_results/hooks/model_synops.pth +0 -0
  230. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/mnist_params.pt +0 -0
  231. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/models/README.txt +0 -0
  232. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/models/synop_hook_model.pth +0 -0
  233. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/requirements.txt +0 -0
  234. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_activations.py +0 -0
  235. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_batch_mismatch.py +0 -0
  236. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_batch_size_update.py +0 -0
  237. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_conversion.py +0 -0
  238. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_copy.py +0 -0
  239. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/hw_utils.py +0 -0
  240. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_auto_mapping.py +0 -0
  241. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_compatible_layer_build.py +0 -0
  242. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_config_making.py +0 -0
  243. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_device_movement.py +0 -0
  244. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_device_name_mapping.py +0 -0
  245. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_discover_device.py +0 -0
  246. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_discretized.py +0 -0
  247. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_doorbell.py +0 -0
  248. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_dvs_input.py +0 -0
  249. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_dvs_layer.py +0 -0
  250. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_event_conversion.py +0 -0
  251. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_individual_cases.py +0 -0
  252. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_large_net.py +0 -0
  253. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_learning.py +0 -0
  254. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_monitoring.py +0 -0
  255. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_neuron_leak.py +0 -0
  256. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_single_neuron_hardware.py +0 -0
  257. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_speck2e.py +0 -0
  258. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_dynapcnn/test_speckmini_config_making.py +0 -0
  259. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_from_model.py +0 -0
  260. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_hooks.py +0 -0
  261. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_alif.py +0 -0
  262. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_channelshift.py +0 -0
  263. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_crop2d.py +0 -0
  264. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_exp_leak.py +0 -0
  265. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_iaf.py +0 -0
  266. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_img2spk.py +0 -0
  267. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_lif.py +0 -0
  268. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_maxpooling.py +0 -0
  269. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_merge.py +0 -0
  270. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_neuromorphic_relu.py +0 -0
  271. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_reshaping.py +0 -0
  272. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_sig2spk.py +0 -0
  273. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_layers/test_stateful_layer.py +0 -0
  274. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_network_class.py +0 -0
  275. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_nir.py +0 -0
  276. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_normalize_weights.py +0 -0
  277. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_onnx.py +0 -0
  278. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_quantize.py +0 -0
  279. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_specksim/test_specksim_bindings.py +0 -0
  280. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_specksim/test_specksim_conversion.py +0 -0
  281. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_specksim/test_specksim_network.py +0 -0
  282. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_surrogate_gradients.py +0 -0
  283. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_synops_counter.py +0 -0
  284. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/test_utils.py +0 -0
  285. {sinabs-2.0.1.dev10 → sinabs-2.0.1.dev16}/tests/weights/README.txt +0 -0
@@ -2,6 +2,7 @@ CHANGES
2
2
  =======
3
3
 
4
4
  * Spike count plot in 'DynapcnnVisualizer' is optional
5
+ * `DynapcnnVisualizer` allows custom JIT filters to make readout predictions
5
6
 
6
7
  v2.0.0
7
8
  ------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sinabs
3
- Version: 2.0.1.dev10
3
+ Version: 2.0.1.dev16
4
4
  Summary: SynSense Spiking Neural Network simulator for deep neural networks (DNNs).
5
5
  Home-page: UNKNOWN
6
6
  Author: SynSense (formerly AiCTX)
@@ -1,6 +1,6 @@
1
1
  import socket
2
2
  import warnings
3
- from typing import Dict, List, Optional, Tuple
3
+ from typing import Callable, Dict, List, Optional, Tuple, Union
4
4
 
5
5
  import samna
6
6
 
@@ -49,6 +49,7 @@ class DynapcnnVisualizer:
49
49
  feature_names: Optional[List[str]] = None,
50
50
  readout_images: Optional[List[str]] = None,
51
51
  feature_count: Optional[int] = None,
52
+ readout_node: Union[str, Callable] = "JitMajorityReadout",
52
53
  extra_arguments: Optional[Dict[str, Dict[str, any]]] = None,
53
54
  ):
54
55
  """Quick wrapper around Samna objects to get a basic dynapcnn visualizer.
@@ -98,6 +99,9 @@ class DynapcnnVisualizer:
98
99
  If the `feature_names` and `readout_images` was passed, this is not needed. Otherwise this parameter
99
100
  should be passed, so that the GUI knows how many lines should be drawn on the `Spike Count Plot` and
100
101
  `Readout Layer Plot`.
102
+ readout_node: str or Callable
103
+ Can either be a string "JitMajorityReadout" or a callable that returns a samna JIT filter
104
+ to decide on the readout prediction. Function parameters can be defined freely.
101
105
  extra_arguments: Optional[Dict[str, Dict[str, any]]] (defaults to None)
102
106
  Extra arguments that can be passed to individual plots. Available keys are:
103
107
  - `spike_count`: Arguments that can be passed to `spike_count` plot.
@@ -105,7 +109,7 @@ class DynapcnnVisualizer:
105
109
  - `power_measurement`: Arguments that can be passed `power_measurement` plot.
106
110
  """
107
111
  # Checks if the configuration passed is valid
108
- if add_readout_plot and not readout_images:
112
+ if add_readout_plot and readout_images is None:
109
113
  raise ValueError(
110
114
  "If a readout plot is to be displayed image paths should be passed as a list."
111
115
  + "The order of the images, should match the model output."
@@ -135,6 +139,7 @@ class DynapcnnVisualizer:
135
139
  self.readout_default_return_value = readout_default_return_value
136
140
  self.readout_default_threshold_low = readout_default_threshold_low
137
141
  self.readout_default_threshold_high = readout_default_threshold_high
142
+ self.readout_node = readout_node
138
143
 
139
144
  # Power monitor components
140
145
  if power_monitor_number_of_items != 3 and power_monitor_number_of_items != 5:
@@ -518,19 +523,32 @@ class DynapcnnVisualizer:
518
523
 
519
524
  ## Readout node
520
525
  if "r" in self.gui_type:
521
- (_, majority_readout_node, _) = self.streamer_graph.sequential(
522
- [
523
- spike_collection_node,
524
- samna.graph.JitMajorityReadout(samna.ui.Event),
525
- streamer_node,
526
- ]
527
- )
528
- majority_readout_node.set_feature_count(self.feature_count)
529
- majority_readout_node.set_default_feature(self.readout_default_return_value)
530
- majority_readout_node.set_threshold_low(self.readout_default_threshold_low)
531
- majority_readout_node.set_threshold_high(
532
- self.readout_default_threshold_high
533
- )
526
+ if self.readout_node == "JitMajorityReadout":
527
+ (_, majority_readout_node, _) = self.streamer_graph.sequential(
528
+ [
529
+ spike_collection_node,
530
+ samna.graph.JitMajorityReadout(samna.ui.Event),
531
+ streamer_node,
532
+ ]
533
+ )
534
+ majority_readout_node.set_feature_count(self.feature_count)
535
+ majority_readout_node.set_default_feature(
536
+ self.readout_default_return_value
537
+ )
538
+ majority_readout_node.set_threshold_low(
539
+ self.readout_default_threshold_low
540
+ )
541
+ majority_readout_node.set_threshold_high(
542
+ self.readout_default_threshold_high
543
+ )
544
+ else:
545
+ (_, majority_readout_node, _) = self.streamer_graph.sequential(
546
+ [
547
+ spike_collection_node,
548
+ self.readout_node,
549
+ streamer_node,
550
+ ]
551
+ )
534
552
 
535
553
  ## Readout layer visualization
536
554
  if "o" in self.gui_type:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sinabs
3
- Version: 2.0.1.dev10
3
+ Version: 2.0.1.dev16
4
4
  Summary: SynSense Spiking Neural Network simulator for deep neural networks (DNNs).
5
5
  Home-page: UNKNOWN
6
6
  Author: SynSense (formerly AiCTX)
@@ -242,6 +242,7 @@ tests/inputs_and_results/hooks/input_diffs.pth
242
242
  tests/inputs_and_results/hooks/model_synops.pth
243
243
  tests/models/README.txt
244
244
  tests/models/synop_hook_model.pth
245
+ tests/test_dynapcnn/custom_jit_filters.py
245
246
  tests/test_dynapcnn/hw_utils.py
246
247
  tests/test_dynapcnn/test_auto_mapping.py
247
248
  tests/test_dynapcnn/test_compatible_layer_build.py
@@ -0,0 +1 @@
1
+ {"git_version": "b87dce3", "is_release": false}
@@ -0,0 +1,88 @@
1
+ from typing import Optional
2
+
3
+ import samna
4
+
5
+
6
+ def majority_readout_filter(
7
+ feature_count: int,
8
+ default_feature: Optional[int] = None,
9
+ detection_threshold: int = 0,
10
+ threshold_low: int = 0,
11
+ threshold_high: Optional[int] = None,
12
+ ):
13
+ """
14
+ The default reaodut filter of samna's visualizer counts the total
15
+ number of events received per timestep to decide whether a detection
16
+ should be made or not.
17
+
18
+ The filter defined here allows for an additional `detection_threshold`
19
+ parameter which is compared to the number of spikes of the most
20
+ active class.
21
+ In other words, for a class to be detected, there needs to be
22
+ a minimum number of spikes for this class.
23
+ """
24
+
25
+ jit_src = f"""
26
+ using InputT = speck2f::event::Spike;
27
+ using OutputT = ui::Event;
28
+ using ReadoutT = ui::Readout;
29
+
30
+ template<typename Spike>
31
+ class CustomMajorityReadout : public iris::FilterInterface<std::shared_ptr<const std::vector<Spike>>, std::shared_ptr<const std::vector<OutputT>>> {{
32
+ private:
33
+ int featureCount = {feature_count};
34
+ uint32_t defaultFeature = {default_feature if default_feature is not None else feature_count};
35
+ int detectionThreshold = {detection_threshold};
36
+ int thresholdLow = {threshold_low};
37
+ int thresholdHigh = {threshold_high if threshold_high is not None else "std::numeric_limits<int>::max()"};
38
+
39
+ public:
40
+ void apply() override
41
+ {{
42
+ while (const auto maybeSpikesPtr = this->receiveInput()) {{
43
+ if (0 == featureCount) {{
44
+ return;
45
+ }}
46
+
47
+ auto outputCollection = std::make_shared<std::vector<OutputT>>();
48
+ if ((*maybeSpikesPtr)->size() >= thresholdLow && (*maybeSpikesPtr)->size() <= thresholdHigh) {{
49
+ std::unordered_map<uint32_t, int> sum; // feature -> count
50
+ int maxCount = 0;
51
+ uint32_t maxCountFeature = 0;
52
+ int maxCountNum = 0;
53
+
54
+ for (const auto& spike : (**maybeSpikesPtr)) {{
55
+ sum[spike.feature]++;
56
+ }}
57
+
58
+ for (const auto& [feature, count] : sum) {{
59
+ if (feature >= featureCount) {{
60
+ continue;
61
+ }}
62
+
63
+ if (count > maxCount) {{
64
+ maxCount = count;
65
+ maxCountFeature = feature;
66
+ maxCountNum = 1;
67
+ }}
68
+ else if (count == maxCount) {{
69
+ maxCountNum++;
70
+ }}
71
+ }}
72
+
73
+ if (maxCount > detectionThreshold && 1 == maxCountNum) {{
74
+ outputCollection->emplace_back(ReadoutT{{maxCountFeature}});
75
+ }}
76
+ else {{
77
+ outputCollection->emplace_back(ReadoutT{{defaultFeature}});
78
+ }}
79
+ }}
80
+ else {{
81
+ outputCollection->emplace_back(ReadoutT{{defaultFeature}});
82
+ }}
83
+ this->forwardResult(std::move(outputCollection));
84
+ }}
85
+ }}
86
+ }};
87
+ """
88
+ return samna.graph.JitFilter("CustomMajorityReadout", jit_src)
@@ -1,7 +1,9 @@
1
1
  from itertools import product
2
+ from typing import Callable, Union
2
3
 
3
4
  import pytest
4
5
  import samna
6
+ from custom_jit_filters import majority_readout_filter as custom_filter
5
7
  from hw_utils import find_open_devices, is_any_samna_device_connected
6
8
 
7
9
  from sinabs.backend.dynapcnn.dynapcnn_visualizer import DynapcnnVisualizer
@@ -15,12 +17,21 @@ def X_available() -> bool:
15
17
  return p.returncode == 0
16
18
 
17
19
 
20
+ vis_init_args = product(
21
+ (True, False),
22
+ (True, False),
23
+ ("JitMajorityReadout", custom_filter),
24
+ )
25
+
26
+
18
27
  @pytest.mark.skipif(
19
28
  True,
20
29
  reason="A window needs to pop. Needs UI. Makes sense to check this test manually",
21
30
  )
22
- @pytest.mark.parametrize("spike_count_plot", (True, False))
23
- def test_visualizer_initialization(spike_count_plot: bool):
31
+ @pytest.mark.parametrize("spike_count_plot,readout_plot,readout_node", vis_init_args)
32
+ def test_visualizer_initialization(
33
+ spike_count_plot: bool, readout_plot: bool, readout_node: Union[str, Callable]
34
+ ):
24
35
  dvs_shape = (128, 128)
25
36
  spike_collection_interval = 500
26
37
  visualizer_id = 3
@@ -29,6 +40,9 @@ def test_visualizer_initialization(spike_count_plot: bool):
29
40
  dvs_shape=dvs_shape,
30
41
  spike_collection_interval=spike_collection_interval,
31
42
  add_spike_count_plot=spike_count_plot,
43
+ add_readout_plot=readout_plot,
44
+ readout_node=readout_node,
45
+ readout_images=[],
32
46
  )
33
47
  visualizer.create_visualizer_process(
34
48
  f"tcp://0.0.0.0:{visualizer.samna_visualizer_port}"
@@ -1 +0,0 @@
1
- {"git_version": "9b5cf77", "is_release": false}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes