StochasticForceInference 2.0.0__py3-none-any.whl

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 (104) hide show
  1. SFI/__init__.py +64 -0
  2. SFI/bases/__init__.py +85 -0
  3. SFI/bases/constants.py +492 -0
  4. SFI/bases/linear.py +325 -0
  5. SFI/bases/monomials.py +218 -0
  6. SFI/bases/pairs.py +998 -0
  7. SFI/bases/spde.py +1537 -0
  8. SFI/diagnostics/__init__.py +60 -0
  9. SFI/diagnostics/assess.py +87 -0
  10. SFI/diagnostics/dynamics_order.py +621 -0
  11. SFI/diagnostics/plotting.py +226 -0
  12. SFI/diagnostics/report.py +238 -0
  13. SFI/diagnostics/residual_tests.py +395 -0
  14. SFI/diagnostics/residuals.py +688 -0
  15. SFI/inference/__init__.py +58 -0
  16. SFI/inference/base.py +1460 -0
  17. SFI/inference/optimizers.py +200 -0
  18. SFI/inference/overdamped.py +1214 -0
  19. SFI/inference/parametric_core/__init__.py +34 -0
  20. SFI/inference/parametric_core/covariance.py +232 -0
  21. SFI/inference/parametric_core/driver.py +272 -0
  22. SFI/inference/parametric_core/flow.py +149 -0
  23. SFI/inference/parametric_core/flow_multi.py +362 -0
  24. SFI/inference/parametric_core/flow_ud.py +168 -0
  25. SFI/inference/parametric_core/jacobians.py +540 -0
  26. SFI/inference/parametric_core/objective.py +286 -0
  27. SFI/inference/parametric_core/objective_ud.py +253 -0
  28. SFI/inference/parametric_core/precision.py +229 -0
  29. SFI/inference/parametric_core/solve.py +763 -0
  30. SFI/inference/result.py +362 -0
  31. SFI/inference/serialization.py +245 -0
  32. SFI/inference/sparse/__init__.py +67 -0
  33. SFI/inference/sparse/base.py +43 -0
  34. SFI/inference/sparse/beam.py +303 -0
  35. SFI/inference/sparse/greedy.py +151 -0
  36. SFI/inference/sparse/hillclimb.py +307 -0
  37. SFI/inference/sparse/lasso.py +178 -0
  38. SFI/inference/sparse/metrics.py +78 -0
  39. SFI/inference/sparse/result.py +278 -0
  40. SFI/inference/sparse/scorer.py +323 -0
  41. SFI/inference/sparse/stlsq.py +165 -0
  42. SFI/inference/sparsity.py +40 -0
  43. SFI/inference/underdamped.py +1355 -0
  44. SFI/integrate/__init__.py +38 -0
  45. SFI/integrate/api.py +920 -0
  46. SFI/integrate/integrand.py +402 -0
  47. SFI/integrate/rk4.py +156 -0
  48. SFI/integrate/timeops.py +174 -0
  49. SFI/langevin/__init__.py +29 -0
  50. SFI/langevin/base.py +863 -0
  51. SFI/langevin/chunked.py +225 -0
  52. SFI/langevin/noise.py +446 -0
  53. SFI/langevin/overdamped.py +560 -0
  54. SFI/langevin/underdamped.py +448 -0
  55. SFI/statefunc/__init__.py +49 -0
  56. SFI/statefunc/basis.py +87 -0
  57. SFI/statefunc/core/runtime.py +47 -0
  58. SFI/statefunc/factory.py +346 -0
  59. SFI/statefunc/interactor.py +90 -0
  60. SFI/statefunc/layout/__init__.py +29 -0
  61. SFI/statefunc/layout/_base.py +186 -0
  62. SFI/statefunc/layout/_eval_compiler.py +453 -0
  63. SFI/statefunc/layout/_fd_atoms.py +196 -0
  64. SFI/statefunc/layout/_grid.py +878 -0
  65. SFI/statefunc/layout/_sectors.py +166 -0
  66. SFI/statefunc/memhint.py +222 -0
  67. SFI/statefunc/nodes/__init__.py +56 -0
  68. SFI/statefunc/nodes/base.py +318 -0
  69. SFI/statefunc/nodes/contract.py +422 -0
  70. SFI/statefunc/nodes/interactions/__init__.py +23 -0
  71. SFI/statefunc/nodes/interactions/dispatcher.py +1365 -0
  72. SFI/statefunc/nodes/interactions/prepare.py +161 -0
  73. SFI/statefunc/nodes/interactions/specs.py +362 -0
  74. SFI/statefunc/nodes/interactions/stencils.py +718 -0
  75. SFI/statefunc/nodes/leaf.py +530 -0
  76. SFI/statefunc/nodes/ops/__init__.py +27 -0
  77. SFI/statefunc/nodes/ops/concat.py +28 -0
  78. SFI/statefunc/nodes/ops/derivative.py +447 -0
  79. SFI/statefunc/nodes/ops/einsum.py +120 -0
  80. SFI/statefunc/nodes/ops/linear.py +153 -0
  81. SFI/statefunc/nodes/ops/mapn.py +138 -0
  82. SFI/statefunc/nodes/ops/reshape_rank.py +158 -0
  83. SFI/statefunc/nodes/ops/slice.py +83 -0
  84. SFI/statefunc/params.py +309 -0
  85. SFI/statefunc/psf.py +112 -0
  86. SFI/statefunc/sf.py +104 -0
  87. SFI/statefunc/stateexpr.py +1243 -0
  88. SFI/statefunc/structexpr.py +1003 -0
  89. SFI/trajectory/__init__.py +31 -0
  90. SFI/trajectory/collection.py +1122 -0
  91. SFI/trajectory/dataset.py +1164 -0
  92. SFI/trajectory/degrade.py +1108 -0
  93. SFI/trajectory/io.py +1027 -0
  94. SFI/trajectory/reserved_extras.py +129 -0
  95. SFI/utils/__init__.py +17 -0
  96. SFI/utils/formatting.py +308 -0
  97. SFI/utils/maths.py +185 -0
  98. SFI/utils/neighbors.py +162 -0
  99. SFI/utils/plotting.py +1936 -0
  100. stochasticforceinference-2.0.0.dist-info/METADATA +203 -0
  101. stochasticforceinference-2.0.0.dist-info/RECORD +104 -0
  102. stochasticforceinference-2.0.0.dist-info/WHEEL +5 -0
  103. stochasticforceinference-2.0.0.dist-info/licenses/LICENSE +21 -0
  104. stochasticforceinference-2.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,203 @@
1
+ Metadata-Version: 2.4
2
+ Name: StochasticForceInference
3
+ Version: 2.0.0
4
+ Summary: Stochastic Force Inference for Langevin SDEs
5
+ Author-email: Pierre Ronceray <pierre.ronceray@univ-amu.fr>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/ronceray/StochasticForceInference
8
+ Project-URL: Documentation, https://sfi.readthedocs.io
9
+ Project-URL: Repository, https://github.com/ronceray/StochasticForceInference
10
+ Project-URL: Issues, https://github.com/ronceray/StochasticForceInference/issues
11
+ Project-URL: Changelog, https://github.com/ronceray/StochasticForceInference/blob/main/CHANGELOG.md
12
+ Keywords: stochastic force inference,Langevin dynamics,stochastic differential equations,diffusion,inference,sparse model selection,active matter,biophysics,JAX
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Scientific/Engineering :: Physics
22
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
23
+ Requires-Python: >=3.11
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy
27
+ Requires-Dist: scipy
28
+ Requires-Dist: jax>=0.10
29
+ Requires-Dist: jaxlib
30
+ Requires-Dist: pandas
31
+ Requires-Dist: matplotlib
32
+ Requires-Dist: pyyaml
33
+ Requires-Dist: equinox>=0.12
34
+ Requires-Dist: opt-einsum
35
+ Provides-Extra: docs
36
+ Requires-Dist: sphinx; extra == "docs"
37
+ Requires-Dist: furo; extra == "docs"
38
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
39
+ Requires-Dist: myst-parser; extra == "docs"
40
+ Requires-Dist: sphinx-gallery; extra == "docs"
41
+ Requires-Dist: sphinxcontrib-video; extra == "docs"
42
+ Requires-Dist: sphinxcontrib-mermaid; extra == "docs"
43
+ Provides-Extra: dev
44
+ Requires-Dist: pytest; extra == "dev"
45
+ Requires-Dist: ruff; extra == "dev"
46
+ Requires-Dist: pyright; extra == "dev"
47
+ Requires-Dist: StochasticForceInference[docs]; extra == "dev"
48
+ Provides-Extra: io
49
+ Requires-Dist: pyarrow>=14; extra == "io"
50
+ Requires-Dist: h5py>=3.9; extra == "io"
51
+ Requires-Dist: pandas>=2.0; extra == "io"
52
+ Requires-Dist: PyYAML>=6.0; extra == "io"
53
+ Dynamic: license-file
54
+
55
+ # Stochastic Force Inference (SFI)
56
+
57
+ **Infer force and diffusion fields from stochastic trajectory data.**
58
+
59
+ SFI is a JAX-based Python package for learning the drift (force) and diffusion
60
+ of Langevin stochastic differential equations from time-series observations.
61
+ It handles both overdamped and underdamped dynamics, supports interacting
62
+ particles and spatially-extended (SPDE) systems, and provides built-in
63
+ diagnostics, sparse model selection, and bootstrapped validation.
64
+
65
+ > **Designed for experimental data.** SFI is built for real experimental
66
+ > trajectories (tracked particles, cells, organisms, …) where *no dynamical
67
+ > model pre-exists*. Two first-class estimator families share one API:
68
+ > fast closed-form **linear estimators** that require no initial guess, and
69
+ > **parametric estimators** that model measurement noise and finite sampling
70
+ > explicitly — robust where real data is hard. The PASTIS information
71
+ > criterion rigorously identifies which terms the data actually supports.
72
+ > Synthetic examples in the gallery serve as runnable demonstrations.
73
+
74
+ ## Key features
75
+
76
+ - **Two estimator families** — closed-form linear estimators
77
+ (`infer_force_linear`, seconds even on large datasets) and parametric
78
+ estimators (`infer_force` / `infer_diffusion`: noise-aware likelihood
79
+ fit, robust to localization error and coarse sampling, accepts
80
+ nonlinear models such as neural-network drifts).
81
+ - **Overdamped & underdamped inference** — works with position-only data;
82
+ velocities are reconstructed automatically for underdamped systems.
83
+ - **Composable state functions** — build force/diffusion models from
84
+ monomials, custom basis functions, pair interactions, or arbitrary
85
+ parametric families, all with automatic differentiation via JAX.
86
+ - **Sparse model selection** — Pareto-front beam search with AIC / BIC /
87
+ PASTIS information criteria.
88
+ - **Simulation** — simulate Langevin SDEs (Euler–Maruyama) from the same
89
+ model objects used for inference.
90
+ - **Trajectory toolkit** — mask-aware increments, synthetic degradation
91
+ (noise, downsampling, data loss, motion blur), streaming for large
92
+ datasets, I/O (CSV / Parquet / HDF5).
93
+ - **Diagnostics** — compare inferred fields to exact models, compute
94
+ normalized errors, generate bootstrapped trajectories.
95
+
96
+ ## Installation
97
+
98
+ ```bash
99
+ pip install StochasticForceInference
100
+ ```
101
+
102
+ For development (editable install with test/doc dependencies):
103
+
104
+ ```bash
105
+ git clone https://github.com/ronceray/StochasticForceInference.git
106
+ cd StochasticForceInference
107
+ pip install -e ".[dev,io]"
108
+ ```
109
+
110
+ > **Note:** SFI requires Python ≥ 3.11 and JAX ≥ 0.10.
111
+
112
+ ## Quick start
113
+
114
+ For **experimental data**, load your trajectories and infer directly:
115
+
116
+ ```python
117
+ import numpy as np
118
+ from SFI import OverdampedLangevinInference, TrajectoryCollection
119
+ from SFI.bases import monomials_up_to
120
+
121
+ # Load your tracked data (positions: T×d array, dt: time step)
122
+ positions = np.load("my_experiment.npz")["positions"] # shape (T, d)
123
+ coll = TrajectoryCollection.from_arrays(X=positions, dt=0.01)
124
+
125
+ # Infer using a polynomial basis — no model needed
126
+ B = monomials_up_to(order=3, dim=2, rank="vector")
127
+ inf = OverdampedLangevinInference(coll)
128
+ inf.compute_diffusion_constant()
129
+ inf.infer_force_linear(B)
130
+ inf.sparsify_force(criterion="PASTIS") # optional: find the minimal model
131
+ inf.print_report()
132
+
133
+ # Noisy or coarsely-sampled recordings? Use the parametric estimator
134
+ # instead: inf.infer_force(B) — it models the measurement noise natively.
135
+ ```
136
+
137
+ For a **synthetic example** (useful for validation):
138
+
139
+ ```python
140
+ import jax.numpy as jnp
141
+ from jax import random
142
+
143
+ from SFI import OverdampedLangevinInference
144
+ from SFI.bases import X, monomials_up_to
145
+ from SFI.langevin import OverdampedProcess
146
+
147
+ # 1. Build a force model (Ornstein–Uhlenbeck: F = -k x) and simulate a trajectory.
148
+ # X(dim) is the identity basis x ↦ x; theta_F holds its coefficient, so F(x) = -x.
149
+ proc = OverdampedProcess(F=X(dim=2), D=jnp.eye(2) * 0.5, theta_F=jnp.array([-1.0]))
150
+ proc.initialize(jnp.zeros(2))
151
+ coll = proc.simulate(dt=0.01, Nsteps=10_000, key=random.PRNGKey(0))
152
+
153
+ # 2. Infer from the trajectory using a generic polynomial basis
154
+ B = monomials_up_to(order=2, dim=2, rank="vector")
155
+ inf = OverdampedLangevinInference(coll)
156
+ inf.compute_diffusion_constant()
157
+ inf.infer_force_linear(B)
158
+ inf.compute_force_error()
159
+
160
+ # 3. Inspect results and validate against the known model
161
+ inf.print_report()
162
+ inf.compare_to_exact(model_exact=proc)
163
+ ```
164
+
165
+ ## Documentation
166
+
167
+ Full documentation is available at
168
+ [sfi.readthedocs.io](https://sfi.readthedocs.io), including:
169
+
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
176
+
177
+ ## Package structure
178
+
179
+ | Subpackage | Purpose |
180
+ | ---------------- | ---------------------------------------------------- |
181
+ | `SFI.statefunc` | Composable state functions: `Basis`, `PSF`, `SF` |
182
+ | `SFI.inference` | Overdamped & underdamped inference engines |
183
+ | `SFI.trajectory` | `TrajectoryCollection` / `TrajectoryDataset` |
184
+ | `SFI.langevin` | Langevin simulators (`OverdampedProcess`, …) |
185
+ | `SFI.bases` | Ready-made basis builders (monomials, constants, …) |
186
+ | `SFI.integrate` | Time-averaging integration engine |
187
+ | `SFI.utils` | Math helpers, formatting, plotting |
188
+
189
+ For contributors and AI coding agents: see [`AGENTS.md`](https://github.com/ronceray/StochasticForceInference/blob/main/AGENTS.md) for
190
+ the canonical imports table, task playbooks, and "do not re-implement"
191
+ guidance.
192
+
193
+ ## Citation
194
+
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)
200
+
201
+ ## License
202
+
203
+ MIT — see [LICENSE](https://github.com/ronceray/StochasticForceInference/blob/main/LICENSE) for details.
@@ -0,0 +1,104 @@
1
+ SFI/__init__.py,sha256=G6_bGEfioluafQW0nRp6jsemvnDUQHnvtAPRSIwvVwg,2532
2
+ SFI/bases/__init__.py,sha256=7gLibjZf4lTMiDAWXkFe6BVuqBjmd7g3YVdhvemPm1E,2017
3
+ SFI/bases/constants.py,sha256=D-HK8DcJX-rdqdXp-qN8Q2CIjycAEV98gpoi5aPWwzA,16191
4
+ SFI/bases/linear.py,sha256=-gYMw1RYGJnyYzgjtPadO3CfmWpyG0zH6OtuViVkL58,9356
5
+ SFI/bases/monomials.py,sha256=AahbhZ3RehXLrNJQiaE3MgqT0Qgc1bKijLXG671_8P8,7356
6
+ SFI/bases/pairs.py,sha256=GCGe9HNlMSZ-3R6s9sUKefNvb8ffeBBagvdS4zcTJmA,33291
7
+ SFI/bases/spde.py,sha256=kKULdl8K7oD_LMzJsptLVroQ1ajiWbZSAy-Dhux4PaA,53473
8
+ SFI/diagnostics/__init__.py,sha256=awm1qNxprailKPyjCUJvUzMGdwoTv2TTer7DTbUnFu8,1978
9
+ SFI/diagnostics/assess.py,sha256=3Cd6nVFU9e2y5sEAefZlJohHg1HFfNtSkYh1Fd4z72U,2761
10
+ SFI/diagnostics/dynamics_order.py,sha256=pzihIFeXtud_fozDUBvWeJ7d2oiKcpPM3KsoD_gjvj0,24631
11
+ SFI/diagnostics/plotting.py,sha256=IO-2cIwJJpMGe_gWgadrkEWezILDt74D8F8a8JF_5zI,8683
12
+ SFI/diagnostics/report.py,sha256=7ZJSiVLX4R7nhLLk7i0WnzzkJHdq_FAo6lLvjieXytY,9758
13
+ SFI/diagnostics/residual_tests.py,sha256=-iJG9ezR9OliVLuyiTeF9tdxhwmq62NzO3kkhyuZfVk,14272
14
+ SFI/diagnostics/residuals.py,sha256=BcQdvwlirlas4XTsNqQ3_hNwvW9dUUoqGjg7QUpGqeg,28614
15
+ SFI/inference/__init__.py,sha256=Q83CG20J5q5aQhpfEEcVSEY9FTuDrupHcNGpl18f0JY,1766
16
+ SFI/inference/base.py,sha256=7alBtF8_-FyZMRuYD7hU8oWERt-1awggnG-guyuvSR8,61601
17
+ SFI/inference/optimizers.py,sha256=-KY-dhQ1muMMFW75_r2Zyr4_ffNIT03p9AyrDbKM6DA,6105
18
+ SFI/inference/overdamped.py,sha256=v41sZBE3_c-OUnXscbEyPCW8rKeo4bCcyrdadRDkWoQ,49867
19
+ SFI/inference/result.py,sha256=NlWUpgc09Bah_-ncETlpZ3cgycv9uNT9hqhQb-c-gOY,13307
20
+ SFI/inference/serialization.py,sha256=5QV0LwQTNP-mvcI3rbzBbiHDJie5PFwiVWxFIkt5qZI,7576
21
+ SFI/inference/sparsity.py,sha256=ETee2PdZJd8FG3JyTZ-Ru-BgTSk5YATGanE1Hi_KFLc,1144
22
+ SFI/inference/underdamped.py,sha256=lhJc4VRYWS5exaRMaykPesxEC70f54FTAVeclE9L4Zo,53804
23
+ SFI/inference/parametric_core/__init__.py,sha256=XAUD2L_mK1MkyOiCmLomCRsFCmAWMP3cHujLxLkVeho,1122
24
+ SFI/inference/parametric_core/covariance.py,sha256=wG2KgVTdc1T4e_12DgzXdClLxKjRULZCUnw9m6DuoTY,8367
25
+ SFI/inference/parametric_core/driver.py,sha256=cE_AC1zaqQRakHgpPWDmj3HV3zxJVPop031hpKl2P5g,10138
26
+ SFI/inference/parametric_core/flow.py,sha256=4L4jqWEB9Xce6i2gNESl5CRaH-fGT1onvl9dMdef0PA,5168
27
+ SFI/inference/parametric_core/flow_multi.py,sha256=HAl-5JxYsqXg1w2FrM_RZGtYobMnHT3Q0mQJdVNXwIA,15517
28
+ SFI/inference/parametric_core/flow_ud.py,sha256=Hrbp6a7NGVG8XJ7pY_bIKlQqNFX7My3BlMS_FcMdqBw,6874
29
+ SFI/inference/parametric_core/jacobians.py,sha256=dGex49woeNMg5M23hfuNdWlElSHqvUtumF9wlBtS6rE,17947
30
+ SFI/inference/parametric_core/objective.py,sha256=s_XDSIQds53UVsH_WpM5tBDI2PP-d0cjD-x9m4UBZjI,12073
31
+ SFI/inference/parametric_core/objective_ud.py,sha256=jG_ZMWnSLG9Og0xIiKC0vwRzx-ccRHLGGz4FKIYBOgU,10846
32
+ SFI/inference/parametric_core/precision.py,sha256=j_m3YaqIH5fwWhxcWdNcuORUQjSZvlrh4QvEAgFHYBA,9535
33
+ SFI/inference/parametric_core/solve.py,sha256=PcuTWBBLYIKWgtnLQ40SRFOEF0Ruy-Nj0GqWMpqiJDc,31139
34
+ SFI/inference/sparse/__init__.py,sha256=ZAmzLNbXjB37XlRCDDIwzxyZ_38mQuaS72kdhfdKkQk,2111
35
+ SFI/inference/sparse/base.py,sha256=PruHTaZE9KusaDQWe4mWqpv6inzbF6HOgA45wOsjx_4,1140
36
+ SFI/inference/sparse/beam.py,sha256=UzewDBajDKpe-wc2TEBgSYYV-mTF7ErmjI6PRbH-6N8,11325
37
+ SFI/inference/sparse/greedy.py,sha256=iM5vPV34RjMDSKSJJnbn44Irr6Q8hQB2Wmy-RC4gUQQ,5384
38
+ SFI/inference/sparse/hillclimb.py,sha256=UcH7eef_EniFSrpMWBb9404FmDPo57FaKcmfNis0VS4,10055
39
+ SFI/inference/sparse/lasso.py,sha256=ZlzMOT0I19TU5b8R5tcjtguXf9yinJrt7HmkUGZEnmk,5713
40
+ SFI/inference/sparse/metrics.py,sha256=4JGmQnTL8-zsUZFBhAdy9DFmD_KCwh0tutEOYdbbzx8,2229
41
+ SFI/inference/sparse/result.py,sha256=TEtqnG3GKwMCEdIDjmJ67yP_EmLg4NoOrOG4NilYGHY,10770
42
+ SFI/inference/sparse/scorer.py,sha256=dMSC-JBWXAcHAeR0M0PZxTt9NL1uwQ-IadP3NH5sOLQ,11593
43
+ SFI/inference/sparse/stlsq.py,sha256=ni61EFQBvFlrltFuxEZ8WvcQHXhDmgbkH5gB7DFpIMo,5827
44
+ SFI/integrate/__init__.py,sha256=DxDHulVQoPaFaexZWi0q_IabZUoYAqncuXyD7NJWh_8,1148
45
+ SFI/integrate/api.py,sha256=aMqRh6sP_UfuTbQftQOKFzt0xtxeUpRC3IhGWhSkVEI,32227
46
+ SFI/integrate/integrand.py,sha256=9yU1vSGb1mcA93p3DTDNqcTLZknkDbE6X_DWsgZbqoo,14945
47
+ SFI/integrate/rk4.py,sha256=c8FApu4ivO3n4D4KXKMuRcSV8Ky93r2qkRYgfLVu1GQ,4011
48
+ SFI/integrate/timeops.py,sha256=43iHZA0XFuOsM78mOEdum5kmRZAfrdcEOMHLzjNKtWk,5115
49
+ SFI/langevin/__init__.py,sha256=eDrfb_LzbylJepKTKLKvZOd1XPn7dEz6jLFaF0CSJaA,856
50
+ SFI/langevin/base.py,sha256=LPdhksGfO0QrceiaMCe-adO4OKdbiXi79jZzhELNhKI,35555
51
+ SFI/langevin/chunked.py,sha256=zR4He_VQkAQ4g-kMgVMmhGZBpX8MIwavnLzp3FJ8tu0,8865
52
+ SFI/langevin/noise.py,sha256=exUemuIbQxziPYJWMr8whmaVMPzuRPgyfrgnGarLbVI,15424
53
+ SFI/langevin/overdamped.py,sha256=_zVEOCj98LzesJg0Iy16FGalSOgCVAkgJrwqIbc8kDs,22383
54
+ SFI/langevin/underdamped.py,sha256=6eIM48bjc-fDs8vBClkLix8ef75sTpfRi4UtAoZ9Y0M,16699
55
+ SFI/statefunc/__init__.py,sha256=xY4_XvYhx_HwMS15pWySp-VX5NQ0CLp87jXHgTIva3M,1090
56
+ SFI/statefunc/basis.py,sha256=TT-px_Dqf-Lo-O76LKLmsd3Ck85ZnmNP7dSBn_PzVn0,3262
57
+ SFI/statefunc/factory.py,sha256=oyfRoR6iLGKU2z3QOUFv-QSk4Jr7NlFPCgk0Hn11rUw,11651
58
+ SFI/statefunc/interactor.py,sha256=UatLbYMsbxCrAGwsTAI7cZMpiyWFY3bR8MaSOexsD84,3023
59
+ SFI/statefunc/memhint.py,sha256=fsEHfYA-mH0v-L5kG3lNDS9dOp1jSxLF2XpWGL6WgKI,8298
60
+ SFI/statefunc/params.py,sha256=H1B1o-yCvSdyytjhBB1xIUlBZ5F45XLlauk3U9foEaQ,11816
61
+ SFI/statefunc/psf.py,sha256=nedjvS36aNyrGYKQcBCTJ9dGCZYbMki_nVPUUh8Oopk,4745
62
+ SFI/statefunc/sf.py,sha256=jqgDXbm6fcpdJBVUb-4Tq2q8gyU07Z7zBvN90yY8yr8,3935
63
+ SFI/statefunc/stateexpr.py,sha256=chtNKXPCou6E3rUl0ZwYjIrLMirmlgOP5yru-UGG8sA,50148
64
+ SFI/statefunc/structexpr.py,sha256=CTBQt76eq4GQgWdhN0Iy24j8dyfthNmj24cGY5Cf_40,35930
65
+ SFI/statefunc/core/runtime.py,sha256=aV0ySIkeiJ5wKDaf6iCXx4iQVfc9YAp5Np4VP3-1ZN8,1605
66
+ SFI/statefunc/layout/__init__.py,sha256=y1sGUCVbbS9hjxjzZl4r2LtINILuWeHUciQS0XaFLnU,527
67
+ SFI/statefunc/layout/_base.py,sha256=rTEnkVuBSF6PjBde-dR1nwpasUKjwGv6exRB2n0DyA4,6313
68
+ SFI/statefunc/layout/_eval_compiler.py,sha256=EO1kiykQStHdq_jJf3lk4pBeqRon_MqUfukToFHLBqo,15827
69
+ SFI/statefunc/layout/_fd_atoms.py,sha256=7r-QNI613IJSru3DQuizB6V00ut1_Rt1xLwAJbKnzQg,6396
70
+ SFI/statefunc/layout/_grid.py,sha256=OvMk9io2h7V36vNOuFD5xnEAdNzzlFoCHz-n8lRzMvM,30214
71
+ SFI/statefunc/layout/_sectors.py,sha256=BAxkVZi2nxFywJ1Ya6R4H3z1MKFJkTZWS-_-zUcC2-M,5102
72
+ SFI/statefunc/nodes/__init__.py,sha256=GVnqt0J2-A8G22BDFkpaQmfpwZxLlG-XmUazzMrIk3I,1009
73
+ SFI/statefunc/nodes/base.py,sha256=3y_82QhPmlmICeSt5b5AtYhqatAkiKJzpO8k_kfn8YI,12448
74
+ SFI/statefunc/nodes/contract.py,sha256=vW889sMY965j4xYU4iE2G5QXI7vut-fJLtU-jMUwW10,18858
75
+ SFI/statefunc/nodes/leaf.py,sha256=3kkTeEdw-iCNQYqhp7OGgC_PrNwsuqKdEWBhwW7tPwg,23733
76
+ SFI/statefunc/nodes/interactions/__init__.py,sha256=CSqz_gNquCZLBzICA-jFic6zClD-Egb7lmi7v7xnzt4,407
77
+ SFI/statefunc/nodes/interactions/dispatcher.py,sha256=ojjwUIOeH0pq9P4B0LcK_fDJouN9zHty2cDCyKGJw-4,60432
78
+ SFI/statefunc/nodes/interactions/prepare.py,sha256=4dC2jOpq_mbKns8kMqfkxFezecxqyMJIEoL9wlaKlYM,5805
79
+ SFI/statefunc/nodes/interactions/specs.py,sha256=hHD4scMsvZ5U6JY2uj5IN0GLfUn_YmZItHaJ2uD4IR4,14180
80
+ SFI/statefunc/nodes/interactions/stencils.py,sha256=56CGT8nHCMciZBkW0CvcmwCvoxbQ9YYjUCvM2t1AyCc,25497
81
+ SFI/statefunc/nodes/ops/__init__.py,sha256=txF9cmJrY7VjtxYi1l-RhVuvNSzGHMzkWaIkQHVqs-c,660
82
+ SFI/statefunc/nodes/ops/concat.py,sha256=ektUPUEmwEIGiqVwwAd9n0Bp3IQJbuUnoCOHOytbmjs,1169
83
+ SFI/statefunc/nodes/ops/derivative.py,sha256=R9zel1PwNyzLsTWk32844vLH5ydwMwJoEP2oDck_6yY,19064
84
+ SFI/statefunc/nodes/ops/einsum.py,sha256=vExr_y8sEponDraEl6FM6yEfoc6p319y-cGYVY0AaVI,5145
85
+ SFI/statefunc/nodes/ops/linear.py,sha256=D7sFobmSCwHtk_4-krQ8R7oob7aeSfTLUSFe4HzaE7Y,6950
86
+ SFI/statefunc/nodes/ops/mapn.py,sha256=bF6i_vA84HYDBQqBMR0J7Fvl0wCOQd6oIud-a9-jJv0,5946
87
+ SFI/statefunc/nodes/ops/reshape_rank.py,sha256=TXz_H07ntajDM8Xuoh1PuKG7U8Rzqm-JL09ASQ8UpkQ,6253
88
+ SFI/statefunc/nodes/ops/slice.py,sha256=ttQMSVoDEZtN2WvmN7hny17dXN1GIRGW1rYBjlJMnDM,3140
89
+ SFI/trajectory/__init__.py,sha256=msLdkUQJgpSy8ZYquKEtl0BSmRhXY1VoGxbB7LdxxzU,864
90
+ SFI/trajectory/collection.py,sha256=AsmscrMvMJwceyZJk8z43imb0EkJBl_XLRxCzwIGLbs,42729
91
+ SFI/trajectory/dataset.py,sha256=1MmVAnFOEMax9-k9__HIbm30OZT6H-NoBY4qUOUcgeI,43610
92
+ SFI/trajectory/degrade.py,sha256=rCVaRd5lG-OTbO4CaXuVhPeI0YkRuHEhYnXAaQDnxyo,39731
93
+ SFI/trajectory/io.py,sha256=wlORgrkthM1dGqa_QfxF6MoosWUghd8n2VQDDz2CEpw,39517
94
+ SFI/trajectory/reserved_extras.py,sha256=KndA_qDYulCXY4sTqHSayUDCCxW3ebaoZDpjLvJQPxA,4376
95
+ SFI/utils/__init__.py,sha256=moqTV7vO1E1cRiJCQeOtk3uFaHdKqkpWLUTKGe5NTBQ,437
96
+ SFI/utils/formatting.py,sha256=Hgc6HClEoaejLzQfU1VvOuZx6SL4YxkP9ZXb1vwmIrw,10622
97
+ SFI/utils/maths.py,sha256=wkB3A3agoLhergKlIJplrm3Pg_6EYZEidrPqEU_NVFI,7745
98
+ SFI/utils/neighbors.py,sha256=3-rLU0zRz6_PxfUrq8TaFDJstJiIm8Y2HvLakEjYZ08,4861
99
+ SFI/utils/plotting.py,sha256=Z9fZC7igDrgG9m0JInGFU2VvzR1tQrHJfUfY39Pgr_M,61751
100
+ stochasticforceinference-2.0.0.dist-info/licenses/LICENSE,sha256=25o1rLAxoVqogpI7QHgadeoXNC7OnN_JMTf9BixSK-k,1077
101
+ stochasticforceinference-2.0.0.dist-info/METADATA,sha256=Av_MsrR0PcEA2lAU1JXTKK-5kBwTlBW9hNDXybFBOMU,8933
102
+ stochasticforceinference-2.0.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
103
+ stochasticforceinference-2.0.0.dist-info/top_level.txt,sha256=F-Qyhd0iykkc4ejLJRG2XZCoN75253kJq4Jy4lPks-A,4
104
+ stochasticforceinference-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020-2026 Pierre Ronceray
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.