solve-nivp 0.2.0.dev2__tar.gz → 0.2.0.dev3__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 (129) hide show
  1. {solve_nivp-0.2.0.dev2/src/solve_nivp.egg-info → solve_nivp-0.2.0.dev3}/PKG-INFO +1 -1
  2. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.alart_curnier_contact.rst +12 -0
  3. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.block_system.rst +7 -0
  4. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.contact.rst +17 -0
  5. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.desaxce_contact.rst +13 -0
  6. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.integrations.rst +4 -0
  7. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.macklin_contact.rst +17 -0
  8. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.moreau_jean_fremond.rst +17 -0
  9. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.ncp_contact.rst +19 -0
  10. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.nonlinear_solvers.rst +2 -6
  11. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.pcr.rst +6 -0
  12. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.projected_radau_contact.rst +21 -0
  13. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.projections.rst +4 -0
  14. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.rattle_contact.rst +25 -0
  15. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.rl.callbacks.rst +7 -0
  16. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.rl.env.rst +7 -0
  17. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.rl.rst +16 -0
  18. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.rst +38 -0
  19. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.soccp_pgs.rst +19 -0
  20. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.solvers.block_system.rst +11 -0
  21. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.solvers.nonlinear_solvers.rst +10 -0
  22. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.solvers.pcr.rst +10 -0
  23. solve_nivp-0.2.0.dev3/docs/source/api/solve_nivp.solvers.rst +13 -0
  24. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/conf.py +17 -5
  25. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/index.rst +2 -1
  26. solve_nivp-0.2.0.dev3/docs/source/public_api.rst +93 -0
  27. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/pyproject.toml +1 -1
  28. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/__init__.py +18 -3
  29. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/adaptive_integrator.py +199 -3
  30. solve_nivp-0.2.0.dev3/src/solve_nivp/mjf_integration.py +189 -0
  31. solve_nivp-0.2.0.dev3/src/solve_nivp/moreau_jean_fremond.py +2131 -0
  32. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/ncp_contact.py +100 -0
  33. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/projected_radau_contact.py +119 -9
  34. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/soccp_pgs.py +19 -0
  35. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/solvers/nonlinear_solvers.py +216 -8
  36. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3/src/solve_nivp.egg-info}/PKG-INFO +1 -1
  37. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp.egg-info/SOURCES.txt +19 -2
  38. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_auto_h0_and_dae_weighting.py +56 -0
  39. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_large_scale_solver_fixes.py +105 -2
  40. solve_nivp-0.2.0.dev3/tests/test_moreau_jean_fremond.py +797 -0
  41. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_ncp_contact.py +120 -1
  42. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_per_dof_tolerances.py +29 -0
  43. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_projected_radau_contact.py +101 -0
  44. solve_nivp-0.2.0.dev2/docs/source/api/solve_nivp.rl.rst +0 -15
  45. solve_nivp-0.2.0.dev2/docs/source/api/solve_nivp.rst +0 -25
  46. solve_nivp-0.2.0.dev2/docs/source/modules.rst +0 -17
  47. solve_nivp-0.2.0.dev2/docs/source/solve_nivp.rst +0 -58
  48. solve_nivp-0.2.0.dev2/src/solve_nivp/moreau_jean_fremond.py +0 -699
  49. solve_nivp-0.2.0.dev2/tests/test_moreau_jean_fremond.py +0 -346
  50. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/LICENSE +0 -0
  51. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/MANIFEST.in +0 -0
  52. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/README.md +0 -0
  53. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/Makefile +0 -0
  54. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/make.bat +0 -0
  55. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.ODESolver.rst +0 -0
  56. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.ODESystem.rst +0 -0
  57. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.adaptive_integrator.rst +0 -0
  58. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/api/solve_nivp.rl.dependency.rst +0 -0
  59. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/development.rst +0 -0
  60. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/examples.rst +0 -0
  61. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/docs/source/quickstart.rst +0 -0
  62. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/pytest.ini +0 -0
  63. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/setup.cfg +0 -0
  64. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/ODESolver.py +0 -0
  65. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/ODESystem.py +0 -0
  66. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/_numba_accel.py +0 -0
  67. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/_selftest.py +0 -0
  68. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/alart_curnier_contact.py +0 -0
  69. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/block_system.py +0 -0
  70. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/contact.py +0 -0
  71. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/desaxce_contact.py +0 -0
  72. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/integrations.py +0 -0
  73. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/macklin_contact.py +0 -0
  74. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/nonlinear_solvers.py +0 -0
  75. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/pcr.py +0 -0
  76. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/projections.py +0 -0
  77. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/rattle_contact.py +0 -0
  78. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/rl/__init__.py +0 -0
  79. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/rl/callbacks.py +0 -0
  80. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/rl/dependency.py +0 -0
  81. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/rl/env.py +0 -0
  82. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/solvers/__init__.py +0 -0
  83. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/solvers/block_system.py +0 -0
  84. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp/solvers/pcr.py +0 -0
  85. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp.egg-info/dependency_links.txt +0 -0
  86. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp.egg-info/entry_points.txt +0 -0
  87. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp.egg-info/requires.txt +0 -0
  88. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/src/solve_nivp.egg-info/top_level.txt +0 -0
  89. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/__init__.py +0 -0
  90. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_3d_and_anisotropic_contact.py +0 -0
  91. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_active_set_filter.py +0 -0
  92. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_alart_curnier_contact.py +0 -0
  93. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_algebraic_constraint_projection.py +0 -0
  94. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_anisotropic_soc_projection.py +0 -0
  95. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_block_system.py +0 -0
  96. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_bouncing_ball_schur_comparison.py +0 -0
  97. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_build_impulse_contact.py +0 -0
  98. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_c_extract_contact.py +0 -0
  99. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_composite_contact_projection.py +0 -0
  100. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_coulomb_projection.py +0 -0
  101. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_coulomb_projection_jacobian.py +0 -0
  102. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_desaxce_contact.py +0 -0
  103. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_dilatancy.py +0 -0
  104. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_error_predictive_rejection.py +0 -0
  105. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_general_moreau_projection.py +0 -0
  106. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_globalization.py +0 -0
  107. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_identity_newton_linear_solver.py +0 -0
  108. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_import_and_api.py +0 -0
  109. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_integrators_added.py +0 -0
  110. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_jacobian_scaling.py +0 -0
  111. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_macklin_contact.py +0 -0
  112. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_mu_scaled_soc_projection.py +0 -0
  113. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_ncp_schur_integration.py +0 -0
  114. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_nl_recovery_cap.py +0 -0
  115. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_nonlinear_solvers_added.py +0 -0
  116. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_pcr.py +0 -0
  117. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_prestress_soc.py +0 -0
  118. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_prestressed_fault_dynamic_helper.py +0 -0
  119. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_projection_batch_equivalence.py +0 -0
  120. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_projections_added.py +0 -0
  121. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_radau_iia.py +0 -0
  122. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_rattle_integrator.py +0 -0
  123. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_rattle_local_slider.py +0 -0
  124. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_sdirk2.py +0 -0
  125. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_sdirk2_soc_contact.py +0 -0
  126. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_soccp_pgs.py +0 -0
  127. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_sparse_semismooth_newton.py +0 -0
  128. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_t_eval.py +0 -0
  129. {solve_nivp-0.2.0.dev2 → solve_nivp-0.2.0.dev3}/tests/test_threading_time_and_fk.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solve_nivp
3
- Version: 0.2.0.dev2
3
+ Version: 0.2.0.dev3
4
4
  Summary: A Python toolkit for integrating nonsmooth dynamical systems
5
5
  Author: David Riley, Ioannis Stefanou
6
6
  License-Expression: MIT
@@ -0,0 +1,12 @@
1
+ solve\_nivp.alart\_curnier\_contact
2
+ ===================================
3
+
4
+ .. automodule:: solve_nivp.alart_curnier_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_alart_curnier_contact
12
+ build_dynamic_alart_curnier_contact
@@ -0,0 +1,7 @@
1
+ solve\_nivp.block\_system
2
+ =========================
3
+
4
+ .. automodule:: solve_nivp.block_system
5
+
6
+ Compatibility module. New code should prefer
7
+ ``solve_nivp.solvers.block_system``.
@@ -0,0 +1,17 @@
1
+ solve\_nivp.contact
2
+ ===================
3
+
4
+ .. automodule:: solve_nivp.contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_impulse_contact
12
+
13
+ .. rubric:: Classes
14
+
15
+ .. autosummary::
16
+
17
+ ContactSystem
@@ -0,0 +1,13 @@
1
+ solve\_nivp.desaxce\_contact
2
+ ============================
3
+
4
+ .. automodule:: solve_nivp.desaxce_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_dynamic_desaxce_contact
12
+ build_dynamic_desaxce_projected_contact
13
+ build_dynamic_desaxce_residual_contact
@@ -10,9 +10,13 @@ solve\_nivp.integrations
10
10
 
11
11
  AlgebraicBackwardEuler
12
12
  BackwardEuler
13
+ BackwardEulerSchur
13
14
  CompositeMethod
14
15
  EmbeddedBETR
15
16
  IntegrationMethod
17
+ RadauIIA
18
+ RadauIIASchur
19
+ SDIRK2
16
20
  ThetaMethod
17
21
  Trapezoidal
18
22
 
@@ -0,0 +1,17 @@
1
+ solve\_nivp.macklin\_contact
2
+ ============================
3
+
4
+ .. automodule:: solve_nivp.macklin_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_macklin_contact_blocked
12
+
13
+ .. rubric:: Classes
14
+
15
+ .. autosummary::
16
+
17
+ MacklinBlockSystem
@@ -0,0 +1,17 @@
1
+ solve\_nivp.moreau\_jean\_fremond
2
+ =================================
3
+
4
+ .. automodule:: solve_nivp.moreau_jean_fremond
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_moreau_jean_fremond
12
+
13
+ .. rubric:: Classes
14
+
15
+ .. autosummary::
16
+
17
+ MoreauJeanFremondStepper
@@ -0,0 +1,19 @@
1
+ solve\_nivp.ncp\_contact
2
+ ========================
3
+
4
+ .. automodule:: solve_nivp.ncp_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_dynamic_ncp_contact
12
+ build_ncp_contact
13
+ build_ncp_contact_blocked
14
+
15
+ .. rubric:: Classes
16
+
17
+ .. autosummary::
18
+
19
+ NCPBlockSystem
@@ -3,10 +3,6 @@ solve\_nivp.nonlinear\_solvers
3
3
 
4
4
  .. automodule:: solve_nivp.nonlinear_solvers
5
5
 
6
+ Compatibility module. New code should prefer
7
+ ``solve_nivp.solvers.nonlinear_solvers``.
6
8
 
7
- .. rubric:: Classes
8
-
9
- .. autosummary::
10
-
11
- ImplicitEquationSolver
12
-
@@ -0,0 +1,6 @@
1
+ solve\_nivp.pcr
2
+ ===============
3
+
4
+ .. automodule:: solve_nivp.pcr
5
+
6
+ Compatibility module. New code should prefer ``solve_nivp.solvers.pcr``.
@@ -0,0 +1,21 @@
1
+ solve\_nivp.projected\_radau\_contact
2
+ =====================================
3
+
4
+ .. automodule:: solve_nivp.projected_radau_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_projected_radau_contact
12
+
13
+ .. rubric:: Classes
14
+
15
+ .. autosummary::
16
+
17
+ DeSaxceProjectedConeLaw
18
+ NCPNormalConeLaw
19
+ ProjectedRadauContactLaw
20
+ ProjectedRadauContactModel
21
+ SOCFischerBurmeisterLaw
@@ -8,9 +8,13 @@ solve\_nivp.projections
8
8
 
9
9
  .. autosummary::
10
10
 
11
+ AlgebraicConstraintProjection
12
+ AnisotropicSOCProjection
13
+ CompositeContactProjection
11
14
  CoulombProjection
12
15
  GeneralMoreauVIProjection
13
16
  IdentityProjection
17
+ MoreauSOCProjection
14
18
  MuScaledSOCProjection
15
19
  Projection
16
20
  SignProjection
@@ -0,0 +1,25 @@
1
+ solve\_nivp.rattle\_contact
2
+ ===========================
3
+
4
+ .. automodule:: solve_nivp.rattle_contact
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ build_dynamic_rattle_contact
12
+ build_rattle_system
13
+ solve_dynamic_rattle_contact
14
+
15
+ .. rubric:: Classes
16
+
17
+ .. autosummary::
18
+
19
+ RattleAlgebraicSpec
20
+ RattleBilateralSpec
21
+ RattleContactSpec
22
+ RattleContactSystem
23
+ RattleMechanicalSystem
24
+ RattleSolveResult
25
+ RattleSolver
@@ -0,0 +1,7 @@
1
+ solve\_nivp.rl.callbacks
2
+ =========================
3
+
4
+ .. automodule:: solve_nivp.rl.callbacks
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,7 @@
1
+ solve\_nivp.rl.env
2
+ ==================
3
+
4
+ .. automodule:: solve_nivp.rl.env
5
+ :members:
6
+ :undoc-members:
7
+ :show-inheritance:
@@ -0,0 +1,16 @@
1
+ solve\_nivp.rl
2
+ ==============
3
+
4
+ .. automodule:: solve_nivp.rl
5
+
6
+ The environment and callback modules require optional reinforcement-learning
7
+ dependencies. Install ``solve_nivp[rl]`` to use them at runtime.
8
+
9
+ .. rubric:: Modules
10
+
11
+ .. toctree::
12
+ :maxdepth: 1
13
+
14
+ solve_nivp.rl.callbacks
15
+ solve_nivp.rl.dependency
16
+ solve_nivp.rl.env
@@ -0,0 +1,38 @@
1
+ solve\_nivp API
2
+ ===============
3
+
4
+ .. automodule:: solve_nivp
5
+ :no-members:
6
+
7
+ Top-Level Functions
8
+ -------------------
9
+
10
+ .. autofunction:: solve_nivp.solve_nivp
11
+
12
+ ``solve_ivp_ns`` is kept as a compatibility alias for ``solve_nivp``.
13
+
14
+ Modules
15
+ -------
16
+
17
+ .. toctree::
18
+ :maxdepth: 1
19
+
20
+ solve_nivp.ODESolver
21
+ solve_nivp.ODESystem
22
+ solve_nivp.adaptive_integrator
23
+ solve_nivp.alart_curnier_contact
24
+ solve_nivp.block_system
25
+ solve_nivp.contact
26
+ solve_nivp.desaxce_contact
27
+ solve_nivp.integrations
28
+ solve_nivp.macklin_contact
29
+ solve_nivp.moreau_jean_fremond
30
+ solve_nivp.ncp_contact
31
+ solve_nivp.nonlinear_solvers
32
+ solve_nivp.pcr
33
+ solve_nivp.projected_radau_contact
34
+ solve_nivp.projections
35
+ solve_nivp.rattle_contact
36
+ solve_nivp.rl
37
+ solve_nivp.solvers
38
+ solve_nivp.soccp_pgs
@@ -0,0 +1,19 @@
1
+ solve\_nivp.soccp\_pgs
2
+ ======================
3
+
4
+ .. automodule:: solve_nivp.soccp_pgs
5
+
6
+
7
+ .. rubric:: Functions
8
+
9
+ .. autosummary::
10
+
11
+ desaxce_shift_factory
12
+ fremond_shift_factory
13
+ soccp_pgs
14
+
15
+ .. rubric:: Classes
16
+
17
+ .. autosummary::
18
+
19
+ SocppPgsInfo
@@ -0,0 +1,11 @@
1
+ solve\_nivp.solvers.block\_system
2
+ =================================
3
+
4
+ .. automodule:: solve_nivp.solvers.block_system
5
+
6
+ .. rubric:: Classes
7
+
8
+ .. autosummary::
9
+
10
+ BlockStructuredSystem
11
+ SchurComplementSolver
@@ -0,0 +1,10 @@
1
+ solve\_nivp.solvers.nonlinear\_solvers
2
+ ======================================
3
+
4
+ .. automodule:: solve_nivp.solvers.nonlinear_solvers
5
+
6
+ .. rubric:: Classes
7
+
8
+ .. autosummary::
9
+
10
+ ImplicitEquationSolver
@@ -0,0 +1,10 @@
1
+ solve\_nivp.solvers.pcr
2
+ =======================
3
+
4
+ .. automodule:: solve_nivp.solvers.pcr
5
+
6
+ .. rubric:: Functions
7
+
8
+ .. autosummary::
9
+
10
+ pcr_solve
@@ -0,0 +1,13 @@
1
+ solve\_nivp.solvers
2
+ ===================
3
+
4
+ .. automodule:: solve_nivp.solvers
5
+
6
+ .. rubric:: Modules
7
+
8
+ .. toctree::
9
+ :maxdepth: 1
10
+
11
+ solve_nivp.solvers.block_system
12
+ solve_nivp.solvers.nonlinear_solvers
13
+ solve_nivp.solvers.pcr
@@ -3,13 +3,18 @@
3
3
  # For the full list of built-in configuration values, see the documentation:
4
4
  # https://www.sphinx-doc.org/en/master/usage/configuration.html
5
5
 
6
+ from pathlib import Path
7
+ import sys
8
+
9
+ sys.path.insert(0, str(Path(__file__).resolve().parents[2] / 'src'))
10
+
6
11
  # -- Project information -----------------------------------------------------
7
12
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
8
13
 
9
14
  project = 'solve_nivp'
10
15
  copyright = '2025, David Riley'
11
16
  author = 'David Riley'
12
- release = 'March 26, 2025'
17
+ release = '0.2.0.dev1'
13
18
 
14
19
  # -- General configuration ---------------------------------------------------
15
20
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
@@ -23,12 +28,20 @@ extensions = [
23
28
  'sphinx.ext.intersphinx',
24
29
  ]
25
30
 
26
- # Generate autosummary pages automatically
27
- autosummary_generate = True
31
+ # API stubs are committed under docs/source/api. Regenerate them explicitly
32
+ # when the public module list changes so normal docs builds do not dirty Git.
33
+ autosummary_generate = False
28
34
 
29
35
  # Type hints in description for cleaner signatures
30
36
  autodoc_typehints = 'description'
31
37
 
38
+ # Optional extras are documented without requiring their runtime dependencies.
39
+ autodoc_mock_imports = [
40
+ 'gymnasium',
41
+ 'stable_baselines3',
42
+ 'sb3_contrib',
43
+ ]
44
+
32
45
  # Napoleon options
33
46
  napoleon_google_docstring = False
34
47
  napoleon_numpy_docstring = True
@@ -49,10 +62,9 @@ exclude_patterns = []
49
62
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
50
63
 
51
64
  html_theme = 'alabaster'
52
- html_static_path = ['_static']
65
+ html_static_path = []
53
66
 
54
67
  latex_engine = 'xelatex'
55
68
  # latex_elements = {
56
69
  # 'preamble': r'\usepackage[utf8]{inputenc}\usepackage[T1]{fontenc}',
57
70
  # }
58
-
@@ -14,6 +14,7 @@ This site documents the public API and provides guidance for using the solvers a
14
14
  :caption: Contents:
15
15
 
16
16
  quickstart
17
+ public_api
17
18
  examples
18
- modules
19
+ api/solve_nivp
19
20
  development
@@ -0,0 +1,93 @@
1
+ Public API Policy
2
+ =================
3
+
4
+ This page defines the supported surface of ``solve_nivp``. It is intended to
5
+ keep the package usable as a general library while still allowing active
6
+ research backends to evolve.
7
+
8
+ Stable API
9
+ ----------
10
+
11
+ The stable API is the recommended import surface for users and downstream
12
+ projects. These names should be documented, covered by tests, and changed only
13
+ with a compatibility plan.
14
+
15
+ Top-level convenience API:
16
+
17
+ * ``solve_nivp.solve_nivp``
18
+ * ``solve_nivp.__version__``
19
+
20
+ System and driver classes:
21
+
22
+ * ``solve_nivp.ODESystem``
23
+ * ``solve_nivp.ODESolver``
24
+
25
+ Nonlinear solver:
26
+
27
+ * ``solve_nivp.ImplicitEquationSolver``
28
+
29
+ Integrator classes:
30
+
31
+ * ``solve_nivp.BackwardEuler``
32
+ * ``solve_nivp.Trapezoidal``
33
+ * ``solve_nivp.ThetaMethod``
34
+ * ``solve_nivp.CompositeMethod``
35
+ * ``solve_nivp.EmbeddedBETR``
36
+ * ``solve_nivp.SDIRK2``
37
+ * ``solve_nivp.RadauIIA``
38
+
39
+ Projection classes:
40
+
41
+ * ``solve_nivp.Projection``
42
+ * ``solve_nivp.IdentityProjection``
43
+ * ``solve_nivp.SignProjection``
44
+ * ``solve_nivp.CoulombProjection``
45
+ * ``solve_nivp.GeneralMoreauVIProjection``
46
+ * ``solve_nivp.MuScaledSOCProjection``
47
+ * ``solve_nivp.MoreauSOCProjection``
48
+ * ``solve_nivp.AnisotropicSOCProjection``
49
+ * ``solve_nivp.AlgebraicConstraintProjection``
50
+ * ``solve_nivp.CompositeContactProjection``
51
+
52
+ Experimental API
53
+ ----------------
54
+
55
+ The experimental API is useful and importable, but it is still allowed to
56
+ change while the package design is being refined. Where possible, changes
57
+ should still be documented in release notes and tested against the examples
58
+ that use them.
59
+
60
+ Current experimental areas:
61
+
62
+ * Contact-system builders and backend-specific helpers.
63
+ * Schur-complement contact solvers.
64
+ * RATTLE contact-system helpers.
65
+ * PETSc-specific large-scale solver paths.
66
+ * ``solve_nivp.rl`` reinforcement-learning wrappers.
67
+
68
+ Private Internals
69
+ -----------------
70
+
71
+ Names beginning with ``_`` are private unless explicitly documented here or in
72
+ the API reference. Internal caches, factorization reuse details, helper
73
+ dispatch functions, notebook utilities, and generated example artifacts are not
74
+ part of the compatibility contract.
75
+
76
+ Research And Workspace Material
77
+ -------------------------------
78
+
79
+ The repository currently contains research notebooks, benchmark outputs,
80
+ diagnostic scripts, and generated result files. Those are valuable for
81
+ reproducibility, but they are not the core package API. During cleanup they
82
+ should be separated from the installable library path and marked as examples,
83
+ benchmarks, external reproductions, or archived artifacts.
84
+
85
+ Compatibility Rule
86
+ ------------------
87
+
88
+ Stable API changes should prefer one of these routes:
89
+
90
+ * preserve the existing import and behavior;
91
+ * add a new explicit option while keeping the old default;
92
+ * deprecate first, remove later;
93
+ * document unavoidable breaking changes with migration notes.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "solve_nivp"
7
- version = "0.2.0.dev2"
7
+ version = "0.2.0.dev3"
8
8
  description = "A Python toolkit for integrating nonsmooth dynamical systems"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -50,7 +50,7 @@ See the Sphinx documentation (``docs/``) for extended examples.
50
50
 
51
51
  import numpy as np
52
52
 
53
- __version__ = "0.2.0.dev2"
53
+ __version__ = "0.2.0.dev3"
54
54
 
55
55
  from .projections import (
56
56
  Projection,
@@ -69,6 +69,7 @@ from .integrations import BackwardEuler, BackwardEulerSchur, RadauIIASchur, Trap
69
69
  from .solvers.block_system import SchurComplementSolver, BlockStructuredSystem
70
70
  from .ODESystem import ODESystem
71
71
  from .ODESolver import ODESolver
72
+ from .mjf_integration import (MJFIntegrationMethod, solve_mjf_fixed_step, MJFContactView)
72
73
  from .contact import build_impulse_contact, ContactSystem
73
74
  from .alart_curnier_contact import (
74
75
  build_alart_curnier_contact,
@@ -211,8 +212,9 @@ def solve_nivp(
211
212
  adaptive_opts : dict or None
212
213
  Optional controls for the adaptive stepper. Recognized keys include
213
214
  ``h_min``, ``h_max``, ``h_up``, ``h_down``, ``safety``, ``use_PI``,
214
- ``method_order`` (alias ``p``), ``atol``, ``rtol``, and
215
- ``skip_error_indices``. ``h0`` here (if provided) overrides the top-level
215
+ ``method_order`` (alias ``p``), ``atol``, ``rtol``, ``record_diagnostics``,
216
+ ``diagnostic_component_names``, and ``skip_error_indices``. ``h0`` here (if
217
+ provided) overrides the top-level
216
218
  ``h0`` for the initial step guess. Unrecognized keys are ignored.
217
219
  adaptive : bool, default True
218
220
  Enable Richardson extrapolation based adaptive step size control.
@@ -429,6 +431,19 @@ def solve_nivp(
429
431
  # Forward active-set filter setting
430
432
  stepper.active_set_filter = bool(active_set_filter)
431
433
 
434
+ # Optional diagnostics for blockwise error/residual profiling.
435
+ _record_diag = bool(adaptive_opts.get('record_diagnostics', False))
436
+ stepper.record_diagnostics = _record_diag
437
+ solver_instance.record_diagnostics = _record_diag
438
+ _diag_names = adaptive_opts.get('diagnostic_component_names', None)
439
+ if _diag_names is not None:
440
+ try:
441
+ _diag_names = list(_diag_names)
442
+ except TypeError:
443
+ _diag_names = None
444
+ stepper.diagnostic_component_names = _diag_names
445
+ solver_instance.diagnostic_component_names = _diag_names
446
+
432
447
  # Handle auto-h0 from top level
433
448
  if h0 is None or (isinstance(h0, str) and str(h0).lower() == 'auto'):
434
449
  stepper._auto_h0 = True