sbmlsim 0.8.2__tar.gz → 0.8.3__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 (567) hide show
  1. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.bumpversion.toml +1 -1
  2. sbmlsim-0.8.3/.github/actions/setup/action.yml +43 -0
  3. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/pull_request_template.md +1 -1
  4. sbmlsim-0.8.3/.github/workflows/ci-cd.yml +266 -0
  5. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/workflows/docs.yml +6 -15
  6. sbmlsim-0.8.3/.github/workflows/lint.yml +58 -0
  7. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/workflows/testsuite-pin.yml +6 -15
  8. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.pre-commit-config.yaml +1 -1
  9. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/CITATION.cff +1 -1
  10. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/CLAUDE.md +5 -6
  11. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/PKG-INFO +2 -2
  12. sbmlsim-0.8.3/docs/api/testsuite.submission.md +3 -0
  13. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/development.md +11 -13
  14. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/sensitivity.md +2 -2
  15. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/testsuite.md +1 -1
  16. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/sensitivity_example.py +36 -6
  17. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/pyproject.toml +4 -2
  18. sbmlsim-0.8.3/release-notes/0.8.3.md +24 -0
  19. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/scripts/testsuite.py +13 -78
  20. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/__init__.py +1 -1
  21. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/analysis.py +61 -47
  22. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/sensitivity_fast.py +2 -0
  23. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/sensitivity_morris.py +2 -0
  24. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/sensitivity_sampling.py +3 -2
  25. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/sensitivity_sobol.py +1 -0
  26. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/__init__.py +5 -2
  27. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/runner.py +38 -7
  28. sbmlsim-0.8.3/src/sbmlsim/testsuite/submission.py +110 -0
  29. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/examples/test_example_scripts.py +8 -1
  30. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/conftest.py +13 -0
  31. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_cli.py +40 -10
  32. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_fit.py +12 -1
  33. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_report.py +6 -1
  34. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_robustness.py +4 -0
  35. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sensitivity/test_sensitivity_example.py +58 -0
  36. sbmlsim-0.8.3/tests/testsuite/test_runner.py +120 -0
  37. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tox.ini +3 -18
  38. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/zensical.toml +1 -0
  39. sbmlsim-0.8.2/.github/workflows/ci-cd.yml +0 -184
  40. sbmlsim-0.8.2/.github/workflows/ruff.yml +0 -37
  41. sbmlsim-0.8.2/.github/workflows/ty.yml +0 -45
  42. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.claude/settings.json +0 -0
  43. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/CODEOWNERS +0 -0
  44. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/dependabot.yml +0 -0
  45. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/rulesets/apply.sh +0 -0
  46. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/rulesets/develop.json +0 -0
  47. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/rulesets/main.json +0 -0
  48. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.github/rulesets/tags.json +0 -0
  49. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.gitignore +0 -0
  50. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.python-version +0 -0
  51. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.ruff.toml +0 -0
  52. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/.zenodo.json +0 -0
  53. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/LICENSE +0 -0
  54. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/README.md +0 -0
  55. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/conftest.py +0 -0
  56. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/comparison.diff.md +0 -0
  57. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/console.md +0 -0
  58. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/data.md +0 -0
  59. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/display.md +0 -0
  60. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/experiment.experiment.md +0 -0
  61. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/experiment.runner.md +0 -0
  62. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.cli.md +0 -0
  63. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.derived.md +0 -0
  64. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.display.md +0 -0
  65. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.fisher.md +0 -0
  66. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.helpers.md +0 -0
  67. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.identifiability.md +0 -0
  68. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.metrics.md +0 -0
  69. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.objects.md +0 -0
  70. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.optimization.md +0 -0
  71. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.options.md +0 -0
  72. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.parameter_mapping.md +0 -0
  73. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.parameters.md +0 -0
  74. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_omex.md +0 -0
  75. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.export.md +0 -0
  76. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.extension.md +0 -0
  77. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.gaps.md +0 -0
  78. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.likelihood.md +0 -0
  79. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.observables.md +0 -0
  80. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.reader.md +0 -0
  81. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.sciml.md +0 -0
  82. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.sciml_export.md +0 -0
  83. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.petab_v2.symbols.md +0 -0
  84. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.report.md +0 -0
  85. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.result.md +0 -0
  86. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.runner.md +0 -0
  87. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/fit.sampling.md +0 -0
  88. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/index.md +0 -0
  89. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/log.md +0 -0
  90. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/mathml.md +0 -0
  91. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/model.model.md +0 -0
  92. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/model.model_change.md +0 -0
  93. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/model.model_resources.md +0 -0
  94. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/model.model_roadrunner.md +0 -0
  95. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/model.provenance.md +0 -0
  96. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/plot.plotting.md +0 -0
  97. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/plot.serialization_matplotlib.md +0 -0
  98. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/report.experiment_report.md +0 -0
  99. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/result.datagenerator.md +0 -0
  100. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/result.report.md +0 -0
  101. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/result.timecourse.md +0 -0
  102. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/result.xresult.md +0 -0
  103. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.backend.md +0 -0
  104. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.compiler.md +0 -0
  105. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.errors.md +0 -0
  106. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.hybridization.md +0 -0
  107. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.interpreter.md +0 -0
  108. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.layers.md +0 -0
  109. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.md +0 -0
  110. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.network.md +0 -0
  111. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.parameters.md +0 -0
  112. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sciml.testsuite.md +0 -0
  113. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.analysis.md +0 -0
  114. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.classification.md +0 -0
  115. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.parameters.md +0 -0
  116. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.plots.md +0 -0
  117. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.sensitivity_fast.md +0 -0
  118. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.sensitivity_local.md +0 -0
  119. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.sensitivity_morris.md +0 -0
  120. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.sensitivity_sampling.md +0 -0
  121. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/sensitivity.sensitivity_sobol.md +0 -0
  122. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/serialization.md +0 -0
  123. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.algorithm.md +0 -0
  124. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.base.md +0 -0
  125. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.calculation.md +0 -0
  126. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.change.md +0 -0
  127. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.range.md +0 -0
  128. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.scan.md +0 -0
  129. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.sensitivity.md +0 -0
  130. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.simulation.md +0 -0
  131. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulation.timecourse.md +0 -0
  132. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/simulator.simulation_serial.md +0 -0
  133. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/task.task.md +0 -0
  134. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/testsuite.cache.md +0 -0
  135. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/testsuite.cases.md +0 -0
  136. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/testsuite.comparison.md +0 -0
  137. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/testsuite.report.md +0 -0
  138. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/testsuite.runner.md +0 -0
  139. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/units.md +0 -0
  140. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/api/utils.md +0 -0
  141. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/data.md +0 -0
  142. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/experiments.md +0 -0
  143. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/fitting.md +0 -0
  144. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/about.txt +0 -0
  145. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/android-chrome-192x192.png +0 -0
  146. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/android-chrome-512x512.png +0 -0
  147. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/apple-touch-icon.png +0 -0
  148. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/favicon-16x16.png +0 -0
  149. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/favicon-32x32.png +0 -0
  150. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/favicon.ico +0 -0
  151. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/sbmlsim-100x100-300dpi.png +0 -0
  152. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/images/favicon/site.webmanifest +0 -0
  153. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/index.md +0 -0
  154. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/installation.md +0 -0
  155. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/models.md +0 -0
  156. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/petab.md +0 -0
  157. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/plotting.md +0 -0
  158. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/references.md +0 -0
  159. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/robots.txt +0 -0
  160. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/scans.md +0 -0
  161. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/simulation.md +0 -0
  162. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/plans/2026-09-13-versioned-fit-parameters.md +0 -0
  163. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/plans/2026-09-30-petab-sciml-phase1.md +0 -0
  164. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/plans/2026-09-30-petab-sciml-phase2.md +0 -0
  165. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/plans/2026-09-30-petab-sciml-phase3.md +0 -0
  166. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/plans/2026-09-30-petab-sciml-phase4.md +0 -0
  167. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/specs/2026-09-13-versioned-fit-parameters-design.md +0 -0
  168. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/superpowers/specs/2026-09-30-petab-sciml-design.md +0 -0
  169. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/docs/units.md +0 -0
  170. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/README.md +0 -0
  171. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/__init__.py +0 -0
  172. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/__init__.py +0 -0
  173. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_1.json +0 -0
  174. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_2.json +0 -0
  175. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_3.json +0 -0
  176. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_4.json +0 -0
  177. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_5.json +0 -0
  178. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/example_6.json +0 -0
  179. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_1.tsv +0 -0
  180. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_2.tsv +0 -0
  181. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_3.tsv +0 -0
  182. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_4.tsv +0 -0
  183. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_5.tsv +0 -0
  184. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff/jws/example_6.tsv +0 -0
  185. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/diff_example.py +0 -0
  186. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/example_comparison.py +0 -0
  187. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/example_copasi.py +0 -0
  188. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/icg_amici_simulation.py +0 -0
  189. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/resources/condition.tsv +0 -0
  190. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/resources/condition_liver.tsv +0 -0
  191. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/resources/icg_events_sd.xml +0 -0
  192. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/resources/icg_liver.xml +0 -0
  193. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/resources/icg_sd.xml +0 -0
  194. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/simulate.py +0 -0
  195. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/simulate_amici.py +0 -0
  196. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/simulate_copasi.py +0 -0
  197. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/comparison/simulate_roadrunner.py +0 -0
  198. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/curve_types/__init__.py +0 -0
  199. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/curve_types/experiment.py +0 -0
  200. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/curve_types/model.py +0 -0
  201. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/datagenerator.py +0 -0
  202. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/demo/__init__.py +0 -0
  203. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/demo/demo.py +0 -0
  204. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/fit_sampling.py +0 -0
  205. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/DoseResponseExperiment.md +0 -0
  206. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/__init__.py +0 -0
  207. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/data/DoseResponse/.DoseResponse_TabEpinephrine.tsv +0 -0
  208. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/data/DoseResponse/.DoseResponse_TabGlucagon.tsv +0 -0
  209. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/data/DoseResponse/.DoseResponse_TabInsulin.tsv +0 -0
  210. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/experiments/__init__.py +0 -0
  211. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/experiments/dose_response.py +0 -0
  212. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/experiments/plotting.py +0 -0
  213. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/glucose.py +0 -0
  214. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/index.md +0 -0
  215. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/model/liver_glucose.html +0 -0
  216. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/glucose/model/liver_glucose.xml +0 -0
  217. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/__init__.py +0 -0
  218. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Beermann1976/.Beermann1976_Fig2.tsv +0 -0
  219. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Beermann1976/.Beermann1976_Fig3.tsv +0 -0
  220. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Beermann1976/.Beermann1976_Tab1A.tsv +0 -0
  221. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Patel1984/.Patel1984_Fig1.tsv +0 -0
  222. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Patel1984/.Patel1984_Fig2.tsv +0 -0
  223. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Patel1984/.Patel1984_Tab4.tsv +0 -0
  224. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Weir1998/.Weir1998_Fig2.tsv +0 -0
  225. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Weir1998/.Weir1998_Fig3.tsv +0 -0
  226. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/data/Weir1998/.Weir1998_Tab4.tsv +0 -0
  227. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/__init__.py +0 -0
  228. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/base_experiment.py +0 -0
  229. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/metadata.py +0 -0
  230. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/studies/__init__.py +0 -0
  231. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/studies/beermann1976.py +0 -0
  232. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/studies/patel1984.py +0 -0
  233. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/experiments/studies/weir1998.py +0 -0
  234. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/__init__.py +0 -0
  235. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/fitting.py +0 -0
  236. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/identifiability.py +0 -0
  237. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/identifiability_report.py +0 -0
  238. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/mapping_collections.py +0 -0
  239. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/parameters.py +0 -0
  240. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/petab_problem.py +0 -0
  241. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/fitting/run_report.py +0 -0
  242. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/helpers.py +0 -0
  243. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/models/hctz_body_flat.xml +0 -0
  244. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/hctz_fitting/simulations.py +0 -0
  245. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/initial_assignment/__init__.py +0 -0
  246. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/initial_assignment/initial_assignment.py +0 -0
  247. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/initial_assignment/initial_assignment.xml +0 -0
  248. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/interpolation/__init__.py +0 -0
  249. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/interpolation/interpolation.py +0 -0
  250. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/interpolation/interpolation_example.py +0 -0
  251. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/julia/__init__.py +0 -0
  252. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/julia/julia.md +0 -0
  253. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/julia/juliacall_example.py +0 -0
  254. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/model_change.py +0 -0
  255. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/model_sensitivity.py +0 -0
  256. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/Boehm_JProteomeRes2014.yaml +0 -0
  257. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/README.md +0 -0
  258. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/experimentalCondition_Boehm_JProteomeRes2014.tsv +0 -0
  259. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/measurementData_Boehm_JProteomeRes2014.tsv +0 -0
  260. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/model_Boehm_JProteomeRes2014.xml +0 -0
  261. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/observables_Boehm_JProteomeRes2014.tsv +0 -0
  262. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/parameters_Boehm_JProteomeRes2014.tsv +0 -0
  263. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Boehm_JProteomeRes2014/visualizationSpecification_Boehm_JProteomeRes2014.tsv +0 -0
  264. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/Perelson_Science1996.yaml +0 -0
  265. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/README.md +0 -0
  266. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/experimentalCondition_Perelson_Science1996.tsv +0 -0
  267. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/measurementData_Perelson_Science1996.tsv +0 -0
  268. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/model_Perelson_Science1996.xml +0 -0
  269. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/observables_Perelson_Science1996.tsv +0 -0
  270. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/parameters_Perelson_Science1996.tsv +0 -0
  271. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/Perelson_Science1996/visualizationSpecification_Perelson_Science1996.tsv +0 -0
  272. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/__init__.py +0 -0
  273. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/petab/benchmark.py +0 -0
  274. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/repressilator/__init__.py +0 -0
  275. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/repressilator/repressilator.py +0 -0
  276. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/repressilator/repressilator_scans.py +0 -0
  277. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/scan.py +0 -0
  278. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/__init__.py +0 -0
  279. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/README.md +0 -0
  280. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/experiments.tsv +0 -0
  281. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/hybridization.tsv +0 -0
  282. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/lv.xml +0 -0
  283. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/mapping.tsv +0 -0
  284. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/measurements.tsv +0 -0
  285. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/net1.yaml +0 -0
  286. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/net1_ps.hdf5 +0 -0
  287. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/observables.tsv +0 -0
  288. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/parameters.tsv +0 -0
  289. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra/problem.yaml +0 -0
  290. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/lotka_volterra_fit.py +0 -0
  291. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/__init__.py +0 -0
  292. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/data.tsv +0 -0
  293. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/experiment.py +0 -0
  294. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/fitting.py +0 -0
  295. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/lotka_volterra_neural_ode.xml +0 -0
  296. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sciml/neural_ode/network.py +0 -0
  297. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/.gitignore +0 -0
  298. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/__init__.py +0 -0
  299. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/simple_chain.md +0 -0
  300. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/simple_chain.py +0 -0
  301. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/sensitivity/simple_chain.xml +0 -0
  302. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/timecourse.py +0 -0
  303. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/examples/units.py +0 -0
  304. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.10.md +0 -0
  305. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.11.md +0 -0
  306. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.13.md +0 -0
  307. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.14.md +0 -0
  308. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.3.md +0 -0
  309. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.4.md +0 -0
  310. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.6.md +0 -0
  311. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.7.md +0 -0
  312. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.8.md +0 -0
  313. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.1.9.md +0 -0
  314. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.2.0.md +0 -0
  315. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.2.1.md +0 -0
  316. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.2.2.md +0 -0
  317. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.3.0.md +0 -0
  318. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.4.0.md +0 -0
  319. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.5.0.md +0 -0
  320. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.6.0.md +0 -0
  321. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.6.1.md +0 -0
  322. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.7.0.md +0 -0
  323. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.7.1.md +0 -0
  324. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.7.2.md +0 -0
  325. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.8.0.md +0 -0
  326. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.8.1.md +0 -0
  327. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/release-notes/0.8.2.md +0 -0
  328. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/scripts/llms_txt.py +0 -0
  329. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/scripts/sciml_testsuite.py +0 -0
  330. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/comparison/__init__.py +0 -0
  331. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/comparison/diff.py +0 -0
  332. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/console.py +0 -0
  333. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/data.py +0 -0
  334. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/display.py +0 -0
  335. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/experiment/__init__.py +0 -0
  336. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/experiment/experiment.py +0 -0
  337. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/experiment/runner.py +0 -0
  338. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/__init__.py +0 -0
  339. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/cli.py +0 -0
  340. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/derived.py +0 -0
  341. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/display.py +0 -0
  342. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/fisher.py +0 -0
  343. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/helpers.py +0 -0
  344. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/identifiability.py +0 -0
  345. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/metrics.py +0 -0
  346. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/objects.py +0 -0
  347. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/optimization.py +0 -0
  348. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/options.py +0 -0
  349. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/parameter_mapping.py +0 -0
  350. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/parameters.py +0 -0
  351. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_omex.py +0 -0
  352. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/__init__.py +0 -0
  353. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/export.py +0 -0
  354. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/extension.py +0 -0
  355. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/gaps.py +0 -0
  356. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/likelihood.py +0 -0
  357. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/observables.py +0 -0
  358. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/reader.py +0 -0
  359. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/sciml.py +0 -0
  360. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/sciml_export.py +0 -0
  361. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/petab_v2/symbols.py +0 -0
  362. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/report.py +0 -0
  363. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/result.py +0 -0
  364. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/runner.py +0 -0
  365. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/fit/sampling.py +0 -0
  366. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/log.py +0 -0
  367. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/mathml.py +0 -0
  368. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/__init__.py +0 -0
  369. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/model.py +0 -0
  370. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/model_change.py +0 -0
  371. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/model_resources.py +0 -0
  372. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/model_roadrunner.py +0 -0
  373. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/model/provenance.py +0 -0
  374. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/plot/__init__.py +0 -0
  375. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/plot/plotting.py +0 -0
  376. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/plot/serialization_matplotlib.py +0 -0
  377. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/plot/serialization_plotly.py +0 -0
  378. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/report/__init__.py +0 -0
  379. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/report/experiment_report.py +0 -0
  380. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/report/templates.py +0 -0
  381. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/__init__.py +0 -0
  382. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/models/Koenig_demo_14.xml +0 -0
  383. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/models/midazolam_body_flat.xml +0 -0
  384. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/models/repressilator.xml +0 -0
  385. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/experiment.html +0 -0
  386. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/experiment.md +0 -0
  387. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/fit_report.html +0 -0
  388. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/index.html +0 -0
  389. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/index.md +0 -0
  390. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/index.tex +0 -0
  391. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/report_base.html +0 -0
  392. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/resources/templates/testsuite_report.html +0 -0
  393. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/result/__init__.py +0 -0
  394. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/result/datagenerator.py +0 -0
  395. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/result/report.py +0 -0
  396. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/result/timecourse.py +0 -0
  397. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/result/xresult.py +0 -0
  398. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/__init__.py +0 -0
  399. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/backend.py +0 -0
  400. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/compiler.py +0 -0
  401. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/errors.py +0 -0
  402. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/hybridization.py +0 -0
  403. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/interpreter.py +0 -0
  404. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/__init__.py +0 -0
  405. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/convolution.py +0 -0
  406. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/core.py +0 -0
  407. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/functions.py +0 -0
  408. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/normalization.py +0 -0
  409. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/pooling.py +0 -0
  410. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/registry.py +0 -0
  411. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/layers/windows.py +0 -0
  412. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/network.py +0 -0
  413. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/parameters.py +0 -0
  414. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sciml/testsuite.py +0 -0
  415. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/__init__.py +0 -0
  416. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/classification.py +0 -0
  417. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/parameters.py +0 -0
  418. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/plots.py +0 -0
  419. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/sensitivity/sensitivity_local.py +0 -0
  420. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/serialization.py +0 -0
  421. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/__init__.py +0 -0
  422. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/algorithm.py +0 -0
  423. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/base.py +0 -0
  424. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/calculation.py +0 -0
  425. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/change.py +0 -0
  426. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/range.py +0 -0
  427. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/scan.py +0 -0
  428. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/sensitivity.py +0 -0
  429. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/simulation.py +0 -0
  430. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulation/timecourse.py +0 -0
  431. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulator/__init__.py +0 -0
  432. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/simulator/simulation_serial.py +0 -0
  433. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/task/__init__.py +0 -0
  434. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/task/task.py +0 -0
  435. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/task/task_new.py +0 -0
  436. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/cache.py +0 -0
  437. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/cases.py +0 -0
  438. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/comparison.py +0 -0
  439. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/testsuite/report.py +0 -0
  440. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/units.py +0 -0
  441. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/src/sbmlsim/utils.py +0 -0
  442. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/conftest.py +0 -0
  443. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/numlData1D.xml +0 -0
  444. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/numlData2D.xml +0 -0
  445. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/numlData2D2RC.xml +0 -0
  446. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/oscli.csv +0 -0
  447. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/oscli.tsv +0 -0
  448. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/oscli.xml +0 -0
  449. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/parameter-from-data-csv.xml +0 -0
  450. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/parameters.csv +0 -0
  451. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-numlData1D.xml +0 -0
  452. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-numlData2D.xml +0 -0
  453. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-numlData2DRC.xml +0 -0
  454. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-oscli-csv.xml +0 -0
  455. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-oscli-numl.xml +0 -0
  456. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/data/reading-oscli-tsv.xml +0 -0
  457. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/datasets/Allonen1981/.Allonen1981_Fig3A.tsv +0 -0
  458. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/datasets/Faber1978/.Faber1978_Fig1.tsv +0 -0
  459. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/BioModel1_repressor_activator_oscillations.xml +0 -0
  460. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/BorisEJB.xml +0 -0
  461. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/Koenig_demo_14.xml +0 -0
  462. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/app2sim.xml +0 -0
  463. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/asedml3repeat.xml +0 -0
  464. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/asedmlComplex.xml +0 -0
  465. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/body21_livertoy_flat.xml +0 -0
  466. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/curien.xml +0 -0
  467. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/example1.xml +0 -0
  468. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/icg_body_flat.xml +0 -0
  469. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/lorenz.xml +0 -0
  470. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/lotka_volterra.xml +0 -0
  471. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/midazolam_body_flat.xml +0 -0
  472. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/model1.xml +0 -0
  473. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/oscli.xml +0 -0
  474. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/models/repressilator.xml +0 -0
  475. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg.omex +0 -0
  476. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg.xml +0 -0
  477. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg.yaml +0 -0
  478. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg_condition.tsv +0 -0
  479. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg_data.tsv +0 -0
  480. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg_measurement.tsv +0 -0
  481. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg_observable.tsv +0 -0
  482. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/icg_example1/icg_parameter.tsv +0 -0
  483. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/petab/sciml_001_llh.tsv +0 -0
  484. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/sciml_baseline.json +0 -0
  485. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/data/testsuite_baseline.json +0 -0
  486. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/examples/test_interpolation.py +0 -0
  487. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/experiment/test_experiment_examples.py +0 -0
  488. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/experiment/test_experiment_run.py +0 -0
  489. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/hooks.py +0 -0
  490. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_derived_changes.py +0 -0
  491. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_display.py +0 -0
  492. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_fisher.py +0 -0
  493. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_helpers.py +0 -0
  494. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_identifiability.py +0 -0
  495. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_mapping_kinds.py +0 -0
  496. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_metrics.py +0 -0
  497. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_objects.py +0 -0
  498. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_optimization.py +0 -0
  499. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_optimization_result.py +0 -0
  500. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_parameter_mapping.py +0 -0
  501. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_parameter_scale.py +0 -0
  502. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_parameter_sets.py +0 -0
  503. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_omex.py +0 -0
  504. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2.py +0 -0
  505. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_definition.py +0 -0
  506. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_dosing.py +0 -0
  507. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_likelihood.py +0 -0
  508. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_noise.py +0 -0
  509. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_reader.py +0 -0
  510. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_petab_v2_symbols.py +0 -0
  511. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_predictions.py +0 -0
  512. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/fit/test_sampling.py +0 -0
  513. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/model/test_provenance.py +0 -0
  514. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/models/test_biomodels.py +0 -0
  515. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/models/test_model_roadrunner.py +0 -0
  516. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/plot/test_plotting.py +0 -0
  517. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/plot/test_serialization_matplotlib.py +0 -0
  518. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/report/test_experiment_report.py +0 -0
  519. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/result/test_datagenerator.py +0 -0
  520. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/result/test_timecourse.py +0 -0
  521. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/__init__.py +0 -0
  522. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/conftest.py +0 -0
  523. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/experiment.py +0 -0
  524. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/hybrid.py +0 -0
  525. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/petab.py +0 -0
  526. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_backend.py +0 -0
  527. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_compiler.py +0 -0
  528. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_export.py +0 -0
  529. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_expressions.py +0 -0
  530. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_fit.py +0 -0
  531. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_functions.py +0 -0
  532. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_hybridization.py +0 -0
  533. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_ids.py +0 -0
  534. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_interpreter.py +0 -0
  535. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_layers_convolution.py +0 -0
  536. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_layers_core.py +0 -0
  537. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_layers_normalization.py +0 -0
  538. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_layers_pooling.py +0 -0
  539. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_network.py +0 -0
  540. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_package.py +0 -0
  541. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_parameters.py +0 -0
  542. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_reader.py +0 -0
  543. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_report.py +0 -0
  544. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_script.py +0 -0
  545. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_suite_cases.py +0 -0
  546. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sciml/test_testsuite.py +0 -0
  547. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sensitivity/test_analysis.py +0 -0
  548. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sensitivity/test_classification.py +0 -0
  549. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/sensitivity/test_parameters.py +0 -0
  550. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/simulation/test_algorithm.py +0 -0
  551. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/simulation/test_scan.py +0 -0
  552. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/simulation/test_simulation.py +0 -0
  553. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_data.py +0 -0
  554. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_display_links.py +0 -0
  555. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_log.py +0 -0
  556. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_mathml.py +0 -0
  557. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_mathml_formula.py +0 -0
  558. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_model_change.py +0 -0
  559. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_sensitivity.py +0 -0
  560. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_units.py +0 -0
  561. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/test_utils.py +0 -0
  562. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/__init__.py +0 -0
  563. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/conftest.py +0 -0
  564. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/test_cache.py +0 -0
  565. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/test_cases.py +0 -0
  566. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/test_report_path.py +0 -0
  567. {sbmlsim-0.8.2 → sbmlsim-0.8.3}/tests/testsuite/test_semantic.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [tool.bumpversion]
2
- current_version = "0.8.2"
2
+ current_version = "0.8.3"
3
3
  commit = true
4
4
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
5
5
  serialize = ["{major}.{minor}.{patch}"]
@@ -0,0 +1,43 @@
1
+ name: Set up the environment
2
+ description: >-
3
+ Install uv with its cache, set the python version of the job, put the
4
+ libpython of the interpreter on the library search path and sync the
5
+ environment of the project
6
+ inputs:
7
+ python-version:
8
+ description: the python version, e.g. 3.14
9
+ required: true
10
+ sync:
11
+ description: >-
12
+ the arguments of `uv sync`, e.g. `--extra dev`; empty does not sync
13
+ required: false
14
+ default: ""
15
+ runs:
16
+ using: composite
17
+ steps:
18
+ - name: Install uv and set the python version
19
+ # astral-sh/setup-uv publishes no floating major tag beyond v7
20
+ uses: astral-sh/setup-uv@v10.2.0
21
+ with:
22
+ python-version: ${{ inputs.python-version }}
23
+ enable-cache: true
24
+ - name: Put libpython on the library search path (linux only)
25
+ # the extension of libroadrunner links against libpython. The standalone
26
+ # interpreters uv installs link it statically and ship it in their `lib`,
27
+ # where the loader does not look; without it the import of roadrunner
28
+ # fails with `libpython3.14.so.1.0: cannot open shared object file`
29
+ if: runner.os == 'Linux'
30
+ shell: bash
31
+ env:
32
+ PYTHON_VERSION: ${{ inputs.python-version }}
33
+ run: |
34
+ prefix=$(uv run --no-project --python "$PYTHON_VERSION" python -c "import sys; print(sys.base_prefix)")
35
+ echo "LD_LIBRARY_PATH=$prefix/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" >> "$GITHUB_ENV"
36
+ echo "libpython: $(ls "$prefix"/lib/libpython*.so.1.0)"
37
+ - name: Sync the environment
38
+ if: inputs.sync != ''
39
+ shell: bash
40
+ env:
41
+ SYNC: ${{ inputs.sync }}
42
+ # word splitting of the arguments is intended
43
+ run: uv sync $SYNC
@@ -6,7 +6,7 @@
6
6
 
7
7
  - [ ] the pull request targets `develop`
8
8
  - [ ] tests were added or updated for the change
9
- - [ ] `tox run-parallel` passes locally (tests and `ty`)
9
+ - [ ] `pytest` and `ty check` pass locally, `tox run-parallel` runs the tests on every supported python
10
10
  - [ ] `ruff check` and `ruff format` are clean, e.g., via `pre-commit run --all-files`
11
11
  - [ ] public functions and classes have type annotations and a docstring
12
12
  - [ ] user visible changes are in `release-notes/` and, if needed, in `docs/`
@@ -0,0 +1,266 @@
1
+ name: CI-CD
2
+
3
+ on:
4
+ push:
5
+ # feature branches are tested through their pull request, tags release
6
+ branches: [develop, main]
7
+ tags: ['*']
8
+ pull_request:
9
+ branches: [develop, main]
10
+ workflow_dispatch:
11
+
12
+ # least privilege by default, the release job raises what it needs
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ # a superseded run of a pull request is cancelled. A push is a group of its
18
+ # own: a release waits for the run of its commit on develop (see the job
19
+ # `tested`), and a group keeps one run waiting and cancels it for the next
20
+ # one even without `cancel-in-progress`, so two merges in a row would leave
21
+ # the first commit untested
22
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || format('{0}-{1}', github.ref, github.sha) }}
23
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
24
+
25
+ jobs:
26
+ test:
27
+ # a tag is not tested again, see the job `tested`
28
+ if: ${{ !startsWith(github.ref, 'refs/tags/') }}
29
+ runs-on: ${{ matrix.os }}
30
+ timeout-minutes: 45
31
+ strategy:
32
+ fail-fast: false
33
+ matrix:
34
+ os: [ubuntu-latest, windows-latest, macos-latest]
35
+ python-version: ["3.13", "3.14"]
36
+ # linux covers the full range, windows and macos only the newest version
37
+ exclude:
38
+ - os: windows-latest
39
+ python-version: "3.13"
40
+ - os: macos-latest
41
+ python-version: "3.13"
42
+
43
+ steps:
44
+ - uses: actions/checkout@v7
45
+ with:
46
+ persist-credentials: false
47
+ - name: Set up the environment
48
+ # the package is installed as a wheel and not editable, so the tests run
49
+ # against what is published
50
+ uses: ./.github/actions/setup
51
+ with:
52
+ python-version: ${{ matrix.python-version }}
53
+ sync: --extra dev --no-editable
54
+ - name: Test
55
+ # the slowest tests are listed at the end of the log
56
+ run: uv run --no-sync pytest --durations=20
57
+
58
+ tests:
59
+ # the one check the branch protection requires; the names of the matrix
60
+ # jobs change with the matrix, this name does not, see .github/rulesets/
61
+ name: tests
62
+ needs: test
63
+ if: ${{ always() && !startsWith(github.ref, 'refs/tags/') }}
64
+ runs-on: ubuntu-latest
65
+ timeout-minutes: 5
66
+ steps:
67
+ - name: Check the result of the test matrix
68
+ env:
69
+ RESULT: ${{ needs.test.result }}
70
+ run: |
71
+ echo "test matrix: $RESULT"
72
+ test "$RESULT" = "success"
73
+
74
+ tested:
75
+ # a release does not run the test matrix again. The tag is on a commit of
76
+ # develop, and the push of that commit ran the matrix on exactly this
77
+ # tree; the job waits for that run and fails unless it succeeded, so the
78
+ # tag can be pushed right after the merge of the release
79
+ name: tested on develop
80
+ if: startsWith(github.ref, 'refs/tags/')
81
+ runs-on: ubuntu-latest
82
+ timeout-minutes: 60
83
+ permissions:
84
+ actions: read # the runs of this workflow
85
+ contents: read
86
+ steps:
87
+ - uses: actions/checkout@v7
88
+ with:
89
+ fetch-depth: 0
90
+ persist-credentials: false
91
+ - name: Check that the tag is on develop
92
+ run: |
93
+ if ! git merge-base --is-ancestor "$GITHUB_SHA" origin/develop; then
94
+ echo "::error::$GITHUB_REF_NAME is not on develop, a release is tagged on develop"
95
+ exit 1
96
+ fi
97
+ - name: Wait for the run of the commit on develop
98
+ env:
99
+ GH_TOKEN: ${{ github.token }}
100
+ run: |
101
+ api="repos/$GITHUB_REPOSITORY/actions"
102
+ # the run starts with the merge, a tag pushed right after it may be first
103
+ run_id=""
104
+ for attempt in $(seq 1 20); do
105
+ run_id=$(gh api "$api/workflows/ci-cd.yml/runs?branch=develop&event=push&head_sha=$GITHUB_SHA" \
106
+ --jq '.workflow_runs[0].id // empty' || true)
107
+ [ -n "$run_id" ] && break
108
+ sleep 15
109
+ done
110
+ if [ -z "$run_id" ]; then
111
+ echo "::error::no CI-CD run of the push of $GITHUB_SHA to develop"
112
+ exit 1
113
+ fi
114
+ url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$run_id"
115
+ echo "waiting for $url"
116
+ # a failed request answers nothing, which is not `completed` either
117
+ until [ "$(gh api "$api/runs/$run_id" --jq .status || true)" = "completed" ]; do
118
+ sleep 30
119
+ done
120
+ conclusion=$(gh api "$api/runs/$run_id" --jq .conclusion)
121
+ echo "$url: $conclusion"
122
+ if [ "$conclusion" != "success" ]; then
123
+ echo "::error::the tests of $GITHUB_SHA on develop did not pass ($url); once they do, re-run the failed jobs of this release"
124
+ exit 1
125
+ fi
126
+
127
+ testsuite:
128
+ # the semantic cases of the SBML Test Suite against the pinned release and
129
+ # the cases of the PEtab SciML test suite against the pinned commit, which
130
+ # the baselines record, as two jobs which run next to each other. A normal
131
+ # run of the tests deselects them: they answer what libroadrunner and the
132
+ # networks support, which a change to sbmlsim rarely moves, and they take
133
+ # longer than the rest together. A release does not go out without them
134
+ name: sbml test suite
135
+ if: startsWith(github.ref, 'refs/tags/')
136
+ runs-on: ubuntu-latest
137
+ timeout-minutes: 30
138
+ steps:
139
+ - uses: actions/checkout@v7
140
+ with:
141
+ persist-credentials: false
142
+ - name: Set up the environment
143
+ uses: ./.github/actions/setup
144
+ with:
145
+ python-version: "3.14"
146
+ sync: --extra dev --no-editable
147
+ - name: Download the pinned release
148
+ run: uv run --no-sync python scripts/testsuite.py download
149
+ - name: Run the semantic cases against the pinned release
150
+ run: uv run --no-sync pytest -m testsuite
151
+
152
+ sciml:
153
+ # see the job `testsuite`; a job of its own and not a matrix, the check of
154
+ # a matrix job which is skipped is named by the unevaluated expression
155
+ name: petab sciml test suite
156
+ if: startsWith(github.ref, 'refs/tags/')
157
+ runs-on: ubuntu-latest
158
+ timeout-minutes: 30
159
+ steps:
160
+ - uses: actions/checkout@v7
161
+ with:
162
+ persist-credentials: false
163
+ - name: Set up the environment
164
+ uses: ./.github/actions/setup
165
+ with:
166
+ python-version: "3.14"
167
+ sync: --extra dev --no-editable
168
+ - name: Download the pinned commit
169
+ run: uv run --no-sync python scripts/sciml_testsuite.py download
170
+ - name: Run the cases of the PEtab SciML test suite against the pinned commit
171
+ run: uv run --no-sync pytest -m sciml_testsuite tests/sciml
172
+
173
+ submission:
174
+ # the results a submission to the SBML Test Suite Database is made of. A
175
+ # release submits against the newest suite, not against the pinned one.
176
+ # The archive is an attachment of the release and never blocks it
177
+ name: sbml test suite submission
178
+ if: startsWith(github.ref, 'refs/tags/')
179
+ runs-on: ubuntu-latest
180
+ timeout-minutes: 20
181
+ continue-on-error: true
182
+ steps:
183
+ - uses: actions/checkout@v7
184
+ with:
185
+ persist-credentials: false
186
+ - name: Set up the environment
187
+ uses: ./.github/actions/setup
188
+ with:
189
+ python-version: "3.14"
190
+ sync: --no-editable
191
+ - name: Run the SBML Test Suite against its newest release
192
+ # the cases run in one process per core
193
+ run: uv run --no-sync python scripts/testsuite.py submission --version latest --output submission
194
+ - name: Upload the submission
195
+ uses: actions/upload-artifact@v7
196
+ with:
197
+ name: submission
198
+ path: submission/*.zip
199
+ if-no-files-found: error
200
+
201
+ release:
202
+ needs: [tested, testsuite, sciml, submission]
203
+ # the submission is an attachment, the release goes out without it
204
+ if: >-
205
+ ${{ !cancelled() && startsWith(github.ref, 'refs/tags/')
206
+ && needs.tested.result == 'success'
207
+ && needs.testsuite.result == 'success'
208
+ && needs.sciml.result == 'success' }}
209
+ runs-on: ubuntu-latest
210
+ timeout-minutes: 15
211
+ environment:
212
+ name: pypi
213
+ url: https://pypi.org/p/sbmlsim
214
+ permissions:
215
+ id-token: write # trusted publishing to PyPI
216
+ contents: write # create the GitHub release
217
+ steps:
218
+ - uses: actions/checkout@v7
219
+ with:
220
+ persist-credentials: false
221
+ - name: Set up uv
222
+ uses: ./.github/actions/setup
223
+ with:
224
+ python-version: "3.14"
225
+ - name: Build package
226
+ run: uvx hatch build
227
+ - name: Check the package
228
+ run: uvx twine check dist/*
229
+ - name: Publish to PyPI
230
+ uses: pypa/gh-action-pypi-publish@release/v1
231
+ with:
232
+ packages-dir: dist
233
+ - name: Download the submission
234
+ # missing when the submission failed, which is no reason to stop here:
235
+ # the package is on PyPI by this point
236
+ continue-on-error: true
237
+ uses: actions/download-artifact@v8
238
+ with:
239
+ name: submission
240
+ path: submission
241
+ - name: Create GitHub release
242
+ uses: softprops/action-gh-release@v3
243
+ with:
244
+ body_path: "release-notes/${{ github.ref_name }}.md"
245
+ files: submission/*.zip
246
+ # the submission may be missing, the notes are the release
247
+ fail_on_unmatched_files: false
248
+ draft: false
249
+ prerelease: false
250
+
251
+ sync-main:
252
+ # main tracks the latest published release, see docs/development.md
253
+ needs: release
254
+ if: startsWith(github.ref, 'refs/tags/')
255
+ runs-on: ubuntu-latest
256
+ timeout-minutes: 5
257
+ permissions:
258
+ contents: write # fast-forward main to the released commit
259
+ steps:
260
+ - uses: actions/checkout@v7
261
+ with:
262
+ # a shallow clone cannot be pushed to another branch
263
+ fetch-depth: 0
264
+ - name: Fast-forward main to the release
265
+ # no --force: the push fails loudly if it would not be a fast-forward
266
+ run: git push origin HEAD:main
@@ -29,34 +29,25 @@ jobs:
29
29
  persist-credentials: false
30
30
  - name: Configure GitHub Pages
31
31
  uses: actions/configure-pages@v6
32
- - name: Install the python dev files
33
- # the extension of libroadrunner links against libpython, which the
34
- # standalone interpreters do not put on the library search path
35
- run: |
36
- sudo add-apt-repository -y ppa:deadsnakes/ppa
37
- sudo apt-get update
38
- sudo apt-get install -y python3.14-dev
39
- - name: Install uv and set the python version
40
- uses: astral-sh/setup-uv@v10.2.0
32
+ - name: Set up the environment
33
+ uses: ./.github/actions/setup
41
34
  with:
42
35
  python-version: "3.14"
43
- enable-cache: true
44
- - name: Install dependencies
45
- run: uv sync --extra dev
36
+ sync: --extra dev
46
37
  - name: Build the documentation
47
38
  # the API reference is rendered from the docstrings by mkdocstrings,
48
39
  # so the package has to be importable
49
- run: uv run zensical build --clean
40
+ run: uv run --no-sync zensical build --clean
50
41
  - name: Generate the agent facing files
51
42
  # llms.txt, llms-full.txt and the markdown of every page
52
- run: uv run python scripts/llms_txt.py
43
+ run: uv run --no-sync python scripts/llms_txt.py
53
44
  - name: Run the SBML Test Suite and write its report
54
45
  # the interactive report is generated into the site and not committed,
55
46
  # so the published one always describes the code it was built from.
56
47
  # Only a build which can be published pays the three minutes: a pull
57
48
  # request builds the site to check that it builds, it does not deploy
58
49
  if: github.event_name != 'pull_request'
59
- run: uv run python scripts/testsuite.py report --output site/testsuite/report
50
+ run: uv run --no-sync python scripts/testsuite.py report --output site/testsuite/report
60
51
  - name: Upload the site
61
52
  uses: actions/upload-pages-artifact@v5
62
53
  with:
@@ -0,0 +1,58 @@
1
+ name: lint
2
+
3
+ on:
4
+ push:
5
+ # feature branches are checked through their pull request
6
+ branches: [develop, main]
7
+ pull_request:
8
+ branches: [develop, main]
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ # a superseded run of a pull request is cancelled, a push is checked on its own
16
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
17
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
18
+
19
+ jobs:
20
+ ruff:
21
+ # the names of the jobs are the checks the branch protection requires,
22
+ # see .github/rulesets/develop.json
23
+ name: ruff
24
+ runs-on: ubuntu-latest
25
+ timeout-minutes: 10
26
+ steps:
27
+ - uses: actions/checkout@v7
28
+ with:
29
+ persist-credentials: false
30
+ # the ruff version is read from the dev dependencies in pyproject.toml
31
+ - name: Lint
32
+ # astral-sh/ruff-action publishes no floating major tag beyond v3
33
+ uses: astral-sh/ruff-action@v4.1.0
34
+ with:
35
+ args: check --output-format=github
36
+ - name: Format
37
+ uses: astral-sh/ruff-action@v4.1.0
38
+ with:
39
+ args: format --check --diff
40
+
41
+ ty:
42
+ name: ty
43
+ runs-on: ubuntu-latest
44
+ timeout-minutes: 10
45
+ steps:
46
+ - uses: actions/checkout@v7
47
+ with:
48
+ persist-credentials: false
49
+ - name: Set up the environment
50
+ # ty resolves the imports of `src`, `tests`, `examples` and `scripts`
51
+ # in the environment, the dev extra has all of them; there is no ty
52
+ # action, and an environment is what it would need as well
53
+ uses: ./.github/actions/setup
54
+ with:
55
+ python-version: "3.14"
56
+ sync: --extra dev
57
+ - name: Type check
58
+ run: uv run --no-sync ty check --output-format github
@@ -27,25 +27,16 @@ jobs:
27
27
  pull-requests: write # open the pull request
28
28
  steps:
29
29
  - uses: actions/checkout@v7
30
- - name: Install the python dev files
31
- # the extension of libroadrunner links against libpython, which the
32
- # standalone interpreters do not put on the library search path
33
- run: |
34
- sudo add-apt-repository -y ppa:deadsnakes/ppa
35
- sudo apt-get update
36
- sudo apt-get install -y python3.14-dev
37
- - name: Install uv and set the python version
38
- uses: astral-sh/setup-uv@v10.2.0
30
+ - name: Set up the environment
31
+ uses: ./.github/actions/setup
39
32
  with:
40
33
  python-version: "3.14"
41
- enable-cache: true
42
- - name: Install dependencies
43
- run: uv sync --extra dev
34
+ sync: --extra dev
44
35
  - name: Compare the pinned release with the newest one
45
36
  id: versions
46
37
  run: |
47
- PINNED=$(uv run python -c "from sbmlsim.testsuite.cases import SUITE_VERSION; print(SUITE_VERSION)")
48
- LATEST=$(uv run python -c "from sbmlsim.testsuite import SemanticSuite; print(SemanticSuite.latest_version())")
38
+ PINNED=$(uv run --no-sync python -c "from sbmlsim.testsuite.cases import SUITE_VERSION; print(SUITE_VERSION)")
39
+ LATEST=$(uv run --no-sync python -c "from sbmlsim.testsuite import SemanticSuite; print(SemanticSuite.latest_version())")
49
40
  echo "pinned=$PINNED" >> "$GITHUB_OUTPUT"
50
41
  echo "latest=$LATEST" >> "$GITHUB_OUTPUT"
51
42
  echo "The pinned release is '$PINNED', the newest is '$LATEST'"
@@ -65,7 +56,7 @@ jobs:
65
56
  PY
66
57
  # the baseline records the outcome of every case, so it is recorded
67
58
  # again for the release which is adopted
68
- uv run python scripts/testsuite.py baseline
59
+ uv run --no-sync python scripts/testsuite.py baseline
69
60
  - name: Open the pull request
70
61
  if: steps.versions.outputs.pinned != steps.versions.outputs.latest
71
62
  uses: peter-evans/create-pull-request@v8
@@ -56,7 +56,7 @@ repos:
56
56
 
57
57
  - repo: https://github.com/astral-sh/ty-pre-commit
58
58
  # ty version.
59
- rev: v0.0.84
59
+ rev: v0.0.85
60
60
  hooks:
61
61
  # Run the type checker on the whole project (see `[tool.ty]` in pyproject.toml).
62
62
  # `--extra dev` syncs the environment with the dev dependencies, so that the
@@ -8,7 +8,7 @@ authors:
8
8
  given-names: "Matthias"
9
9
  orcid: "https://orcid.org/0000-0003-1725-179X"
10
10
  affiliation: "Humboldt-University Berlin, Faculty of Life Science, Institute for Biology, Biology, Berlin; University Lübeck; University Hospital Schleswig-Holstein, Campus Lübeck, First Department of Medicine, Germany"
11
- version: "0.8.2"
11
+ version: "0.8.3"
12
12
  date-released: "2026-10-06"
13
13
  doi: "10.5281/zenodo.3597770"
14
14
  license: MIT
@@ -22,22 +22,21 @@ pytest tests/simulation/test_simulation.py # single file
22
22
  pytest tests/simulation/test_scan.py::test_scan1d # single test
23
23
  pytest -rs # list the skipped tests
24
24
  tox r -e py3.14 # single tox env (py3.13, py3.14 available)
25
- tox run-parallel # full matrix + ty
25
+ tox run-parallel # the tests on every supported python
26
26
 
27
27
  # lint / format / types
28
28
  ruff check
29
29
  ruff format
30
- tox -e ty # ty type check (config in [tool.ty] in pyproject.toml)
31
- uvx ty check # same check, straight from the working tree
30
+ uv run ty check # ty type check (config in [tool.ty] in pyproject.toml)
32
31
 
33
32
  # examples, they are modules of the `examples` package and not part of sbmlsim
34
33
  python -m examples.timecourse
35
34
  python -m examples.sensitivity.sensitivity_example
36
35
  ```
37
36
 
38
- `develop` is the default branch and takes every change through a pull request; direct pushes are rejected by the rulesets in `.github/rulesets/` (applied with `.github/rulesets/apply.sh`), which require the `tests`, `ruff`, `ty` and `docs` checks. `main` only tracks the latest release and is fast-forwarded by the `sync-main` job of the release workflow, never by hand.
37
+ `develop` is the default branch and takes every change through a pull request; direct pushes are rejected by the rulesets in `.github/rulesets/` (applied with `.github/rulesets/apply.sh`), which require the `tests`, `ruff`, `ty` and `docs` checks (`ruff` and `ty` are the jobs of `lint.yml`). Every job of the workflows sets up uv, python and the environment with the action `.github/actions/setup` and runs the commands a developer runs, without tox; a push to `develop` is never cancelled, since a release waits for the run of its commit. `main` only tracks the latest release and is fast-forwarded by the `sync-main` job of the release workflow, never by hand.
39
38
 
40
- Release steps are in `docs/development.md` (there is no separate `RELEASE.md`): the release is prepared on a branch, `uvx bump-my-version bump [major|minor|patch]` updates `src/sbmlsim/__init__.py` and `CITATION.cff` and commits without tagging (`tag = false`, a squash merge would rewrite the commit), and the tag is created on `develop` after the pull request was merged, which triggers the PyPI release workflow.
39
+ Release steps are in `docs/development.md` (there is no separate `RELEASE.md`): the release is prepared on a branch, `uvx bump-my-version bump [major|minor|patch]` updates `src/sbmlsim/__init__.py` and `CITATION.cff` and commits without tagging (`tag = false`, a squash merge would rewrite the commit), and the tag is created on `develop` after the pull request was merged, which triggers the PyPI release workflow; it does not run the test matrix again, its job `tested on develop` waits for the run of the push of the same commit to `develop`, which is why the runs of `develop` are never cancelled.
41
40
 
42
41
  Documentation is [Zensical](https://zensical.org/): markdown sources in `docs/`, configured in `zensical.toml`, built into the gitignored `site/` (`uv run zensical build --clean`, `uv run zensical serve` for the preview). The API reference is rendered from the docstrings by mkdocstrings; a page in `docs/api/` is just `::: sbmlsim.<module>`, so nothing is generated into the repository. `scripts/llms_txt.py` runs after the build and writes the agent facing files (`llms.txt`, `llms-full.txt` and the markdown of every page) into `site/`. The `documentation` workflow runs both and publishes the site from `develop`.
43
42
 
@@ -59,7 +58,7 @@ Documentation is [Zensical](https://zensical.org/): markdown sources in `docs/`,
59
58
 
60
59
  **`comparison/` — comparison of results.** `diff.py` holds `DataSetsComparison`, which matches the columns of the results of two simulators and reports the absolute and relative differences above the tolerances. The scripts which produce such results with AMICI and COPASI are `examples/comparison/`, they import the optional dependencies; `examples/comparison/diff_example.py` compares roadrunner with JWS Online.
61
60
 
62
- **`testsuite/` — the SBML Test Suite.** `SemanticCase` (`testsuite/cases.py`) is a semantic case on disk, read from its `NNNNN-settings.txt` and its `NNNNN-model.m` (`componentTags`, `testTags`), not from the SED-ML it also ships; `SemanticSuite` is a directory of cases with the download and the cache of a release under `~/.cache/sbmlsim/test-suite/<version>/` (`SBMLSIM_TEST_SUITE_PATH` overrides it). `SUITE_VERSION` pins the release the tests and the documentation run against, a release resolves `latest_version()` instead and `.github/workflows/testsuite-pin.yml` opens the pull request which adopts a newer one. `run_case` (`testsuite/runner.py`) simulates a case in the newest encoding it provides and answers with a `CaseResult` and its `CaseStatus` (`PASS`, `TOLERANCE`, `NOT_READ`, `SIMULATION_ERROR`, `MISSING_VARIABLE`) rather than raising; it simulates with `reset=False`, because a model with a species or parameter named `reset` hides the roadrunner method of that name for every instance created afterwards (case 00952). `compare_case` (`testsuite/comparison.py`) applies `comparison.diff.within_tolerance`, i.e. `|c-u| <= abs_tol + rel_tol*|c|`, which `DataSetsComparison` shares. `TestSuiteReport` (`testsuite/report.py`) renders the run into the interactive page `resources/templates/testsuite_report.html`, aggregated over the tags and filtered by outcome. `scripts/testsuite.py` is the command line (`download`, `run`, `report`, `baseline`, `submission`); only the timecourse cases are run, once per case, and `tests/testsuite/test_semantic.py` is one test per case against `tests/data/testsuite_baseline.json`, which fails both on a regression and on a case which passes and is still listed. The cases carry the `testsuite` marker and `addopts` deselects it, so they are not part of a normal run: they answer what libroadrunner supports, which a change to `sbmlsim` rarely moves. The `testsuite` job of `ci-cd.yml` runs them on a tag and the release waits for it; the documentation generates the report on `develop` and not on a pull request.
61
+ **`testsuite/` — the SBML Test Suite.** `SemanticCase` (`testsuite/cases.py`) is a semantic case on disk, read from its `NNNNN-settings.txt` and its `NNNNN-model.m` (`componentTags`, `testTags`), not from the SED-ML it also ships; `SemanticSuite` is a directory of cases with the download and the cache of a release under `~/.cache/sbmlsim/test-suite/<version>/` (`SBMLSIM_TEST_SUITE_PATH` overrides it). `SUITE_VERSION` pins the release the tests and the documentation run against, a release resolves `latest_version()` instead and `.github/workflows/testsuite-pin.yml` opens the pull request which adopts a newer one. `run_case` (`testsuite/runner.py`) simulates a case in the newest encoding it provides and answers with a `CaseResult` and its `CaseStatus` (`PASS`, `TOLERANCE`, `NOT_READ`, `SIMULATION_ERROR`, `MISSING_VARIABLE`) rather than raising; it simulates with `reset=False`, because a model with a species or parameter named `reset` hides the roadrunner method of that name for every instance created afterwards (case 00952). `compare_case` (`testsuite/comparison.py`) applies `comparison.diff.within_tolerance`, i.e. `|c-u| <= abs_tol + rel_tol*|c|`, which `DataSetsComparison` shares. `TestSuiteReport` (`testsuite/report.py`) renders the run into the interactive page `resources/templates/testsuite_report.html`, aggregated over the tags and filtered by outcome. `scripts/testsuite.py` is the command line (`download`, `run`, `report`, `baseline`, `submission`), `run_suite` and `write_submission` (`testsuite/submission.py`) run the cases in one process per core through `map_cases`; only the timecourse cases are run, once per case, and `tests/testsuite/test_semantic.py` is one test per case against `tests/data/testsuite_baseline.json`, which fails both on a regression and on a case which passes and is still listed. The cases carry the `testsuite` marker and `addopts` deselects it, so they are not part of a normal run: they answer what libroadrunner supports, which a change to `sbmlsim` rarely moves. The `testsuite` job of `ci-cd.yml` runs them on a tag and the release waits for it; the documentation generates the report on `develop` and not on a pull request.
63
62
 
64
63
  `console.py` (rich console, for scripts and examples) and `log.py` provide the shared output/logging. Modules get their logger from the standard library with `logging.getLogger(__name__)`. The package never configures logging: `log.enable_rich_logging()` is the opt-in for scripts. Library code logs, it does not print, and log calls use lazy `%s` formatting rather than f-strings (enforced by ruff `G`).
65
64
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sbmlsim
3
- Version: 0.8.2
3
+ Version: 0.8.3
4
4
  Summary: sbmlsim are python utilities for the simulation of SBML models.
5
5
  Project-URL: Homepage, https://matthiaskoenig.github.io/sbmlsim
6
6
  Project-URL: Documentation, https://matthiaskoenig.github.io/sbmlsim
@@ -57,7 +57,7 @@ Requires-Dist: ruff>=0.16.10; extra == 'dev'
57
57
  Requires-Dist: torch>=2.14.1; extra == 'dev'
58
58
  Requires-Dist: tox-uv>=1.36.1; extra == 'dev'
59
59
  Requires-Dist: tox>=4.64.9; extra == 'dev'
60
- Requires-Dist: ty>=0.0.84; extra == 'dev'
60
+ Requires-Dist: ty>=0.0.85; extra == 'dev'
61
61
  Requires-Dist: zensical>=0.0.68; extra == 'dev'
62
62
  Provides-Extra: sciml
63
63
  Requires-Dist: h5py>=3.16.0; extra == 'sciml'
@@ -0,0 +1,3 @@
1
+ # testsuite.submission
2
+
3
+ ::: sbmlsim.testsuite.submission
@@ -20,12 +20,14 @@ A pull request can only be merged once the four required checks are green:
20
20
  | check | workflow | content |
21
21
  | ------- | ------------- | -------------------------------------------------------------------- |
22
22
  | `tests` | `ci-cd.yml` | the test matrix, linux with python 3.13 and 3.14, macos and windows with 3.14 |
23
- | `ruff` | `ruff.yml` | `ruff check` and `ruff format --check` |
24
- | `ty` | `ty.yml` | `tox r -e ty` |
23
+ | `ruff` | `lint.yml` | `ruff check` and `ruff format --check` |
24
+ | `ty` | `lint.yml` | `ty check` |
25
25
  | `docs` | `docs.yml` | the zensical build including the api reference and the agent files |
26
26
 
27
27
  `tests` aggregates the test matrix into a single job, so the name of the required check stays the same when the matrix changes.
28
28
 
29
+ Every job sets up its environment with the action `.github/actions/setup`: uv with its cache, the python of the job, the libpython roadrunner needs on linux, and `uv sync` with the extras of the job. The jobs run the same commands as a local environment (`pytest`, `ty check`, `zensical build`), the tests against the package installed as a wheel (`uv sync --no-editable`). A run of a pull request is cancelled by the next push to it; a push to `develop` or `main` is never cancelled, a release waits for the run of its commit.
30
+
29
31
  Further rules of a pull request:
30
32
 
31
33
  - conversations have to be resolved before the merge
@@ -98,13 +100,13 @@ The tox environments are named after the interpreter (`py3.13` to `py3.14`, see
98
100
  tox r -e py3.14
99
101
  ```
100
102
 
101
- and the complete matrix, including the `ty` environment, in parallel with
103
+ and the complete matrix in parallel with
102
104
 
103
105
  ```bash
104
106
  tox run-parallel
105
107
  ```
106
108
 
107
- This needs the interpreters to be available, which uv installs with `uv python install 3.13 3.14`. Continuous integration runs the same environments as `uvx --with tox-uv tox -e py3.14`.
109
+ This needs the interpreters to be available, which uv installs with `uv python install 3.13 3.14`. Continuous integration does not use tox, it runs `pytest` in an environment of the python of the job, see [pull requests](#pull-requests).
108
110
 
109
111
  To run the tests directly against the development environment use
110
112
 
@@ -115,7 +117,7 @@ pytest tests/simulation/test_simulation.py # a single module
115
117
  pytest tests/simulation/test_simulation.py::test_timecourse # a single test
116
118
  ```
117
119
 
118
- The tests run in parallel, `addopts = "-n auto"` in `pyproject.toml` gives pytest-xdist one worker per core; `-n 0` on the command line runs everything in one process, which the debugger needs.
120
+ The tests run in parallel, `-n auto --dist worksteal` in the `addopts` of `pyproject.toml` gives pytest-xdist one worker per core, and a worker which is idle takes over the tests which wait at a busy one; `-n 0` on the command line runs everything in one process, which the debugger needs.
119
121
 
120
122
  The `conftest.py` at the root of the repository selects the non-interactive matplotlib backend for the session and puts the repository on `sys.path`, so that the tests can import the examples.
121
123
 
@@ -139,14 +141,10 @@ The docstring rules (`D`) are enforced for the package, not for `examples/` and
139
141
  Type checking is performed with [ty](https://docs.astral.sh/ty/):
140
142
 
141
143
  ```bash
142
- tox r -e ty
144
+ uv run ty check
143
145
  ```
144
146
 
145
- Or directly in the working tree:
146
-
147
- ```bash
148
- uvx ty check
149
- ```
147
+ ty resolves the imports in the environment of the project, which `uv sync --extra dev` creates; the `ty` check of continuous integration runs the same command and the pre-commit hook runs it on every commit.
150
148
 
151
149
  The configuration lives in `[tool.ty]` in `pyproject.toml`. Warnings are treated as errors, so the codebase is kept free of diagnostics. Suppress an unavoidable diagnostic with a rule specific `# ty: ignore[rule-name]` rather than a blanket comment.
152
150
 
@@ -206,7 +204,7 @@ A release is made from `develop`. Since `develop` only accepts pull requests, th
206
204
 
207
205
  1. branch off `develop`: `git switch -c release/x.y.z develop`
208
206
  2. write the release notes for the version in `release-notes/x.y.z.md`
209
- 3. make sure everything passes: `tox run-parallel`, `ruff check`, `tox r -e ty`
207
+ 3. make sure everything passes: `tox run-parallel`, `ruff check`, `uv run ty check`
210
208
  4. check the version bump: `uvx bump-my-version bump [major|minor|patch] --dry-run -vv`
211
209
  5. bump the version: `uvx bump-my-version bump [major|minor|patch]`, which updates `src/sbmlsim/__init__.py` and `CITATION.cff` and commits. It does not create the tag; a squash or rebase merge would rewrite the commit and leave the tag behind on a commit which is not part of `develop`
212
210
  6. push the branch, open the pull request against `develop` and merge it once the checks are green
@@ -219,7 +217,7 @@ A release is made from `develop`. Since `develop` only accepts pull requests, th
219
217
  git push origin x.y.z
220
218
  ```
221
219
 
222
- This starts the `CI-CD` workflow, which runs the test matrix, publishes to [pypi](https://pypi.org/project/sbmlsim/), creates the GitHub release from `release-notes/x.y.z.md` and fast-forwards `main` to the tagged commit. Check the version before pushing, a tag cannot be moved or deleted afterwards.
220
+ This starts the `CI-CD` workflow, which publishes to [pypi](https://pypi.org/project/sbmlsim/), creates the GitHub release from `release-notes/x.y.z.md` and fast-forwards `main` to the tagged commit. It does not run the test matrix again: the merge into `develop` ran it on the same commit, and the job `tested on develop` waits for that run and stops the release unless it passed, so the tag can be pushed right after the merge. Next to it the SBML Test Suite and the PEtab SciML test suite run against their pins and the submission to the SBML Test Suite Database is written, which the release attaches; a release takes a few minutes once the run on `develop` has finished. Check the version before pushing, a tag cannot be moved or deleted afterwards.
223
221
 
224
222
  8. test the installation from pypi in a fresh environment:
225
223
 
@@ -80,7 +80,7 @@ groups = [
80
80
 
81
81
  ## Running an analysis
82
82
 
83
- Every analysis is created with the simulation, the parameters, the groups and a `results_path`; `execute` creates the samples, simulates them (in parallel on `n_cores`, cached with `cache_results=True`) and computes the sensitivities, `plot` writes the figures into the results path:
83
+ Every analysis is created with the simulation, the parameters, the groups and a `results_path`; `execute` creates the samples, simulates them (in parallel on `n_cores`, one pool of processes for all groups, in the process itself for `n_cores=1`, cached with `cache_results=True`) and computes the sensitivities, `plot` writes the figures into the results path. The `seed` decides the samples and the bootstrap of the confidence intervals, so an analysis is reproducible:
84
84
 
85
85
  ```python
86
86
  from pathlib import Path
@@ -137,4 +137,4 @@ An output which does not vary over the samples has no Sobol or FAST indices: the
137
137
 
138
138
  The sensitivities are stored as `xarray.DataArray` objects per group and key (`sa.sensitivity[group_id][key]`), returned as data frames with `sensitivity_df`, and written as tables and figures into the results path. `sbmlsim.sensitivity.classification` groups parameters by their sensitivities across outputs.
139
139
 
140
- The complete example with all methods is `examples/sensitivity/sensitivity_example.py`.
140
+ The complete example with all methods is `examples/sensitivity/sensitivity_example.py`; `--cores` sets the number of processes and `--quick` runs it with the smallest samples every method accepts, which shows that it runs and not what the parameters do.