simvue 2.6.0__tar.gz → 2.6.2__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 (188) hide show
  1. simvue-2.6.2/.github/workflows/common.yml +135 -0
  2. {simvue-2.6.0 → simvue-2.6.2}/.github/workflows/deploy.yaml +2 -0
  3. simvue-2.6.2/.github/workflows/test_client_macos_nightlies.yml +26 -0
  4. simvue-2.6.2/.github/workflows/test_client_ubuntu.yml +24 -0
  5. simvue-2.6.2/.github/workflows/test_client_ubuntu_nightlies.yml +25 -0
  6. simvue-2.6.2/.github/workflows/test_client_windows_nightlies.yml +30 -0
  7. simvue-2.6.2/.github/workflows/test_group.yml +58 -0
  8. simvue-2.6.2/.github/workflows/test_multiple_python.yml +29 -0
  9. {simvue-2.6.0 → simvue-2.6.2}/CHANGELOG.md +8 -0
  10. {simvue-2.6.0 → simvue-2.6.2}/CITATION.cff +3 -3
  11. {simvue-2.6.0 → simvue-2.6.2}/PKG-INFO +2 -2
  12. {simvue-2.6.0 → simvue-2.6.2}/prek.toml +5 -5
  13. {simvue-2.6.0 → simvue-2.6.2}/pyproject.toml +2 -2
  14. {simvue-2.6.0 → simvue-2.6.2}/simvue/config/simvue_config_schema.json +91 -27
  15. {simvue-2.6.0 → simvue-2.6.2}/simvue/models.py +4 -4
  16. {simvue-2.6.0 → simvue-2.6.2}/simvue/run.py +10 -7
  17. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/python_poetry/poetry.lock +5 -5
  18. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/python_uv/uv.lock +3 -3
  19. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_run_class.py +90 -1
  20. simvue-2.6.2/uv.lock +3019 -0
  21. simvue-2.6.0/.github/workflows/test_client_macos_nightlies.yml +0 -259
  22. simvue-2.6.0/.github/workflows/test_client_ubuntu.yml +0 -254
  23. simvue-2.6.0/.github/workflows/test_client_ubuntu_nightlies.yml +0 -262
  24. simvue-2.6.0/.github/workflows/test_client_windows_nightlies.yml +0 -268
  25. simvue-2.6.0/.github/workflows/test_multiple_python.yml +0 -307
  26. simvue-2.6.0/uv.lock +0 -2508
  27. {simvue-2.6.0 → simvue-2.6.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {simvue-2.6.0 → simvue-2.6.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  29. {simvue-2.6.0 → simvue-2.6.2}/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +0 -0
  30. {simvue-2.6.0 → simvue-2.6.2}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
  31. {simvue-2.6.0 → simvue-2.6.2}/.github/dependabot.yml +0 -0
  32. {simvue-2.6.0 → simvue-2.6.2}/.github/pull_request_template.md +0 -0
  33. {simvue-2.6.0 → simvue-2.6.2}/.github/workflows/citation.yml +0 -0
  34. {simvue-2.6.0 → simvue-2.6.2}/.github/workflows/codeql.yml +0 -0
  35. {simvue-2.6.0 → simvue-2.6.2}/.github/workflows/examples.yml +0 -0
  36. {simvue-2.6.0 → simvue-2.6.2}/.github/workflows/prek.yml +0 -0
  37. {simvue-2.6.0 → simvue-2.6.2}/.gitignore +0 -0
  38. {simvue-2.6.0 → simvue-2.6.2}/.gitmodules +0 -0
  39. {simvue-2.6.0 → simvue-2.6.2}/CODE_OF_CONDUCT.md +0 -0
  40. {simvue-2.6.0 → simvue-2.6.2}/CONTRIBUTING.md +0 -0
  41. {simvue-2.6.0 → simvue-2.6.2}/LICENSE +0 -0
  42. {simvue-2.6.0 → simvue-2.6.2}/README.md +0 -0
  43. {simvue-2.6.0 → simvue-2.6.2}/examples/Bluemira/README.md +0 -0
  44. {simvue-2.6.0 → simvue-2.6.2}/examples/Bluemira/geometry_optimisation.py +0 -0
  45. {simvue-2.6.0 → simvue-2.6.2}/examples/Geant4/README.md +0 -0
  46. {simvue-2.6.0 → simvue-2.6.2}/examples/Geant4/geant4_simvue.py +0 -0
  47. {simvue-2.6.0 → simvue-2.6.2}/examples/Geant4/requirements.txt +0 -0
  48. {simvue-2.6.0 → simvue-2.6.2}/examples/Logging/README.md +0 -0
  49. {simvue-2.6.0 → simvue-2.6.2}/examples/Logging/logging-to-simvue.py +0 -0
  50. {simvue-2.6.0 → simvue-2.6.2}/examples/Optuna/README.md +0 -0
  51. {simvue-2.6.0 → simvue-2.6.2}/examples/Optuna/requirements.txt +0 -0
  52. {simvue-2.6.0 → simvue-2.6.2}/examples/Optuna/simvue_optuna_pytorch.py +0 -0
  53. {simvue-2.6.0 → simvue-2.6.2}/examples/PyTorch/README.md +0 -0
  54. {simvue-2.6.0 → simvue-2.6.2}/examples/PyTorch/main.py +0 -0
  55. {simvue-2.6.0 → simvue-2.6.2}/examples/PyTorch/requirements.txt +0 -0
  56. {simvue-2.6.0 → simvue-2.6.2}/examples/README.md +0 -0
  57. {simvue-2.6.0 → simvue-2.6.2}/examples/SU2/README.md +0 -0
  58. {simvue-2.6.0 → simvue-2.6.2}/examples/SU2/SU2.py +0 -0
  59. {simvue-2.6.0 → simvue-2.6.2}/examples/SU2/SU2.sh +0 -0
  60. {simvue-2.6.0 → simvue-2.6.2}/notebooks/README.md +0 -0
  61. {simvue-2.6.0 → simvue-2.6.2}/notebooks/basic_example.ipynb +0 -0
  62. {simvue-2.6.0 → simvue-2.6.2}/notebooks/detailed_example.ipynb +0 -0
  63. {simvue-2.6.0 → simvue-2.6.2}/notebooks/non_python_example.ipynb +0 -0
  64. {simvue-2.6.0 → simvue-2.6.2}/notebooks/temperatures.sh +0 -0
  65. {simvue-2.6.0 → simvue-2.6.2}/poetry.lock +0 -0
  66. {simvue-2.6.0 → simvue-2.6.2}/simvue/__init__.py +0 -0
  67. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/__init__.py +0 -0
  68. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/__init__.py +0 -0
  69. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/administrator/__init__.py +0 -0
  70. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/administrator/tenant.py +0 -0
  71. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/administrator/user.py +0 -0
  72. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/__init__.py +0 -0
  73. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/base.py +0 -0
  74. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/events.py +0 -0
  75. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/fetch.py +0 -0
  76. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/metrics.py +0 -0
  77. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/alert/user.py +0 -0
  78. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/artifact/__init__.py +0 -0
  79. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/artifact/base.py +0 -0
  80. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/artifact/fetch.py +0 -0
  81. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/artifact/file.py +0 -0
  82. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/artifact/object.py +0 -0
  83. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/base.py +0 -0
  84. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/events.py +0 -0
  85. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/filter/__init__.py +0 -0
  86. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/filter/base.py +0 -0
  87. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/filter/folder.py +0 -0
  88. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/filter/run.py +0 -0
  89. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/folder.py +0 -0
  90. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/grids.py +0 -0
  91. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/metrics.py +0 -0
  92. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/run.py +0 -0
  93. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/stats.py +0 -0
  94. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/storage/__init__.py +0 -0
  95. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/storage/base.py +0 -0
  96. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/storage/fetch.py +0 -0
  97. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/storage/file.py +0 -0
  98. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/storage/s3.py +0 -0
  99. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/objects/tag.py +0 -0
  100. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/request.py +0 -0
  101. {simvue-2.6.0 → simvue-2.6.2}/simvue/api/url.py +0 -0
  102. {simvue-2.6.0 → simvue-2.6.2}/simvue/bin/__init__.py +0 -0
  103. {simvue-2.6.0 → simvue-2.6.2}/simvue/bin/sender.py +0 -0
  104. {simvue-2.6.0 → simvue-2.6.2}/simvue/client.py +0 -0
  105. {simvue-2.6.0 → simvue-2.6.2}/simvue/config/__init__.py +0 -0
  106. {simvue-2.6.0 → simvue-2.6.2}/simvue/config/files.py +0 -0
  107. {simvue-2.6.0 → simvue-2.6.2}/simvue/config/parameters.py +0 -0
  108. {simvue-2.6.0 → simvue-2.6.2}/simvue/config/user.py +0 -0
  109. {simvue-2.6.0 → simvue-2.6.2}/simvue/converters.py +0 -0
  110. {simvue-2.6.0 → simvue-2.6.2}/simvue/dispatch/__init__.py +0 -0
  111. {simvue-2.6.0 → simvue-2.6.2}/simvue/dispatch/base.py +0 -0
  112. {simvue-2.6.0 → simvue-2.6.2}/simvue/dispatch/direct.py +0 -0
  113. {simvue-2.6.0 → simvue-2.6.2}/simvue/dispatch/dispatcher.py +0 -0
  114. {simvue-2.6.0 → simvue-2.6.2}/simvue/dispatch/queued.py +0 -0
  115. {simvue-2.6.0 → simvue-2.6.2}/simvue/eco/__init__.py +0 -0
  116. {simvue-2.6.0 → simvue-2.6.2}/simvue/eco/api_client.py +0 -0
  117. {simvue-2.6.0 → simvue-2.6.2}/simvue/eco/config.py +0 -0
  118. {simvue-2.6.0 → simvue-2.6.2}/simvue/eco/emissions_monitor.py +0 -0
  119. {simvue-2.6.0 → simvue-2.6.2}/simvue/exception.py +0 -0
  120. {simvue-2.6.0 → simvue-2.6.2}/simvue/executor.py +0 -0
  121. {simvue-2.6.0 → simvue-2.6.2}/simvue/handler.py +0 -0
  122. {simvue-2.6.0 → simvue-2.6.2}/simvue/metadata.py +0 -0
  123. {simvue-2.6.0 → simvue-2.6.2}/simvue/metrics.py +0 -0
  124. {simvue-2.6.0 → simvue-2.6.2}/simvue/pynvml.py +0 -0
  125. {simvue-2.6.0 → simvue-2.6.2}/simvue/sender/__init__.py +0 -0
  126. {simvue-2.6.0 → simvue-2.6.2}/simvue/sender/actions.py +0 -0
  127. {simvue-2.6.0 → simvue-2.6.2}/simvue/sender/base.py +0 -0
  128. {simvue-2.6.0 → simvue-2.6.2}/simvue/serialization.py +0 -0
  129. {simvue-2.6.0 → simvue-2.6.2}/simvue/simvue_types.py +0 -0
  130. {simvue-2.6.0 → simvue-2.6.2}/simvue/system.py +0 -0
  131. {simvue-2.6.0 → simvue-2.6.2}/simvue/utilities.py +0 -0
  132. {simvue-2.6.0 → simvue-2.6.2}/simvue/version.py +0 -0
  133. {simvue-2.6.0 → simvue-2.6.2}/simvue-black.png +0 -0
  134. {simvue-2.6.0 → simvue-2.6.2}/tests/cli/test_sender_command.py +0 -0
  135. {simvue-2.6.0 → simvue-2.6.2}/tests/conftest.py +0 -0
  136. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/Cargo.lock +0 -0
  137. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/Cargo.toml +0 -0
  138. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/Project.toml +0 -0
  139. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/SU2_inv_ONERAM6.cfg +0 -0
  140. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/package-lock.json +0 -0
  141. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/pyproject.toml +0 -0
  142. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/python_conda/environment.yml +0 -0
  143. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/python_poetry/pyproject.toml +0 -0
  144. {simvue-2.6.0 → simvue-2.6.2}/tests/example_data/python_uv/pyproject.toml +0 -0
  145. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_client.py +0 -0
  146. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_config.py +0 -0
  147. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_dispatch.py +0 -0
  148. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_executor.py +0 -0
  149. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_run_artifact_upload.py +0 -0
  150. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_run_execute_process.py +0 -0
  151. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_scenarios.py +0 -0
  152. {simvue-2.6.0 → simvue-2.6.2}/tests/functional/test_utilities.py +0 -0
  153. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_conversion_to_dataframe.py +0 -0
  154. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_ecoclient.py +0 -0
  155. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_event_alert.py +0 -0
  156. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_events.py +0 -0
  157. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_fetch.py +0 -0
  158. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_file_artifact.py +0 -0
  159. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_file_storage.py +0 -0
  160. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_filters.py +0 -0
  161. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_folder.py +0 -0
  162. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_grids.py +0 -0
  163. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_matplotlib_figure_mime_type.py +0 -0
  164. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_metadata.py +0 -0
  165. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_metric_range_alert.py +0 -0
  166. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_metric_threshold_alert.py +0 -0
  167. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_metrics.py +0 -0
  168. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_numpy_array_mime_type.py +0 -0
  169. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_numpy_array_serialization.py +0 -0
  170. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_object_artifact.py +0 -0
  171. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_pandas_dataframe_mimetype.py +0 -0
  172. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_pandas_dataframe_serialization.py +0 -0
  173. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_pickle_serialization.py +0 -0
  174. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_plotly_figure_mime_type.py +0 -0
  175. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_pytorch_tensor_mime_type.py +0 -0
  176. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_pytorch_tensor_serialization.py +0 -0
  177. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_request.py +0 -0
  178. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_run.py +0 -0
  179. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_run_init_folder.py +0 -0
  180. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_run_init_tags.py +0 -0
  181. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_s3_storage.py +0 -0
  182. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_sender.py +0 -0
  183. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_stats.py +0 -0
  184. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_suppress_errors.py +0 -0
  185. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_tag.py +0 -0
  186. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_tenant.py +0 -0
  187. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_user.py +0 -0
  188. {simvue-2.6.0 → simvue-2.6.2}/tests/unit/test_user_alert.py +0 -0
@@ -0,0 +1,135 @@
1
+ on:
2
+ workflow_call:
3
+ inputs:
4
+ python-version:
5
+ required: false
6
+ default: "3.14"
7
+ type: string
8
+ platform:
9
+ required: false
10
+ default: ubuntu-latest
11
+ type: string
12
+ unix_system:
13
+ required: false
14
+ default: true
15
+ type: boolean
16
+ test-command:
17
+ required: false
18
+ type: string
19
+ default: $GITHUB_WORKSPACE/.venv/bin/pytest
20
+ secrets:
21
+ SIMVUE_URL:
22
+ required: true
23
+ SIMVUE_TOKEN:
24
+ required: true
25
+
26
+ jobs:
27
+ object_retrieval:
28
+ uses: ./.github/workflows/test_group.yml
29
+ with:
30
+ python-version: ${{ inputs.python-version }}
31
+ platform: ${{ inputs.platform }}
32
+ test-group: object_retrieval ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
33
+ group-label: Object Retrieval
34
+ test-command: ${{ inputs.test-command }}
35
+ secrets:
36
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
37
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
38
+ object_removal:
39
+ uses: ./.github/workflows/test_group.yml
40
+ with:
41
+ python-version: ${{ inputs.python-version }}
42
+ platform: ${{ inputs.platform }}
43
+ test-group: object_removal ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
44
+ group-label: Object Removal
45
+ test-command: ${{ inputs.test-command }}
46
+ secrets:
47
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
48
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
49
+ dispatch_tests:
50
+ uses: ./.github/workflows/test_group.yml
51
+ with:
52
+ python-version: ${{ inputs.python-version }}
53
+ platform: ${{ inputs.platform }}
54
+ test-group: dispatch ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
55
+ test-command: ${{ inputs.test-command }}
56
+ group-label: Dispatch
57
+ secrets:
58
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
59
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
60
+ run_tests_online:
61
+ uses: ./.github/workflows/test_group.yml
62
+ with:
63
+ python-version: ${{ inputs.python-version }}
64
+ platform: ${{ inputs.platform }}
65
+ test-group: online and not api ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
66
+ group-label: Run Tests (Online)
67
+ test-command: ${{ inputs.test-command }}
68
+ secrets:
69
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
70
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
71
+ run_tests_offline:
72
+ uses: ./.github/workflows/test_group.yml
73
+ with:
74
+ python-version: ${{ inputs.python-version }}
75
+ platform: ${{ inputs.platform }}
76
+ test-group: (offline and not api ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}) or cli
77
+ test-command: ${{ inputs.test-command }}
78
+ group-label: Run Tests (Offline)
79
+ secrets:
80
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
81
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
82
+ config_tests:
83
+ uses: ./.github/workflows/test_group.yml
84
+ with:
85
+ python-version: ${{ inputs.python-version }}
86
+ platform: ${{ inputs.platform }}
87
+ test-group: config ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
88
+ test-command: ${{ inputs.test-command }}
89
+ group-label: Configuration
90
+ secrets:
91
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
92
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
93
+ scenario_tests:
94
+ uses: ./.github/workflows/test_group.yml
95
+ with:
96
+ python-version: ${{ inputs.python-version }}
97
+ platform: ${{ inputs.platform }}
98
+ test-command: ${{ inputs.test-command }}
99
+ test-group: scenario and not run
100
+ group-label: Scenarios ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
101
+ secrets:
102
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
103
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
104
+ executor_tests:
105
+ uses: ./.github/workflows/test_group.yml
106
+ with:
107
+ python-version: ${{ inputs.python-version }}
108
+ platform: ${{ inputs.platform }}
109
+ test-command: ${{ inputs.test-command }}
110
+ test-group: executor ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
111
+ group-label: Executor
112
+ parallel-tasks: 0
113
+ secrets:
114
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
115
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
116
+ api_tests:
117
+ uses: ./.github/workflows/test_group.yml
118
+ with:
119
+ python-version: ${{ inputs.python-version }}
120
+ platform: ${{ inputs.platform }}
121
+ test-command: ${{ inputs.test-command }}
122
+ test-group: api ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
123
+ group-label: Low Level API
124
+ secrets:
125
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
126
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
127
+ local_tests:
128
+ uses: ./.github/workflows/test_group.yml
129
+ with:
130
+ python-version: ${{ inputs.python-version }}
131
+ platform: ${{ inputs.platform }}
132
+ test-command: ${{ inputs.test-command }}
133
+ test-group: local ${{ startsWith(inputs.platform, 'windows') && 'and not unix' || '' }}
134
+ group-label: Local
135
+ secrets: inherit
@@ -74,6 +74,8 @@ jobs:
74
74
  contents: write
75
75
  id-token: write
76
76
  steps:
77
+ - name: Checkout repository
78
+ uses: actions/checkout@v7
77
79
  - name: Download all the dists
78
80
  uses: actions/download-artifact@v8
79
81
  with:
@@ -0,0 +1,26 @@
1
+ name: Simvue Nightlies (macOS)
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: "30 23 * * *"
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ defaults:
16
+ run:
17
+ shell: pwsh
18
+
19
+ jobs:
20
+ test_suite:
21
+ name: Test Suite
22
+ uses: ./.github/workflows/common.yml
23
+ with:
24
+ platform: macos-latest
25
+ python-version: "3.14"
26
+ secrets: inherit
@@ -0,0 +1,24 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Simvue Python API (Ubuntu)
5
+
6
+ on:
7
+ push:
8
+ branches: ["main", "dev", "hotfix/update-ci"]
9
+ pull_request:
10
+ branches: ["main", "dev", "hotfix/update-ci"]
11
+ workflow_dispatch:
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ test_suite:
19
+ name: Test Suite
20
+ uses: ./.github/workflows/common.yml
21
+ with:
22
+ platform: ubuntu-latest
23
+ python-version: "3.14"
24
+ secrets: inherit
@@ -0,0 +1,25 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Simvue Nightlies (Ubuntu)
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ schedule:
9
+ - cron: "30 0 * * *"
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: ${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ test_suite:
20
+ name: Test Suite
21
+ uses: ./.github/workflows/common.yml
22
+ with:
23
+ platform: ubuntu-latest
24
+ python-version: "3.14"
25
+ secrets: inherit
@@ -0,0 +1,30 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Simvue Nightlies (Windows)
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ schedule:
9
+ - cron: "0 0 * * *"
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: ${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ defaults:
19
+ run:
20
+ shell: pwsh
21
+
22
+ jobs:
23
+ test_suite:
24
+ name: Test Suite
25
+ uses: ./.github/workflows/common.yml
26
+ with:
27
+ platform: windows-latest
28
+ python-version: "3.14"
29
+ test-command: '& "$env:GITHUB_WORKSPACE/.venv/Scripts/pytest.exe"'
30
+ secrets: inherit
@@ -0,0 +1,58 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ python-version:
7
+ required: false
8
+ default: "3.14"
9
+ type: string
10
+ platform:
11
+ required: false
12
+ default: ubuntu-latest
13
+ type: string
14
+ test-group:
15
+ required: true
16
+ type: string
17
+ group-label:
18
+ required: true
19
+ type: string
20
+ parallel-tasks:
21
+ required: false
22
+ type: number
23
+ default: 8
24
+ test-command:
25
+ required: true
26
+ type: string
27
+ secrets:
28
+ SIMVUE_URL:
29
+ required: true
30
+ SIMVUE_TOKEN:
31
+ required: true
32
+
33
+ permissions:
34
+ contents: read
35
+
36
+ jobs:
37
+ object_retrieval:
38
+ runs-on: ${{ inputs.platform }}
39
+ name: ${{ inputs.group-label }}
40
+ timeout-minutes: 30
41
+ steps:
42
+ - uses: actions/checkout@v7
43
+ - name: Set up Python
44
+ uses: actions/setup-python@v7
45
+ with:
46
+ python-version: ${{ inputs.python-version }}
47
+ - name: Install uv
48
+ uses: astral-sh/setup-uv@v10.2.0
49
+ - name: Install dependencies
50
+ run: |
51
+ uv sync --all-extras --all-groups
52
+ uv pip install torch --index-url https://download.pytorch.org/whl/cpu || true
53
+ - name: Test with pytest
54
+ env:
55
+ SIMVUE_URL: ${{ secrets.SIMVUE_URL }}
56
+ SIMVUE_TOKEN: ${{ secrets.SIMVUE_TOKEN }}
57
+ run: |
58
+ ${{ inputs.test-command }} -x -m "${{ inputs.test-group }}" -c /dev/null -p no:warnings -n ${{ inputs.parallel-tasks }} -v -o cache_dir=${GITHUB_WORKSPACE}/.pytest-cache
@@ -0,0 +1,29 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a single version of Python
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Simvue Nightlies (Python Versions)
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ schedule:
9
+ - cron: "30 1 * * *"
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: ${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ test_suite:
20
+ name: Test Suite
21
+ uses: ./.github/workflows/common.yml
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
26
+ with:
27
+ platform: ubuntu-latest
28
+ python-version: ${{ matrix.python-version }}
29
+ secrets: inherit
@@ -1,5 +1,13 @@
1
1
  # Change Log
2
2
 
3
+ ## [v2.6.2](https://github.com/simvue-io/python-api/releases/tag/v2.6.2) - 2026-10-21
4
+
5
+ - Added support for Python 3.15.
6
+
7
+ ## [v2.6.1](https://github.com/simvue-io/python-api/releases/tag/v2.6.1) - 2026-09-29
8
+
9
+ - Revert `datetime.UTC` to `datetime.timezone.utc` for legacy support.
10
+
3
11
  ## [v2.6.0](https://github.com/simvue-io/python-api/releases/tag/v2.6.0) - 2026-09-25
4
12
 
5
13
  - Allow `%` in metric names.
@@ -43,6 +43,6 @@ keywords:
43
43
  - alerting
44
44
  - simulation
45
45
  license: Apache-2.0
46
- commit: 15e671cad88b1955783d4608cc09f49f4757b498
47
- version: 2.6.0
48
- date-released: "2026-09-25"
46
+ commit: 2081ea4ca78da2e05c12a29d10a6c2a6d3308e8d
47
+ version: 2.6.2
48
+ date-released: "2026-10-21"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: simvue
3
- Version: 2.6.0
3
+ Version: 2.6.2
4
4
  Summary: Simulation tracking and monitoring
5
5
  Project-URL: homepage, https://simvue.io
6
6
  Project-URL: repository, https://github.com/simvue-io/python-api
@@ -25,7 +25,7 @@ Classifier: Topic :: Scientific/Engineering
25
25
  Classifier: Topic :: System :: Monitoring
26
26
  Classifier: Topic :: Utilities
27
27
  Classifier: Typing :: Typed
28
- Requires-Python: <3.15,>=3.10
28
+ Requires-Python: <3.16,>=3.10
29
29
  Requires-Dist: click>=8.5.0
30
30
  Requires-Dist: deepmerge>=3.0.1
31
31
  Requires-Dist: email-validator>=2.3.0
@@ -34,7 +34,7 @@ id = "check-added-large-files"
34
34
 
35
35
  [[repos]]
36
36
  repo = "https://github.com/astral-sh/ruff-pre-commit"
37
- rev = "v0.16.8"
37
+ rev = "v0.16.9"
38
38
 
39
39
  [[repos.hooks]]
40
40
  id = "ruff-check"
@@ -62,7 +62,7 @@ args = ["-lll", "--recursive", "clumper"]
62
62
 
63
63
  [[repos]]
64
64
  repo = "https://github.com/python-poetry/poetry"
65
- rev = "2.4.1"
65
+ rev = "2.5.1"
66
66
  [[repos.hooks]]
67
67
  id = "poetry-check"
68
68
 
@@ -75,14 +75,14 @@ args = ["--all-extras", "--all-groups"]
75
75
 
76
76
  [[repos]]
77
77
  repo = "https://github.com/GabDug/sync-pre-commit-lock"
78
- rev = "v0.9.0"
78
+ rev = "v0.9.1"
79
79
 
80
80
  [[repos.hooks]]
81
81
  id = "sync-pre-commit-uv"
82
82
 
83
83
  [[repos]]
84
84
  repo = "https://github.com/astral-sh/uv-pre-commit"
85
- rev = "0.11.32"
85
+ rev = "0.12.21"
86
86
 
87
87
  [[repos.hooks]]
88
88
  id = "uv-lock"
@@ -96,7 +96,7 @@ id = "validate-cff"
96
96
 
97
97
  [[repos]]
98
98
  repo = "https://github.com/DetachHead/basedpyright-prek-mirror"
99
- rev = "1.39.9"
99
+ rev = "1.40.1"
100
100
 
101
101
  [[repos.hooks]]
102
102
  id = "basedpyright"
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "simvue"
3
- version = "2.6.0"
3
+ version = "2.6.2"
4
4
  description = "Simulation tracking and monitoring"
5
5
  authors = [{ name = "Simvue Development Team", email = "info@simvue.io" }]
6
6
  license = "Apache-2.0"
7
- requires-python = ">=3.10,<3.15"
7
+ requires-python = ">=3.10,<3.16"
8
8
  readme = "README.md"
9
9
  classifiers = [
10
10
  "Development Status :: 5 - Production/Stable",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$defs": {
3
3
  "CertificateSpecifications": {
4
+ "additionalProperties": false,
4
5
  "properties": {
5
6
  "client_cert": {
6
7
  "anyOf": [
@@ -60,6 +61,8 @@
60
61
  "type": "object"
61
62
  },
62
63
  "ClientGeneralOptions": {
64
+ "additionalProperties": false,
65
+ "description": "Specify client options.",
63
66
  "properties": {
64
67
  "debug": {
65
68
  "default": false,
@@ -71,6 +74,8 @@
71
74
  "type": "object"
72
75
  },
73
76
  "DefaultRunSpecifications": {
77
+ "additionalProperties": false,
78
+ "description": "Specify run default configurations.",
74
79
  "properties": {
75
80
  "description": {
76
81
  "anyOf": [
@@ -91,32 +96,14 @@
91
96
  "type": "string"
92
97
  },
93
98
  "metadata": {
94
- "anyOf": [
95
- {
96
- "additionalProperties": {
97
- "anyOf": [
98
- {
99
- "type": "string"
100
- },
101
- {
102
- "type": "integer"
103
- },
104
- {
105
- "type": "number"
106
- },
107
- {
108
- "type": "boolean"
109
- }
110
- ]
111
- },
112
- "type": "object"
113
- },
114
- {
115
- "type": "null"
116
- }
117
- ],
118
- "default": null,
119
- "title": "Metadata"
99
+ "$ref": "#/$defs/MetadataSpecifications",
100
+ "default": {
101
+ "custom": null,
102
+ "environment": true,
103
+ "git": true,
104
+ "record_shell_vars": null,
105
+ "system": true
106
+ }
120
107
  },
121
108
  "mode": {
122
109
  "default": "online",
@@ -267,7 +254,74 @@
267
254
  "title": "EcoConfig",
268
255
  "type": "object"
269
256
  },
257
+ "MetadataSpecifications": {
258
+ "additionalProperties": false,
259
+ "properties": {
260
+ "custom": {
261
+ "anyOf": [
262
+ {
263
+ "additionalProperties": {
264
+ "anyOf": [
265
+ {
266
+ "type": "string"
267
+ },
268
+ {
269
+ "type": "integer"
270
+ },
271
+ {
272
+ "type": "number"
273
+ },
274
+ {
275
+ "type": "boolean"
276
+ }
277
+ ]
278
+ },
279
+ "type": "object"
280
+ },
281
+ {
282
+ "type": "null"
283
+ }
284
+ ],
285
+ "default": null,
286
+ "title": "Custom"
287
+ },
288
+ "environment": {
289
+ "default": true,
290
+ "title": "Environment",
291
+ "type": "boolean"
292
+ },
293
+ "git": {
294
+ "default": true,
295
+ "title": "Git",
296
+ "type": "boolean"
297
+ },
298
+ "record_shell_vars": {
299
+ "anyOf": [
300
+ {
301
+ "items": {
302
+ "type": "string"
303
+ },
304
+ "type": "array"
305
+ },
306
+ {
307
+ "type": "null"
308
+ }
309
+ ],
310
+ "default": null,
311
+ "title": "Record Shell Vars"
312
+ },
313
+ "system": {
314
+ "default": true,
315
+ "title": "System",
316
+ "type": "boolean"
317
+ }
318
+ },
319
+ "title": "MetadataSpecifications",
320
+ "type": "object"
321
+ },
270
322
  "MetricsSpecifications": {
323
+ "additionalProperties": false,
324
+ "description": "Specify metric configurations.",
271
325
  "properties": {
272
326
  "enable_emission_metrics": {
273
327
  "default": false,
@@ -292,6 +346,8 @@
292
346
  "type": "object"
293
347
  },
294
348
  "OfflineSpecifications": {
349
+ "additionalProperties": false,
350
+ "description": "Specify offline mode configurations.",
295
351
  "properties": {
296
352
  "cache": {
297
353
  "anyOf": [
@@ -312,6 +368,7 @@
312
368
  },
313
369
  "ServerSpecifications": {
314
370
  "additionalProperties": false,
371
+ "description": "Specify server configurations.",
315
372
  "properties": {
316
373
  "certificates": {
317
374
  "$ref": "#/$defs/CertificateSpecifications"
@@ -367,6 +424,7 @@
367
424
  }
368
425
  },
369
426
  "additionalProperties": false,
427
+ "description": "Configure session.",
370
428
  "properties": {
371
429
  "client": {
372
430
  "$ref": "#/$defs/ClientGeneralOptions",
@@ -422,7 +480,13 @@
422
480
  "default": {
423
481
  "description": null,
424
482
  "folder": "/",
425
- "metadata": null,
483
+ "metadata": {
484
+ "custom": null,
485
+ "environment": true,
486
+ "git": true,
487
+ "record_shell_vars": null,
488
+ "system": true
489
+ },
426
490
  "mode": "online",
427
491
  "name": null,
428
492
  "record_shell_vars": null,
@@ -77,13 +77,13 @@ def simvue_timestamp(
77
77
 
78
78
  """
79
79
  if not date_time:
80
- date_time = datetime.datetime.now(datetime.UTC)
80
+ date_time = datetime.datetime.now(datetime.timezone.utc)
81
81
  elif isinstance(date_time, str):
82
82
  _local_time = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo
83
83
  date_time = (
84
84
  datetime.datetime.strptime(date_time, DATETIME_FORMAT)
85
85
  .replace(tzinfo=_local_time)
86
- .astimezone(datetime.UTC)
86
+ .astimezone(datetime.timezone.utc)
87
87
  )
88
88
  return date_time.strftime(DATETIME_FORMAT)
89
89
 
@@ -123,14 +123,14 @@ class GridMetricSet(pydantic.BaseModel):
123
123
  time: float | int
124
124
  timestamp: typing.Annotated[str | None, pydantic.BeforeValidator(simvue_timestamp)]
125
125
  step: pydantic.NonNegativeInt
126
- array: list[float] | list[list[float]] | np.ndarray
126
+ array: list[float] | list[list[float]] | np.ndarray[float]
127
127
  grid: str
128
128
  metric: str
129
129
 
130
130
  @pydantic.field_serializer("array", when_used="always")
131
131
  def serialize_array(
132
132
  self,
133
- value: np.ndarray | list[float] | list[list[float]],
133
+ value: np.ndarray[float] | list[float] | list[list[float]],
134
134
  *_,
135
135
  ) -> list[float] | list[list[float]]:
136
136
  """Serialize a numpy array."""