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.
- {experimaestro-0.22.0 → experimaestro-0.24.0}/CHANGELOG.md +21 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/PKG-INFO +22 -1
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/task.md +45 -7
- {experimaestro-0.22.0 → experimaestro-0.24.0}/pyproject.toml +1 -1
- {experimaestro-0.22.0 → experimaestro-0.24.0}/requirements.txt +6 -3
- {experimaestro-0.22.0 → experimaestro-0.24.0}/setup.cfg +1 -1
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/__init__.py +7 -5
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/__main__.py +3 -3
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/commandline.py +0 -8
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/objects.py +218 -164
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/objects.pyi +25 -11
- experimaestro-0.24.0/src/experimaestro/core/serializers.py +52 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/types.py +44 -2
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/generators.py +7 -6
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/huggingface.py +2 -2
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/__init__.py +19 -7
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/base.py +21 -3
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/server/__init__.py +10 -2
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_identifier.py +33 -6
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_instance.py +18 -15
- experimaestro-0.24.0/src/experimaestro/tests/test_outputs.py +50 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_progress.py +7 -9
- experimaestro-0.24.0/src/experimaestro/tests/test_serializers.py +54 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/jobs.py +2 -2
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/version.py +2 -2
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/xpmutils.py +3 -3
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/PKG-INFO +22 -1
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/SOURCES.txt +2 -1
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/requires.txt +6 -2
- experimaestro-0.22.0/src/experimaestro/tests/test_outputs.py +0 -88
- experimaestro-0.22.0/src/experimaestro/tests/test_serialization.py +0 -45
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.circleci/config.yml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.flake8 +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/release.yaml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/workflows/pytest.yml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.github/workflows/python-publish.yml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.gitignore +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.gitmodules +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.pre-commit-config.yaml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.prettierignore +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/.readthedocs.yml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/LICENSE +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/MANIFEST.in +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/README.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/.gitignore +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/.nolluprc.js +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/CHANGELOG.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/README.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/package-lock.json +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/package.json +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/postcss.config.js +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/favicon.ico +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/index.html +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/login.html +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/public/manifest.json +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/App.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Experiments.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Services.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/TaskDetail.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/TaskJobs.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/Tasks.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/client.ts +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/clipboard.ts +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/index.css +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/index.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/logo.png +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/logo.pxm +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/reducers.ts +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/store.ts +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/theme/_jobs.scss +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/theme/theme.scss +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/src/ui/messages.tsx +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/tsconfig.json +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/webpack.config.ts +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/app/xp/run.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/changelog.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/cli.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/concepts.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/configuration.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/connectors/index.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/documenting.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/config.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/overview.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/experiments/plan.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/faq.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/index.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/jupyter.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/launchers/index.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/requirements.txt +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/serialization.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/docs/tutorial.md +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/mkdocs.yml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/pytest.ini +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/scripts/longtask.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/setup.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/annotations.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/checkers.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/click.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/compat.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/local.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/connectors/ssh.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/arguments.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/core/context.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/filter.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/ipc.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/base.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/parser.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/registry.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launcherfinder/specs.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/direct.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/oar.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/launchers/slurm.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/locking.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/annotations.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/base.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/metaloader.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mkdocs/style.css +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/mypy.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/notifications.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/rpyc.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/run.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/dependencies.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/environment.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/services.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scheduler/workspace.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/scriptbuilder.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/settings.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/sphinx/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/taskglobals.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/conftest.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/test_local.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/connectors/utils.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/definitions_types.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/sacct +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/sbatch +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/bin/test.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/common.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/config_slurm/launchers.yaml +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/test_local.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/restart.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/restart_main.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/task_tokens.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/all.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/foreign.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/tasks/subparams.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_checkers.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_findlauncher.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_forward.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_objects.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_param.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_snippets.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_ssh.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tags.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tasks.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_tokens.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_types.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/test_validation.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/token_reschedule.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tests/utils.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tokens.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/diff.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/tools/jobs.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/typingutils.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/__init__.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/asyncio.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/jupyter.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/resources.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/settings.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro/utils/yaml.py +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/dependency_links.txt +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/entry_points.txt +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/not-zip-safe +0 -0
- {experimaestro-0.22.0 → experimaestro-0.24.0}/src/experimaestro.egg-info/top_level.txt +0 -0
- {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.
|
|
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
|
|
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
|
-
##
|
|
108
|
+
## Wrapper object
|
|
71
109
|
|
|
72
|
-
Calling submit returns a `
|
|
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 `
|
|
112
|
+
accessing an attribute wraps it into another `ConfigWrapper` object.
|
|
75
113
|
|
|
76
|
-
`
|
|
114
|
+
`ConfigWrapper` objects have two specific methods and variables:
|
|
77
115
|
|
|
78
|
-
- `__xpm__`, a `
|
|
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 `
|
|
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
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
click
|
|
3
3
|
omegaconf
|
|
4
4
|
|
|
5
|
-
# Supports
|
|
6
|
-
typing_extensions >=
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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:
|