xpcsjax 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. xpcsjax-0.1.0/.gitattributes +12 -0
  2. xpcsjax-0.1.0/.github/codeql/codeql-config.yml +59 -0
  3. xpcsjax-0.1.0/.github/workflows/ci.yml +86 -0
  4. xpcsjax-0.1.0/.github/workflows/codeql.yml +39 -0
  5. xpcsjax-0.1.0/.github/workflows/docs.yml +42 -0
  6. xpcsjax-0.1.0/.github/workflows/release.yml +84 -0
  7. xpcsjax-0.1.0/.gitignore +342 -0
  8. xpcsjax-0.1.0/.graphifyignore +23 -0
  9. xpcsjax-0.1.0/.pre-commit-config.yaml +138 -0
  10. xpcsjax-0.1.0/.readthedocs.yaml +54 -0
  11. xpcsjax-0.1.0/CHANGELOG.md +253 -0
  12. xpcsjax-0.1.0/LICENSE +21 -0
  13. xpcsjax-0.1.0/Makefile +689 -0
  14. xpcsjax-0.1.0/PKG-INFO +373 -0
  15. xpcsjax-0.1.0/README.md +264 -0
  16. xpcsjax-0.1.0/docs/Makefile +65 -0
  17. xpcsjax-0.1.0/docs/diagrams/architecture.md +95 -0
  18. xpcsjax-0.1.0/docs/diagrams/fitting_workflow.md +75 -0
  19. xpcsjax-0.1.0/docs/make.bat +30 -0
  20. xpcsjax-0.1.0/docs/source/_static/xpcsjax_logo.jpg +0 -0
  21. xpcsjax-0.1.0/docs/source/_templates/autosummary/module.rst +49 -0
  22. xpcsjax-0.1.0/docs/source/advanced/anti_degeneracy.rst +190 -0
  23. xpcsjax-0.1.0/docs/source/advanced/architecture.rst +166 -0
  24. xpcsjax-0.1.0/docs/source/advanced/cma_es_escape.rst +176 -0
  25. xpcsjax-0.1.0/docs/source/advanced/index.rst +16 -0
  26. xpcsjax-0.1.0/docs/source/advanced/jax_environment.rst +152 -0
  27. xpcsjax-0.1.0/docs/source/advanced/lazy_api.rst +144 -0
  28. xpcsjax-0.1.0/docs/source/advanced/memory_routing.rst +172 -0
  29. xpcsjax-0.1.0/docs/source/api/cli.rst +118 -0
  30. xpcsjax-0.1.0/docs/source/api/config.rst +129 -0
  31. xpcsjax-0.1.0/docs/source/api/core.rst +73 -0
  32. xpcsjax-0.1.0/docs/source/api/data.rst +85 -0
  33. xpcsjax-0.1.0/docs/source/api/index.rst +21 -0
  34. xpcsjax-0.1.0/docs/source/api/modules.rst +271 -0
  35. xpcsjax-0.1.0/docs/source/api/optimization.rst +231 -0
  36. xpcsjax-0.1.0/docs/source/api/public.rst +63 -0
  37. xpcsjax-0.1.0/docs/source/api/results.rst +107 -0
  38. xpcsjax-0.1.0/docs/source/api/runtime.rst +40 -0
  39. xpcsjax-0.1.0/docs/source/api/service.rst +62 -0
  40. xpcsjax-0.1.0/docs/source/api/viz.rst +119 -0
  41. xpcsjax-0.1.0/docs/source/changelog.rst +170 -0
  42. xpcsjax-0.1.0/docs/source/conf.py +320 -0
  43. xpcsjax-0.1.0/docs/source/development/contributing.rst +251 -0
  44. xpcsjax-0.1.0/docs/source/development/cpu_gpu_decision.rst +142 -0
  45. xpcsjax-0.1.0/docs/source/development/index.rst +16 -0
  46. xpcsjax-0.1.0/docs/source/development/nlsq_integration.rst +288 -0
  47. xpcsjax-0.1.0/docs/source/development/porting_notes.rst +195 -0
  48. xpcsjax-0.1.0/docs/source/development/releasing.rst +123 -0
  49. xpcsjax-0.1.0/docs/source/development/testing.rst +270 -0
  50. xpcsjax-0.1.0/docs/source/examples/basic_homodyne.rst +170 -0
  51. xpcsjax-0.1.0/docs/source/examples/heterodyne_multiangle.rst +182 -0
  52. xpcsjax-0.1.0/docs/source/examples/index.rst +14 -0
  53. xpcsjax-0.1.0/docs/source/examples/laminar_flow.rst +177 -0
  54. xpcsjax-0.1.0/docs/source/examples/multistart_robust_fit.rst +158 -0
  55. xpcsjax-0.1.0/docs/source/index.rst +183 -0
  56. xpcsjax-0.1.0/docs/source/installation.rst +186 -0
  57. xpcsjax-0.1.0/docs/source/quickstart.rst +185 -0
  58. xpcsjax-0.1.0/docs/source/theory/anti_degeneracy.rst +516 -0
  59. xpcsjax-0.1.0/docs/source/theory/citations.rst +335 -0
  60. xpcsjax-0.1.0/docs/source/theory/correlation_functions.rst +287 -0
  61. xpcsjax-0.1.0/docs/source/theory/heterodyne_anti_degeneracy.rst +243 -0
  62. xpcsjax-0.1.0/docs/source/theory/heterodyne_memory_strategy.rst +260 -0
  63. xpcsjax-0.1.0/docs/source/theory/heterodyne_model.rst +377 -0
  64. xpcsjax-0.1.0/docs/source/theory/homodyne_model.rst +366 -0
  65. xpcsjax-0.1.0/docs/source/theory/index.rst +19 -0
  66. xpcsjax-0.1.0/docs/source/theory/transport_coefficient.rst +309 -0
  67. xpcsjax-0.1.0/docs/source/theory/xpcs_basics.rst +294 -0
  68. xpcsjax-0.1.0/docs/source/user_guide/analysis_modes.rst +210 -0
  69. xpcsjax-0.1.0/docs/source/user_guide/cli.rst +198 -0
  70. xpcsjax-0.1.0/docs/source/user_guide/configuration.rst +292 -0
  71. xpcsjax-0.1.0/docs/source/user_guide/data_loading.rst +192 -0
  72. xpcsjax-0.1.0/docs/source/user_guide/gui.rst +147 -0
  73. xpcsjax-0.1.0/docs/source/user_guide/heterodyne_workflow.rst +272 -0
  74. xpcsjax-0.1.0/docs/source/user_guide/homodyne_workflow.rst +231 -0
  75. xpcsjax-0.1.0/docs/source/user_guide/index.rst +21 -0
  76. xpcsjax-0.1.0/docs/source/user_guide/interpreting_results.rst +272 -0
  77. xpcsjax-0.1.0/docs/source/user_guide/nlsq_fitting.rst +266 -0
  78. xpcsjax-0.1.0/docs/source/user_guide/overview.rst +158 -0
  79. xpcsjax-0.1.0/docs/source/user_guide/troubleshooting.rst +337 -0
  80. xpcsjax-0.1.0/docs/source/user_guide/visualization.rst +144 -0
  81. xpcsjax-0.1.0/graphify-out/.graphify_root +1 -0
  82. xpcsjax-0.1.0/graphify-out/GRAPH_REPORT.md +1889 -0
  83. xpcsjax-0.1.0/graphify-out/cost.json +173 -0
  84. xpcsjax-0.1.0/graphify-out/graph.html +307 -0
  85. xpcsjax-0.1.0/graphify-out/graph.json +280928 -0
  86. xpcsjax-0.1.0/graphify-out/manifest.json +5397 -0
  87. xpcsjax-0.1.0/packaging/README.md +61 -0
  88. xpcsjax-0.1.0/packaging/launch_gui.py +5 -0
  89. xpcsjax-0.1.0/packaging/xpcsjax-gui.spec +28 -0
  90. xpcsjax-0.1.0/pyproject.toml +319 -0
  91. xpcsjax-0.1.0/tests/__init__.py +0 -0
  92. xpcsjax-0.1.0/tests/benchmarks/__init__.py +0 -0
  93. xpcsjax-0.1.0/tests/benchmarks/test_perf_regression.py +153 -0
  94. xpcsjax-0.1.0/tests/characterization/__init__.py +0 -0
  95. xpcsjax-0.1.0/tests/characterization/fixtures/baselines/heterodyne_residuals.json +129 -0
  96. xpcsjax-0.1.0/tests/characterization/test_heterodyne_residual_parity.py +75 -0
  97. xpcsjax-0.1.0/tests/cli/__init__.py +0 -0
  98. xpcsjax-0.1.0/tests/cli/test_build_parser_factories.py +57 -0
  99. xpcsjax-0.1.0/tests/cli/test_classify_option.py +63 -0
  100. xpcsjax-0.1.0/tests/cli/test_completion_parity.py +86 -0
  101. xpcsjax-0.1.0/tests/cli/test_completion_spec.py +39 -0
  102. xpcsjax-0.1.0/tests/cli/test_config_generator_yaml.py +36 -0
  103. xpcsjax-0.1.0/tests/cli/test_config_handling_errors.py +56 -0
  104. xpcsjax-0.1.0/tests/cli/test_data_pipeline_adapter.py +29 -0
  105. xpcsjax-0.1.0/tests/cli/test_data_pipeline_phi_filtering.py +110 -0
  106. xpcsjax-0.1.0/tests/cli/test_debug_audit_2026_06_17.py +77 -0
  107. xpcsjax-0.1.0/tests/cli/test_logging_wiring.py +128 -0
  108. xpcsjax-0.1.0/tests/cli/test_output_resolution.py +151 -0
  109. xpcsjax-0.1.0/tests/cli/test_plot_dispatch_logging.py +188 -0
  110. xpcsjax-0.1.0/tests/cli/test_post_install.py +490 -0
  111. xpcsjax-0.1.0/tests/cli/test_post_install_fish.py +94 -0
  112. xpcsjax-0.1.0/tests/cli/test_simulated_data_grid.py +71 -0
  113. xpcsjax-0.1.0/tests/cli/test_uninstall_scripts.py +341 -0
  114. xpcsjax-0.1.0/tests/config/__init__.py +0 -0
  115. xpcsjax-0.1.0/tests/config/test_adversarial_review_nonfinite_coercion.py +134 -0
  116. xpcsjax-0.1.0/tests/config/test_config_analysis_mode.py +19 -0
  117. xpcsjax-0.1.0/tests/config/test_config_debug_null_nonfinite.py +99 -0
  118. xpcsjax-0.1.0/tests/config/test_config_jax_free.py +74 -0
  119. xpcsjax-0.1.0/tests/config/test_config_manager_errors.py +37 -0
  120. xpcsjax-0.1.0/tests/config/test_config_relative_data_paths.py +145 -0
  121. xpcsjax-0.1.0/tests/config/test_debug_audit_2026_06_17.py +102 -0
  122. xpcsjax-0.1.0/tests/config/test_get_model.py +107 -0
  123. xpcsjax-0.1.0/tests/config/test_heterodyne_config_bounds_override.py +87 -0
  124. xpcsjax-0.1.0/tests/config/test_heterodyne_grouped_coercion.py +28 -0
  125. xpcsjax-0.1.0/tests/config/test_heterodyne_physics_validators.py +84 -0
  126. xpcsjax-0.1.0/tests/config/test_heterodyne_registry.py +53 -0
  127. xpcsjax-0.1.0/tests/config/test_parameter_names.py +74 -0
  128. xpcsjax-0.1.0/tests/config/test_registry_consistency.py +70 -0
  129. xpcsjax-0.1.0/tests/config/test_templates_no_fourier_keys.py +56 -0
  130. xpcsjax-0.1.0/tests/conftest.py +16 -0
  131. xpcsjax-0.1.0/tests/core/__init__.py +0 -0
  132. xpcsjax-0.1.0/tests/core/test_core_gaps.py +275 -0
  133. xpcsjax-0.1.0/tests/core/test_heterodyne_integral_kernels.py +47 -0
  134. xpcsjax-0.1.0/tests/core/test_heterodyne_model.py +79 -0
  135. xpcsjax-0.1.0/tests/core/test_heterodyne_pointwise_kernel.py +98 -0
  136. xpcsjax-0.1.0/tests/core/test_heterodyne_scaling_utils.py +52 -0
  137. xpcsjax-0.1.0/tests/core/test_homodyne_models.py +84 -0
  138. xpcsjax-0.1.0/tests/core/test_jax_backend.py +372 -0
  139. xpcsjax-0.1.0/tests/core/test_jax_backend_gradient_g2.py +27 -0
  140. xpcsjax-0.1.0/tests/core/test_models_chi_squared_dt.py +32 -0
  141. xpcsjax-0.1.0/tests/data/__init__.py +0 -0
  142. xpcsjax-0.1.0/tests/data/test_aps_u_alloc_guard.py +60 -0
  143. xpcsjax-0.1.0/tests/data/test_aps_u_empty_selection.py +30 -0
  144. xpcsjax-0.1.0/tests/data/test_async_io_logging.py +211 -0
  145. xpcsjax-0.1.0/tests/data/test_cache_filename_guard.py +33 -0
  146. xpcsjax-0.1.0/tests/data/test_cache_loader_security.py +173 -0
  147. xpcsjax-0.1.0/tests/data/test_cache_no_pickle_exec.py +92 -0
  148. xpcsjax-0.1.0/tests/data/test_cache_q_validation.py +34 -0
  149. xpcsjax-0.1.0/tests/data/test_cache_safety.py +133 -0
  150. xpcsjax-0.1.0/tests/data/test_debug_audit_2026_06_17.py +94 -0
  151. xpcsjax-0.1.0/tests/data/test_filtering_quality_score.py +66 -0
  152. xpcsjax-0.1.0/tests/data/test_frame_dimension_guard.py +85 -0
  153. xpcsjax-0.1.0/tests/data/test_load_degradation_signal.py +41 -0
  154. xpcsjax-0.1.0/tests/data/test_loaded_array_validation.py +87 -0
  155. xpcsjax-0.1.0/tests/data/test_loader_integration.py +78 -0
  156. xpcsjax-0.1.0/tests/data/test_loader_smoke.py +11 -0
  157. xpcsjax-0.1.0/tests/data/test_memory_manager_cache_gating.py +289 -0
  158. xpcsjax-0.1.0/tests/data/test_memory_manager_logging.py +418 -0
  159. xpcsjax-0.1.0/tests/data/test_no_pickle_loads.py +117 -0
  160. xpcsjax-0.1.0/tests/data/test_optimization_logging.py +71 -0
  161. xpcsjax-0.1.0/tests/data/test_preprocessing_diagonal_dtype.py +50 -0
  162. xpcsjax-0.1.0/tests/data/test_quality_controller_smoke.py +152 -0
  163. xpcsjax-0.1.0/tests/data/test_validation.py +164 -0
  164. xpcsjax-0.1.0/tests/data/test_validation_crash_coverage.py +144 -0
  165. xpcsjax-0.1.0/tests/data/test_validation_exception_narrowing.py +42 -0
  166. xpcsjax-0.1.0/tests/data/test_validation_integrity_logging.py +44 -0
  167. xpcsjax-0.1.0/tests/data/test_xpcs_dataset.py +48 -0
  168. xpcsjax-0.1.0/tests/gui/__init__.py +0 -0
  169. xpcsjax-0.1.0/tests/gui/conftest.py +5 -0
  170. xpcsjax-0.1.0/tests/gui/ipc_fakes.py +28 -0
  171. xpcsjax-0.1.0/tests/gui/test_app_wiring.py +31 -0
  172. xpcsjax-0.1.0/tests/gui/test_data_inspect.py +85 -0
  173. xpcsjax-0.1.0/tests/gui/test_diagnostics_map.py +62 -0
  174. xpcsjax-0.1.0/tests/gui/test_error_presenter.py +23 -0
  175. xpcsjax-0.1.0/tests/gui/test_export_flow.py +131 -0
  176. xpcsjax-0.1.0/tests/gui/test_fit_queue.py +186 -0
  177. xpcsjax-0.1.0/tests/gui/test_freeze_safety.py +70 -0
  178. xpcsjax-0.1.0/tests/gui/test_gui_debug_2026_06_21.py +213 -0
  179. xpcsjax-0.1.0/tests/gui/test_gui_debug_fixes.py +166 -0
  180. xpcsjax-0.1.0/tests/gui/test_gui_jax_free.py +181 -0
  181. xpcsjax-0.1.0/tests/gui/test_gui_redesign.py +454 -0
  182. xpcsjax-0.1.0/tests/gui/test_inspector.py +40 -0
  183. xpcsjax-0.1.0/tests/gui/test_ipc_primitives.py +54 -0
  184. xpcsjax-0.1.0/tests/gui/test_main_window.py +176 -0
  185. xpcsjax-0.1.0/tests/gui/test_plots_view.py +205 -0
  186. xpcsjax-0.1.0/tests/gui/test_project_io_wiring.py +45 -0
  187. xpcsjax-0.1.0/tests/gui/test_project_model.py +41 -0
  188. xpcsjax-0.1.0/tests/gui/test_project_panel.py +63 -0
  189. xpcsjax-0.1.0/tests/gui/test_project_persist.py +59 -0
  190. xpcsjax-0.1.0/tests/gui/test_project_tree_model.py +77 -0
  191. xpcsjax-0.1.0/tests/gui/test_raster.py +47 -0
  192. xpcsjax-0.1.0/tests/gui/test_result_loader.py +60 -0
  193. xpcsjax-0.1.0/tests/gui/test_result_presenter.py +156 -0
  194. xpcsjax-0.1.0/tests/gui/test_status_manager.py +48 -0
  195. xpcsjax-0.1.0/tests/gui/test_viz_bundle.py +41 -0
  196. xpcsjax-0.1.0/tests/gui/test_workbench_surfaces.py +111 -0
  197. xpcsjax-0.1.0/tests/gui/test_worker.py +85 -0
  198. xpcsjax-0.1.0/tests/gui/test_worker_diagnostics.py +71 -0
  199. xpcsjax-0.1.0/tests/gui/test_worker_handle.py +115 -0
  200. xpcsjax-0.1.0/tests/heterodyne/__init__.py +0 -0
  201. xpcsjax-0.1.0/tests/heterodyne/test_config_unwrap.py +145 -0
  202. xpcsjax-0.1.0/tests/heterodyne/test_heterodyne_diagnostics_golden.py +111 -0
  203. xpcsjax-0.1.0/tests/heterodyne/test_l4_fallback_stale_monitor.py +114 -0
  204. xpcsjax-0.1.0/tests/heterodyne/test_logging_parity.py +61 -0
  205. xpcsjax-0.1.0/tests/heterodyne/test_two_component_smoke.py +198 -0
  206. xpcsjax-0.1.0/tests/integration/test_error_recovery.py +206 -0
  207. xpcsjax-0.1.0/tests/integration/test_heterodyne_fit_smoke.py +183 -0
  208. xpcsjax-0.1.0/tests/optimization/__init__.py +0 -0
  209. xpcsjax-0.1.0/tests/optimization/_heterodyne_fixtures.py +111 -0
  210. xpcsjax-0.1.0/tests/optimization/test_adapter_cost_default.py +35 -0
  211. xpcsjax-0.1.0/tests/optimization/test_adapter_flatten_phi_order.py +91 -0
  212. xpcsjax-0.1.0/tests/optimization/test_adapter_xdata_cache.py +87 -0
  213. xpcsjax-0.1.0/tests/optimization/test_adaptive_regularization.py +76 -0
  214. xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_diagnostics.py +76 -0
  215. xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_layers.py +355 -0
  216. xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_transforms.py +107 -0
  217. xpcsjax-0.1.0/tests/optimization/test_canonical_index_mapper.py +100 -0
  218. xpcsjax-0.1.0/tests/optimization/test_chunked_jacfwd.py +69 -0
  219. xpcsjax-0.1.0/tests/optimization/test_cmaes_multiseed_keep_best.py +147 -0
  220. xpcsjax-0.1.0/tests/optimization/test_cmaes_trigger.py +219 -0
  221. xpcsjax-0.1.0/tests/optimization/test_config_chunk_size_bounds.py +147 -0
  222. xpcsjax-0.1.0/tests/optimization/test_config_no_fourier.py +51 -0
  223. xpcsjax-0.1.0/tests/optimization/test_debug_audit_2026_06_17.py +124 -0
  224. xpcsjax-0.1.0/tests/optimization/test_escape_disabled_hint.py +78 -0
  225. xpcsjax-0.1.0/tests/optimization/test_escape_mode_routing.py +43 -0
  226. xpcsjax-0.1.0/tests/optimization/test_explicit_averaged_mode_parity.py +127 -0
  227. xpcsjax-0.1.0/tests/optimization/test_fourier_reparam_removed.py +38 -0
  228. xpcsjax-0.1.0/tests/optimization/test_global_escape_contract.py +49 -0
  229. xpcsjax-0.1.0/tests/optimization/test_global_escape_finite_guard.py +34 -0
  230. xpcsjax-0.1.0/tests/optimization/test_gradient_collapse_callback.py +103 -0
  231. xpcsjax-0.1.0/tests/optimization/test_gradient_diagnostics.py +159 -0
  232. xpcsjax-0.1.0/tests/optimization/test_gradient_monitor.py +242 -0
  233. xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes.py +218 -0
  234. xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_diagnostics.py +170 -0
  235. xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_seed.py +190 -0
  236. xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_warmstart_auto_skip.py +194 -0
  237. xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_warmstart_success_gate.py +231 -0
  238. xpcsjax-0.1.0/tests/optimization/test_heterodyne_completion_layout.py +71 -0
  239. xpcsjax-0.1.0/tests/optimization/test_heterodyne_config.py +329 -0
  240. xpcsjax-0.1.0/tests/optimization/test_heterodyne_config_no_fourier.py +72 -0
  241. xpcsjax-0.1.0/tests/optimization/test_heterodyne_constant_mode.py +406 -0
  242. xpcsjax-0.1.0/tests/optimization/test_heterodyne_data_prep.py +116 -0
  243. xpcsjax-0.1.0/tests/optimization/test_heterodyne_hybrid_streaming.py +1864 -0
  244. xpcsjax-0.1.0/tests/optimization/test_heterodyne_individual_joint.py +123 -0
  245. xpcsjax-0.1.0/tests/optimization/test_heterodyne_joint_escapes.py +300 -0
  246. xpcsjax-0.1.0/tests/optimization/test_heterodyne_joint_problem.py +46 -0
  247. xpcsjax-0.1.0/tests/optimization/test_heterodyne_memory_adapter.py +263 -0
  248. xpcsjax-0.1.0/tests/optimization/test_heterodyne_modes.py +152 -0
  249. xpcsjax-0.1.0/tests/optimization/test_heterodyne_multistart.py +268 -0
  250. xpcsjax-0.1.0/tests/optimization/test_heterodyne_result_builder.py +329 -0
  251. xpcsjax-0.1.0/tests/optimization/test_heterodyne_results.py +104 -0
  252. xpcsjax-0.1.0/tests/optimization/test_heterodyne_return_shape.py +594 -0
  253. xpcsjax-0.1.0/tests/optimization/test_heterodyne_strategy_routing.py +376 -0
  254. xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratification_config.py +258 -0
  255. xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_anti_degeneracy_parity.py +306 -0
  256. xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_execute_layers.py +278 -0
  257. xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_ls.py +1049 -0
  258. xpcsjax-0.1.0/tests/optimization/test_hierarchical.py +183 -0
  259. xpcsjax-0.1.0/tests/optimization/test_iteration_callback_seam.py +202 -0
  260. xpcsjax-0.1.0/tests/optimization/test_jacobian.py +122 -0
  261. xpcsjax-0.1.0/tests/optimization/test_joint_ssr_floor.py +537 -0
  262. xpcsjax-0.1.0/tests/optimization/test_l2_warmstart_log_disambiguation.py +126 -0
  263. xpcsjax-0.1.0/tests/optimization/test_l3_boundary_mapper.py +30 -0
  264. xpcsjax-0.1.0/tests/optimization/test_l4_callback_layout.py +71 -0
  265. xpcsjax-0.1.0/tests/optimization/test_l4_callback_observational.py +165 -0
  266. xpcsjax-0.1.0/tests/optimization/test_laminar_mode_banners.py +216 -0
  267. xpcsjax-0.1.0/tests/optimization/test_laminar_streaming_diag.py +172 -0
  268. xpcsjax-0.1.0/tests/optimization/test_layer5_gating.py +94 -0
  269. xpcsjax-0.1.0/tests/optimization/test_layer_gate_wiring.py +69 -0
  270. xpcsjax-0.1.0/tests/optimization/test_memory_concurrency_aware.py +206 -0
  271. xpcsjax-0.1.0/tests/optimization/test_memory_routing.py +93 -0
  272. xpcsjax-0.1.0/tests/optimization/test_model_adapter.py +137 -0
  273. xpcsjax-0.1.0/tests/optimization/test_multistart.py +372 -0
  274. xpcsjax-0.1.0/tests/optimization/test_nlsq_support_modules.py +280 -0
  275. xpcsjax-0.1.0/tests/optimization/test_parallel_accumulator.py +378 -0
  276. xpcsjax-0.1.0/tests/optimization/test_parameter_utils.py +284 -0
  277. xpcsjax-0.1.0/tests/optimization/test_per_angle_mode_resolver.py +67 -0
  278. xpcsjax-0.1.0/tests/optimization/test_per_angle_scaling_plan.py +217 -0
  279. xpcsjax-0.1.0/tests/optimization/test_per_angle_scaling_roundtrip.py +31 -0
  280. xpcsjax-0.1.0/tests/optimization/test_phase5_dof_semantics.py +53 -0
  281. xpcsjax-0.1.0/tests/optimization/test_phase5_expand_back.py +49 -0
  282. xpcsjax-0.1.0/tests/optimization/test_phase5_model_function_modes.py +88 -0
  283. xpcsjax-0.1.0/tests/optimization/test_phase5_no_crash_lengths.py +55 -0
  284. xpcsjax-0.1.0/tests/optimization/test_phase5_quantile_grid.py +36 -0
  285. xpcsjax-0.1.0/tests/optimization/test_phase5_standard_resolver.py +92 -0
  286. xpcsjax-0.1.0/tests/optimization/test_phase5_vector_build.py +41 -0
  287. xpcsjax-0.1.0/tests/optimization/test_pointwise_evaluator_seam.py +196 -0
  288. xpcsjax-0.1.0/tests/optimization/test_quality_gate_fixes.py +122 -0
  289. xpcsjax-0.1.0/tests/optimization/test_recovery_and_numerical.py +184 -0
  290. xpcsjax-0.1.0/tests/optimization/test_result_accessors.py +54 -0
  291. xpcsjax-0.1.0/tests/optimization/test_result_builder.py +43 -0
  292. xpcsjax-0.1.0/tests/optimization/test_result_quality_invariant.py +54 -0
  293. xpcsjax-0.1.0/tests/optimization/test_shear_weighting.py +231 -0
  294. xpcsjax-0.1.0/tests/optimization/test_static_individual_invariant.py +312 -0
  295. xpcsjax-0.1.0/tests/optimization/test_strategy_chunking.py +261 -0
  296. xpcsjax-0.1.0/tests/optimization/test_strategy_executors.py +297 -0
  297. xpcsjax-0.1.0/tests/optimization/test_strategy_residual.py +218 -0
  298. xpcsjax-0.1.0/tests/optimization/test_strategy_residual_jit.py +209 -0
  299. xpcsjax-0.1.0/tests/optimization/test_stratified_max_iter_grading.py +111 -0
  300. xpcsjax-0.1.0/tests/optimization/test_streaming_smoke.py +187 -0
  301. xpcsjax-0.1.0/tests/optimization/test_transforms.py +336 -0
  302. xpcsjax-0.1.0/tests/optimization/test_validation.py +311 -0
  303. xpcsjax-0.1.0/tests/optimization/test_validation_branches.py +260 -0
  304. xpcsjax-0.1.0/tests/parity/__init__.py +0 -0
  305. xpcsjax-0.1.0/tests/parity/_golden/laminar_flow_end_to_end.npz +0 -0
  306. xpcsjax-0.1.0/tests/parity/_golden/stratified_residual_jit.npz +0 -0
  307. xpcsjax-0.1.0/tests/parity/_golden_util.py +51 -0
  308. xpcsjax-0.1.0/tests/parity/_heterodyne_layout_oracle.py +98 -0
  309. xpcsjax-0.1.0/tests/parity/conftest.py +79 -0
  310. xpcsjax-0.1.0/tests/parity/test_anti_degeneracy_diagnostics_parity.py +58 -0
  311. xpcsjax-0.1.0/tests/parity/test_codex_review_fixes.py +276 -0
  312. xpcsjax-0.1.0/tests/parity/test_defense_layers.py +387 -0
  313. xpcsjax-0.1.0/tests/parity/test_docs_no_fourier.py +67 -0
  314. xpcsjax-0.1.0/tests/parity/test_engine_heterodyne_fit_parity.py +592 -0
  315. xpcsjax-0.1.0/tests/parity/test_engine_heterodyne_routing.py +598 -0
  316. xpcsjax-0.1.0/tests/parity/test_engine_route_bugfixes.py +332 -0
  317. xpcsjax-0.1.0/tests/parity/test_engine_route_result_contract.py +282 -0
  318. xpcsjax-0.1.0/tests/parity/test_fourier_teardown_grep_zero.py +56 -0
  319. xpcsjax-0.1.0/tests/parity/test_heterodyne_scaling_first_layout.py +190 -0
  320. xpcsjax-0.1.0/tests/parity/test_homodyne_engine_preservation.py +496 -0
  321. xpcsjax-0.1.0/tests/parity/test_iteration_seam_parity.py +23 -0
  322. xpcsjax-0.1.0/tests/parity/test_l1_rename.py +36 -0
  323. xpcsjax-0.1.0/tests/parity/test_l4_per_iteration_parity.py +206 -0
  324. xpcsjax-0.1.0/tests/parity/test_laminar_execute_layers.py +197 -0
  325. xpcsjax-0.1.0/tests/parity/test_laminar_no_worse_phase6.py +120 -0
  326. xpcsjax-0.1.0/tests/parity/test_layer_activation_matrix.py +174 -0
  327. xpcsjax-0.1.0/tests/parity/test_mode_taxonomy.py +88 -0
  328. xpcsjax-0.1.0/tests/parity/test_no_scipy_least_squares.py +157 -0
  329. xpcsjax-0.1.0/tests/parity/test_phase5_default_no_worse.py +85 -0
  330. xpcsjax-0.1.0/tests/parity/test_pointwise_joint_parity.py +129 -0
  331. xpcsjax-0.1.0/tests/property/__init__.py +0 -0
  332. xpcsjax-0.1.0/tests/property/test_diagonal_correction.py +61 -0
  333. xpcsjax-0.1.0/tests/property/test_parameter_invariants.py +121 -0
  334. xpcsjax-0.1.0/tests/runtime/__init__.py +0 -0
  335. xpcsjax-0.1.0/tests/runtime/test_device_logging.py +57 -0
  336. xpcsjax-0.1.0/tests/runtime/test_runtime_shell.py +76 -0
  337. xpcsjax-0.1.0/tests/runtime/test_system_validator.py +228 -0
  338. xpcsjax-0.1.0/tests/service/__init__.py +0 -0
  339. xpcsjax-0.1.0/tests/service/test_config_service.py +65 -0
  340. xpcsjax-0.1.0/tests/service/test_config_validate.py +62 -0
  341. xpcsjax-0.1.0/tests/service/test_data_service.py +70 -0
  342. xpcsjax-0.1.0/tests/service/test_events.py +74 -0
  343. xpcsjax-0.1.0/tests/service/test_fit_overrides.py +59 -0
  344. xpcsjax-0.1.0/tests/service/test_persist.py +76 -0
  345. xpcsjax-0.1.0/tests/service/test_plots_service.py +50 -0
  346. xpcsjax-0.1.0/tests/service/test_run_fit.py +71 -0
  347. xpcsjax-0.1.0/tests/test_debug_audit_2026_06_18.py +272 -0
  348. xpcsjax-0.1.0/tests/test_debug_audit_regressions.py +164 -0
  349. xpcsjax-0.1.0/tests/test_io.py +293 -0
  350. xpcsjax-0.1.0/tests/test_lazy_imports.py +98 -0
  351. xpcsjax-0.1.0/tests/test_logging.py +584 -0
  352. xpcsjax-0.1.0/tests/test_logging_primitives.py +226 -0
  353. xpcsjax-0.1.0/tests/test_logging_quality_gate.py +397 -0
  354. xpcsjax-0.1.0/tests/test_logging_wiring_phase1b.py +122 -0
  355. xpcsjax-0.1.0/tests/viz/__init__.py +0 -0
  356. xpcsjax-0.1.0/tests/viz/baseline/plot_nlsq_fit_baseline.png +0 -0
  357. xpcsjax-0.1.0/tests/viz/baseline/plot_residual_map_baseline.png +0 -0
  358. xpcsjax-0.1.0/tests/viz/baseline/plot_simulated_data_baseline.png +0 -0
  359. xpcsjax-0.1.0/tests/viz/conftest.py +129 -0
  360. xpcsjax-0.1.0/tests/viz/test_artifacts.py +180 -0
  361. xpcsjax-0.1.0/tests/viz/test_color_resolution.py +45 -0
  362. xpcsjax-0.1.0/tests/viz/test_diagnostics.py +41 -0
  363. xpcsjax-0.1.0/tests/viz/test_low_level_plots.py +400 -0
  364. xpcsjax-0.1.0/tests/viz/test_orchestrator.py +383 -0
  365. xpcsjax-0.1.0/tests/viz/test_review_regressions.py +876 -0
  366. xpcsjax-0.1.0/tests/viz/test_save_path_validation.py +101 -0
  367. xpcsjax-0.1.0/uv.lock +4826 -0
  368. xpcsjax-0.1.0/xpcsjax/__init__.py +166 -0
  369. xpcsjax-0.1.0/xpcsjax/cli/__init__.py +78 -0
  370. xpcsjax-0.1.0/xpcsjax/cli/args_parser.py +442 -0
  371. xpcsjax-0.1.0/xpcsjax/cli/commands.py +181 -0
  372. xpcsjax-0.1.0/xpcsjax/cli/config_generator.py +218 -0
  373. xpcsjax-0.1.0/xpcsjax/cli/config_handling.py +327 -0
  374. xpcsjax-0.1.0/xpcsjax/cli/config_template.py +375 -0
  375. xpcsjax-0.1.0/xpcsjax/cli/data_pipeline.py +49 -0
  376. xpcsjax-0.1.0/xpcsjax/cli/main.py +195 -0
  377. xpcsjax-0.1.0/xpcsjax/cli/optimization_runner.py +329 -0
  378. xpcsjax-0.1.0/xpcsjax/cli/plot_backend.py +82 -0
  379. xpcsjax-0.1.0/xpcsjax/cli/plot_dispatch.py +181 -0
  380. xpcsjax-0.1.0/xpcsjax/cli/plot_families/__init__.py +1 -0
  381. xpcsjax-0.1.0/xpcsjax/cli/plot_families/experimental.py +69 -0
  382. xpcsjax-0.1.0/xpcsjax/cli/plot_families/postfit.py +176 -0
  383. xpcsjax-0.1.0/xpcsjax/cli/plot_families/simulated.py +276 -0
  384. xpcsjax-0.1.0/xpcsjax/cli/result_saving.py +19 -0
  385. xpcsjax-0.1.0/xpcsjax/cli/xla_config.py +192 -0
  386. xpcsjax-0.1.0/xpcsjax/config/__init__.py +94 -0
  387. xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_manager.py +676 -0
  388. xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_names.py +118 -0
  389. xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_space.py +561 -0
  390. xpcsjax-0.1.0/xpcsjax/config/heterodyne_physics_validators.py +577 -0
  391. xpcsjax-0.1.0/xpcsjax/config/manager.py +1428 -0
  392. xpcsjax-0.1.0/xpcsjax/config/parameter_manager.py +824 -0
  393. xpcsjax-0.1.0/xpcsjax/config/parameter_names.py +319 -0
  394. xpcsjax-0.1.0/xpcsjax/config/parameter_registry.py +924 -0
  395. xpcsjax-0.1.0/xpcsjax/config/parameter_space.py +479 -0
  396. xpcsjax-0.1.0/xpcsjax/config/physics_validators.py +394 -0
  397. xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_laminar_flow.yaml +875 -0
  398. xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_static_anisotropic.yaml +1179 -0
  399. xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_static_isotropic.yaml +662 -0
  400. xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_two_component.yaml +982 -0
  401. xpcsjax-0.1.0/xpcsjax/config/types.py +426 -0
  402. xpcsjax-0.1.0/xpcsjax/core/__init__.py +21 -0
  403. xpcsjax-0.1.0/xpcsjax/core/diagonal_correction.py +562 -0
  404. xpcsjax-0.1.0/xpcsjax/core/fitting.py +129 -0
  405. xpcsjax-0.1.0/xpcsjax/core/heterodyne_jax_backend.py +653 -0
  406. xpcsjax-0.1.0/xpcsjax/core/heterodyne_model.py +327 -0
  407. xpcsjax-0.1.0/xpcsjax/core/heterodyne_model_stateful.py +471 -0
  408. xpcsjax-0.1.0/xpcsjax/core/heterodyne_models.py +489 -0
  409. xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_factors.py +230 -0
  410. xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_kernel.py +442 -0
  411. xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_utils.py +419 -0
  412. xpcsjax-0.1.0/xpcsjax/core/heterodyne_scaling_utils.py +761 -0
  413. xpcsjax-0.1.0/xpcsjax/core/homodyne_model.py +379 -0
  414. xpcsjax-0.1.0/xpcsjax/core/jax_backend.py +1846 -0
  415. xpcsjax-0.1.0/xpcsjax/core/math_primitives.py +57 -0
  416. xpcsjax-0.1.0/xpcsjax/core/model_mixins.py +519 -0
  417. xpcsjax-0.1.0/xpcsjax/core/models.py +716 -0
  418. xpcsjax-0.1.0/xpcsjax/core/physics.py +598 -0
  419. xpcsjax-0.1.0/xpcsjax/core/physics_factors.py +369 -0
  420. xpcsjax-0.1.0/xpcsjax/core/physics_nlsq.py +478 -0
  421. xpcsjax-0.1.0/xpcsjax/core/physics_utils.py +356 -0
  422. xpcsjax-0.1.0/xpcsjax/data/__init__.py +304 -0
  423. xpcsjax-0.1.0/xpcsjax/data/angle_filtering.py +417 -0
  424. xpcsjax-0.1.0/xpcsjax/data/config.py +780 -0
  425. xpcsjax-0.1.0/xpcsjax/data/dataset.py +82 -0
  426. xpcsjax-0.1.0/xpcsjax/data/filtering_utils.py +664 -0
  427. xpcsjax-0.1.0/xpcsjax/data/memory_manager.py +1593 -0
  428. xpcsjax-0.1.0/xpcsjax/data/optimization.py +1152 -0
  429. xpcsjax-0.1.0/xpcsjax/data/performance_engine.py +1942 -0
  430. xpcsjax-0.1.0/xpcsjax/data/phi_filtering.py +442 -0
  431. xpcsjax-0.1.0/xpcsjax/data/preprocessing.py +1200 -0
  432. xpcsjax-0.1.0/xpcsjax/data/quality_controller.py +2094 -0
  433. xpcsjax-0.1.0/xpcsjax/data/types.py +48 -0
  434. xpcsjax-0.1.0/xpcsjax/data/validation.py +1287 -0
  435. xpcsjax-0.1.0/xpcsjax/data/validators.py +328 -0
  436. xpcsjax-0.1.0/xpcsjax/data/xpcs_loader.py +2741 -0
  437. xpcsjax-0.1.0/xpcsjax/device/__init__.py +276 -0
  438. xpcsjax-0.1.0/xpcsjax/device/config.py +265 -0
  439. xpcsjax-0.1.0/xpcsjax/device/cpu.py +588 -0
  440. xpcsjax-0.1.0/xpcsjax/gui/__init__.py +8 -0
  441. xpcsjax-0.1.0/xpcsjax/gui/app.py +109 -0
  442. xpcsjax-0.1.0/xpcsjax/gui/controllers/__init__.py +3 -0
  443. xpcsjax-0.1.0/xpcsjax/gui/controllers/fit_queue.py +252 -0
  444. xpcsjax-0.1.0/xpcsjax/gui/data_inspect.py +117 -0
  445. xpcsjax-0.1.0/xpcsjax/gui/error_presenter.py +47 -0
  446. xpcsjax-0.1.0/xpcsjax/gui/export.py +80 -0
  447. xpcsjax-0.1.0/xpcsjax/gui/ipc/__init__.py +3 -0
  448. xpcsjax-0.1.0/xpcsjax/gui/ipc/diagnostics.py +59 -0
  449. xpcsjax-0.1.0/xpcsjax/gui/ipc/emitter.py +53 -0
  450. xpcsjax-0.1.0/xpcsjax/gui/ipc/handle.py +226 -0
  451. xpcsjax-0.1.0/xpcsjax/gui/ipc/job.py +26 -0
  452. xpcsjax-0.1.0/xpcsjax/gui/ipc/log_capture.py +52 -0
  453. xpcsjax-0.1.0/xpcsjax/gui/ipc/worker.py +87 -0
  454. xpcsjax-0.1.0/xpcsjax/gui/project/__init__.py +3 -0
  455. xpcsjax-0.1.0/xpcsjax/gui/project/model.py +105 -0
  456. xpcsjax-0.1.0/xpcsjax/gui/project/persist.py +111 -0
  457. xpcsjax-0.1.0/xpcsjax/gui/project/tree_model.py +83 -0
  458. xpcsjax-0.1.0/xpcsjax/gui/result_loader.py +91 -0
  459. xpcsjax-0.1.0/xpcsjax/gui/theme.py +438 -0
  460. xpcsjax-0.1.0/xpcsjax/gui/views/__init__.py +3 -0
  461. xpcsjax-0.1.0/xpcsjax/gui/views/config_dialogs.py +302 -0
  462. xpcsjax-0.1.0/xpcsjax/gui/views/error_dialog.py +41 -0
  463. xpcsjax-0.1.0/xpcsjax/gui/views/inspector.py +122 -0
  464. xpcsjax-0.1.0/xpcsjax/gui/views/main_window.py +592 -0
  465. xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/__init__.py +1 -0
  466. xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/project_dialog_handler.py +148 -0
  467. xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/result_presenter.py +110 -0
  468. xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/run_controller.py +111 -0
  469. xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/status_manager.py +54 -0
  470. xpcsjax-0.1.0/xpcsjax/gui/views/plots/__init__.py +1 -0
  471. xpcsjax-0.1.0/xpcsjax/gui/views/plots/grid.py +245 -0
  472. xpcsjax-0.1.0/xpcsjax/gui/views/plots/helpers.py +92 -0
  473. xpcsjax-0.1.0/xpcsjax/gui/views/plots/maps.py +157 -0
  474. xpcsjax-0.1.0/xpcsjax/gui/views/plots/residuals.py +102 -0
  475. xpcsjax-0.1.0/xpcsjax/gui/views/plots/squares.py +58 -0
  476. xpcsjax-0.1.0/xpcsjax/gui/views/plots_view.py +31 -0
  477. xpcsjax-0.1.0/xpcsjax/gui/views/project_panel.py +97 -0
  478. xpcsjax-0.1.0/xpcsjax/gui/views/raster.py +45 -0
  479. xpcsjax-0.1.0/xpcsjax/gui/viz_bundle.py +62 -0
  480. xpcsjax-0.1.0/xpcsjax/io/__init__.py +20 -0
  481. xpcsjax-0.1.0/xpcsjax/io/json_utils.py +144 -0
  482. xpcsjax-0.1.0/xpcsjax/io/nlsq_writers.py +232 -0
  483. xpcsjax-0.1.0/xpcsjax/optimization/__init__.py +129 -0
  484. xpcsjax-0.1.0/xpcsjax/optimization/batch_statistics.py +186 -0
  485. xpcsjax-0.1.0/xpcsjax/optimization/exceptions.py +262 -0
  486. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/__init__.py +1178 -0
  487. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adapter.py +1439 -0
  488. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adapter_base.py +364 -0
  489. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adaptive_regularization.py +527 -0
  490. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_controller.py +1054 -0
  491. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_diagnostics.py +62 -0
  492. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_logging.py +117 -0
  493. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/cmaes_wrapper.py +1246 -0
  494. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/config.py +1179 -0
  495. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/core.py +2684 -0
  496. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/data_prep.py +377 -0
  497. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/fallback_chain.py +455 -0
  498. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/fit_computation.py +539 -0
  499. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/gradient_diagnostics.py +267 -0
  500. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/gradient_monitor.py +634 -0
  501. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_adapter.py +935 -0
  502. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_adapter_base.py +80 -0
  503. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_config.py +1314 -0
  504. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_constant_mode.py +518 -0
  505. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_core.py +4606 -0
  506. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_data_prep.py +349 -0
  507. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_engine_route.py +745 -0
  508. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_logging.py +347 -0
  509. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_memory.py +340 -0
  510. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_multistart.py +142 -0
  511. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_result_builder.py +747 -0
  512. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_results.py +217 -0
  513. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_stratified_data.py +229 -0
  514. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_stratified_ls.py +1292 -0
  515. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_views.py +109 -0
  516. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/hierarchical.py +733 -0
  517. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/jacobian.py +244 -0
  518. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/memory.py +516 -0
  519. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/model_adapter.py +231 -0
  520. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/multistart.py +1482 -0
  521. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parallel_accumulator.py +773 -0
  522. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parameter_index_mapper.py +318 -0
  523. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parameter_utils.py +587 -0
  524. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/per_angle_mode.py +392 -0
  525. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/progress.py +534 -0
  526. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/recovery.py +529 -0
  527. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/result_builder.py +453 -0
  528. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/results.py +326 -0
  529. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/shear_weighting.py +466 -0
  530. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/__init__.py +65 -0
  531. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/chunking.py +1233 -0
  532. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/executors.py +489 -0
  533. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/heterodyne_hybrid_streaming.py +995 -0
  534. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/hybrid_streaming.py +2039 -0
  535. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/out_of_core.py +604 -0
  536. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/residual.py +848 -0
  537. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/residual_jit.py +644 -0
  538. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/sequential.py +1010 -0
  539. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/stratified_ls.py +1015 -0
  540. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/transforms.py +491 -0
  541. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/validation.py +777 -0
  542. xpcsjax-0.1.0/xpcsjax/optimization/nlsq/wrapper.py +4174 -0
  543. xpcsjax-0.1.0/xpcsjax/optimization/numerical_validation.py +251 -0
  544. xpcsjax-0.1.0/xpcsjax/optimization/recovery_strategies.py +209 -0
  545. xpcsjax-0.1.0/xpcsjax/post_install.py +952 -0
  546. xpcsjax-0.1.0/xpcsjax/runtime/__init__.py +34 -0
  547. xpcsjax-0.1.0/xpcsjax/runtime/shell/__init__.py +49 -0
  548. xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/__init__.py +1 -0
  549. xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/xla_config.bash +121 -0
  550. xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/xla_config.fish +116 -0
  551. xpcsjax-0.1.0/xpcsjax/runtime/shell/completion.sh +228 -0
  552. xpcsjax-0.1.0/xpcsjax/runtime/shell/completion_spec.py +99 -0
  553. xpcsjax-0.1.0/xpcsjax/runtime/shell/generate_completion.py +246 -0
  554. xpcsjax-0.1.0/xpcsjax/runtime/utils/__init__.py +17 -0
  555. xpcsjax-0.1.0/xpcsjax/runtime/utils/system_validator.py +702 -0
  556. xpcsjax-0.1.0/xpcsjax/service/__init__.py +20 -0
  557. xpcsjax-0.1.0/xpcsjax/service/config.py +209 -0
  558. xpcsjax-0.1.0/xpcsjax/service/data.py +226 -0
  559. xpcsjax-0.1.0/xpcsjax/service/events.py +107 -0
  560. xpcsjax-0.1.0/xpcsjax/service/fit.py +196 -0
  561. xpcsjax-0.1.0/xpcsjax/service/persist.py +412 -0
  562. xpcsjax-0.1.0/xpcsjax/service/plots.py +100 -0
  563. xpcsjax-0.1.0/xpcsjax/uninstall_scripts.py +634 -0
  564. xpcsjax-0.1.0/xpcsjax/utils/__init__.py +34 -0
  565. xpcsjax-0.1.0/xpcsjax/utils/async_io.py +337 -0
  566. xpcsjax-0.1.0/xpcsjax/utils/logging.py +1755 -0
  567. xpcsjax-0.1.0/xpcsjax/utils/path_validation.py +307 -0
  568. xpcsjax-0.1.0/xpcsjax/viz/__init__.py +62 -0
  569. xpcsjax-0.1.0/xpcsjax/viz/datashader_backend.py +374 -0
  570. xpcsjax-0.1.0/xpcsjax/viz/diagnostics.py +139 -0
  571. xpcsjax-0.1.0/xpcsjax/viz/nlsq_plots.py +1827 -0
@@ -0,0 +1,12 @@
1
+ *.pkl filter=lfs diff=lfs merge=lfs -text
2
+ *.hdf5 filter=lfs diff=lfs merge=lfs -text
3
+ *.h5 filter=lfs diff=lfs merge=lfs -text
4
+ *.npz filter=lfs diff=lfs merge=lfs -text
5
+ *.npy filter=lfs diff=lfs merge=lfs -text
6
+
7
+ # Tiny deterministic parity golden fixtures (KB-scale) are committed as regular
8
+ # git blobs, NOT LFS: CI's actions/checkout has no `lfs: true`, so LFS pointers
9
+ # arrive in the work tree and np.load fails with UnpicklingError. Override the
10
+ # blanket *.npz/*.npy LFS rules above for this dir only. Keep `-text` (binary)
11
+ # so EOL normalization never corrupts the .npz zip archives.
12
+ tests/parity/_golden/** !filter !diff !merge -text
@@ -0,0 +1,59 @@
1
+ name: "xpcsjax CodeQL config"
2
+
3
+ # Keep the security-and-quality suite (security rules + maintainability rules),
4
+ # but filter out the maintainability rules that are either (a) already owned and
5
+ # enforced by ruff / mypy in CI, or (b) structural false positives against
6
+ # xpcsjax's intentional architecture (lazy ``__getattr__`` import-cycle breaking,
7
+ # optional-dependency import guards, ``typing.Protocol`` stub bodies).
8
+ #
9
+ # The genuine *security* rules and the real-bug correctness rules
10
+ # (py/uninitialized-local-variable, py/call/*, py/comparison-of-identical-expressions,
11
+ # py/unreachable-statement, py/empty-except, py/multiple-definition,
12
+ # py/non-iterable-in-for-loop, ...) stay ACTIVE so future regressions are caught.
13
+ queries:
14
+ - uses: security-and-quality
15
+
16
+ # Test fixtures and Sphinx docs are not shipped product code; security-and-quality
17
+ # maintainability scanning of them is pure noise (duplicate imports in fixtures,
18
+ # intentionally-unreachable test branches, Sphinx config globals read by Sphinx).
19
+ paths-ignore:
20
+ - tests
21
+ - docs
22
+
23
+ query-filters:
24
+ # --- Import / local-variable hygiene: owned by ruff (F401, F811, F841, I) and
25
+ # enforced by `make verify` / `make lint`. CodeQL only adds false positives
26
+ # here because its flow analysis flags the optional-import guard idiom
27
+ # (`try: import X; HAS_X = True / except ImportError: X = None`) and
28
+ # redefinition shadowing that Pyflakes intentionally allows.
29
+ - exclude:
30
+ id: py/unused-import
31
+ - exclude:
32
+ id: py/unused-local-variable
33
+ - exclude:
34
+ id: py/repeated-import
35
+ - exclude:
36
+ id: py/import-and-import-from
37
+ - exclude:
38
+ id: py/import-own-module
39
+ # --- Unused module-level globals: dominated by false positives on cross-module
40
+ # data tables / singletons / TypeVars (used via `from module import X`) and
41
+ # on optional-dependency availability flags (HAS_JAX, HAS_NUMPY, ...).
42
+ - exclude:
43
+ id: py/unused-global-variable
44
+ # --- Cyclic imports: xpcsjax's public API is lazy-loaded via a module-level
45
+ # `__getattr__` and `TYPE_CHECKING` forward refs specifically to break these
46
+ # cycles. The "may not be defined" warning never materializes at runtime.
47
+ - exclude:
48
+ id: py/cyclic-import
49
+ - exclude:
50
+ id: py/unsafe-cyclic-import
51
+ # --- `def method(self) -> T: ...` Protocol / ABC stub bodies. The `...` Ellipsis
52
+ # expression statement is the idiomatic stub body (PEP 544); flagging it as
53
+ # "no effect" is a false positive.
54
+ - exclude:
55
+ id: py/ineffectual-statement
56
+ # --- Single-call lambdas: a style preference outside ruff's enforced set; low
57
+ # signal and overlaps with intentional closures that reorder/partial args.
58
+ - exclude:
59
+ id: py/unnecessary-lambda
@@ -0,0 +1,86 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+
7
+ # Cancel superseded runs on the same ref to save runner minutes.
8
+ concurrency:
9
+ group: ci-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ # Platform-independent checks run once (fast) and gate the expensive matrix.
17
+ lint:
18
+ name: Lint, types, audit
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
22
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
23
+ with:
24
+ python-version: "3.12"
25
+ - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
26
+ with:
27
+ enable-cache: true
28
+ - name: Sync deps
29
+ run: uv sync --extra dev
30
+ - name: Export locked requirements for audit
31
+ # uv run pip-audit by itself audits the active venv; exporting first
32
+ # makes the audited set explicit and lets pip-audit cross-reference
33
+ # against the uv.lock-pinned versions rather than any installed state.
34
+ run: uv export --format requirements-txt --no-hashes -o requirements-audit.txt
35
+ - name: Dependency vulnerability scan
36
+ run: uv run pip-audit --requirement requirements-audit.txt --desc
37
+ - name: Lint
38
+ run: uv run ruff check .
39
+ - name: Type check
40
+ run: uv run mypy xpcsjax
41
+
42
+ test:
43
+ name: Test (${{ matrix.os }}, py${{ matrix.python-version }})
44
+ needs: lint
45
+ runs-on: ${{ matrix.os }}
46
+ # py3.14 is informational: jax/PySide6 wheels may not yet exist for a
47
+ # freshly-released interpreter, so a 3.14 failure must not fail the run.
48
+ # Drop this and the 3.14 matrix entry once 3.14 is a supported target.
49
+ continue-on-error: ${{ matrix.python-version == '3.14' }}
50
+ strategy:
51
+ fail-fast: false
52
+ matrix:
53
+ os: [ubuntu-latest, macos-latest, windows-latest]
54
+ python-version: ["3.12", "3.13", "3.14"]
55
+ steps:
56
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
57
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
58
+ with:
59
+ python-version: ${{ matrix.python-version }}
60
+ - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
61
+ with:
62
+ enable-cache: true
63
+ - name: Install Qt system libraries (headless PySide6, Linux only)
64
+ # PySide6 (pulled in via the pytest-qt plugin) links libEGL/libGL at
65
+ # import time, which the bare ubuntu runner lacks -> pytest aborts with
66
+ # `ImportError: libEGL.so.1`. The minimal runtime set lets Qt run under
67
+ # the offscreen platform (QT_QPA_PLATFORM below). macOS and Windows
68
+ # runners ship the system GL stack and the PySide6 wheels bundle Qt, so
69
+ # no equivalent install is needed there.
70
+ if: runner.os == 'Linux'
71
+ run: |
72
+ sudo apt-get update
73
+ sudo apt-get install -y --no-install-recommends \
74
+ libegl1 libgl1 libxkbcommon0 libdbus-1-3
75
+ - name: Sync deps
76
+ run: uv sync --extra dev --python ${{ matrix.python-version }}
77
+ - name: Test
78
+ env:
79
+ JAX_ENABLE_X64: "1"
80
+ QT_QPA_PLATFORM: offscreen
81
+ # NOTE: do NOT set XPCSJAX_RUN_CHARACTERIZATION here. That gate runs a
82
+ # LIVE fit against the upstream `homodyne` package using datasets at
83
+ # maintainer-local absolute paths (/home/.../Projects/data/...), so it
84
+ # only runs on a maintainer machine and self-skips in CI by design.
85
+ # The portable heterodyne parity + cross-mode suites run unconditionally.
86
+ run: uv run pytest -v
@@ -0,0 +1,39 @@
1
+ name: CodeQL
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+ schedule:
8
+ # Weekly re-scan catches advisories published after the last code change.
9
+ - cron: "27 4 * * 1"
10
+
11
+ # Cancel superseded runs on the same ref.
12
+ concurrency:
13
+ group: codeql-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ analyze:
18
+ name: Analyze (python)
19
+ runs-on: ubuntu-latest
20
+ permissions:
21
+ security-events: write # upload SARIF results
22
+ contents: read
23
+ actions: read
24
+ steps:
25
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
26
+ - name: Initialize CodeQL
27
+ uses: github/codeql-action/init@84498526a009a99c875e83ef4821a8ba52de7c22 # codeql-bundle-v2.25.5
28
+ with:
29
+ languages: python
30
+ # Query suite, path scoping, and noise-rule filters live in the config
31
+ # file so they are reviewable in one place. The suite is still
32
+ # security-and-quality; the config filters out maintainability rules
33
+ # already owned by ruff/mypy or that are structural false positives
34
+ # against xpcsjax's lazy-import / optional-dependency architecture.
35
+ config-file: ./.github/codeql/codeql-config.yml
36
+ - name: Perform CodeQL Analysis
37
+ uses: github/codeql-action/analyze@84498526a009a99c875e83ef4821a8ba52de7c22 # codeql-bundle-v2.25.5
38
+ with:
39
+ category: "/language:python"
@@ -0,0 +1,42 @@
1
+ name: Docs
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+
8
+ concurrency:
9
+ group: docs-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ build:
17
+ name: Sphinx build (strict -W)
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21
+ - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
22
+ with:
23
+ python-version: "3.12"
24
+ - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
25
+ with:
26
+ enable-cache: true
27
+ - name: Install Qt system libraries (autodoc may import PySide6)
28
+ run: |
29
+ sudo apt-get update
30
+ sudo apt-get install -y --no-install-recommends \
31
+ libegl1 libgl1 libxkbcommon0 libdbus-1-3
32
+ - name: Sync docs deps
33
+ run: uv sync --extra docs
34
+ - name: Build docs (warnings are errors)
35
+ env:
36
+ QT_QPA_PLATFORM: offscreen
37
+ run: uv run sphinx-build -W -b html docs/source docs/_build/html
38
+ - name: Upload built HTML
39
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
40
+ with:
41
+ name: html-docs
42
+ path: docs/_build/html
@@ -0,0 +1,84 @@
1
+ name: Release
2
+
3
+ # Publish xpcsjax to PyPI when a GitHub Release is published.
4
+ #
5
+ # Authentication is PyPI Trusted Publishing (OIDC) -- there is NO API token
6
+ # secret. The `build` job runs the project's own build code with NO
7
+ # credentials; only the minimal `publish` job is granted the short-lived OIDC
8
+ # token (id-token: write) and runs in the protected `pypi` environment. This
9
+ # build/publish split follows the PyPA Trusted Publishing guidance so build
10
+ # code can never reach the publishing credential.
11
+ #
12
+ # One-time setup before the first run: register a Trusted Publisher on PyPI
13
+ # (https://pypi.org/manage/account/publishing/) with
14
+ # owner=imewei repository=xpcsjax workflow=release.yml environment=pypi
15
+ on:
16
+ release:
17
+ types: [published]
18
+ # Manual fallback (e.g. to publish a tag that predates this workflow, or to
19
+ # retry a failed upload). The version guard below is skipped for this path.
20
+ workflow_dispatch:
21
+
22
+ # Never cancel an in-flight publish; a half-cancelled upload is worse than a
23
+ # duplicate run (PyPI rejects re-uploads of an existing version idempotently).
24
+ concurrency:
25
+ group: release-${{ github.ref }}
26
+ cancel-in-progress: false
27
+
28
+ permissions:
29
+ contents: read
30
+
31
+ jobs:
32
+ build:
33
+ name: Build sdist + wheel
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
37
+ - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
38
+ with:
39
+ enable-cache: true
40
+ - name: Build sdist and wheel
41
+ run: uv build
42
+ - name: Verify package version matches the release tag
43
+ # Guard against publishing a build whose version disagrees with the tag
44
+ # that triggered the release (e.g. pyproject not bumped). Reads the
45
+ # version with stdlib tomllib -- no project install needed. Skipped on
46
+ # workflow_dispatch, where there is no release tag.
47
+ if: github.event_name == 'release'
48
+ run: |
49
+ pkg_version="$(python3 -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')"
50
+ tag="${GITHUB_REF_NAME#v}"
51
+ echo "package version: $pkg_version | release tag: $tag"
52
+ if [ "$pkg_version" != "$tag" ]; then
53
+ echo "::error::pyproject version '$pkg_version' does not match release tag '$tag'"
54
+ exit 1
55
+ fi
56
+ - name: Check distribution metadata
57
+ run: uvx twine check --strict dist/*
58
+ - name: Upload dist artifact
59
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
60
+ with:
61
+ name: dist
62
+ path: dist/
63
+ if-no-files-found: error
64
+
65
+ publish:
66
+ name: Publish to PyPI
67
+ needs: build
68
+ runs-on: ubuntu-latest
69
+ # The `pypi` environment is where the Trusted Publisher is registered on
70
+ # PyPI; add required reviewers / branch filters here to gate releases.
71
+ environment:
72
+ name: pypi
73
+ url: https://pypi.org/p/xpcsjax
74
+ permissions:
75
+ id-token: write # mint the OIDC token PyPI verifies (Trusted Publishing)
76
+ contents: read
77
+ steps:
78
+ - name: Download dist artifact
79
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
80
+ with:
81
+ name: dist
82
+ path: dist/
83
+ - name: Publish to PyPI
84
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
@@ -0,0 +1,342 @@
1
+ # ============================================================================
2
+ # xpcsjax .gitignore — derived from homodyne/heterodyne, NLSQ-only
3
+ # ============================================================================
4
+
5
+ # ----------------------------------------------------------------------------
6
+ # Python Bytecode & Compiled Files
7
+ # ----------------------------------------------------------------------------
8
+ __pycache__/
9
+ *.py[codz]
10
+ *$py.class
11
+ *.so
12
+ *.dylib
13
+ *.dll
14
+
15
+ # ----------------------------------------------------------------------------
16
+ # Distribution / Packaging
17
+ # ----------------------------------------------------------------------------
18
+ # Note: xpcsjax uses hatchling with a hard-coded version in pyproject.toml,
19
+ # so there is no auto-generated `xpcsjax/_version.py` (unlike homodyne /
20
+ # heterodyne, which use setuptools_scm). Do not add a _version.py rule.
21
+ .Python
22
+ build/
23
+ develop-eggs/
24
+ dist/
25
+ downloads/
26
+ eggs/
27
+ .eggs/
28
+ lib/
29
+ lib64/
30
+ parts/
31
+ sdist/
32
+ var/
33
+ wheels/
34
+ share/python-wheels/
35
+ *.egg-info/
36
+ .installed.cfg
37
+ *.egg
38
+ *.whl
39
+ MANIFEST
40
+
41
+ # ----------------------------------------------------------------------------
42
+ # Installer & Package Managers
43
+ # ----------------------------------------------------------------------------
44
+ pip-log.txt
45
+ pip-delete-this-directory.txt
46
+ .pypirc
47
+
48
+ # PyInstaller
49
+ *.manifest
50
+ *.spec
51
+
52
+ # Dependency management lockfiles (we commit uv.lock; ignore the others)
53
+ Pipfile.lock
54
+ poetry.lock
55
+ pdm.lock
56
+ .pdm-python
57
+ .pdm-build/
58
+ .pixi/
59
+ pixi.lock
60
+ __pypackages__/
61
+
62
+ # ----------------------------------------------------------------------------
63
+ # Virtual Environments
64
+ # ----------------------------------------------------------------------------
65
+ .env
66
+ .envrc
67
+ .venv
68
+ env/
69
+ venv/
70
+ ENV/
71
+ env.bak/
72
+ venv.bak/
73
+ .conda/
74
+ conda-env/
75
+
76
+ # ----------------------------------------------------------------------------
77
+ # Testing & Coverage
78
+ # ----------------------------------------------------------------------------
79
+ htmlcov/
80
+ .tox/
81
+ .nox/
82
+ .coverage
83
+ .coverage.*
84
+ nosetests.xml
85
+ coverage.xml
86
+ *.cover
87
+ *.py,cover
88
+ *.py.cover
89
+ .hypothesis/
90
+ .pytest_cache/
91
+ cover/
92
+ .benchmarks/
93
+ # Root-level perf-benchmark scratch (e.g. bench_*.py, baseline.json). Anchored
94
+ # with a leading slash so the committed tests/benchmarks/ suite stays tracked.
95
+ /benchmarks/
96
+ .test-runs/
97
+ test_report*/
98
+ test_reports/
99
+ test-results.xml
100
+ bandit*re*.json
101
+ pip_audit_report.json
102
+
103
+ # IMPORTANT: do NOT ignore tests/characterization/fixtures/ — those are the
104
+ # homodyne parity baselines and are the parity contract (see CLAUDE.md).
105
+
106
+ # ----------------------------------------------------------------------------
107
+ # Type Checkers, Linters & Caches
108
+ # ----------------------------------------------------------------------------
109
+ .mypy_cache/
110
+ .dmypy.json
111
+ dmypy.json
112
+ .pyre/
113
+ .pytype/
114
+ .ruff_cache/
115
+ .pylint_cache/
116
+ .nlsq_cache/
117
+ .cache/
118
+
119
+ # ----------------------------------------------------------------------------
120
+ # Documentation
121
+ # ----------------------------------------------------------------------------
122
+ # Sphinx is not configured in xpcsjax (docs/ holds design specs only).
123
+ # Keep these patterns for future Sphinx adoption.
124
+ docs/_build/
125
+ docs/build/
126
+ doc/build/
127
+ .doctrees/
128
+ *.doctree
129
+ docs/source/_autosummary/
130
+ docs/source/_generated/
131
+ docs/source/api/generated/
132
+ docs/superpowers/
133
+
134
+ # MkDocs
135
+ /site
136
+
137
+ # ----------------------------------------------------------------------------
138
+ # Jupyter / IPython / Marimo
139
+ # ----------------------------------------------------------------------------
140
+ .ipynb_checkpoints
141
+ *.ipynb_checkpoints/
142
+ */.ipynb_checkpoints/*
143
+ profile_default/
144
+ ipython_config.py
145
+ .jupyter/
146
+ marimo/_static/
147
+ marimo/_lsp/
148
+ __marimo__/
149
+
150
+ # ----------------------------------------------------------------------------
151
+ # IDEs & Editors
152
+ # ----------------------------------------------------------------------------
153
+ .idea/
154
+ .vscode/
155
+ *.code-workspace
156
+ .spyderproject
157
+ .spyproject
158
+ .ropeproject
159
+ *.swp
160
+ *.swo
161
+ \#*\#
162
+ .\#*
163
+ tempCodeRunnerFile.py
164
+
165
+ # ----------------------------------------------------------------------------
166
+ # AI-Powered Development Tools (state, caches, sessions)
167
+ # ----------------------------------------------------------------------------
168
+ .agent/
169
+ .agents/
170
+ .antigravitycli/
171
+ .claude/
172
+ .claude-progress.md
173
+ .claude-scratch
174
+ .code/
175
+ .codex/
176
+ .cursor/
177
+ .cursorignore
178
+ .cursorindexingignore
179
+ .gemini/
180
+ .remember/
181
+ .serena/
182
+ .specify/
183
+ .ultra-think/
184
+ .ultracode/
185
+ .abstra/
186
+ .firecrawl/
187
+ agent-os/
188
+
189
+ # AI assistant project memos
190
+ # ----------------------------------------------------------------------------
191
+ # Treated as local-only AI scratch — same policy as homodyne / heterodyne.
192
+ # Each developer maintains their own onboarding notes for their AI assistant
193
+ # of choice; nothing about these files is load-bearing for the project's
194
+ # build, tests, or distribution. To flip the policy and check one of these
195
+ # in (e.g. as a shared onboarding contract), remove the corresponding line.
196
+ AGENTS.md
197
+ CLAUDE.md
198
+ GEMINI.md
199
+ WARP.md
200
+
201
+ # Other AI-assistant notes that remain local-only
202
+ GROK.md
203
+ HERMES.md
204
+ OPENROUTER.md
205
+ codex.md
206
+
207
+ # Multi-model review outputs
208
+ three-brain-out/
209
+
210
+ # Git
211
+ .worktrees/
212
+
213
+ # ----------------------------------------------------------------------------
214
+ # Operating System
215
+ # ----------------------------------------------------------------------------
216
+ # macOS
217
+ .DS_Store
218
+ .AppleDouble
219
+ .LSOverride
220
+ ._*
221
+
222
+ # Windows
223
+ Thumbs.db
224
+ ehthumbs.db
225
+ Desktop.ini
226
+
227
+ # Linux
228
+ .directory
229
+
230
+ # ----------------------------------------------------------------------------
231
+ # Logs & Temporary Files
232
+ # ----------------------------------------------------------------------------
233
+ *.log
234
+ .research-log.jsonl
235
+ *.tmp
236
+ *.temp
237
+ *.bak
238
+ *.backup
239
+ *.orig
240
+ *~
241
+ tmp/
242
+
243
+ # ----------------------------------------------------------------------------
244
+ # Profiling
245
+ # ----------------------------------------------------------------------------
246
+ *.prof
247
+ *.lprof
248
+ .prof/
249
+ profiling/
250
+
251
+ # ----------------------------------------------------------------------------
252
+ # Cython
253
+ # ----------------------------------------------------------------------------
254
+ cython_debug/
255
+ *.c
256
+ *.cpp
257
+ # Uncomment if you ever ship Cython sources to keep:
258
+ # !src/**/*.c
259
+ # !src/**/*.cpp
260
+
261
+ # ----------------------------------------------------------------------------
262
+ # Translations & Misc
263
+ # ----------------------------------------------------------------------------
264
+ *.mo
265
+ *.pot
266
+ *.sage.py
267
+ celerybeat-schedule
268
+ celerybeat.pid
269
+ node_modules/
270
+
271
+ # ----------------------------------------------------------------------------
272
+ # xpcsjax-specific
273
+ # ----------------------------------------------------------------------------
274
+ # Analysis results and outputs
275
+ xpcsjax_results/
276
+ xpcsjax_analysis_results/
277
+ xpcsjax_analysis_results.json
278
+ .xpcsjax_cache/
279
+ # Root-level app-state cache (e.g. cache/projects.json). Anchored with a
280
+ # leading slash so any tracked cache/ deeper in the tree stays unaffected.
281
+ /cache/
282
+
283
+ # Scientific Computing & Data (results, not test fixtures)
284
+ # Tests fixtures live under tests/characterization/fixtures/ and MUST be
285
+ # committed — those are the parity oracle baselines.
286
+ *.h5
287
+ *.hdf5
288
+ *.mat
289
+ *.npy
290
+ *.npz
291
+ !tests/characterization/fixtures/**/*.h5
292
+ !tests/characterization/fixtures/**/*.hdf5
293
+ !tests/characterization/fixtures/**/*.npy
294
+ !tests/characterization/fixtures/**/*.npz
295
+ # Committed golden snapshots for the Phase-1.0 homodyne engine preservation suite
296
+ !tests/parity/_golden/**/*.npz
297
+
298
+ # Run artifacts
299
+ phi_angles_list.txt
300
+
301
+ # Task / work-in-progress scratch
302
+ TASK_GROUP_*.md
303
+ fix-imports/
304
+ .optimization/
305
+ scripts/dev_cleanup/
306
+ plans/
307
+
308
+ # Temporary analysis / review reports
309
+ PROGRESS.md
310
+ commit_*_review.json
311
+ commit_*_breaking_changes.json
312
+ git_workflow_summary_*.md
313
+ code_quality_fixes_summary.md
314
+ codebase_analysis.md
315
+ DEBUG_REPORT.md
316
+ PRODUCTION_READINESS_REPORT.md
317
+ SCIENTIFIC_VALIDATION_REPORT.md
318
+ DOCUMENTATION_POLISH_SUMMARY.md
319
+ PERFORMANCE_ANALYSIS_REPORT.md
320
+ ARCHITECTURE_REVIEW.md
321
+ T0*_test_failure_analysis.md
322
+ T0*_integration_test_analysis.md
323
+
324
+ # ----------------------------------------------------------------------------
325
+ # Graphify (Knowledge Graph & Semantic Cache)
326
+ # ----------------------------------------------------------------------------
327
+ graphify-out/cache/
328
+ graphify-out/.graphify_python
329
+ graphify-out/.graphify_*.json
330
+ graphify-out/.graphify_*.txt
331
+ graphify-out/.obsidian/
332
+ graphify-out/_COMMUNITY_*.md
333
+ graphify-out/20*/
334
+
335
+ # Generated by CI / `make security` for pip-audit (SEC-3); never commit
336
+ requirements-audit.txt
337
+
338
+ # subagent-driven-development scaffolding (briefs/reports/diffs) — never commit
339
+ /sdd/
340
+
341
+ # The hand-authored GUI PyInstaller spec is a tracked deliverable (overrides *.spec)
342
+ !packaging/xpcsjax-gui.spec
@@ -0,0 +1,23 @@
1
+ # .graphifyignore
2
+ node_modules/
3
+ dist/
4
+ *.generated.py
5
+
6
+ # only index src/, ignore everything else
7
+ *
8
+ !xpcsjax/
9
+ !xpcsjax/**
10
+ !docs/
11
+ !docs/**
12
+ docs/_build/
13
+ docs/_build/**
14
+ docs/source/_build/
15
+ docs/source/_build/**
16
+ docs/_autosummary/
17
+ docs/_autosummary/**
18
+ docs/superpowers/
19
+ docs/superpowers/**
20
+ !tests
21
+ !tests/**
22
+ !scripts
23
+ !scripts/**