calkit-python 0.41.16__tar.gz → 0.41.17__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.41.16 → calkit_python-0.41.17}/PKG-INFO +52 -28
- {calkit_python-0.41.16 → calkit_python-0.41.17}/README.md +51 -27
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/notebooks.py +74 -4
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/models/core.py +23 -2
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_notebooks.py +85 -0
- calkit_python-0.41.17/docs/acknowledgements.md +13 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/environments.md +38 -34
- calkit_python-0.41.17/docs/img/caltech.png +0 -0
- calkit_python-0.41.17/docs/img/pipeline.png +0 -0
- calkit_python-0.41.17/docs/img/schmidt-sciences.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/index.md +23 -27
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/quickstart.md +10 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/mkdocs.yml +1 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/scripts/generate-docs-references.py +59 -87
- {calkit_python-0.41.16 → calkit_python-0.41.17}/scripts/sync-docs.py +53 -14
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.claude-plugin/marketplace.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.gitattributes +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.gitignore +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.prettierignore +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.prettierrc.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.python-version +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.vscode/launch.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/.vscode/tasks.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/AGENTS.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/CITATION.cff +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/CODE_OF_CONDUCT.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/CONTRIBUTING.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/LICENSE +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/Makefile +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/agent-plugin/.claude-plugin/plugin.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/agent-plugin/skills/add-pipeline-stage/SKILL.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/agent-plugin/skills/conventions/SKILL.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/agent-plugin/skills/create-pipeline/SKILL.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/__main__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/calc.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/check.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/check.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/config.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/delete.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/describe.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/dev.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/import_.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/latex.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/list.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/main/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/main/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/main/xr.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/new.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/office.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/scheduler.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cli/update.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/cloud.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/conda.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/config.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/datasets.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/dependencies.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/detect.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/docker.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/dvc/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/dvc/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/dvc/zip.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/environments.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/fs.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/git.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/github.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/gui.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/install.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/invenio.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/julia.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/jupyter.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/jupyterlab/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/jupyterlab/routes.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/package.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/schemas/calkit/plugin.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/909.e3f9cc3408834a7fdcc3.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/remoteEntry.ac9035764d5b2adbb542.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/style.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/labextension/static/third-party-licenses.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/licenses.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/magics.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/matlab.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/models/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/models/io.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/models/iteration.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/models/pipeline.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/notebooks.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/office.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/ops.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/overleaf.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/pipeline.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/releases.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/server.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/main/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/main/test_core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/main/test_lock.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/main/test_subprojects.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/main/test_xr.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_check.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_cloud.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_delete.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_import.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_latex.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_new.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_overleaf.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_scheduler.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/cli/test_update.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/dvc/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/dvc/test_core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/dvc/test_zip.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/jupyterlab/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/jupyterlab/conftest.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/jupyterlab/test_routes.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/models/test_core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/models/test_iteration.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_cloud.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_conda.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_dependencies.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_detect.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_docker.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_environments.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_fs.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_git.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_install.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_invenio.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_julia.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_licenses.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_matlab.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_notebooks.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_pipeline.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_releases.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/CNAME +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/ai-tools.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/apps.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/calculations.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/cli-reference.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/cloud-integration.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/datasets.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/dependencies.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/examples.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/governance.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/help.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/hpc.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/calkit-fragmentation-compendium.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab/all-green.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab/collect-data-stale.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab/new-env.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab/new-notebook.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab/pipeline-badge.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/jupyterlab-params.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/plos-osi-code-2024-03.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/img/vscode-nb-params.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/installation.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/jupyterlab.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/local-server.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/notebooks.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/overleaf.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/pipeline/index.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/pipeline/running-and-logging.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/references.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/releases.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/reproducibility.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/subprojects.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/ai-agents.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/github-actions.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/actions-repo-secrets.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/quick-actions.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/create-calkit-env.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/create-inner-env.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/create-new-calkit-env.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/select-calkit-env.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/slurm-job-running.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/slurm-launch-options.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/img/vscode-slurm-notebook/starting-slurm-job.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/index.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/jupyterlab.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/office.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/tutorials/vscode-slurm-notebook.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/docs/version-control.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/flake.lock +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/flake.nix +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/.yarnrc.yml +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/babel.config.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/install.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/jest.config.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/jupyter-config/server-config/calkit.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/package.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/schema/plugin.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/__tests__/useQueries.spec.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/calkit-config.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/cell-output-marker.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/commit-dialog.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/environment-editor.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/notebook-registration.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/notebook-toolbar.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/pipeline-status-bar.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/project-info-editor.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/sidebar-settings.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/sidebar.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/components/stage-editor.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/feature-flags.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/file-browser-menu.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/hooks/__tests__/useQueries.test.tsx +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/hooks/useQueries.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/icons.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/index.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/io-tracker.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/pipeline-state.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/queryClient.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/request.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/src/shims-mainmenu.d.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/base.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/cell-output-marker.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/environment-editor.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/environment-selector.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/img/calkit-no-bg.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/index.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/index.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/notebook-toolbar.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/pipeline-status-bar.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/style/sidebar.css +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/tsconfig.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/tsconfig.test.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/.gitignore +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/README.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/jupyter_server_test_config.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/package.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/playwright.config.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/tests/calkit.spec.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/ui-tests/yarn.lock +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/jupyterlab-ext/yarn.lock +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/pyproject.toml +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/scripts/install.ps1 +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/scripts/install.sh +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/scripts/make-calk9.sh +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/dvc-md5-dir/osx-arm64.txt +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/nb-julia.ipynb +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/nb-params.ipynb +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/nb-subdir.ipynb +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/pipeline.ipynb +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/script.py +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/test/test-log.log +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/uv.lock +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/.gitignore +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/.vscodeignore +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/CHANGELOG.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/LICENSE +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/README.md +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/images/calkit-icon.svg +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/images/calkit-no-bg.png +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/package-lock.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/package.json +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/scripts/set-proposed-api.js +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/environments.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/extension.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/figures/core.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/figures/view.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/notebooks.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/pipeline/core.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/sidebar.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/test/environments.test.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/test/figures.test.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/test/kernel-selection.test.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/test/notebooks.test.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/test/pipeline.test.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/src/types.ts +0 -0
- {calkit_python-0.41.16 → calkit_python-0.41.17}/vscode-ext/tsconfig.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calkit-python
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.17
|
|
4
4
|
Summary: Reproducibility simplified.
|
|
5
5
|
Project-URL: Homepage, https://calkit.org
|
|
6
6
|
Project-URL: Issues, https://github.com/calkit/calkit/issues
|
|
@@ -78,35 +78,30 @@ Description-Content-Type: text/markdown
|
|
|
78
78
|
|
|
79
79
|
<!-- INCLUDE: docs/index.md -->
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- Automating a step can and should take roughly
|
|
100
|
-
the same amount of time as doing it once manually,
|
|
101
|
-
therefore it's almost always worth it.
|
|
102
|
-
- Working in a "quick and dirty" way can easily become _not quick_ when
|
|
103
|
-
the dirtiness results in mistakes and/or discourages working in small steps.
|
|
81
|
+
It's six months since you submitted your paper,
|
|
82
|
+
do you know exactly how your figures and results were generated?
|
|
83
|
+
|
|
84
|
+
You will if they're part of a Calkit project.
|
|
85
|
+
|
|
86
|
+
Calkit helps you integrate code, data, figures, results, publications,
|
|
87
|
+
and more into a cohesive, traceable, and portable _knowledge creation system_,
|
|
88
|
+
so every output can be traced back to its source and reproduced with a
|
|
89
|
+
single command.
|
|
90
|
+
|
|
91
|
+
With industry standard tools combined into a unified and simplified experience
|
|
92
|
+
tailored for research,
|
|
93
|
+
you can reap the rewards of reproducibility and automation
|
|
94
|
+
without the cognitive overhead.
|
|
95
|
+
|
|
96
|
+
<!-- https://docs.google.com/drawings/d/1XMGnbgYYNFAVUBDyUaCyLfRB7efvJdrnrKmFlNmT19o/edit -->
|
|
97
|
+
|
|
98
|
+

|
|
104
99
|
|
|
105
100
|
## Features
|
|
106
101
|
|
|
107
102
|
- A simplified [version control](https://docs.calkit.org/version-control)
|
|
108
103
|
interface that unifies Git and DVC (Data Version Control),
|
|
109
|
-
so
|
|
104
|
+
so everything can be kept in the same project repository.
|
|
110
105
|
This way, code doesn't need to be siloed away from other
|
|
111
106
|
important artifacts like datasets, models, figures, or article PDFs,
|
|
112
107
|
allowing you to work on all parts of a project without hopping around to
|
|
@@ -129,9 +124,10 @@ and build upon the results.
|
|
|
129
124
|
- [Overleaf integration](https://docs.calkit.org/overleaf/), so
|
|
130
125
|
analysis, visualization, and writing can all stay in sync
|
|
131
126
|
(no more manual uploads!)
|
|
132
|
-
- Support for running on high performance computing (HPC) systems
|
|
133
|
-
|
|
134
|
-
- Support for running with
|
|
127
|
+
- Support for running on [high performance computing (HPC)](https://docs.calkit.org/hpc) systems
|
|
128
|
+
that use PBS or SLURM schedulers.
|
|
129
|
+
- Support for automated running with
|
|
130
|
+
[GitHub Actions](https://docs.calkit.org/tutorials/github-actions).
|
|
135
131
|
- Extensions for doing all of the above graphically in
|
|
136
132
|
[JupyterLab](https://docs.calkit.org/jupyterlab) and
|
|
137
133
|
[VS Code](https://marketplace.visualstudio.com/items?itemName=Calkit.calkit-vscode).
|
|
@@ -373,9 +369,37 @@ To back up or save the project, call:
|
|
|
373
369
|
calkit save -am "Run pipeline"
|
|
374
370
|
```
|
|
375
371
|
|
|
372
|
+
### With an AI coding agent
|
|
373
|
+
|
|
374
|
+
Simply tell the [AI agent](https://docs.calkit.org/ai-tools):
|
|
375
|
+
|
|
376
|
+
> Turn this folder into a Calkit project
|
|
377
|
+
|
|
378
|
+
or
|
|
379
|
+
|
|
380
|
+
> Create me a new Calkit project for investigating...
|
|
381
|
+
|
|
376
382
|
<!-- END INCLUDE -->
|
|
377
383
|
|
|
378
384
|
## Get involved
|
|
379
385
|
|
|
380
386
|
We welcome all kinds of contributions!
|
|
381
387
|
See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to get involved.
|
|
388
|
+
|
|
389
|
+
## Acknowledgements
|
|
390
|
+
|
|
391
|
+
<!-- INCLUDE: docs/acknowledgements.md +1 -->
|
|
392
|
+
|
|
393
|
+
Calkit is supported by the
|
|
394
|
+
[Caltech Schmidt Academy of Software Engineering](https://sase.caltech.edu).
|
|
395
|
+
|
|
396
|
+
<p align="center">
|
|
397
|
+
<a href="https://sase.caltech.edu" target="_blank">
|
|
398
|
+
<img width="40%" src="docs/img/caltech.png" alt="Caltech SASE">
|
|
399
|
+
</a>
|
|
400
|
+
<a href="https://schmidtsciences.org/" target="_blank">
|
|
401
|
+
<img width="40%" src="docs/img/schmidt-sciences.png" alt="Schmidt Sciences">
|
|
402
|
+
</a>
|
|
403
|
+
</p>
|
|
404
|
+
|
|
405
|
+
<!-- END INCLUDE -->
|
|
@@ -19,35 +19,30 @@
|
|
|
19
19
|
|
|
20
20
|
<!-- INCLUDE: docs/index.md -->
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- Automating a step can and should take roughly
|
|
41
|
-
the same amount of time as doing it once manually,
|
|
42
|
-
therefore it's almost always worth it.
|
|
43
|
-
- Working in a "quick and dirty" way can easily become _not quick_ when
|
|
44
|
-
the dirtiness results in mistakes and/or discourages working in small steps.
|
|
22
|
+
It's six months since you submitted your paper,
|
|
23
|
+
do you know exactly how your figures and results were generated?
|
|
24
|
+
|
|
25
|
+
You will if they're part of a Calkit project.
|
|
26
|
+
|
|
27
|
+
Calkit helps you integrate code, data, figures, results, publications,
|
|
28
|
+
and more into a cohesive, traceable, and portable _knowledge creation system_,
|
|
29
|
+
so every output can be traced back to its source and reproduced with a
|
|
30
|
+
single command.
|
|
31
|
+
|
|
32
|
+
With industry standard tools combined into a unified and simplified experience
|
|
33
|
+
tailored for research,
|
|
34
|
+
you can reap the rewards of reproducibility and automation
|
|
35
|
+
without the cognitive overhead.
|
|
36
|
+
|
|
37
|
+
<!-- https://docs.google.com/drawings/d/1XMGnbgYYNFAVUBDyUaCyLfRB7efvJdrnrKmFlNmT19o/edit -->
|
|
38
|
+
|
|
39
|
+

|
|
45
40
|
|
|
46
41
|
## Features
|
|
47
42
|
|
|
48
43
|
- A simplified [version control](https://docs.calkit.org/version-control)
|
|
49
44
|
interface that unifies Git and DVC (Data Version Control),
|
|
50
|
-
so
|
|
45
|
+
so everything can be kept in the same project repository.
|
|
51
46
|
This way, code doesn't need to be siloed away from other
|
|
52
47
|
important artifacts like datasets, models, figures, or article PDFs,
|
|
53
48
|
allowing you to work on all parts of a project without hopping around to
|
|
@@ -70,9 +65,10 @@ and build upon the results.
|
|
|
70
65
|
- [Overleaf integration](https://docs.calkit.org/overleaf/), so
|
|
71
66
|
analysis, visualization, and writing can all stay in sync
|
|
72
67
|
(no more manual uploads!)
|
|
73
|
-
- Support for running on high performance computing (HPC) systems
|
|
74
|
-
|
|
75
|
-
- Support for running with
|
|
68
|
+
- Support for running on [high performance computing (HPC)](https://docs.calkit.org/hpc) systems
|
|
69
|
+
that use PBS or SLURM schedulers.
|
|
70
|
+
- Support for automated running with
|
|
71
|
+
[GitHub Actions](https://docs.calkit.org/tutorials/github-actions).
|
|
76
72
|
- Extensions for doing all of the above graphically in
|
|
77
73
|
[JupyterLab](https://docs.calkit.org/jupyterlab) and
|
|
78
74
|
[VS Code](https://marketplace.visualstudio.com/items?itemName=Calkit.calkit-vscode).
|
|
@@ -314,9 +310,37 @@ To back up or save the project, call:
|
|
|
314
310
|
calkit save -am "Run pipeline"
|
|
315
311
|
```
|
|
316
312
|
|
|
313
|
+
### With an AI coding agent
|
|
314
|
+
|
|
315
|
+
Simply tell the [AI agent](https://docs.calkit.org/ai-tools):
|
|
316
|
+
|
|
317
|
+
> Turn this folder into a Calkit project
|
|
318
|
+
|
|
319
|
+
or
|
|
320
|
+
|
|
321
|
+
> Create me a new Calkit project for investigating...
|
|
322
|
+
|
|
317
323
|
<!-- END INCLUDE -->
|
|
318
324
|
|
|
319
325
|
## Get involved
|
|
320
326
|
|
|
321
327
|
We welcome all kinds of contributions!
|
|
322
328
|
See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to get involved.
|
|
329
|
+
|
|
330
|
+
## Acknowledgements
|
|
331
|
+
|
|
332
|
+
<!-- INCLUDE: docs/acknowledgements.md +1 -->
|
|
333
|
+
|
|
334
|
+
Calkit is supported by the
|
|
335
|
+
[Caltech Schmidt Academy of Software Engineering](https://sase.caltech.edu).
|
|
336
|
+
|
|
337
|
+
<p align="center">
|
|
338
|
+
<a href="https://sase.caltech.edu" target="_blank">
|
|
339
|
+
<img width="40%" src="docs/img/caltech.png" alt="Caltech SASE">
|
|
340
|
+
</a>
|
|
341
|
+
<a href="https://schmidtsciences.org/" target="_blank">
|
|
342
|
+
<img width="40%" src="docs/img/schmidt-sciences.png" alt="Schmidt Sciences">
|
|
343
|
+
</a>
|
|
344
|
+
</p>
|
|
345
|
+
|
|
346
|
+
<!-- END INCLUDE -->
|
|
@@ -490,7 +490,17 @@ def execute_notebook(
|
|
|
490
490
|
typer.echo(f"Using {language} as notebook language")
|
|
491
491
|
# First, ensure the specified environment has a kernel we can use
|
|
492
492
|
# We need to check the environment type and create the kernel if needed
|
|
493
|
-
|
|
493
|
+
docker_env = env.get("kind") == "docker"
|
|
494
|
+
if docker_env:
|
|
495
|
+
# Docker environments run the kernel inside the container, so there is
|
|
496
|
+
# no host kernel to register. Use the container's own kernel (default
|
|
497
|
+
# 'python3', overridable with the env's 'jupyter_kernel' key) and
|
|
498
|
+
# execute with Papermill inside the container further below.
|
|
499
|
+
kernel_name = env.get("jupyter_kernel") or {"r": "ir"}.get(
|
|
500
|
+
language.lower(), "python3"
|
|
501
|
+
)
|
|
502
|
+
display_name = kernel_name
|
|
503
|
+
elif language.lower() in ["python", "julia", "r"]:
|
|
494
504
|
kernel_name, display_name = check_env_kernel(
|
|
495
505
|
env_name=env_name,
|
|
496
506
|
no_check=no_check,
|
|
@@ -563,10 +573,70 @@ def execute_notebook(
|
|
|
563
573
|
typer.echo(f"Using kernel: {kernel_name}")
|
|
564
574
|
typer.echo(f"Running with cwd: {notebook_dir}")
|
|
565
575
|
typer.echo(f"Output will be saved to: {fpath_out_exec}")
|
|
566
|
-
# If this is a Python, Julia, or R notebook, we can use Papermill
|
|
576
|
+
# If this is a Python, Julia, or R notebook, we can use Papermill.
|
|
567
577
|
# If it's a MATLAB notebook, we need to use the MATLAB kernel inside the
|
|
568
|
-
# specified environment
|
|
569
|
-
|
|
578
|
+
# specified environment.
|
|
579
|
+
# Exception: If the environment is a Docker environment, we run Papermill
|
|
580
|
+
# inside the container so the kernel (which lives in the image) and
|
|
581
|
+
# Papermill share a process namespace---this avoids registering a host
|
|
582
|
+
# kernel and cross-container networking entirely
|
|
583
|
+
if docker_env:
|
|
584
|
+
# run_in_env mounts the project at the working directory and applies
|
|
585
|
+
# the env's user/platform/args, so we only need to invoke Papermill
|
|
586
|
+
# ipykernel is in the image, but Papermill may not be, so install it
|
|
587
|
+
# on demand (warning the user) before executing. We install into a
|
|
588
|
+
# writable temp dir on PYTHONPATH rather than the image's site-packages:
|
|
589
|
+
# run_in_env maps the host user into the container, so writing to the
|
|
590
|
+
# system location is typically denied, but /tmp is world-writable
|
|
591
|
+
pm_target = "/tmp/calkit-papermill"
|
|
592
|
+
pythonpath = f"PYTHONPATH={pm_target}"
|
|
593
|
+
pm_cmd = [
|
|
594
|
+
pythonpath,
|
|
595
|
+
"python",
|
|
596
|
+
"-c",
|
|
597
|
+
"import papermill",
|
|
598
|
+
"2>/dev/null",
|
|
599
|
+
"||",
|
|
600
|
+
"(",
|
|
601
|
+
"echo",
|
|
602
|
+
"papermill not found in image; installing it with pip...",
|
|
603
|
+
"&&",
|
|
604
|
+
"python",
|
|
605
|
+
"-m",
|
|
606
|
+
"pip",
|
|
607
|
+
"install",
|
|
608
|
+
"-q",
|
|
609
|
+
"--target",
|
|
610
|
+
pm_target,
|
|
611
|
+
"papermill",
|
|
612
|
+
")",
|
|
613
|
+
"&&",
|
|
614
|
+
pythonpath,
|
|
615
|
+
"python",
|
|
616
|
+
"-m",
|
|
617
|
+
"papermill",
|
|
618
|
+
path,
|
|
619
|
+
fpath_out_exec,
|
|
620
|
+
"-k",
|
|
621
|
+
kernel_name,
|
|
622
|
+
"--log-output",
|
|
623
|
+
]
|
|
624
|
+
if notebook_dir:
|
|
625
|
+
pm_cmd += ["--cwd", notebook_dir]
|
|
626
|
+
if parsed_params:
|
|
627
|
+
# JSON is valid YAML, so pass parameters as base64-encoded JSON to
|
|
628
|
+
# avoid shell-quoting issues across the container boundary
|
|
629
|
+
params_b64 = base64.b64encode(
|
|
630
|
+
json.dumps(parsed_params).encode()
|
|
631
|
+
).decode()
|
|
632
|
+
pm_cmd += ["-b", params_b64]
|
|
633
|
+
run_in_env(
|
|
634
|
+
pm_cmd,
|
|
635
|
+
env_name=env_name,
|
|
636
|
+
no_check=no_check,
|
|
637
|
+
verbose=verbose,
|
|
638
|
+
)
|
|
639
|
+
elif language.lower() in ["python", "julia", "r"]:
|
|
570
640
|
papermill.execute_notebook(
|
|
571
641
|
input_path=path,
|
|
572
642
|
output_path=fpath_out_exec,
|
|
@@ -96,8 +96,6 @@ class Environment(BaseModel):
|
|
|
96
96
|
# without a spec file (e.g. Matlab/Slurm/PBS) don't carry an unused field
|
|
97
97
|
# and a required ``path`` doesn't conflict with the base's optional one.
|
|
98
98
|
description: str | None = None
|
|
99
|
-
stage: str | None = None
|
|
100
|
-
default: bool | None = None
|
|
101
99
|
|
|
102
100
|
|
|
103
101
|
class CondaEnvironment(Environment):
|
|
@@ -112,6 +110,8 @@ class VenvEnvironment(Environment):
|
|
|
112
110
|
# If unset, the prefix is resolved on the fly (defaults to .venv next to
|
|
113
111
|
# the spec file, nesting under .calkit/envs/{name}/.venv on conflict)
|
|
114
112
|
prefix: str | None = None
|
|
113
|
+
# Python version to use when creating the environment
|
|
114
|
+
python: str | None = None
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
class UvEnvironment(Environment):
|
|
@@ -125,6 +125,8 @@ class UvVenvEnvironment(Environment):
|
|
|
125
125
|
# If unset, the prefix is resolved on the fly (defaults to .venv next to
|
|
126
126
|
# the spec file, nesting under .calkit/envs/{name}/.venv on conflict)
|
|
127
127
|
prefix: str | None = None
|
|
128
|
+
# Python version to use when creating the environment
|
|
129
|
+
python: str | None = None
|
|
128
130
|
|
|
129
131
|
|
|
130
132
|
class PixiEnvironment(Environment):
|
|
@@ -153,6 +155,24 @@ class DockerEnvironment(Environment):
|
|
|
153
155
|
shell: Literal["bash", "sh"] = "sh"
|
|
154
156
|
command_mode: Literal["shell", "entrypoint"] = "shell"
|
|
155
157
|
platform: str | None = None
|
|
158
|
+
# Working directory inside the container; defaults to ``/work`` at run time
|
|
159
|
+
wdir: str | None = None
|
|
160
|
+
# User to run the container as; defaults to the host user at run time
|
|
161
|
+
user: str | None = None
|
|
162
|
+
# Files added to the container as dependencies
|
|
163
|
+
deps: list[str] | None = None
|
|
164
|
+
# Environment variables to set in the container
|
|
165
|
+
env_vars: dict[str, str] | None = None
|
|
166
|
+
# Ports to expose, e.g. ``"8080:80"``
|
|
167
|
+
ports: list[str] | None = None
|
|
168
|
+
# GPUs to make available, passed to ``docker run --gpus``
|
|
169
|
+
gpus: str | None = None
|
|
170
|
+
# Extra arguments passed to ``docker run``
|
|
171
|
+
args: list[str] | None = None
|
|
172
|
+
# Name of the Jupyter kernel inside the image, used when executing
|
|
173
|
+
# notebooks with ``calkit nb execute``; defaults to ``python3`` (or ``ir``
|
|
174
|
+
# for R images)
|
|
175
|
+
jupyter_kernel: str | None = None
|
|
156
176
|
|
|
157
177
|
|
|
158
178
|
class REnvironment(Environment):
|
|
@@ -195,6 +215,7 @@ class SSHEnvironment(BaseModel):
|
|
|
195
215
|
key: str | None = None
|
|
196
216
|
send_paths: list[str] = ["./*"]
|
|
197
217
|
get_paths: list[str] = ["*"]
|
|
218
|
+
description: str | None = None
|
|
198
219
|
|
|
199
220
|
|
|
200
221
|
class Software(BaseModel):
|
|
@@ -10,6 +10,7 @@ import sys
|
|
|
10
10
|
import pytest
|
|
11
11
|
|
|
12
12
|
import calkit
|
|
13
|
+
import calkit.notebooks
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def test_clean_notebook_outputs(tmp_dir):
|
|
@@ -264,3 +265,87 @@ def test_execute_notebook_auto_env(tmp_dir):
|
|
|
264
265
|
# TODO: Check if the notebook is saved in the project and if it
|
|
265
266
|
# has an environment specified, either in the notebooks section or a
|
|
266
267
|
# pipeline stage
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
@pytest.mark.skipif(
|
|
271
|
+
sys.platform == "win32",
|
|
272
|
+
reason="Docker Linux images are unavailable on windows-latest GHA runners",
|
|
273
|
+
)
|
|
274
|
+
def test_execute_notebook_docker(tmp_dir):
|
|
275
|
+
# A Docker environment runs the kernel inside the container, so we execute
|
|
276
|
+
# with Papermill inside the container rather than registering a host kernel
|
|
277
|
+
if shutil.which("docker") is None:
|
|
278
|
+
pytest.skip("Docker is not available")
|
|
279
|
+
image = "calkit-nb-docker-test:latest"
|
|
280
|
+
# Bake ipykernel and Papermill into the image so execution is deterministic
|
|
281
|
+
with open("Dockerfile", "w") as f:
|
|
282
|
+
f.write(
|
|
283
|
+
"FROM python:3.10-slim\n"
|
|
284
|
+
"RUN pip install --no-cache-dir ipykernel papermill\n"
|
|
285
|
+
"WORKDIR /work\n"
|
|
286
|
+
)
|
|
287
|
+
subprocess.check_call(["docker", "build", "-t", image, "."])
|
|
288
|
+
subprocess.check_call(["calkit", "init"])
|
|
289
|
+
ck_info = {
|
|
290
|
+
"environments": {
|
|
291
|
+
"docker-env": {"kind": "docker", "image": image, "wdir": "/work"}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
with open("calkit.yaml", "w") as f:
|
|
295
|
+
calkit.ryaml.dump(ck_info, f)
|
|
296
|
+
# A notebook with a 'parameters' cell so we can verify injection
|
|
297
|
+
nb = {
|
|
298
|
+
"cells": [
|
|
299
|
+
{
|
|
300
|
+
"cell_type": "code",
|
|
301
|
+
"execution_count": None,
|
|
302
|
+
"id": "params",
|
|
303
|
+
"metadata": {"tags": ["parameters"]},
|
|
304
|
+
"outputs": [],
|
|
305
|
+
"source": ["a = 1\n"],
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"cell_type": "code",
|
|
309
|
+
"execution_count": None,
|
|
310
|
+
"id": "compute",
|
|
311
|
+
"metadata": {},
|
|
312
|
+
"outputs": [],
|
|
313
|
+
"source": ["result = a * 10\n", "print('result =', result)\n"],
|
|
314
|
+
},
|
|
315
|
+
],
|
|
316
|
+
"metadata": {},
|
|
317
|
+
"nbformat": 4,
|
|
318
|
+
"nbformat_minor": 5,
|
|
319
|
+
}
|
|
320
|
+
os.makedirs("notebooks")
|
|
321
|
+
with open(os.path.join("notebooks", "main.ipynb"), "w") as f:
|
|
322
|
+
json.dump(nb, f)
|
|
323
|
+
subprocess.check_call(
|
|
324
|
+
[
|
|
325
|
+
"calkit",
|
|
326
|
+
"nb",
|
|
327
|
+
"exec",
|
|
328
|
+
"-e",
|
|
329
|
+
"docker-env",
|
|
330
|
+
"--no-check",
|
|
331
|
+
"-p",
|
|
332
|
+
"a=4",
|
|
333
|
+
"notebooks/main.ipynb",
|
|
334
|
+
]
|
|
335
|
+
)
|
|
336
|
+
# The injected parameter should have produced result = 40 in the executed
|
|
337
|
+
# notebook saved under .calkit/notebooks/executed
|
|
338
|
+
exec_path = calkit.notebooks.get_executed_notebook_path(
|
|
339
|
+
notebook_path="notebooks/main.ipynb",
|
|
340
|
+
to="notebook",
|
|
341
|
+
parameters={"a": 4},
|
|
342
|
+
)
|
|
343
|
+
with open(exec_path) as f:
|
|
344
|
+
executed = json.load(f)
|
|
345
|
+
text = "".join(
|
|
346
|
+
"".join(o.get("text", []))
|
|
347
|
+
for cell in executed["cells"]
|
|
348
|
+
for o in cell.get("outputs", [])
|
|
349
|
+
if o.get("name") == "stdout"
|
|
350
|
+
)
|
|
351
|
+
assert "result = 40" in text
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Acknowledgements
|
|
2
|
+
|
|
3
|
+
Calkit is supported by the
|
|
4
|
+
[Caltech Schmidt Academy of Software Engineering](https://sase.caltech.edu).
|
|
5
|
+
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="https://sase.caltech.edu" target="_blank">
|
|
8
|
+
<img width="40%" src="/img/caltech.png" alt="Caltech SASE">
|
|
9
|
+
</a>
|
|
10
|
+
<a href="https://schmidtsciences.org/" target="_blank">
|
|
11
|
+
<img width="40%" src="/img/schmidt-sciences.png" alt="Schmidt Sciences">
|
|
12
|
+
</a>
|
|
13
|
+
</p>
|
|
@@ -626,7 +626,7 @@ Model class: `VenvEnvironment`
|
|
|
626
626
|
| ----------- | --------------- | -------- |
|
|
627
627
|
| kind | Literal['venv'] | yes |
|
|
628
628
|
| path | str | yes |
|
|
629
|
-
| prefix | str |
|
|
629
|
+
| prefix | str | no |
|
|
630
630
|
| python | str | no |
|
|
631
631
|
| description | str | no |
|
|
632
632
|
|
|
@@ -638,7 +638,7 @@ Model class: `UvVenvEnvironment`
|
|
|
638
638
|
| ----------- | ------------------ | -------- |
|
|
639
639
|
| kind | Literal['uv-venv'] | yes |
|
|
640
640
|
| path | str | yes |
|
|
641
|
-
| prefix | str |
|
|
641
|
+
| prefix | str | no |
|
|
642
642
|
| python | str | no |
|
|
643
643
|
| description | str | no |
|
|
644
644
|
|
|
@@ -657,32 +657,24 @@ Model class: `PixiEnvironment`
|
|
|
657
657
|
|
|
658
658
|
Model class: `DockerEnvironment`
|
|
659
659
|
|
|
660
|
-
| Parameter
|
|
661
|
-
|
|
|
662
|
-
| kind
|
|
663
|
-
|
|
|
664
|
-
|
|
|
665
|
-
|
|
|
666
|
-
|
|
|
667
|
-
|
|
|
668
|
-
|
|
|
669
|
-
|
|
|
670
|
-
|
|
|
671
|
-
|
|
|
672
|
-
|
|
|
673
|
-
|
|
|
674
|
-
|
|
|
675
|
-
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
Model class: `REnvironment`
|
|
680
|
-
|
|
681
|
-
| Parameter | Type | Required |
|
|
682
|
-
| ----------- | --------------- | -------- |
|
|
683
|
-
| kind | Literal['renv'] | yes |
|
|
684
|
-
| path | str | yes |
|
|
685
|
-
| description | str | no |
|
|
660
|
+
| Parameter | Type | Required |
|
|
661
|
+
| -------------- | ------------------------------ | -------- |
|
|
662
|
+
| kind | Literal['docker'] | yes |
|
|
663
|
+
| path | str | no |
|
|
664
|
+
| image | str | yes |
|
|
665
|
+
| layers | list[str] | no |
|
|
666
|
+
| shell | Literal['bash'\|'sh'] | no |
|
|
667
|
+
| command_mode | Literal['shell'\|'entrypoint'] | no |
|
|
668
|
+
| platform | str | no |
|
|
669
|
+
| wdir | str | no |
|
|
670
|
+
| user | str | no |
|
|
671
|
+
| deps | list[str] | no |
|
|
672
|
+
| env_vars | dict[str, str] | no |
|
|
673
|
+
| ports | list[str] | no |
|
|
674
|
+
| gpus | str | no |
|
|
675
|
+
| args | list[str] | no |
|
|
676
|
+
| jupyter_kernel | str | no |
|
|
677
|
+
| description | str | no |
|
|
686
678
|
|
|
687
679
|
#### `julia`
|
|
688
680
|
|
|
@@ -702,6 +694,7 @@ Model class: `MatlabEnvironment`
|
|
|
702
694
|
| Parameter | Type | Required |
|
|
703
695
|
| ----------- | ----------------- | -------- |
|
|
704
696
|
| kind | Literal['matlab'] | yes |
|
|
697
|
+
| version | str | no |
|
|
705
698
|
| products | list[str] | no |
|
|
706
699
|
| description | str | no |
|
|
707
700
|
|
|
@@ -709,12 +702,12 @@ Model class: `MatlabEnvironment`
|
|
|
709
702
|
|
|
710
703
|
Model class: `NixEnvironment`
|
|
711
704
|
|
|
712
|
-
| Parameter | Type
|
|
713
|
-
| ----------- |
|
|
714
|
-
| kind | Literal['nix']
|
|
715
|
-
| path | str
|
|
716
|
-
| shell | str
|
|
717
|
-
| description | str
|
|
705
|
+
| Parameter | Type | Required |
|
|
706
|
+
| ----------- | -------------- | -------- |
|
|
707
|
+
| kind | Literal['nix'] | yes |
|
|
708
|
+
| path | str | yes |
|
|
709
|
+
| shell | str | no |
|
|
710
|
+
| description | str | no |
|
|
718
711
|
|
|
719
712
|
#### `slurm`
|
|
720
713
|
|
|
@@ -728,6 +721,17 @@ Model class: `SlurmEnvironment`
|
|
|
728
721
|
| default_setup | list[str] | no |
|
|
729
722
|
| description | str | no |
|
|
730
723
|
|
|
724
|
+
#### `renv`
|
|
725
|
+
|
|
726
|
+
Model class: `REnvironment`
|
|
727
|
+
|
|
728
|
+
| Parameter | Type | Required |
|
|
729
|
+
| ----------- | --------------- | -------- |
|
|
730
|
+
| kind | Literal['renv'] | yes |
|
|
731
|
+
| path | str | yes |
|
|
732
|
+
| prefix | str | yes |
|
|
733
|
+
| description | str | no |
|
|
734
|
+
|
|
731
735
|
#### `ssh`
|
|
732
736
|
|
|
733
737
|
Model class: `SSHEnvironment`
|
|
Binary file
|
|
Binary file
|
|
Binary file
|