sinabs 2.0.1.dev2__tar.gz → 2.0.1.dev3__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 (288) hide show
  1. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/PKG-INFO +1 -1
  2. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/PKG-INFO +1 -1
  3. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/SOURCES.txt +2 -0
  4. sinabs-2.0.1.dev3/sinabs.egg-info/pbr.json +1 -0
  5. sinabs-2.0.1.dev3/tests/test_residual/NIR_graph_nonseq.ipynb +204 -0
  6. sinabs-2.0.1.dev3/tests/test_residual/test_jit_tracer_ann.ipynb +204 -0
  7. sinabs-2.0.1.dev3/tests/test_residual/test_jit_tracer_cnn.ipynb +149 -0
  8. sinabs-2.0.1.dev2/sinabs.egg-info/pbr.json +0 -1
  9. sinabs-2.0.1.dev2/tests/test_residual/NIR_graph_nonseq.ipynb +0 -210
  10. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/.coveragerc +0 -0
  11. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/.github/workflows/ci-pipeline.yml +0 -0
  12. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/.pre-commit-config.yaml +0 -0
  13. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/.readthedocs.yaml +0 -0
  14. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/AUTHORS +0 -0
  15. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/CITATION.cff +0 -0
  16. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/ChangeLog +0 -0
  17. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/LICENSE +0 -0
  18. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/Pipfile +0 -0
  19. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/Pipfile.lock +0 -0
  20. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/README.md +0 -0
  21. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/codecov.yml +0 -0
  22. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/Makefile +0 -0
  23. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/dataflow_layers.png +0 -0
  24. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/event_preprocessing_pipeline.png +0 -0
  25. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/memory_constraints.png +0 -0
  26. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/sinabs-dynapcnn-role.png +0 -0
  27. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/speck_dynapcnn.png +0 -0
  28. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/Overview/speck_top_level.png +0 -0
  29. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/devkits_images/dynapcnn_devkit.png +0 -0
  30. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/devkits_images/speck_devkit.png +0 -0
  31. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/devkits_images/speck_module.png +0 -0
  32. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/devkits_images/speck_module_devkit.png +0 -0
  33. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/nmnist_quick_start/dvs_input_flow.png +0 -0
  34. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/nmnist_quick_start/dynapcnn_visualizer.png +0 -0
  35. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/nmnist_quick_start/spike_input_flow.png +0 -0
  36. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/power_monitoring/dynamic_power_samna_graph.png +0 -0
  37. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/power_monitoring/idle_power_samna_graph.png +0 -0
  38. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/power_monitoring/power_plot.png +0 -0
  39. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/sinabs-logo-lowercase-whitebg.png +0 -0
  40. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/sinabs-logo-lowercase.png +0 -0
  41. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/tips_for_training/exceeding_bandwidth.png +0 -0
  42. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/using_readout_layer/handcraft_weights.png +0 -0
  43. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/using_readout_layer/neuron_id_mismatch.png +0 -0
  44. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/using_readout_layer/readout_layer.png +0 -0
  45. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/using_readout_layer/samna_graph.png +0 -0
  46. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/visualize_speck_dvs/samna_graph.png +0 -0
  47. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/visualize_spike_count/samna_graph.png +0 -0
  48. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_static/visualize_spike_count/spike_count.png +0 -0
  49. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_templates/class_activation.rst +0 -0
  50. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/_templates/class_layer.rst +0 -0
  51. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/about/about.rst +0 -0
  52. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/about/contributing.md +0 -0
  53. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/about/differences.md +0 -0
  54. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/about/info.md +0 -0
  55. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/about/release_notes.md +0 -0
  56. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/activation.rst +0 -0
  57. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/api.rst +0 -0
  58. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/from_torch.rst +0 -0
  59. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/hooks.rst +0 -0
  60. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/layers.rst +0 -0
  61. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/network.rst +0 -0
  62. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/nir.rst +0 -0
  63. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/synopcounter.rst +0 -0
  64. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/api/utils.rst +0 -0
  65. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/conf.py +0 -0
  66. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/contact.md +0 -0
  67. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/README.rst +0 -0
  68. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/README.rst +0 -0
  69. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/plot_alif.py +0 -0
  70. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/plot_exp_leaky.py +0 -0
  71. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/plot_iaf.py +0 -0
  72. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/plot_lif.py +0 -0
  73. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/layers/utils.py +0 -0
  74. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/spike_fns/README.rst +0 -0
  75. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/spike_fns/plot_maxspike.py +0 -0
  76. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/spike_fns/plot_multispike.py +0 -0
  77. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/spike_fns/plot_singlespike.py +0 -0
  78. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/README.rst +0 -0
  79. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/plot_gaussian.py +0 -0
  80. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/plot_heaviside.py +0 -0
  81. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/plot_multigaussian.py +0 -0
  82. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/plot_periodicexponential.py +0 -0
  83. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/gallery/surrogate_grad_fns/plot_singleexponential.py +0 -0
  84. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/fundamentals.rst +0 -0
  85. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/getting_started.rst +0 -0
  86. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/iaf_neuron_model.ipynb +0 -0
  87. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/install.rst +0 -0
  88. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/python_pyenv_pipenv.rst +0 -0
  89. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/getting_started/quickstart.ipynb +0 -0
  90. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/how_tos/activations.ipynb +0 -0
  91. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/how_tos/custom_hooks.ipynb +0 -0
  92. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/how_tos/how_tos.rst +0 -0
  93. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/how_tos/synops_loss_ann.ipynb +0 -0
  94. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/how_tos/synops_loss_snn.ipynb +0 -0
  95. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/index.md +0 -0
  96. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/make.bat +0 -0
  97. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/plugins/plugins.rst +0 -0
  98. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/requirements.txt +0 -0
  99. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/advanced_concepts.rst +0 -0
  100. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/chip_factory.rst +0 -0
  101. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/config_builder.rst +0 -0
  102. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/crop2d.rst +0 -0
  103. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/discretize.rst +0 -0
  104. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/dvs_layer.rst +0 -0
  105. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/dynapcnn.rst +0 -0
  106. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/dynapcnn_layer.rst +0 -0
  107. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/dynapcnn_network.rst +0 -0
  108. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/dynapcnn_visualizer.rst +0 -0
  109. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/exceptions.rst +0 -0
  110. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/flipdims.rst +0 -0
  111. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/io.rst +0 -0
  112. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/mapping.rst +0 -0
  113. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/specksim.rst +0 -0
  114. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/api/dynapcnn/utils.rst +0 -0
  115. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/dangers.md +0 -0
  116. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/add_new_device.md +0 -0
  117. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/available_algorithmic_operation.md +0 -0
  118. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/available_network_arch.md +0 -0
  119. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/chip_errata.md +0 -0
  120. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/device_management.md +0 -0
  121. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/index.rst +0 -0
  122. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/output_monitoring.md +0 -0
  123. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/save_hardware_config_as_binary.md +0 -0
  124. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/faqs/tips_for_training.md +0 -0
  125. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/index.rst +0 -0
  126. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/leak_neuron.ipynb +0 -0
  127. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/nmnist_quick_start.ipynb +0 -0
  128. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/play_with_speck_dvs.ipynb +0 -0
  129. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/power_monitoring.ipynb +0 -0
  130. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/using_readout_layer.ipynb +0 -0
  131. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/visualize_speck_dvs_input.ipynb +0 -0
  132. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/notebooks/visualize_spike_count.ipynb +0 -0
  133. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/overview.md +0 -0
  134. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/specksim.md +0 -0
  135. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/the_basics.md +0 -0
  136. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/tutorials.rst +0 -0
  137. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/speck/visualizer.md +0 -0
  138. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/LeNet_5_EngChinese.ipynb +0 -0
  139. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/bptt.ipynb +0 -0
  140. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/nir_to_speck.ipynb +0 -0
  141. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/nmnist.ipynb +0 -0
  142. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/scnn_mnist.nir +0 -0
  143. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/tutorials.rst +0 -0
  144. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/weight_scaling.md +0 -0
  145. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/docs/tutorials/weight_transfer_mnist.ipynb +0 -0
  146. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/mnist/dynapcnn_network.py +0 -0
  147. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/mnist/mnist_params.pt +0 -0
  148. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/mnist/specksim_network.py +0 -0
  149. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/dvs_gesture_params.pt +0 -0
  150. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/gesture_viz.py +0 -0
  151. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/01_armroll.png +0 -0
  152. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/02_handclap.png +0 -0
  153. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/03_lefthandclockwise.png +0 -0
  154. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/04_lefthandcounterclockwise.png +0 -0
  155. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/05_lefthandwave.png +0 -0
  156. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/06_righthandwave.png +0 -0
  157. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/07_righthandclockwise.png +0 -0
  158. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/08_righthandcounterclockwise.png +0 -0
  159. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/09_airdrums.png +0 -0
  160. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/10_airguitar.png +0 -0
  161. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/examples/visualizer/icons/11_other.png +0 -0
  162. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/jupyterlab-requirements.txt +0 -0
  163. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/pull_request_template.md +0 -0
  164. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/requirements.txt +0 -0
  165. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/setup.cfg +0 -0
  166. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/setup.py +0 -0
  167. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/__init__.py +0 -0
  168. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/activation/__init__.py +0 -0
  169. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/activation/quantize.py +0 -0
  170. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/activation/reset_mechanism.py +0 -0
  171. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/activation/spike_generation.py +0 -0
  172. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/activation/surrogate_gradient_fn.py +0 -0
  173. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/__init__.py +0 -0
  174. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/__init__.py +0 -0
  175. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chip_factory.py +0 -0
  176. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/__init__.py +0 -0
  177. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/dynapcnn.py +0 -0
  178. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2.py +0 -0
  179. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2b.py +0 -0
  180. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2cmini.py +0 -0
  181. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2dmini.py +0 -0
  182. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2e.py +0 -0
  183. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/chips/speck2f.py +0 -0
  184. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/config_builder.py +0 -0
  185. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/crop2d.py +0 -0
  186. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/discretize.py +0 -0
  187. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/dvs_layer.py +0 -0
  188. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/dynapcnn_layer.py +0 -0
  189. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/dynapcnn_network.py +0 -0
  190. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/dynapcnn_visualizer.py +0 -0
  191. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/exceptions.py +0 -0
  192. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/flipdims.py +0 -0
  193. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/io.py +0 -0
  194. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/mapping.py +0 -0
  195. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/specksim.py +0 -0
  196. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/backend/dynapcnn/utils.py +0 -0
  197. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/cnnutils.py +0 -0
  198. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/conversion.py +0 -0
  199. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/from_torch.py +0 -0
  200. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/hooks.py +0 -0
  201. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/__init__.py +0 -0
  202. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/alif.py +0 -0
  203. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/channel_shift.py +0 -0
  204. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/crop2d.py +0 -0
  205. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/exp_leak.py +0 -0
  206. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/functional/__init__.py +0 -0
  207. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/functional/alif.py +0 -0
  208. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/functional/lif.py +0 -0
  209. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/iaf.py +0 -0
  210. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/lif.py +0 -0
  211. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/merge.py +0 -0
  212. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/neuromorphic_relu.py +0 -0
  213. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/pool2d.py +0 -0
  214. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/quantize.py +0 -0
  215. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/reshape.py +0 -0
  216. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/stateful_layer.py +0 -0
  217. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/layers/to_spike.py +0 -0
  218. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/network.py +0 -0
  219. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/nir.py +0 -0
  220. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/synopcounter.py +0 -0
  221. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs/utils.py +0 -0
  222. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/dependency_links.txt +0 -0
  223. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/not-zip-safe +0 -0
  224. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/requires.txt +0 -0
  225. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/sinabs.egg-info/top_level.txt +0 -0
  226. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/conv_input.pth +0 -0
  227. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/conv_layer_synops.pth +0 -0
  228. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/firing_rates.pth +0 -0
  229. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/firing_rates_per_neuron.pth +0 -0
  230. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/input_diffs.pth +0 -0
  231. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/inputs_and_results/hooks/model_synops.pth +0 -0
  232. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/mnist_params.pt +0 -0
  233. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/models/README.txt +0 -0
  234. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/models/synop_hook_model.pth +0 -0
  235. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/requirements.txt +0 -0
  236. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_activations.py +0 -0
  237. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_batch_mismatch.py +0 -0
  238. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_batch_size_update.py +0 -0
  239. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_conversion.py +0 -0
  240. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_copy.py +0 -0
  241. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/hw_utils.py +0 -0
  242. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_auto_mapping.py +0 -0
  243. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_compatible_layer_build.py +0 -0
  244. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_config_making.py +0 -0
  245. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_device_movement.py +0 -0
  246. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_device_name_mapping.py +0 -0
  247. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_discover_device.py +0 -0
  248. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_discretized.py +0 -0
  249. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_doorbell.py +0 -0
  250. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_dvs_input.py +0 -0
  251. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_dvs_layer.py +0 -0
  252. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_event_conversion.py +0 -0
  253. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_individual_cases.py +0 -0
  254. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_large_net.py +0 -0
  255. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_learning.py +0 -0
  256. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_monitoring.py +0 -0
  257. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_neuron_leak.py +0 -0
  258. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_single_neuron_hardware.py +0 -0
  259. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_speck2e.py +0 -0
  260. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_speckmini_config_making.py +0 -0
  261. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_dynapcnn/test_visualizer.py +0 -0
  262. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_from_model.py +0 -0
  263. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_hooks.py +0 -0
  264. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_alif.py +0 -0
  265. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_channelshift.py +0 -0
  266. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_crop2d.py +0 -0
  267. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_exp_leak.py +0 -0
  268. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_iaf.py +0 -0
  269. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_img2spk.py +0 -0
  270. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_lif.py +0 -0
  271. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_maxpooling.py +0 -0
  272. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_merge.py +0 -0
  273. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_neuromorphic_relu.py +0 -0
  274. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_reshaping.py +0 -0
  275. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_sig2spk.py +0 -0
  276. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_layers/test_stateful_layer.py +0 -0
  277. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_network_class.py +0 -0
  278. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_nir.py +0 -0
  279. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_normalize_weights.py +0 -0
  280. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_onnx.py +0 -0
  281. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_quantize.py +0 -0
  282. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_specksim/test_specksim_bindings.py +0 -0
  283. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_specksim/test_specksim_conversion.py +0 -0
  284. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_specksim/test_specksim_network.py +0 -0
  285. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_surrogate_gradients.py +0 -0
  286. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_synops_counter.py +0 -0
  287. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/test_utils.py +0 -0
  288. {sinabs-2.0.1.dev2 → sinabs-2.0.1.dev3}/tests/weights/README.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sinabs
3
- Version: 2.0.1.dev2
3
+ Version: 2.0.1.dev3
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
  Metadata-Version: 2.1
2
2
  Name: sinabs
3
- Version: 2.0.1.dev2
3
+ Version: 2.0.1.dev3
4
4
  Summary: SynSense Spiking Neural Network simulator for deep neural networks (DNNs).
5
5
  Home-page: UNKNOWN
6
6
  Author: SynSense (formerly AiCTX)
@@ -277,6 +277,8 @@ tests/test_layers/test_reshaping.py
277
277
  tests/test_layers/test_sig2spk.py
278
278
  tests/test_layers/test_stateful_layer.py
279
279
  tests/test_residual/NIR_graph_nonseq.ipynb
280
+ tests/test_residual/test_jit_tracer_ann.ipynb
281
+ tests/test_residual/test_jit_tracer_cnn.ipynb
280
282
  tests/test_specksim/test_specksim_bindings.py
281
283
  tests/test_specksim/test_specksim_conversion.py
282
284
  tests/test_specksim/test_specksim_network.py
@@ -0,0 +1 @@
1
+ {"git_version": "276eda3", "is_release": false}
@@ -0,0 +1,204 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import torch\n",
10
+ "import torch.nn as nn\n",
11
+ "from sinabs import to_nir\n",
12
+ "import networkx as nx\n",
13
+ "import matplotlib.pyplot as plt"
14
+ ]
15
+ },
16
+ {
17
+ "cell_type": "code",
18
+ "execution_count": 2,
19
+ "metadata": {},
20
+ "outputs": [],
21
+ "source": [
22
+ "class NonSeq(nn.Module):\n",
23
+ " def __init__(self, *args, **kwargs) -> None:\n",
24
+ " super().__init__(*args, **kwargs)\n",
25
+ " # input tensor / output tensor\n",
26
+ " self.fc1 = nn.Linear(100, 50) # Size([1, 100]) / Size([1, 50])\n",
27
+ " self.fc2 = nn.Linear(50, 50) # Size([1, 50]) / Size([1, 50])\n",
28
+ " self.fc3 = nn.Linear(50, 50) # Size([1, 50]) / Size([1, 50])\n",
29
+ " self.fc4 = nn.Linear(50, 30) # Size([1, 50]) / Size([1, 30])\n",
30
+ " self.fc5 = nn.Linear(30, 2) # Size([1, 30]) / Size([1, 2])\n",
31
+ "\n",
32
+ " def forward(self, x):\n",
33
+ "\n",
34
+ " out1 = self.fc1(x)\n",
35
+ " out2 = self.fc2(out1)\n",
36
+ " out3 = self.fc3(out2)\n",
37
+ " out4 = self.fc4(out3 + out2)\n",
38
+ " out5 = self.fc5(out4)\n",
39
+ "\n",
40
+ " return out5\n",
41
+ "\n",
42
+ "ann = NonSeq()\n"
43
+ ]
44
+ },
45
+ {
46
+ "cell_type": "code",
47
+ "execution_count": 3,
48
+ "metadata": {},
49
+ "outputs": [
50
+ {
51
+ "name": "stdout",
52
+ "output_type": "stream",
53
+ "text": [
54
+ "7\n"
55
+ ]
56
+ }
57
+ ],
58
+ "source": [
59
+ "ann_graph = [\n",
60
+ " ('input', 'fc1'),\n",
61
+ " ('fc1', 'fc2'),\n",
62
+ " ('fc2', 'fc3'),\n",
63
+ " ('fc2', 'fc4'),\n",
64
+ " ('fc3', 'fc4'),\n",
65
+ " ('fc4', 'fc5'),\n",
66
+ " ('fc5', 'output'),\n",
67
+ "]\n",
68
+ "\n",
69
+ "print(len(ann_graph))"
70
+ ]
71
+ },
72
+ {
73
+ "cell_type": "code",
74
+ "execution_count": 4,
75
+ "metadata": {},
76
+ "outputs": [],
77
+ "source": [
78
+ "# g_ideal = nx.DiGraph(ann_graph)\n",
79
+ "# nx.draw(g_ideal, with_labels = True)\n",
80
+ "# plt.show()"
81
+ ]
82
+ },
83
+ {
84
+ "cell_type": "code",
85
+ "execution_count": 5,
86
+ "metadata": {},
87
+ "outputs": [
88
+ {
89
+ "name": "stdout",
90
+ "output_type": "stream",
91
+ "text": [
92
+ "=================================\n",
93
+ "> input_data: torch.Size([1, 100])\n",
94
+ " creating Node: Tensor_0(1, 100) <inp>\n",
95
+ " returning Node: fc1 <inp>\n",
96
+ "> output_data: torch.Size([1, 50])\n",
97
+ " returning Node: fc1 <out>\n",
98
+ " creating Node: Tensor_1(1, 50) <out>\n",
99
+ "\n",
100
+ "\n",
101
+ "> input_data: torch.Size([1, 50])\n",
102
+ " returning Node: Tensor_1(1, 50) <inp>\n",
103
+ " returning Node: fc2 <inp>\n",
104
+ "> output_data: torch.Size([1, 50])\n",
105
+ " returning Node: fc2 <out>\n",
106
+ " creating Node: Tensor_2(1, 50) <out>\n",
107
+ "\n",
108
+ "\n",
109
+ "> input_data: torch.Size([1, 50])\n",
110
+ " returning Node: Tensor_2(1, 50) <inp>\n",
111
+ " returning Node: fc3 <inp>\n",
112
+ "> output_data: torch.Size([1, 50])\n",
113
+ " returning Node: fc3 <out>\n",
114
+ " creating Node: Tensor_3(1, 50) <out>\n",
115
+ "\n",
116
+ "\n",
117
+ "> input_data: torch.Size([1, 50])\n",
118
+ " creating Node: Tensor_4(1, 50) <inp>\n",
119
+ " returning Node: fc4 <inp>\n",
120
+ "> output_data: torch.Size([1, 30])\n",
121
+ " returning Node: fc4 <out>\n",
122
+ " creating Node: Tensor_5(1, 30) <out>\n",
123
+ "\n",
124
+ "\n",
125
+ "> input_data: torch.Size([1, 30])\n",
126
+ " returning Node: Tensor_5(1, 30) <inp>\n",
127
+ " returning Node: fc5 <inp>\n",
128
+ "> output_data: torch.Size([1, 2])\n",
129
+ " returning Node: fc5 <out>\n",
130
+ " creating Node: Tensor_6(1, 2) <out>\n",
131
+ "\n",
132
+ "\n",
133
+ "> input_data: torch.Size([1, 100])\n",
134
+ "> output_data: torch.Size([1, 2])\n",
135
+ "\n",
136
+ "\n",
137
+ "++++++++++++++++++++++++++++++++\n",
138
+ " returning Node: fc1 \n",
139
+ " returning Node: fc2 \n",
140
+ " returning Node: fc2 \n",
141
+ " returning Node: fc3 \n",
142
+ " returning Node: fc4 \n",
143
+ " returning Node: fc5 \n",
144
+ "-------------extract_nir_graph_v2(extract_torch_graph()) (wrong)---------------\n",
145
+ ">>>> fc1\n",
146
+ ">>>> fc2\n",
147
+ ">>>> fc3\n",
148
+ ">>>> fc4\n",
149
+ ">>>> fc5\n",
150
+ "```mermaid\n",
151
+ "graph TD;\n",
152
+ "fc1 --> fc2;\n",
153
+ "fc2 --> fc3;\n",
154
+ "fc3;\n",
155
+ "fc4 --> fc5;\n",
156
+ "fc5;\n",
157
+ "\n",
158
+ "```\n",
159
+ " <class 'nirtorch.graph.Graph'>\n",
160
+ "--------------------------------------------------------\n",
161
+ "0: 1\n",
162
+ "1: 6 [('input', 'fc1'), ('fc1', 'fc2'), ('fc2', 'fc3'), ('fc3', 'output'), ('fc4', 'fc5'), ('fc5', 'output')]\n",
163
+ "2: 6\n"
164
+ ]
165
+ }
166
+ ],
167
+ "source": [
168
+ "nir_graph = to_nir(ann, torch.randn(1, 100))"
169
+ ]
170
+ },
171
+ {
172
+ "cell_type": "code",
173
+ "execution_count": 6,
174
+ "metadata": {},
175
+ "outputs": [],
176
+ "source": [
177
+ "# g_nir = nx.DiGraph(nir_graph.edges)\n",
178
+ "# nx.draw(g_nir, with_labels = True)\n",
179
+ "# plt.show()"
180
+ ]
181
+ }
182
+ ],
183
+ "metadata": {
184
+ "kernelspec": {
185
+ "display_name": "speck-rescnn",
186
+ "language": "python",
187
+ "name": "python3"
188
+ },
189
+ "language_info": {
190
+ "codemirror_mode": {
191
+ "name": "ipython",
192
+ "version": 3
193
+ },
194
+ "file_extension": ".py",
195
+ "mimetype": "text/x-python",
196
+ "name": "python",
197
+ "nbconvert_exporter": "python",
198
+ "pygments_lexer": "ipython3",
199
+ "version": "3.11.3"
200
+ }
201
+ },
202
+ "nbformat": 4,
203
+ "nbformat_minor": 2
204
+ }
@@ -0,0 +1,204 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 10,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import torch\n",
10
+ "import torch.nn as nn"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": 11,
16
+ "metadata": {},
17
+ "outputs": [],
18
+ "source": [
19
+ "class NonSeq(nn.Module):\n",
20
+ " def __init__(self, *args, **kwargs) -> None:\n",
21
+ " super().__init__(*args, **kwargs)\n",
22
+ " self.fc1 = nn.Linear(100, 50)\n",
23
+ " self.fc2 = nn.Linear(50, 50)\n",
24
+ " self.fc3 = nn.Linear(50, 50)\n",
25
+ " self.fc4 = nn.Linear(50, 30)\n",
26
+ " self.fc5 = nn.Linear(30, 2)\n",
27
+ "\n",
28
+ " def forward(self, x):\n",
29
+ " out1 = self.fc1(x)\n",
30
+ " out2 = self.fc2(out1)\n",
31
+ " out3 = self.fc3(out2)\n",
32
+ " out4 = self.fc4(out3 + out2)\n",
33
+ " out5 = self.fc5(out4)\n",
34
+ " return out5\n",
35
+ "\n",
36
+ "model = NonSeq()"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": 12,
42
+ "metadata": {},
43
+ "outputs": [],
44
+ "source": [
45
+ "dummy_input = torch.randn(1, 100)"
46
+ ]
47
+ },
48
+ {
49
+ "cell_type": "code",
50
+ "execution_count": 13,
51
+ "metadata": {},
52
+ "outputs": [],
53
+ "source": [
54
+ "trace = torch.jit.trace(model, dummy_input)"
55
+ ]
56
+ },
57
+ {
58
+ "cell_type": "code",
59
+ "execution_count": 14,
60
+ "metadata": {},
61
+ "outputs": [],
62
+ "source": [
63
+ "trace_output = trace(dummy_input)"
64
+ ]
65
+ },
66
+ {
67
+ "cell_type": "code",
68
+ "execution_count": 15,
69
+ "metadata": {},
70
+ "outputs": [
71
+ {
72
+ "name": "stdout",
73
+ "output_type": "stream",
74
+ "text": [
75
+ "graph(%self.1 : __torch__.___torch_mangle_15.NonSeq,\n",
76
+ " %x : Float(1, 100, strides=[100, 1], requires_grad=0, device=cpu)):\n",
77
+ " %fc5 : __torch__.torch.nn.modules.linear.___torch_mangle_14.Linear = prim::GetAttr[name=\"fc5\"](%self.1)\n",
78
+ " %fc4 : __torch__.torch.nn.modules.linear.___torch_mangle_13.Linear = prim::GetAttr[name=\"fc4\"](%self.1)\n",
79
+ " %fc3 : __torch__.torch.nn.modules.linear.___torch_mangle_12.Linear = prim::GetAttr[name=\"fc3\"](%self.1)\n",
80
+ " %fc2 : __torch__.torch.nn.modules.linear.___torch_mangle_11.Linear = prim::GetAttr[name=\"fc2\"](%self.1)\n",
81
+ " %fc1 : __torch__.torch.nn.modules.linear.___torch_mangle_10.Linear = prim::GetAttr[name=\"fc1\"](%self.1)\n",
82
+ " %61 : Tensor = prim::CallMethod[name=\"forward\"](%fc1, %x)\n",
83
+ " %62 : Tensor = prim::CallMethod[name=\"forward\"](%fc2, %61)\n",
84
+ " %63 : Tensor = prim::CallMethod[name=\"forward\"](%fc3, %62)\n",
85
+ " %32 : int = prim::Constant[value=1]() # /tmp/ipykernel_16069/242438593.py:14:0\n",
86
+ " %input.5 : Float(1, 50, strides=[50, 1], requires_grad=1, device=cpu) = aten::add(%63, %62, %32) # /tmp/ipykernel_16069/242438593.py:14:0\n",
87
+ " %64 : Tensor = prim::CallMethod[name=\"forward\"](%fc4, %input.5)\n",
88
+ " %65 : Tensor = prim::CallMethod[name=\"forward\"](%fc5, %64)\n",
89
+ " return (%65)\n",
90
+ "\n"
91
+ ]
92
+ }
93
+ ],
94
+ "source": [
95
+ "print(trace.graph)"
96
+ ]
97
+ },
98
+ {
99
+ "cell_type": "code",
100
+ "execution_count": 16,
101
+ "metadata": {},
102
+ "outputs": [
103
+ {
104
+ "name": "stdout",
105
+ "output_type": "stream",
106
+ "text": [
107
+ "def forward(self,\n",
108
+ " x: Tensor) -> Tensor:\n",
109
+ " fc5 = self.fc5\n",
110
+ " fc4 = self.fc4\n",
111
+ " fc3 = self.fc3\n",
112
+ " fc2 = self.fc2\n",
113
+ " fc1 = self.fc1\n",
114
+ " _0 = (fc2).forward((fc1).forward(x, ), )\n",
115
+ " input = torch.add((fc3).forward(_0, ), _0)\n",
116
+ " _1 = (fc5).forward((fc4).forward(input, ), )\n",
117
+ " return _1\n",
118
+ " <class 'str'>\n"
119
+ ]
120
+ }
121
+ ],
122
+ "source": [
123
+ "print(trace.code, type(trace.code))"
124
+ ]
125
+ },
126
+ {
127
+ "cell_type": "code",
128
+ "execution_count": 19,
129
+ "metadata": {},
130
+ "outputs": [
131
+ {
132
+ "name": "stdout",
133
+ "output_type": "stream",
134
+ "text": [
135
+ "(%fc5 : __torch__.torch.nn.modules.linear.___torch_mangle_14.Linear = prim::GetAttr[name=\"fc5\"](%self.1)\n",
136
+ ", fc5 defined in (%fc5 : __torch__.torch.nn.modules.linear.___torch_mangle_14.Linear = prim::GetAttr[name=\"fc5\"](%self.1)\n",
137
+ "))\n",
138
+ "(%fc4 : __torch__.torch.nn.modules.linear.___torch_mangle_13.Linear = prim::GetAttr[name=\"fc4\"](%self.1)\n",
139
+ ", fc4 defined in (%fc4 : __torch__.torch.nn.modules.linear.___torch_mangle_13.Linear = prim::GetAttr[name=\"fc4\"](%self.1)\n",
140
+ "))\n",
141
+ "(%fc3 : __torch__.torch.nn.modules.linear.___torch_mangle_12.Linear = prim::GetAttr[name=\"fc3\"](%self.1)\n",
142
+ ", fc3 defined in (%fc3 : __torch__.torch.nn.modules.linear.___torch_mangle_12.Linear = prim::GetAttr[name=\"fc3\"](%self.1)\n",
143
+ "))\n",
144
+ "(%fc2 : __torch__.torch.nn.modules.linear.___torch_mangle_11.Linear = prim::GetAttr[name=\"fc2\"](%self.1)\n",
145
+ ", fc2 defined in (%fc2 : __torch__.torch.nn.modules.linear.___torch_mangle_11.Linear = prim::GetAttr[name=\"fc2\"](%self.1)\n",
146
+ "))\n",
147
+ "(%fc1 : __torch__.torch.nn.modules.linear.___torch_mangle_10.Linear = prim::GetAttr[name=\"fc1\"](%self.1)\n",
148
+ ", fc1 defined in (%fc1 : __torch__.torch.nn.modules.linear.___torch_mangle_10.Linear = prim::GetAttr[name=\"fc1\"](%self.1)\n",
149
+ "))\n",
150
+ "(%61 : Tensor = prim::CallMethod[name=\"forward\"](%fc1, %x)\n",
151
+ ", 61 defined in (%61 : Tensor = prim::CallMethod[name=\"forward\"](%fc1, %x)\n",
152
+ "))\n",
153
+ "(%62 : Tensor = prim::CallMethod[name=\"forward\"](%fc2, %61)\n",
154
+ ", 62 defined in (%62 : Tensor = prim::CallMethod[name=\"forward\"](%fc2, %61)\n",
155
+ "))\n",
156
+ "(%63 : Tensor = prim::CallMethod[name=\"forward\"](%fc3, %62)\n",
157
+ ", 63 defined in (%63 : Tensor = prim::CallMethod[name=\"forward\"](%fc3, %62)\n",
158
+ "))\n",
159
+ "(%32 : int = prim::Constant[value=1]() # /tmp/ipykernel_16069/242438593.py:14:0\n",
160
+ ", 32 defined in (%32 : int = prim::Constant[value=1]() # /tmp/ipykernel_16069/242438593.py:14:0\n",
161
+ "))\n",
162
+ "(%input.5 : Float(1, 50, strides=[50, 1], requires_grad=1, device=cpu) = aten::add(%63, %62, %32) # /tmp/ipykernel_16069/242438593.py:14:0\n",
163
+ ", input.5 defined in (%input.5 : Float(1, 50, strides=[50, 1], requires_grad=1, device=cpu) = aten::add(%63, %62, %32) # /tmp/ipykernel_16069/242438593.py:14:0\n",
164
+ "))\n",
165
+ "(%64 : Tensor = prim::CallMethod[name=\"forward\"](%fc4, %input.5)\n",
166
+ ", 64 defined in (%64 : Tensor = prim::CallMethod[name=\"forward\"](%fc4, %input.5)\n",
167
+ "))\n",
168
+ "(%65 : Tensor = prim::CallMethod[name=\"forward\"](%fc5, %64)\n",
169
+ ", 65 defined in (%65 : Tensor = prim::CallMethod[name=\"forward\"](%fc5, %64)\n",
170
+ "))\n"
171
+ ]
172
+ }
173
+ ],
174
+ "source": [
175
+ "edges = []\n",
176
+ "for node in trace.graph.nodes():\n",
177
+ " for next_node in node.outputs():\n",
178
+ " edges.append((node, next_node))\n",
179
+ " print(edges[-1])"
180
+ ]
181
+ }
182
+ ],
183
+ "metadata": {
184
+ "kernelspec": {
185
+ "display_name": "speck-rescnn",
186
+ "language": "python",
187
+ "name": "python3"
188
+ },
189
+ "language_info": {
190
+ "codemirror_mode": {
191
+ "name": "ipython",
192
+ "version": 3
193
+ },
194
+ "file_extension": ".py",
195
+ "mimetype": "text/x-python",
196
+ "name": "python",
197
+ "nbconvert_exporter": "python",
198
+ "pygments_lexer": "ipython3",
199
+ "version": "3.11.3"
200
+ }
201
+ },
202
+ "nbformat": 4,
203
+ "nbformat_minor": 2
204
+ }
@@ -0,0 +1,149 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 9,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import torch\n",
10
+ "import torch.nn as nn"
11
+ ]
12
+ },
13
+ {
14
+ "cell_type": "code",
15
+ "execution_count": 10,
16
+ "metadata": {},
17
+ "outputs": [],
18
+ "source": [
19
+ "class NonSeqCNN(nn.Module):\n",
20
+ " def __init__(self) -> None:\n",
21
+ " super().__init__()\n",
22
+ " self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)\n",
23
+ " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n",
24
+ " self.conv3 = nn.Conv2d(64, 64, kernel_size=3, padding=1)\n",
25
+ " self.conv4 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n",
26
+ " self.conv5 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n",
27
+ "\n",
28
+ " def forward(self, x):\n",
29
+ " out1 = torch.relu(self.conv1(x))\n",
30
+ " out2 = torch.relu(self.conv2(out1))\n",
31
+ " out3 = torch.relu(self.conv3(out2))\n",
32
+ " out4 = torch.relu(self.conv4(out3))\n",
33
+ " # Apply a 1x1 convolution to match dimensions for the skip connection\n",
34
+ " out2_skip = torch.relu(nn.Conv2d(64, 128, kernel_size=1)(out2))\n",
35
+ " # Introduce skip connection by adding outputs of conv2 and conv3\n",
36
+ " out4_skip = out4 + out2_skip\n",
37
+ " out5 = torch.relu(self.conv5(out4_skip))\n",
38
+ " return out5\n",
39
+ "\n",
40
+ "model = NonSeqCNN()"
41
+ ]
42
+ },
43
+ {
44
+ "cell_type": "code",
45
+ "execution_count": 11,
46
+ "metadata": {},
47
+ "outputs": [],
48
+ "source": [
49
+ "dummy_input = torch.randn(1, 3, 32, 32)"
50
+ ]
51
+ },
52
+ {
53
+ "cell_type": "code",
54
+ "execution_count": 12,
55
+ "metadata": {},
56
+ "outputs": [
57
+ {
58
+ "name": "stderr",
59
+ "output_type": "stream",
60
+ "text": [
61
+ "/home/willian/.local/lib/python3.11/site-packages/torch/jit/_trace.py:1102: TracerWarning: Trace had nondeterministic nodes. Did you forget call .eval() on your model? Nodes:\n",
62
+ "\t%tensor.3 : Float(128, 64, 1, 1, strides=[64, 1, 1, 1], requires_grad=1, device=cpu) = aten::uniform_(%tensor.1, %173, %174, %175) # /home/willian/.local/lib/python3.11/site-packages/torch/nn/init.py:459:0\n",
63
+ "\t%bias.9 : Float(128, strides=[1], requires_grad=1, device=cpu) = aten::uniform_(%tensor, %202, %203, %204) # /home/willian/.local/lib/python3.11/site-packages/torch/nn/init.py:15:0\n",
64
+ "This may cause errors in trace checking. To disable trace checking, pass check_trace=False to torch.jit.trace()\n",
65
+ " _check_trace(\n",
66
+ "/home/willian/.local/lib/python3.11/site-packages/torch/jit/_trace.py:1102: TracerWarning: Output nr 1. of the traced function does not match the corresponding output of the Python function. Detailed error:\n",
67
+ "Tensor-likes are not close!\n",
68
+ "\n",
69
+ "Mismatched elements: 87964 / 131072 (67.1%)\n",
70
+ "Greatest absolute difference: 0.22646202147006989 at index (0, 69, 20, 16) (up to 1e-05 allowed)\n",
71
+ "Greatest relative difference: inf at index (0, 1, 0, 1) (up to 1e-05 allowed)\n",
72
+ " _check_trace(\n"
73
+ ]
74
+ }
75
+ ],
76
+ "source": [
77
+ "trace = torch.jit.trace(model, dummy_input)"
78
+ ]
79
+ },
80
+ {
81
+ "cell_type": "code",
82
+ "execution_count": 13,
83
+ "metadata": {},
84
+ "outputs": [],
85
+ "source": [
86
+ "trace_output = trace(dummy_input)"
87
+ ]
88
+ },
89
+ {
90
+ "cell_type": "code",
91
+ "execution_count": 15,
92
+ "metadata": {},
93
+ "outputs": [
94
+ {
95
+ "name": "stdout",
96
+ "output_type": "stream",
97
+ "text": [
98
+ "def forward(self,\n",
99
+ " x: Tensor) -> Tensor:\n",
100
+ " conv5 = self.conv5\n",
101
+ " conv4 = self.conv4\n",
102
+ " conv3 = self.conv3\n",
103
+ " conv2 = self.conv2\n",
104
+ " conv1 = self.conv1\n",
105
+ " input = torch.relu((conv1).forward(x, ))\n",
106
+ " input0 = torch.relu((conv2).forward(input, ))\n",
107
+ " input1 = torch.relu((conv3).forward(input0, ))\n",
108
+ " out4 = torch.relu((conv4).forward(input1, ))\n",
109
+ " data = torch.empty([128, 64, 1, 1], dtype=None, layout=None, device=torch.device(\"cpu\"), pin_memory=False)\n",
110
+ " tensor = torch.detach(data)\n",
111
+ " data0 = torch.empty([128], dtype=None, layout=None, device=torch.device(\"cpu\"), pin_memory=False)\n",
112
+ " tensor0 = torch.detach(data0)\n",
113
+ " tensor1 = torch.uniform_(tensor, -0.12499999999999999, 0.12499999999999999)\n",
114
+ " bias = torch.uniform_(tensor0, -0.125, 0.125)\n",
115
+ " _0 = torch._convolution(input0, tensor1, bias, [1, 1], [0, 0], [1, 1], False, [0, 0], 1, False, False, True, True)\n",
116
+ " out2_skip = torch.relu(_0)\n",
117
+ " input2 = torch.add(out4, out2_skip)\n",
118
+ " return torch.relu((conv5).forward(input2, ))\n",
119
+ " <class 'str'>\n"
120
+ ]
121
+ }
122
+ ],
123
+ "source": [
124
+ "print(trace.code, type(trace.code))"
125
+ ]
126
+ }
127
+ ],
128
+ "metadata": {
129
+ "kernelspec": {
130
+ "display_name": "speck-rescnn",
131
+ "language": "python",
132
+ "name": "python3"
133
+ },
134
+ "language_info": {
135
+ "codemirror_mode": {
136
+ "name": "ipython",
137
+ "version": 3
138
+ },
139
+ "file_extension": ".py",
140
+ "mimetype": "text/x-python",
141
+ "name": "python",
142
+ "nbconvert_exporter": "python",
143
+ "pygments_lexer": "ipython3",
144
+ "version": "3.11.3"
145
+ }
146
+ },
147
+ "nbformat": 4,
148
+ "nbformat_minor": 2
149
+ }
@@ -1 +0,0 @@
1
- {"git_version": "47d5c0b", "is_release": false}