calkit-python 0.39.1__tar.gz → 0.40.0__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.
- {calkit_python-0.39.1 → calkit_python-0.40.0}/PKG-INFO +1 -1
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/check.py +7 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/main/core.py +47 -22
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/new.py +96 -4
- calkit_python-0.40.0/calkit/cli/scheduler.py +606 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/conda.py +182 -10
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/environments.py +62 -2
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/models/core.py +9 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/models/pipeline.py +317 -101
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/pipeline.py +119 -8
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/models/test_pipeline.py +83 -41
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_conda.py +59 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_detect.py +2 -2
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_environments.py +60 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_pipeline.py +616 -76
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/cli-reference.md +69 -40
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/environments.md +1 -2
- calkit_python-0.40.0/docs/hpc.md +142 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/pipeline/index.md +1 -11
- {calkit_python-0.39.1 → calkit_python-0.40.0}/mkdocs.yml +1 -1
- calkit_python-0.39.1/calkit/cli/slurm.py +0 -415
- calkit_python-0.39.1/docs/pipeline/slurm.md +0 -114
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.claude-plugin/marketplace.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.gitignore +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.prettierignore +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.python-version +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.vscode/launch.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.vscode/tasks.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/.yarnrc.yml +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/AGENTS.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/CITATION.cff +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/CODE_OF_CONDUCT.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/CONTRIBUTING.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/LICENSE +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/Makefile +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/README.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/agent-plugin/.claude-plugin/plugin.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/agent-plugin/skills/add-pipeline-stage/SKILL.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/agent-plugin/skills/conventions/SKILL.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/agent-plugin/skills/create-pipeline/SKILL.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/babel.config.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/__main__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/calc.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/check.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/config.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/describe.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/dev.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/import_.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/latex.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/list.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/main/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/main/xr.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/notebooks.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/office.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cli/update.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/cloud.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/config.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/datasets.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/detect.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/docker.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/dvc/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/dvc/core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/dvc/zip.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/fs.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/git.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/github.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/gui.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/invenio.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/julia.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/jupyter.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/jupyterlab/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/jupyterlab/routes.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/package.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/schemas/calkit/plugin.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/909.e3f9cc3408834a7fdcc3.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/remoteEntry.65469af996e7a96aa983.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/style.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/labextension/static/third-party-licenses.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/licenses.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/magics.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/matlab.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/models/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/models/io.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/models/iteration.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/notebooks.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/office.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/ops.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/overleaf.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/releases.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/server.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/main/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/main/test_core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/main/test_subprojects.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/main/test_xr.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_cloud.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_import.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_latex.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_new.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_notebooks.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_overleaf.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/cli/test_update.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/dvc/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/dvc/test_core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/dvc/test_zip.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/jupyterlab/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/jupyterlab/test_routes.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/models/test_iteration.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_cloud.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_docker.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_fs.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_git.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_invenio.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_julia.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_matlab.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_releases.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/conftest.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/CNAME +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/ai-tools.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/apps.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/calculations.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/cloud-integration.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/datasets.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/dependencies.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/examples.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/governance.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/help.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/calkit-fragmentation-compendium.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab/all-green.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab/collect-data-stale.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab/new-env.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab/new-notebook.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab/pipeline-badge.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/jupyterlab-params.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/plos-osi-code-2024-03.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/img/vscode-nb-params.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/index.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/installation.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/jupyterlab.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/local-server.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/notebooks.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/overleaf.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/quickstart.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/references.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/releases.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/reproducibility.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/subprojects.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/github-actions.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/actions-repo-secrets.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/quick-actions.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/create-calkit-env.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/create-inner-env.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/create-new-calkit-env.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/select-calkit-env.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/slurm-job-running.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/slurm-launch-options.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/img/vscode-slurm-notebook/starting-slurm-job.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/index.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/jupyterlab.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/office.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/tutorials/vscode-slurm-notebook.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/docs/version-control.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/install.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/jest.config.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/jupyter-config/server-config/calkit.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/package.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/pyproject.toml +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/schema/plugin.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/scripts/generate-docs-references.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/scripts/install.ps1 +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/scripts/install.sh +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/scripts/make-calk9.sh +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/scripts/sync-docs.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/__tests__/useQueries.spec.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/calkit-config.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/cell-output-marker.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/commit-dialog.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/environment-editor.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/notebook-registration.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/notebook-toolbar.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/pipeline-status-bar.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/project-info-editor.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/sidebar-settings.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/sidebar.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/components/stage-editor.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/feature-flags.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/file-browser-menu.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/hooks/__tests__/useQueries.test.tsx +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/hooks/useQueries.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/icons.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/index.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/io-tracker.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/pipeline-state.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/queryClient.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/request.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/src/shims-mainmenu.d.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/base.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/cell-output-marker.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/environment-editor.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/environment-selector.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/img/calkit-no-bg.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/index.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/index.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/notebook-toolbar.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/pipeline-status-bar.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/style/sidebar.css +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/dvc-md5-dir/osx-arm64.txt +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/nb-julia.ipynb +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/nb-params.ipynb +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/nb-subdir.ipynb +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/pipeline.ipynb +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/script.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/test/test-log.log +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/tsconfig.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/tsconfig.test.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/.gitignore +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/README.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/jupyter_server_test_config.py +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/package.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/playwright.config.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/tests/calkit.spec.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/ui-tests/yarn.lock +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/uv.lock +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/.gitignore +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/.vscodeignore +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/CHANGELOG.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/LICENSE +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/README.md +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/images/calkit-no-bg.png +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/package-lock.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/package.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/scripts/set-proposed-api.js +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/environments.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/extension.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/notebooks.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/test/environments.test.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/test/kernel-selection.test.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/test/notebooks.test.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/src/types.ts +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/vscode-ext/tsconfig.json +0 -0
- {calkit_python-0.39.1 → calkit_python-0.40.0}/yarn.lock +0 -0
|
@@ -264,6 +264,7 @@ def check_environment(
|
|
|
264
264
|
get_all_docker_lock_fpaths,
|
|
265
265
|
get_all_venv_lock_fpaths,
|
|
266
266
|
get_env_lock_fpath,
|
|
267
|
+
write_scheduler_env_lock,
|
|
267
268
|
)
|
|
268
269
|
|
|
269
270
|
dotenv.load_dotenv(dotenv_path=".env", verbose=verbose)
|
|
@@ -405,6 +406,12 @@ def check_environment(
|
|
|
405
406
|
verbose=verbose,
|
|
406
407
|
cache_key=env_name,
|
|
407
408
|
)
|
|
409
|
+
elif env["kind"] in ("slurm", "pbs"):
|
|
410
|
+
# Job-scheduler envs have no external manifest to validate; the
|
|
411
|
+
# "check" is just writing a deterministic JSON lock file from the
|
|
412
|
+
# env config so DVC stages that depend on the env get invalidated
|
|
413
|
+
# when the config changes.
|
|
414
|
+
write_scheduler_env_lock(env_name=env_name, env=env)
|
|
408
415
|
else:
|
|
409
416
|
raise_error(f"Environment kind '{env['kind']}' not supported")
|
|
410
417
|
return get_env_lock_fpath(env=env, env_name=env_name, as_posix=False)
|
|
@@ -57,7 +57,7 @@ from calkit.cli.new import new_app
|
|
|
57
57
|
from calkit.cli.notebooks import notebooks_app
|
|
58
58
|
from calkit.cli.office import office_app
|
|
59
59
|
from calkit.cli.overleaf import overleaf_app
|
|
60
|
-
from calkit.cli.
|
|
60
|
+
from calkit.cli.scheduler import scheduler_app
|
|
61
61
|
from calkit.cli.update import update_app
|
|
62
62
|
|
|
63
63
|
app = typer.Typer(
|
|
@@ -81,7 +81,11 @@ app.add_typer(check_app, name="check", help="Check things.")
|
|
|
81
81
|
app.add_typer(latex_app, name="latex|tex", help="Work with LaTeX.")
|
|
82
82
|
app.add_typer(overleaf_app, name="overleaf|ol", help="Interact with Overleaf.")
|
|
83
83
|
app.add_typer(cloud_app, name="cloud", help="Interact with a Calkit Cloud.")
|
|
84
|
-
app.add_typer(
|
|
84
|
+
app.add_typer(
|
|
85
|
+
scheduler_app,
|
|
86
|
+
name="scheduler|sch",
|
|
87
|
+
help="Work with a job scheduler (SLURM or PBS).",
|
|
88
|
+
)
|
|
85
89
|
app.add_typer(dev_app, name="dev", help="Developer tools.", hidden=True)
|
|
86
90
|
|
|
87
91
|
|
|
@@ -669,9 +673,11 @@ def add(
|
|
|
669
673
|
paths.remove(".")
|
|
670
674
|
if dvc_repo is not None:
|
|
671
675
|
dvc_status = dvc_repo.data_status()
|
|
672
|
-
|
|
676
|
+
uncommitted = dvc_status["uncommitted"]
|
|
677
|
+
dvc_uncommitted_all = uncommitted.get(
|
|
673
678
|
"modified", []
|
|
674
|
-
)
|
|
679
|
+
) + uncommitted.get("deleted", [])
|
|
680
|
+
for dvc_uncommitted in dvc_uncommitted_all:
|
|
675
681
|
if os.path.exists(dvc_uncommitted):
|
|
676
682
|
if dry_run:
|
|
677
683
|
typer.echo(
|
|
@@ -679,12 +685,25 @@ def add(
|
|
|
679
685
|
)
|
|
680
686
|
else:
|
|
681
687
|
typer.echo(f"Adding {dvc_uncommitted} to DVC")
|
|
682
|
-
dvc_repo.commit(
|
|
688
|
+
dvc_repo.commit(
|
|
689
|
+
dvc_uncommitted,
|
|
690
|
+
force=True,
|
|
691
|
+
allow_missing=True,
|
|
692
|
+
)
|
|
683
693
|
else:
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
694
|
+
if dry_run:
|
|
695
|
+
typer.echo(
|
|
696
|
+
f"Would commit deleted {dvc_uncommitted} to DVC"
|
|
697
|
+
)
|
|
698
|
+
else:
|
|
699
|
+
typer.echo(
|
|
700
|
+
f"Committing deleted {dvc_uncommitted} to DVC"
|
|
701
|
+
)
|
|
702
|
+
dvc_repo.commit(
|
|
703
|
+
dvc_uncommitted,
|
|
704
|
+
force=True,
|
|
705
|
+
allow_missing=True,
|
|
706
|
+
)
|
|
688
707
|
if not disable_auto_ignore:
|
|
689
708
|
for untracked_file in untracked_git_files:
|
|
690
709
|
if (
|
|
@@ -1453,13 +1472,8 @@ def run(
|
|
|
1453
1472
|
raise_error("Failed to initialize Git repo")
|
|
1454
1473
|
# Set env vars
|
|
1455
1474
|
calkit.set_env_vars(ck_info=ck_info)
|
|
1456
|
-
# Clean all notebooks in the pipeline
|
|
1457
|
-
try:
|
|
1458
|
-
calkit.notebooks.clean_all_in_pipeline(ck_info=ck_info)
|
|
1459
|
-
except Exception as e:
|
|
1460
|
-
raise_error(f"Failed to clean notebooks: {e.__class__.__name__}: {e}")
|
|
1461
1475
|
if not quiet:
|
|
1462
|
-
|
|
1476
|
+
calkit.echo("💻 Getting system information")
|
|
1463
1477
|
# Get system information
|
|
1464
1478
|
system_info = calkit.get_system_info()
|
|
1465
1479
|
if save_logs:
|
|
@@ -1475,7 +1489,7 @@ def run(
|
|
|
1475
1489
|
json.dump(system_info, f, indent=2)
|
|
1476
1490
|
# First check any system-level dependencies exist
|
|
1477
1491
|
if not quiet:
|
|
1478
|
-
|
|
1492
|
+
calkit.echo("🔗 Checking system-level dependencies")
|
|
1479
1493
|
try:
|
|
1480
1494
|
calkit.check_system_deps(ck_info=ck_info, system_info=system_info)
|
|
1481
1495
|
except Exception as e:
|
|
@@ -1483,7 +1497,7 @@ def run(
|
|
|
1483
1497
|
raise_error(str(e))
|
|
1484
1498
|
# Check all environments in the pipeline (with caching)
|
|
1485
1499
|
# If any failed, warn the user that we might have problems running
|
|
1486
|
-
|
|
1500
|
+
calkit.echo("📦 Checking environments")
|
|
1487
1501
|
env_check_results = calkit.environments.check_all_in_pipeline(
|
|
1488
1502
|
ck_info=ck_info, targets=targets, force=force
|
|
1489
1503
|
)
|
|
@@ -1493,7 +1507,13 @@ def run(
|
|
|
1493
1507
|
failed = not result.get("success", False)
|
|
1494
1508
|
if failed:
|
|
1495
1509
|
warn(f"Failed to check environment '{env_name}'")
|
|
1496
|
-
#
|
|
1510
|
+
# Clean all notebooks in the pipeline
|
|
1511
|
+
try:
|
|
1512
|
+
calkit.echo("📓 Cleaning notebooks")
|
|
1513
|
+
calkit.notebooks.clean_all_in_pipeline(ck_info=ck_info)
|
|
1514
|
+
except Exception as e:
|
|
1515
|
+
raise_error(f"Failed to clean notebooks: {e.__class__.__name__}: {e}")
|
|
1516
|
+
# Check environments and clean notebooks for each subproject
|
|
1497
1517
|
subprojects = ck_info.get("subprojects", [])
|
|
1498
1518
|
if subprojects:
|
|
1499
1519
|
prev_cwd = os.getcwd()
|
|
@@ -1503,11 +1523,13 @@ def run(
|
|
|
1503
1523
|
sp = Path(subproject["path"]).as_posix()
|
|
1504
1524
|
if not os.path.isdir(sp):
|
|
1505
1525
|
continue
|
|
1506
|
-
if not quiet:
|
|
1507
|
-
typer.echo(f"Checking environments for subproject: {sp}")
|
|
1508
1526
|
os.chdir(sp)
|
|
1509
1527
|
try:
|
|
1510
1528
|
sp_ck_info = calkit.load_calkit_info()
|
|
1529
|
+
if not quiet:
|
|
1530
|
+
calkit.echo(
|
|
1531
|
+
f"📦 Checking environments for subproject: {sp}"
|
|
1532
|
+
)
|
|
1511
1533
|
sp_env_results = calkit.environments.check_all_in_pipeline(
|
|
1512
1534
|
ck_info=sp_ck_info, force=force
|
|
1513
1535
|
)
|
|
@@ -1519,9 +1541,12 @@ def run(
|
|
|
1519
1541
|
f"Failed to check environment '{env_name}' "
|
|
1520
1542
|
f"in subproject '{sp}'"
|
|
1521
1543
|
)
|
|
1544
|
+
if not quiet:
|
|
1545
|
+
calkit.echo(f"📓 Cleaning notebooks for subproject: {sp}")
|
|
1546
|
+
calkit.notebooks.clean_all_in_pipeline(ck_info=sp_ck_info)
|
|
1522
1547
|
except Exception as e:
|
|
1523
1548
|
warn(
|
|
1524
|
-
f"Failed to
|
|
1549
|
+
f"Failed to prepare subproject '{sp}': "
|
|
1525
1550
|
f"{e.__class__.__name__}: {e}"
|
|
1526
1551
|
)
|
|
1527
1552
|
finally:
|
|
@@ -1533,7 +1558,7 @@ def run(
|
|
|
1533
1558
|
dvc_stages = None
|
|
1534
1559
|
if ck_info.get("pipeline", {}) or ck_info.get("subprojects"):
|
|
1535
1560
|
if not quiet:
|
|
1536
|
-
|
|
1561
|
+
calkit.echo("🔀 Compiling DVC pipeline")
|
|
1537
1562
|
try:
|
|
1538
1563
|
dvc_stages = calkit.pipeline.to_dvc(ck_info=ck_info, write=True)
|
|
1539
1564
|
except Exception as e:
|
|
@@ -1471,13 +1471,105 @@ def new_slurm_env(
|
|
|
1471
1471
|
ck_info["environments"] = envs
|
|
1472
1472
|
with open("calkit.yaml", "w") as f:
|
|
1473
1473
|
ryaml.dump(ck_info, f)
|
|
1474
|
+
from calkit.cli.check import check_environment
|
|
1475
|
+
|
|
1476
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1474
1477
|
if not no_commit:
|
|
1475
1478
|
repo = calkit.git.get_repo()
|
|
1476
1479
|
repo.git.add("calkit.yaml")
|
|
1477
|
-
if
|
|
1478
|
-
repo.git.
|
|
1479
|
-
|
|
1480
|
-
)
|
|
1480
|
+
if env_lock_fpath is not None:
|
|
1481
|
+
repo.git.add(str(env_lock_fpath))
|
|
1482
|
+
if repo.git.diff("--staged"):
|
|
1483
|
+
repo.git.commit(["-m", f"Add SLURM environment {name}"])
|
|
1484
|
+
|
|
1485
|
+
|
|
1486
|
+
@new_app.command("pbs-env")
|
|
1487
|
+
def new_pbs_env(
|
|
1488
|
+
name: Annotated[
|
|
1489
|
+
str, typer.Option("--name", "-n", help="Environment name.")
|
|
1490
|
+
],
|
|
1491
|
+
host: Annotated[
|
|
1492
|
+
str,
|
|
1493
|
+
typer.Option("--host", help="Host where PBS commands should run."),
|
|
1494
|
+
] = "localhost",
|
|
1495
|
+
default_options: Annotated[
|
|
1496
|
+
list[str],
|
|
1497
|
+
typer.Option(
|
|
1498
|
+
"--default-option",
|
|
1499
|
+
help=(
|
|
1500
|
+
"Default qsub option string (for example "
|
|
1501
|
+
"--default-option=-l --default-option=walltime=01:00:00). "
|
|
1502
|
+
"Repeat for multiple options."
|
|
1503
|
+
),
|
|
1504
|
+
),
|
|
1505
|
+
] = [],
|
|
1506
|
+
default_setup: Annotated[
|
|
1507
|
+
list[str],
|
|
1508
|
+
typer.Option(
|
|
1509
|
+
"--default-setup",
|
|
1510
|
+
help=(
|
|
1511
|
+
"Default shell setup command to run before PBS jobs "
|
|
1512
|
+
"(for example 'module load julia/1.11'). Repeat for "
|
|
1513
|
+
"multiple commands."
|
|
1514
|
+
),
|
|
1515
|
+
),
|
|
1516
|
+
] = [],
|
|
1517
|
+
description: Annotated[
|
|
1518
|
+
str | None, typer.Option("--description", help="Description.")
|
|
1519
|
+
] = None,
|
|
1520
|
+
overwrite: Annotated[
|
|
1521
|
+
bool,
|
|
1522
|
+
typer.Option(
|
|
1523
|
+
"--overwrite",
|
|
1524
|
+
"-f",
|
|
1525
|
+
help="Overwrite any existing environment with this name.",
|
|
1526
|
+
),
|
|
1527
|
+
] = False,
|
|
1528
|
+
no_commit: Annotated[
|
|
1529
|
+
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
1530
|
+
] = False,
|
|
1531
|
+
):
|
|
1532
|
+
"""Create a new PBS environment."""
|
|
1533
|
+
from calkit.cli.check import check_environment
|
|
1534
|
+
|
|
1535
|
+
host = host.strip()
|
|
1536
|
+
if not host:
|
|
1537
|
+
raise_error("Host is required")
|
|
1538
|
+
ck_info = calkit.load_calkit_info()
|
|
1539
|
+
envs = ck_info.get("environments", {})
|
|
1540
|
+
if isinstance(envs, list):
|
|
1541
|
+
typer.echo("Converting environments from list to dict")
|
|
1542
|
+
envs = {env.pop("name"): env for env in envs}
|
|
1543
|
+
if name in envs and not overwrite:
|
|
1544
|
+
raise_error(
|
|
1545
|
+
f"Environment with name {name} already exists "
|
|
1546
|
+
"(use -f to overwrite)"
|
|
1547
|
+
)
|
|
1548
|
+
normalized_default_options = [
|
|
1549
|
+
opt.strip() for opt in default_options if opt.strip()
|
|
1550
|
+
]
|
|
1551
|
+
normalized_default_setup = [
|
|
1552
|
+
cmd.strip() for cmd in default_setup if cmd.strip()
|
|
1553
|
+
]
|
|
1554
|
+
env = {"kind": "pbs", "host": host}
|
|
1555
|
+
if normalized_default_options:
|
|
1556
|
+
env["default_options"] = normalized_default_options # type: ignore
|
|
1557
|
+
if normalized_default_setup:
|
|
1558
|
+
env["default_setup"] = normalized_default_setup # type: ignore
|
|
1559
|
+
if description is not None:
|
|
1560
|
+
env["description"] = description
|
|
1561
|
+
envs[name] = env
|
|
1562
|
+
ck_info["environments"] = envs
|
|
1563
|
+
with open("calkit.yaml", "w") as f:
|
|
1564
|
+
ryaml.dump(ck_info, f)
|
|
1565
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1566
|
+
if not no_commit:
|
|
1567
|
+
repo = calkit.git.get_repo()
|
|
1568
|
+
repo.git.add("calkit.yaml")
|
|
1569
|
+
if env_lock_fpath is not None:
|
|
1570
|
+
repo.git.add(str(env_lock_fpath))
|
|
1571
|
+
if repo.git.diff("--staged"):
|
|
1572
|
+
repo.git.commit(["-m", f"Add PBS environment {name}"])
|
|
1481
1573
|
|
|
1482
1574
|
|
|
1483
1575
|
@new_app.command("uv-venv")
|