StochasticForceInference 2.0.0__tar.gz → 2.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/AGENTS.md +29 -12
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/PKG-INFO +18 -14
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/README.md +16 -12
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/base.py +8 -1
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/overdamped.py +317 -54
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/__init__.py +32 -0
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/banded.py +279 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/covariance.py +105 -14
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/driver.py +55 -5
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/flow_multi.py +494 -0
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/gram.py +21 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/jacobians.py +191 -49
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/precompute.py +221 -0
- stochasticforceinference-2.0.1/SFI/inference/parametric_core/runner.py +853 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/solve.py +421 -142
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/underdamped.py +510 -26
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/rk4.py +1 -1
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/underdamped.py +121 -20
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/derivative.py +11 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/reshape_rank.py +5 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/slice.py +5 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/dataset.py +14 -10
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/PKG-INFO +18 -14
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/SOURCES.txt +7 -5
- stochasticforceinference-2.0.1/examples/_gallery_utils/bench_utils.py +27 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/helpers.py +11 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_align_demo.py +3 -3
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_nonreciprocal_demo.py +11 -6
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_to_spde_demo.py +3 -3
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/flocking_3d_demo.py +4 -4
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/multi_experiment_demo.py +2 -2
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/nn_force_demo.py +161 -70
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/anisotropic_diffusion_demo.py +2 -3
- stochasticforceinference-2.0.1/examples/gallery/entropy_production_demo.py +561 -0
- stochasticforceinference-2.0.1/examples/gallery/entropy_production_underdamped_demo.py +464 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/experimental_workflow_demo.py +2 -2
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/gray_scott_demo.py +2 -2
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/home_range_demo.py +2 -2
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/lorenz_demo.py +0 -1
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/lotka_volterra_demo.py +7 -7
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/multiplicative_diffusion_demo.py +3 -5
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/velocity_dependent_noise_demo.py +3 -4
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/pyproject.toml +2 -2
- stochasticforceinference-2.0.0/SFI/inference/parametric_core/__init__.py +0 -34
- stochasticforceinference-2.0.0/SFI/inference/parametric_core/flow_multi.py +0 -362
- stochasticforceinference-2.0.0/SFI/inference/parametric_core/objective.py +0 -286
- stochasticforceinference-2.0.0/SFI/inference/parametric_core/objective_ud.py +0 -253
- stochasticforceinference-2.0.0/SFI/inference/parametric_core/precision.py +0 -229
- stochasticforceinference-2.0.0/examples/convert_active_nematic_mat.py +0 -409
- stochasticforceinference-2.0.0/examples/gallery/active_nematic_demo.py +0 -910
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/CONTRIBUTING.md +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/GALLERY_STYLE_GUIDE.md +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/LICENSE +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/MANIFEST.in +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/constants.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/linear.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/monomials.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/pairs.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/spde.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/assess.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/dynamics_order.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/plotting.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/report.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/residual_tests.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/residuals.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/optimizers.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/flow.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/flow_ud.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/result.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/serialization.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/base.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/beam.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/greedy.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/hillclimb.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/lasso.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/metrics.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/result.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/scorer.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/stlsq.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparsity.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/api.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/integrand.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/timeops.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/base.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/chunked.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/noise.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/overdamped.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/basis.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/core/runtime.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/factory.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/interactor.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_base.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_eval_compiler.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_fd_atoms.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_grid.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_sectors.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/memhint.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/base.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/contract.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/dispatcher.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/prepare.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/specs.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/stencils.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/leaf.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/concat.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/einsum.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/linear.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/mapn.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/params.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/psf.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/sf.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/stateexpr.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/structexpr.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/collection.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/degrade.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/io.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/reserved_extras.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/formatting.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/maths.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/neighbors.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/plotting.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/dependency_links.txt +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/requires.txt +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/top_level.txt +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/__init__.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/abp.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/coarse_grain.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/scenario_picker.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/_analyze_results.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/_expanded_basis.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/generate_tweezer_csv.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/custom_basis_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/diagnostics_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/dynamics_order_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/limitcycle_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/ou_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/time_dependent_forcing_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/time_fourier_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/van_der_pol_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_align_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_config.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_infer.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_plot.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_simulate.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_pursuit_demo.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/setup.cfg +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_dual_mask.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_parametric_mask.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_parametric_mask_abp.py +0 -0
- {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_same_particle_jacobian.py +0 -0
|
@@ -110,7 +110,8 @@ compute for robustness; route by data regime, not by habit:
|
|
|
110
110
|
| Quick exploration / huge dataset | linear | closed form, no initial guess |
|
|
111
111
|
| Measurement (localization) noise | parametric | profiles Λ; EIV instrument removes the noise bias |
|
|
112
112
|
| Coarse sampling (large Δt) | parametric | RK4 flow step replaces the Euler secant |
|
|
113
|
-
|
|
|
113
|
+
| Non-uniform sampling (irregular `t` / per-step `dt`) | parametric | per-interval flow steps + process covariances, no resampling |
|
|
114
|
+
| Model nonlinear in θ (NN drift, gated PSF) | parametric | the damped-GN / L-BFGS paths are the only option |
|
|
114
115
|
| Multi-particle / interacting | either | linear for speed; parametric when noise/coarse Δt too |
|
|
115
116
|
| SPDE / grid fields | linear | the (experimental) SPDE toolbox is linear-only |
|
|
116
117
|
|
|
@@ -133,30 +134,42 @@ agreement is itself a diagnostic.
|
|
|
133
134
|
| `inf.print_report()` / `inf.report_dict()` | Human / machine summary |
|
|
134
135
|
| `inf.compare_to_exact(model_exact=...)` | Validate against a known model |
|
|
135
136
|
| `inf.holdout_score(test)` | Held-out NMSE on `coll.split_time(...)` test data (data-abundant scenarios only) |
|
|
137
|
+
| `inf.compute_entropy_production()` | Dissipation of the observed dynamics (after a linear force fit; both engines): rate ± error + fluctuation bias and the AIC-debiased rate (`Sdot_debiased`), in k_B. Underdamped: positions-only via the even/odd split; `coefficients=` enables cross-fitting |
|
|
138
|
+
| `inf.time_reversal_split()` | Underdamped only: the fitted field's reversible/irreversible parts `(F_even, F_odd)` as callables |
|
|
136
139
|
|
|
137
140
|
* **Parametric estimators (robust, flexible; compute-intensive).**
|
|
138
141
|
Robust to measurement noise
|
|
139
142
|
and finite Δt. Methods `infer_force` and `infer_diffusion`
|
|
140
143
|
(implemented in `SFI.inference.parametric_core`). Takes a `Basis`
|
|
141
144
|
(linear-in-θ; PASTIS sparsification wired) or a `PSF` (general
|
|
142
|
-
parametric family):
|
|
143
|
-
defines the residual, the banded residual covariance
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
parametric family): an RK4 flow step per observation interval
|
|
146
|
+
defines the residual, the block-banded residual covariance is
|
|
147
|
+
whitened *exactly* (reverse-time banded-innovations NLL — no window
|
|
148
|
+
truncation, no tuning knobs), and `(D, Λ)` are profiled natively
|
|
149
|
+
(moment-estimator init + an exact-NLL refinement on cached fixed-θ
|
|
150
|
+
tensors). Non-uniform sampling (a `t` vector or per-step `dt`
|
|
151
|
+
array) fits directly — force and diffusion, both engines. Two inner
|
|
146
152
|
solvers, selected by `inner="auto"`:
|
|
147
153
|
|
|
148
|
-
* `inner="gn"` — direct Gauss–Newton on the
|
|
154
|
+
* `inner="gn"` — direct Gauss–Newton on the whitened Gram (the
|
|
149
155
|
linear-in-θ fast path) with the skip-trick errors-in-variables
|
|
150
156
|
instrument (`eiv=True`, consistent under measurement noise).
|
|
157
|
+
Nonlinear-in-θ PSFs run the same loop as damped Gauss–Newton,
|
|
158
|
+
instrument active.
|
|
151
159
|
* `inner="lbfgs"` — frozen-precision L-BFGS for non-linear-in-θ
|
|
152
|
-
families (neural-net drift, gated PSFs, …); raise
|
|
153
|
-
for large models
|
|
160
|
+
overdamped families (neural-net drift, gated PSFs, …); raise
|
|
161
|
+
`inner_maxiter` for large models (underdamped redirects to the
|
|
162
|
+
damped-GN path). Worked example:
|
|
154
163
|
[`examples/gallery/advanced/nn_force_demo.py`](examples/gallery/advanced/nn_force_demo.py).
|
|
155
164
|
|
|
165
|
+
Caveat: for (near-)clean data at coarse effective sampling pass
|
|
166
|
+
`eiv=False, n_substeps=2` — `eiv="auto"` does not inspect the noise
|
|
167
|
+
level, and the `(D, Λ)` profile can fit a spurious Λ there.
|
|
168
|
+
|
|
156
169
|
Multi-particle / interacting systems are supported in both overdamped
|
|
157
170
|
and underdamped regimes (the multi-particle path uses the per-edge
|
|
158
171
|
`d_x(same_particle=True)` / `d_v(same_particle=True)` Jacobian
|
|
159
|
-
protocol; O(N) per
|
|
172
|
+
protocol; O(N) per residual).
|
|
160
173
|
|
|
161
174
|
See
|
|
162
175
|
[`docs/source/inference/user_guide.rst`](docs/source/inference/user_guide.rst)
|
|
@@ -171,8 +184,9 @@ inf.infer_force_linear(basis, preset="auto") # 2. force ("auto"/"robust"
|
|
|
171
184
|
inf.infer_diffusion_linear() # 3. optional: constant sym D (default basis)
|
|
172
185
|
inf.compute_force_error() # 4. error analysis
|
|
173
186
|
inf.sparsify_force(criterion="PASTIS", p=0.1) # 5. optional: sparsity
|
|
174
|
-
inf.
|
|
175
|
-
inf.
|
|
187
|
+
inf.compute_entropy_production() # 6. optional: dissipation (OD & UD)
|
|
188
|
+
inf.print_report() # 7. summary
|
|
189
|
+
inf.compare_to_exact(model_exact=process) # 8. optional: validate
|
|
176
190
|
```
|
|
177
191
|
|
|
178
192
|
**Parametric-estimator sequence:**
|
|
@@ -336,7 +350,10 @@ Use `coll.T` (frames) and `coll.d` (dimension) instead of
|
|
|
336
350
|
- `*.bak` files, if you ever see one, are stale snapshots — ignore them.
|
|
337
351
|
|
|
338
352
|
Deprecated / soon-to-be-removed symbols (do not use in new code):
|
|
339
|
-
- (
|
|
353
|
+
- `infer_force(..., extra_radius=)` / `infer_force(..., n_cond=)` —
|
|
354
|
+
deprecated tuning knobs, accepted but **inert** (a
|
|
355
|
+
`DeprecationWarning` fires when set). The banded likelihood has no
|
|
356
|
+
window truncation to tune.
|
|
340
357
|
|
|
341
358
|
## 6. Testing, building, environment
|
|
342
359
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: StochasticForceInference
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: Stochastic Force Inference for Langevin SDEs
|
|
5
5
|
Author-email: Pierre Ronceray <pierre.ronceray@univ-amu.fr>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/ronceray/StochasticForceInference
|
|
8
|
-
Project-URL: Documentation, https://
|
|
8
|
+
Project-URL: Documentation, https://stochasticforceinference.readthedocs.io
|
|
9
9
|
Project-URL: Repository, https://github.com/ronceray/StochasticForceInference
|
|
10
10
|
Project-URL: Issues, https://github.com/ronceray/StochasticForceInference/issues
|
|
11
11
|
Project-URL: Changelog, https://github.com/ronceray/StochasticForceInference/blob/main/CHANGELOG.md
|
|
@@ -54,6 +54,10 @@ Dynamic: license-file
|
|
|
54
54
|
|
|
55
55
|
# Stochastic Force Inference (SFI)
|
|
56
56
|
|
|
57
|
+
[](https://stochasticforceinference.readthedocs.io/en/latest/)
|
|
58
|
+
[](https://pypi.org/project/StochasticForceInference/)
|
|
59
|
+
[](https://github.com/ronceray/StochasticForceInference/blob/main/LICENSE)
|
|
60
|
+
|
|
57
61
|
**Infer force and diffusion fields from stochastic trajectory data.**
|
|
58
62
|
|
|
59
63
|
SFI is a JAX-based Python package for learning the drift (force) and diffusion
|
|
@@ -165,14 +169,14 @@ inf.compare_to_exact(model_exact=proc)
|
|
|
165
169
|
## Documentation
|
|
166
170
|
|
|
167
171
|
Full documentation is available at
|
|
168
|
-
[
|
|
172
|
+
[stochasticforceinference.readthedocs.io](https://stochasticforceinference.readthedocs.io), including:
|
|
169
173
|
|
|
170
|
-
- **[Tutorial](https://
|
|
171
|
-
- **[Examples gallery](https://
|
|
172
|
-
- **[Model building](https://
|
|
173
|
-
- **[Trajectory handling](https://
|
|
174
|
-
- **[Running inference](https://
|
|
175
|
-
- **[API reference](https://
|
|
174
|
+
- **[Tutorial](https://stochasticforceinference.readthedocs.io/en/latest/gallery/ou_demo.html)** — end-to-end walkthrough
|
|
175
|
+
- **[Examples gallery](https://stochasticforceinference.readthedocs.io/en/latest/gallery/index.html)** — worked examples covering sparsity, multi-particle, and SPDE inference
|
|
176
|
+
- **[Model building](https://stochasticforceinference.readthedocs.io/en/latest/statefunc/user_guide.html)** — composable state functions
|
|
177
|
+
- **[Trajectory handling](https://stochasticforceinference.readthedocs.io/en/latest/trajectory/user_guide.html)** — data ingestion, masking, degradation
|
|
178
|
+
- **[Running inference](https://stochasticforceinference.readthedocs.io/en/latest/inference/user_guide.html)** — estimator choice, overdamped/underdamped engines
|
|
179
|
+
- **[API reference](https://stochasticforceinference.readthedocs.io/en/latest/api_frontend.html)** — full autodoc
|
|
176
180
|
|
|
177
181
|
## Package structure
|
|
178
182
|
|
|
@@ -192,11 +196,11 @@ guidance.
|
|
|
192
196
|
|
|
193
197
|
## Citation
|
|
194
198
|
|
|
195
|
-
If you use SFI
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
199
|
+
If you use SFI, please cite the software (see [`CITATION.cff`](CITATION.cff))
|
|
200
|
+
together with the method paper(s) relevant to the features you use. See
|
|
201
|
+
**[How to cite](https://stochasticforceinference.readthedocs.io/en/latest/#how-to-cite)** in the
|
|
202
|
+
documentation for the full, feature-specific list (overdamped, underdamped/ULI,
|
|
203
|
+
trapeze, and PASTIS references).
|
|
200
204
|
|
|
201
205
|
## License
|
|
202
206
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Stochastic Force Inference (SFI)
|
|
2
2
|
|
|
3
|
+
[](https://stochasticforceinference.readthedocs.io/en/latest/)
|
|
4
|
+
[](https://pypi.org/project/StochasticForceInference/)
|
|
5
|
+
[](https://github.com/ronceray/StochasticForceInference/blob/main/LICENSE)
|
|
6
|
+
|
|
3
7
|
**Infer force and diffusion fields from stochastic trajectory data.**
|
|
4
8
|
|
|
5
9
|
SFI is a JAX-based Python package for learning the drift (force) and diffusion
|
|
@@ -111,14 +115,14 @@ inf.compare_to_exact(model_exact=proc)
|
|
|
111
115
|
## Documentation
|
|
112
116
|
|
|
113
117
|
Full documentation is available at
|
|
114
|
-
[
|
|
118
|
+
[stochasticforceinference.readthedocs.io](https://stochasticforceinference.readthedocs.io), including:
|
|
115
119
|
|
|
116
|
-
- **[Tutorial](https://
|
|
117
|
-
- **[Examples gallery](https://
|
|
118
|
-
- **[Model building](https://
|
|
119
|
-
- **[Trajectory handling](https://
|
|
120
|
-
- **[Running inference](https://
|
|
121
|
-
- **[API reference](https://
|
|
120
|
+
- **[Tutorial](https://stochasticforceinference.readthedocs.io/en/latest/gallery/ou_demo.html)** — end-to-end walkthrough
|
|
121
|
+
- **[Examples gallery](https://stochasticforceinference.readthedocs.io/en/latest/gallery/index.html)** — worked examples covering sparsity, multi-particle, and SPDE inference
|
|
122
|
+
- **[Model building](https://stochasticforceinference.readthedocs.io/en/latest/statefunc/user_guide.html)** — composable state functions
|
|
123
|
+
- **[Trajectory handling](https://stochasticforceinference.readthedocs.io/en/latest/trajectory/user_guide.html)** — data ingestion, masking, degradation
|
|
124
|
+
- **[Running inference](https://stochasticforceinference.readthedocs.io/en/latest/inference/user_guide.html)** — estimator choice, overdamped/underdamped engines
|
|
125
|
+
- **[API reference](https://stochasticforceinference.readthedocs.io/en/latest/api_frontend.html)** — full autodoc
|
|
122
126
|
|
|
123
127
|
## Package structure
|
|
124
128
|
|
|
@@ -138,11 +142,11 @@ guidance.
|
|
|
138
142
|
|
|
139
143
|
## Citation
|
|
140
144
|
|
|
141
|
-
If you use SFI
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
If you use SFI, please cite the software (see [`CITATION.cff`](CITATION.cff))
|
|
146
|
+
together with the method paper(s) relevant to the features you use. See
|
|
147
|
+
**[How to cite](https://stochasticforceinference.readthedocs.io/en/latest/#how-to-cite)** in the
|
|
148
|
+
documentation for the full, feature-specific list (overdamped, underdamped/ULI,
|
|
149
|
+
trapeze, and PASTIS references).
|
|
146
150
|
|
|
147
151
|
## License
|
|
148
152
|
|
|
@@ -526,10 +526,15 @@ class BaseLangevinInference(ABC):
|
|
|
526
526
|
# Entropy production
|
|
527
527
|
if hasattr(self, "DeltaS"):
|
|
528
528
|
print(
|
|
529
|
-
"Entropy production
|
|
529
|
+
"Entropy production (total Delta S, estimated error):",
|
|
530
530
|
self.DeltaS,
|
|
531
531
|
self.error_DeltaS,
|
|
532
532
|
)
|
|
533
|
+
if hasattr(self, "DeltaS_debiased"):
|
|
534
|
+
print(
|
|
535
|
+
"Entropy production, fluctuation-bias subtracted (AIC):",
|
|
536
|
+
self.DeltaS_debiased,
|
|
537
|
+
)
|
|
533
538
|
|
|
534
539
|
# Force inference metrics
|
|
535
540
|
if hasattr(self, "force_predicted_MSE"):
|
|
@@ -649,6 +654,8 @@ class BaseLangevinInference(ABC):
|
|
|
649
654
|
if hasattr(self, "DeltaS"):
|
|
650
655
|
d["DeltaS"] = float(self.DeltaS)
|
|
651
656
|
d["error_DeltaS"] = float(self.error_DeltaS)
|
|
657
|
+
if hasattr(self, "DeltaS_debiased"):
|
|
658
|
+
d["DeltaS_debiased"] = float(self.DeltaS_debiased)
|
|
652
659
|
|
|
653
660
|
if hasattr(self, "force_coefficients"):
|
|
654
661
|
d["force_coefficients"] = np.asarray(self.force_coefficients)
|