calkit-python 0.34.0__tar.gz → 0.34.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. {calkit_python-0.34.0 → calkit_python-0.34.2}/.pre-commit-config.yaml +4 -2
  2. {calkit_python-0.34.0 → calkit_python-0.34.2}/CONTRIBUTING.md +11 -1
  3. {calkit_python-0.34.0 → calkit_python-0.34.2}/Makefile +7 -2
  4. {calkit_python-0.34.0 → calkit_python-0.34.2}/PKG-INFO +79 -112
  5. calkit_python-0.34.2/README.md +230 -0
  6. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/check.py +38 -40
  7. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/main.py +83 -33
  8. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/new.py +2 -1
  9. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/notebooks.py +26 -10
  10. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/slurm.py +1 -1
  11. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/detect.py +293 -81
  12. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/dvc.py +5 -3
  13. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/environments.py +343 -20
  14. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/jupyterlab/routes.py +9 -3
  15. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/matlab.py +199 -51
  16. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/models/pipeline.py +19 -7
  17. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_main.py +75 -20
  18. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/models/test_pipeline.py +25 -5
  19. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_detect.py +91 -10
  20. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_environments.py +136 -0
  21. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/environments.md +36 -2
  22. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/installation.md +14 -14
  23. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/pipeline/index.md +25 -1
  24. calkit_python-0.34.2/docs/quickstart.md +92 -0
  25. calkit_python-0.34.2/docs/reproducibility.md +104 -0
  26. {calkit_python-0.34.0 → calkit_python-0.34.2}/mkdocs.yml +1 -0
  27. {calkit_python-0.34.0 → calkit_python-0.34.2}/pyproject.toml +3 -1
  28. calkit_python-0.34.2/scripts/sync-docs.py +161 -0
  29. calkit_python-0.34.0/README.md +0 -263
  30. calkit_python-0.34.0/docs/quickstart.md +0 -94
  31. {calkit_python-0.34.0 → calkit_python-0.34.2}/.gitignore +0 -0
  32. {calkit_python-0.34.0 → calkit_python-0.34.2}/.prettierignore +0 -0
  33. {calkit_python-0.34.0 → calkit_python-0.34.2}/.python-version +0 -0
  34. {calkit_python-0.34.0 → calkit_python-0.34.2}/.yarnrc.yml +0 -0
  35. {calkit_python-0.34.0 → calkit_python-0.34.2}/CITATION.cff +0 -0
  36. {calkit_python-0.34.0 → calkit_python-0.34.2}/CODE_OF_CONDUCT.md +0 -0
  37. {calkit_python-0.34.0 → calkit_python-0.34.2}/LICENSE +0 -0
  38. {calkit_python-0.34.0 → calkit_python-0.34.2}/babel.config.js +0 -0
  39. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/__init__.py +0 -0
  40. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/__main__.py +0 -0
  41. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/calc.py +0 -0
  42. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/check.py +0 -0
  43. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/__init__.py +0 -0
  44. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/cloud.py +0 -0
  45. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/config.py +0 -0
  46. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/core.py +0 -0
  47. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/describe.py +0 -0
  48. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/import_.py +0 -0
  49. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/latex.py +0 -0
  50. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/list.py +0 -0
  51. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/office.py +0 -0
  52. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/overleaf.py +0 -0
  53. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cli/update.py +0 -0
  54. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/cloud.py +0 -0
  55. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/conda.py +0 -0
  56. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/config.py +0 -0
  57. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/core.py +0 -0
  58. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/datasets.py +0 -0
  59. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/docker.py +0 -0
  60. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/git.py +0 -0
  61. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/github.py +0 -0
  62. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/gui.py +0 -0
  63. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/invenio.py +0 -0
  64. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/jupyter.py +0 -0
  65. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/jupyterlab/__init__.py +0 -0
  66. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/package.json +0 -0
  67. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  68. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  69. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  70. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  71. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  72. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/909.99b13e1e3c2a6e1ceb30.js +0 -0
  73. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  74. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  75. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  76. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/remoteEntry.63846b8de2465d49bd89.js +0 -0
  77. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/style.js +0 -0
  78. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/labextension/static/third-party-licenses.json +0 -0
  79. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/licenses.py +0 -0
  80. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/magics.py +0 -0
  81. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/models/__init__.py +0 -0
  82. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/models/core.py +0 -0
  83. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/models/io.py +0 -0
  84. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/models/iteration.py +0 -0
  85. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/notebooks.py +0 -0
  86. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/office.py +0 -0
  87. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/ops.py +0 -0
  88. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/overleaf.py +0 -0
  89. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/pipeline.py +0 -0
  90. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/releases.py +0 -0
  91. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/server.py +0 -0
  92. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/__init__.py +0 -0
  93. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/core.py +0 -0
  94. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/__init__.py +0 -0
  95. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/article/paper.tex +0 -0
  96. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/core.py +0 -0
  97. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/jfm/jfm.bst +0 -0
  98. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/jfm/jfm.cls +0 -0
  99. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  100. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/jfm/paper.tex +0 -0
  101. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/templates/latex/jfm/upmath.sty +0 -0
  102. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/__init__.py +0 -0
  103. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/__init__.py +0 -0
  104. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_check.py +0 -0
  105. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_config.py +0 -0
  106. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_import.py +0 -0
  107. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_latex.py +0 -0
  108. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_list.py +0 -0
  109. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_new.py +0 -0
  110. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_notebooks.py +0 -0
  111. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/cli/test_overleaf.py +0 -0
  112. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/jupyterlab/__init__.py +0 -0
  113. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/jupyterlab/test_routes.py +0 -0
  114. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/models/__init__.py +0 -0
  115. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/models/test_iteration.py +0 -0
  116. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_calc.py +0 -0
  117. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_check.py +0 -0
  118. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_conda.py +0 -0
  119. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_core.py +0 -0
  120. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_dvc.py +0 -0
  121. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_git.py +0 -0
  122. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_invenio.py +0 -0
  123. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_jupyter.py +0 -0
  124. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_magics.py +0 -0
  125. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_matlab.py +0 -0
  126. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_notebooks.py +0 -0
  127. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_pipeline.py +0 -0
  128. {calkit_python-0.34.0 → calkit_python-0.34.2}/calkit/tests/test_templates.py +0 -0
  129. {calkit_python-0.34.0 → calkit_python-0.34.2}/conftest.py +0 -0
  130. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/CNAME +0 -0
  131. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/apps.md +0 -0
  132. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/calculations.md +0 -0
  133. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/calkit-yaml.md +0 -0
  134. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/cli-reference.md +0 -0
  135. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/cloud-integration.md +0 -0
  136. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/datasets.md +0 -0
  137. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/dependencies.md +0 -0
  138. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/examples.md +0 -0
  139. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/governance.md +0 -0
  140. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/help.md +0 -0
  141. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/c-to-the-k-white.svg +0 -0
  142. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/calkit-fragmentation-compendium.png +0 -0
  143. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/calkit-no-bg.png +0 -0
  144. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/connect-zenodo.png +0 -0
  145. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab/all-green.png +0 -0
  146. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  147. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab/new-env.png +0 -0
  148. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab/new-notebook.png +0 -0
  149. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  150. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/jupyterlab-params.png +0 -0
  151. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/plos-osi-code-2024-03.png +0 -0
  152. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/img/vscode-nb-params.png +0 -0
  153. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/index.md +0 -0
  154. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/jupyterlab.md +0 -0
  155. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/local-server.md +0 -0
  156. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/notebooks.md +0 -0
  157. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/overleaf.md +0 -0
  158. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/pipeline/manual-steps.md +0 -0
  159. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/pipeline/running-and-logging.md +0 -0
  160. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/pipeline/slurm.md +0 -0
  161. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/references.md +0 -0
  162. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/releases.md +0 -0
  163. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  164. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/conda-envs.md +0 -0
  165. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/existing-project.md +0 -0
  166. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/first-project.md +0 -0
  167. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/github-actions.md +0 -0
  168. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  169. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  170. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  171. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  172. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  173. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  174. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  175. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  176. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  177. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  178. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  179. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  180. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  181. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  182. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  183. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/create-project.png +0 -0
  184. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  185. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/excel-chart.png +0 -0
  186. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/excel-data.png +0 -0
  187. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  188. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/needs-clone.png +0 -0
  189. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/new-stage.png +0 -0
  190. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  191. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  192. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/status-more-rows.png +0 -0
  193. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  194. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/untracked-data.png +0 -0
  195. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/updated-publication.png +0 -0
  196. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  197. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/office/workflow-page.png +0 -0
  198. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/clone.png +0 -0
  199. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/create-project.png +0 -0
  200. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  201. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  202. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  203. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/new-token.png +0 -0
  204. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/reclone.png +0 -0
  205. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  206. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/quick-actions.png +0 -0
  207. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/img/run-proc.png +0 -0
  208. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/index.md +0 -0
  209. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/jupyterlab.md +0 -0
  210. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/latex-codespaces.md +0 -0
  211. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/matlab.md +0 -0
  212. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/notebook-pipeline.md +0 -0
  213. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/office.md +0 -0
  214. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/openfoam.md +0 -0
  215. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/tutorials/procedures.md +0 -0
  216. {calkit_python-0.34.0 → calkit_python-0.34.2}/docs/version-control.md +0 -0
  217. {calkit_python-0.34.0 → calkit_python-0.34.2}/install.json +0 -0
  218. {calkit_python-0.34.0 → calkit_python-0.34.2}/jest.config.js +0 -0
  219. {calkit_python-0.34.0 → calkit_python-0.34.2}/jupyter-config/server-config/calkit.json +0 -0
  220. {calkit_python-0.34.0 → calkit_python-0.34.2}/package.json +0 -0
  221. {calkit_python-0.34.0 → calkit_python-0.34.2}/schema/plugin.json +0 -0
  222. {calkit_python-0.34.0 → calkit_python-0.34.2}/scripts/install.ps1 +0 -0
  223. {calkit_python-0.34.0 → calkit_python-0.34.2}/scripts/install.sh +0 -0
  224. {calkit_python-0.34.0 → calkit_python-0.34.2}/scripts/make-calk9.sh +0 -0
  225. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/__tests__/useQueries.spec.ts +0 -0
  226. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/calkit-config.ts +0 -0
  227. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/cell-output-marker.ts +0 -0
  228. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/commit-dialog.tsx +0 -0
  229. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/environment-editor.tsx +0 -0
  230. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/notebook-registration.tsx +0 -0
  231. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/notebook-toolbar.tsx +0 -0
  232. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/pipeline-status-bar.tsx +0 -0
  233. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/project-info-editor.tsx +0 -0
  234. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/sidebar-settings.tsx +0 -0
  235. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/sidebar.tsx +0 -0
  236. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/components/stage-editor.tsx +0 -0
  237. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/feature-flags.ts +0 -0
  238. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/file-browser-menu.ts +0 -0
  239. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/hooks/__tests__/useQueries.test.tsx +0 -0
  240. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/hooks/useQueries.ts +0 -0
  241. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/icons.ts +0 -0
  242. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/index.ts +0 -0
  243. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/io-tracker.ts +0 -0
  244. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/pipeline-state.ts +0 -0
  245. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/queryClient.ts +0 -0
  246. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/request.ts +0 -0
  247. {calkit_python-0.34.0 → calkit_python-0.34.2}/src/shims-mainmenu.d.ts +0 -0
  248. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/base.css +0 -0
  249. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/cell-output-marker.css +0 -0
  250. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/environment-editor.css +0 -0
  251. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/environment-selector.css +0 -0
  252. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/img/calkit-no-bg.png +0 -0
  253. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/index.css +0 -0
  254. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/index.js +0 -0
  255. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/notebook-toolbar.css +0 -0
  256. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/pipeline-status-bar.css +0 -0
  257. {calkit_python-0.34.0 → calkit_python-0.34.2}/style/sidebar.css +0 -0
  258. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  259. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/nb-julia.ipynb +0 -0
  260. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/nb-params.ipynb +0 -0
  261. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/nb-subdir.ipynb +0 -0
  262. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/pipeline.ipynb +0 -0
  263. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/script.py +0 -0
  264. {calkit_python-0.34.0 → calkit_python-0.34.2}/test/test-log.log +0 -0
  265. {calkit_python-0.34.0 → calkit_python-0.34.2}/tsconfig.json +0 -0
  266. {calkit_python-0.34.0 → calkit_python-0.34.2}/tsconfig.test.json +0 -0
  267. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/.gitignore +0 -0
  268. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/README.md +0 -0
  269. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/jupyter_server_test_config.py +0 -0
  270. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/package.json +0 -0
  271. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/playwright.config.js +0 -0
  272. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/tests/calkit.spec.ts +0 -0
  273. {calkit_python-0.34.0 → calkit_python-0.34.2}/ui-tests/yarn.lock +0 -0
  274. {calkit_python-0.34.0 → calkit_python-0.34.2}/uv.lock +0 -0
  275. {calkit_python-0.34.0 → calkit_python-0.34.2}/yarn.lock +0 -0
@@ -6,14 +6,16 @@ repos:
6
6
  - id: check-merge-conflict
7
7
  - id: end-of-file-fixer
8
8
  - id: trailing-whitespace
9
+ - id: check-yaml
10
+ args: ["--unsafe"]
11
+ - id: check-json
9
12
 
10
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
11
14
  rev: "v0.6.3"
12
15
  hooks:
13
16
  - id: ruff
14
- args: [--exit-non-zero-on-fix, --config=pyproject.toml]
17
+ args: [--exit-non-zero-on-fix]
15
18
  - id: ruff-format
16
- args: [--config=pyproject.toml]
17
19
 
18
20
  - repo: https://github.com/pre-commit/mirrors-prettier
19
21
  rev: "v3.0.3"
@@ -49,6 +49,12 @@ This guide will help you get started.
49
49
  ```sh
50
50
  uv run jupyter lab
51
51
  ```
52
+ 1. **Set up pre-commit hooks** to auto-enforce code style standards:
53
+ ```bash
54
+ uv tool install prek
55
+ prek install
56
+ ```
57
+ This will run automated checks before each commit.
52
58
 
53
59
  ### 3. Make your changes
54
60
 
@@ -56,10 +62,14 @@ This guide will help you get started.
56
62
  ```bash
57
63
  git checkout -b your-feature-name
58
64
  ```
59
- - Check and fix code formatting:
65
+ - Fix automatically-checked formatting issues:
60
66
  ```bash
61
67
  make format
62
68
  ```
69
+ - Follow style guidelines not automatically checked:
70
+ - No blank lines inside functions/methods
71
+ - Type hints required for all functions
72
+ - NumPy-style docstrings
63
73
  - Commit your changes
64
74
  (use the imperative mood and capitalize the first letter,
65
75
  but don't use punctuation):
@@ -9,7 +9,7 @@ install: ## Create the project's virtual environment.
9
9
  @uv sync
10
10
 
11
11
  .PHONY: format
12
- format: ## Automatically format files.
12
+ format: sync-docs ## Automatically format files.
13
13
  @echo "🚀 Linting code with pre-commit"
14
14
  @uv run pre-commit run -a
15
15
 
@@ -33,9 +33,14 @@ test-cov: ## Test the code coverage with pytest.
33
33
  @uv run pytest --cov --cov-config=pyproject.toml
34
34
 
35
35
  .PHONY: test-docs
36
- test-docs: ## Test if documentation can be built without warnings or errors.
36
+ test-docs: sync-docs ## Test if documentation can be built without warnings or errors.
37
37
  @uv run mkdocs build -s
38
38
 
39
+ .PHONY: sync-docs
40
+ sync-docs: ## Sync documentation content from docs/*.md into README.md.
41
+ @echo "🚀 Syncing documentation"
42
+ @uv run python scripts/sync-docs.py
43
+
39
44
  .PHONY: docs
40
45
  docs: ## Build and serve the documentation.
41
46
  @uv run mkdocs serve --livereload
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.34.0
3
+ Version: 0.34.2
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -125,22 +125,20 @@ while guiding users away from common reproducibility pitfalls.
125
125
 
126
126
  ## Installation
127
127
 
128
- To install Calkit, [Git](https://git-scm.com) and Python must be installed.
129
- If you want to use [Docker](https://docker.com) containers,
130
- which is typically a good idea,
131
- that should also be installed.
132
- For Python, we recommend
133
- [uv](https://docs.astral.sh/uv/).
134
- On Linux, macOS, or Windows Git Bash, you can install Calkit and uv with:
128
+ <!-- INCLUDE: docs/installation.md +1 -->
129
+
130
+ On Linux, macOS, or Windows Git Bash,
131
+ install Calkit and [uv](https://docs.astral.sh/uv/)
132
+ (if not already installed) with:
135
133
 
136
134
  ```sh
137
- curl -LsSf https://github.com/calkit/calkit/raw/refs/heads/main/scripts/install.sh | sh
135
+ curl -LsSf install.calkit.org | sh
138
136
  ```
139
137
 
140
138
  Or with Windows Command Prompt or PowerShell:
141
139
 
142
140
  ```powershell
143
- powershell -ExecutionPolicy ByPass -c "irm https://github.com/calkit/calkit/raw/refs/heads/main/scripts/install.ps1 | iex"
141
+ powershell -ExecutionPolicy ByPass -c "irm install-ps1.calkit.org | iex"
144
142
  ```
145
143
 
146
144
  If you already have uv installed, install Calkit with:
@@ -149,17 +147,19 @@ If you already have uv installed, install Calkit with:
149
147
  uv tool install calkit-python
150
148
  ```
151
149
 
152
- Alternatively, but less ideally, you can install with your system Python:
150
+ You can also install with your system Python:
153
151
 
154
152
  ```sh
155
153
  pip install calkit-python
156
154
  ```
157
155
 
158
- For Windows users, the
159
- [Calkit Assistant](https://github.com/calkit/calkit-assistant)
160
- app is the easiest way to get everything set up and ready to work in
161
- VS Code, which can then be used as the primary app for working on
162
- all scientific or analytical computing projects.
156
+ To effectively use Calkit, you'll want to ensure [Git](https://git-scm.com)
157
+ is installed and properly configured.
158
+ You may also want to install [Docker](https://docker.com),
159
+ since that is the default method by which LaTeX environments are created.
160
+ If you want to use the [Calkit Cloud](https://calkit.io)
161
+ for collaboration and backup as a DVC remote,
162
+ you can [set up cloud integration](https://docs.calkit.org/cloud-integration).
163
163
 
164
164
  ### Use without installing
165
165
 
@@ -170,149 +170,116 @@ you can use uv's `uvx` command to run it directly:
170
170
  uvx calk9 --help
171
171
  ```
172
172
 
173
- ## Cloud integration
173
+ ### Calkit Assistant
174
174
 
175
- The Calkit Cloud ([calkit.io](https://calkit.io)) serves as a project
176
- management interface and a DVC remote for easily storing all versions of your
177
- data/code/figures/publications, interacting with your collaborators,
178
- reusing others' research artifacts, etc.
175
+ For Windows users, the
176
+ [Calkit Assistant](https://github.com/calkit/calkit-assistant)
177
+ app is the easiest way to get everything set up and ready to work in
178
+ VS Code, which can then be used as the primary app for working on
179
+ all scientific or analytical computing projects.
179
180
 
180
- After signing up, visit the
181
- [settings](https://calkit.io/settings?tab=tokens)
182
- page and create a token for use with the API.
183
- Then run
181
+ ![Calkit Assistant](https://github.com/calkit/calkit-assistant/blob/main/resources/screenshot.png?raw=true)
184
182
 
185
- ```sh
186
- calkit config set token ${YOUR_TOKEN_HERE}
187
- ```
183
+ <!-- END INCLUDE -->
188
184
 
189
185
  ## Quickstart
190
186
 
187
+ <!-- INCLUDE: docs/quickstart.md +1 -->
188
+
191
189
  ### From an existing project
192
190
 
193
191
  If you want to use Calkit with an existing project,
194
- navigate into its working directory and run:
192
+ navigate into its working directory and use the `xr` command to start
193
+ executing and recording your scripts, notebooks, LaTeX files, etc.,
194
+ as reproducible pipeline stages.
195
+ For example:
195
196
 
196
197
  ```sh
197
- calkit new project --public --cloud .
198
- ```
199
-
200
- Note that the `--public` and `--cloud` options can be omitted,
201
- but you'll need to configure your own DVC remote or use Git to store
202
- pipeline outputs.
198
+ calkit xr scripts/analyze.py
203
199
 
204
- Next, create your [environment(s)](https://docs.calkit.org/environments).
205
- In this example, imagine we have a `requirements.txt` file we want to use to
206
- define a uv virtual environment, or venv:
200
+ calkit xr notebooks/plot.ipynb
207
201
 
208
- ```sh
209
- calkit new uv-venv --name main --path requirements.txt --python 3.13
202
+ calkit xr paper/main.tex
210
203
  ```
211
204
 
212
- If you're using Conda for environment management,
213
- e.g., with an `environment.yml` file,
214
- you can use the `calkit new conda-env` command.
215
-
216
- Next, we can start building our [pipeline](https://docs.calkit.org/pipeline).
217
- Let's say we have a Jupyter notebook called `collect-data.ipynb`
218
- that produces raw data at `data/raw.h5`.
219
- We can add a pipeline stage to run this notebook in the `main` environment
220
- we just created with:
205
+ Calkit will attempt to detect environments, inputs, and outputs and
206
+ save them in `calkit.yaml`.
207
+ If successful,
208
+ you'll be able to run the full pipeline with:
221
209
 
222
210
  ```sh
223
- calkit new jupyter-notebook-stage \
224
- --name collect-data \
225
- --environment main \
226
- --notebook-path collect-data.ipynb \
227
- --output data/raw.h5
211
+ calkit run
228
212
  ```
229
213
 
230
- We can then run the pipeline with:
214
+ Next, make a change to e.g., a script and look at the output of
215
+ `calkit status`.
216
+ You'll see that the pipeline has a stage that is out-of-date:
231
217
 
232
218
  ```sh
233
- calkit run
219
+ ---------------------------- Pipeline ----------------------------
220
+ analyze:
221
+ changed deps:
222
+ modified: scripts/analyze.py
234
223
  ```
235
224
 
236
- and save and back up our results with:
225
+ This can be fixed with another call to `calkit run`.
226
+
227
+ You can save (add and commit) all changes with:
237
228
 
238
229
  ```sh
239
- calkit save -am "Run pipeline"
230
+ calkit save -am "Add to pipeline"
240
231
  ```
241
232
 
242
- After that,
243
- you can add more environments, pipeline stages,
244
- [start a publication with LaTeX](https://docs.calkit.org/tutorials/adding-latex-pub-docker/),
245
- or [link a publication with Overleaf](https://docs.calkit.org/overleaf/).
246
-
247
233
  ### Fresh from a Calkit project template
248
234
 
249
- After installing Calkit and setting your token as described above, run:
235
+ Create a new project from the
236
+ [`calkit/example-basic`](https://github.com/calkit/example-basic)
237
+ template with:
250
238
 
251
239
  ```sh
252
- calkit new project calkit-project-1 \
253
- --title "My first Calkit project" \
240
+ calkit new project my-research \
241
+ --title "My research" \
254
242
  --template calkit/example-basic \
255
- --cloud \
256
- --public
243
+ --cloud
257
244
  ```
258
245
 
259
- This will create a new project from the
260
- [`calkit/example-basic`](https://github.com/calkit/example-basic)
261
- template,
262
- creating it in the cloud and cloning to `calkit-project-1`.
263
- You should now be able to run:
246
+ Note the `--cloud` flag requires [cloud integration](https://docs.calkit.org/cloud-integration)
247
+ to be set up, but can be omitted if the project doesn't need to be backed up to
248
+ the cloud or shared with collaborators.
249
+ Cloud integration can also be set up later.
250
+
251
+ Next, move into the project folder and run the pipeline,
252
+ which consists of several stages defined in `calkit.yaml`:
253
+
254
+ <!-- TODO: This takes a long time to pull the image -->
264
255
 
265
256
  ```sh
266
- cd calkit-project-1
257
+ cd my-research
267
258
  calkit run
268
259
  ```
269
260
 
270
- This will run the project's pipeline.
271
- Next, you can start adding stages to the pipeline,
272
- modifying the Python environments and scripts,
273
- and editing the paper.
274
- All will be kept in sync with the `calkit run` command.
261
+ Next, make some edits to a script or LaTeX file and run `calkit status` to
262
+ see what stages are out-of-date.
263
+ For example:
264
+
265
+ ```sh
266
+ ---------------------------- Pipeline ----------------------------
267
+ build-paper:
268
+ changed deps:
269
+ modified: paper/paper.tex
270
+ ```
271
+
272
+ Execute `calkit run` again to bring everything up-to-date.
275
273
 
276
- To back up all of your work, execute:
274
+ To back up or save the project, call:
277
275
 
278
276
  ```sh
279
277
  calkit save -am "Run pipeline"
280
278
  ```
281
279
 
282
- This will commit and push to both GitHub and the Calkit Cloud.
280
+ <!-- END INCLUDE -->
283
281
 
284
282
  ## Get involved
285
283
 
286
284
  We welcome all kinds of contributions!
287
285
  See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to get involved.
288
-
289
- ## Design/UX principles
290
-
291
- 1. Be opinionated. Users should not be forced to make unimportant decisions.
292
- However, if they disagree, they should have the ability to change the
293
- default behavior. The most common use case should be default.
294
- Commands that are commonly executed as groups should be combined, but
295
- still available to be run individually if desired.
296
- 1. Commits should ideally be made automatically as part of actions that make
297
- changes to the project repo. For
298
- example, if a new object is added via the CLI, a commit should be made
299
- right then unless otherwise specified. This saves the trouble of running
300
- multiple commands and encourages atomic commits.
301
- 1. Pushes should require explicit input from the user.
302
- It is still TBD whether or not a pull should automatically be
303
- made, though in general we want to encourage trunk-based development, i.e.,
304
- only working on a single branch. One exception might be for local
305
- experimentation that has a high likelihood of failure, in which case a
306
- branch can be a nice way to throw those changes away.
307
- Multiple branches should probably not live in the cloud, however, except
308
- for small, quickly merged pull requests.
309
- 1. Idempotency is always a good thing. Unnecessary state is bad. For example,
310
- we should not encourage caching pipeline outputs for operations that are
311
- cheap. Caching should happen either for state that is valuable on its
312
- own, like a figure, or for an intermediate result that is expensive to
313
- generate.
314
- 1. There should be the smallest number of
315
- frequently used commands as possible, and they should require as little
316
- memorization as possible to know how to execute, e.g., a user should be
317
- able to keep running `calkit run` and that's all they really need to do
318
- to make sure the project is up-to-date.
@@ -0,0 +1,230 @@
1
+ <p align="center">
2
+ <a href="https://calkit.org" target="_blank">
3
+ <img width="40%" src="docs/img/calkit-no-bg.png" alt="Calkit">
4
+ </a>
5
+ </p>
6
+ <p align="center">
7
+ <a href="https://docs.calkit.org" target="_blank">
8
+ Documentation
9
+ </a>
10
+ |
11
+ <a href="https://docs.calkit.org/tutorials" target="_blank">
12
+ Tutorials
13
+ </a>
14
+ |
15
+ <a href="https://github.com/orgs/calkit/discussions" target="_blank">
16
+ Discussions
17
+ </a>
18
+ </p>
19
+
20
+ Calkit makes it easy to create
21
+ ["single button"](https://doi.org/10.1190/1.1822162)
22
+ reproducible research projects.
23
+
24
+ Instead of a loosely related collection of files
25
+ and manual instructions,
26
+ turn your project into a version-controlled,
27
+ self-contained "calculation kit,"
28
+ tying together all phases or stages of the project:
29
+ data collection, analysis, visualization, and writing,
30
+ each of which can make use of the latest and greatest computational
31
+ tools and languages.
32
+ In other words, you, your collaborators, and readers will be able to go
33
+ from raw data to research article with a single command,
34
+ improving efficiency via faster iteration cycle time,
35
+ reducing the likelihood of mistakes,
36
+ and allowing others to more effectively build upon your work.
37
+
38
+ Calkit makes this level of automation possible without extensive software
39
+ engineering expertise by providing a project framework and toolset that unifies
40
+ and simplifies the use of powerful enabling technologies like Git,
41
+ DVC, Conda, Docker, and more,
42
+ while guiding users away from common reproducibility pitfalls.
43
+
44
+ ## Features
45
+
46
+ - A declarative pipeline that guides users to define an environment
47
+ for every stage, so long lists of instructions in a README and
48
+ "but it works on my machine" are things of the past.
49
+ - A CLI to run the project's pipeline to verify it's reproducible,
50
+ regenerating outputs as needed and
51
+ ensuring all
52
+ computational environments
53
+ (e.g., [Conda](https://docs.conda.io/en/latest/),
54
+ [Docker](https://docker.com), uv, Julia)
55
+ match their specification.
56
+ - A schema to store structured metadata describing the
57
+ project's important outputs (in its `calkit.yaml` file)
58
+ and how they are created
59
+ (its computational environments and pipeline).
60
+ - A command line interface (CLI) to simplify keeping code, text, and larger
61
+ data files backed up in the same project repo using both
62
+ [Git](https://git-scm.com/) and [DVC](https://dvc.org/).
63
+ - A complementary self-hostable and GitHub-integrated
64
+ [cloud system](https://github.com/calkit/calkit-cloud)
65
+ to facilitate backup, collaboration,
66
+ and sharing throughout the entire research lifecycle.
67
+ - [Overleaf integration](https://docs.calkit.org/overleaf/), so code,
68
+ data, and LaTeX documents can all live in the same repo and be part of a
69
+ single pipeline (no more manual uploads!)
70
+
71
+ ## Installation
72
+
73
+ <!-- INCLUDE: docs/installation.md +1 -->
74
+
75
+ On Linux, macOS, or Windows Git Bash,
76
+ install Calkit and [uv](https://docs.astral.sh/uv/)
77
+ (if not already installed) with:
78
+
79
+ ```sh
80
+ curl -LsSf install.calkit.org | sh
81
+ ```
82
+
83
+ Or with Windows Command Prompt or PowerShell:
84
+
85
+ ```powershell
86
+ powershell -ExecutionPolicy ByPass -c "irm install-ps1.calkit.org | iex"
87
+ ```
88
+
89
+ If you already have uv installed, install Calkit with:
90
+
91
+ ```sh
92
+ uv tool install calkit-python
93
+ ```
94
+
95
+ You can also install with your system Python:
96
+
97
+ ```sh
98
+ pip install calkit-python
99
+ ```
100
+
101
+ To effectively use Calkit, you'll want to ensure [Git](https://git-scm.com)
102
+ is installed and properly configured.
103
+ You may also want to install [Docker](https://docker.com),
104
+ since that is the default method by which LaTeX environments are created.
105
+ If you want to use the [Calkit Cloud](https://calkit.io)
106
+ for collaboration and backup as a DVC remote,
107
+ you can [set up cloud integration](https://docs.calkit.org/cloud-integration).
108
+
109
+ ### Use without installing
110
+
111
+ If you want to use Calkit without installing it,
112
+ you can use uv's `uvx` command to run it directly:
113
+
114
+ ```sh
115
+ uvx calk9 --help
116
+ ```
117
+
118
+ ### Calkit Assistant
119
+
120
+ For Windows users, the
121
+ [Calkit Assistant](https://github.com/calkit/calkit-assistant)
122
+ app is the easiest way to get everything set up and ready to work in
123
+ VS Code, which can then be used as the primary app for working on
124
+ all scientific or analytical computing projects.
125
+
126
+ ![Calkit Assistant](https://github.com/calkit/calkit-assistant/blob/main/resources/screenshot.png?raw=true)
127
+
128
+ <!-- END INCLUDE -->
129
+
130
+ ## Quickstart
131
+
132
+ <!-- INCLUDE: docs/quickstart.md +1 -->
133
+
134
+ ### From an existing project
135
+
136
+ If you want to use Calkit with an existing project,
137
+ navigate into its working directory and use the `xr` command to start
138
+ executing and recording your scripts, notebooks, LaTeX files, etc.,
139
+ as reproducible pipeline stages.
140
+ For example:
141
+
142
+ ```sh
143
+ calkit xr scripts/analyze.py
144
+
145
+ calkit xr notebooks/plot.ipynb
146
+
147
+ calkit xr paper/main.tex
148
+ ```
149
+
150
+ Calkit will attempt to detect environments, inputs, and outputs and
151
+ save them in `calkit.yaml`.
152
+ If successful,
153
+ you'll be able to run the full pipeline with:
154
+
155
+ ```sh
156
+ calkit run
157
+ ```
158
+
159
+ Next, make a change to e.g., a script and look at the output of
160
+ `calkit status`.
161
+ You'll see that the pipeline has a stage that is out-of-date:
162
+
163
+ ```sh
164
+ ---------------------------- Pipeline ----------------------------
165
+ analyze:
166
+ changed deps:
167
+ modified: scripts/analyze.py
168
+ ```
169
+
170
+ This can be fixed with another call to `calkit run`.
171
+
172
+ You can save (add and commit) all changes with:
173
+
174
+ ```sh
175
+ calkit save -am "Add to pipeline"
176
+ ```
177
+
178
+ ### Fresh from a Calkit project template
179
+
180
+ Create a new project from the
181
+ [`calkit/example-basic`](https://github.com/calkit/example-basic)
182
+ template with:
183
+
184
+ ```sh
185
+ calkit new project my-research \
186
+ --title "My research" \
187
+ --template calkit/example-basic \
188
+ --cloud
189
+ ```
190
+
191
+ Note the `--cloud` flag requires [cloud integration](https://docs.calkit.org/cloud-integration)
192
+ to be set up, but can be omitted if the project doesn't need to be backed up to
193
+ the cloud or shared with collaborators.
194
+ Cloud integration can also be set up later.
195
+
196
+ Next, move into the project folder and run the pipeline,
197
+ which consists of several stages defined in `calkit.yaml`:
198
+
199
+ <!-- TODO: This takes a long time to pull the image -->
200
+
201
+ ```sh
202
+ cd my-research
203
+ calkit run
204
+ ```
205
+
206
+ Next, make some edits to a script or LaTeX file and run `calkit status` to
207
+ see what stages are out-of-date.
208
+ For example:
209
+
210
+ ```sh
211
+ ---------------------------- Pipeline ----------------------------
212
+ build-paper:
213
+ changed deps:
214
+ modified: paper/paper.tex
215
+ ```
216
+
217
+ Execute `calkit run` again to bring everything up-to-date.
218
+
219
+ To back up or save the project, call:
220
+
221
+ ```sh
222
+ calkit save -am "Run pipeline"
223
+ ```
224
+
225
+ <!-- END INCLUDE -->
226
+
227
+ ## Get involved
228
+
229
+ We welcome all kinds of contributions!
230
+ See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to get involved.