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.
- pyneurale-0.1.1/.clang-format +30 -0
- pyneurale-0.1.1/.gitattributes +5 -0
- pyneurale-0.1.1/.github/workflows/benchmarks.yml +215 -0
- pyneurale-0.1.1/.github/workflows/docs.yml +57 -0
- pyneurale-0.1.1/.github/workflows/format.yml +38 -0
- pyneurale-0.1.1/.github/workflows/hardware.yml +110 -0
- pyneurale-0.1.1/.github/workflows/pr-smoke.yml +112 -0
- pyneurale-0.1.1/.github/workflows/sanitizers.yml +89 -0
- pyneurale-0.1.1/.github/workflows/test.yml +624 -0
- pyneurale-0.1.1/.gitignore +229 -0
- pyneurale-0.1.1/.pre-commit-config.yaml +45 -0
- pyneurale-0.1.1/.readthedocs.yaml +23 -0
- pyneurale-0.1.1/CHANGELOG.md +24 -0
- pyneurale-0.1.1/CMakeLists.txt +204 -0
- pyneurale-0.1.1/LICENSE +21 -0
- pyneurale-0.1.1/LICENSES_bundled.txt +4098 -0
- pyneurale-0.1.1/NOTICE.md +25 -0
- pyneurale-0.1.1/PKG-INFO +143 -0
- pyneurale-0.1.1/README.md +100 -0
- pyneurale-0.1.1/SUPPORT.md +38 -0
- pyneurale-0.1.1/benchmarks/_harness.py +258 -0
- pyneurale-0.1.1/benchmarks/_regression_policy.py +459 -0
- pyneurale-0.1.1/benchmarks/benchmark_import.py +65 -0
- pyneurale-0.1.1/benchmarks/devices/benchmark_simulation.py +532 -0
- pyneurale-0.1.1/benchmarks/experiments/benchmark_provenance.py +263 -0
- pyneurale-0.1.1/benchmarks/features/benchmark_lmp.py +102 -0
- pyneurale-0.1.1/benchmarks/models/benchmark_inference.py +93 -0
- pyneurale-0.1.1/benchmarks/models/benchmark_kde.py +124 -0
- pyneurale-0.1.1/benchmarks/models/benchmark_knn.py +158 -0
- pyneurale-0.1.1/benchmarks/recording/benchmark_nrf_finalization.py +51 -0
- pyneurale-0.1.1/benchmarks/recording/benchmark_record_replay.py +1187 -0
- pyneurale-0.1.1/benchmarks/regression_policy.json +88 -0
- pyneurale-0.1.1/benchmarks/regression_policy.md +56 -0
- pyneurale-0.1.1/benchmarks/signal/_dispatch_analysis.py +103 -0
- pyneurale-0.1.1/benchmarks/signal/analyze_fft.py +23 -0
- pyneurale-0.1.1/benchmarks/signal/analyze_fir.py +24 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_dpss.py +111 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_fft.py +123 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_fir.py +136 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_fir_realtime.py +89 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_iir.py +162 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_iir_realtime.py +96 -0
- pyneurale-0.1.1/benchmarks/signal/benchmark_resample.py +68 -0
- pyneurale-0.1.1/benchmarks/sorting/benchmark_workflow.py +616 -0
- pyneurale-0.1.1/benchmarks/test_harness.py +48 -0
- pyneurale-0.1.1/cpp/CMakeLists.txt +48 -0
- pyneurale-0.1.1/cpp/benchmarks/CMakeLists.txt +229 -0
- pyneurale-0.1.1/cpp/benchmarks/allocation_tracker.cpp +277 -0
- pyneurale-0.1.1/cpp/benchmarks/allocation_tracker.h +35 -0
- pyneurale-0.1.1/cpp/benchmarks/benchmark_options.h +47 -0
- pyneurale-0.1.1/cpp/benchmarks/benchmark_report.h +174 -0
- pyneurale-0.1.1/cpp/benchmarks/devices/simulation_benchmark.cpp +1296 -0
- pyneurale-0.1.1/cpp/benchmarks/experiments/headless_benchmark.cpp +992 -0
- pyneurale-0.1.1/cpp/benchmarks/pipeline/kalman_decoder_adapter_benchmark.cpp +456 -0
- pyneurale-0.1.1/cpp/benchmarks/pipeline/multitaper_bandpower_benchmark.cpp +283 -0
- pyneurale-0.1.1/cpp/benchmarks/pipeline/spatial_reference_adapter_benchmark.cpp +356 -0
- pyneurale-0.1.1/cpp/benchmarks/pipeline/spike_detector_adapter_benchmark.cpp +415 -0
- pyneurale-0.1.1/cpp/benchmarks/pipeline/strict_realtime_benchmark.cpp +912 -0
- pyneurale-0.1.1/cpp/benchmarks/presentation/presenter_benchmark.cpp +798 -0
- pyneurale-0.1.1/cpp/benchmarks/recording/replay_benchmark.cpp +1290 -0
- pyneurale-0.1.1/cpp/benchmarks/sorting/valley_seeking_benchmark.cpp +199 -0
- pyneurale-0.1.1/cpp/benchmarks/streaming/runtime_benchmark.cpp +1094 -0
- pyneurale-0.1.1/cpp/bindings/CMakeLists.txt +176 -0
- pyneurale-0.1.1/cpp/bindings/cuda_runtime_bindings.cpp +49 -0
- pyneurale-0.1.1/cpp/bindings/devices/module_bindings.cpp +202 -0
- pyneurale-0.1.1/cpp/bindings/devices/provider_bindings.cpp +187 -0
- pyneurale-0.1.1/cpp/bindings/experiments/assistance_bindings.cpp +308 -0
- pyneurale-0.1.1/cpp/bindings/experiments/binding_helpers.h +81 -0
- pyneurale-0.1.1/cpp/bindings/experiments/center_out_bindings.cpp +1317 -0
- pyneurale-0.1.1/cpp/bindings/experiments/center_out_session_context.h +29 -0
- pyneurale-0.1.1/cpp/bindings/experiments/contract_bindings.cpp +901 -0
- pyneurale-0.1.1/cpp/bindings/experiments/module_bindings.cpp +33 -0
- pyneurale-0.1.1/cpp/bindings/experiments/presentation_bindings.cpp +741 -0
- pyneurale-0.1.1/cpp/bindings/experiments/speech_bindings.cpp +448 -0
- pyneurale-0.1.1/cpp/bindings/experiments/ssvep_bindings.cpp +429 -0
- pyneurale-0.1.1/cpp/bindings/experiments/webgrid_bindings.cpp +371 -0
- pyneurale-0.1.1/cpp/bindings/features/module_bindings.cpp +18 -0
- pyneurale-0.1.1/cpp/bindings/features/online_bindings.cpp +175 -0
- pyneurale-0.1.1/cpp/bindings/models/alignment_bindings.cpp +79 -0
- pyneurale-0.1.1/cpp/bindings/models/classification_bindings.cpp +219 -0
- pyneurale-0.1.1/cpp/bindings/models/cuda_bindings.cpp +218 -0
- pyneurale-0.1.1/cpp/bindings/models/decomposition_bindings.cpp +137 -0
- pyneurale-0.1.1/cpp/bindings/models/density_bindings.cpp +152 -0
- pyneurale-0.1.1/cpp/bindings/models/linear_model_bindings.cpp +154 -0
- pyneurale-0.1.1/cpp/bindings/models/manifold_bindings.cpp +107 -0
- pyneurale-0.1.1/cpp/bindings/models/manifold_support.h +60 -0
- pyneurale-0.1.1/cpp/bindings/models/module_bindings.cpp +59 -0
- pyneurale-0.1.1/cpp/bindings/models/neighbors_bindings.cpp +111 -0
- pyneurale-0.1.1/cpp/bindings/models/state_space_bindings.cpp +243 -0
- pyneurale-0.1.1/cpp/bindings/models/support.h +191 -0
- pyneurale-0.1.1/cpp/bindings/native_bindings.cpp +42 -0
- pyneurale-0.1.1/cpp/bindings/pipeline_bindings.cpp +505 -0
- pyneurale-0.1.1/cpp/bindings/recording/module_bindings.cpp +979 -0
- pyneurale-0.1.1/cpp/bindings/recording/replay_image_bindings.cpp +360 -0
- pyneurale-0.1.1/cpp/bindings/recording/spool_bindings.cpp +701 -0
- pyneurale-0.1.1/cpp/bindings/runtime_bindings.cpp +145 -0
- pyneurale-0.1.1/cpp/bindings/signal/filter_design_bindings.cpp +153 -0
- pyneurale-0.1.1/cpp/bindings/signal/filtering_bindings.cpp +544 -0
- pyneurale-0.1.1/cpp/bindings/signal/module_bindings.cpp +52 -0
- pyneurale-0.1.1/cpp/bindings/signal/representation_bindings.cpp +276 -0
- pyneurale-0.1.1/cpp/bindings/signal/resampling_bindings.cpp +140 -0
- pyneurale-0.1.1/cpp/bindings/signal/simulation_bindings.cpp +204 -0
- pyneurale-0.1.1/cpp/bindings/signal/spatial_bindings.cpp +50 -0
- pyneurale-0.1.1/cpp/bindings/signal/spectral_bindings.cpp +230 -0
- pyneurale-0.1.1/cpp/bindings/signal/support.h +63 -0
- pyneurale-0.1.1/cpp/bindings/signal/transform_bindings.cpp +57 -0
- pyneurale-0.1.1/cpp/bindings/signal/windows_bindings.cpp +65 -0
- pyneurale-0.1.1/cpp/bindings/sorting/detection_bindings.cpp +287 -0
- pyneurale-0.1.1/cpp/bindings/sorting/module_bindings.cpp +35 -0
- pyneurale-0.1.1/cpp/bindings/sorting/online_detection_bindings.cpp +78 -0
- pyneurale-0.1.1/cpp/bindings/sorting/support.h +66 -0
- pyneurale-0.1.1/cpp/bindings/sorting/valley_seeking_bindings.cpp +117 -0
- pyneurale-0.1.1/cpp/bindings/streaming/adapters.cpp +321 -0
- pyneurale-0.1.1/cpp/bindings/streaming/adapters.h +10 -0
- pyneurale-0.1.1/cpp/bindings/streaming/array_replay_bindings.cpp +77 -0
- pyneurale-0.1.1/cpp/bindings/streaming/array_replay_bindings.h +4 -0
- pyneurale-0.1.1/cpp/bindings/streaming/module_bindings.cpp +1405 -0
- pyneurale-0.1.1/cpp/bindings/streaming/observer_bridge.cpp +793 -0
- pyneurale-0.1.1/cpp/bindings/streaming/observer_bridge.h +10 -0
- pyneurale-0.1.1/cpp/bindings/streaming/types.h +194 -0
- pyneurale-0.1.1/cpp/cmake/AllocationWrapping.cmake +32 -0
- pyneurale-0.1.1/cpp/cmake/DependencyChecks.cmake +676 -0
- pyneurale-0.1.1/cpp/cmake/ExperimentPresentationDependencies.cmake +183 -0
- pyneurale-0.1.1/cpp/cmake/Sanitizers.cmake +146 -0
- pyneurale-0.1.1/cpp/include/neurale/devices/provider.h +74 -0
- pyneurale-0.1.1/cpp/include/neurale/devices/simulation.h +295 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/abnormal.h +352 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/assistance.h +405 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/center_out.h +955 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/center_out_guidance.h +388 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/center_out_replay.h +392 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/command.h +233 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/contract.h +231 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/events.h +202 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/identity.h +201 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/presentation.h +183 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/replay.h +505 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/schedule.h +391 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/speech.h +1157 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/speech_replay.h +299 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/ssvep.h +251 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/time.h +179 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/webgrid.h +395 -0
- pyneurale-0.1.1/cpp/include/neurale/experiments/webgrid_replay.h +265 -0
- pyneurale-0.1.1/cpp/include/neurale/features/online.h +105 -0
- pyneurale-0.1.1/cpp/include/neurale/models/alignment.h +28 -0
- pyneurale-0.1.1/cpp/include/neurale/models/classification.h +70 -0
- pyneurale-0.1.1/cpp/include/neurale/models/cuda/density.h +59 -0
- pyneurale-0.1.1/cpp/include/neurale/models/cuda/errors.h +19 -0
- pyneurale-0.1.1/cpp/include/neurale/models/cuda/manifold.h +20 -0
- pyneurale-0.1.1/cpp/include/neurale/models/cuda/neighbors.h +23 -0
- pyneurale-0.1.1/cpp/include/neurale/models/decomposition.h +66 -0
- pyneurale-0.1.1/cpp/include/neurale/models/density.h +82 -0
- pyneurale-0.1.1/cpp/include/neurale/models/linear_model.h +116 -0
- pyneurale-0.1.1/cpp/include/neurale/models/manifold.h +58 -0
- pyneurale-0.1.1/cpp/include/neurale/models/neighbors.h +48 -0
- pyneurale-0.1.1/cpp/include/neurale/models/state_space.h +193 -0
- pyneurale-0.1.1/cpp/include/neurale/runtime/runtime_info.h +168 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/fir.h +71 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/iir.h +155 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/neural_simulation.h +138 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/representations.h +233 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/resample.h +155 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/simulation.h +111 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/spatial.h +40 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/spectral.h +165 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/transforms.h +46 -0
- pyneurale-0.1.1/cpp/include/neurale/signal/windows.h +55 -0
- pyneurale-0.1.1/cpp/include/neurale/sorting/detection.h +86 -0
- pyneurale-0.1.1/cpp/include/neurale/sorting/online_detection.h +223 -0
- pyneurale-0.1.1/cpp/include/neurale/sorting/valley_seeking.h +67 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/actuator.h +57 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/array_replay.h +90 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/buffer_pool.h +96 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/clock.h +92 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/consumer.h +44 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/continuity.h +111 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/critical_observer.h +80 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/discontinuity.h +74 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/discontinuity_pool.h +94 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/fault.h +109 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/frame.h +197 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/frame_emitter.h +306 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/frame_validation.h +60 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/linear_processor_chain.h +54 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/neural_intent.h +93 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/observer.h +74 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/observer_queue.h +158 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/processor.h +82 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/realtime_config.h +60 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/realtime_thread.h +145 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/runtime.h +287 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/safety.h +42 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/schema.h +274 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/source.h +59 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/spsc_ring.h +214 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/stats.h +293 -0
- pyneurale-0.1.1/cpp/include/neurale/streaming/stream_message.h +181 -0
- pyneurale-0.1.1/cpp/src/devices/CMakeLists.txt +19 -0
- pyneurale-0.1.1/cpp/src/devices/provider.cpp +747 -0
- pyneurale-0.1.1/cpp/src/devices/simulation.cpp +1078 -0
- pyneurale-0.1.1/cpp/src/execution/CMakeLists.txt +62 -0
- pyneurale-0.1.1/cpp/src/execution/abnormal_reporter.h +232 -0
- pyneurale-0.1.1/cpp/src/execution/adaptive_center_out_actuator.cpp +413 -0
- pyneurale-0.1.1/cpp/src/execution/adaptive_center_out_actuator.h +115 -0
- pyneurale-0.1.1/cpp/src/execution/bounded_trace_queue.h +154 -0
- pyneurale-0.1.1/cpp/src/execution/center_out_controller.cpp +822 -0
- pyneurale-0.1.1/cpp/src/execution/center_out_controller.h +491 -0
- pyneurale-0.1.1/cpp/src/execution/center_out_trace_writer.cpp +809 -0
- pyneurale-0.1.1/cpp/src/execution/center_out_trace_writer.h +181 -0
- pyneurale-0.1.1/cpp/src/execution/contract_status.h +53 -0
- pyneurale-0.1.1/cpp/src/execution/interval_runner.cpp +304 -0
- pyneurale-0.1.1/cpp/src/execution/interval_runner.h +123 -0
- pyneurale-0.1.1/cpp/src/execution/presentation_evidence.h +298 -0
- pyneurale-0.1.1/cpp/src/execution/records.cpp +363 -0
- pyneurale-0.1.1/cpp/src/execution/records.h +208 -0
- pyneurale-0.1.1/cpp/src/execution/session.cpp +919 -0
- pyneurale-0.1.1/cpp/src/execution/session.h +740 -0
- pyneurale-0.1.1/cpp/src/execution/speech_controller.cpp +363 -0
- pyneurale-0.1.1/cpp/src/execution/speech_controller.h +227 -0
- pyneurale-0.1.1/cpp/src/execution/speech_trace_writer.cpp +817 -0
- pyneurale-0.1.1/cpp/src/execution/speech_trace_writer.h +282 -0
- pyneurale-0.1.1/cpp/src/execution/ssvep_controller.cpp +409 -0
- pyneurale-0.1.1/cpp/src/execution/ssvep_controller.h +120 -0
- pyneurale-0.1.1/cpp/src/execution/webgrid_controller.cpp +350 -0
- pyneurale-0.1.1/cpp/src/execution/webgrid_controller.h +263 -0
- pyneurale-0.1.1/cpp/src/execution/webgrid_trace_writer.cpp +463 -0
- pyneurale-0.1.1/cpp/src/execution/webgrid_trace_writer.h +135 -0
- pyneurale-0.1.1/cpp/src/experiments/CMakeLists.txt +31 -0
- pyneurale-0.1.1/cpp/src/experiments/abnormal.cpp +178 -0
- pyneurale-0.1.1/cpp/src/experiments/assistance.cpp +630 -0
- pyneurale-0.1.1/cpp/src/experiments/center_out.cpp +883 -0
- pyneurale-0.1.1/cpp/src/experiments/center_out_guidance.cpp +265 -0
- pyneurale-0.1.1/cpp/src/experiments/center_out_replay.cpp +777 -0
- pyneurale-0.1.1/cpp/src/experiments/contract.cpp +65 -0
- pyneurale-0.1.1/cpp/src/experiments/replay.cpp +255 -0
- pyneurale-0.1.1/cpp/src/experiments/replay_verdict.h +87 -0
- pyneurale-0.1.1/cpp/src/experiments/speech.cpp +1137 -0
- pyneurale-0.1.1/cpp/src/experiments/speech_replay.cpp +696 -0
- pyneurale-0.1.1/cpp/src/experiments/ssvep.cpp +617 -0
- pyneurale-0.1.1/cpp/src/experiments/target_schedule.h +38 -0
- pyneurale-0.1.1/cpp/src/experiments/utf8.h +92 -0
- pyneurale-0.1.1/cpp/src/experiments/validation.cpp +253 -0
- pyneurale-0.1.1/cpp/src/experiments/webgrid.cpp +758 -0
- pyneurale-0.1.1/cpp/src/experiments/webgrid_replay.cpp +472 -0
- pyneurale-0.1.1/cpp/src/features/CMakeLists.txt +17 -0
- pyneurale-0.1.1/cpp/src/features/online.cpp +673 -0
- pyneurale-0.1.1/cpp/src/mkl_utils.h +93 -0
- pyneurale-0.1.1/cpp/src/models/CMakeLists.txt +66 -0
- pyneurale-0.1.1/cpp/src/models/alignment.cpp +447 -0
- pyneurale-0.1.1/cpp/src/models/classification.cpp +513 -0
- pyneurale-0.1.1/cpp/src/models/cuda/CMakeLists.txt +57 -0
- pyneurale-0.1.1/cpp/src/models/cuda/cuda_utils.cuh +241 -0
- pyneurale-0.1.1/cpp/src/models/cuda/density.cu +286 -0
- pyneurale-0.1.1/cpp/src/models/cuda/manifold.cpp +33 -0
- pyneurale-0.1.1/cpp/src/models/cuda/neighbors.cu +640 -0
- pyneurale-0.1.1/cpp/src/models/decomposition.cpp +239 -0
- pyneurale-0.1.1/cpp/src/models/density.cpp +415 -0
- pyneurale-0.1.1/cpp/src/models/linalg.cpp +969 -0
- pyneurale-0.1.1/cpp/src/models/linalg.h +109 -0
- pyneurale-0.1.1/cpp/src/models/linear_model.cpp +379 -0
- pyneurale-0.1.1/cpp/src/models/manifold.cpp +281 -0
- pyneurale-0.1.1/cpp/src/models/manifold_internal.h +27 -0
- pyneurale-0.1.1/cpp/src/models/neighbors.cpp +526 -0
- pyneurale-0.1.1/cpp/src/models/numeric_utils.h +121 -0
- pyneurale-0.1.1/cpp/src/models/span_utils.h +65 -0
- pyneurale-0.1.1/cpp/src/models/state_space.cpp +933 -0
- pyneurale-0.1.1/cpp/src/pipeline/CMakeLists.txt +43 -0
- pyneurale-0.1.1/cpp/src/pipeline/adapter_support.h +397 -0
- pyneurale-0.1.1/cpp/src/pipeline/bad_channel_removal_adapter.cpp +356 -0
- pyneurale-0.1.1/cpp/src/pipeline/bad_channel_removal_adapter.h +53 -0
- pyneurale-0.1.1/cpp/src/pipeline/decoder_training_capture.h +107 -0
- pyneurale-0.1.1/cpp/src/pipeline/feature_adapter_stream.h +205 -0
- pyneurale-0.1.1/cpp/src/pipeline/feature_stack_adapter.cpp +848 -0
- pyneurale-0.1.1/cpp/src/pipeline/feature_stack_adapter.h +94 -0
- pyneurale-0.1.1/cpp/src/pipeline/fir_filter_adapter.cpp +146 -0
- pyneurale-0.1.1/cpp/src/pipeline/fir_filter_adapter.h +47 -0
- pyneurale-0.1.1/cpp/src/pipeline/fitted_feature_contract.cpp +33 -0
- pyneurale-0.1.1/cpp/src/pipeline/fitted_feature_contract.h +220 -0
- pyneurale-0.1.1/cpp/src/pipeline/hilbert_envelope_adapter.cpp +297 -0
- pyneurale-0.1.1/cpp/src/pipeline/hilbert_envelope_adapter.h +69 -0
- pyneurale-0.1.1/cpp/src/pipeline/iir_filter_adapter.cpp +143 -0
- pyneurale-0.1.1/cpp/src/pipeline/iir_filter_adapter.h +47 -0
- pyneurale-0.1.1/cpp/src/pipeline/inplace_adapter_stream.h +104 -0
- pyneurale-0.1.1/cpp/src/pipeline/interval_mean_processor.cpp +138 -0
- pyneurale-0.1.1/cpp/src/pipeline/interval_mean_processor.h +59 -0
- pyneurale-0.1.1/cpp/src/pipeline/kalman_decoder_adapter.cpp +444 -0
- pyneurale-0.1.1/cpp/src/pipeline/kalman_decoder_adapter.h +127 -0
- pyneurale-0.1.1/cpp/src/pipeline/linear_decoder_adapter.cpp +461 -0
- pyneurale-0.1.1/cpp/src/pipeline/linear_decoder_adapter.h +124 -0
- pyneurale-0.1.1/cpp/src/pipeline/lmp_feature_adapter.cpp +242 -0
- pyneurale-0.1.1/cpp/src/pipeline/lmp_feature_adapter.h +66 -0
- pyneurale-0.1.1/cpp/src/pipeline/multitaper_bandpower_adapter.cpp +397 -0
- pyneurale-0.1.1/cpp/src/pipeline/multitaper_bandpower_adapter.h +76 -0
- pyneurale-0.1.1/cpp/src/pipeline/resampler_adapter.cpp +536 -0
- pyneurale-0.1.1/cpp/src/pipeline/resampler_adapter.h +50 -0
- pyneurale-0.1.1/cpp/src/pipeline/sos_filter_adapter.cpp +225 -0
- pyneurale-0.1.1/cpp/src/pipeline/sos_filter_adapter.h +69 -0
- pyneurale-0.1.1/cpp/src/pipeline/spatial_reference_adapter.cpp +160 -0
- pyneurale-0.1.1/cpp/src/pipeline/spatial_reference_adapter.h +70 -0
- pyneurale-0.1.1/cpp/src/pipeline/spike_detector_adapter.cpp +378 -0
- pyneurale-0.1.1/cpp/src/pipeline/spike_detector_adapter.h +58 -0
- pyneurale-0.1.1/cpp/src/pipeline/target_anchor.cpp +13 -0
- pyneurale-0.1.1/cpp/src/presentation/CMakeLists.txt +76 -0
- pyneurale-0.1.1/cpp/src/presentation/center_out_presenter.cpp +481 -0
- pyneurale-0.1.1/cpp/src/presentation/center_out_presenter.h +244 -0
- pyneurale-0.1.1/cpp/src/presentation/coordinate_mapper.cpp +139 -0
- pyneurale-0.1.1/cpp/src/presentation/coordinate_mapper.h +59 -0
- pyneurale-0.1.1/cpp/src/presentation/dependency_versions.cpp +31 -0
- pyneurale-0.1.1/cpp/src/presentation/dependency_versions.h +26 -0
- pyneurale-0.1.1/cpp/src/presentation/font_identity.cpp +194 -0
- pyneurale-0.1.1/cpp/src/presentation/font_identity.h +42 -0
- pyneurale-0.1.1/cpp/src/presentation/input_runtime.cpp +86 -0
- pyneurale-0.1.1/cpp/src/presentation/input_runtime.h +133 -0
- pyneurale-0.1.1/cpp/src/presentation/recording_bridge.cpp +375 -0
- pyneurale-0.1.1/cpp/src/presentation/recording_bridge.h +110 -0
- pyneurale-0.1.1/cpp/src/presentation/speech_presenter.cpp +546 -0
- pyneurale-0.1.1/cpp/src/presentation/speech_presenter.h +219 -0
- pyneurale-0.1.1/cpp/src/presentation/ssvep_presenter.cpp +245 -0
- pyneurale-0.1.1/cpp/src/presentation/ssvep_presenter.h +68 -0
- pyneurale-0.1.1/cpp/src/presentation/surface.cpp +1553 -0
- pyneurale-0.1.1/cpp/src/presentation/surface.h +129 -0
- pyneurale-0.1.1/cpp/src/presentation/surface_types.h +181 -0
- pyneurale-0.1.1/cpp/src/presentation/text_atlas.cpp +303 -0
- pyneurale-0.1.1/cpp/src/presentation/text_atlas.h +130 -0
- pyneurale-0.1.1/cpp/src/presentation/time_mapper.cpp +60 -0
- pyneurale-0.1.1/cpp/src/presentation/time_mapper.h +61 -0
- pyneurale-0.1.1/cpp/src/presentation/webgrid_presenter.cpp +438 -0
- pyneurale-0.1.1/cpp/src/presentation/webgrid_presenter.h +220 -0
- pyneurale-0.1.1/cpp/src/recording/CMakeLists.txt +85 -0
- pyneurale-0.1.1/cpp/src/recording/byte_order.h +86 -0
- pyneurale-0.1.1/cpp/src/recording/core/bounded_queue.h +365 -0
- pyneurale-0.1.1/cpp/src/recording/core/record_payloads.cpp +314 -0
- pyneurale-0.1.1/cpp/src/recording/core/record_payloads.h +333 -0
- pyneurale-0.1.1/cpp/src/recording/core/recorder.cpp +1847 -0
- pyneurale-0.1.1/cpp/src/recording/core/recorder.h +598 -0
- pyneurale-0.1.1/cpp/src/recording/core/recorder_status.cpp +123 -0
- pyneurale-0.1.1/cpp/src/recording/core/recorder_status.h +334 -0
- pyneurale-0.1.1/cpp/src/recording/core/recording_plan.cpp +155 -0
- pyneurale-0.1.1/cpp/src/recording/core/recording_plan.h +139 -0
- pyneurale-0.1.1/cpp/src/recording/crc32c.cpp +47 -0
- pyneurale-0.1.1/cpp/src/recording/crc32c.h +32 -0
- pyneurale-0.1.1/cpp/src/recording/experiment_attachment.h +35 -0
- pyneurale-0.1.1/cpp/src/recording/memory_spool_file.cpp +86 -0
- pyneurale-0.1.1/cpp/src/recording/memory_spool_file.h +111 -0
- pyneurale-0.1.1/cpp/src/recording/replay/image.cpp +878 -0
- pyneurale-0.1.1/cpp/src/recording/replay/image.h +480 -0
- pyneurale-0.1.1/cpp/src/recording/replay/schema_names.h +172 -0
- pyneurale-0.1.1/cpp/src/recording/replay/source.cpp +1189 -0
- pyneurale-0.1.1/cpp/src/recording/replay/source.h +433 -0
- pyneurale-0.1.1/cpp/src/recording/sha256.cpp +155 -0
- pyneurale-0.1.1/cpp/src/recording/sha256.h +49 -0
- pyneurale-0.1.1/cpp/src/recording/spool_file.cpp +962 -0
- pyneurale-0.1.1/cpp/src/recording/spool_file.h +271 -0
- pyneurale-0.1.1/cpp/src/recording/spool_layout.cpp +159 -0
- pyneurale-0.1.1/cpp/src/recording/spool_layout.h +402 -0
- pyneurale-0.1.1/cpp/src/recording/spool_repair.cpp +143 -0
- pyneurale-0.1.1/cpp/src/recording/spool_repair.h +182 -0
- pyneurale-0.1.1/cpp/src/recording/spool_scanner.cpp +1053 -0
- pyneurale-0.1.1/cpp/src/recording/spool_scanner.h +471 -0
- pyneurale-0.1.1/cpp/src/recording/spool_writer.cpp +800 -0
- pyneurale-0.1.1/cpp/src/recording/spool_writer.h +364 -0
- pyneurale-0.1.1/cpp/src/runtime/CMakeLists.txt +105 -0
- pyneurale-0.1.1/cpp/src/runtime/cpu_info.cpp +114 -0
- pyneurale-0.1.1/cpp/src/runtime/cuda_info.cpp +96 -0
- pyneurale-0.1.1/cpp/src/runtime/runtime_info.cpp +79 -0
- pyneurale-0.1.1/cpp/src/signal/CMakeLists.txt +81 -0
- pyneurale-0.1.1/cpp/src/signal/counter_random.h +52 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_builtin.cpp +55 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_builtin.h +18 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_design.cpp +349 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_dispatch.cpp +175 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_dispatch.h +36 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_mkl.cpp +206 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_mkl.h +24 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_realtime.cpp +327 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_realtime.h +69 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/fir_state.h +40 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_builtin.cpp +79 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_builtin.h +24 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_design.cpp +773 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_dispatch.cpp +255 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_dispatch.h +47 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_mkl.cpp +107 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_mkl.h +24 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_realtime.cpp +138 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_realtime.h +50 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/iir_zero_phase.cpp +186 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/realtime_utils.h +20 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/representations.cpp +1430 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/sos_realtime.cpp +177 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/sos_realtime.h +53 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/spatial.cpp +82 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/spatial_realtime.cpp +200 -0
- pyneurale-0.1.1/cpp/src/signal/filtering/spatial_realtime.h +98 -0
- pyneurale-0.1.1/cpp/src/signal/neural_simulation.cpp +470 -0
- pyneurale-0.1.1/cpp/src/signal/numerics.h +39 -0
- pyneurale-0.1.1/cpp/src/signal/resample.cpp +368 -0
- pyneurale-0.1.1/cpp/src/signal/simulation.cpp +202 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/analytic.cpp +347 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/builtin/fft.cpp +126 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/builtin/fft.h +16 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/czt.cpp +75 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/fft_dispatch.cpp +88 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/fft_dispatch.h +32 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/fft_integrate.cpp +373 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/mkl/fft.cpp +108 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/mkl/fft.h +16 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/multitaper.cpp +250 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_builtin.cpp +395 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_internal.h +74 -0
- pyneurale-0.1.1/cpp/src/signal/spectral/multitaper_mkl.cpp +522 -0
- pyneurale-0.1.1/cpp/src/signal/windows/basic.cpp +122 -0
- pyneurale-0.1.1/cpp/src/signal/windows/dpss.cpp +335 -0
- pyneurale-0.1.1/cpp/src/sorting/CMakeLists.txt +26 -0
- pyneurale-0.1.1/cpp/src/sorting/detection.cpp +529 -0
- pyneurale-0.1.1/cpp/src/sorting/online_detection.cpp +883 -0
- pyneurale-0.1.1/cpp/src/sorting/valley_seeking.cpp +292 -0
- pyneurale-0.1.1/cpp/src/streaming/CMakeLists.txt +39 -0
- pyneurale-0.1.1/cpp/src/streaming/array_replay.cpp +200 -0
- pyneurale-0.1.1/cpp/src/streaming/buffer_pool.cpp +161 -0
- pyneurale-0.1.1/cpp/src/streaming/clock.cpp +39 -0
- pyneurale-0.1.1/cpp/src/streaming/continuity.cpp +409 -0
- pyneurale-0.1.1/cpp/src/streaming/discontinuity_pool.cpp +168 -0
- pyneurale-0.1.1/cpp/src/streaming/frame_validation.cpp +194 -0
- pyneurale-0.1.1/cpp/src/streaming/linear_processor_chain.cpp +595 -0
- pyneurale-0.1.1/cpp/src/streaming/realtime_config.cpp +60 -0
- pyneurale-0.1.1/cpp/src/streaming/realtime_thread.cpp +413 -0
- pyneurale-0.1.1/cpp/src/streaming/runtime.cpp +3086 -0
- pyneurale-0.1.1/cpp/src/streaming/safety.cpp +34 -0
- pyneurale-0.1.1/cpp/src/streaming/schema.cpp +485 -0
- pyneurale-0.1.1/cpp/src/streaming/slot_registry.h +104 -0
- pyneurale-0.1.1/cpp/src/streaming/terminal_frame_emitter.cpp +173 -0
- pyneurale-0.1.1/cpp/src/streaming/terminal_frame_emitter.h +74 -0
- pyneurale-0.1.1/cpp/tests/CMakeLists.txt +939 -0
- pyneurale-0.1.1/cpp/tests/allocation_counter.h +83 -0
- pyneurale-0.1.1/cpp/tests/check_counts.h +39 -0
- pyneurale-0.1.1/cpp/tests/check_returns.h +39 -0
- pyneurale-0.1.1/cpp/tests/devices/provider_fixture.cpp +78 -0
- pyneurale-0.1.1/cpp/tests/devices/provider_test.cpp +264 -0
- pyneurale-0.1.1/cpp/tests/devices/simulation_test.cpp +985 -0
- pyneurale-0.1.1/cpp/tests/experiments/assistance_test.cpp +704 -0
- pyneurale-0.1.1/cpp/tests/experiments/center_out_guidance_test.cpp +682 -0
- pyneurale-0.1.1/cpp/tests/experiments/center_out_test.cpp +1654 -0
- pyneurale-0.1.1/cpp/tests/experiments/contract_status_test.cpp +134 -0
- pyneurale-0.1.1/cpp/tests/experiments/contract_test.cpp +1008 -0
- pyneurale-0.1.1/cpp/tests/experiments/headless_execution_test.cpp +2372 -0
- pyneurale-0.1.1/cpp/tests/experiments/interval_runner_test.cpp +272 -0
- pyneurale-0.1.1/cpp/tests/experiments/replay_test.cpp +2013 -0
- pyneurale-0.1.1/cpp/tests/experiments/session_test.cpp +4053 -0
- pyneurale-0.1.1/cpp/tests/experiments/speech_test.cpp +1592 -0
- pyneurale-0.1.1/cpp/tests/experiments/ssvep_test.cpp +296 -0
- pyneurale-0.1.1/cpp/tests/experiments/ssvep_test_support.h +64 -0
- pyneurale-0.1.1/cpp/tests/experiments/webgrid_test.cpp +715 -0
- pyneurale-0.1.1/cpp/tests/integration/simulated_bci_test.cpp +726 -0
- pyneurale-0.1.1/cpp/tests/pipeline/bad_channel_removal_adapter_test.cpp +224 -0
- pyneurale-0.1.1/cpp/tests/pipeline/feature_adapter_test_support.h +207 -0
- pyneurale-0.1.1/cpp/tests/pipeline/feature_stack_adapter_test.cpp +329 -0
- pyneurale-0.1.1/cpp/tests/pipeline/fir_filter_adapter_test.cpp +459 -0
- pyneurale-0.1.1/cpp/tests/pipeline/hilbert_envelope_adapter_test.cpp +459 -0
- pyneurale-0.1.1/cpp/tests/pipeline/iir_filter_adapter_test.cpp +547 -0
- pyneurale-0.1.1/cpp/tests/pipeline/inplace_adapter_test_support.h +335 -0
- pyneurale-0.1.1/cpp/tests/pipeline/kalman_decoder_adapter_test.cpp +1366 -0
- pyneurale-0.1.1/cpp/tests/pipeline/linear_decoder_adapter_test.cpp +1017 -0
- pyneurale-0.1.1/cpp/tests/pipeline/lmp_feature_adapter_test.cpp +385 -0
- pyneurale-0.1.1/cpp/tests/pipeline/multitaper_bandpower_adapter_test.cpp +609 -0
- pyneurale-0.1.1/cpp/tests/pipeline/resampler_adapter_test.cpp +473 -0
- pyneurale-0.1.1/cpp/tests/pipeline/sos_filter_adapter_test.cpp +467 -0
- pyneurale-0.1.1/cpp/tests/pipeline/spatial_reference_adapter_test.cpp +697 -0
- pyneurale-0.1.1/cpp/tests/pipeline/spike_detector_adapter_test.cpp +544 -0
- pyneurale-0.1.1/cpp/tests/pipeline/strict_realtime_contract_test.cpp +1167 -0
- pyneurale-0.1.1/cpp/tests/presentation/center_out_test.cpp +573 -0
- pyneurale-0.1.1/cpp/tests/presentation/dependency_test.cpp +18 -0
- pyneurale-0.1.1/cpp/tests/presentation/recording_test.cpp +388 -0
- pyneurale-0.1.1/cpp/tests/presentation/skip_policy.h +60 -0
- pyneurale-0.1.1/cpp/tests/presentation/speech_test.cpp +744 -0
- pyneurale-0.1.1/cpp/tests/presentation/ssvep_test.cpp +211 -0
- pyneurale-0.1.1/cpp/tests/presentation/surface_test.cpp +673 -0
- pyneurale-0.1.1/cpp/tests/presentation/webgrid_test.cpp +458 -0
- pyneurale-0.1.1/cpp/tests/recording/end_to_end_test.cpp +2227 -0
- pyneurale-0.1.1/cpp/tests/recording/mapped_spool_file_test.cpp +337 -0
- pyneurale-0.1.1/cpp/tests/recording/memory_spool_file_test.cpp +177 -0
- pyneurale-0.1.1/cpp/tests/recording/recorder_core_test.cpp +979 -0
- pyneurale-0.1.1/cpp/tests/recording/recorder_failure_test.cpp +1495 -0
- pyneurale-0.1.1/cpp/tests/recording/recorder_test_support.h +358 -0
- pyneurale-0.1.1/cpp/tests/recording/replay_image_test.cpp +302 -0
- pyneurale-0.1.1/cpp/tests/recording/replay_source_test.cpp +1796 -0
- pyneurale-0.1.1/cpp/tests/recording/replay_test_support.h +661 -0
- pyneurale-0.1.1/cpp/tests/recording/runtime_integration_test.cpp +390 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_checksum_test.cpp +140 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_failure_test.cpp +582 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_repair_test.cpp +412 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_test_support.h +284 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_vectors_test.cpp +371 -0
- pyneurale-0.1.1/cpp/tests/recording/spool_writer_test.cpp +812 -0
- pyneurale-0.1.1/cpp/tests/recording/test_json.h +347 -0
- pyneurale-0.1.1/cpp/tests/signal/neural_simulation_test.cpp +136 -0
- pyneurale-0.1.1/cpp/tests/signal/simulation_test.cpp +125 -0
- pyneurale-0.1.1/cpp/tests/sorting/detection_test.cpp +174 -0
- pyneurale-0.1.1/cpp/tests/sorting/online_detection_test.cpp +338 -0
- pyneurale-0.1.1/cpp/tests/sorting/valley_seeking_test.cpp +161 -0
- pyneurale-0.1.1/cpp/tests/streaming/array_replay_test.cpp +70 -0
- pyneurale-0.1.1/cpp/tests/streaming/buffer_pool_test.cpp +217 -0
- pyneurale-0.1.1/cpp/tests/streaming/continuity_test.cpp +518 -0
- pyneurale-0.1.1/cpp/tests/streaming/fault_injection.h +539 -0
- pyneurale-0.1.1/cpp/tests/streaming/fault_injection_test.cpp +424 -0
- pyneurale-0.1.1/cpp/tests/streaming/frame_validation_test.cpp +267 -0
- pyneurale-0.1.1/cpp/tests/streaming/generic_source_test.cpp +493 -0
- pyneurale-0.1.1/cpp/tests/streaming/output_topology_test.cpp +695 -0
- pyneurale-0.1.1/cpp/tests/streaming/processor_chain_test.cpp +917 -0
- pyneurale-0.1.1/cpp/tests/streaming/realtime_thread_test.cpp +272 -0
- pyneurale-0.1.1/cpp/tests/streaming/recording_lifecycle_test.cpp +1280 -0
- pyneurale-0.1.1/cpp/tests/streaming/runtime_test.cpp +1311 -0
- pyneurale-0.1.1/cpp/tests/streaming/schema_test.cpp +559 -0
- pyneurale-0.1.1/cpp/tests/streaming/soak_test.cpp +318 -0
- pyneurale-0.1.1/cpp/tests/streaming/spsc_ring_test.cpp +318 -0
- pyneurale-0.1.1/cpp/tests/streaming/watchdog_test.cpp +836 -0
- pyneurale-0.1.1/docs/Doxyfile +36 -0
- pyneurale-0.1.1/docs/Makefile +10 -0
- pyneurale-0.1.1/docs/_static/center-out-assistance-50.gif +0 -0
- pyneurale-0.1.1/docs/_static/readme-loop.svg +75 -0
- pyneurale-0.1.1/docs/_static/ssvep-demo.gif +0 -0
- pyneurale-0.1.1/docs/_templates/autosummary/module.rst +6 -0
- pyneurale-0.1.1/docs/api/cpp.md +10 -0
- pyneurale-0.1.1/docs/api/index.md +12 -0
- pyneurale-0.1.1/docs/api/presentation.md +164 -0
- pyneurale-0.1.1/docs/api/python.md +361 -0
- pyneurale-0.1.1/docs/architecture/index.md +12 -0
- pyneurale-0.1.1/docs/architecture/overview.md +215 -0
- pyneurale-0.1.1/docs/conf.py +86 -0
- pyneurale-0.1.1/docs/development/adding_a_pipeline_adapter.md +166 -0
- pyneurale-0.1.1/docs/development/benchmarks.md +462 -0
- pyneurale-0.1.1/docs/development/devices.md +567 -0
- pyneurale-0.1.1/docs/development/experiment_presentation.md +525 -0
- pyneurale-0.1.1/docs/development/experiments.md +3073 -0
- pyneurale-0.1.1/docs/development/index.md +104 -0
- pyneurale-0.1.1/docs/development/native_recording_replay.md +2553 -0
- pyneurale-0.1.1/docs/development/native_streaming.md +824 -0
- pyneurale-0.1.1/docs/development/native_streaming_benchmarks.md +196 -0
- pyneurale-0.1.1/docs/development/native_streaming_fault_testing.md +107 -0
- pyneurale-0.1.1/docs/development/release.md +46 -0
- pyneurale-0.1.1/docs/development/threshold_spike_detection.md +156 -0
- pyneurale-0.1.1/docs/development/trial_alignment_contract.md +283 -0
- pyneurale-0.1.1/docs/development/validation_matrix.md +264 -0
- pyneurale-0.1.1/docs/development/valley_seeking_reference.md +93 -0
- pyneurale-0.1.1/docs/getting_started/index.md +55 -0
- pyneurale-0.1.1/docs/index.md +18 -0
- pyneurale-0.1.1/docs/make.bat +12 -0
- pyneurale-0.1.1/docs/user_guide/center_out.md +71 -0
- pyneurale-0.1.1/docs/user_guide/data_metadata.md +61 -0
- pyneurale-0.1.1/docs/user_guide/device_providers.md +157 -0
- pyneurale-0.1.1/docs/user_guide/devices.md +144 -0
- pyneurale-0.1.1/docs/user_guide/erp.md +70 -0
- pyneurale-0.1.1/docs/user_guide/index.md +33 -0
- pyneurale-0.1.1/docs/user_guide/kinematics.md +70 -0
- pyneurale-0.1.1/docs/user_guide/lsl.md +119 -0
- pyneurale-0.1.1/docs/user_guide/models.md +76 -0
- pyneurale-0.1.1/docs/user_guide/oscillations.md +98 -0
- pyneurale-0.1.1/docs/user_guide/pipelines.md +265 -0
- pyneurale-0.1.1/docs/user_guide/recording_replay.md +70 -0
- pyneurale-0.1.1/docs/user_guide/runtime.md +149 -0
- pyneurale-0.1.1/docs/user_guide/signals.md +191 -0
- pyneurale-0.1.1/docs/user_guide/sorting.md +178 -0
- pyneurale-0.1.1/docs/user_guide/ssvep.md +272 -0
- pyneurale-0.1.1/docs/user_guide/tuning.md +129 -0
- pyneurale-0.1.1/examples/center_out_closed_loop.py +168 -0
- pyneurale-0.1.1/examples/device_providers/callback/CMakeLists.txt +11 -0
- pyneurale-0.1.1/examples/device_providers/callback/native/provider.cpp +148 -0
- pyneurale-0.1.1/examples/device_providers/callback/pyproject.toml +15 -0
- pyneurale-0.1.1/examples/device_providers/callback/src/neurale_example_callback/__init__.py +10 -0
- pyneurale-0.1.1/examples/device_providers/pull/CMakeLists.txt +11 -0
- pyneurale-0.1.1/examples/device_providers/pull/native/provider.cpp +122 -0
- pyneurale-0.1.1/examples/device_providers/pull/pyproject.toml +15 -0
- pyneurale-0.1.1/examples/device_providers/pull/src/neurale_example_pull/__init__.py +10 -0
- pyneurale-0.1.1/examples/device_providers/python/pyproject.toml +15 -0
- pyneurale-0.1.1/examples/device_providers/python/src/neurale_example_python/__init__.py +5 -0
- pyneurale-0.1.1/examples/device_providers/python/src/neurale_example_python/device.py +51 -0
- pyneurale-0.1.1/examples/lsl_stream.py +70 -0
- pyneurale-0.1.1/examples/ssvep_closed_loop.py +109 -0
- pyneurale-0.1.1/pyproject.toml +180 -0
- pyneurale-0.1.1/pytest.ini +28 -0
- pyneurale-0.1.1/specifications/native-spool/v1/README.md +851 -0
- pyneurale-0.1.1/specifications/native-spool/v1/tools/generate_vectors.py +1512 -0
- pyneurale-0.1.1/specifications/native-spool/v1/tools/spool_format.py +1525 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-exceeds-prefix.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-flag-invalid.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-identity-violation.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-origin-not-recorder.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-consistency.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-control-loss-tag.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-control-rejection-tag.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-data-loss-tag.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-data-rejection-tag.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-identity-kind-unknown.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-identity-kind-wrong-plane.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-loss-missing.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-position-tag-invalid.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-uint64-wraparound.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-with-items.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/accounting-without-session-end.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/bad-back-link.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/checkpoint-extent-beyond-transaction.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/checkpoint-policy-mismatch.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/container-payload-size.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-body-checksum.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-magic.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-plan-document.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-record-header.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-record-payload.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-superblock-checksum.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-tail-bad-header-bytes.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-tail-wrong-magic.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-trailer-checksum.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/corrupt-transaction-header-checksum.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/duplicate-transaction-id.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/empty-transaction.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/index.json +1631 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/multiple-accounting.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/multiple-session-end.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/nonzero-padding.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/nonzero-plan-padding.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-block-mismatch.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-gap-mismatch.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/ordinal-session-end-nonzero.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/record-count-disagreement.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/record-flags-nonzero.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/records-after-session-end.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/session-end-undefined-outcome.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/session-end-without-accounting.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-inside-body.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-inside-record-header.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-missing-trailer.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-plan-document.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/torn-superblock.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/trailer-item-counts.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/transaction-id-gap.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/undefined-superblock-field.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/unknown-major-version.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/unknown-record-kind.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-aborted-then-faulted.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-aborted-with-losses.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-buffered.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-checkpoint-sync.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-complete.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-empty.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-fault-record.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-minimal.spool +0 -0
- pyneurale-0.1.1/specifications/native-spool/v1/vectors/valid-unknown-minor.spool +0 -0
- pyneurale-0.1.1/specifications/nrf/package-v1.md +60 -0
- pyneurale-0.1.1/specifications/nrf/v1/README.md +619 -0
- pyneurale-0.1.1/specifications/nrf/v1/checkpoint.schema.json +206 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/README.md +539 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/journal-termination-extension.json +10 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/manifest-extension.full-coverage.json +170 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/manifest-extension.partial-coverage.json +139 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-discontinuities-v1.json +92 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-frames-v1.json +154 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-signal-blocks-v1.json +232 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/native-signal-gaps-v1.json +122 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/fixtures/session-accounting-v1.json +292 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/native-replay.schema.json +3615 -0
- pyneurale-0.1.1/specifications/nrf/v1/extensions/native-replay-v1/tools/generate_fixtures.py +825 -0
- pyneurale-0.1.1/specifications/nrf/v1/head.schema.json +70 -0
- pyneurale-0.1.1/specifications/nrf/v1/journal-record.schema.json +359 -0
- pyneurale-0.1.1/specifications/nrf/v1/manifest.schema.json +690 -0
- pyneurale-0.1.1/specifications/nrf/v1/recovery-report.schema.json +133 -0
- pyneurale-0.1.1/specifications/nrf/v1/semantic-validation.md +90 -0
- pyneurale-0.1.1/specifications/nrf/v1/test-vectors.json +7899 -0
- pyneurale-0.1.1/specifications/nrf/v1/tools/generate_test_vectors.py +1508 -0
- pyneurale-0.1.1/specifications/nrf/v1/tools/jcs.py +24 -0
- pyneurale-0.1.1/specifications/nrf/v1/tools/semantic_validation.py +1871 -0
- pyneurale-0.1.1/src/neurale/__init__.py +13 -0
- pyneurale-0.1.1/src/neurale/_native_loader.py +38 -0
- pyneurale-0.1.1/src/neurale/_validation.py +332 -0
- pyneurale-0.1.1/src/neurale/_version.py +24 -0
- pyneurale-0.1.1/src/neurale/data/__init__.py +65 -0
- pyneurale-0.1.1/src/neurale/data/_alignment.py +446 -0
- pyneurale-0.1.1/src/neurale/data/_helpers.py +314 -0
- pyneurale-0.1.1/src/neurale/data/_time_validation.py +62 -0
- pyneurale-0.1.1/src/neurale/data/alignment.py +846 -0
- pyneurale-0.1.1/src/neurale/data/arrays.py +1189 -0
- pyneurale-0.1.1/src/neurale/data/channels.py +449 -0
- pyneurale-0.1.1/src/neurale/data/events.py +564 -0
- pyneurale-0.1.1/src/neurale/data/recording.py +199 -0
- pyneurale-0.1.1/src/neurale/data/streaming.py +113 -0
- pyneurale-0.1.1/src/neurale/data/time.py +88 -0
- pyneurale-0.1.1/src/neurale/decoding/__init__.py +85 -0
- pyneurale-0.1.1/src/neurale/decoding/_alignment.py +131 -0
- pyneurale-0.1.1/src/neurale/decoding/_dispatch.py +25 -0
- pyneurale-0.1.1/src/neurale/decoding/_stages.py +183 -0
- pyneurale-0.1.1/src/neurale/decoding/_validation.py +109 -0
- pyneurale-0.1.1/src/neurale/decoding/base.py +590 -0
- pyneurale-0.1.1/src/neurale/decoding/kalman.py +598 -0
- pyneurale-0.1.1/src/neurale/decoding/lda.py +363 -0
- pyneurale-0.1.1/src/neurale/decoding/linear.py +320 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/__init__.py +291 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_artifact.py +319 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_canonical.py +179 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_codecs.py +1063 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_errors.py +57 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_manifest.py +191 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_metadata.py +303 -0
- pyneurale-0.1.1/src/neurale/decoding/persistence/_stages.py +221 -0
- pyneurale-0.1.1/src/neurale/decoding/results.py +149 -0
- pyneurale-0.1.1/src/neurale/decoding/schema.py +399 -0
- pyneurale-0.1.1/src/neurale/decoding/sequence/__init__.py +56 -0
- pyneurale-0.1.1/src/neurale/decoding/sequence/beam.py +496 -0
- pyneurale-0.1.1/src/neurale/decoding/sequence/hypotheses.py +107 -0
- pyneurale-0.1.1/src/neurale/decoding/sequence/language_model.py +573 -0
- pyneurale-0.1.1/src/neurale/decoding/sequence/vocabulary.py +314 -0
- pyneurale-0.1.1/src/neurale/decoding/targets.py +122 -0
- pyneurale-0.1.1/src/neurale/decoding/torch/__init__.py +112 -0
- pyneurale-0.1.1/src/neurale/devices/__init__.py +11 -0
- pyneurale-0.1.1/src/neurale/devices/_process.py +67 -0
- pyneurale-0.1.1/src/neurale/devices/_registry.py +279 -0
- pyneurale-0.1.1/src/neurale/devices/lsl.py +341 -0
- pyneurale-0.1.1/src/neurale/devices/provider.py +125 -0
- pyneurale-0.1.1/src/neurale/devices/sdk/helpers.hpp +106 -0
- pyneurale-0.1.1/src/neurale/devices/sdk/provider.h +96 -0
- pyneurale-0.1.1/src/neurale/devices/simulation.py +813 -0
- pyneurale-0.1.1/src/neurale/exceptions.py +70 -0
- pyneurale-0.1.1/src/neurale/experiments/__init__.py +230 -0
- pyneurale-0.1.1/src/neurale/experiments/_center_out_geometry.py +51 -0
- pyneurale-0.1.1/src/neurale/experiments/_ssvep_session.py +322 -0
- pyneurale-0.1.1/src/neurale/experiments/assistance.py +85 -0
- pyneurale-0.1.1/src/neurale/experiments/center_out.py +335 -0
- pyneurale-0.1.1/src/neurale/experiments/center_out.pyi +527 -0
- pyneurale-0.1.1/src/neurale/experiments/center_out_session.py +460 -0
- pyneurale-0.1.1/src/neurale/experiments/center_out_training.py +467 -0
- pyneurale-0.1.1/src/neurale/experiments/closed_loop.py +784 -0
- pyneurale-0.1.1/src/neurale/experiments/presentation/__init__.py +111 -0
- pyneurale-0.1.1/src/neurale/experiments/presentation/_center_out.py +249 -0
- pyneurale-0.1.1/src/neurale/experiments/presentation/_native.py +26 -0
- pyneurale-0.1.1/src/neurale/experiments/presentation/_ssvep.py +161 -0
- pyneurale-0.1.1/src/neurale/experiments/presentation/_types.py +54 -0
- pyneurale-0.1.1/src/neurale/experiments/speech.py +177 -0
- pyneurale-0.1.1/src/neurale/experiments/ssvep.py +58 -0
- pyneurale-0.1.1/src/neurale/experiments/ssvep.pyi +248 -0
- pyneurale-0.1.1/src/neurale/experiments/traceability.py +1908 -0
- pyneurale-0.1.1/src/neurale/experiments/webgrid.py +101 -0
- pyneurale-0.1.1/src/neurale/features/__init__.py +66 -0
- pyneurale-0.1.1/src/neurale/features/_streaming_input.py +109 -0
- pyneurale-0.1.1/src/neurale/features/bandpower.py +294 -0
- pyneurale-0.1.1/src/neurale/features/erp.py +772 -0
- pyneurale-0.1.1/src/neurale/features/kinematics.py +584 -0
- pyneurale-0.1.1/src/neurale/features/online.py +335 -0
- pyneurale-0.1.1/src/neurale/features/oscillations.py +868 -0
- pyneurale-0.1.1/src/neurale/features/preprocessing.py +469 -0
- pyneurale-0.1.1/src/neurale/features/tuning.py +1028 -0
- pyneurale-0.1.1/src/neurale/io/__init__.py +26 -0
- pyneurale-0.1.1/src/neurale/io/_csv.py +133 -0
- pyneurale-0.1.1/src/neurale/io/_mat.py +142 -0
- pyneurale-0.1.1/src/neurale/io/nrf/__init__.py +196 -0
- pyneurale-0.1.1/src/neurale/io/nrf/__main__.py +127 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_canonical.py +192 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_completeness.py +906 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_diagnostics.py +1026 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_errors.py +53 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_fields.py +68 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_journal.py +320 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_ledgers.py +329 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_manifest.py +611 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_package.py +263 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_paths.py +191 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_plan_document.py +1182 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_reader.py +564 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_recording.py +816 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_recovery.py +589 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_replay.py +546 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_schemas.py +167 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_semantics.py +969 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_typed.py +442 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_writer.py +853 -0
- pyneurale-0.1.1/src/neurale/io/nrf/_zarr.py +382 -0
- pyneurale-0.1.1/src/neurale/io/nrf/schemas/__init__.py +18 -0
- pyneurale-0.1.1/src/neurale/models/__init__.py +68 -0
- pyneurale-0.1.1/src/neurale/models/_dispatch.py +62 -0
- pyneurale-0.1.1/src/neurale/models/_inference.py +54 -0
- pyneurale-0.1.1/src/neurale/models/alignment.py +115 -0
- pyneurale-0.1.1/src/neurale/models/classification.py +231 -0
- pyneurale-0.1.1/src/neurale/models/decomposition.py +134 -0
- pyneurale-0.1.1/src/neurale/models/density.py +227 -0
- pyneurale-0.1.1/src/neurale/models/evaluation.py +565 -0
- pyneurale-0.1.1/src/neurale/models/linear_model.py +245 -0
- pyneurale-0.1.1/src/neurale/models/manifold.py +202 -0
- pyneurale-0.1.1/src/neurale/models/neighbors.py +91 -0
- pyneurale-0.1.1/src/neurale/models/preprocessing.py +529 -0
- pyneurale-0.1.1/src/neurale/models/state_space.py +684 -0
- pyneurale-0.1.1/src/neurale/models/statistics.py +459 -0
- pyneurale-0.1.1/src/neurale/pipeline/__init__.py +61 -0
- pyneurale-0.1.1/src/neurale/pipeline/_deployment.py +182 -0
- pyneurale-0.1.1/src/neurale/pipeline/_plan.py +189 -0
- pyneurale-0.1.1/src/neurale/pipeline/_stages.py +1159 -0
- pyneurale-0.1.1/src/neurale/py.typed +0 -0
- pyneurale-0.1.1/src/neurale/recording/__init__.py +208 -0
- pyneurale-0.1.1/src/neurale/recording/_block_index.py +25 -0
- pyneurale-0.1.1/src/neurale/recording/_budget.py +58 -0
- pyneurale-0.1.1/src/neurale/recording/_errors.py +137 -0
- pyneurale-0.1.1/src/neurale/recording/_finalizer.py +3171 -0
- pyneurale-0.1.1/src/neurale/recording/_native.py +40 -0
- pyneurale-0.1.1/src/neurale/recording/_native_recorder.py +1227 -0
- pyneurale-0.1.1/src/neurale/recording/_plan.py +676 -0
- pyneurale-0.1.1/src/neurale/recording/_recovery.py +662 -0
- pyneurale-0.1.1/src/neurale/recording/_registry.py +576 -0
- pyneurale-0.1.1/src/neurale/recording/_replay_build.py +1993 -0
- pyneurale-0.1.1/src/neurale/recording/_replay_config.py +518 -0
- pyneurale-0.1.1/src/neurale/recording/_replay_image.py +1009 -0
- pyneurale-0.1.1/src/neurale/recording/_session_recorder.py +1253 -0
- pyneurale-0.1.1/src/neurale/recording/_spec.py +356 -0
- pyneurale-0.1.1/src/neurale/recording/_spool_format.py +428 -0
- pyneurale-0.1.1/src/neurale/runtime/__init__.py +73 -0
- pyneurale-0.1.1/src/neurale/runtime/_device.py +100 -0
- pyneurale-0.1.1/src/neurale/runtime/_environment.py +77 -0
- pyneurale-0.1.1/src/neurale/runtime/_logging.py +210 -0
- pyneurale-0.1.1/src/neurale/runtime/_native_probe.py +84 -0
- pyneurale-0.1.1/src/neurale/runtime/_state.py +24 -0
- pyneurale-0.1.1/src/neurale/runtime/_types.py +11 -0
- pyneurale-0.1.1/src/neurale/runtime/capabilities.py +50 -0
- pyneurale-0.1.1/src/neurale/runtime/config.py +141 -0
- pyneurale-0.1.1/src/neurale/runtime/context.py +132 -0
- pyneurale-0.1.1/src/neurale/runtime/dependencies.py +166 -0
- pyneurale-0.1.1/src/neurale/runtime/diagnostics.py +436 -0
- pyneurale-0.1.1/src/neurale/runtime/initialization.py +146 -0
- pyneurale-0.1.1/src/neurale/runtime/random.py +156 -0
- pyneurale-0.1.1/src/neurale/runtime/threading.py +220 -0
- pyneurale-0.1.1/src/neurale/signal/__init__.py +142 -0
- pyneurale-0.1.1/src/neurale/signal/_arrays.py +18 -0
- pyneurale-0.1.1/src/neurale/signal/_input.py +159 -0
- pyneurale-0.1.1/src/neurale/signal/_numerics.py +15 -0
- pyneurale-0.1.1/src/neurale/signal/_validation.py +33 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/__init__.py +93 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/_filter.py +106 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/_representation_numerics.py +94 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/coefficients.py +523 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/design.py +359 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/fir.py +148 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/iir.py +354 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/iir_design.py +365 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/representations.py +540 -0
- pyneurale-0.1.1/src/neurale/signal/filtering/spatial.py +175 -0
- pyneurale-0.1.1/src/neurale/signal/resampling.py +477 -0
- pyneurale-0.1.1/src/neurale/signal/simulation.py +675 -0
- pyneurale-0.1.1/src/neurale/signal/smoothing.py +429 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/__init__.py +29 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/_psd.py +180 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/_spectrogram.py +132 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/frequency.py +93 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/multitaper.py +613 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/scaling.py +120 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/stft.py +162 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/transforms.py +164 -0
- pyneurale-0.1.1/src/neurale/signal/spectral/welch.py +149 -0
- pyneurale-0.1.1/src/neurale/signal/transforms.py +91 -0
- pyneurale-0.1.1/src/neurale/signal/windows.py +180 -0
- pyneurale-0.1.1/src/neurale/sorting/__init__.py +48 -0
- pyneurale-0.1.1/src/neurale/sorting/_detection_reference.py +299 -0
- pyneurale-0.1.1/src/neurale/sorting/_dispatch.py +27 -0
- pyneurale-0.1.1/src/neurale/sorting/_helpers.py +92 -0
- pyneurale-0.1.1/src/neurale/sorting/_valley_seeking_reference.py +220 -0
- pyneurale-0.1.1/src/neurale/sorting/clustering.py +237 -0
- pyneurale-0.1.1/src/neurale/sorting/curation.py +770 -0
- pyneurale-0.1.1/src/neurale/sorting/detection.py +219 -0
- pyneurale-0.1.1/src/neurale/sorting/features.py +379 -0
- pyneurale-0.1.1/src/neurale/sorting/metrics.py +498 -0
- pyneurale-0.1.1/src/neurale/sorting/offline.py +233 -0
- pyneurale-0.1.1/src/neurale/sorting/online.py +131 -0
- pyneurale-0.1.1/src/neurale/sorting/workflow.py +235 -0
- pyneurale-0.1.1/src/neurale/streaming/__init__.py +154 -0
- pyneurale-0.1.1/src/neurale/streaming/_config.py +162 -0
- pyneurale-0.1.1/src/neurale/streaming/_feature_matrix.py +183 -0
- pyneurale-0.1.1/src/neurale/streaming/_native.py +69 -0
- pyneurale-0.1.1/src/neurale/streaming/runner.py +195 -0
- pyneurale-0.1.1/tests/_native_harness.py +188 -0
- pyneurale-0.1.1/tests/_repository_module.py +33 -0
- pyneurale-0.1.1/tests/_subprocess_probe.py +44 -0
- pyneurale-0.1.1/tests/conftest.py +199 -0
- pyneurale-0.1.1/tests/integration/benchmarks/test_device_simulation.py +55 -0
- pyneurale-0.1.1/tests/integration/benchmarks/test_record_replay.py +194 -0
- pyneurale-0.1.1/tests/integration/benchmarks/test_sorting_workflow.py +178 -0
- pyneurale-0.1.1/tests/integration/decoding/test_decoder_workflow.py +100 -0
- pyneurale-0.1.1/tests/integration/devices/test_simulated_record_replay.py +343 -0
- pyneurale-0.1.1/tests/integration/experiments/test_center_out_closed_loop.py +285 -0
- pyneurale-0.1.1/tests/integration/features/test_feature_workflows.py +181 -0
- pyneurale-0.1.1/tests/integration/recording/test_continuous_recording.py +90 -0
- pyneurale-0.1.1/tests/integration/runtime/test_native_extension.py +80 -0
- pyneurale-0.1.1/tests/integration/signal/test_clean_import.py +27 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_common_reference.py +58 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_filter_representations.py +145 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_filtering.py +207 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_iir_design.py +169 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_iir_filtering.py +204 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_multitaper.py +358 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_resampling.py +220 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_spectral_transforms.py +85 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_spectrogram.py +58 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_transforms.py +54 -0
- pyneurale-0.1.1/tests/integration/signal/test_native_windows.py +90 -0
- pyneurale-0.1.1/tests/integration/sorting/test_native_threshold_detection.py +224 -0
- pyneurale-0.1.1/tests/integration/sorting/test_native_valley_seeking.py +207 -0
- pyneurale-0.1.1/tests/integration/sorting/test_offline_workflow.py +319 -0
- pyneurale-0.1.1/tests/specification/_native_spool_v1_reference.py +66 -0
- pyneurale-0.1.1/tests/specification/_nrf_v1_reference.py +72 -0
- pyneurale-0.1.1/tests/specification/test_native_spool_v1_package_conformance.py +108 -0
- pyneurale-0.1.1/tests/specification/test_native_spool_v1_specification.py +969 -0
- pyneurale-0.1.1/tests/specification/test_nrf_v1_package_conformance.py +831 -0
- pyneurale-0.1.1/tests/specification/test_nrf_v1_specification.py +2627 -0
- pyneurale-0.1.1/tests/specification/test_nrf_v1_vector_reproducibility.py +43 -0
- pyneurale-0.1.1/tests/test_signal_realtime_api.py +42 -0
- pyneurale-0.1.1/tests/unit/data/test_arrays.py +334 -0
- pyneurale-0.1.1/tests/unit/data/test_channels.py +138 -0
- pyneurale-0.1.1/tests/unit/data/test_events.py +77 -0
- pyneurale-0.1.1/tests/unit/data/test_recording.py +74 -0
- pyneurale-0.1.1/tests/unit/data/test_spike_waveform_batch.py +758 -0
- pyneurale-0.1.1/tests/unit/data/test_trial_alignment.py +1484 -0
- pyneurale-0.1.1/tests/unit/decoding/persistence/__init__.py +11 -0
- pyneurale-0.1.1/tests/unit/decoding/persistence/conftest.py +194 -0
- pyneurale-0.1.1/tests/unit/decoding/persistence/test_decoder_artifact_failures.py +1063 -0
- pyneurale-0.1.1/tests/unit/decoding/persistence/test_decoder_round_trip.py +530 -0
- pyneurale-0.1.1/tests/unit/decoding/sequence/test_beam_search.py +807 -0
- pyneurale-0.1.1/tests/unit/decoding/sequence/test_language_model.py +505 -0
- pyneurale-0.1.1/tests/unit/decoding/sequence/test_sequence_import.py +91 -0
- pyneurale-0.1.1/tests/unit/decoding/sequence/test_vocabulary.py +219 -0
- pyneurale-0.1.1/tests/unit/decoding/test_decoder_contract.py +797 -0
- pyneurale-0.1.1/tests/unit/decoding/test_decoding_import.py +97 -0
- pyneurale-0.1.1/tests/unit/decoding/test_feature_schema.py +377 -0
- pyneurale-0.1.1/tests/unit/decoding/test_kalman.py +1013 -0
- pyneurale-0.1.1/tests/unit/decoding/test_lda.py +752 -0
- pyneurale-0.1.1/tests/unit/decoding/test_linear.py +718 -0
- pyneurale-0.1.1/tests/unit/decoding/test_results.py +182 -0
- pyneurale-0.1.1/tests/unit/decoding/test_targets.py +179 -0
- pyneurale-0.1.1/tests/unit/decoding/test_torch_boundary.py +197 -0
- pyneurale-0.1.1/tests/unit/devices/provider_fixture.py +51 -0
- pyneurale-0.1.1/tests/unit/devices/test_devices_import.py +104 -0
- pyneurale-0.1.1/tests/unit/devices/test_lsl.py +425 -0
- pyneurale-0.1.1/tests/unit/devices/test_provider.py +310 -0
- pyneurale-0.1.1/tests/unit/devices/test_provider_frames.py +138 -0
- pyneurale-0.1.1/tests/unit/devices/test_simulated_device.py +566 -0
- pyneurale-0.1.1/tests/unit/experiments/test_assistance.py +820 -0
- pyneurale-0.1.1/tests/unit/experiments/test_center_out.py +839 -0
- pyneurale-0.1.1/tests/unit/experiments/test_center_out_guidance.py +782 -0
- pyneurale-0.1.1/tests/unit/experiments/test_center_out_machine.py +1003 -0
- pyneurale-0.1.1/tests/unit/experiments/test_center_out_session.py +219 -0
- pyneurale-0.1.1/tests/unit/experiments/test_center_out_training.py +240 -0
- pyneurale-0.1.1/tests/unit/experiments/test_closed_loop.py +639 -0
- pyneurale-0.1.1/tests/unit/experiments/test_contract.py +969 -0
- pyneurale-0.1.1/tests/unit/experiments/test_experiments_import.py +432 -0
- pyneurale-0.1.1/tests/unit/experiments/test_presentation_import.py +362 -0
- pyneurale-0.1.1/tests/unit/experiments/test_replay.py +197 -0
- pyneurale-0.1.1/tests/unit/experiments/test_speech.py +1132 -0
- pyneurale-0.1.1/tests/unit/experiments/test_speech_machine.py +580 -0
- pyneurale-0.1.1/tests/unit/experiments/test_ssvep.py +130 -0
- pyneurale-0.1.1/tests/unit/experiments/test_ssvep_display.py +89 -0
- pyneurale-0.1.1/tests/unit/experiments/test_ssvep_machine.py +139 -0
- pyneurale-0.1.1/tests/unit/experiments/test_ssvep_session.py +204 -0
- pyneurale-0.1.1/tests/unit/experiments/test_traceability.py +1742 -0
- pyneurale-0.1.1/tests/unit/experiments/test_webgrid.py +324 -0
- pyneurale-0.1.1/tests/unit/experiments/test_webgrid_machine.py +405 -0
- pyneurale-0.1.1/tests/unit/features/test_bandpower.py +163 -0
- pyneurale-0.1.1/tests/unit/features/test_erp.py +836 -0
- pyneurale-0.1.1/tests/unit/features/test_kinematics.py +476 -0
- pyneurale-0.1.1/tests/unit/features/test_online.py +199 -0
- pyneurale-0.1.1/tests/unit/features/test_oscillations.py +1031 -0
- pyneurale-0.1.1/tests/unit/features/test_preprocessing.py +354 -0
- pyneurale-0.1.1/tests/unit/features/test_tuning.py +831 -0
- pyneurale-0.1.1/tests/unit/io/nrf/__init__.py +14 -0
- pyneurale-0.1.1/tests/unit/io/nrf/conftest.py +36 -0
- pyneurale-0.1.1/tests/unit/io/nrf/nrf_support.py +245 -0
- pyneurale-0.1.1/tests/unit/io/nrf/package_objects.py +170 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_canonical.py +323 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_completeness.py +168 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_corruption_recovery.py +1132 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_journal_replay.py +387 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_package.py +223 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_recording_round_trip.py +270 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_schema_layer.py +178 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_semantics.py +86 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_session.py +624 -0
- pyneurale-0.1.1/tests/unit/io/nrf/test_writer_invariants.py +552 -0
- pyneurale-0.1.1/tests/unit/io/test_csv.py +202 -0
- pyneurale-0.1.1/tests/unit/io/test_mat.py +220 -0
- pyneurale-0.1.1/tests/unit/models/test_alignment.py +190 -0
- pyneurale-0.1.1/tests/unit/models/test_classification.py +309 -0
- pyneurale-0.1.1/tests/unit/models/test_decomposition.py +272 -0
- pyneurale-0.1.1/tests/unit/models/test_density.py +422 -0
- pyneurale-0.1.1/tests/unit/models/test_device_dispatch.py +95 -0
- pyneurale-0.1.1/tests/unit/models/test_evaluation.py +499 -0
- pyneurale-0.1.1/tests/unit/models/test_linear_model.py +844 -0
- pyneurale-0.1.1/tests/unit/models/test_manifold.py +200 -0
- pyneurale-0.1.1/tests/unit/models/test_model_preprocessing.py +661 -0
- pyneurale-0.1.1/tests/unit/models/test_models_import.py +47 -0
- pyneurale-0.1.1/tests/unit/models/test_models_native_loading.py +55 -0
- pyneurale-0.1.1/tests/unit/models/test_neighbors.py +402 -0
- pyneurale-0.1.1/tests/unit/models/test_state_space.py +1122 -0
- pyneurale-0.1.1/tests/unit/models/test_statistics.py +265 -0
- pyneurale-0.1.1/tests/unit/pipeline/test_decoder_stages.py +147 -0
- pyneurale-0.1.1/tests/unit/pipeline/test_plan.py +897 -0
- pyneurale-0.1.1/tests/unit/recording/__init__.py +11 -0
- pyneurale-0.1.1/tests/unit/recording/conftest.py +355 -0
- pyneurale-0.1.1/tests/unit/recording/test_end_to_end.py +2370 -0
- pyneurale-0.1.1/tests/unit/recording/test_finalizer.py +1745 -0
- pyneurale-0.1.1/tests/unit/recording/test_native_ledgers.py +307 -0
- pyneurale-0.1.1/tests/unit/recording/test_native_parity.py +72 -0
- pyneurale-0.1.1/tests/unit/recording/test_native_recorder.py +1680 -0
- pyneurale-0.1.1/tests/unit/recording/test_plan.py +480 -0
- pyneurale-0.1.1/tests/unit/recording/test_recording_import.py +137 -0
- pyneurale-0.1.1/tests/unit/recording/test_recovery.py +1724 -0
- pyneurale-0.1.1/tests/unit/recording/test_replay_image.py +1442 -0
- pyneurale-0.1.1/tests/unit/recording/test_session_recorder.py +1715 -0
- pyneurale-0.1.1/tests/unit/runtime/test_config.py +53 -0
- pyneurale-0.1.1/tests/unit/runtime/test_context.py +58 -0
- pyneurale-0.1.1/tests/unit/runtime/test_dependencies.py +32 -0
- pyneurale-0.1.1/tests/unit/runtime/test_device.py +73 -0
- pyneurale-0.1.1/tests/unit/runtime/test_diagnostics.py +96 -0
- pyneurale-0.1.1/tests/unit/runtime/test_environment.py +46 -0
- pyneurale-0.1.1/tests/unit/runtime/test_initialization.py +119 -0
- pyneurale-0.1.1/tests/unit/runtime/test_logging.py +112 -0
- pyneurale-0.1.1/tests/unit/runtime/test_native_probe.py +33 -0
- pyneurale-0.1.1/tests/unit/runtime/test_random.py +77 -0
- pyneurale-0.1.1/tests/unit/runtime/test_runtime_import.py +53 -0
- pyneurale-0.1.1/tests/unit/runtime/test_threading.py +44 -0
- pyneurale-0.1.1/tests/unit/signal/test_common_reference.py +224 -0
- pyneurale-0.1.1/tests/unit/signal/test_filter_representations.py +237 -0
- pyneurale-0.1.1/tests/unit/signal/test_filtering.py +205 -0
- pyneurale-0.1.1/tests/unit/signal/test_iir_design.py +232 -0
- pyneurale-0.1.1/tests/unit/signal/test_iir_filtering.py +399 -0
- pyneurale-0.1.1/tests/unit/signal/test_input_contract.py +130 -0
- pyneurale-0.1.1/tests/unit/signal/test_invariants.py +71 -0
- pyneurale-0.1.1/tests/unit/signal/test_multitaper.py +196 -0
- pyneurale-0.1.1/tests/unit/signal/test_native_loading.py +77 -0
- pyneurale-0.1.1/tests/unit/signal/test_neural_simulation.py +292 -0
- pyneurale-0.1.1/tests/unit/signal/test_psd.py +211 -0
- pyneurale-0.1.1/tests/unit/signal/test_resampling.py +398 -0
- pyneurale-0.1.1/tests/unit/signal/test_signal_import.py +144 -0
- pyneurale-0.1.1/tests/unit/signal/test_simulation.py +184 -0
- pyneurale-0.1.1/tests/unit/signal/test_smoothing.py +230 -0
- pyneurale-0.1.1/tests/unit/signal/test_spectral.py +110 -0
- pyneurale-0.1.1/tests/unit/signal/test_spectral_transforms.py +126 -0
- pyneurale-0.1.1/tests/unit/signal/test_spectrogram.py +270 -0
- pyneurale-0.1.1/tests/unit/signal/test_transforms.py +205 -0
- pyneurale-0.1.1/tests/unit/signal/test_windows.py +178 -0
- pyneurale-0.1.1/tests/unit/sorting/test_curation.py +481 -0
- pyneurale-0.1.1/tests/unit/sorting/test_detection_reference.py +464 -0
- pyneurale-0.1.1/tests/unit/sorting/test_metrics.py +389 -0
- pyneurale-0.1.1/tests/unit/sorting/test_offline_detection.py +327 -0
- pyneurale-0.1.1/tests/unit/sorting/test_spike_block.py +190 -0
- pyneurale-0.1.1/tests/unit/sorting/test_valley_seeking_reference.py +186 -0
- pyneurale-0.1.1/tests/unit/sorting/test_waveform_features.py +340 -0
- pyneurale-0.1.1/tests/unit/sorting/test_workflow.py +109 -0
- pyneurale-0.1.1/tests/unit/streaming/__init__.py +1 -0
- pyneurale-0.1.1/tests/unit/streaming/test_array_replay.py +169 -0
- pyneurale-0.1.1/tests/unit/streaming/test_config.py +82 -0
- pyneurale-0.1.1/tests/unit/streaming/test_feature_schema.py +245 -0
- pyneurale-0.1.1/tests/unit/streaming/test_native.py +407 -0
- pyneurale-0.1.1/tests/unit/streaming/test_native_observer_bridge.py +339 -0
- pyneurale-0.1.1/tests/unit/streaming/test_runner.py +276 -0
- pyneurale-0.1.1/tests/unit/streaming/test_streaming_import.py +129 -0
- pyneurale-0.1.1/tests/unit/test_benchmark_regression_policy.py +241 -0
- pyneurale-0.1.1/tests/unit/test_documented_python_paths.py +17 -0
- pyneurale-0.1.1/tests/unit/test_exceptions.py +36 -0
- pyneurale-0.1.1/tests/unit/test_package_artifacts.py +546 -0
- pyneurale-0.1.1/tests/unit/test_package_import.py +67 -0
- pyneurale-0.1.1/tests/unit/test_recording_plan_linkage.py +258 -0
- pyneurale-0.1.1/tests/unit/test_suite_classification.py +93 -0
- pyneurale-0.1.1/tests/unit/test_validation.py +157 -0
- pyneurale-0.1.1/tools/README.md +17 -0
- pyneurale-0.1.1/tools/artifacts/artifact_profiles.py +23 -0
- pyneurale-0.1.1/tools/artifacts/validate_clean_wheel.py +116 -0
- pyneurale-0.1.1/tools/artifacts/validate_device_providers.py +92 -0
- pyneurale-0.1.1/tools/artifacts/validate_installed_artifact.py +330 -0
- pyneurale-0.1.1/tools/artifacts/validate_native_binary.py +389 -0
- pyneurale-0.1.1/tools/artifacts/validate_release_dist.py +123 -0
- pyneurale-0.1.1/tools/artifacts/validate_required_pytest.py +46 -0
- pyneurale-0.1.1/tools/artifacts/validate_wheel_profile.py +198 -0
- pyneurale-0.1.1/tools/benchmark_policy.py +88 -0
- pyneurale-0.1.1/tools/build_docs.py +190 -0
- pyneurale-0.1.1/tools/build_release.ps1 +92 -0
- pyneurale-0.1.1/tools/build_release.sh +90 -0
- pyneurale-0.1.1/tools/check_format.ps1 +39 -0
- pyneurale-0.1.1/tools/cmake-runner-common.psm1 +233 -0
- pyneurale-0.1.1/tools/run_benchmarks.ps1 +1177 -0
- pyneurale-0.1.1/tools/run_benchmarks.sh +16 -0
- pyneurale-0.1.1/tools/run_cpp_tests.ps1 +230 -0
- pyneurale-0.1.1/tools/run_cpp_tests.sh +16 -0
- 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,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
|