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.
- xpcsjax-0.1.0/.gitattributes +12 -0
- xpcsjax-0.1.0/.github/codeql/codeql-config.yml +59 -0
- xpcsjax-0.1.0/.github/workflows/ci.yml +86 -0
- xpcsjax-0.1.0/.github/workflows/codeql.yml +39 -0
- xpcsjax-0.1.0/.github/workflows/docs.yml +42 -0
- xpcsjax-0.1.0/.github/workflows/release.yml +84 -0
- xpcsjax-0.1.0/.gitignore +342 -0
- xpcsjax-0.1.0/.graphifyignore +23 -0
- xpcsjax-0.1.0/.pre-commit-config.yaml +138 -0
- xpcsjax-0.1.0/.readthedocs.yaml +54 -0
- xpcsjax-0.1.0/CHANGELOG.md +253 -0
- xpcsjax-0.1.0/LICENSE +21 -0
- xpcsjax-0.1.0/Makefile +689 -0
- xpcsjax-0.1.0/PKG-INFO +373 -0
- xpcsjax-0.1.0/README.md +264 -0
- xpcsjax-0.1.0/docs/Makefile +65 -0
- xpcsjax-0.1.0/docs/diagrams/architecture.md +95 -0
- xpcsjax-0.1.0/docs/diagrams/fitting_workflow.md +75 -0
- xpcsjax-0.1.0/docs/make.bat +30 -0
- xpcsjax-0.1.0/docs/source/_static/xpcsjax_logo.jpg +0 -0
- xpcsjax-0.1.0/docs/source/_templates/autosummary/module.rst +49 -0
- xpcsjax-0.1.0/docs/source/advanced/anti_degeneracy.rst +190 -0
- xpcsjax-0.1.0/docs/source/advanced/architecture.rst +166 -0
- xpcsjax-0.1.0/docs/source/advanced/cma_es_escape.rst +176 -0
- xpcsjax-0.1.0/docs/source/advanced/index.rst +16 -0
- xpcsjax-0.1.0/docs/source/advanced/jax_environment.rst +152 -0
- xpcsjax-0.1.0/docs/source/advanced/lazy_api.rst +144 -0
- xpcsjax-0.1.0/docs/source/advanced/memory_routing.rst +172 -0
- xpcsjax-0.1.0/docs/source/api/cli.rst +118 -0
- xpcsjax-0.1.0/docs/source/api/config.rst +129 -0
- xpcsjax-0.1.0/docs/source/api/core.rst +73 -0
- xpcsjax-0.1.0/docs/source/api/data.rst +85 -0
- xpcsjax-0.1.0/docs/source/api/index.rst +21 -0
- xpcsjax-0.1.0/docs/source/api/modules.rst +271 -0
- xpcsjax-0.1.0/docs/source/api/optimization.rst +231 -0
- xpcsjax-0.1.0/docs/source/api/public.rst +63 -0
- xpcsjax-0.1.0/docs/source/api/results.rst +107 -0
- xpcsjax-0.1.0/docs/source/api/runtime.rst +40 -0
- xpcsjax-0.1.0/docs/source/api/service.rst +62 -0
- xpcsjax-0.1.0/docs/source/api/viz.rst +119 -0
- xpcsjax-0.1.0/docs/source/changelog.rst +170 -0
- xpcsjax-0.1.0/docs/source/conf.py +320 -0
- xpcsjax-0.1.0/docs/source/development/contributing.rst +251 -0
- xpcsjax-0.1.0/docs/source/development/cpu_gpu_decision.rst +142 -0
- xpcsjax-0.1.0/docs/source/development/index.rst +16 -0
- xpcsjax-0.1.0/docs/source/development/nlsq_integration.rst +288 -0
- xpcsjax-0.1.0/docs/source/development/porting_notes.rst +195 -0
- xpcsjax-0.1.0/docs/source/development/releasing.rst +123 -0
- xpcsjax-0.1.0/docs/source/development/testing.rst +270 -0
- xpcsjax-0.1.0/docs/source/examples/basic_homodyne.rst +170 -0
- xpcsjax-0.1.0/docs/source/examples/heterodyne_multiangle.rst +182 -0
- xpcsjax-0.1.0/docs/source/examples/index.rst +14 -0
- xpcsjax-0.1.0/docs/source/examples/laminar_flow.rst +177 -0
- xpcsjax-0.1.0/docs/source/examples/multistart_robust_fit.rst +158 -0
- xpcsjax-0.1.0/docs/source/index.rst +183 -0
- xpcsjax-0.1.0/docs/source/installation.rst +186 -0
- xpcsjax-0.1.0/docs/source/quickstart.rst +185 -0
- xpcsjax-0.1.0/docs/source/theory/anti_degeneracy.rst +516 -0
- xpcsjax-0.1.0/docs/source/theory/citations.rst +335 -0
- xpcsjax-0.1.0/docs/source/theory/correlation_functions.rst +287 -0
- xpcsjax-0.1.0/docs/source/theory/heterodyne_anti_degeneracy.rst +243 -0
- xpcsjax-0.1.0/docs/source/theory/heterodyne_memory_strategy.rst +260 -0
- xpcsjax-0.1.0/docs/source/theory/heterodyne_model.rst +377 -0
- xpcsjax-0.1.0/docs/source/theory/homodyne_model.rst +366 -0
- xpcsjax-0.1.0/docs/source/theory/index.rst +19 -0
- xpcsjax-0.1.0/docs/source/theory/transport_coefficient.rst +309 -0
- xpcsjax-0.1.0/docs/source/theory/xpcs_basics.rst +294 -0
- xpcsjax-0.1.0/docs/source/user_guide/analysis_modes.rst +210 -0
- xpcsjax-0.1.0/docs/source/user_guide/cli.rst +198 -0
- xpcsjax-0.1.0/docs/source/user_guide/configuration.rst +292 -0
- xpcsjax-0.1.0/docs/source/user_guide/data_loading.rst +192 -0
- xpcsjax-0.1.0/docs/source/user_guide/gui.rst +147 -0
- xpcsjax-0.1.0/docs/source/user_guide/heterodyne_workflow.rst +272 -0
- xpcsjax-0.1.0/docs/source/user_guide/homodyne_workflow.rst +231 -0
- xpcsjax-0.1.0/docs/source/user_guide/index.rst +21 -0
- xpcsjax-0.1.0/docs/source/user_guide/interpreting_results.rst +272 -0
- xpcsjax-0.1.0/docs/source/user_guide/nlsq_fitting.rst +266 -0
- xpcsjax-0.1.0/docs/source/user_guide/overview.rst +158 -0
- xpcsjax-0.1.0/docs/source/user_guide/troubleshooting.rst +337 -0
- xpcsjax-0.1.0/docs/source/user_guide/visualization.rst +144 -0
- xpcsjax-0.1.0/graphify-out/.graphify_root +1 -0
- xpcsjax-0.1.0/graphify-out/GRAPH_REPORT.md +1889 -0
- xpcsjax-0.1.0/graphify-out/cost.json +173 -0
- xpcsjax-0.1.0/graphify-out/graph.html +307 -0
- xpcsjax-0.1.0/graphify-out/graph.json +280928 -0
- xpcsjax-0.1.0/graphify-out/manifest.json +5397 -0
- xpcsjax-0.1.0/packaging/README.md +61 -0
- xpcsjax-0.1.0/packaging/launch_gui.py +5 -0
- xpcsjax-0.1.0/packaging/xpcsjax-gui.spec +28 -0
- xpcsjax-0.1.0/pyproject.toml +319 -0
- xpcsjax-0.1.0/tests/__init__.py +0 -0
- xpcsjax-0.1.0/tests/benchmarks/__init__.py +0 -0
- xpcsjax-0.1.0/tests/benchmarks/test_perf_regression.py +153 -0
- xpcsjax-0.1.0/tests/characterization/__init__.py +0 -0
- xpcsjax-0.1.0/tests/characterization/fixtures/baselines/heterodyne_residuals.json +129 -0
- xpcsjax-0.1.0/tests/characterization/test_heterodyne_residual_parity.py +75 -0
- xpcsjax-0.1.0/tests/cli/__init__.py +0 -0
- xpcsjax-0.1.0/tests/cli/test_build_parser_factories.py +57 -0
- xpcsjax-0.1.0/tests/cli/test_classify_option.py +63 -0
- xpcsjax-0.1.0/tests/cli/test_completion_parity.py +86 -0
- xpcsjax-0.1.0/tests/cli/test_completion_spec.py +39 -0
- xpcsjax-0.1.0/tests/cli/test_config_generator_yaml.py +36 -0
- xpcsjax-0.1.0/tests/cli/test_config_handling_errors.py +56 -0
- xpcsjax-0.1.0/tests/cli/test_data_pipeline_adapter.py +29 -0
- xpcsjax-0.1.0/tests/cli/test_data_pipeline_phi_filtering.py +110 -0
- xpcsjax-0.1.0/tests/cli/test_debug_audit_2026_06_17.py +77 -0
- xpcsjax-0.1.0/tests/cli/test_logging_wiring.py +128 -0
- xpcsjax-0.1.0/tests/cli/test_output_resolution.py +151 -0
- xpcsjax-0.1.0/tests/cli/test_plot_dispatch_logging.py +188 -0
- xpcsjax-0.1.0/tests/cli/test_post_install.py +490 -0
- xpcsjax-0.1.0/tests/cli/test_post_install_fish.py +94 -0
- xpcsjax-0.1.0/tests/cli/test_simulated_data_grid.py +71 -0
- xpcsjax-0.1.0/tests/cli/test_uninstall_scripts.py +341 -0
- xpcsjax-0.1.0/tests/config/__init__.py +0 -0
- xpcsjax-0.1.0/tests/config/test_adversarial_review_nonfinite_coercion.py +134 -0
- xpcsjax-0.1.0/tests/config/test_config_analysis_mode.py +19 -0
- xpcsjax-0.1.0/tests/config/test_config_debug_null_nonfinite.py +99 -0
- xpcsjax-0.1.0/tests/config/test_config_jax_free.py +74 -0
- xpcsjax-0.1.0/tests/config/test_config_manager_errors.py +37 -0
- xpcsjax-0.1.0/tests/config/test_config_relative_data_paths.py +145 -0
- xpcsjax-0.1.0/tests/config/test_debug_audit_2026_06_17.py +102 -0
- xpcsjax-0.1.0/tests/config/test_get_model.py +107 -0
- xpcsjax-0.1.0/tests/config/test_heterodyne_config_bounds_override.py +87 -0
- xpcsjax-0.1.0/tests/config/test_heterodyne_grouped_coercion.py +28 -0
- xpcsjax-0.1.0/tests/config/test_heterodyne_physics_validators.py +84 -0
- xpcsjax-0.1.0/tests/config/test_heterodyne_registry.py +53 -0
- xpcsjax-0.1.0/tests/config/test_parameter_names.py +74 -0
- xpcsjax-0.1.0/tests/config/test_registry_consistency.py +70 -0
- xpcsjax-0.1.0/tests/config/test_templates_no_fourier_keys.py +56 -0
- xpcsjax-0.1.0/tests/conftest.py +16 -0
- xpcsjax-0.1.0/tests/core/__init__.py +0 -0
- xpcsjax-0.1.0/tests/core/test_core_gaps.py +275 -0
- xpcsjax-0.1.0/tests/core/test_heterodyne_integral_kernels.py +47 -0
- xpcsjax-0.1.0/tests/core/test_heterodyne_model.py +79 -0
- xpcsjax-0.1.0/tests/core/test_heterodyne_pointwise_kernel.py +98 -0
- xpcsjax-0.1.0/tests/core/test_heterodyne_scaling_utils.py +52 -0
- xpcsjax-0.1.0/tests/core/test_homodyne_models.py +84 -0
- xpcsjax-0.1.0/tests/core/test_jax_backend.py +372 -0
- xpcsjax-0.1.0/tests/core/test_jax_backend_gradient_g2.py +27 -0
- xpcsjax-0.1.0/tests/core/test_models_chi_squared_dt.py +32 -0
- xpcsjax-0.1.0/tests/data/__init__.py +0 -0
- xpcsjax-0.1.0/tests/data/test_aps_u_alloc_guard.py +60 -0
- xpcsjax-0.1.0/tests/data/test_aps_u_empty_selection.py +30 -0
- xpcsjax-0.1.0/tests/data/test_async_io_logging.py +211 -0
- xpcsjax-0.1.0/tests/data/test_cache_filename_guard.py +33 -0
- xpcsjax-0.1.0/tests/data/test_cache_loader_security.py +173 -0
- xpcsjax-0.1.0/tests/data/test_cache_no_pickle_exec.py +92 -0
- xpcsjax-0.1.0/tests/data/test_cache_q_validation.py +34 -0
- xpcsjax-0.1.0/tests/data/test_cache_safety.py +133 -0
- xpcsjax-0.1.0/tests/data/test_debug_audit_2026_06_17.py +94 -0
- xpcsjax-0.1.0/tests/data/test_filtering_quality_score.py +66 -0
- xpcsjax-0.1.0/tests/data/test_frame_dimension_guard.py +85 -0
- xpcsjax-0.1.0/tests/data/test_load_degradation_signal.py +41 -0
- xpcsjax-0.1.0/tests/data/test_loaded_array_validation.py +87 -0
- xpcsjax-0.1.0/tests/data/test_loader_integration.py +78 -0
- xpcsjax-0.1.0/tests/data/test_loader_smoke.py +11 -0
- xpcsjax-0.1.0/tests/data/test_memory_manager_cache_gating.py +289 -0
- xpcsjax-0.1.0/tests/data/test_memory_manager_logging.py +418 -0
- xpcsjax-0.1.0/tests/data/test_no_pickle_loads.py +117 -0
- xpcsjax-0.1.0/tests/data/test_optimization_logging.py +71 -0
- xpcsjax-0.1.0/tests/data/test_preprocessing_diagonal_dtype.py +50 -0
- xpcsjax-0.1.0/tests/data/test_quality_controller_smoke.py +152 -0
- xpcsjax-0.1.0/tests/data/test_validation.py +164 -0
- xpcsjax-0.1.0/tests/data/test_validation_crash_coverage.py +144 -0
- xpcsjax-0.1.0/tests/data/test_validation_exception_narrowing.py +42 -0
- xpcsjax-0.1.0/tests/data/test_validation_integrity_logging.py +44 -0
- xpcsjax-0.1.0/tests/data/test_xpcs_dataset.py +48 -0
- xpcsjax-0.1.0/tests/gui/__init__.py +0 -0
- xpcsjax-0.1.0/tests/gui/conftest.py +5 -0
- xpcsjax-0.1.0/tests/gui/ipc_fakes.py +28 -0
- xpcsjax-0.1.0/tests/gui/test_app_wiring.py +31 -0
- xpcsjax-0.1.0/tests/gui/test_data_inspect.py +85 -0
- xpcsjax-0.1.0/tests/gui/test_diagnostics_map.py +62 -0
- xpcsjax-0.1.0/tests/gui/test_error_presenter.py +23 -0
- xpcsjax-0.1.0/tests/gui/test_export_flow.py +131 -0
- xpcsjax-0.1.0/tests/gui/test_fit_queue.py +186 -0
- xpcsjax-0.1.0/tests/gui/test_freeze_safety.py +70 -0
- xpcsjax-0.1.0/tests/gui/test_gui_debug_2026_06_21.py +213 -0
- xpcsjax-0.1.0/tests/gui/test_gui_debug_fixes.py +166 -0
- xpcsjax-0.1.0/tests/gui/test_gui_jax_free.py +181 -0
- xpcsjax-0.1.0/tests/gui/test_gui_redesign.py +454 -0
- xpcsjax-0.1.0/tests/gui/test_inspector.py +40 -0
- xpcsjax-0.1.0/tests/gui/test_ipc_primitives.py +54 -0
- xpcsjax-0.1.0/tests/gui/test_main_window.py +176 -0
- xpcsjax-0.1.0/tests/gui/test_plots_view.py +205 -0
- xpcsjax-0.1.0/tests/gui/test_project_io_wiring.py +45 -0
- xpcsjax-0.1.0/tests/gui/test_project_model.py +41 -0
- xpcsjax-0.1.0/tests/gui/test_project_panel.py +63 -0
- xpcsjax-0.1.0/tests/gui/test_project_persist.py +59 -0
- xpcsjax-0.1.0/tests/gui/test_project_tree_model.py +77 -0
- xpcsjax-0.1.0/tests/gui/test_raster.py +47 -0
- xpcsjax-0.1.0/tests/gui/test_result_loader.py +60 -0
- xpcsjax-0.1.0/tests/gui/test_result_presenter.py +156 -0
- xpcsjax-0.1.0/tests/gui/test_status_manager.py +48 -0
- xpcsjax-0.1.0/tests/gui/test_viz_bundle.py +41 -0
- xpcsjax-0.1.0/tests/gui/test_workbench_surfaces.py +111 -0
- xpcsjax-0.1.0/tests/gui/test_worker.py +85 -0
- xpcsjax-0.1.0/tests/gui/test_worker_diagnostics.py +71 -0
- xpcsjax-0.1.0/tests/gui/test_worker_handle.py +115 -0
- xpcsjax-0.1.0/tests/heterodyne/__init__.py +0 -0
- xpcsjax-0.1.0/tests/heterodyne/test_config_unwrap.py +145 -0
- xpcsjax-0.1.0/tests/heterodyne/test_heterodyne_diagnostics_golden.py +111 -0
- xpcsjax-0.1.0/tests/heterodyne/test_l4_fallback_stale_monitor.py +114 -0
- xpcsjax-0.1.0/tests/heterodyne/test_logging_parity.py +61 -0
- xpcsjax-0.1.0/tests/heterodyne/test_two_component_smoke.py +198 -0
- xpcsjax-0.1.0/tests/integration/test_error_recovery.py +206 -0
- xpcsjax-0.1.0/tests/integration/test_heterodyne_fit_smoke.py +183 -0
- xpcsjax-0.1.0/tests/optimization/__init__.py +0 -0
- xpcsjax-0.1.0/tests/optimization/_heterodyne_fixtures.py +111 -0
- xpcsjax-0.1.0/tests/optimization/test_adapter_cost_default.py +35 -0
- xpcsjax-0.1.0/tests/optimization/test_adapter_flatten_phi_order.py +91 -0
- xpcsjax-0.1.0/tests/optimization/test_adapter_xdata_cache.py +87 -0
- xpcsjax-0.1.0/tests/optimization/test_adaptive_regularization.py +76 -0
- xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_diagnostics.py +76 -0
- xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_layers.py +355 -0
- xpcsjax-0.1.0/tests/optimization/test_anti_degeneracy_transforms.py +107 -0
- xpcsjax-0.1.0/tests/optimization/test_canonical_index_mapper.py +100 -0
- xpcsjax-0.1.0/tests/optimization/test_chunked_jacfwd.py +69 -0
- xpcsjax-0.1.0/tests/optimization/test_cmaes_multiseed_keep_best.py +147 -0
- xpcsjax-0.1.0/tests/optimization/test_cmaes_trigger.py +219 -0
- xpcsjax-0.1.0/tests/optimization/test_config_chunk_size_bounds.py +147 -0
- xpcsjax-0.1.0/tests/optimization/test_config_no_fourier.py +51 -0
- xpcsjax-0.1.0/tests/optimization/test_debug_audit_2026_06_17.py +124 -0
- xpcsjax-0.1.0/tests/optimization/test_escape_disabled_hint.py +78 -0
- xpcsjax-0.1.0/tests/optimization/test_escape_mode_routing.py +43 -0
- xpcsjax-0.1.0/tests/optimization/test_explicit_averaged_mode_parity.py +127 -0
- xpcsjax-0.1.0/tests/optimization/test_fourier_reparam_removed.py +38 -0
- xpcsjax-0.1.0/tests/optimization/test_global_escape_contract.py +49 -0
- xpcsjax-0.1.0/tests/optimization/test_global_escape_finite_guard.py +34 -0
- xpcsjax-0.1.0/tests/optimization/test_gradient_collapse_callback.py +103 -0
- xpcsjax-0.1.0/tests/optimization/test_gradient_diagnostics.py +159 -0
- xpcsjax-0.1.0/tests/optimization/test_gradient_monitor.py +242 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes.py +218 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_diagnostics.py +170 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_seed.py +190 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_warmstart_auto_skip.py +194 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_cmaes_warmstart_success_gate.py +231 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_completion_layout.py +71 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_config.py +329 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_config_no_fourier.py +72 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_constant_mode.py +406 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_data_prep.py +116 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_hybrid_streaming.py +1864 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_individual_joint.py +123 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_joint_escapes.py +300 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_joint_problem.py +46 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_memory_adapter.py +263 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_modes.py +152 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_multistart.py +268 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_result_builder.py +329 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_results.py +104 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_return_shape.py +594 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_strategy_routing.py +376 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratification_config.py +258 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_anti_degeneracy_parity.py +306 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_execute_layers.py +278 -0
- xpcsjax-0.1.0/tests/optimization/test_heterodyne_stratified_ls.py +1049 -0
- xpcsjax-0.1.0/tests/optimization/test_hierarchical.py +183 -0
- xpcsjax-0.1.0/tests/optimization/test_iteration_callback_seam.py +202 -0
- xpcsjax-0.1.0/tests/optimization/test_jacobian.py +122 -0
- xpcsjax-0.1.0/tests/optimization/test_joint_ssr_floor.py +537 -0
- xpcsjax-0.1.0/tests/optimization/test_l2_warmstart_log_disambiguation.py +126 -0
- xpcsjax-0.1.0/tests/optimization/test_l3_boundary_mapper.py +30 -0
- xpcsjax-0.1.0/tests/optimization/test_l4_callback_layout.py +71 -0
- xpcsjax-0.1.0/tests/optimization/test_l4_callback_observational.py +165 -0
- xpcsjax-0.1.0/tests/optimization/test_laminar_mode_banners.py +216 -0
- xpcsjax-0.1.0/tests/optimization/test_laminar_streaming_diag.py +172 -0
- xpcsjax-0.1.0/tests/optimization/test_layer5_gating.py +94 -0
- xpcsjax-0.1.0/tests/optimization/test_layer_gate_wiring.py +69 -0
- xpcsjax-0.1.0/tests/optimization/test_memory_concurrency_aware.py +206 -0
- xpcsjax-0.1.0/tests/optimization/test_memory_routing.py +93 -0
- xpcsjax-0.1.0/tests/optimization/test_model_adapter.py +137 -0
- xpcsjax-0.1.0/tests/optimization/test_multistart.py +372 -0
- xpcsjax-0.1.0/tests/optimization/test_nlsq_support_modules.py +280 -0
- xpcsjax-0.1.0/tests/optimization/test_parallel_accumulator.py +378 -0
- xpcsjax-0.1.0/tests/optimization/test_parameter_utils.py +284 -0
- xpcsjax-0.1.0/tests/optimization/test_per_angle_mode_resolver.py +67 -0
- xpcsjax-0.1.0/tests/optimization/test_per_angle_scaling_plan.py +217 -0
- xpcsjax-0.1.0/tests/optimization/test_per_angle_scaling_roundtrip.py +31 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_dof_semantics.py +53 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_expand_back.py +49 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_model_function_modes.py +88 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_no_crash_lengths.py +55 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_quantile_grid.py +36 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_standard_resolver.py +92 -0
- xpcsjax-0.1.0/tests/optimization/test_phase5_vector_build.py +41 -0
- xpcsjax-0.1.0/tests/optimization/test_pointwise_evaluator_seam.py +196 -0
- xpcsjax-0.1.0/tests/optimization/test_quality_gate_fixes.py +122 -0
- xpcsjax-0.1.0/tests/optimization/test_recovery_and_numerical.py +184 -0
- xpcsjax-0.1.0/tests/optimization/test_result_accessors.py +54 -0
- xpcsjax-0.1.0/tests/optimization/test_result_builder.py +43 -0
- xpcsjax-0.1.0/tests/optimization/test_result_quality_invariant.py +54 -0
- xpcsjax-0.1.0/tests/optimization/test_shear_weighting.py +231 -0
- xpcsjax-0.1.0/tests/optimization/test_static_individual_invariant.py +312 -0
- xpcsjax-0.1.0/tests/optimization/test_strategy_chunking.py +261 -0
- xpcsjax-0.1.0/tests/optimization/test_strategy_executors.py +297 -0
- xpcsjax-0.1.0/tests/optimization/test_strategy_residual.py +218 -0
- xpcsjax-0.1.0/tests/optimization/test_strategy_residual_jit.py +209 -0
- xpcsjax-0.1.0/tests/optimization/test_stratified_max_iter_grading.py +111 -0
- xpcsjax-0.1.0/tests/optimization/test_streaming_smoke.py +187 -0
- xpcsjax-0.1.0/tests/optimization/test_transforms.py +336 -0
- xpcsjax-0.1.0/tests/optimization/test_validation.py +311 -0
- xpcsjax-0.1.0/tests/optimization/test_validation_branches.py +260 -0
- xpcsjax-0.1.0/tests/parity/__init__.py +0 -0
- xpcsjax-0.1.0/tests/parity/_golden/laminar_flow_end_to_end.npz +0 -0
- xpcsjax-0.1.0/tests/parity/_golden/stratified_residual_jit.npz +0 -0
- xpcsjax-0.1.0/tests/parity/_golden_util.py +51 -0
- xpcsjax-0.1.0/tests/parity/_heterodyne_layout_oracle.py +98 -0
- xpcsjax-0.1.0/tests/parity/conftest.py +79 -0
- xpcsjax-0.1.0/tests/parity/test_anti_degeneracy_diagnostics_parity.py +58 -0
- xpcsjax-0.1.0/tests/parity/test_codex_review_fixes.py +276 -0
- xpcsjax-0.1.0/tests/parity/test_defense_layers.py +387 -0
- xpcsjax-0.1.0/tests/parity/test_docs_no_fourier.py +67 -0
- xpcsjax-0.1.0/tests/parity/test_engine_heterodyne_fit_parity.py +592 -0
- xpcsjax-0.1.0/tests/parity/test_engine_heterodyne_routing.py +598 -0
- xpcsjax-0.1.0/tests/parity/test_engine_route_bugfixes.py +332 -0
- xpcsjax-0.1.0/tests/parity/test_engine_route_result_contract.py +282 -0
- xpcsjax-0.1.0/tests/parity/test_fourier_teardown_grep_zero.py +56 -0
- xpcsjax-0.1.0/tests/parity/test_heterodyne_scaling_first_layout.py +190 -0
- xpcsjax-0.1.0/tests/parity/test_homodyne_engine_preservation.py +496 -0
- xpcsjax-0.1.0/tests/parity/test_iteration_seam_parity.py +23 -0
- xpcsjax-0.1.0/tests/parity/test_l1_rename.py +36 -0
- xpcsjax-0.1.0/tests/parity/test_l4_per_iteration_parity.py +206 -0
- xpcsjax-0.1.0/tests/parity/test_laminar_execute_layers.py +197 -0
- xpcsjax-0.1.0/tests/parity/test_laminar_no_worse_phase6.py +120 -0
- xpcsjax-0.1.0/tests/parity/test_layer_activation_matrix.py +174 -0
- xpcsjax-0.1.0/tests/parity/test_mode_taxonomy.py +88 -0
- xpcsjax-0.1.0/tests/parity/test_no_scipy_least_squares.py +157 -0
- xpcsjax-0.1.0/tests/parity/test_phase5_default_no_worse.py +85 -0
- xpcsjax-0.1.0/tests/parity/test_pointwise_joint_parity.py +129 -0
- xpcsjax-0.1.0/tests/property/__init__.py +0 -0
- xpcsjax-0.1.0/tests/property/test_diagonal_correction.py +61 -0
- xpcsjax-0.1.0/tests/property/test_parameter_invariants.py +121 -0
- xpcsjax-0.1.0/tests/runtime/__init__.py +0 -0
- xpcsjax-0.1.0/tests/runtime/test_device_logging.py +57 -0
- xpcsjax-0.1.0/tests/runtime/test_runtime_shell.py +76 -0
- xpcsjax-0.1.0/tests/runtime/test_system_validator.py +228 -0
- xpcsjax-0.1.0/tests/service/__init__.py +0 -0
- xpcsjax-0.1.0/tests/service/test_config_service.py +65 -0
- xpcsjax-0.1.0/tests/service/test_config_validate.py +62 -0
- xpcsjax-0.1.0/tests/service/test_data_service.py +70 -0
- xpcsjax-0.1.0/tests/service/test_events.py +74 -0
- xpcsjax-0.1.0/tests/service/test_fit_overrides.py +59 -0
- xpcsjax-0.1.0/tests/service/test_persist.py +76 -0
- xpcsjax-0.1.0/tests/service/test_plots_service.py +50 -0
- xpcsjax-0.1.0/tests/service/test_run_fit.py +71 -0
- xpcsjax-0.1.0/tests/test_debug_audit_2026_06_18.py +272 -0
- xpcsjax-0.1.0/tests/test_debug_audit_regressions.py +164 -0
- xpcsjax-0.1.0/tests/test_io.py +293 -0
- xpcsjax-0.1.0/tests/test_lazy_imports.py +98 -0
- xpcsjax-0.1.0/tests/test_logging.py +584 -0
- xpcsjax-0.1.0/tests/test_logging_primitives.py +226 -0
- xpcsjax-0.1.0/tests/test_logging_quality_gate.py +397 -0
- xpcsjax-0.1.0/tests/test_logging_wiring_phase1b.py +122 -0
- xpcsjax-0.1.0/tests/viz/__init__.py +0 -0
- xpcsjax-0.1.0/tests/viz/baseline/plot_nlsq_fit_baseline.png +0 -0
- xpcsjax-0.1.0/tests/viz/baseline/plot_residual_map_baseline.png +0 -0
- xpcsjax-0.1.0/tests/viz/baseline/plot_simulated_data_baseline.png +0 -0
- xpcsjax-0.1.0/tests/viz/conftest.py +129 -0
- xpcsjax-0.1.0/tests/viz/test_artifacts.py +180 -0
- xpcsjax-0.1.0/tests/viz/test_color_resolution.py +45 -0
- xpcsjax-0.1.0/tests/viz/test_diagnostics.py +41 -0
- xpcsjax-0.1.0/tests/viz/test_low_level_plots.py +400 -0
- xpcsjax-0.1.0/tests/viz/test_orchestrator.py +383 -0
- xpcsjax-0.1.0/tests/viz/test_review_regressions.py +876 -0
- xpcsjax-0.1.0/tests/viz/test_save_path_validation.py +101 -0
- xpcsjax-0.1.0/uv.lock +4826 -0
- xpcsjax-0.1.0/xpcsjax/__init__.py +166 -0
- xpcsjax-0.1.0/xpcsjax/cli/__init__.py +78 -0
- xpcsjax-0.1.0/xpcsjax/cli/args_parser.py +442 -0
- xpcsjax-0.1.0/xpcsjax/cli/commands.py +181 -0
- xpcsjax-0.1.0/xpcsjax/cli/config_generator.py +218 -0
- xpcsjax-0.1.0/xpcsjax/cli/config_handling.py +327 -0
- xpcsjax-0.1.0/xpcsjax/cli/config_template.py +375 -0
- xpcsjax-0.1.0/xpcsjax/cli/data_pipeline.py +49 -0
- xpcsjax-0.1.0/xpcsjax/cli/main.py +195 -0
- xpcsjax-0.1.0/xpcsjax/cli/optimization_runner.py +329 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_backend.py +82 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_dispatch.py +181 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_families/__init__.py +1 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_families/experimental.py +69 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_families/postfit.py +176 -0
- xpcsjax-0.1.0/xpcsjax/cli/plot_families/simulated.py +276 -0
- xpcsjax-0.1.0/xpcsjax/cli/result_saving.py +19 -0
- xpcsjax-0.1.0/xpcsjax/cli/xla_config.py +192 -0
- xpcsjax-0.1.0/xpcsjax/config/__init__.py +94 -0
- xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_manager.py +676 -0
- xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_names.py +118 -0
- xpcsjax-0.1.0/xpcsjax/config/heterodyne_parameter_space.py +561 -0
- xpcsjax-0.1.0/xpcsjax/config/heterodyne_physics_validators.py +577 -0
- xpcsjax-0.1.0/xpcsjax/config/manager.py +1428 -0
- xpcsjax-0.1.0/xpcsjax/config/parameter_manager.py +824 -0
- xpcsjax-0.1.0/xpcsjax/config/parameter_names.py +319 -0
- xpcsjax-0.1.0/xpcsjax/config/parameter_registry.py +924 -0
- xpcsjax-0.1.0/xpcsjax/config/parameter_space.py +479 -0
- xpcsjax-0.1.0/xpcsjax/config/physics_validators.py +394 -0
- xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_laminar_flow.yaml +875 -0
- xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_static_anisotropic.yaml +1179 -0
- xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_static_isotropic.yaml +662 -0
- xpcsjax-0.1.0/xpcsjax/config/templates/xpcsjax_two_component.yaml +982 -0
- xpcsjax-0.1.0/xpcsjax/config/types.py +426 -0
- xpcsjax-0.1.0/xpcsjax/core/__init__.py +21 -0
- xpcsjax-0.1.0/xpcsjax/core/diagonal_correction.py +562 -0
- xpcsjax-0.1.0/xpcsjax/core/fitting.py +129 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_jax_backend.py +653 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_model.py +327 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_model_stateful.py +471 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_models.py +489 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_factors.py +230 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_kernel.py +442 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_physics_utils.py +419 -0
- xpcsjax-0.1.0/xpcsjax/core/heterodyne_scaling_utils.py +761 -0
- xpcsjax-0.1.0/xpcsjax/core/homodyne_model.py +379 -0
- xpcsjax-0.1.0/xpcsjax/core/jax_backend.py +1846 -0
- xpcsjax-0.1.0/xpcsjax/core/math_primitives.py +57 -0
- xpcsjax-0.1.0/xpcsjax/core/model_mixins.py +519 -0
- xpcsjax-0.1.0/xpcsjax/core/models.py +716 -0
- xpcsjax-0.1.0/xpcsjax/core/physics.py +598 -0
- xpcsjax-0.1.0/xpcsjax/core/physics_factors.py +369 -0
- xpcsjax-0.1.0/xpcsjax/core/physics_nlsq.py +478 -0
- xpcsjax-0.1.0/xpcsjax/core/physics_utils.py +356 -0
- xpcsjax-0.1.0/xpcsjax/data/__init__.py +304 -0
- xpcsjax-0.1.0/xpcsjax/data/angle_filtering.py +417 -0
- xpcsjax-0.1.0/xpcsjax/data/config.py +780 -0
- xpcsjax-0.1.0/xpcsjax/data/dataset.py +82 -0
- xpcsjax-0.1.0/xpcsjax/data/filtering_utils.py +664 -0
- xpcsjax-0.1.0/xpcsjax/data/memory_manager.py +1593 -0
- xpcsjax-0.1.0/xpcsjax/data/optimization.py +1152 -0
- xpcsjax-0.1.0/xpcsjax/data/performance_engine.py +1942 -0
- xpcsjax-0.1.0/xpcsjax/data/phi_filtering.py +442 -0
- xpcsjax-0.1.0/xpcsjax/data/preprocessing.py +1200 -0
- xpcsjax-0.1.0/xpcsjax/data/quality_controller.py +2094 -0
- xpcsjax-0.1.0/xpcsjax/data/types.py +48 -0
- xpcsjax-0.1.0/xpcsjax/data/validation.py +1287 -0
- xpcsjax-0.1.0/xpcsjax/data/validators.py +328 -0
- xpcsjax-0.1.0/xpcsjax/data/xpcs_loader.py +2741 -0
- xpcsjax-0.1.0/xpcsjax/device/__init__.py +276 -0
- xpcsjax-0.1.0/xpcsjax/device/config.py +265 -0
- xpcsjax-0.1.0/xpcsjax/device/cpu.py +588 -0
- xpcsjax-0.1.0/xpcsjax/gui/__init__.py +8 -0
- xpcsjax-0.1.0/xpcsjax/gui/app.py +109 -0
- xpcsjax-0.1.0/xpcsjax/gui/controllers/__init__.py +3 -0
- xpcsjax-0.1.0/xpcsjax/gui/controllers/fit_queue.py +252 -0
- xpcsjax-0.1.0/xpcsjax/gui/data_inspect.py +117 -0
- xpcsjax-0.1.0/xpcsjax/gui/error_presenter.py +47 -0
- xpcsjax-0.1.0/xpcsjax/gui/export.py +80 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/__init__.py +3 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/diagnostics.py +59 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/emitter.py +53 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/handle.py +226 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/job.py +26 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/log_capture.py +52 -0
- xpcsjax-0.1.0/xpcsjax/gui/ipc/worker.py +87 -0
- xpcsjax-0.1.0/xpcsjax/gui/project/__init__.py +3 -0
- xpcsjax-0.1.0/xpcsjax/gui/project/model.py +105 -0
- xpcsjax-0.1.0/xpcsjax/gui/project/persist.py +111 -0
- xpcsjax-0.1.0/xpcsjax/gui/project/tree_model.py +83 -0
- xpcsjax-0.1.0/xpcsjax/gui/result_loader.py +91 -0
- xpcsjax-0.1.0/xpcsjax/gui/theme.py +438 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/__init__.py +3 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/config_dialogs.py +302 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/error_dialog.py +41 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/inspector.py +122 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window.py +592 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/__init__.py +1 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/project_dialog_handler.py +148 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/result_presenter.py +110 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/run_controller.py +111 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/main_window_support/status_manager.py +54 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/__init__.py +1 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/grid.py +245 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/helpers.py +92 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/maps.py +157 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/residuals.py +102 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots/squares.py +58 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/plots_view.py +31 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/project_panel.py +97 -0
- xpcsjax-0.1.0/xpcsjax/gui/views/raster.py +45 -0
- xpcsjax-0.1.0/xpcsjax/gui/viz_bundle.py +62 -0
- xpcsjax-0.1.0/xpcsjax/io/__init__.py +20 -0
- xpcsjax-0.1.0/xpcsjax/io/json_utils.py +144 -0
- xpcsjax-0.1.0/xpcsjax/io/nlsq_writers.py +232 -0
- xpcsjax-0.1.0/xpcsjax/optimization/__init__.py +129 -0
- xpcsjax-0.1.0/xpcsjax/optimization/batch_statistics.py +186 -0
- xpcsjax-0.1.0/xpcsjax/optimization/exceptions.py +262 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/__init__.py +1178 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adapter.py +1439 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adapter_base.py +364 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/adaptive_regularization.py +527 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_controller.py +1054 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_diagnostics.py +62 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/anti_degeneracy_logging.py +117 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/cmaes_wrapper.py +1246 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/config.py +1179 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/core.py +2684 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/data_prep.py +377 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/fallback_chain.py +455 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/fit_computation.py +539 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/gradient_diagnostics.py +267 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/gradient_monitor.py +634 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_adapter.py +935 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_adapter_base.py +80 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_config.py +1314 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_constant_mode.py +518 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_core.py +4606 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_data_prep.py +349 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_engine_route.py +745 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_logging.py +347 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_memory.py +340 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_multistart.py +142 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_result_builder.py +747 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_results.py +217 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_stratified_data.py +229 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_stratified_ls.py +1292 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/heterodyne_views.py +109 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/hierarchical.py +733 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/jacobian.py +244 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/memory.py +516 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/model_adapter.py +231 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/multistart.py +1482 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parallel_accumulator.py +773 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parameter_index_mapper.py +318 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/parameter_utils.py +587 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/per_angle_mode.py +392 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/progress.py +534 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/recovery.py +529 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/result_builder.py +453 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/results.py +326 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/shear_weighting.py +466 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/__init__.py +65 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/chunking.py +1233 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/executors.py +489 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/heterodyne_hybrid_streaming.py +995 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/hybrid_streaming.py +2039 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/out_of_core.py +604 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/residual.py +848 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/residual_jit.py +644 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/sequential.py +1010 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/strategies/stratified_ls.py +1015 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/transforms.py +491 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/validation.py +777 -0
- xpcsjax-0.1.0/xpcsjax/optimization/nlsq/wrapper.py +4174 -0
- xpcsjax-0.1.0/xpcsjax/optimization/numerical_validation.py +251 -0
- xpcsjax-0.1.0/xpcsjax/optimization/recovery_strategies.py +209 -0
- xpcsjax-0.1.0/xpcsjax/post_install.py +952 -0
- xpcsjax-0.1.0/xpcsjax/runtime/__init__.py +34 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/__init__.py +49 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/__init__.py +1 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/xla_config.bash +121 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/activation/xla_config.fish +116 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/completion.sh +228 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/completion_spec.py +99 -0
- xpcsjax-0.1.0/xpcsjax/runtime/shell/generate_completion.py +246 -0
- xpcsjax-0.1.0/xpcsjax/runtime/utils/__init__.py +17 -0
- xpcsjax-0.1.0/xpcsjax/runtime/utils/system_validator.py +702 -0
- xpcsjax-0.1.0/xpcsjax/service/__init__.py +20 -0
- xpcsjax-0.1.0/xpcsjax/service/config.py +209 -0
- xpcsjax-0.1.0/xpcsjax/service/data.py +226 -0
- xpcsjax-0.1.0/xpcsjax/service/events.py +107 -0
- xpcsjax-0.1.0/xpcsjax/service/fit.py +196 -0
- xpcsjax-0.1.0/xpcsjax/service/persist.py +412 -0
- xpcsjax-0.1.0/xpcsjax/service/plots.py +100 -0
- xpcsjax-0.1.0/xpcsjax/uninstall_scripts.py +634 -0
- xpcsjax-0.1.0/xpcsjax/utils/__init__.py +34 -0
- xpcsjax-0.1.0/xpcsjax/utils/async_io.py +337 -0
- xpcsjax-0.1.0/xpcsjax/utils/logging.py +1755 -0
- xpcsjax-0.1.0/xpcsjax/utils/path_validation.py +307 -0
- xpcsjax-0.1.0/xpcsjax/viz/__init__.py +62 -0
- xpcsjax-0.1.0/xpcsjax/viz/datashader_backend.py +374 -0
- xpcsjax-0.1.0/xpcsjax/viz/diagnostics.py +139 -0
- 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
|
xpcsjax-0.1.0/.gitignore
ADDED
|
@@ -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/**
|