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.
Files changed (165) hide show
  1. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/AGENTS.md +29 -12
  2. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/PKG-INFO +18 -14
  3. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/README.md +16 -12
  4. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/base.py +8 -1
  5. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/overdamped.py +317 -54
  6. stochasticforceinference-2.0.1/SFI/inference/parametric_core/__init__.py +32 -0
  7. stochasticforceinference-2.0.1/SFI/inference/parametric_core/banded.py +279 -0
  8. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/covariance.py +105 -14
  9. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/driver.py +55 -5
  10. stochasticforceinference-2.0.1/SFI/inference/parametric_core/flow_multi.py +494 -0
  11. stochasticforceinference-2.0.1/SFI/inference/parametric_core/gram.py +21 -0
  12. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/jacobians.py +191 -49
  13. stochasticforceinference-2.0.1/SFI/inference/parametric_core/precompute.py +221 -0
  14. stochasticforceinference-2.0.1/SFI/inference/parametric_core/runner.py +853 -0
  15. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/solve.py +421 -142
  16. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/underdamped.py +510 -26
  17. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/rk4.py +1 -1
  18. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/underdamped.py +121 -20
  19. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/derivative.py +11 -0
  20. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/reshape_rank.py +5 -0
  21. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/slice.py +5 -0
  22. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/dataset.py +14 -10
  23. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/PKG-INFO +18 -14
  24. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/SOURCES.txt +7 -5
  25. stochasticforceinference-2.0.1/examples/_gallery_utils/bench_utils.py +27 -0
  26. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/helpers.py +11 -0
  27. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_align_demo.py +3 -3
  28. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_nonreciprocal_demo.py +11 -6
  29. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/abp_to_spde_demo.py +3 -3
  30. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/flocking_3d_demo.py +4 -4
  31. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/multi_experiment_demo.py +2 -2
  32. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/advanced/nn_force_demo.py +161 -70
  33. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/anisotropic_diffusion_demo.py +2 -3
  34. stochasticforceinference-2.0.1/examples/gallery/entropy_production_demo.py +561 -0
  35. stochasticforceinference-2.0.1/examples/gallery/entropy_production_underdamped_demo.py +464 -0
  36. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/experimental_workflow_demo.py +2 -2
  37. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/gray_scott_demo.py +2 -2
  38. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/home_range_demo.py +2 -2
  39. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/lorenz_demo.py +0 -1
  40. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/lotka_volterra_demo.py +7 -7
  41. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/multiplicative_diffusion_demo.py +3 -5
  42. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/velocity_dependent_noise_demo.py +3 -4
  43. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/pyproject.toml +2 -2
  44. stochasticforceinference-2.0.0/SFI/inference/parametric_core/__init__.py +0 -34
  45. stochasticforceinference-2.0.0/SFI/inference/parametric_core/flow_multi.py +0 -362
  46. stochasticforceinference-2.0.0/SFI/inference/parametric_core/objective.py +0 -286
  47. stochasticforceinference-2.0.0/SFI/inference/parametric_core/objective_ud.py +0 -253
  48. stochasticforceinference-2.0.0/SFI/inference/parametric_core/precision.py +0 -229
  49. stochasticforceinference-2.0.0/examples/convert_active_nematic_mat.py +0 -409
  50. stochasticforceinference-2.0.0/examples/gallery/active_nematic_demo.py +0 -910
  51. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/CONTRIBUTING.md +0 -0
  52. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/GALLERY_STYLE_GUIDE.md +0 -0
  53. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/LICENSE +0 -0
  54. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/MANIFEST.in +0 -0
  55. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/__init__.py +0 -0
  56. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/__init__.py +0 -0
  57. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/constants.py +0 -0
  58. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/linear.py +0 -0
  59. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/monomials.py +0 -0
  60. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/pairs.py +0 -0
  61. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/bases/spde.py +0 -0
  62. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/__init__.py +0 -0
  63. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/assess.py +0 -0
  64. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/dynamics_order.py +0 -0
  65. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/plotting.py +0 -0
  66. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/report.py +0 -0
  67. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/residual_tests.py +0 -0
  68. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/diagnostics/residuals.py +0 -0
  69. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/__init__.py +0 -0
  70. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/optimizers.py +0 -0
  71. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/flow.py +0 -0
  72. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/parametric_core/flow_ud.py +0 -0
  73. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/result.py +0 -0
  74. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/serialization.py +0 -0
  75. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/__init__.py +0 -0
  76. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/base.py +0 -0
  77. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/beam.py +0 -0
  78. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/greedy.py +0 -0
  79. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/hillclimb.py +0 -0
  80. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/lasso.py +0 -0
  81. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/metrics.py +0 -0
  82. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/result.py +0 -0
  83. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/scorer.py +0 -0
  84. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparse/stlsq.py +0 -0
  85. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/inference/sparsity.py +0 -0
  86. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/__init__.py +0 -0
  87. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/api.py +0 -0
  88. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/integrand.py +0 -0
  89. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/integrate/timeops.py +0 -0
  90. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/__init__.py +0 -0
  91. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/base.py +0 -0
  92. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/chunked.py +0 -0
  93. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/noise.py +0 -0
  94. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/langevin/overdamped.py +0 -0
  95. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/__init__.py +0 -0
  96. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/basis.py +0 -0
  97. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/core/runtime.py +0 -0
  98. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/factory.py +0 -0
  99. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/interactor.py +0 -0
  100. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/__init__.py +0 -0
  101. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_base.py +0 -0
  102. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_eval_compiler.py +0 -0
  103. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_fd_atoms.py +0 -0
  104. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_grid.py +0 -0
  105. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/layout/_sectors.py +0 -0
  106. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/memhint.py +0 -0
  107. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/__init__.py +0 -0
  108. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/base.py +0 -0
  109. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/contract.py +0 -0
  110. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/__init__.py +0 -0
  111. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/dispatcher.py +0 -0
  112. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/prepare.py +0 -0
  113. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/specs.py +0 -0
  114. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/interactions/stencils.py +0 -0
  115. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/leaf.py +0 -0
  116. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/__init__.py +0 -0
  117. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/concat.py +0 -0
  118. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/einsum.py +0 -0
  119. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/linear.py +0 -0
  120. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/nodes/ops/mapn.py +0 -0
  121. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/params.py +0 -0
  122. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/psf.py +0 -0
  123. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/sf.py +0 -0
  124. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/stateexpr.py +0 -0
  125. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/statefunc/structexpr.py +0 -0
  126. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/__init__.py +0 -0
  127. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/collection.py +0 -0
  128. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/degrade.py +0 -0
  129. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/io.py +0 -0
  130. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/trajectory/reserved_extras.py +0 -0
  131. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/__init__.py +0 -0
  132. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/formatting.py +0 -0
  133. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/maths.py +0 -0
  134. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/neighbors.py +0 -0
  135. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/SFI/utils/plotting.py +0 -0
  136. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/dependency_links.txt +0 -0
  137. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/requires.txt +0 -0
  138. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/StochasticForceInference.egg-info/top_level.txt +0 -0
  139. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/__init__.py +0 -0
  140. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/abp.py +0 -0
  141. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/coarse_grain.py +0 -0
  142. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/_gallery_utils/scenario_picker.py +0 -0
  143. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/_analyze_results.py +0 -0
  144. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/_expanded_basis.py +0 -0
  145. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/experimental_data/generate_tweezer_csv.py +0 -0
  146. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/custom_basis_demo.py +0 -0
  147. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/diagnostics_demo.py +0 -0
  148. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/dynamics_order_demo.py +0 -0
  149. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/limitcycle_demo.py +0 -0
  150. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/ou_demo.py +0 -0
  151. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/time_dependent_forcing_demo.py +0 -0
  152. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/time_fourier_demo.py +0 -0
  153. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/gallery/van_der_pol_demo.py +0 -0
  154. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_align_demo.py +0 -0
  155. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_config.py +0 -0
  156. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_demo.py +0 -0
  157. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_infer.py +0 -0
  158. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_plot.py +0 -0
  159. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_largescale_simulate.py +0 -0
  160. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/examples/manual_examples/abp_pursuit_demo.py +0 -0
  161. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/setup.cfg +0 -0
  162. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_dual_mask.py +0 -0
  163. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_parametric_mask.py +0 -0
  164. {stochasticforceinference-2.0.0 → stochasticforceinference-2.0.1}/tests/test_parametric_mask_abp.py +0 -0
  165. {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
- | Model nonlinear in θ (NN drift, gated PSF) | parametric | the L-BFGS path is the only option |
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): a single RK4 flow step per observation interval
143
- defines the residual, the banded residual covariance gives a
144
- windowed-precision NLL, and `(D, Λ)` are profiled natively
145
- (moment-estimator init + one conditional-NLL refinement). Two inner
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 windowed Gram (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 `inner_maxiter`
153
- for large models. Worked example:
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 window).
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.print_report() # 6. summary
175
- inf.compare_to_exact(model_exact=process) # 7. optional: validate
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
- - (none currently)
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.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://sfi.readthedocs.io
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
+ [![Documentation](https://readthedocs.org/projects/stochasticforceinference/badge/?version=latest)](https://stochasticforceinference.readthedocs.io/en/latest/)
58
+ [![PyPI](https://img.shields.io/pypi/v/StochasticForceInference.svg)](https://pypi.org/project/StochasticForceInference/)
59
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- [sfi.readthedocs.io](https://sfi.readthedocs.io), including:
172
+ [stochasticforceinference.readthedocs.io](https://stochasticforceinference.readthedocs.io), including:
169
173
 
170
- - **[Tutorial](https://sfi.readthedocs.io/en/latest/gallery/ou_demo.html)** — end-to-end walkthrough
171
- - **[Examples gallery](https://sfi.readthedocs.io/en/latest/gallery/index.html)** — worked examples covering sparsity, multi-particle, and SPDE inference
172
- - **[Model building](https://sfi.readthedocs.io/en/latest/statefunc/user_guide.html)** — composable state functions
173
- - **[Trajectory handling](https://sfi.readthedocs.io/en/latest/trajectory/user_guide.html)** — data ingestion, masking, degradation
174
- - **[Running inference](https://sfi.readthedocs.io/en/latest/inference/user_guide.html)** — estimator choice, overdamped/underdamped engines
175
- - **[API reference](https://sfi.readthedocs.io/en/latest/api_frontend.html)** — full autodoc
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 in your research, please cite:
196
-
197
- > Frishman, A. & Ronceray, P., *Learning force fields from stochastic
198
- > trajectories*, Physical Review X (2020).
199
- > [DOI: 10.1103/PhysRevX.10.021009](https://doi.org/10.1103/PhysRevX.10.021009)
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
+ [![Documentation](https://readthedocs.org/projects/stochasticforceinference/badge/?version=latest)](https://stochasticforceinference.readthedocs.io/en/latest/)
4
+ [![PyPI](https://img.shields.io/pypi/v/StochasticForceInference.svg)](https://pypi.org/project/StochasticForceInference/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- [sfi.readthedocs.io](https://sfi.readthedocs.io), including:
118
+ [stochasticforceinference.readthedocs.io](https://stochasticforceinference.readthedocs.io), including:
115
119
 
116
- - **[Tutorial](https://sfi.readthedocs.io/en/latest/gallery/ou_demo.html)** — end-to-end walkthrough
117
- - **[Examples gallery](https://sfi.readthedocs.io/en/latest/gallery/index.html)** — worked examples covering sparsity, multi-particle, and SPDE inference
118
- - **[Model building](https://sfi.readthedocs.io/en/latest/statefunc/user_guide.html)** — composable state functions
119
- - **[Trajectory handling](https://sfi.readthedocs.io/en/latest/trajectory/user_guide.html)** — data ingestion, masking, degradation
120
- - **[Running inference](https://sfi.readthedocs.io/en/latest/inference/user_guide.html)** — estimator choice, overdamped/underdamped engines
121
- - **[API reference](https://sfi.readthedocs.io/en/latest/api_frontend.html)** — full autodoc
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 in your research, please cite:
142
-
143
- > Frishman, A. & Ronceray, P., *Learning force fields from stochastic
144
- > trajectories*, Physical Review X (2020).
145
- > [DOI: 10.1103/PhysRevX.10.021009](https://doi.org/10.1103/PhysRevX.10.021009)
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: inferred/bootstrapped error:",
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)