pyneurale 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1084) hide show
  1. pyneurale-0.1.1/.clang-format +30 -0
  2. pyneurale-0.1.1/.gitattributes +5 -0
  3. pyneurale-0.1.1/.github/workflows/benchmarks.yml +215 -0
  4. pyneurale-0.1.1/.github/workflows/docs.yml +57 -0
  5. pyneurale-0.1.1/.github/workflows/format.yml +38 -0
  6. pyneurale-0.1.1/.github/workflows/hardware.yml +110 -0
  7. pyneurale-0.1.1/.github/workflows/pr-smoke.yml +112 -0
  8. pyneurale-0.1.1/.github/workflows/sanitizers.yml +89 -0
  9. pyneurale-0.1.1/.github/workflows/test.yml +624 -0
  10. pyneurale-0.1.1/.gitignore +229 -0
  11. pyneurale-0.1.1/.pre-commit-config.yaml +45 -0
  12. pyneurale-0.1.1/.readthedocs.yaml +23 -0
  13. pyneurale-0.1.1/CHANGELOG.md +24 -0
  14. pyneurale-0.1.1/CMakeLists.txt +204 -0
  15. pyneurale-0.1.1/LICENSE +21 -0
  16. pyneurale-0.1.1/LICENSES_bundled.txt +4098 -0
  17. pyneurale-0.1.1/NOTICE.md +25 -0
  18. pyneurale-0.1.1/PKG-INFO +143 -0
  19. pyneurale-0.1.1/README.md +100 -0
  20. pyneurale-0.1.1/SUPPORT.md +38 -0
  21. pyneurale-0.1.1/benchmarks/_harness.py +258 -0
  22. pyneurale-0.1.1/benchmarks/_regression_policy.py +459 -0
  23. pyneurale-0.1.1/benchmarks/benchmark_import.py +65 -0
  24. pyneurale-0.1.1/benchmarks/devices/benchmark_simulation.py +532 -0
  25. pyneurale-0.1.1/benchmarks/experiments/benchmark_provenance.py +263 -0
  26. pyneurale-0.1.1/benchmarks/features/benchmark_lmp.py +102 -0
  27. pyneurale-0.1.1/benchmarks/models/benchmark_inference.py +93 -0
  28. pyneurale-0.1.1/benchmarks/models/benchmark_kde.py +124 -0
  29. pyneurale-0.1.1/benchmarks/models/benchmark_knn.py +158 -0
  30. pyneurale-0.1.1/benchmarks/recording/benchmark_nrf_finalization.py +51 -0
  31. pyneurale-0.1.1/benchmarks/recording/benchmark_record_replay.py +1187 -0
  32. pyneurale-0.1.1/benchmarks/regression_policy.json +88 -0
  33. pyneurale-0.1.1/benchmarks/regression_policy.md +56 -0
  34. pyneurale-0.1.1/benchmarks/signal/_dispatch_analysis.py +103 -0
  35. pyneurale-0.1.1/benchmarks/signal/analyze_fft.py +23 -0
  36. pyneurale-0.1.1/benchmarks/signal/analyze_fir.py +24 -0
  37. pyneurale-0.1.1/benchmarks/signal/benchmark_dpss.py +111 -0
  38. pyneurale-0.1.1/benchmarks/signal/benchmark_fft.py +123 -0
  39. pyneurale-0.1.1/benchmarks/signal/benchmark_fir.py +136 -0
  40. pyneurale-0.1.1/benchmarks/signal/benchmark_fir_realtime.py +89 -0
  41. pyneurale-0.1.1/benchmarks/signal/benchmark_iir.py +162 -0
  42. pyneurale-0.1.1/benchmarks/signal/benchmark_iir_realtime.py +96 -0
  43. pyneurale-0.1.1/benchmarks/signal/benchmark_resample.py +68 -0
  44. pyneurale-0.1.1/benchmarks/sorting/benchmark_workflow.py +616 -0
  45. pyneurale-0.1.1/benchmarks/test_harness.py +48 -0
  46. pyneurale-0.1.1/cpp/CMakeLists.txt +48 -0
  47. pyneurale-0.1.1/cpp/benchmarks/CMakeLists.txt +229 -0
  48. pyneurale-0.1.1/cpp/benchmarks/allocation_tracker.cpp +277 -0
  49. pyneurale-0.1.1/cpp/benchmarks/allocation_tracker.h +35 -0
  50. pyneurale-0.1.1/cpp/benchmarks/benchmark_options.h +47 -0
  51. pyneurale-0.1.1/cpp/benchmarks/benchmark_report.h +174 -0
  52. pyneurale-0.1.1/cpp/benchmarks/devices/simulation_benchmark.cpp +1296 -0
  53. pyneurale-0.1.1/cpp/benchmarks/experiments/headless_benchmark.cpp +992 -0
  54. pyneurale-0.1.1/cpp/benchmarks/pipeline/kalman_decoder_adapter_benchmark.cpp +456 -0
  55. pyneurale-0.1.1/cpp/benchmarks/pipeline/multitaper_bandpower_benchmark.cpp +283 -0
  56. pyneurale-0.1.1/cpp/benchmarks/pipeline/spatial_reference_adapter_benchmark.cpp +356 -0
  57. pyneurale-0.1.1/cpp/benchmarks/pipeline/spike_detector_adapter_benchmark.cpp +415 -0
  58. pyneurale-0.1.1/cpp/benchmarks/pipeline/strict_realtime_benchmark.cpp +912 -0
  59. pyneurale-0.1.1/cpp/benchmarks/presentation/presenter_benchmark.cpp +798 -0
  60. pyneurale-0.1.1/cpp/benchmarks/recording/replay_benchmark.cpp +1290 -0
  61. pyneurale-0.1.1/cpp/benchmarks/sorting/valley_seeking_benchmark.cpp +199 -0
  62. pyneurale-0.1.1/cpp/benchmarks/streaming/runtime_benchmark.cpp +1094 -0
  63. pyneurale-0.1.1/cpp/bindings/CMakeLists.txt +176 -0
  64. pyneurale-0.1.1/cpp/bindings/cuda_runtime_bindings.cpp +49 -0
  65. pyneurale-0.1.1/cpp/bindings/devices/module_bindings.cpp +202 -0
  66. pyneurale-0.1.1/cpp/bindings/devices/provider_bindings.cpp +187 -0
  67. pyneurale-0.1.1/cpp/bindings/experiments/assistance_bindings.cpp +308 -0
  68. pyneurale-0.1.1/cpp/bindings/experiments/binding_helpers.h +81 -0
  69. pyneurale-0.1.1/cpp/bindings/experiments/center_out_bindings.cpp +1317 -0
  70. pyneurale-0.1.1/cpp/bindings/experiments/center_out_session_context.h +29 -0
  71. pyneurale-0.1.1/cpp/bindings/experiments/contract_bindings.cpp +901 -0
  72. pyneurale-0.1.1/cpp/bindings/experiments/module_bindings.cpp +33 -0
  73. pyneurale-0.1.1/cpp/bindings/experiments/presentation_bindings.cpp +741 -0
  74. pyneurale-0.1.1/cpp/bindings/experiments/speech_bindings.cpp +448 -0
  75. pyneurale-0.1.1/cpp/bindings/experiments/ssvep_bindings.cpp +429 -0
  76. pyneurale-0.1.1/cpp/bindings/experiments/webgrid_bindings.cpp +371 -0
  77. pyneurale-0.1.1/cpp/bindings/features/module_bindings.cpp +18 -0
  78. pyneurale-0.1.1/cpp/bindings/features/online_bindings.cpp +175 -0
  79. pyneurale-0.1.1/cpp/bindings/models/alignment_bindings.cpp +79 -0
  80. pyneurale-0.1.1/cpp/bindings/models/classification_bindings.cpp +219 -0
  81. pyneurale-0.1.1/cpp/bindings/models/cuda_bindings.cpp +218 -0
  82. pyneurale-0.1.1/cpp/bindings/models/decomposition_bindings.cpp +137 -0
  83. pyneurale-0.1.1/cpp/bindings/models/density_bindings.cpp +152 -0
  84. pyneurale-0.1.1/cpp/bindings/models/linear_model_bindings.cpp +154 -0
  85. pyneurale-0.1.1/cpp/bindings/models/manifold_bindings.cpp +107 -0
  86. pyneurale-0.1.1/cpp/bindings/models/manifold_support.h +60 -0
  87. pyneurale-0.1.1/cpp/bindings/models/module_bindings.cpp +59 -0
  88. pyneurale-0.1.1/cpp/bindings/models/neighbors_bindings.cpp +111 -0
  89. pyneurale-0.1.1/cpp/bindings/models/state_space_bindings.cpp +243 -0
  90. pyneurale-0.1.1/cpp/bindings/models/support.h +191 -0
  91. pyneurale-0.1.1/cpp/bindings/native_bindings.cpp +42 -0
  92. pyneurale-0.1.1/cpp/bindings/pipeline_bindings.cpp +505 -0
  93. pyneurale-0.1.1/cpp/bindings/recording/module_bindings.cpp +979 -0
  94. pyneurale-0.1.1/cpp/bindings/recording/replay_image_bindings.cpp +360 -0
  95. pyneurale-0.1.1/cpp/bindings/recording/spool_bindings.cpp +701 -0
  96. pyneurale-0.1.1/cpp/bindings/runtime_bindings.cpp +145 -0
  97. pyneurale-0.1.1/cpp/bindings/signal/filter_design_bindings.cpp +153 -0
  98. pyneurale-0.1.1/cpp/bindings/signal/filtering_bindings.cpp +544 -0
  99. pyneurale-0.1.1/cpp/bindings/signal/module_bindings.cpp +52 -0
  100. pyneurale-0.1.1/cpp/bindings/signal/representation_bindings.cpp +276 -0
  101. pyneurale-0.1.1/cpp/bindings/signal/resampling_bindings.cpp +140 -0
  102. pyneurale-0.1.1/cpp/bindings/signal/simulation_bindings.cpp +204 -0
  103. pyneurale-0.1.1/cpp/bindings/signal/spatial_bindings.cpp +50 -0
  104. pyneurale-0.1.1/cpp/bindings/signal/spectral_bindings.cpp +230 -0
  105. pyneurale-0.1.1/cpp/bindings/signal/support.h +63 -0
  106. pyneurale-0.1.1/cpp/bindings/signal/transform_bindings.cpp +57 -0
  107. pyneurale-0.1.1/cpp/bindings/signal/windows_bindings.cpp +65 -0
  108. pyneurale-0.1.1/cpp/bindings/sorting/detection_bindings.cpp +287 -0
  109. pyneurale-0.1.1/cpp/bindings/sorting/module_bindings.cpp +35 -0
  110. pyneurale-0.1.1/cpp/bindings/sorting/online_detection_bindings.cpp +78 -0
  111. pyneurale-0.1.1/cpp/bindings/sorting/support.h +66 -0
  112. pyneurale-0.1.1/cpp/bindings/sorting/valley_seeking_bindings.cpp +117 -0
  113. pyneurale-0.1.1/cpp/bindings/streaming/adapters.cpp +321 -0
  114. pyneurale-0.1.1/cpp/bindings/streaming/adapters.h +10 -0
  115. pyneurale-0.1.1/cpp/bindings/streaming/array_replay_bindings.cpp +77 -0
  116. pyneurale-0.1.1/cpp/bindings/streaming/array_replay_bindings.h +4 -0
  117. pyneurale-0.1.1/cpp/bindings/streaming/module_bindings.cpp +1405 -0
  118. pyneurale-0.1.1/cpp/bindings/streaming/observer_bridge.cpp +793 -0
  119. pyneurale-0.1.1/cpp/bindings/streaming/observer_bridge.h +10 -0
  120. pyneurale-0.1.1/cpp/bindings/streaming/types.h +194 -0
  121. pyneurale-0.1.1/cpp/cmake/AllocationWrapping.cmake +32 -0
  122. pyneurale-0.1.1/cpp/cmake/DependencyChecks.cmake +676 -0
  123. pyneurale-0.1.1/cpp/cmake/ExperimentPresentationDependencies.cmake +183 -0
  124. pyneurale-0.1.1/cpp/cmake/Sanitizers.cmake +146 -0
  125. pyneurale-0.1.1/cpp/include/neurale/devices/provider.h +74 -0
  126. pyneurale-0.1.1/cpp/include/neurale/devices/simulation.h +295 -0
  127. pyneurale-0.1.1/cpp/include/neurale/experiments/abnormal.h +352 -0
  128. pyneurale-0.1.1/cpp/include/neurale/experiments/assistance.h +405 -0
  129. pyneurale-0.1.1/cpp/include/neurale/experiments/center_out.h +955 -0
  130. pyneurale-0.1.1/cpp/include/neurale/experiments/center_out_guidance.h +388 -0
  131. pyneurale-0.1.1/cpp/include/neurale/experiments/center_out_replay.h +392 -0
  132. pyneurale-0.1.1/cpp/include/neurale/experiments/command.h +233 -0
  133. pyneurale-0.1.1/cpp/include/neurale/experiments/contract.h +231 -0
  134. pyneurale-0.1.1/cpp/include/neurale/experiments/events.h +202 -0
  135. pyneurale-0.1.1/cpp/include/neurale/experiments/identity.h +201 -0
  136. pyneurale-0.1.1/cpp/include/neurale/experiments/presentation.h +183 -0
  137. pyneurale-0.1.1/cpp/include/neurale/experiments/replay.h +505 -0
  138. pyneurale-0.1.1/cpp/include/neurale/experiments/schedule.h +391 -0
  139. pyneurale-0.1.1/cpp/include/neurale/experiments/speech.h +1157 -0
  140. pyneurale-0.1.1/cpp/include/neurale/experiments/speech_replay.h +299 -0
  141. pyneurale-0.1.1/cpp/include/neurale/experiments/ssvep.h +251 -0
  142. pyneurale-0.1.1/cpp/include/neurale/experiments/time.h +179 -0
  143. pyneurale-0.1.1/cpp/include/neurale/experiments/webgrid.h +395 -0
  144. pyneurale-0.1.1/cpp/include/neurale/experiments/webgrid_replay.h +265 -0
  145. pyneurale-0.1.1/cpp/include/neurale/features/online.h +105 -0
  146. pyneurale-0.1.1/cpp/include/neurale/models/alignment.h +28 -0
  147. pyneurale-0.1.1/cpp/include/neurale/models/classification.h +70 -0
  148. pyneurale-0.1.1/cpp/include/neurale/models/cuda/density.h +59 -0
  149. pyneurale-0.1.1/cpp/include/neurale/models/cuda/errors.h +19 -0
  150. pyneurale-0.1.1/cpp/include/neurale/models/cuda/manifold.h +20 -0
  151. pyneurale-0.1.1/cpp/include/neurale/models/cuda/neighbors.h +23 -0
  152. pyneurale-0.1.1/cpp/include/neurale/models/decomposition.h +66 -0
  153. pyneurale-0.1.1/cpp/include/neurale/models/density.h +82 -0
  154. pyneurale-0.1.1/cpp/include/neurale/models/linear_model.h +116 -0
  155. pyneurale-0.1.1/cpp/include/neurale/models/manifold.h +58 -0
  156. pyneurale-0.1.1/cpp/include/neurale/models/neighbors.h +48 -0
  157. pyneurale-0.1.1/cpp/include/neurale/models/state_space.h +193 -0
  158. pyneurale-0.1.1/cpp/include/neurale/runtime/runtime_info.h +168 -0
  159. pyneurale-0.1.1/cpp/include/neurale/signal/fir.h +71 -0
  160. pyneurale-0.1.1/cpp/include/neurale/signal/iir.h +155 -0
  161. pyneurale-0.1.1/cpp/include/neurale/signal/neural_simulation.h +138 -0
  162. pyneurale-0.1.1/cpp/include/neurale/signal/representations.h +233 -0
  163. pyneurale-0.1.1/cpp/include/neurale/signal/resample.h +155 -0
  164. pyneurale-0.1.1/cpp/include/neurale/signal/simulation.h +111 -0
  165. pyneurale-0.1.1/cpp/include/neurale/signal/spatial.h +40 -0
  166. pyneurale-0.1.1/cpp/include/neurale/signal/spectral.h +165 -0
  167. pyneurale-0.1.1/cpp/include/neurale/signal/transforms.h +46 -0
  168. pyneurale-0.1.1/cpp/include/neurale/signal/windows.h +55 -0
  169. pyneurale-0.1.1/cpp/include/neurale/sorting/detection.h +86 -0
  170. pyneurale-0.1.1/cpp/include/neurale/sorting/online_detection.h +223 -0
  171. pyneurale-0.1.1/cpp/include/neurale/sorting/valley_seeking.h +67 -0
  172. pyneurale-0.1.1/cpp/include/neurale/streaming/actuator.h +57 -0
  173. pyneurale-0.1.1/cpp/include/neurale/streaming/array_replay.h +90 -0
  174. pyneurale-0.1.1/cpp/include/neurale/streaming/buffer_pool.h +96 -0
  175. pyneurale-0.1.1/cpp/include/neurale/streaming/clock.h +92 -0
  176. pyneurale-0.1.1/cpp/include/neurale/streaming/consumer.h +44 -0
  177. pyneurale-0.1.1/cpp/include/neurale/streaming/continuity.h +111 -0
  178. pyneurale-0.1.1/cpp/include/neurale/streaming/critical_observer.h +80 -0
  179. pyneurale-0.1.1/cpp/include/neurale/streaming/discontinuity.h +74 -0
  180. pyneurale-0.1.1/cpp/include/neurale/streaming/discontinuity_pool.h +94 -0
  181. pyneurale-0.1.1/cpp/include/neurale/streaming/fault.h +109 -0
  182. pyneurale-0.1.1/cpp/include/neurale/streaming/frame.h +197 -0
  183. pyneurale-0.1.1/cpp/include/neurale/streaming/frame_emitter.h +306 -0
  184. pyneurale-0.1.1/cpp/include/neurale/streaming/frame_validation.h +60 -0
  185. pyneurale-0.1.1/cpp/include/neurale/streaming/linear_processor_chain.h +54 -0
  186. pyneurale-0.1.1/cpp/include/neurale/streaming/neural_intent.h +93 -0
  187. pyneurale-0.1.1/cpp/include/neurale/streaming/observer.h +74 -0
  188. pyneurale-0.1.1/cpp/include/neurale/streaming/observer_queue.h +158 -0
  189. pyneurale-0.1.1/cpp/include/neurale/streaming/processor.h +82 -0
  190. pyneurale-0.1.1/cpp/include/neurale/streaming/realtime_config.h +60 -0
  191. pyneurale-0.1.1/cpp/include/neurale/streaming/realtime_thread.h +145 -0
  192. pyneurale-0.1.1/cpp/include/neurale/streaming/runtime.h +287 -0
  193. pyneurale-0.1.1/cpp/include/neurale/streaming/safety.h +42 -0
  194. pyneurale-0.1.1/cpp/include/neurale/streaming/schema.h +274 -0
  195. pyneurale-0.1.1/cpp/include/neurale/streaming/source.h +59 -0
  196. pyneurale-0.1.1/cpp/include/neurale/streaming/spsc_ring.h +214 -0
  197. pyneurale-0.1.1/cpp/include/neurale/streaming/stats.h +293 -0
  198. pyneurale-0.1.1/cpp/include/neurale/streaming/stream_message.h +181 -0
  199. pyneurale-0.1.1/cpp/src/devices/CMakeLists.txt +19 -0
  200. pyneurale-0.1.1/cpp/src/devices/provider.cpp +747 -0
  201. pyneurale-0.1.1/cpp/src/devices/simulation.cpp +1078 -0
  202. pyneurale-0.1.1/cpp/src/execution/CMakeLists.txt +62 -0
  203. pyneurale-0.1.1/cpp/src/execution/abnormal_reporter.h +232 -0
  204. pyneurale-0.1.1/cpp/src/execution/adaptive_center_out_actuator.cpp +413 -0
  205. pyneurale-0.1.1/cpp/src/execution/adaptive_center_out_actuator.h +115 -0
  206. pyneurale-0.1.1/cpp/src/execution/bounded_trace_queue.h +154 -0
  207. pyneurale-0.1.1/cpp/src/execution/center_out_controller.cpp +822 -0
  208. pyneurale-0.1.1/cpp/src/execution/center_out_controller.h +491 -0
  209. pyneurale-0.1.1/cpp/src/execution/center_out_trace_writer.cpp +809 -0
  210. pyneurale-0.1.1/cpp/src/execution/center_out_trace_writer.h +181 -0
  211. pyneurale-0.1.1/cpp/src/execution/contract_status.h +53 -0
  212. pyneurale-0.1.1/cpp/src/execution/interval_runner.cpp +304 -0
  213. pyneurale-0.1.1/cpp/src/execution/interval_runner.h +123 -0
  214. pyneurale-0.1.1/cpp/src/execution/presentation_evidence.h +298 -0
  215. pyneurale-0.1.1/cpp/src/execution/records.cpp +363 -0
  216. pyneurale-0.1.1/cpp/src/execution/records.h +208 -0
  217. pyneurale-0.1.1/cpp/src/execution/session.cpp +919 -0
  218. pyneurale-0.1.1/cpp/src/execution/session.h +740 -0
  219. pyneurale-0.1.1/cpp/src/execution/speech_controller.cpp +363 -0
  220. pyneurale-0.1.1/cpp/src/execution/speech_controller.h +227 -0
  221. pyneurale-0.1.1/cpp/src/execution/speech_trace_writer.cpp +817 -0
  222. pyneurale-0.1.1/cpp/src/execution/speech_trace_writer.h +282 -0
  223. pyneurale-0.1.1/cpp/src/execution/ssvep_controller.cpp +409 -0
  224. pyneurale-0.1.1/cpp/src/execution/ssvep_controller.h +120 -0
  225. pyneurale-0.1.1/cpp/src/execution/webgrid_controller.cpp +350 -0
  226. pyneurale-0.1.1/cpp/src/execution/webgrid_controller.h +263 -0
  227. pyneurale-0.1.1/cpp/src/execution/webgrid_trace_writer.cpp +463 -0
  228. pyneurale-0.1.1/cpp/src/execution/webgrid_trace_writer.h +135 -0
  229. pyneurale-0.1.1/cpp/src/experiments/CMakeLists.txt +31 -0
  230. pyneurale-0.1.1/cpp/src/experiments/abnormal.cpp +178 -0
  231. pyneurale-0.1.1/cpp/src/experiments/assistance.cpp +630 -0
  232. pyneurale-0.1.1/cpp/src/experiments/center_out.cpp +883 -0
  233. pyneurale-0.1.1/cpp/src/experiments/center_out_guidance.cpp +265 -0
  234. pyneurale-0.1.1/cpp/src/experiments/center_out_replay.cpp +777 -0
  235. pyneurale-0.1.1/cpp/src/experiments/contract.cpp +65 -0
  236. pyneurale-0.1.1/cpp/src/experiments/replay.cpp +255 -0
  237. pyneurale-0.1.1/cpp/src/experiments/replay_verdict.h +87 -0
  238. pyneurale-0.1.1/cpp/src/experiments/speech.cpp +1137 -0
  239. pyneurale-0.1.1/cpp/src/experiments/speech_replay.cpp +696 -0
  240. pyneurale-0.1.1/cpp/src/experiments/ssvep.cpp +617 -0
  241. pyneurale-0.1.1/cpp/src/experiments/target_schedule.h +38 -0
  242. pyneurale-0.1.1/cpp/src/experiments/utf8.h +92 -0
  243. pyneurale-0.1.1/cpp/src/experiments/validation.cpp +253 -0
  244. pyneurale-0.1.1/cpp/src/experiments/webgrid.cpp +758 -0
  245. pyneurale-0.1.1/cpp/src/experiments/webgrid_replay.cpp +472 -0
  246. pyneurale-0.1.1/cpp/src/features/CMakeLists.txt +17 -0
  247. pyneurale-0.1.1/cpp/src/features/online.cpp +673 -0
  248. pyneurale-0.1.1/cpp/src/mkl_utils.h +93 -0
  249. pyneurale-0.1.1/cpp/src/models/CMakeLists.txt +66 -0
  250. pyneurale-0.1.1/cpp/src/models/alignment.cpp +447 -0
  251. pyneurale-0.1.1/cpp/src/models/classification.cpp +513 -0
  252. pyneurale-0.1.1/cpp/src/models/cuda/CMakeLists.txt +57 -0
  253. pyneurale-0.1.1/cpp/src/models/cuda/cuda_utils.cuh +241 -0
  254. pyneurale-0.1.1/cpp/src/models/cuda/density.cu +286 -0
  255. pyneurale-0.1.1/cpp/src/models/cuda/manifold.cpp +33 -0
  256. pyneurale-0.1.1/cpp/src/models/cuda/neighbors.cu +640 -0
  257. pyneurale-0.1.1/cpp/src/models/decomposition.cpp +239 -0
  258. pyneurale-0.1.1/cpp/src/models/density.cpp +415 -0
  259. pyneurale-0.1.1/cpp/src/models/linalg.cpp +969 -0
  260. pyneurale-0.1.1/cpp/src/models/linalg.h +109 -0
  261. pyneurale-0.1.1/cpp/src/models/linear_model.cpp +379 -0
  262. pyneurale-0.1.1/cpp/src/models/manifold.cpp +281 -0
  263. pyneurale-0.1.1/cpp/src/models/manifold_internal.h +27 -0
  264. pyneurale-0.1.1/cpp/src/models/neighbors.cpp +526 -0
  265. pyneurale-0.1.1/cpp/src/models/numeric_utils.h +121 -0
  266. pyneurale-0.1.1/cpp/src/models/span_utils.h +65 -0
  267. pyneurale-0.1.1/cpp/src/models/state_space.cpp +933 -0
  268. pyneurale-0.1.1/cpp/src/pipeline/CMakeLists.txt +43 -0
  269. pyneurale-0.1.1/cpp/src/pipeline/adapter_support.h +397 -0
  270. pyneurale-0.1.1/cpp/src/pipeline/bad_channel_removal_adapter.cpp +356 -0
  271. pyneurale-0.1.1/cpp/src/pipeline/bad_channel_removal_adapter.h +53 -0
  272. pyneurale-0.1.1/cpp/src/pipeline/decoder_training_capture.h +107 -0
  273. pyneurale-0.1.1/cpp/src/pipeline/feature_adapter_stream.h +205 -0
  274. pyneurale-0.1.1/cpp/src/pipeline/feature_stack_adapter.cpp +848 -0
  275. pyneurale-0.1.1/cpp/src/pipeline/feature_stack_adapter.h +94 -0
  276. pyneurale-0.1.1/cpp/src/pipeline/fir_filter_adapter.cpp +146 -0
  277. pyneurale-0.1.1/cpp/src/pipeline/fir_filter_adapter.h +47 -0
  278. pyneurale-0.1.1/cpp/src/pipeline/fitted_feature_contract.cpp +33 -0
  279. pyneurale-0.1.1/cpp/src/pipeline/fitted_feature_contract.h +220 -0
  280. pyneurale-0.1.1/cpp/src/pipeline/hilbert_envelope_adapter.cpp +297 -0
  281. pyneurale-0.1.1/cpp/src/pipeline/hilbert_envelope_adapter.h +69 -0
  282. pyneurale-0.1.1/cpp/src/pipeline/iir_filter_adapter.cpp +143 -0
  283. pyneurale-0.1.1/cpp/src/pipeline/iir_filter_adapter.h +47 -0
  284. pyneurale-0.1.1/cpp/src/pipeline/inplace_adapter_stream.h +104 -0
  285. pyneurale-0.1.1/cpp/src/pipeline/interval_mean_processor.cpp +138 -0
  286. pyneurale-0.1.1/cpp/src/pipeline/interval_mean_processor.h +59 -0
  287. pyneurale-0.1.1/cpp/src/pipeline/kalman_decoder_adapter.cpp +444 -0
  288. pyneurale-0.1.1/cpp/src/pipeline/kalman_decoder_adapter.h +127 -0
  289. pyneurale-0.1.1/cpp/src/pipeline/linear_decoder_adapter.cpp +461 -0
  290. pyneurale-0.1.1/cpp/src/pipeline/linear_decoder_adapter.h +124 -0
  291. pyneurale-0.1.1/cpp/src/pipeline/lmp_feature_adapter.cpp +242 -0
  292. pyneurale-0.1.1/cpp/src/pipeline/lmp_feature_adapter.h +66 -0
  293. pyneurale-0.1.1/cpp/src/pipeline/multitaper_bandpower_adapter.cpp +397 -0
  294. pyneurale-0.1.1/cpp/src/pipeline/multitaper_bandpower_adapter.h +76 -0
  295. pyneurale-0.1.1/cpp/src/pipeline/resampler_adapter.cpp +536 -0
  296. pyneurale-0.1.1/cpp/src/pipeline/resampler_adapter.h +50 -0
  297. pyneurale-0.1.1/cpp/src/pipeline/sos_filter_adapter.cpp +225 -0
  298. pyneurale-0.1.1/cpp/src/pipeline/sos_filter_adapter.h +69 -0
  299. pyneurale-0.1.1/cpp/src/pipeline/spatial_reference_adapter.cpp +160 -0
  300. pyneurale-0.1.1/cpp/src/pipeline/spatial_reference_adapter.h +70 -0
  301. pyneurale-0.1.1/cpp/src/pipeline/spike_detector_adapter.cpp +378 -0
  302. pyneurale-0.1.1/cpp/src/pipeline/spike_detector_adapter.h +58 -0
  303. pyneurale-0.1.1/cpp/src/pipeline/target_anchor.cpp +13 -0
  304. pyneurale-0.1.1/cpp/src/presentation/CMakeLists.txt +76 -0
  305. pyneurale-0.1.1/cpp/src/presentation/center_out_presenter.cpp +481 -0
  306. pyneurale-0.1.1/cpp/src/presentation/center_out_presenter.h +244 -0
  307. pyneurale-0.1.1/cpp/src/presentation/coordinate_mapper.cpp +139 -0
  308. pyneurale-0.1.1/cpp/src/presentation/coordinate_mapper.h +59 -0
  309. pyneurale-0.1.1/cpp/src/presentation/dependency_versions.cpp +31 -0
  310. pyneurale-0.1.1/cpp/src/presentation/dependency_versions.h +26 -0
  311. pyneurale-0.1.1/cpp/src/presentation/font_identity.cpp +194 -0
  312. pyneurale-0.1.1/cpp/src/presentation/font_identity.h +42 -0
  313. pyneurale-0.1.1/cpp/src/presentation/input_runtime.cpp +86 -0
  314. pyneurale-0.1.1/cpp/src/presentation/input_runtime.h +133 -0
  315. pyneurale-0.1.1/cpp/src/presentation/recording_bridge.cpp +375 -0
  316. pyneurale-0.1.1/cpp/src/presentation/recording_bridge.h +110 -0
  317. pyneurale-0.1.1/cpp/src/presentation/speech_presenter.cpp +546 -0
  318. pyneurale-0.1.1/cpp/src/presentation/speech_presenter.h +219 -0
  319. pyneurale-0.1.1/cpp/src/presentation/ssvep_presenter.cpp +245 -0
  320. pyneurale-0.1.1/cpp/src/presentation/ssvep_presenter.h +68 -0
  321. pyneurale-0.1.1/cpp/src/presentation/surface.cpp +1553 -0
  322. pyneurale-0.1.1/cpp/src/presentation/surface.h +129 -0
  323. pyneurale-0.1.1/cpp/src/presentation/surface_types.h +181 -0
  324. pyneurale-0.1.1/cpp/src/presentation/text_atlas.cpp +303 -0
  325. pyneurale-0.1.1/cpp/src/presentation/text_atlas.h +130 -0
  326. pyneurale-0.1.1/cpp/src/presentation/time_mapper.cpp +60 -0
  327. pyneurale-0.1.1/cpp/src/presentation/time_mapper.h +61 -0
  328. pyneurale-0.1.1/cpp/src/presentation/webgrid_presenter.cpp +438 -0
  329. pyneurale-0.1.1/cpp/src/presentation/webgrid_presenter.h +220 -0
  330. pyneurale-0.1.1/cpp/src/recording/CMakeLists.txt +85 -0
  331. pyneurale-0.1.1/cpp/src/recording/byte_order.h +86 -0
  332. pyneurale-0.1.1/cpp/src/recording/core/bounded_queue.h +365 -0
  333. pyneurale-0.1.1/cpp/src/recording/core/record_payloads.cpp +314 -0
  334. pyneurale-0.1.1/cpp/src/recording/core/record_payloads.h +333 -0
  335. pyneurale-0.1.1/cpp/src/recording/core/recorder.cpp +1847 -0
  336. pyneurale-0.1.1/cpp/src/recording/core/recorder.h +598 -0
  337. pyneurale-0.1.1/cpp/src/recording/core/recorder_status.cpp +123 -0
  338. pyneurale-0.1.1/cpp/src/recording/core/recorder_status.h +334 -0
  339. pyneurale-0.1.1/cpp/src/recording/core/recording_plan.cpp +155 -0
  340. pyneurale-0.1.1/cpp/src/recording/core/recording_plan.h +139 -0
  341. pyneurale-0.1.1/cpp/src/recording/crc32c.cpp +47 -0
  342. pyneurale-0.1.1/cpp/src/recording/crc32c.h +32 -0
  343. pyneurale-0.1.1/cpp/src/recording/experiment_attachment.h +35 -0
  344. pyneurale-0.1.1/cpp/src/recording/memory_spool_file.cpp +86 -0
  345. pyneurale-0.1.1/cpp/src/recording/memory_spool_file.h +111 -0
  346. pyneurale-0.1.1/cpp/src/recording/replay/image.cpp +878 -0
  347. pyneurale-0.1.1/cpp/src/recording/replay/image.h +480 -0
  348. pyneurale-0.1.1/cpp/src/recording/replay/schema_names.h +172 -0
  349. pyneurale-0.1.1/cpp/src/recording/replay/source.cpp +1189 -0
  350. pyneurale-0.1.1/cpp/src/recording/replay/source.h +433 -0
  351. pyneurale-0.1.1/cpp/src/recording/sha256.cpp +155 -0
  352. pyneurale-0.1.1/cpp/src/recording/sha256.h +49 -0
  353. pyneurale-0.1.1/cpp/src/recording/spool_file.cpp +962 -0
  354. pyneurale-0.1.1/cpp/src/recording/spool_file.h +271 -0
  355. pyneurale-0.1.1/cpp/src/recording/spool_layout.cpp +159 -0
  356. pyneurale-0.1.1/cpp/src/recording/spool_layout.h +402 -0
  357. pyneurale-0.1.1/cpp/src/recording/spool_repair.cpp +143 -0
  358. pyneurale-0.1.1/cpp/src/recording/spool_repair.h +182 -0
  359. pyneurale-0.1.1/cpp/src/recording/spool_scanner.cpp +1053 -0
  360. pyneurale-0.1.1/cpp/src/recording/spool_scanner.h +471 -0
  361. pyneurale-0.1.1/cpp/src/recording/spool_writer.cpp +800 -0
  362. pyneurale-0.1.1/cpp/src/recording/spool_writer.h +364 -0
  363. pyneurale-0.1.1/cpp/src/runtime/CMakeLists.txt +105 -0
  364. pyneurale-0.1.1/cpp/src/runtime/cpu_info.cpp +114 -0
  365. pyneurale-0.1.1/cpp/src/runtime/cuda_info.cpp +96 -0
  366. pyneurale-0.1.1/cpp/src/runtime/runtime_info.cpp +79 -0
  367. pyneurale-0.1.1/cpp/src/signal/CMakeLists.txt +81 -0
  368. pyneurale-0.1.1/cpp/src/signal/counter_random.h +52 -0
  369. pyneurale-0.1.1/cpp/src/signal/filtering/fir_builtin.cpp +55 -0
  370. pyneurale-0.1.1/cpp/src/signal/filtering/fir_builtin.h +18 -0
  371. pyneurale-0.1.1/cpp/src/signal/filtering/fir_design.cpp +349 -0
  372. pyneurale-0.1.1/cpp/src/signal/filtering/fir_dispatch.cpp +175 -0
  373. pyneurale-0.1.1/cpp/src/signal/filtering/fir_dispatch.h +36 -0
  374. pyneurale-0.1.1/cpp/src/signal/filtering/fir_mkl.cpp +206 -0
  375. pyneurale-0.1.1/cpp/src/signal/filtering/fir_mkl.h +24 -0
  376. pyneurale-0.1.1/cpp/src/signal/filtering/fir_realtime.cpp +327 -0
  377. pyneurale-0.1.1/cpp/src/signal/filtering/fir_realtime.h +69 -0
  378. pyneurale-0.1.1/cpp/src/signal/filtering/fir_state.h +40 -0
  379. pyneurale-0.1.1/cpp/src/signal/filtering/iir_builtin.cpp +79 -0
  380. pyneurale-0.1.1/cpp/src/signal/filtering/iir_builtin.h +24 -0
  381. pyneurale-0.1.1/cpp/src/signal/filtering/iir_design.cpp +773 -0
  382. pyneurale-0.1.1/cpp/src/signal/filtering/iir_dispatch.cpp +255 -0
  383. pyneurale-0.1.1/cpp/src/signal/filtering/iir_dispatch.h +47 -0
  384. pyneurale-0.1.1/cpp/src/signal/filtering/iir_mkl.cpp +107 -0
  385. pyneurale-0.1.1/cpp/src/signal/filtering/iir_mkl.h +24 -0
  386. pyneurale-0.1.1/cpp/src/signal/filtering/iir_realtime.cpp +138 -0
  387. pyneurale-0.1.1/cpp/src/signal/filtering/iir_realtime.h +50 -0
  388. pyneurale-0.1.1/cpp/src/signal/filtering/iir_zero_phase.cpp +186 -0
  389. pyneurale-0.1.1/cpp/src/signal/filtering/realtime_utils.h +20 -0
  390. pyneurale-0.1.1/cpp/src/signal/filtering/representations.cpp +1430 -0
  391. pyneurale-0.1.1/cpp/src/signal/filtering/sos_realtime.cpp +177 -0
  392. pyneurale-0.1.1/cpp/src/signal/filtering/sos_realtime.h +53 -0
  393. pyneurale-0.1.1/cpp/src/signal/filtering/spatial.cpp +82 -0
  394. pyneurale-0.1.1/cpp/src/signal/filtering/spatial_realtime.cpp +200 -0
  395. pyneurale-0.1.1/cpp/src/signal/filtering/spatial_realtime.h +98 -0
  396. pyneurale-0.1.1/cpp/src/signal/neural_simulation.cpp +470 -0
  397. pyneurale-0.1.1/cpp/src/signal/numerics.h +39 -0
  398. pyneurale-0.1.1/cpp/src/signal/resample.cpp +368 -0
  399. pyneurale-0.1.1/cpp/src/signal/simulation.cpp +202 -0
  400. pyneurale-0.1.1/cpp/src/signal/spectral/analytic.cpp +347 -0
  401. pyneurale-0.1.1/cpp/src/signal/spectral/builtin/fft.cpp +126 -0
  402. pyneurale-0.1.1/cpp/src/signal/spectral/builtin/fft.h +16 -0
  403. pyneurale-0.1.1/cpp/src/signal/spectral/czt.cpp +75 -0
  404. pyneurale-0.1.1/cpp/src/signal/spectral/fft_dispatch.cpp +88 -0
  405. pyneurale-0.1.1/cpp/src/signal/spectral/fft_dispatch.h +32 -0
  406. pyneurale-0.1.1/cpp/src/signal/spectral/fft_integrate.cpp +373 -0
  407. pyneurale-0.1.1/cpp/src/signal/spectral/mkl/fft.cpp +108 -0
  408. pyneurale-0.1.1/cpp/src/signal/spectral/mkl/fft.h +16 -0
  409. pyneurale-0.1.1/cpp/src/signal/spectral/multitaper.cpp +250 -0
  410. pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_builtin.cpp +395 -0
  411. pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_internal.h +74 -0
  412. pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_mkl.cpp +522 -0
  413. pyneurale-0.1.1/cpp/src/signal/windows/basic.cpp +122 -0
  414. pyneurale-0.1.1/cpp/src/signal/windows/dpss.cpp +335 -0
  415. pyneurale-0.1.1/cpp/src/sorting/CMakeLists.txt +26 -0
  416. pyneurale-0.1.1/cpp/src/sorting/detection.cpp +529 -0
  417. pyneurale-0.1.1/cpp/src/sorting/online_detection.cpp +883 -0
  418. pyneurale-0.1.1/cpp/src/sorting/valley_seeking.cpp +292 -0
  419. pyneurale-0.1.1/cpp/src/streaming/CMakeLists.txt +39 -0
  420. pyneurale-0.1.1/cpp/src/streaming/array_replay.cpp +200 -0
  421. pyneurale-0.1.1/cpp/src/streaming/buffer_pool.cpp +161 -0
  422. pyneurale-0.1.1/cpp/src/streaming/clock.cpp +39 -0
  423. pyneurale-0.1.1/cpp/src/streaming/continuity.cpp +409 -0
  424. pyneurale-0.1.1/cpp/src/streaming/discontinuity_pool.cpp +168 -0
  425. pyneurale-0.1.1/cpp/src/streaming/frame_validation.cpp +194 -0
  426. pyneurale-0.1.1/cpp/src/streaming/linear_processor_chain.cpp +595 -0
  427. pyneurale-0.1.1/cpp/src/streaming/realtime_config.cpp +60 -0
  428. pyneurale-0.1.1/cpp/src/streaming/realtime_thread.cpp +413 -0
  429. pyneurale-0.1.1/cpp/src/streaming/runtime.cpp +3086 -0
  430. pyneurale-0.1.1/cpp/src/streaming/safety.cpp +34 -0
  431. pyneurale-0.1.1/cpp/src/streaming/schema.cpp +485 -0
  432. pyneurale-0.1.1/cpp/src/streaming/slot_registry.h +104 -0
  433. pyneurale-0.1.1/cpp/src/streaming/terminal_frame_emitter.cpp +173 -0
  434. pyneurale-0.1.1/cpp/src/streaming/terminal_frame_emitter.h +74 -0
  435. pyneurale-0.1.1/cpp/tests/CMakeLists.txt +939 -0
  436. pyneurale-0.1.1/cpp/tests/allocation_counter.h +83 -0
  437. pyneurale-0.1.1/cpp/tests/check_counts.h +39 -0
  438. pyneurale-0.1.1/cpp/tests/check_returns.h +39 -0
  439. pyneurale-0.1.1/cpp/tests/devices/provider_fixture.cpp +78 -0
  440. pyneurale-0.1.1/cpp/tests/devices/provider_test.cpp +264 -0
  441. pyneurale-0.1.1/cpp/tests/devices/simulation_test.cpp +985 -0
  442. pyneurale-0.1.1/cpp/tests/experiments/assistance_test.cpp +704 -0
  443. pyneurale-0.1.1/cpp/tests/experiments/center_out_guidance_test.cpp +682 -0
  444. pyneurale-0.1.1/cpp/tests/experiments/center_out_test.cpp +1654 -0
  445. pyneurale-0.1.1/cpp/tests/experiments/contract_status_test.cpp +134 -0
  446. pyneurale-0.1.1/cpp/tests/experiments/contract_test.cpp +1008 -0
  447. pyneurale-0.1.1/cpp/tests/experiments/headless_execution_test.cpp +2372 -0
  448. pyneurale-0.1.1/cpp/tests/experiments/interval_runner_test.cpp +272 -0
  449. pyneurale-0.1.1/cpp/tests/experiments/replay_test.cpp +2013 -0
  450. pyneurale-0.1.1/cpp/tests/experiments/session_test.cpp +4053 -0
  451. pyneurale-0.1.1/cpp/tests/experiments/speech_test.cpp +1592 -0
  452. pyneurale-0.1.1/cpp/tests/experiments/ssvep_test.cpp +296 -0
  453. pyneurale-0.1.1/cpp/tests/experiments/ssvep_test_support.h +64 -0
  454. pyneurale-0.1.1/cpp/tests/experiments/webgrid_test.cpp +715 -0
  455. pyneurale-0.1.1/cpp/tests/integration/simulated_bci_test.cpp +726 -0
  456. pyneurale-0.1.1/cpp/tests/pipeline/bad_channel_removal_adapter_test.cpp +224 -0
  457. pyneurale-0.1.1/cpp/tests/pipeline/feature_adapter_test_support.h +207 -0
  458. pyneurale-0.1.1/cpp/tests/pipeline/feature_stack_adapter_test.cpp +329 -0
  459. pyneurale-0.1.1/cpp/tests/pipeline/fir_filter_adapter_test.cpp +459 -0
  460. pyneurale-0.1.1/cpp/tests/pipeline/hilbert_envelope_adapter_test.cpp +459 -0
  461. pyneurale-0.1.1/cpp/tests/pipeline/iir_filter_adapter_test.cpp +547 -0
  462. pyneurale-0.1.1/cpp/tests/pipeline/inplace_adapter_test_support.h +335 -0
  463. pyneurale-0.1.1/cpp/tests/pipeline/kalman_decoder_adapter_test.cpp +1366 -0
  464. pyneurale-0.1.1/cpp/tests/pipeline/linear_decoder_adapter_test.cpp +1017 -0
  465. pyneurale-0.1.1/cpp/tests/pipeline/lmp_feature_adapter_test.cpp +385 -0
  466. pyneurale-0.1.1/cpp/tests/pipeline/multitaper_bandpower_adapter_test.cpp +609 -0
  467. pyneurale-0.1.1/cpp/tests/pipeline/resampler_adapter_test.cpp +473 -0
  468. pyneurale-0.1.1/cpp/tests/pipeline/sos_filter_adapter_test.cpp +467 -0
  469. pyneurale-0.1.1/cpp/tests/pipeline/spatial_reference_adapter_test.cpp +697 -0
  470. pyneurale-0.1.1/cpp/tests/pipeline/spike_detector_adapter_test.cpp +544 -0
  471. pyneurale-0.1.1/cpp/tests/pipeline/strict_realtime_contract_test.cpp +1167 -0
  472. pyneurale-0.1.1/cpp/tests/presentation/center_out_test.cpp +573 -0
  473. pyneurale-0.1.1/cpp/tests/presentation/dependency_test.cpp +18 -0
  474. pyneurale-0.1.1/cpp/tests/presentation/recording_test.cpp +388 -0
  475. pyneurale-0.1.1/cpp/tests/presentation/skip_policy.h +60 -0
  476. pyneurale-0.1.1/cpp/tests/presentation/speech_test.cpp +744 -0
  477. pyneurale-0.1.1/cpp/tests/presentation/ssvep_test.cpp +211 -0
  478. pyneurale-0.1.1/cpp/tests/presentation/surface_test.cpp +673 -0
  479. pyneurale-0.1.1/cpp/tests/presentation/webgrid_test.cpp +458 -0
  480. pyneurale-0.1.1/cpp/tests/recording/end_to_end_test.cpp +2227 -0
  481. pyneurale-0.1.1/cpp/tests/recording/mapped_spool_file_test.cpp +337 -0
  482. pyneurale-0.1.1/cpp/tests/recording/memory_spool_file_test.cpp +177 -0
  483. pyneurale-0.1.1/cpp/tests/recording/recorder_core_test.cpp +979 -0
  484. pyneurale-0.1.1/cpp/tests/recording/recorder_failure_test.cpp +1495 -0
  485. pyneurale-0.1.1/cpp/tests/recording/recorder_test_support.h +358 -0
  486. pyneurale-0.1.1/cpp/tests/recording/replay_image_test.cpp +302 -0
  487. pyneurale-0.1.1/cpp/tests/recording/replay_source_test.cpp +1796 -0
  488. pyneurale-0.1.1/cpp/tests/recording/replay_test_support.h +661 -0
  489. pyneurale-0.1.1/cpp/tests/recording/runtime_integration_test.cpp +390 -0
  490. pyneurale-0.1.1/cpp/tests/recording/spool_checksum_test.cpp +140 -0
  491. pyneurale-0.1.1/cpp/tests/recording/spool_failure_test.cpp +582 -0
  492. pyneurale-0.1.1/cpp/tests/recording/spool_repair_test.cpp +412 -0
  493. pyneurale-0.1.1/cpp/tests/recording/spool_test_support.h +284 -0
  494. pyneurale-0.1.1/cpp/tests/recording/spool_vectors_test.cpp +371 -0
  495. pyneurale-0.1.1/cpp/tests/recording/spool_writer_test.cpp +812 -0
  496. pyneurale-0.1.1/cpp/tests/recording/test_json.h +347 -0
  497. pyneurale-0.1.1/cpp/tests/signal/neural_simulation_test.cpp +136 -0
  498. pyneurale-0.1.1/cpp/tests/signal/simulation_test.cpp +125 -0
  499. pyneurale-0.1.1/cpp/tests/sorting/detection_test.cpp +174 -0
  500. pyneurale-0.1.1/cpp/tests/sorting/online_detection_test.cpp +338 -0
  501. pyneurale-0.1.1/cpp/tests/sorting/valley_seeking_test.cpp +161 -0
  502. pyneurale-0.1.1/cpp/tests/streaming/array_replay_test.cpp +70 -0
  503. pyneurale-0.1.1/cpp/tests/streaming/buffer_pool_test.cpp +217 -0
  504. pyneurale-0.1.1/cpp/tests/streaming/continuity_test.cpp +518 -0
  505. pyneurale-0.1.1/cpp/tests/streaming/fault_injection.h +539 -0
  506. pyneurale-0.1.1/cpp/tests/streaming/fault_injection_test.cpp +424 -0
  507. pyneurale-0.1.1/cpp/tests/streaming/frame_validation_test.cpp +267 -0
  508. pyneurale-0.1.1/cpp/tests/streaming/generic_source_test.cpp +493 -0
  509. pyneurale-0.1.1/cpp/tests/streaming/output_topology_test.cpp +695 -0
  510. pyneurale-0.1.1/cpp/tests/streaming/processor_chain_test.cpp +917 -0
  511. pyneurale-0.1.1/cpp/tests/streaming/realtime_thread_test.cpp +272 -0
  512. pyneurale-0.1.1/cpp/tests/streaming/recording_lifecycle_test.cpp +1280 -0
  513. pyneurale-0.1.1/cpp/tests/streaming/runtime_test.cpp +1311 -0
  514. pyneurale-0.1.1/cpp/tests/streaming/schema_test.cpp +559 -0
  515. pyneurale-0.1.1/cpp/tests/streaming/soak_test.cpp +318 -0
  516. pyneurale-0.1.1/cpp/tests/streaming/spsc_ring_test.cpp +318 -0
  517. pyneurale-0.1.1/cpp/tests/streaming/watchdog_test.cpp +836 -0
  518. pyneurale-0.1.1/docs/Doxyfile +36 -0
  519. pyneurale-0.1.1/docs/Makefile +10 -0
  520. pyneurale-0.1.1/docs/_static/center-out-assistance-50.gif +0 -0
  521. pyneurale-0.1.1/docs/_static/readme-loop.svg +75 -0
  522. pyneurale-0.1.1/docs/_static/ssvep-demo.gif +0 -0
  523. pyneurale-0.1.1/docs/_templates/autosummary/module.rst +6 -0
  524. pyneurale-0.1.1/docs/api/cpp.md +10 -0
  525. pyneurale-0.1.1/docs/api/index.md +12 -0
  526. pyneurale-0.1.1/docs/api/presentation.md +164 -0
  527. pyneurale-0.1.1/docs/api/python.md +361 -0
  528. pyneurale-0.1.1/docs/architecture/index.md +12 -0
  529. pyneurale-0.1.1/docs/architecture/overview.md +215 -0
  530. pyneurale-0.1.1/docs/conf.py +86 -0
  531. pyneurale-0.1.1/docs/development/adding_a_pipeline_adapter.md +166 -0
  532. pyneurale-0.1.1/docs/development/benchmarks.md +462 -0
  533. pyneurale-0.1.1/docs/development/devices.md +567 -0
  534. pyneurale-0.1.1/docs/development/experiment_presentation.md +525 -0
  535. pyneurale-0.1.1/docs/development/experiments.md +3073 -0
  536. pyneurale-0.1.1/docs/development/index.md +104 -0
  537. pyneurale-0.1.1/docs/development/native_recording_replay.md +2553 -0
  538. pyneurale-0.1.1/docs/development/native_streaming.md +824 -0
  539. pyneurale-0.1.1/docs/development/native_streaming_benchmarks.md +196 -0
  540. pyneurale-0.1.1/docs/development/native_streaming_fault_testing.md +107 -0
  541. pyneurale-0.1.1/docs/development/release.md +46 -0
  542. pyneurale-0.1.1/docs/development/threshold_spike_detection.md +156 -0
  543. pyneurale-0.1.1/docs/development/trial_alignment_contract.md +283 -0
  544. pyneurale-0.1.1/docs/development/validation_matrix.md +264 -0
  545. pyneurale-0.1.1/docs/development/valley_seeking_reference.md +93 -0
  546. pyneurale-0.1.1/docs/getting_started/index.md +55 -0
  547. pyneurale-0.1.1/docs/index.md +18 -0
  548. pyneurale-0.1.1/docs/make.bat +12 -0
  549. pyneurale-0.1.1/docs/user_guide/center_out.md +71 -0
  550. pyneurale-0.1.1/docs/user_guide/data_metadata.md +61 -0
  551. pyneurale-0.1.1/docs/user_guide/device_providers.md +157 -0
  552. pyneurale-0.1.1/docs/user_guide/devices.md +144 -0
  553. pyneurale-0.1.1/docs/user_guide/erp.md +70 -0
  554. pyneurale-0.1.1/docs/user_guide/index.md +33 -0
  555. pyneurale-0.1.1/docs/user_guide/kinematics.md +70 -0
  556. pyneurale-0.1.1/docs/user_guide/lsl.md +119 -0
  557. pyneurale-0.1.1/docs/user_guide/models.md +76 -0
  558. pyneurale-0.1.1/docs/user_guide/oscillations.md +98 -0
  559. pyneurale-0.1.1/docs/user_guide/pipelines.md +265 -0
  560. pyneurale-0.1.1/docs/user_guide/recording_replay.md +70 -0
  561. pyneurale-0.1.1/docs/user_guide/runtime.md +149 -0
  562. pyneurale-0.1.1/docs/user_guide/signals.md +191 -0
  563. pyneurale-0.1.1/docs/user_guide/sorting.md +178 -0
  564. pyneurale-0.1.1/docs/user_guide/ssvep.md +272 -0
  565. pyneurale-0.1.1/docs/user_guide/tuning.md +129 -0
  566. pyneurale-0.1.1/examples/center_out_closed_loop.py +168 -0
  567. pyneurale-0.1.1/examples/device_providers/callback/CMakeLists.txt +11 -0
  568. pyneurale-0.1.1/examples/device_providers/callback/native/provider.cpp +148 -0
  569. pyneurale-0.1.1/examples/device_providers/callback/pyproject.toml +15 -0
  570. pyneurale-0.1.1/examples/device_providers/callback/src/neurale_example_callback/__init__.py +10 -0
  571. pyneurale-0.1.1/examples/device_providers/pull/CMakeLists.txt +11 -0
  572. pyneurale-0.1.1/examples/device_providers/pull/native/provider.cpp +122 -0
  573. pyneurale-0.1.1/examples/device_providers/pull/pyproject.toml +15 -0
  574. pyneurale-0.1.1/examples/device_providers/pull/src/neurale_example_pull/__init__.py +10 -0
  575. pyneurale-0.1.1/examples/device_providers/python/pyproject.toml +15 -0
  576. pyneurale-0.1.1/examples/device_providers/python/src/neurale_example_python/__init__.py +5 -0
  577. pyneurale-0.1.1/examples/device_providers/python/src/neurale_example_python/device.py +51 -0
  578. pyneurale-0.1.1/examples/lsl_stream.py +70 -0
  579. pyneurale-0.1.1/examples/ssvep_closed_loop.py +109 -0
  580. pyneurale-0.1.1/pyproject.toml +180 -0
  581. pyneurale-0.1.1/pytest.ini +28 -0
  582. pyneurale-0.1.1/specifications/native-spool/v1/README.md +851 -0
  583. pyneurale-0.1.1/specifications/native-spool/v1/tools/generate_vectors.py +1512 -0
  584. pyneurale-0.1.1/specifications/native-spool/v1/tools/spool_format.py +1525 -0
  585. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-exceeds-prefix.spool +0 -0
  586. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-flag-invalid.spool +0 -0
  587. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-identity-violation.spool +0 -0
  588. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-origin-not-recorder.spool +0 -0
  589. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-consistency.spool +0 -0
  590. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-control-loss-tag.spool +0 -0
  591. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-control-rejection-tag.spool +0 -0
  592. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-data-loss-tag.spool +0 -0
  593. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-data-rejection-tag.spool +0 -0
  594. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-identity-kind-unknown.spool +0 -0
  595. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-identity-kind-wrong-plane.spool +0 -0
  596. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-loss-missing.spool +0 -0
  597. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-tag-invalid.spool +0 -0
  598. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-uint64-wraparound.spool +0 -0
  599. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-with-items.spool +0 -0
  600. pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-without-session-end.spool +0 -0
  601. pyneurale-0.1.1/specifications/native-spool/v1/vectors/bad-back-link.spool +0 -0
  602. pyneurale-0.1.1/specifications/native-spool/v1/vectors/checkpoint-extent-beyond-transaction.spool +0 -0
  603. pyneurale-0.1.1/specifications/native-spool/v1/vectors/checkpoint-policy-mismatch.spool +0 -0
  604. pyneurale-0.1.1/specifications/native-spool/v1/vectors/container-payload-size.spool +0 -0
  605. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-body-checksum.spool +0 -0
  606. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-magic.spool +0 -0
  607. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-plan-document.spool +0 -0
  608. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-record-header.spool +0 -0
  609. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-record-payload.spool +0 -0
  610. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-superblock-checksum.spool +0 -0
  611. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-tail-bad-header-bytes.spool +0 -0
  612. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-tail-wrong-magic.spool +0 -0
  613. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-trailer-checksum.spool +0 -0
  614. pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-transaction-header-checksum.spool +0 -0
  615. pyneurale-0.1.1/specifications/native-spool/v1/vectors/duplicate-transaction-id.spool +0 -0
  616. pyneurale-0.1.1/specifications/native-spool/v1/vectors/empty-transaction.spool +0 -0
  617. pyneurale-0.1.1/specifications/native-spool/v1/vectors/index.json +1631 -0
  618. pyneurale-0.1.1/specifications/native-spool/v1/vectors/multiple-accounting.spool +0 -0
  619. pyneurale-0.1.1/specifications/native-spool/v1/vectors/multiple-session-end.spool +0 -0
  620. pyneurale-0.1.1/specifications/native-spool/v1/vectors/nonzero-padding.spool +0 -0
  621. pyneurale-0.1.1/specifications/native-spool/v1/vectors/nonzero-plan-padding.spool +0 -0
  622. pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-block-mismatch.spool +0 -0
  623. pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-gap-mismatch.spool +0 -0
  624. pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-session-end-nonzero.spool +0 -0
  625. pyneurale-0.1.1/specifications/native-spool/v1/vectors/record-count-disagreement.spool +0 -0
  626. pyneurale-0.1.1/specifications/native-spool/v1/vectors/record-flags-nonzero.spool +0 -0
  627. pyneurale-0.1.1/specifications/native-spool/v1/vectors/records-after-session-end.spool +0 -0
  628. pyneurale-0.1.1/specifications/native-spool/v1/vectors/session-end-undefined-outcome.spool +0 -0
  629. pyneurale-0.1.1/specifications/native-spool/v1/vectors/session-end-without-accounting.spool +0 -0
  630. pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-inside-body.spool +0 -0
  631. pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-inside-record-header.spool +0 -0
  632. pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-missing-trailer.spool +0 -0
  633. pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-plan-document.spool +0 -0
  634. pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-superblock.spool +0 -0
  635. pyneurale-0.1.1/specifications/native-spool/v1/vectors/trailer-item-counts.spool +0 -0
  636. pyneurale-0.1.1/specifications/native-spool/v1/vectors/transaction-id-gap.spool +0 -0
  637. pyneurale-0.1.1/specifications/native-spool/v1/vectors/undefined-superblock-field.spool +0 -0
  638. pyneurale-0.1.1/specifications/native-spool/v1/vectors/unknown-major-version.spool +0 -0
  639. pyneurale-0.1.1/specifications/native-spool/v1/vectors/unknown-record-kind.spool +0 -0
  640. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-aborted-then-faulted.spool +0 -0
  641. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-aborted-with-losses.spool +0 -0
  642. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-buffered.spool +0 -0
  643. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-checkpoint-sync.spool +0 -0
  644. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-complete.spool +0 -0
  645. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-empty.spool +0 -0
  646. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-fault-record.spool +0 -0
  647. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-minimal.spool +0 -0
  648. pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-unknown-minor.spool +0 -0
  649. pyneurale-0.1.1/specifications/nrf/package-v1.md +60 -0
  650. pyneurale-0.1.1/specifications/nrf/v1/README.md +619 -0
  651. pyneurale-0.1.1/specifications/nrf/v1/checkpoint.schema.json +206 -0
  652. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/README.md +539 -0
  653. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/journal-termination-extension.json +10 -0
  654. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/manifest-extension.full-coverage.json +170 -0
  655. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/manifest-extension.partial-coverage.json +139 -0
  656. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-discontinuities-v1.json +92 -0
  657. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-frames-v1.json +154 -0
  658. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-signal-blocks-v1.json +232 -0
  659. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-signal-gaps-v1.json +122 -0
  660. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/session-accounting-v1.json +292 -0
  661. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/native-replay.schema.json +3615 -0
  662. pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/tools/generate_fixtures.py +825 -0
  663. pyneurale-0.1.1/specifications/nrf/v1/head.schema.json +70 -0
  664. pyneurale-0.1.1/specifications/nrf/v1/journal-record.schema.json +359 -0
  665. pyneurale-0.1.1/specifications/nrf/v1/manifest.schema.json +690 -0
  666. pyneurale-0.1.1/specifications/nrf/v1/recovery-report.schema.json +133 -0
  667. pyneurale-0.1.1/specifications/nrf/v1/semantic-validation.md +90 -0
  668. pyneurale-0.1.1/specifications/nrf/v1/test-vectors.json +7899 -0
  669. pyneurale-0.1.1/specifications/nrf/v1/tools/generate_test_vectors.py +1508 -0
  670. pyneurale-0.1.1/specifications/nrf/v1/tools/jcs.py +24 -0
  671. pyneurale-0.1.1/specifications/nrf/v1/tools/semantic_validation.py +1871 -0
  672. pyneurale-0.1.1/src/neurale/__init__.py +13 -0
  673. pyneurale-0.1.1/src/neurale/_native_loader.py +38 -0
  674. pyneurale-0.1.1/src/neurale/_validation.py +332 -0
  675. pyneurale-0.1.1/src/neurale/_version.py +24 -0
  676. pyneurale-0.1.1/src/neurale/data/__init__.py +65 -0
  677. pyneurale-0.1.1/src/neurale/data/_alignment.py +446 -0
  678. pyneurale-0.1.1/src/neurale/data/_helpers.py +314 -0
  679. pyneurale-0.1.1/src/neurale/data/_time_validation.py +62 -0
  680. pyneurale-0.1.1/src/neurale/data/alignment.py +846 -0
  681. pyneurale-0.1.1/src/neurale/data/arrays.py +1189 -0
  682. pyneurale-0.1.1/src/neurale/data/channels.py +449 -0
  683. pyneurale-0.1.1/src/neurale/data/events.py +564 -0
  684. pyneurale-0.1.1/src/neurale/data/recording.py +199 -0
  685. pyneurale-0.1.1/src/neurale/data/streaming.py +113 -0
  686. pyneurale-0.1.1/src/neurale/data/time.py +88 -0
  687. pyneurale-0.1.1/src/neurale/decoding/__init__.py +85 -0
  688. pyneurale-0.1.1/src/neurale/decoding/_alignment.py +131 -0
  689. pyneurale-0.1.1/src/neurale/decoding/_dispatch.py +25 -0
  690. pyneurale-0.1.1/src/neurale/decoding/_stages.py +183 -0
  691. pyneurale-0.1.1/src/neurale/decoding/_validation.py +109 -0
  692. pyneurale-0.1.1/src/neurale/decoding/base.py +590 -0
  693. pyneurale-0.1.1/src/neurale/decoding/kalman.py +598 -0
  694. pyneurale-0.1.1/src/neurale/decoding/lda.py +363 -0
  695. pyneurale-0.1.1/src/neurale/decoding/linear.py +320 -0
  696. pyneurale-0.1.1/src/neurale/decoding/persistence/__init__.py +291 -0
  697. pyneurale-0.1.1/src/neurale/decoding/persistence/_artifact.py +319 -0
  698. pyneurale-0.1.1/src/neurale/decoding/persistence/_canonical.py +179 -0
  699. pyneurale-0.1.1/src/neurale/decoding/persistence/_codecs.py +1063 -0
  700. pyneurale-0.1.1/src/neurale/decoding/persistence/_errors.py +57 -0
  701. pyneurale-0.1.1/src/neurale/decoding/persistence/_manifest.py +191 -0
  702. pyneurale-0.1.1/src/neurale/decoding/persistence/_metadata.py +303 -0
  703. pyneurale-0.1.1/src/neurale/decoding/persistence/_stages.py +221 -0
  704. pyneurale-0.1.1/src/neurale/decoding/results.py +149 -0
  705. pyneurale-0.1.1/src/neurale/decoding/schema.py +399 -0
  706. pyneurale-0.1.1/src/neurale/decoding/sequence/__init__.py +56 -0
  707. pyneurale-0.1.1/src/neurale/decoding/sequence/beam.py +496 -0
  708. pyneurale-0.1.1/src/neurale/decoding/sequence/hypotheses.py +107 -0
  709. pyneurale-0.1.1/src/neurale/decoding/sequence/language_model.py +573 -0
  710. pyneurale-0.1.1/src/neurale/decoding/sequence/vocabulary.py +314 -0
  711. pyneurale-0.1.1/src/neurale/decoding/targets.py +122 -0
  712. pyneurale-0.1.1/src/neurale/decoding/torch/__init__.py +112 -0
  713. pyneurale-0.1.1/src/neurale/devices/__init__.py +11 -0
  714. pyneurale-0.1.1/src/neurale/devices/_process.py +67 -0
  715. pyneurale-0.1.1/src/neurale/devices/_registry.py +279 -0
  716. pyneurale-0.1.1/src/neurale/devices/lsl.py +341 -0
  717. pyneurale-0.1.1/src/neurale/devices/provider.py +125 -0
  718. pyneurale-0.1.1/src/neurale/devices/sdk/helpers.hpp +106 -0
  719. pyneurale-0.1.1/src/neurale/devices/sdk/provider.h +96 -0
  720. pyneurale-0.1.1/src/neurale/devices/simulation.py +813 -0
  721. pyneurale-0.1.1/src/neurale/exceptions.py +70 -0
  722. pyneurale-0.1.1/src/neurale/experiments/__init__.py +230 -0
  723. pyneurale-0.1.1/src/neurale/experiments/_center_out_geometry.py +51 -0
  724. pyneurale-0.1.1/src/neurale/experiments/_ssvep_session.py +322 -0
  725. pyneurale-0.1.1/src/neurale/experiments/assistance.py +85 -0
  726. pyneurale-0.1.1/src/neurale/experiments/center_out.py +335 -0
  727. pyneurale-0.1.1/src/neurale/experiments/center_out.pyi +527 -0
  728. pyneurale-0.1.1/src/neurale/experiments/center_out_session.py +460 -0
  729. pyneurale-0.1.1/src/neurale/experiments/center_out_training.py +467 -0
  730. pyneurale-0.1.1/src/neurale/experiments/closed_loop.py +784 -0
  731. pyneurale-0.1.1/src/neurale/experiments/presentation/__init__.py +111 -0
  732. pyneurale-0.1.1/src/neurale/experiments/presentation/_center_out.py +249 -0
  733. pyneurale-0.1.1/src/neurale/experiments/presentation/_native.py +26 -0
  734. pyneurale-0.1.1/src/neurale/experiments/presentation/_ssvep.py +161 -0
  735. pyneurale-0.1.1/src/neurale/experiments/presentation/_types.py +54 -0
  736. pyneurale-0.1.1/src/neurale/experiments/speech.py +177 -0
  737. pyneurale-0.1.1/src/neurale/experiments/ssvep.py +58 -0
  738. pyneurale-0.1.1/src/neurale/experiments/ssvep.pyi +248 -0
  739. pyneurale-0.1.1/src/neurale/experiments/traceability.py +1908 -0
  740. pyneurale-0.1.1/src/neurale/experiments/webgrid.py +101 -0
  741. pyneurale-0.1.1/src/neurale/features/__init__.py +66 -0
  742. pyneurale-0.1.1/src/neurale/features/_streaming_input.py +109 -0
  743. pyneurale-0.1.1/src/neurale/features/bandpower.py +294 -0
  744. pyneurale-0.1.1/src/neurale/features/erp.py +772 -0
  745. pyneurale-0.1.1/src/neurale/features/kinematics.py +584 -0
  746. pyneurale-0.1.1/src/neurale/features/online.py +335 -0
  747. pyneurale-0.1.1/src/neurale/features/oscillations.py +868 -0
  748. pyneurale-0.1.1/src/neurale/features/preprocessing.py +469 -0
  749. pyneurale-0.1.1/src/neurale/features/tuning.py +1028 -0
  750. pyneurale-0.1.1/src/neurale/io/__init__.py +26 -0
  751. pyneurale-0.1.1/src/neurale/io/_csv.py +133 -0
  752. pyneurale-0.1.1/src/neurale/io/_mat.py +142 -0
  753. pyneurale-0.1.1/src/neurale/io/nrf/__init__.py +196 -0
  754. pyneurale-0.1.1/src/neurale/io/nrf/__main__.py +127 -0
  755. pyneurale-0.1.1/src/neurale/io/nrf/_canonical.py +192 -0
  756. pyneurale-0.1.1/src/neurale/io/nrf/_completeness.py +906 -0
  757. pyneurale-0.1.1/src/neurale/io/nrf/_diagnostics.py +1026 -0
  758. pyneurale-0.1.1/src/neurale/io/nrf/_errors.py +53 -0
  759. pyneurale-0.1.1/src/neurale/io/nrf/_fields.py +68 -0
  760. pyneurale-0.1.1/src/neurale/io/nrf/_journal.py +320 -0
  761. pyneurale-0.1.1/src/neurale/io/nrf/_ledgers.py +329 -0
  762. pyneurale-0.1.1/src/neurale/io/nrf/_manifest.py +611 -0
  763. pyneurale-0.1.1/src/neurale/io/nrf/_package.py +263 -0
  764. pyneurale-0.1.1/src/neurale/io/nrf/_paths.py +191 -0
  765. pyneurale-0.1.1/src/neurale/io/nrf/_plan_document.py +1182 -0
  766. pyneurale-0.1.1/src/neurale/io/nrf/_reader.py +564 -0
  767. pyneurale-0.1.1/src/neurale/io/nrf/_recording.py +816 -0
  768. pyneurale-0.1.1/src/neurale/io/nrf/_recovery.py +589 -0
  769. pyneurale-0.1.1/src/neurale/io/nrf/_replay.py +546 -0
  770. pyneurale-0.1.1/src/neurale/io/nrf/_schemas.py +167 -0
  771. pyneurale-0.1.1/src/neurale/io/nrf/_semantics.py +969 -0
  772. pyneurale-0.1.1/src/neurale/io/nrf/_typed.py +442 -0
  773. pyneurale-0.1.1/src/neurale/io/nrf/_writer.py +853 -0
  774. pyneurale-0.1.1/src/neurale/io/nrf/_zarr.py +382 -0
  775. pyneurale-0.1.1/src/neurale/io/nrf/schemas/__init__.py +18 -0
  776. pyneurale-0.1.1/src/neurale/models/__init__.py +68 -0
  777. pyneurale-0.1.1/src/neurale/models/_dispatch.py +62 -0
  778. pyneurale-0.1.1/src/neurale/models/_inference.py +54 -0
  779. pyneurale-0.1.1/src/neurale/models/alignment.py +115 -0
  780. pyneurale-0.1.1/src/neurale/models/classification.py +231 -0
  781. pyneurale-0.1.1/src/neurale/models/decomposition.py +134 -0
  782. pyneurale-0.1.1/src/neurale/models/density.py +227 -0
  783. pyneurale-0.1.1/src/neurale/models/evaluation.py +565 -0
  784. pyneurale-0.1.1/src/neurale/models/linear_model.py +245 -0
  785. pyneurale-0.1.1/src/neurale/models/manifold.py +202 -0
  786. pyneurale-0.1.1/src/neurale/models/neighbors.py +91 -0
  787. pyneurale-0.1.1/src/neurale/models/preprocessing.py +529 -0
  788. pyneurale-0.1.1/src/neurale/models/state_space.py +684 -0
  789. pyneurale-0.1.1/src/neurale/models/statistics.py +459 -0
  790. pyneurale-0.1.1/src/neurale/pipeline/__init__.py +61 -0
  791. pyneurale-0.1.1/src/neurale/pipeline/_deployment.py +182 -0
  792. pyneurale-0.1.1/src/neurale/pipeline/_plan.py +189 -0
  793. pyneurale-0.1.1/src/neurale/pipeline/_stages.py +1159 -0
  794. pyneurale-0.1.1/src/neurale/py.typed +0 -0
  795. pyneurale-0.1.1/src/neurale/recording/__init__.py +208 -0
  796. pyneurale-0.1.1/src/neurale/recording/_block_index.py +25 -0
  797. pyneurale-0.1.1/src/neurale/recording/_budget.py +58 -0
  798. pyneurale-0.1.1/src/neurale/recording/_errors.py +137 -0
  799. pyneurale-0.1.1/src/neurale/recording/_finalizer.py +3171 -0
  800. pyneurale-0.1.1/src/neurale/recording/_native.py +40 -0
  801. pyneurale-0.1.1/src/neurale/recording/_native_recorder.py +1227 -0
  802. pyneurale-0.1.1/src/neurale/recording/_plan.py +676 -0
  803. pyneurale-0.1.1/src/neurale/recording/_recovery.py +662 -0
  804. pyneurale-0.1.1/src/neurale/recording/_registry.py +576 -0
  805. pyneurale-0.1.1/src/neurale/recording/_replay_build.py +1993 -0
  806. pyneurale-0.1.1/src/neurale/recording/_replay_config.py +518 -0
  807. pyneurale-0.1.1/src/neurale/recording/_replay_image.py +1009 -0
  808. pyneurale-0.1.1/src/neurale/recording/_session_recorder.py +1253 -0
  809. pyneurale-0.1.1/src/neurale/recording/_spec.py +356 -0
  810. pyneurale-0.1.1/src/neurale/recording/_spool_format.py +428 -0
  811. pyneurale-0.1.1/src/neurale/runtime/__init__.py +73 -0
  812. pyneurale-0.1.1/src/neurale/runtime/_device.py +100 -0
  813. pyneurale-0.1.1/src/neurale/runtime/_environment.py +77 -0
  814. pyneurale-0.1.1/src/neurale/runtime/_logging.py +210 -0
  815. pyneurale-0.1.1/src/neurale/runtime/_native_probe.py +84 -0
  816. pyneurale-0.1.1/src/neurale/runtime/_state.py +24 -0
  817. pyneurale-0.1.1/src/neurale/runtime/_types.py +11 -0
  818. pyneurale-0.1.1/src/neurale/runtime/capabilities.py +50 -0
  819. pyneurale-0.1.1/src/neurale/runtime/config.py +141 -0
  820. pyneurale-0.1.1/src/neurale/runtime/context.py +132 -0
  821. pyneurale-0.1.1/src/neurale/runtime/dependencies.py +166 -0
  822. pyneurale-0.1.1/src/neurale/runtime/diagnostics.py +436 -0
  823. pyneurale-0.1.1/src/neurale/runtime/initialization.py +146 -0
  824. pyneurale-0.1.1/src/neurale/runtime/random.py +156 -0
  825. pyneurale-0.1.1/src/neurale/runtime/threading.py +220 -0
  826. pyneurale-0.1.1/src/neurale/signal/__init__.py +142 -0
  827. pyneurale-0.1.1/src/neurale/signal/_arrays.py +18 -0
  828. pyneurale-0.1.1/src/neurale/signal/_input.py +159 -0
  829. pyneurale-0.1.1/src/neurale/signal/_numerics.py +15 -0
  830. pyneurale-0.1.1/src/neurale/signal/_validation.py +33 -0
  831. pyneurale-0.1.1/src/neurale/signal/filtering/__init__.py +93 -0
  832. pyneurale-0.1.1/src/neurale/signal/filtering/_filter.py +106 -0
  833. pyneurale-0.1.1/src/neurale/signal/filtering/_representation_numerics.py +94 -0
  834. pyneurale-0.1.1/src/neurale/signal/filtering/coefficients.py +523 -0
  835. pyneurale-0.1.1/src/neurale/signal/filtering/design.py +359 -0
  836. pyneurale-0.1.1/src/neurale/signal/filtering/fir.py +148 -0
  837. pyneurale-0.1.1/src/neurale/signal/filtering/iir.py +354 -0
  838. pyneurale-0.1.1/src/neurale/signal/filtering/iir_design.py +365 -0
  839. pyneurale-0.1.1/src/neurale/signal/filtering/representations.py +540 -0
  840. pyneurale-0.1.1/src/neurale/signal/filtering/spatial.py +175 -0
  841. pyneurale-0.1.1/src/neurale/signal/resampling.py +477 -0
  842. pyneurale-0.1.1/src/neurale/signal/simulation.py +675 -0
  843. pyneurale-0.1.1/src/neurale/signal/smoothing.py +429 -0
  844. pyneurale-0.1.1/src/neurale/signal/spectral/__init__.py +29 -0
  845. pyneurale-0.1.1/src/neurale/signal/spectral/_psd.py +180 -0
  846. pyneurale-0.1.1/src/neurale/signal/spectral/_spectrogram.py +132 -0
  847. pyneurale-0.1.1/src/neurale/signal/spectral/frequency.py +93 -0
  848. pyneurale-0.1.1/src/neurale/signal/spectral/multitaper.py +613 -0
  849. pyneurale-0.1.1/src/neurale/signal/spectral/scaling.py +120 -0
  850. pyneurale-0.1.1/src/neurale/signal/spectral/stft.py +162 -0
  851. pyneurale-0.1.1/src/neurale/signal/spectral/transforms.py +164 -0
  852. pyneurale-0.1.1/src/neurale/signal/spectral/welch.py +149 -0
  853. pyneurale-0.1.1/src/neurale/signal/transforms.py +91 -0
  854. pyneurale-0.1.1/src/neurale/signal/windows.py +180 -0
  855. pyneurale-0.1.1/src/neurale/sorting/__init__.py +48 -0
  856. pyneurale-0.1.1/src/neurale/sorting/_detection_reference.py +299 -0
  857. pyneurale-0.1.1/src/neurale/sorting/_dispatch.py +27 -0
  858. pyneurale-0.1.1/src/neurale/sorting/_helpers.py +92 -0
  859. pyneurale-0.1.1/src/neurale/sorting/_valley_seeking_reference.py +220 -0
  860. pyneurale-0.1.1/src/neurale/sorting/clustering.py +237 -0
  861. pyneurale-0.1.1/src/neurale/sorting/curation.py +770 -0
  862. pyneurale-0.1.1/src/neurale/sorting/detection.py +219 -0
  863. pyneurale-0.1.1/src/neurale/sorting/features.py +379 -0
  864. pyneurale-0.1.1/src/neurale/sorting/metrics.py +498 -0
  865. pyneurale-0.1.1/src/neurale/sorting/offline.py +233 -0
  866. pyneurale-0.1.1/src/neurale/sorting/online.py +131 -0
  867. pyneurale-0.1.1/src/neurale/sorting/workflow.py +235 -0
  868. pyneurale-0.1.1/src/neurale/streaming/__init__.py +154 -0
  869. pyneurale-0.1.1/src/neurale/streaming/_config.py +162 -0
  870. pyneurale-0.1.1/src/neurale/streaming/_feature_matrix.py +183 -0
  871. pyneurale-0.1.1/src/neurale/streaming/_native.py +69 -0
  872. pyneurale-0.1.1/src/neurale/streaming/runner.py +195 -0
  873. pyneurale-0.1.1/tests/_native_harness.py +188 -0
  874. pyneurale-0.1.1/tests/_repository_module.py +33 -0
  875. pyneurale-0.1.1/tests/_subprocess_probe.py +44 -0
  876. pyneurale-0.1.1/tests/conftest.py +199 -0
  877. pyneurale-0.1.1/tests/integration/benchmarks/test_device_simulation.py +55 -0
  878. pyneurale-0.1.1/tests/integration/benchmarks/test_record_replay.py +194 -0
  879. pyneurale-0.1.1/tests/integration/benchmarks/test_sorting_workflow.py +178 -0
  880. pyneurale-0.1.1/tests/integration/decoding/test_decoder_workflow.py +100 -0
  881. pyneurale-0.1.1/tests/integration/devices/test_simulated_record_replay.py +343 -0
  882. pyneurale-0.1.1/tests/integration/experiments/test_center_out_closed_loop.py +285 -0
  883. pyneurale-0.1.1/tests/integration/features/test_feature_workflows.py +181 -0
  884. pyneurale-0.1.1/tests/integration/recording/test_continuous_recording.py +90 -0
  885. pyneurale-0.1.1/tests/integration/runtime/test_native_extension.py +80 -0
  886. pyneurale-0.1.1/tests/integration/signal/test_clean_import.py +27 -0
  887. pyneurale-0.1.1/tests/integration/signal/test_native_common_reference.py +58 -0
  888. pyneurale-0.1.1/tests/integration/signal/test_native_filter_representations.py +145 -0
  889. pyneurale-0.1.1/tests/integration/signal/test_native_filtering.py +207 -0
  890. pyneurale-0.1.1/tests/integration/signal/test_native_iir_design.py +169 -0
  891. pyneurale-0.1.1/tests/integration/signal/test_native_iir_filtering.py +204 -0
  892. pyneurale-0.1.1/tests/integration/signal/test_native_multitaper.py +358 -0
  893. pyneurale-0.1.1/tests/integration/signal/test_native_resampling.py +220 -0
  894. pyneurale-0.1.1/tests/integration/signal/test_native_spectral_transforms.py +85 -0
  895. pyneurale-0.1.1/tests/integration/signal/test_native_spectrogram.py +58 -0
  896. pyneurale-0.1.1/tests/integration/signal/test_native_transforms.py +54 -0
  897. pyneurale-0.1.1/tests/integration/signal/test_native_windows.py +90 -0
  898. pyneurale-0.1.1/tests/integration/sorting/test_native_threshold_detection.py +224 -0
  899. pyneurale-0.1.1/tests/integration/sorting/test_native_valley_seeking.py +207 -0
  900. pyneurale-0.1.1/tests/integration/sorting/test_offline_workflow.py +319 -0
  901. pyneurale-0.1.1/tests/specification/_native_spool_v1_reference.py +66 -0
  902. pyneurale-0.1.1/tests/specification/_nrf_v1_reference.py +72 -0
  903. pyneurale-0.1.1/tests/specification/test_native_spool_v1_package_conformance.py +108 -0
  904. pyneurale-0.1.1/tests/specification/test_native_spool_v1_specification.py +969 -0
  905. pyneurale-0.1.1/tests/specification/test_nrf_v1_package_conformance.py +831 -0
  906. pyneurale-0.1.1/tests/specification/test_nrf_v1_specification.py +2627 -0
  907. pyneurale-0.1.1/tests/specification/test_nrf_v1_vector_reproducibility.py +43 -0
  908. pyneurale-0.1.1/tests/test_signal_realtime_api.py +42 -0
  909. pyneurale-0.1.1/tests/unit/data/test_arrays.py +334 -0
  910. pyneurale-0.1.1/tests/unit/data/test_channels.py +138 -0
  911. pyneurale-0.1.1/tests/unit/data/test_events.py +77 -0
  912. pyneurale-0.1.1/tests/unit/data/test_recording.py +74 -0
  913. pyneurale-0.1.1/tests/unit/data/test_spike_waveform_batch.py +758 -0
  914. pyneurale-0.1.1/tests/unit/data/test_trial_alignment.py +1484 -0
  915. pyneurale-0.1.1/tests/unit/decoding/persistence/__init__.py +11 -0
  916. pyneurale-0.1.1/tests/unit/decoding/persistence/conftest.py +194 -0
  917. pyneurale-0.1.1/tests/unit/decoding/persistence/test_decoder_artifact_failures.py +1063 -0
  918. pyneurale-0.1.1/tests/unit/decoding/persistence/test_decoder_round_trip.py +530 -0
  919. pyneurale-0.1.1/tests/unit/decoding/sequence/test_beam_search.py +807 -0
  920. pyneurale-0.1.1/tests/unit/decoding/sequence/test_language_model.py +505 -0
  921. pyneurale-0.1.1/tests/unit/decoding/sequence/test_sequence_import.py +91 -0
  922. pyneurale-0.1.1/tests/unit/decoding/sequence/test_vocabulary.py +219 -0
  923. pyneurale-0.1.1/tests/unit/decoding/test_decoder_contract.py +797 -0
  924. pyneurale-0.1.1/tests/unit/decoding/test_decoding_import.py +97 -0
  925. pyneurale-0.1.1/tests/unit/decoding/test_feature_schema.py +377 -0
  926. pyneurale-0.1.1/tests/unit/decoding/test_kalman.py +1013 -0
  927. pyneurale-0.1.1/tests/unit/decoding/test_lda.py +752 -0
  928. pyneurale-0.1.1/tests/unit/decoding/test_linear.py +718 -0
  929. pyneurale-0.1.1/tests/unit/decoding/test_results.py +182 -0
  930. pyneurale-0.1.1/tests/unit/decoding/test_targets.py +179 -0
  931. pyneurale-0.1.1/tests/unit/decoding/test_torch_boundary.py +197 -0
  932. pyneurale-0.1.1/tests/unit/devices/provider_fixture.py +51 -0
  933. pyneurale-0.1.1/tests/unit/devices/test_devices_import.py +104 -0
  934. pyneurale-0.1.1/tests/unit/devices/test_lsl.py +425 -0
  935. pyneurale-0.1.1/tests/unit/devices/test_provider.py +310 -0
  936. pyneurale-0.1.1/tests/unit/devices/test_provider_frames.py +138 -0
  937. pyneurale-0.1.1/tests/unit/devices/test_simulated_device.py +566 -0
  938. pyneurale-0.1.1/tests/unit/experiments/test_assistance.py +820 -0
  939. pyneurale-0.1.1/tests/unit/experiments/test_center_out.py +839 -0
  940. pyneurale-0.1.1/tests/unit/experiments/test_center_out_guidance.py +782 -0
  941. pyneurale-0.1.1/tests/unit/experiments/test_center_out_machine.py +1003 -0
  942. pyneurale-0.1.1/tests/unit/experiments/test_center_out_session.py +219 -0
  943. pyneurale-0.1.1/tests/unit/experiments/test_center_out_training.py +240 -0
  944. pyneurale-0.1.1/tests/unit/experiments/test_closed_loop.py +639 -0
  945. pyneurale-0.1.1/tests/unit/experiments/test_contract.py +969 -0
  946. pyneurale-0.1.1/tests/unit/experiments/test_experiments_import.py +432 -0
  947. pyneurale-0.1.1/tests/unit/experiments/test_presentation_import.py +362 -0
  948. pyneurale-0.1.1/tests/unit/experiments/test_replay.py +197 -0
  949. pyneurale-0.1.1/tests/unit/experiments/test_speech.py +1132 -0
  950. pyneurale-0.1.1/tests/unit/experiments/test_speech_machine.py +580 -0
  951. pyneurale-0.1.1/tests/unit/experiments/test_ssvep.py +130 -0
  952. pyneurale-0.1.1/tests/unit/experiments/test_ssvep_display.py +89 -0
  953. pyneurale-0.1.1/tests/unit/experiments/test_ssvep_machine.py +139 -0
  954. pyneurale-0.1.1/tests/unit/experiments/test_ssvep_session.py +204 -0
  955. pyneurale-0.1.1/tests/unit/experiments/test_traceability.py +1742 -0
  956. pyneurale-0.1.1/tests/unit/experiments/test_webgrid.py +324 -0
  957. pyneurale-0.1.1/tests/unit/experiments/test_webgrid_machine.py +405 -0
  958. pyneurale-0.1.1/tests/unit/features/test_bandpower.py +163 -0
  959. pyneurale-0.1.1/tests/unit/features/test_erp.py +836 -0
  960. pyneurale-0.1.1/tests/unit/features/test_kinematics.py +476 -0
  961. pyneurale-0.1.1/tests/unit/features/test_online.py +199 -0
  962. pyneurale-0.1.1/tests/unit/features/test_oscillations.py +1031 -0
  963. pyneurale-0.1.1/tests/unit/features/test_preprocessing.py +354 -0
  964. pyneurale-0.1.1/tests/unit/features/test_tuning.py +831 -0
  965. pyneurale-0.1.1/tests/unit/io/nrf/__init__.py +14 -0
  966. pyneurale-0.1.1/tests/unit/io/nrf/conftest.py +36 -0
  967. pyneurale-0.1.1/tests/unit/io/nrf/nrf_support.py +245 -0
  968. pyneurale-0.1.1/tests/unit/io/nrf/package_objects.py +170 -0
  969. pyneurale-0.1.1/tests/unit/io/nrf/test_canonical.py +323 -0
  970. pyneurale-0.1.1/tests/unit/io/nrf/test_completeness.py +168 -0
  971. pyneurale-0.1.1/tests/unit/io/nrf/test_corruption_recovery.py +1132 -0
  972. pyneurale-0.1.1/tests/unit/io/nrf/test_journal_replay.py +387 -0
  973. pyneurale-0.1.1/tests/unit/io/nrf/test_package.py +223 -0
  974. pyneurale-0.1.1/tests/unit/io/nrf/test_recording_round_trip.py +270 -0
  975. pyneurale-0.1.1/tests/unit/io/nrf/test_schema_layer.py +178 -0
  976. pyneurale-0.1.1/tests/unit/io/nrf/test_semantics.py +86 -0
  977. pyneurale-0.1.1/tests/unit/io/nrf/test_session.py +624 -0
  978. pyneurale-0.1.1/tests/unit/io/nrf/test_writer_invariants.py +552 -0
  979. pyneurale-0.1.1/tests/unit/io/test_csv.py +202 -0
  980. pyneurale-0.1.1/tests/unit/io/test_mat.py +220 -0
  981. pyneurale-0.1.1/tests/unit/models/test_alignment.py +190 -0
  982. pyneurale-0.1.1/tests/unit/models/test_classification.py +309 -0
  983. pyneurale-0.1.1/tests/unit/models/test_decomposition.py +272 -0
  984. pyneurale-0.1.1/tests/unit/models/test_density.py +422 -0
  985. pyneurale-0.1.1/tests/unit/models/test_device_dispatch.py +95 -0
  986. pyneurale-0.1.1/tests/unit/models/test_evaluation.py +499 -0
  987. pyneurale-0.1.1/tests/unit/models/test_linear_model.py +844 -0
  988. pyneurale-0.1.1/tests/unit/models/test_manifold.py +200 -0
  989. pyneurale-0.1.1/tests/unit/models/test_model_preprocessing.py +661 -0
  990. pyneurale-0.1.1/tests/unit/models/test_models_import.py +47 -0
  991. pyneurale-0.1.1/tests/unit/models/test_models_native_loading.py +55 -0
  992. pyneurale-0.1.1/tests/unit/models/test_neighbors.py +402 -0
  993. pyneurale-0.1.1/tests/unit/models/test_state_space.py +1122 -0
  994. pyneurale-0.1.1/tests/unit/models/test_statistics.py +265 -0
  995. pyneurale-0.1.1/tests/unit/pipeline/test_decoder_stages.py +147 -0
  996. pyneurale-0.1.1/tests/unit/pipeline/test_plan.py +897 -0
  997. pyneurale-0.1.1/tests/unit/recording/__init__.py +11 -0
  998. pyneurale-0.1.1/tests/unit/recording/conftest.py +355 -0
  999. pyneurale-0.1.1/tests/unit/recording/test_end_to_end.py +2370 -0
  1000. pyneurale-0.1.1/tests/unit/recording/test_finalizer.py +1745 -0
  1001. pyneurale-0.1.1/tests/unit/recording/test_native_ledgers.py +307 -0
  1002. pyneurale-0.1.1/tests/unit/recording/test_native_parity.py +72 -0
  1003. pyneurale-0.1.1/tests/unit/recording/test_native_recorder.py +1680 -0
  1004. pyneurale-0.1.1/tests/unit/recording/test_plan.py +480 -0
  1005. pyneurale-0.1.1/tests/unit/recording/test_recording_import.py +137 -0
  1006. pyneurale-0.1.1/tests/unit/recording/test_recovery.py +1724 -0
  1007. pyneurale-0.1.1/tests/unit/recording/test_replay_image.py +1442 -0
  1008. pyneurale-0.1.1/tests/unit/recording/test_session_recorder.py +1715 -0
  1009. pyneurale-0.1.1/tests/unit/runtime/test_config.py +53 -0
  1010. pyneurale-0.1.1/tests/unit/runtime/test_context.py +58 -0
  1011. pyneurale-0.1.1/tests/unit/runtime/test_dependencies.py +32 -0
  1012. pyneurale-0.1.1/tests/unit/runtime/test_device.py +73 -0
  1013. pyneurale-0.1.1/tests/unit/runtime/test_diagnostics.py +96 -0
  1014. pyneurale-0.1.1/tests/unit/runtime/test_environment.py +46 -0
  1015. pyneurale-0.1.1/tests/unit/runtime/test_initialization.py +119 -0
  1016. pyneurale-0.1.1/tests/unit/runtime/test_logging.py +112 -0
  1017. pyneurale-0.1.1/tests/unit/runtime/test_native_probe.py +33 -0
  1018. pyneurale-0.1.1/tests/unit/runtime/test_random.py +77 -0
  1019. pyneurale-0.1.1/tests/unit/runtime/test_runtime_import.py +53 -0
  1020. pyneurale-0.1.1/tests/unit/runtime/test_threading.py +44 -0
  1021. pyneurale-0.1.1/tests/unit/signal/test_common_reference.py +224 -0
  1022. pyneurale-0.1.1/tests/unit/signal/test_filter_representations.py +237 -0
  1023. pyneurale-0.1.1/tests/unit/signal/test_filtering.py +205 -0
  1024. pyneurale-0.1.1/tests/unit/signal/test_iir_design.py +232 -0
  1025. pyneurale-0.1.1/tests/unit/signal/test_iir_filtering.py +399 -0
  1026. pyneurale-0.1.1/tests/unit/signal/test_input_contract.py +130 -0
  1027. pyneurale-0.1.1/tests/unit/signal/test_invariants.py +71 -0
  1028. pyneurale-0.1.1/tests/unit/signal/test_multitaper.py +196 -0
  1029. pyneurale-0.1.1/tests/unit/signal/test_native_loading.py +77 -0
  1030. pyneurale-0.1.1/tests/unit/signal/test_neural_simulation.py +292 -0
  1031. pyneurale-0.1.1/tests/unit/signal/test_psd.py +211 -0
  1032. pyneurale-0.1.1/tests/unit/signal/test_resampling.py +398 -0
  1033. pyneurale-0.1.1/tests/unit/signal/test_signal_import.py +144 -0
  1034. pyneurale-0.1.1/tests/unit/signal/test_simulation.py +184 -0
  1035. pyneurale-0.1.1/tests/unit/signal/test_smoothing.py +230 -0
  1036. pyneurale-0.1.1/tests/unit/signal/test_spectral.py +110 -0
  1037. pyneurale-0.1.1/tests/unit/signal/test_spectral_transforms.py +126 -0
  1038. pyneurale-0.1.1/tests/unit/signal/test_spectrogram.py +270 -0
  1039. pyneurale-0.1.1/tests/unit/signal/test_transforms.py +205 -0
  1040. pyneurale-0.1.1/tests/unit/signal/test_windows.py +178 -0
  1041. pyneurale-0.1.1/tests/unit/sorting/test_curation.py +481 -0
  1042. pyneurale-0.1.1/tests/unit/sorting/test_detection_reference.py +464 -0
  1043. pyneurale-0.1.1/tests/unit/sorting/test_metrics.py +389 -0
  1044. pyneurale-0.1.1/tests/unit/sorting/test_offline_detection.py +327 -0
  1045. pyneurale-0.1.1/tests/unit/sorting/test_spike_block.py +190 -0
  1046. pyneurale-0.1.1/tests/unit/sorting/test_valley_seeking_reference.py +186 -0
  1047. pyneurale-0.1.1/tests/unit/sorting/test_waveform_features.py +340 -0
  1048. pyneurale-0.1.1/tests/unit/sorting/test_workflow.py +109 -0
  1049. pyneurale-0.1.1/tests/unit/streaming/__init__.py +1 -0
  1050. pyneurale-0.1.1/tests/unit/streaming/test_array_replay.py +169 -0
  1051. pyneurale-0.1.1/tests/unit/streaming/test_config.py +82 -0
  1052. pyneurale-0.1.1/tests/unit/streaming/test_feature_schema.py +245 -0
  1053. pyneurale-0.1.1/tests/unit/streaming/test_native.py +407 -0
  1054. pyneurale-0.1.1/tests/unit/streaming/test_native_observer_bridge.py +339 -0
  1055. pyneurale-0.1.1/tests/unit/streaming/test_runner.py +276 -0
  1056. pyneurale-0.1.1/tests/unit/streaming/test_streaming_import.py +129 -0
  1057. pyneurale-0.1.1/tests/unit/test_benchmark_regression_policy.py +241 -0
  1058. pyneurale-0.1.1/tests/unit/test_documented_python_paths.py +17 -0
  1059. pyneurale-0.1.1/tests/unit/test_exceptions.py +36 -0
  1060. pyneurale-0.1.1/tests/unit/test_package_artifacts.py +546 -0
  1061. pyneurale-0.1.1/tests/unit/test_package_import.py +67 -0
  1062. pyneurale-0.1.1/tests/unit/test_recording_plan_linkage.py +258 -0
  1063. pyneurale-0.1.1/tests/unit/test_suite_classification.py +93 -0
  1064. pyneurale-0.1.1/tests/unit/test_validation.py +157 -0
  1065. pyneurale-0.1.1/tools/README.md +17 -0
  1066. pyneurale-0.1.1/tools/artifacts/artifact_profiles.py +23 -0
  1067. pyneurale-0.1.1/tools/artifacts/validate_clean_wheel.py +116 -0
  1068. pyneurale-0.1.1/tools/artifacts/validate_device_providers.py +92 -0
  1069. pyneurale-0.1.1/tools/artifacts/validate_installed_artifact.py +330 -0
  1070. pyneurale-0.1.1/tools/artifacts/validate_native_binary.py +389 -0
  1071. pyneurale-0.1.1/tools/artifacts/validate_release_dist.py +123 -0
  1072. pyneurale-0.1.1/tools/artifacts/validate_required_pytest.py +46 -0
  1073. pyneurale-0.1.1/tools/artifacts/validate_wheel_profile.py +198 -0
  1074. pyneurale-0.1.1/tools/benchmark_policy.py +88 -0
  1075. pyneurale-0.1.1/tools/build_docs.py +190 -0
  1076. pyneurale-0.1.1/tools/build_release.ps1 +92 -0
  1077. pyneurale-0.1.1/tools/build_release.sh +90 -0
  1078. pyneurale-0.1.1/tools/check_format.ps1 +39 -0
  1079. pyneurale-0.1.1/tools/cmake-runner-common.psm1 +233 -0
  1080. pyneurale-0.1.1/tools/run_benchmarks.ps1 +1177 -0
  1081. pyneurale-0.1.1/tools/run_benchmarks.sh +16 -0
  1082. pyneurale-0.1.1/tools/run_cpp_tests.ps1 +230 -0
  1083. pyneurale-0.1.1/tools/run_cpp_tests.sh +16 -0
  1084. pyneurale-0.1.1/tools/run_local_ci.ps1 +653 -0
@@ -0,0 +1,30 @@
1
+ BasedOnStyle: LLVM
2
+
3
+ Language: Cpp
4
+ Standard: c++20
5
+
6
+ IndentWidth: 4
7
+ TabWidth: 4
8
+ UseTab: Never
9
+ ColumnLimit: 100
10
+
11
+ BreakBeforeBraces: Allman
12
+ NamespaceIndentation: None
13
+
14
+ AllowShortBlocksOnASingleLine: Never
15
+ AllowShortCaseLabelsOnASingleLine: false
16
+ AllowShortFunctionsOnASingleLine: Empty
17
+ AllowShortIfStatementsOnASingleLine: Never
18
+ AllowShortLoopsOnASingleLine: false
19
+
20
+ DerivePointerAlignment: false
21
+ PointerAlignment: Left
22
+ ReferenceAlignment: Pointer
23
+
24
+ SortIncludes:
25
+ Enabled: true
26
+ IgnoreCase: false
27
+ IncludeBlocks: Preserve
28
+
29
+ FixNamespaceComments: true
30
+ ReflowComments: IndentOnly
@@ -0,0 +1,5 @@
1
+ * text=auto eol=lf
2
+
3
+ # Keep CRLF for Windows scripts
4
+ *.bat text eol=crlf
5
+ *.cmd text eol=crlf
@@ -0,0 +1,215 @@
1
+ name: Controlled physical-chain performance characterization
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ collect_controlled_history:
7
+ description: Run the administered self-hosted benchmark-history job
8
+ required: false
9
+ default: false
10
+ type: boolean
11
+ schedule:
12
+ - cron: "17 3 * * 0"
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ concurrency:
18
+ group: physical-chain-benchmarks-${{ github.ref }}
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ physical-chain:
23
+ name: Physical chain (${{ matrix.provider }})
24
+ runs-on: ubuntu-24.04
25
+ timeout-minutes: 90
26
+ strategy:
27
+ fail-fast: false
28
+ matrix:
29
+ include:
30
+ - provider: builtin
31
+ enable_mkl: "OFF"
32
+ build_fft_backend: none
33
+ - provider: mkl
34
+ enable_mkl: "ON"
35
+ build_fft_backend: mkl
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: actions/setup-python@v5
39
+ with:
40
+ python-version: "3.12"
41
+ cache: pip
42
+ - name: Install native build tooling
43
+ run: python -m pip install --upgrade pip pybind11
44
+ - name: Add Intel oneAPI APT repository
45
+ if: matrix.provider == 'mkl'
46
+ run: |
47
+ sudo apt-get update
48
+ sudo apt-get install --yes gpg-agent wget
49
+ wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
50
+ echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
51
+ sudo apt-get update
52
+ - name: Install oneMKL
53
+ if: matrix.provider == 'mkl'
54
+ run: sudo apt-get install --yes intel-oneapi-mkl-devel
55
+ - name: Record resolved oneMKL packages
56
+ if: matrix.provider == 'mkl'
57
+ run: dpkg-query -W 'intel-oneapi-mkl*'
58
+ - name: Resolve oneMKL package version
59
+ id: mkl-version
60
+ if: matrix.provider == 'mkl'
61
+ run: echo "version=$(dpkg-query -W -f='${Version}' intel-oneapi-mkl-devel)" >> "$GITHUB_OUTPUT"
62
+ - name: Configure Release benchmark
63
+ run: >-
64
+ cmake -S . -B build/performance
65
+ -DCMAKE_BUILD_TYPE=Release
66
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="${GITHUB_WORKSPACE}/build/performance/bin"
67
+ -DNEURALE_BUILD_CPP_TESTS=OFF
68
+ -DNEURALE_BUILD_BENCHMARKS=ON
69
+ -DNEURALE_ENABLE_MKL=${{ matrix.enable_mkl }}
70
+ -DNEURALE_ENABLE_CUDA=OFF
71
+ -Dpybind11_DIR="$(python -m pybind11 --cmakedir)"
72
+ - name: Build physical-chain benchmark
73
+ run: >-
74
+ cmake --build build/performance --config Release
75
+ --target neurale_pipeline_strict_realtime_benchmark
76
+ - name: Run physical-chain performance characterization
77
+ run: |
78
+ mkdir -p "build/benchmark-results/${{ matrix.provider }}"
79
+ build/performance/bin/neurale_pipeline_strict_realtime_benchmark \
80
+ --warmup-seconds 1 --duration-seconds 60 --runs 3 \
81
+ > "build/benchmark-results/${{ matrix.provider }}/results.jsonl"
82
+ - name: Capture exact characterization environment
83
+ run: >-
84
+ python tools/benchmark_policy.py capture
85
+ --results "build/benchmark-results/${{ matrix.provider }}/results.jsonl"
86
+ --output "build/benchmark-results/${{ matrix.provider }}/environment.json"
87
+ --runner-class github-hosted-characterization
88
+ --runner-label github-hosted --runner-label linux --runner-label x64
89
+ --runner-name "${RUNNER_NAME}"
90
+ --runner-image "${ImageOS:-unknown}-${ImageVersion:-unknown}"
91
+ --evidence-run-id "${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.provider }}"
92
+ --git-sha "${{ github.sha }}"
93
+ --exact-command "neurale_pipeline_strict_realtime_benchmark --warmup-seconds 1 --duration-seconds 60 --runs 3"
94
+ --provider "${{ matrix.provider }}"
95
+ --software-component "cmake=$(cmake --version | head -n 1)"
96
+ --software-component "pybind11=$(python -c 'import pybind11; print(pybind11.__version__)')"
97
+ --software-component "mkl=${{ steps.mkl-version.outputs.version || 'disabled' }}"
98
+ - name: Validate machine-readable result structure
99
+ env:
100
+ EXPECTED_BUILD_FFT_BACKEND: ${{ matrix.build_fft_backend }}
101
+ RESULT_PATH: build/benchmark-results/${{ matrix.provider }}/results.jsonl
102
+ run: |
103
+ python - <<'PY'
104
+ import json
105
+ import os
106
+ from pathlib import Path
107
+
108
+ path = Path(os.environ["RESULT_PATH"])
109
+ rows = [json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line]
110
+ assert len(rows) == 42, f"expected 42 records, found {len(rows)}"
111
+ cases = {(row["feature"], row["bandpass"], row["resampler"]) for row in rows}
112
+ assert len(cases) == 14, f"expected 14 scenarios, found {len(cases)}"
113
+ assert {row["run"] for row in rows} == {0, 1, 2}
114
+ expected_build_backend = os.environ["EXPECTED_BUILD_FFT_BACKEND"]
115
+ for row in rows:
116
+ assert row["runs"] == 3
117
+ assert row["duration_seconds"] == 60
118
+ assert row["warmup_seconds"] == 1
119
+ assert row["build_fft_backend"] == expected_build_backend
120
+ assert row["feature_fft_backend"]
121
+ assert row["min"] <= row["median"] <= row["p95"] <= row["p99"] <= row["max"]
122
+ assert row["frames_per_second"] > 0
123
+ assert row["scalar_samples_per_second"] > 0
124
+ assert row["realtime_factor"] > 0
125
+ assert row["compiler"] and row["cpu_model"] and row["build_type"] == "Release"
126
+ PY
127
+ - name: Upload JSON Lines results
128
+ uses: actions/upload-artifact@v4
129
+ with:
130
+ name: physical-native-chains-${{ matrix.provider }}-${{ github.run_id }}-${{ github.run_attempt }}
131
+ path: build/benchmark-results/${{ matrix.provider }}/
132
+ if-no-files-found: error
133
+ retention-days: 30
134
+
135
+ controlled-history:
136
+ name: Controlled history (${{ matrix.provider }})
137
+ if: github.event_name == 'workflow_dispatch' && inputs.collect_controlled_history
138
+ runs-on: [self-hosted, linux, x64, pyneurale-benchmark]
139
+ timeout-minutes: 90
140
+ strategy:
141
+ fail-fast: false
142
+ matrix:
143
+ include:
144
+ - provider: builtin
145
+ enable_mkl: "OFF"
146
+ - provider: mkl
147
+ enable_mkl: "ON"
148
+ steps:
149
+ - uses: actions/checkout@v4
150
+ - uses: actions/setup-python@v5
151
+ with:
152
+ python-version: "3.12"
153
+ cache: pip
154
+ - name: Install native build tooling
155
+ run: python -m pip install --upgrade pip pybind11
156
+ - name: Require pre-provisioned oneMKL
157
+ id: mkl-version
158
+ if: matrix.provider == 'mkl'
159
+ run: |
160
+ dpkg-query -W 'intel-oneapi-mkl*'
161
+ echo "version=$(dpkg-query -W -f='${Version}' intel-oneapi-mkl-devel)" >> "$GITHUB_OUTPUT"
162
+ - name: Validate benchmark policy
163
+ run: >-
164
+ python tools/benchmark_policy.py validate
165
+ --policy benchmarks/regression_policy.json
166
+ - name: Configure controlled Release benchmark
167
+ run: >-
168
+ cmake -S . -B build/controlled-performance-${{ matrix.provider }}
169
+ -DCMAKE_BUILD_TYPE=Release
170
+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="${GITHUB_WORKSPACE}/build/controlled-performance-${{ matrix.provider }}/bin"
171
+ -DNEURALE_BUILD_CPP_TESTS=OFF
172
+ -DNEURALE_BUILD_BENCHMARKS=ON
173
+ -DNEURALE_ENABLE_MKL=${{ matrix.enable_mkl }}
174
+ -DNEURALE_ENABLE_CUDA=OFF
175
+ -Dpybind11_DIR="$(python -m pybind11 --cmakedir)"
176
+ - name: Build controlled physical-chain benchmark
177
+ run: >-
178
+ cmake --build build/controlled-performance-${{ matrix.provider }} --config Release
179
+ --target neurale_pipeline_strict_realtime_benchmark
180
+ - name: Run controlled physical-chain history sample
181
+ run: |
182
+ mkdir -p "build/controlled-evidence/${{ matrix.provider }}"
183
+ build/controlled-performance-${{ matrix.provider }}/bin/neurale_pipeline_strict_realtime_benchmark \
184
+ --warmup-seconds 1 --duration-seconds 60 --runs 3 \
185
+ > "build/controlled-evidence/${{ matrix.provider }}/results.jsonl"
186
+ - name: Capture controlled hardware and software fingerprint
187
+ run: >-
188
+ python tools/benchmark_policy.py capture
189
+ --results "build/controlled-evidence/${{ matrix.provider }}/results.jsonl"
190
+ --output "build/controlled-evidence/${{ matrix.provider }}/environment.json"
191
+ --runner-class pyneurale-linux-x64-benchmark-v1
192
+ --runner-label self-hosted --runner-label linux --runner-label x64
193
+ --runner-label pyneurale-benchmark
194
+ --runner-name "${RUNNER_NAME}" --runner-image "self-hosted"
195
+ --evidence-run-id "${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.provider }}"
196
+ --git-sha "${{ github.sha }}"
197
+ --exact-command "neurale_pipeline_strict_realtime_benchmark --warmup-seconds 1 --duration-seconds 60 --runs 3"
198
+ --provider "${{ matrix.provider }}"
199
+ --software-component "cmake=$(cmake --version | head -n 1)"
200
+ --software-component "pybind11=$(python -c 'import pybind11; print(pybind11.__version__)')"
201
+ --software-component "mkl=${{ steps.mkl-version.outputs.version || 'disabled' }}"
202
+ - name: Report current history eligibility without creating a gate
203
+ run: >-
204
+ python tools/benchmark_policy.py assess
205
+ --policy benchmarks/regression_policy.json
206
+ --runner-class pyneurale-linux-x64-benchmark-v1
207
+ --input "build/controlled-evidence/${{ matrix.provider }}"
208
+ --output "build/controlled-evidence/${{ matrix.provider }}/eligibility.json"
209
+ - name: Upload controlled history evidence
210
+ uses: actions/upload-artifact@v4
211
+ with:
212
+ name: controlled-physical-chain-${{ matrix.provider }}-${{ github.run_id }}-${{ github.run_attempt }}
213
+ path: build/controlled-evidence/${{ matrix.provider }}/
214
+ if-no-files-found: error
215
+ retention-days: 180
@@ -0,0 +1,57 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - ".github/workflows/docs.yml"
7
+ - ".readthedocs.yaml"
8
+ - "cpp/**"
9
+ - "docs/**"
10
+ - "src/**"
11
+ - "tools/build_docs.py"
12
+ - "pyproject.toml"
13
+ push:
14
+ branches:
15
+ - main
16
+ paths:
17
+ - ".github/workflows/docs.yml"
18
+ - ".readthedocs.yaml"
19
+ - "cpp/**"
20
+ - "docs/**"
21
+ - "src/**"
22
+ - "tools/build_docs.py"
23
+ - "pyproject.toml"
24
+ workflow_dispatch:
25
+
26
+ permissions:
27
+ contents: read
28
+
29
+ concurrency:
30
+ group: docs-${{ github.ref }}
31
+ cancel-in-progress: true
32
+
33
+ jobs:
34
+ check:
35
+ name: Build documentation
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: "3.12"
42
+ cache: pip
43
+ - name: Install Doxygen
44
+ run: sudo apt-get update && sudo apt-get install --yes doxygen graphviz
45
+ - name: Install project and documentation dependencies
46
+ run: python -m pip install --upgrade pip && python -m pip install -e ".[docs]"
47
+ - name: Verify headless presentation documentation boundary
48
+ run: |
49
+ python - <<'PY'
50
+ import importlib.util
51
+ import neurale.experiments.presentation
52
+
53
+ import neurale._native as native
54
+ assert not hasattr(native.experiments, "presentation")
55
+ PY
56
+ - name: Build documentation
57
+ run: python tools/build_docs.py --clean
@@ -0,0 +1,38 @@
1
+ name: Format checks
2
+
3
+ # A same-repository pull request fires both `push` and `pull_request`, so an
4
+ # unfiltered `push` ran this workflow twice per pull request. The pull-request
5
+ # trigger is the gate; `push` only needs to cover the main branch.
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+ pull_request:
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ group: format-${{ github.ref }}
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ format:
22
+ name: Python and C++ formatting
23
+ runs-on: ubuntu-latest
24
+
25
+ steps:
26
+ - name: Checkout repository
27
+ uses: actions/checkout@v4
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@v6
31
+ with:
32
+ python-version: "3.11"
33
+
34
+ - name: Install pre-commit
35
+ run: python -m pip install pre-commit==4.6.0
36
+
37
+ - name: Run formatting checks
38
+ run: pre-commit run --all-files --show-diff-on-failure
@@ -0,0 +1,110 @@
1
+ name: CUDA hardware validation
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ concurrency:
10
+ group: cuda-hardware-${{ github.ref }}
11
+ cancel-in-progress: false
12
+
13
+ jobs:
14
+ cuda-runtime-and-models:
15
+ name: CUDA runtime probe and model parity
16
+ runs-on: [self-hosted, linux, x64, cuda]
17
+ timeout-minutes: 90
18
+ env:
19
+ CMAKE_ARGS: >-
20
+ -DNEURALE_ENABLE_MKL=OFF
21
+ -DNEURALE_ENABLE_CUDA=ON
22
+ -DNEURALE_ENABLE_EXPERIMENT_PRESENTATION=OFF
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: actions/setup-python@v5
26
+ with:
27
+ python-version: "3.12"
28
+ cache: pip
29
+ - name: Require CUDA hardware and compiler
30
+ run: |
31
+ nvidia-smi
32
+ nvcc --version
33
+ - name: Install build tooling
34
+ run: python -m pip install --upgrade pip && python -m pip install pybind11 auditwheel
35
+ - name: Build CUDA-enabled wheel
36
+ run: python -m pip wheel . --no-deps --wheel-dir dist
37
+ - name: Audit CUDA wheel shared-library boundary
38
+ run: |
39
+ mkdir -p build/cuda-results
40
+ auditwheel show dist/*.whl 2>&1 | tee build/cuda-results/wheel-audit.txt
41
+ - name: Inspect CUDA extension exports and direct dependencies
42
+ run: >-
43
+ python tools/artifacts/validate_native_binary.py --profile cuda --wheel-dir dist
44
+ --audit-report build/cuda-results/wheel-audit.txt
45
+ --report build/cuda-results/native-binary.json
46
+ - name: Test CUDA wheel in a clean environment
47
+ run: >-
48
+ python tools/artifacts/validate_clean_wheel.py --profile cuda --wheel-dir dist
49
+ --report build/cuda-results/clean-wheel.json
50
+ - name: Install CUDA-enabled wheel
51
+ run: >-
52
+ python -c "from pathlib import Path; import subprocess,sys;
53
+ wheel=next(Path('dist').glob('*.whl'));
54
+ subprocess.check_call([sys.executable,'-m','pip','install',str(wheel)+'[test]'])"
55
+ - name: Require compiled and available CUDA runtime
56
+ run: |
57
+ mkdir -p build/cuda-results
58
+ nvidia-smi --query-gpu=name,driver_version,compute_cap --format=csv > build/cuda-results/gpu.csv
59
+ nvcc --version > build/cuda-results/nvcc.txt
60
+ python - <<'PY' | tee build/cuda-results/runtime.json
61
+ import json
62
+ import neurale._native as native
63
+
64
+ build = native.build_info()
65
+ runtime = native.cuda.info()
66
+ assert build["cuda_compiled"] is True, build
67
+ assert build["cuda_toolkit_version"], build
68
+ assert runtime["compiled"] is True, runtime
69
+ assert runtime["available"] is True, runtime
70
+ assert runtime["device_count"] >= 1, runtime
71
+ assert runtime["devices"], runtime
72
+ print(json.dumps({"build": build, "runtime": runtime}, indent=2))
73
+ PY
74
+ # The supported hardware contract requires one CUDA device. The separate
75
+ # multi-device restoration case is deliberately outside this job rather
76
+ # than being selected and then silently skipped on a one-GPU runner.
77
+ - name: Run required single-device CUDA runtime and model tests
78
+ run: >-
79
+ python -m pytest -o addopts="--require-native -ra"
80
+ -m gpu
81
+ --deselect=tests/unit/models/test_neighbors.py::test_knn_cuda_restores_previous_device
82
+ --junitxml=build/cuda-results/pytest.xml
83
+ tests/integration/runtime/test_native_extension.py
84
+ tests/unit/models/test_neighbors.py
85
+ tests/unit/models/test_density.py
86
+ tests/unit/models/test_manifold.py
87
+ - name: Reject an all-skipped CUDA result
88
+ run: |
89
+ python - <<'PY'
90
+ from pathlib import Path
91
+ import xml.etree.ElementTree as ET
92
+
93
+ root = ET.parse(Path("build/cuda-results/pytest.xml")).getroot()
94
+ suites = [root] if root.tag == "testsuite" else list(root.findall("testsuite"))
95
+ tests = sum(int(suite.attrib.get("tests", 0)) for suite in suites)
96
+ skipped = sum(int(suite.attrib.get("skipped", 0)) for suite in suites)
97
+ failures = sum(int(suite.attrib.get("failures", 0)) for suite in suites)
98
+ errors = sum(int(suite.attrib.get("errors", 0)) for suite in suites)
99
+ assert tests >= 31, tests
100
+ assert skipped == 0, skipped
101
+ assert failures == 0 and errors == 0, (failures, errors)
102
+ PY
103
+ - name: Upload CUDA evidence
104
+ if: always()
105
+ uses: actions/upload-artifact@v4
106
+ with:
107
+ name: cuda-hardware-${{ github.run_id }}-${{ github.run_attempt }}
108
+ path: build/cuda-results
109
+ if-no-files-found: error
110
+ retention-days: 30
@@ -0,0 +1,112 @@
1
+ name: Fast PR smoke
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - ".github/workflows/**"
7
+ - "benchmarks/**"
8
+ - "CMakeLists.txt"
9
+ - "cpp/**"
10
+ - "specifications/**"
11
+ - "src/**"
12
+ - "tests/**"
13
+ - "tools/**"
14
+ - "pyproject.toml"
15
+ - "pytest.ini"
16
+ - "SUPPORT.md"
17
+ workflow_dispatch:
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ concurrency:
23
+ group: pr-smoke-${{ github.ref }}
24
+ cancel-in-progress: true
25
+
26
+ jobs:
27
+ source-imports:
28
+ name: Source-only imports (Python ${{ matrix.python-version }})
29
+ runs-on: ubuntu-24.04
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ python-version: ["3.11", "3.12"]
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: actions/setup-python@v5
37
+ with:
38
+ python-version: ${{ matrix.python-version }}
39
+ cache: pip
40
+ - name: Install source-only dependencies
41
+ run: python -m pip install --upgrade pip && python -m pip install numpy scipy pytest
42
+ - name: Run import and dependency-error smoke
43
+ env:
44
+ PYTHONPATH: ${{ github.workspace }}/src
45
+ run: |
46
+ # The file list is the one in tests/conftest.py, never a second copy:
47
+ # a hand-written list in CI drifts, and a python_only file missing
48
+ # from it silently runs nowhere. Passing paths is still required --
49
+ # collecting all of tests/ without an install dies on the native
50
+ # modules before any marker selection happens.
51
+ readarray -t suite < <(python -c "
52
+ import sys
53
+ sys.path.insert(0, 'tests')
54
+ import conftest
55
+ for relative in sorted(conftest._PYTHON_ONLY_FILES):
56
+ print('tests/' + relative)
57
+ ")
58
+ python -m pytest -o addopts="" -m python_only "${suite[@]}"
59
+
60
+ cpu-wheel:
61
+ name: CPU wheel smoke (${{ matrix.name }})
62
+ runs-on: ${{ matrix.runner }}
63
+ strategy:
64
+ fail-fast: false
65
+ matrix:
66
+ include:
67
+ - name: Ubuntu 24.04 / Python 3.12
68
+ runner: ubuntu-24.04
69
+ - name: Windows / Python 3.12
70
+ runner: windows-latest
71
+ env:
72
+ CMAKE_ARGS: >-
73
+ -DNEURALE_ENABLE_MKL=OFF
74
+ -DNEURALE_ENABLE_CUDA=OFF
75
+ -DNEURALE_ENABLE_EXPERIMENT_PRESENTATION=OFF
76
+ steps:
77
+ - uses: actions/checkout@v4
78
+ - uses: actions/setup-python@v5
79
+ with:
80
+ python-version: "3.12"
81
+ cache: pip
82
+ - name: Install build tooling
83
+ run: python -m pip install --upgrade pip && python -m pip install pybind11
84
+ - name: Build CPU wheel
85
+ run: python -m pip wheel . --no-deps --wheel-dir dist
86
+ - name: Test core wheel in a clean environment
87
+ run: python tools/artifacts/validate_clean_wheel.py --profile core --wheel-dir dist
88
+ - name: Install built wheel
89
+ run: >-
90
+ python -c "from pathlib import Path; import subprocess,sys;
91
+ wheel=next(Path('dist').glob('*.whl'));
92
+ subprocess.check_call([sys.executable,'-m','pip','install',str(wheel)+'[test]'])"
93
+ - name: Require native CPU and headless imports
94
+ run: >-
95
+ python -c "import importlib.util,sys;
96
+ import neurale,neurale.experiments;
97
+ import neurale._native as native;
98
+ info=native.build_info();
99
+ assert info['cuda_compiled'] is False;
100
+ assert info['cpu_math_backend']=='none';
101
+ assert not hasattr(native.experiments, 'presentation');
102
+ print(info)"
103
+ - name: Run native and headless experiment smoke
104
+ run: >-
105
+ python -m pytest
106
+ tests/integration/runtime/test_native_extension.py
107
+ tests/unit/experiments/test_experiments_import.py
108
+ tests/unit/experiments/test_presentation_import.py
109
+ - name: Run installed-wheel formal Center-Out closed loops
110
+ run: >-
111
+ python -m pytest -o "addopts=--require-native -ra"
112
+ tests/integration/experiments/test_center_out_closed_loop.py::test_headless_center_out
@@ -0,0 +1,89 @@
1
+ name: Native sanitizers
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - ".github/workflows/sanitizers.yml"
9
+ - "CMakeLists.txt"
10
+ - "cpp/**"
11
+ - "src/**"
12
+ - "tests/**"
13
+ workflow_dispatch:
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ concurrency:
19
+ group: sanitizers-${{ github.ref }}
20
+ cancel-in-progress: true
21
+
22
+ jobs:
23
+ linux-asan-ubsan-lsan:
24
+ name: Linux CPU ASan, UBSan, and LSan
25
+ runs-on: ubuntu-24.04
26
+ timeout-minutes: 60
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: "3.12"
32
+ cache: pip
33
+ - name: Install native build tooling
34
+ run: python -m pip install --upgrade pip pybind11
35
+ - name: Configure native sanitizer tests
36
+ run: >-
37
+ cmake -S . -B build/sanitizers
38
+ -DNEURALE_BUILD_CPP_TESTS=ON
39
+ -DNEURALE_ENABLE_MKL=OFF
40
+ -DNEURALE_ENABLE_CUDA=OFF
41
+ -DNEURALE_ENABLE_ASAN=ON
42
+ -DNEURALE_ENABLE_UBSAN=ON
43
+ -DNEURALE_ENABLE_LSAN=ON
44
+ -Dpybind11_DIR="$(python -m pybind11 --cmakedir)"
45
+ - name: Compile every public header independently with GCC
46
+ run: >-
47
+ cmake --build build/sanitizers --config RelWithDebInfo
48
+ --target neurale_public_header_self_containment
49
+ - name: Build native sanitizer tests
50
+ run: cmake --build build/sanitizers --config RelWithDebInfo
51
+ - name: Run required sanitizer tests
52
+ run: >-
53
+ ctest --test-dir build/sanitizers -C RelWithDebInfo
54
+ -R '^(neurale_streaming_|neurale_pipeline_|neurale_recording_|neurale_experiments_|neurale_execution_)'
55
+ -LE 'allocation-full|allocation-operator-new'
56
+ --no-tests=error --output-on-failure
57
+
58
+ windows-msvc-asan:
59
+ name: Windows CPU MSVC ASan
60
+ runs-on: windows-latest
61
+ timeout-minutes: 60
62
+ steps:
63
+ - uses: actions/checkout@v4
64
+ - uses: actions/setup-python@v5
65
+ with:
66
+ python-version: "3.12"
67
+ cache: pip
68
+ - name: Install native build tooling
69
+ run: python -m pip install --upgrade pip pybind11
70
+ - name: Configure native ASan tests
71
+ run: >-
72
+ cmake -S . -B build/asan-msvc
73
+ -DNEURALE_BUILD_CPP_TESTS=ON
74
+ -DNEURALE_ENABLE_MKL=OFF
75
+ -DNEURALE_ENABLE_CUDA=OFF
76
+ -DNEURALE_ENABLE_ASAN=ON
77
+ -Dpybind11_DIR="$(python -m pybind11 --cmakedir)"
78
+ - name: Compile every public header independently with MSVC
79
+ run: >-
80
+ cmake --build build/asan-msvc --config RelWithDebInfo
81
+ --target neurale_public_header_self_containment
82
+ - name: Build native ASan tests
83
+ run: cmake --build build/asan-msvc --config RelWithDebInfo
84
+ - name: Run required ASan tests
85
+ run: >-
86
+ ctest --test-dir build/asan-msvc -C RelWithDebInfo
87
+ -R '^(neurale_streaming_|neurale_pipeline_|neurale_recording_|neurale_experiments_|neurale_execution_)'
88
+ -LE 'allocation-full|allocation-operator-new'
89
+ --no-tests=error --output-on-failure