odeanalysis 0.1.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.
- odeanalysis/__init__.py +296 -0
- odeanalysis/_api_policy.py +179 -0
- odeanalysis/_assumptions.py +89 -0
- odeanalysis/_block_common.py +106 -0
- odeanalysis/_formal_gauge.py +115 -0
- odeanalysis/_local.py +166 -0
- odeanalysis/_moser.py +271 -0
- odeanalysis/_power_simplify.py +32 -0
- odeanalysis/_spectral.py +215 -0
- odeanalysis/_symbolic_compare.py +16 -0
- odeanalysis/_symbolic_errors.py +19 -0
- odeanalysis/_zero.py +28 -0
- odeanalysis/analytic_continuation.py +343 -0
- odeanalysis/bell.py +87 -0
- odeanalysis/block_decomposition.py +1144 -0
- odeanalysis/canonical.py +471 -0
- odeanalysis/certified_continuation.py +160 -0
- odeanalysis/diagnostics.py +17 -0
- odeanalysis/dominance.py +134 -0
- odeanalysis/factorization.py +88 -0
- odeanalysis/formal.py +1028 -0
- odeanalysis/formal_basis.py +1009 -0
- odeanalysis/frobenius.py +349 -0
- odeanalysis/fuchsian.py +400 -0
- odeanalysis/interchange.py +604 -0
- odeanalysis/interoperability.py +143 -0
- odeanalysis/irregular.py +250 -0
- odeanalysis/kovacic.py +478 -0
- odeanalysis/levelt.py +679 -0
- odeanalysis/local_analysis.py +386 -0
- odeanalysis/local_structure.py +290 -0
- odeanalysis/matrix_series.py +357 -0
- odeanalysis/newton.py +501 -0
- odeanalysis/operator.py +193 -0
- odeanalysis/parameter_wkb.py +92 -0
- odeanalysis/py.typed +0 -0
- odeanalysis/series.py +199 -0
- odeanalysis/singularities.py +279 -0
- odeanalysis/stokes.py +782 -0
- odeanalysis/system.py +347 -0
- odeanalysis/system_analysis.py +615 -0
- odeanalysis/transition_loci.py +302 -0
- odeanalysis/turning.py +516 -0
- odeanalysis/wronskian.py +110 -0
- odeanalysis-0.1.0.dist-info/METADATA +180 -0
- odeanalysis-0.1.0.dist-info/RECORD +49 -0
- odeanalysis-0.1.0.dist-info/WHEEL +5 -0
- odeanalysis-0.1.0.dist-info/licenses/LICENSE +677 -0
- odeanalysis-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: odeanalysis
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Symbolic formal and structural analysis of ODEs and differential systems
|
|
5
|
+
Author-email: Bhuvanesh Bhatt <bhuvaneshbhatt@gmail.com>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://github.com/BhuvaneshBhatt/odeanalysis
|
|
8
|
+
Project-URL: Documentation, https://github.com/BhuvaneshBhatt/odeanalysis/tree/main/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/BhuvaneshBhatt/odeanalysis
|
|
10
|
+
Project-URL: Issues, https://github.com/BhuvaneshBhatt/odeanalysis/issues
|
|
11
|
+
Keywords: ordinary differential equations,symbolic computation,asymptotics,singularities,monodromy,Stokes phenomena
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Requires-Dist: sympy>=1.12
|
|
23
|
+
Requires-Dist: funcprops>=0.3.0
|
|
24
|
+
Requires-Dist: semialg>=1.3.0
|
|
25
|
+
Provides-Extra: test
|
|
26
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
27
|
+
Requires-Dist: hypothesis>=6; extra == "test"
|
|
28
|
+
Provides-Extra: asymptotic
|
|
29
|
+
Requires-Dist: asymptotic>=0.2.0; extra == "asymptotic"
|
|
30
|
+
Provides-Extra: certified
|
|
31
|
+
Requires-Dist: python-flint>=0.9.0; extra == "certified"
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff>=0.16; extra == "dev"
|
|
35
|
+
Requires-Dist: twine>=6; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# odeanalysis
|
|
39
|
+
|
|
40
|
+
`odeanalysis` is a SymPy-based package for exact symbolic, formal, structural,
|
|
41
|
+
and certified analysis of **scalar linear ODEs** and **first-order linear
|
|
42
|
+
differential systems**. It is designed for structural questions—singularities,
|
|
43
|
+
Frobenius/Levelt data, Newton and Levelt--Turrittin structure, Stokes geometry,
|
|
44
|
+
turning points, parameter transitions, exact continuation in selected families,
|
|
45
|
+
and rigorously enclosed numerical transport—not as a generic nonlinear ODE
|
|
46
|
+
solver.
|
|
47
|
+
|
|
48
|
+
The package distinguishes exact, certified-formal, certified-semialgebraic,
|
|
49
|
+
certified-numerical, structural, and incomplete results. See the
|
|
50
|
+
[certification model](./docs/certification-model.md) before interpreting a
|
|
51
|
+
`complete`, `certified`, or `structural_only` field.
|
|
52
|
+
|
|
53
|
+
## Choose a workflow
|
|
54
|
+
|
|
55
|
+
| Starting point | First guide | Typical public entry points |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| Scalar equation/operator | [Scalar workflow](./docs/scalar-workflow.md) | `analyze_ode_singularities`, `frobenius_analysis`, `differential_newton_polygon` |
|
|
58
|
+
| `Y' = A(x)Y+b(x)` | [System workflow](./docs/system-workflow.md) | `analyze_system_singularity`, `formal_system_analysis`, `system_stokes_geometry` |
|
|
59
|
+
| Symbolic parameters | [Parameter workflow](./docs/parameter-workflow.md) | `local_parameter_analysis`, `system_formal_type_stratification`, `parameterized_turning_analysis` |
|
|
60
|
+
| Rigorous numerical transport | [Certified continuation](./docs/certified-continuation.md) | `certified_system_continuation` |
|
|
61
|
+
|
|
62
|
+
The [documentation index](./docs/index.md) gives the complete map.
|
|
63
|
+
|
|
64
|
+
## Capability overview
|
|
65
|
+
|
|
66
|
+
| Capability | Scalar | Systems | Parameters | Evidence |
|
|
67
|
+
| --- | --- | --- | --- | --- |
|
|
68
|
+
| Local singularity classification | Yes | Yes | Yes | Exact where valuations decide |
|
|
69
|
+
| Frobenius / residue-Levelt structure | Yes | Yes | Yes | Exact / bounded formal |
|
|
70
|
+
| Irregular formal analysis | Yes | Yes | Yes | Exact formal within stated bounds |
|
|
71
|
+
| Ramification and exponential parts | Yes | Yes | Yes | Verified formal reduction |
|
|
72
|
+
| Structural Stokes geometry | Yes | Yes | Yes | Structural, not generic analytic constants |
|
|
73
|
+
| Turning points / uniform WKB | Yes | Via scalarization/model-specific paths | Yes | Exact local structure + formal models |
|
|
74
|
+
| Scalar ↔ system interoperability | Companion form | Cyclic scalarization | Bounded by cyclicity proof | Exact transformation replay |
|
|
75
|
+
| Canonical recognition | Selected families | Via scalarization where applicable | Partial | Exact pullback verification |
|
|
76
|
+
| Exact continuation | Selected canonical families | Selected inherited cases | Partial | Exact formulas |
|
|
77
|
+
| Certified numerical continuation | — | Constant homogeneous systems | — | Arb complex-ball enclosure |
|
|
78
|
+
| Generic analytic Stokes matrices | No | No | No | Requires stronger global analytic certification |
|
|
79
|
+
| Nonlinear ODEs | No | No | No | Outside scope |
|
|
80
|
+
|
|
81
|
+
The theorem-level boundary is in [capabilities and limitations](./docs/capabilities.md).
|
|
82
|
+
|
|
83
|
+
## Installation
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
python -m pip install odeanalysis
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Python 3.11+ is required. Core dependencies are SymPy, `funcprops`, and
|
|
90
|
+
`semialg`. Rigorous ball continuation uses:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
python -m pip install "odeanalysis[certified]"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Scalar quick start
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
import sympy as sp
|
|
100
|
+
from odeanalysis import analyze_ode_singularities, frobenius_analysis
|
|
101
|
+
|
|
102
|
+
x = sp.symbols("x")
|
|
103
|
+
y = sp.Function("y")
|
|
104
|
+
ode = x**2*sp.diff(y(x), x, 2) + x*sp.diff(y(x), x) + (x**2-1)*y(x)
|
|
105
|
+
|
|
106
|
+
singularities = analyze_ode_singularities(ode, y, x)
|
|
107
|
+
frobenius = frobenius_analysis(ode, y, x, point=0, terms=6)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Continue with [local analysis](./docs/local-analysis.md),
|
|
111
|
+
[Fuchsian analysis](./docs/fuchsian-analysis.md), [Newton invariants](./docs/newton-invariants.md),
|
|
112
|
+
[formal asymptotics](./docs/formal-asymptotics.md), [turning points](./docs/turning-points.md),
|
|
113
|
+
[canonical equations](./docs/canonical-equations.md), and
|
|
114
|
+
[analytic continuation](./docs/analytic-continuation.md).
|
|
115
|
+
|
|
116
|
+
## System quick start
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
import sympy as sp
|
|
120
|
+
from odeanalysis import FirstOrderSystem, analyze_system_singularity, formal_system_analysis, system_stokes_geometry
|
|
121
|
+
|
|
122
|
+
x = sp.symbols("x")
|
|
123
|
+
system = FirstOrderSystem(x, sp.ImmutableMatrix.diag(x**-2, -x**-2))
|
|
124
|
+
local = analyze_system_singularity(system, 0)
|
|
125
|
+
formal = formal_system_analysis(system, 0, adaptive=True)
|
|
126
|
+
stokes = system_stokes_geometry(formal)
|
|
127
|
+
assert formal.certificate.verified
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The system guides are [singularities](./docs/system-singularities.md),
|
|
131
|
+
[formal reduction](./docs/system-formal-analysis.md), [Stokes geometry](./docs/system-stokes.md),
|
|
132
|
+
and [parameter stratification](./docs/system-parameters.md). The overview remains in
|
|
133
|
+
[systems](./docs/systems.md) and the deeper reducer reference is
|
|
134
|
+
[Levelt--Turrittin](./docs/levelt-turrittin.md).
|
|
135
|
+
|
|
136
|
+
## Parameter quick start
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from odeanalysis import system_formal_type_stratification
|
|
140
|
+
|
|
141
|
+
a = sp.symbols("a", real=True)
|
|
142
|
+
family = FirstOrderSystem(x, sp.ImmutableMatrix.diag(a/x, -a/x))
|
|
143
|
+
strata = system_formal_type_stratification(family, (a,), max_resonance_order=2)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
A formal-type stratum certifies a **discrete bounded signature**: singularity
|
|
147
|
+
kind, leading rank, spectral multiplicity pattern, resonance orders within the
|
|
148
|
+
configured bound, ramification, block dimensions, exponential-block data, and
|
|
149
|
+
structural Stokes combinatorics. Continuously varying exponent values are not
|
|
150
|
+
claimed to be constant merely because a cell is open.
|
|
151
|
+
|
|
152
|
+
## Certified numerical continuation
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from odeanalysis import certified_system_continuation
|
|
156
|
+
|
|
157
|
+
constant = FirstOrderSystem(x, sp.ImmutableMatrix([[0, 1], [0, 0]]))
|
|
158
|
+
transport = certified_system_continuation(constant, 0, 2, precision_bits=192)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The current certified backend is deliberately narrow: for constant homogeneous
|
|
162
|
+
systems it encloses `exp((b-a)A)` with Arb complex balls. Variable-coefficient
|
|
163
|
+
validated integration is refused rather than replaced by tolerance-only
|
|
164
|
+
floating-point integration. See [certified continuation](./docs/certified-continuation.md).
|
|
165
|
+
|
|
166
|
+
## Examples, verification, and boundaries
|
|
167
|
+
|
|
168
|
+
Start with the [example gallery](./docs/example-gallery.md) and
|
|
169
|
+
[worked failures](./docs/worked-failures.md). The older compact
|
|
170
|
+
[examples reference](./docs/examples.md) is retained for API-oriented snippets.
|
|
171
|
+
|
|
172
|
+
For evidence semantics and conventions see [verification](./docs/verification.md),
|
|
173
|
+
[mathematical conventions](./docs/conventions.md), [API classification](./docs/api-classification.md), [public API index](./docs/api-reference.md),
|
|
174
|
+
[architecture](./docs/architecture.md), and [traceability](./docs/traceability.md).
|
|
175
|
+
[Dominance](./docs/dominance.md) documents sector ordering, and the
|
|
176
|
+
[user guide](./docs/user-guide.md) remains a broad reference.
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
GPL-3.0-only. See `LICENSE`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
odeanalysis/__init__.py,sha256=LSFREgi8ArCMdGXqOg7HNNRq_fKxLv4GkfXiRvNHDQA,8066
|
|
2
|
+
odeanalysis/_api_policy.py,sha256=4yUWxUYpEJtogHzK7sFrNDp5vJJQ0USHTLH-3qiMlW8,7893
|
|
3
|
+
odeanalysis/_assumptions.py,sha256=AsQ5xY-nOi5XaPq0bv5kE5p9_CTV4kGYWeVYzqsJglw,3362
|
|
4
|
+
odeanalysis/_block_common.py,sha256=vwZQCzMu5-uH79_PoTJ_EKKDNYWej4WQE8dLvmHbBVM,3311
|
|
5
|
+
odeanalysis/_formal_gauge.py,sha256=JKi-w2tE1w1dPIUNIeFdvCdl5h2zRLVDIan7whO9fDM,4076
|
|
6
|
+
odeanalysis/_local.py,sha256=1QAceK4eFmgnEemyZv-Rrzye3UMGB67OK9BJdHy40sA,5515
|
|
7
|
+
odeanalysis/_moser.py,sha256=x1iuGKLLp39Af_D5xbqaIxGgW1ayvHuCEKXb0Oc4gkU,9192
|
|
8
|
+
odeanalysis/_power_simplify.py,sha256=tWvWitpe0AtMrVQ0F69FRQv4C-F8O_i48n0FlHUyWUU,1145
|
|
9
|
+
odeanalysis/_spectral.py,sha256=zNJr9aBNgln0ZLiPaEjQxAVp7P_Odgx13ccueocctdk,7523
|
|
10
|
+
odeanalysis/_symbolic_compare.py,sha256=oMZu5jpwP4nBq4TrJhv2nM5zZiVFpzfjg8xgUbzla3Q,446
|
|
11
|
+
odeanalysis/_symbolic_errors.py,sha256=sn5HDzgAHpFw0fp85zKsxAeFK_NGtOimbrMnyvR0WYI,511
|
|
12
|
+
odeanalysis/_zero.py,sha256=2Cygkzno1yKnTSnTcu2IIkhjCE1iZQ2DkUnRSjMC5uc,800
|
|
13
|
+
odeanalysis/analytic_continuation.py,sha256=LCNdUZZ-40SNbM9ojAx0ANkfww4FpynbADVNE1zVquc,12498
|
|
14
|
+
odeanalysis/bell.py,sha256=H2c0P8nfW-fnNqvZf4IJrabQOHhLx1nCLE5b_2z5EMs,2760
|
|
15
|
+
odeanalysis/block_decomposition.py,sha256=oJB08q4bpcTuDBvbtWu7ri3wn87KRF0f1Xv2VZ24lzA,41532
|
|
16
|
+
odeanalysis/canonical.py,sha256=IMkgVFD9fvSfwGqV5BB-RyjKtg2LQtJH3eeHbWudtvg,16808
|
|
17
|
+
odeanalysis/certified_continuation.py,sha256=iEm_2rg00oNGxnqehzAYkJDd-tLU3aM8jL-oM50pAe4,5184
|
|
18
|
+
odeanalysis/diagnostics.py,sha256=1KcRtZ1PUmYRYm9U3zE2UKNlAl1s3msalgpqH3xJ9Jk,408
|
|
19
|
+
odeanalysis/dominance.py,sha256=iLAGmm585o2mSLIIjiNIFdr1zhf5xZ9DgjnW-PEyY90,4408
|
|
20
|
+
odeanalysis/factorization.py,sha256=uATx1LurIzEwK11aa26d_DdaQj2TV2f1ydQoUkvxa10,3093
|
|
21
|
+
odeanalysis/formal.py,sha256=2ZLMyR1xk2xcEMYdWp7bgENt-1HueThXpHNXow5LvNU,36807
|
|
22
|
+
odeanalysis/formal_basis.py,sha256=b5PkjReSKNz9L-B4d6ewgCY6qwmPPOfa9yjuGDLXHhE,36796
|
|
23
|
+
odeanalysis/frobenius.py,sha256=5oHDcxyD9tE1KO-AUPdqVhHmxoRB172c2B651gRHjNg,11593
|
|
24
|
+
odeanalysis/fuchsian.py,sha256=RiDPDv8XoQZZsQSF9WvuJJAdv8zS345VKZMbOObazgM,13314
|
|
25
|
+
odeanalysis/interchange.py,sha256=3iSnKKcyuZaLMA730oWSVH9f2H3PID5wj73O8VUxyT4,22498
|
|
26
|
+
odeanalysis/interoperability.py,sha256=bMZPHiz9fsN1MIwHd-Fx4atmgAairVcvIPtBU-EORiA,4922
|
|
27
|
+
odeanalysis/irregular.py,sha256=8i1_2e1gtXjWRUFk_ZO5T0uUx5KOw4uN0QD-C6YhPUA,8667
|
|
28
|
+
odeanalysis/kovacic.py,sha256=TwFiKxI0_JjAD4vUDDzggi5rVkui8czRYAEcf7k--_w,16481
|
|
29
|
+
odeanalysis/levelt.py,sha256=coO-xyifd208JZI8Uq9k8j5Wn0yFJ-iaqwLwpBv_tIM,24686
|
|
30
|
+
odeanalysis/local_analysis.py,sha256=ZDMPxqVbLUBXpxqVBejfde5pZFnu5NjH5t13tdXB4lk,13841
|
|
31
|
+
odeanalysis/local_structure.py,sha256=jBpc3ZbLFPBBrZyaLM1EGEKc3GS873CAr3hU2ePH7KA,10528
|
|
32
|
+
odeanalysis/matrix_series.py,sha256=6Y0EBeMgiM6PqIH1RXgalRCCvZua5_GNhLT36I8E-7I,12983
|
|
33
|
+
odeanalysis/newton.py,sha256=HxBvZ4Gop0qrXhlKiPff0kqeVFneXGgo54-Tryvko14,16750
|
|
34
|
+
odeanalysis/operator.py,sha256=l7pWUVZw_kMJEtvgYfOo_v9m7MR-enpsrAC40gwddn0,7148
|
|
35
|
+
odeanalysis/parameter_wkb.py,sha256=o4zE3FdzTbeJtLkQc-DpkY7hW4HBsb_iFEtVNiKegMA,3247
|
|
36
|
+
odeanalysis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
odeanalysis/series.py,sha256=hh2zH4GOPHqw62OEv9CZzWyYOnFo7uDIiOoHByezyvI,6824
|
|
38
|
+
odeanalysis/singularities.py,sha256=kTWFAYbe5PV1VV1NFIwyMzWPsxsnYcGcjkv_5XGlIhQ,8909
|
|
39
|
+
odeanalysis/stokes.py,sha256=WmYTWcQ00ki_UW6QBAa-zd3n2gvrXZ6yC9E_q1x2Pbc,29491
|
|
40
|
+
odeanalysis/system.py,sha256=ZcC3DbKALRj6ff-ZktoM-tzEhLl24p2JhlMCpeM5AHs,12683
|
|
41
|
+
odeanalysis/system_analysis.py,sha256=wq7x1o_YiSx085p1b59M2oEFR3ZmW8RbGyom7Nr26XY,21828
|
|
42
|
+
odeanalysis/transition_loci.py,sha256=tmceFYTJysGpuS_lIEIEgGq1IzkjtDOkFhgZ7MQ8Mp8,11721
|
|
43
|
+
odeanalysis/turning.py,sha256=erjz-H30kx-PNxfpOEqOO9oRkYefZ8WnNhm1L5VXpnk,18243
|
|
44
|
+
odeanalysis/wronskian.py,sha256=fs0CcgqhB6FVbJdQxnJoPkbVeaOAnzD9vyNZBs_sG4E,3937
|
|
45
|
+
odeanalysis-0.1.0.dist-info/licenses/LICENSE,sha256=sK9DawbJdOPTZI-T1wvMZR7bQVXC_DaJ3qYOK_rrXyU,35223
|
|
46
|
+
odeanalysis-0.1.0.dist-info/METADATA,sha256=tOcYcHzY9OkQSzyWuQwBDeXi3D7sC-cmk6zweDABg5s,8300
|
|
47
|
+
odeanalysis-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
48
|
+
odeanalysis-0.1.0.dist-info/top_level.txt,sha256=X7hf1HCGLf3CxoCWtt1ML8af5JoAnN15avwZHbmTfGo,12
|
|
49
|
+
odeanalysis-0.1.0.dist-info/RECORD,,
|