experimaestro 0.22.0__zip → 0.24.0__zip

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.

Potentially problematic release.


This version of experimaestro might be problematic. Click here for more details.

Files changed (189) hide show
  1. {experimaestro-0.22.0 → experimaestro-0.24.0}/CHANGELOG.md +21 -0
  2. {experimaestro-0.22.0 → experimaestro-0.24.0}/PKG-INFO +22 -1
  3. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/task.md +45 -7
  4. {experimaestro-0.22.0 → experimaestro-0.24.0}/pyproject.toml +1 -1
  5. {experimaestro-0.22.0 → experimaestro-0.24.0}/requirements.txt +6 -3
  6. {experimaestro-0.22.0 → experimaestro-0.24.0}/setup.cfg +1 -1
  7. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/__init__.py +7 -5
  8. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/__main__.py +3 -3
  9. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/commandline.py +0 -8
  10. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/objects.py +218 -164
  11. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/objects.pyi +25 -11
  12. experimaestro-0.24.0/src/experimaestro/core/serializers.py +52 -0
  13. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/types.py +44 -2
  14. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/generators.py +7 -6
  15. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/huggingface.py +2 -2
  16. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/__init__.py +19 -7
  17. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/base.py +21 -3
  18. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/server/__init__.py +10 -2
  19. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_identifier.py +33 -6
  20. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_instance.py +18 -15
  21. experimaestro-0.24.0/src/experimaestro/tests/test_outputs.py +50 -0
  22. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_progress.py +7 -9
  23. experimaestro-0.24.0/src/experimaestro/tests/test_serializers.py +54 -0
  24. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/jobs.py +2 -2
  25. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/version.py +2 -2
  26. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/xpmutils.py +3 -3
  27. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/PKG-INFO +22 -1
  28. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/SOURCES.txt +2 -1
  29. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/requires.txt +6 -2
  30. experimaestro-0.22.0/src/experimaestro/tests/test_outputs.py +0 -88
  31. experimaestro-0.22.0/src/experimaestro/tests/test_serialization.py +0 -45
  32. {experimaestro-0.22.0 → experimaestro-0.24.0}/.circleci/config.yml +0 -0
  33. {experimaestro-0.22.0 → experimaestro-0.24.0}/.flake8 +0 -0
  34. {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/release.yaml +0 -0
  35. {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/workflows/pytest.yml +0 -0
  36. {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/workflows/python-publish.yml +0 -0
  37. {experimaestro-0.22.0 → experimaestro-0.24.0}/.gitignore +0 -0
  38. {experimaestro-0.22.0 → experimaestro-0.24.0}/.gitmodules +0 -0
  39. {experimaestro-0.22.0 → experimaestro-0.24.0}/.pre-commit-config.yaml +0 -0
  40. {experimaestro-0.22.0 → experimaestro-0.24.0}/.prettierignore +0 -0
  41. {experimaestro-0.22.0 → experimaestro-0.24.0}/.readthedocs.yml +0 -0
  42. {experimaestro-0.22.0 → experimaestro-0.24.0}/LICENSE +0 -0
  43. {experimaestro-0.22.0 → experimaestro-0.24.0}/MANIFEST.in +0 -0
  44. {experimaestro-0.22.0 → experimaestro-0.24.0}/README.md +0 -0
  45. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/.gitignore +0 -0
  46. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/.nolluprc.js +0 -0
  47. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/CHANGELOG.md +0 -0
  48. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/README.md +0 -0
  49. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/package-lock.json +0 -0
  50. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/package.json +0 -0
  51. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/postcss.config.js +0 -0
  52. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/favicon.ico +0 -0
  53. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/index.html +0 -0
  54. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/login.html +0 -0
  55. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/manifest.json +0 -0
  56. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/App.tsx +0 -0
  57. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Experiments.tsx +0 -0
  58. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Services.tsx +0 -0
  59. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/TaskDetail.tsx +0 -0
  60. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/TaskJobs.tsx +0 -0
  61. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Tasks.tsx +0 -0
  62. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/client.ts +0 -0
  63. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/clipboard.ts +0 -0
  64. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/index.css +0 -0
  65. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/index.tsx +0 -0
  66. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/logo.png +0 -0
  67. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/logo.pxm +0 -0
  68. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/reducers.ts +0 -0
  69. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/store.ts +0 -0
  70. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/theme/_jobs.scss +0 -0
  71. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/theme/theme.scss +0 -0
  72. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/ui/messages.tsx +0 -0
  73. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/tsconfig.json +0 -0
  74. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/webpack.config.ts +0 -0
  75. {experimaestro-0.22.0 → experimaestro-0.24.0}/app/xp/run.py +0 -0
  76. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/changelog.md +0 -0
  77. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/cli.md +0 -0
  78. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/concepts.md +0 -0
  79. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/configuration.md +0 -0
  80. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/connectors/index.md +0 -0
  81. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/documenting.md +0 -0
  82. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/config.md +0 -0
  83. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/overview.md +0 -0
  84. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/plan.md +0 -0
  85. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/faq.md +0 -0
  86. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/index.md +0 -0
  87. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/jupyter.md +0 -0
  88. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/launchers/index.md +0 -0
  89. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/requirements.txt +0 -0
  90. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/serialization.md +0 -0
  91. {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/tutorial.md +0 -0
  92. {experimaestro-0.22.0 → experimaestro-0.24.0}/mkdocs.yml +0 -0
  93. {experimaestro-0.22.0 → experimaestro-0.24.0}/pytest.ini +0 -0
  94. {experimaestro-0.22.0 → experimaestro-0.24.0}/scripts/longtask.py +0 -0
  95. {experimaestro-0.22.0 → experimaestro-0.24.0}/setup.py +0 -0
  96. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/annotations.py +0 -0
  97. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/checkers.py +0 -0
  98. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/click.py +0 -0
  99. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/compat.py +0 -0
  100. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/__init__.py +0 -0
  101. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/local.py +0 -0
  102. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/ssh.py +0 -0
  103. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/__init__.py +0 -0
  104. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/arguments.py +0 -0
  105. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/context.py +0 -0
  106. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/filter.py +0 -0
  107. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/ipc.py +0 -0
  108. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/__init__.py +0 -0
  109. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/base.py +0 -0
  110. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/parser.py +0 -0
  111. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/registry.py +0 -0
  112. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/specs.py +0 -0
  113. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/direct.py +0 -0
  114. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/oar.py +0 -0
  115. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/slurm.py +0 -0
  116. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/locking.py +0 -0
  117. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/__init__.py +0 -0
  118. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/annotations.py +0 -0
  119. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/base.py +0 -0
  120. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/metaloader.py +0 -0
  121. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/style.css +0 -0
  122. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mypy.py +0 -0
  123. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/notifications.py +0 -0
  124. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/rpyc.py +0 -0
  125. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/run.py +0 -0
  126. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/__init__.py +0 -0
  127. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/dependencies.py +0 -0
  128. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/environment.py +0 -0
  129. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/services.py +0 -0
  130. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/workspace.py +0 -0
  131. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scriptbuilder.py +0 -0
  132. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/settings.py +0 -0
  133. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/sphinx/__init__.py +0 -0
  134. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
  135. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/taskglobals.py +0 -0
  136. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/__init__.py +0 -0
  137. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/conftest.py +0 -0
  138. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
  139. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/test_local.py +0 -0
  140. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/utils.py +0 -0
  141. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/definitions_types.py +0 -0
  142. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/__init__.py +0 -0
  143. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/sacct +0 -0
  144. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/sbatch +0 -0
  145. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/test.py +0 -0
  146. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/common.py +0 -0
  147. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
  148. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/config_slurm/launchers.yaml +0 -0
  149. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/test_local.py +0 -0
  150. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
  151. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/restart.py +0 -0
  152. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/restart_main.py +0 -0
  153. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
  154. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
  155. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/task_tokens.py +0 -0
  156. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/__init__.py +0 -0
  157. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/all.py +0 -0
  158. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/foreign.py +0 -0
  159. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/subparams.py +0 -0
  160. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_checkers.py +0 -0
  161. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_findlauncher.py +0 -0
  162. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_forward.py +0 -0
  163. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_objects.py +0 -0
  164. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_param.py +0 -0
  165. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_snippets.py +0 -0
  166. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_ssh.py +0 -0
  167. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tags.py +0 -0
  168. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tasks.py +0 -0
  169. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tokens.py +0 -0
  170. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_types.py +0 -0
  171. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_validation.py +0 -0
  172. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/token_reschedule.py +0 -0
  173. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/utils.py +0 -0
  174. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tokens.py +0 -0
  175. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/__init__.py +0 -0
  176. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/diff.py +0 -0
  177. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/jobs.py +0 -0
  178. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/typingutils.py +0 -0
  179. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/__init__.py +0 -0
  180. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/asyncio.py +0 -0
  181. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/jupyter.py +0 -0
  182. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/resources.py +0 -0
  183. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/settings.py +0 -0
  184. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/yaml.py +0 -0
  185. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/dependency_links.txt +0 -0
  186. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/entry_points.txt +0 -0
  187. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/not-zip-safe +0 -0
  188. {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/top_level.txt +0 -0
  189. {experimaestro-0.22.0 → experimaestro-0.24.0}/tox.ini +0 -0
@@ -1,3 +1,24 @@
1
+ ## 0.24.0 (2023-05-23)
2
+
3
+ ### Feat
4
+
5
+ - serialized configurations
6
+
7
+ ### Fix
8
+
9
+ - requirement for fabric
10
+ - add gevent-websocket for supporting websockets
11
+
12
+ ### Refactor
13
+
14
+ - Changed TaskOutput to ConfigWrapper
15
+
16
+ ## 0.23.0 (2023-04-07)
17
+
18
+ ### Feat
19
+
20
+ - submit hooks to allow e.g. changing the environment variables
21
+
1
22
  ## 0.22.0 (2023-04-05)
2
23
 
3
24
  ### Feat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: experimaestro
3
- Version: 0.22.0
3
+ Version: 0.24.0
4
4
  Summary: "Experimaestro is a computer science experiment manager"
5
5
  Home-page: https://github.com/experimaestro/experimaestro-python
6
6
  Author: Benjamin Piwowarski
@@ -127,6 +127,27 @@ if __name__ == "__main__":
127
127
 
128
128
  which can be launched with `python test.py /tmp/helloworld-workdir`
129
129
 
130
+ ## 0.24.0 (2023-05-23)
131
+
132
+ ### Feat
133
+
134
+ - serialized configurations
135
+
136
+ ### Fix
137
+
138
+ - requirement for fabric
139
+ - add gevent-websocket for supporting websockets
140
+
141
+ ### Refactor
142
+
143
+ - Changed TaskOutput to ConfigWrapper
144
+
145
+ ## 0.23.0 (2023-04-07)
146
+
147
+ ### Feat
148
+
149
+ - submit hooks to allow e.g. changing the environment variables
150
+
130
151
  ## 0.22.0 (2023-04-05)
131
152
 
132
153
  ### Feat
@@ -30,6 +30,44 @@ some special variables are defined:
30
30
  - task directory can is `self.__taskdir__`
31
31
  - when using [sub-parameters](../config#sub-parameters), `self.__maintaskdir__` is the directory of the main task
32
32
 
33
+
34
+ ## Restoring object state
35
+
36
+ It is possible to restore an object state from disk; in that case, `SerializedConfig` (which can
37
+ be subclassed) can be used:
38
+
39
+ ```py3
40
+ from experimaestro import Config, SerializedConfig
41
+
42
+ class Model(Config):
43
+ ...
44
+
45
+ class SerializedModel(SerializedConfig):
46
+ def initialize(self):
47
+ # Access the configuration through self.config
48
+ self.config.initialized = True
49
+ ```
50
+
51
+ A serialized configuration can be used instead of the configuration. This is useful
52
+ to separate the loading mechanism from the configuration logic.
53
+
54
+
55
+ The most often use case is when the state can be recovered from disk. In that case,
56
+ `PathBasedSerializedConfig` can be used
57
+
58
+ ```py3
59
+ from experimaestro import Config, PathBasedSerializedConfig
60
+
61
+ class Model(Config):
62
+ ...
63
+
64
+ class SerializedModel(PathBasedSerializedConfig):
65
+ def initialize(self):
66
+ # Loads the model from disk
67
+ data = torch.load(self.path)
68
+ self.config.load_state_dict(data)
69
+ ```
70
+
33
71
  ## Tasks outputs
34
72
 
35
73
  It is possible to generate a configuration when submitting a task.
@@ -53,7 +91,7 @@ It is possible to generate a configuration when submitting a task.
53
91
  parameters: Annotated[Path, pathgenerator("parameters.pth")]
54
92
 
55
93
  def taskoutputs(self) -> Model:
56
- return SerializedConfig(self.model, ModelLoader(str(self.parameters)))
94
+ return SerializedModel(config=self.model, path=ModelLoader(str(self.parameters)))
57
95
 
58
96
  def execute(self):
59
97
  """Called when this task is run"""
@@ -67,18 +105,18 @@ It is possible to generate a configuration when submitting a task.
67
105
 
68
106
  ```
69
107
 
70
- ## Task output object
108
+ ## Wrapper object
71
109
 
72
- Calling submit returns a `TaskOutput` object, which is necessary to keep track
110
+ Calling submit returns a `ConfigWrapper` object, which is necessary to keep track
73
111
  of dependencies. This task output is a proxy for the returned object, i.e.
74
- accessing an attribute wraps it into another `TaskOutput` object.
112
+ accessing an attribute wraps it into another `ConfigWrapper` object.
75
113
 
76
- `TaskOutput` objects have two specific methods and variables:
114
+ `ConfigWrapper` objects have two specific methods and variables:
77
115
 
78
- - `__xpm__`, a `TaskOutputInformation` instance, containing the `task` that was submitted (dependency tracking)
116
+ - `__xpm__`, a `ConfigWrapperInformation` instance, containing the `task` that was submitted (dependency tracking)
79
117
  - `__unwrap__` that returns the wrapped value (warning: unwrapping might prevent dependency tracking from working, but might be useful in some corner cases)
80
118
 
81
- For `TaskOutputInformation`, we have:
119
+ For `ConfigWrapperInformation`, we have:
82
120
 
83
121
  - `stdout()` and `stderr()` that return a `Path` to the file that contains the standard output/error
84
122
  - `tags()` that returns the tags of the wrapped variable
@@ -4,7 +4,7 @@ fallback_version = "0.0.0-dev"
4
4
 
5
5
  [tool.commitizen]
6
6
  name = "cz_conventional_commits"
7
- version = "0.22.0"
7
+ version = "0.24.0"
8
8
  changelog_start_rev = "0.15.0"
9
9
  tag_format = "$version"
10
10
  update_changelog_on_bump = true
@@ -2,8 +2,8 @@
2
2
  click
3
3
  omegaconf
4
4
 
5
- # Supports Annotated[T, ...]
6
- typing_extensions >= 3.7.4.3; python_version < "3.9"
5
+ # Supports recent typing
6
+ typing_extensions >= 4.2; python_version < "3.11"
7
7
  cached_property; python_version < "3.9"
8
8
 
9
9
  # Other
@@ -22,7 +22,8 @@ humanfriendly
22
22
  huggingface_hub ~= 0.11.1
23
23
 
24
24
  # server
25
- eventlet
25
+ gevent
26
+ gevent-websocket
26
27
  flask
27
28
  flask-socketio
28
29
 
@@ -38,6 +39,8 @@ marshmallow
38
39
  # SSH support (fabric is built on Paramiko,
39
40
  # and allows using OpenSSH config out of the box)
40
41
  fabric
42
+ # Bug fix: required by fabric but not in reqs.
43
+ decorator
41
44
 
42
45
  # Remote code execution
43
46
  rpyc
@@ -70,7 +70,7 @@ ignore = D200, D203, D213, D406, D407 # Google conventions
70
70
 
71
71
  [flake8]
72
72
  doctests = True
73
- exclude = .git, .eggs, __pycache__, tests/, docs/, build/, dist/
73
+ exclude = .git, .eggs, __pycache__, tests/, docs/, build/, dist/, app/
74
74
  max-line-length = 88
75
75
  extend-ignore = E203
76
76
 
@@ -44,22 +44,24 @@ from .core.objects import (
44
44
  Config,
45
45
  copyconfig,
46
46
  setmeta,
47
- TaskOutput,
47
+ ConfigWrapper,
48
+ ConfigWrapper as TaskOutput, # maintains compatibility
48
49
  Task,
49
- SerializedConfig,
50
- Serialized,
51
50
  )
51
+ from .core.serializers import SerializedConfig, PathBasedSerializedConfig
52
+ from .core.types import Any, SubmitHook, submit_hook_decorator
53
+ from .launchers import Launcher
52
54
  from .scheduler.environment import Environment
53
55
  from .scheduler.workspace import Workspace, RunMode
54
56
  from .scheduler import Scheduler, experiment, FailedExperiment
55
57
  from .notifications import progress, tqdm
56
- from .core.types import Any
57
58
  from .checkers import Choices
58
59
  from .xpmutils import DirectoryContext
59
60
  from .mkdocs.annotations import documentation
61
+ from .scheduler.base import Job
60
62
 
61
63
 
62
- def set_launcher(launcher):
64
+ def set_launcher(launcher: Launcher):
63
65
  Workspace.CURRENT.launcher = launcher
64
66
 
65
67
 
@@ -12,7 +12,7 @@ import subprocess
12
12
  from termcolor import colored, cprint
13
13
 
14
14
  import experimaestro
15
- from experimaestro.core.objects import TaskOutput
15
+ from experimaestro.core.objects import ConfigWrapper
16
16
 
17
17
  # --- Command line main options
18
18
  logging.basicConfig(level=logging.INFO)
@@ -125,7 +125,7 @@ def diff(path: Path):
125
125
  """Show the reason of the identifier change for a job"""
126
126
  from experimaestro.tools.jobs import load_job
127
127
  from experimaestro import Config
128
- from experimaestro.core.objects import GenerationContext
128
+ from experimaestro.core.objects import ConfigWalkContext
129
129
 
130
130
  _, job = load_job(path / "params.json", discard_id=False)
131
131
  _, new_job = load_job(path / "params.json")
@@ -142,7 +142,7 @@ def diff(path: Path):
142
142
  if new_id != old_id:
143
143
  print(f"{path} differ: {new_id} vs {old_id}")
144
144
 
145
- if isinstance(value, TaskOutput):
145
+ if isinstance(value, ConfigWrapper):
146
146
  check(f"{path}.<task>", value.__xpm__.task, new_value.__xpm__.task)
147
147
  else:
148
148
  for arg in value.__xpmtype__.arguments.values():
@@ -1,6 +1,5 @@
1
1
  """Command line jobs"""
2
2
 
3
- from collections import ChainMap
4
3
  import json
5
4
  import io
6
5
  from pathlib import Path
@@ -260,13 +259,6 @@ class CommandLineJob(Job):
260
259
 
261
260
  return None
262
261
 
263
- @property
264
- def environ(self):
265
- return ChainMap(
266
- self.workspace.environment.environ,
267
- self.launcher.environ if self.launcher else {},
268
- )
269
-
270
262
  @property
271
263
  def notificationURL(self):
272
264
  if self.launcher and self.launcher.notificationURL: