calkit-python 0.41.18__tar.gz → 0.41.20__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 (354) hide show
  1. {calkit_python-0.41.18 → calkit_python-0.41.20}/.gitignore +1 -0
  2. {calkit_python-0.41.18 → calkit_python-0.41.20}/CONTRIBUTING.md +1 -1
  3. {calkit_python-0.41.18 → calkit_python-0.41.20}/PKG-INFO +2 -2
  4. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/core.py +2 -2
  5. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/latex.py +45 -1
  6. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/list.py +12 -10
  7. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/main/core.py +20 -3
  8. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/new.py +645 -473
  9. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/scheduler.py +60 -18
  10. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/update.py +2 -3
  11. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/detect.py +62 -0
  12. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/dvc/zip.py +17 -0
  13. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/models/core.py +27 -26
  14. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/models/pipeline.py +71 -6
  15. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/pipeline.py +181 -2
  16. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/releases.py +53 -0
  17. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/main/test_core.py +82 -1
  18. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_latex.py +32 -0
  19. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_new.py +209 -0
  20. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_scheduler.py +18 -0
  21. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/dvc/test_zip.py +25 -0
  22. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/models/test_pipeline.py +94 -2
  23. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_detect.py +31 -0
  24. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_pipeline.py +115 -1
  25. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/cli-reference.md +30 -22
  26. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/help.md +1 -1
  27. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/pipeline/index.md +3 -0
  28. {calkit_python-0.41.18 → calkit_python-0.41.20}/pyproject.toml +1 -1
  29. {calkit_python-0.41.18 → calkit_python-0.41.20}/uv.lock +1064 -136
  30. {calkit_python-0.41.18 → calkit_python-0.41.20}/.claude-plugin/marketplace.json +0 -0
  31. {calkit_python-0.41.18 → calkit_python-0.41.20}/.gitattributes +0 -0
  32. {calkit_python-0.41.18 → calkit_python-0.41.20}/.pre-commit-config.yaml +0 -0
  33. {calkit_python-0.41.18 → calkit_python-0.41.20}/.prettierignore +0 -0
  34. {calkit_python-0.41.18 → calkit_python-0.41.20}/.prettierrc.json +0 -0
  35. {calkit_python-0.41.18 → calkit_python-0.41.20}/.python-version +0 -0
  36. {calkit_python-0.41.18 → calkit_python-0.41.20}/.vscode/launch.json +0 -0
  37. {calkit_python-0.41.18 → calkit_python-0.41.20}/.vscode/tasks.json +0 -0
  38. {calkit_python-0.41.18 → calkit_python-0.41.20}/AGENTS.md +0 -0
  39. {calkit_python-0.41.18 → calkit_python-0.41.20}/CITATION.cff +0 -0
  40. {calkit_python-0.41.18 → calkit_python-0.41.20}/CODE_OF_CONDUCT.md +0 -0
  41. {calkit_python-0.41.18 → calkit_python-0.41.20}/LICENSE +0 -0
  42. {calkit_python-0.41.18 → calkit_python-0.41.20}/Makefile +0 -0
  43. {calkit_python-0.41.18 → calkit_python-0.41.20}/README.md +0 -0
  44. {calkit_python-0.41.18 → calkit_python-0.41.20}/agent-plugin/.claude-plugin/plugin.json +0 -0
  45. {calkit_python-0.41.18 → calkit_python-0.41.20}/agent-plugin/skills/add-pipeline-stage/SKILL.md +0 -0
  46. {calkit_python-0.41.18 → calkit_python-0.41.20}/agent-plugin/skills/conventions/SKILL.md +0 -0
  47. {calkit_python-0.41.18 → calkit_python-0.41.20}/agent-plugin/skills/create-pipeline/SKILL.md +0 -0
  48. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/__init__.py +0 -0
  49. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/__main__.py +0 -0
  50. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/calc.py +0 -0
  51. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/check.py +0 -0
  52. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/__init__.py +0 -0
  53. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/check.py +0 -0
  54. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/cloud.py +0 -0
  55. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/config.py +0 -0
  56. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/delete.py +0 -0
  57. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/describe.py +0 -0
  58. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/dev.py +0 -0
  59. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/import_.py +0 -0
  60. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/main/__init__.py +0 -0
  61. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/main/xr.py +0 -0
  62. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/notebooks.py +0 -0
  63. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/office.py +0 -0
  64. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cli/overleaf.py +0 -0
  65. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/cloud.py +0 -0
  66. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/conda.py +0 -0
  67. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/config.py +0 -0
  68. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/core.py +0 -0
  69. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/datasets.py +0 -0
  70. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/dependencies.py +0 -0
  71. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/docker.py +0 -0
  72. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/dvc/__init__.py +0 -0
  73. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/dvc/core.py +0 -0
  74. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/environments.py +0 -0
  75. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/fs.py +0 -0
  76. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/git.py +0 -0
  77. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/github.py +0 -0
  78. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/gui.py +0 -0
  79. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/install.py +0 -0
  80. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/invenio.py +0 -0
  81. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/julia.py +0 -0
  82. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/jupyter.py +0 -0
  83. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/jupyterlab/__init__.py +0 -0
  84. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/jupyterlab/routes.py +0 -0
  85. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/package.json +0 -0
  86. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  87. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  88. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  89. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  90. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  91. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/909.e3f9cc3408834a7fdcc3.js +0 -0
  92. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  93. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  94. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  95. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/remoteEntry.ac9035764d5b2adbb542.js +0 -0
  96. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/style.js +0 -0
  97. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/labextension/static/third-party-licenses.json +0 -0
  98. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/licenses.py +0 -0
  99. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/magics.py +0 -0
  100. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/matlab.py +0 -0
  101. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/models/__init__.py +0 -0
  102. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/models/io.py +0 -0
  103. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/models/iteration.py +0 -0
  104. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/notebooks.py +0 -0
  105. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/office.py +0 -0
  106. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/ops.py +0 -0
  107. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/overleaf.py +0 -0
  108. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/server.py +0 -0
  109. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/__init__.py +0 -0
  110. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/core.py +0 -0
  111. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/__init__.py +0 -0
  112. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/article/paper.tex +0 -0
  113. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/core.py +0 -0
  114. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/jfm/jfm.bst +0 -0
  115. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/jfm/jfm.cls +0 -0
  116. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  117. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/jfm/paper.tex +0 -0
  118. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/templates/latex/jfm/upmath.sty +0 -0
  119. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/__init__.py +0 -0
  120. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/__init__.py +0 -0
  121. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/main/__init__.py +0 -0
  122. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/main/test_lock.py +0 -0
  123. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/main/test_subprojects.py +0 -0
  124. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/main/test_xr.py +0 -0
  125. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_check.py +0 -0
  126. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_cloud.py +0 -0
  127. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_config.py +0 -0
  128. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_delete.py +0 -0
  129. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_import.py +0 -0
  130. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_list.py +0 -0
  131. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_notebooks.py +0 -0
  132. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_overleaf.py +0 -0
  133. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/cli/test_update.py +0 -0
  134. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/dvc/__init__.py +0 -0
  135. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/dvc/test_core.py +0 -0
  136. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/jupyterlab/__init__.py +0 -0
  137. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/jupyterlab/conftest.py +0 -0
  138. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/jupyterlab/test_routes.py +0 -0
  139. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/models/__init__.py +0 -0
  140. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/models/test_core.py +0 -0
  141. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/models/test_iteration.py +0 -0
  142. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_calc.py +0 -0
  143. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_check.py +0 -0
  144. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_cloud.py +0 -0
  145. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_conda.py +0 -0
  146. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_core.py +0 -0
  147. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_dependencies.py +0 -0
  148. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_docker.py +0 -0
  149. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_environments.py +0 -0
  150. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_fs.py +0 -0
  151. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_git.py +0 -0
  152. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_install.py +0 -0
  153. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_invenio.py +0 -0
  154. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_julia.py +0 -0
  155. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_jupyter.py +0 -0
  156. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_licenses.py +0 -0
  157. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_magics.py +0 -0
  158. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_matlab.py +0 -0
  159. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_notebooks.py +0 -0
  160. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_releases.py +0 -0
  161. {calkit_python-0.41.18 → calkit_python-0.41.20}/calkit/tests/test_templates.py +0 -0
  162. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/CNAME +0 -0
  163. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/acknowledgements.md +0 -0
  164. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/ai-tools.md +0 -0
  165. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/apps.md +0 -0
  166. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/calculations.md +0 -0
  167. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/calkit-yaml.md +0 -0
  168. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/cloud-integration.md +0 -0
  169. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/datasets.md +0 -0
  170. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/dependencies.md +0 -0
  171. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/environments.md +0 -0
  172. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/examples.md +0 -0
  173. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/governance.md +0 -0
  174. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/hpc.md +0 -0
  175. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/c-to-the-k-white.svg +0 -0
  176. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/calkit-fragmentation-compendium.png +0 -0
  177. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/calkit-no-bg.png +0 -0
  178. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/caltech.png +0 -0
  179. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/connect-zenodo.png +0 -0
  180. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab/all-green.png +0 -0
  181. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  182. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab/new-env.png +0 -0
  183. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab/new-notebook.png +0 -0
  184. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  185. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/jupyterlab-params.png +0 -0
  186. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/pipeline.png +0 -0
  187. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/plos-osi-code-2024-03.png +0 -0
  188. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/schmidt-sciences.png +0 -0
  189. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/img/vscode-nb-params.png +0 -0
  190. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/index.md +0 -0
  191. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/installation.md +0 -0
  192. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/jupyterlab.md +0 -0
  193. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/local-server.md +0 -0
  194. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/notebooks.md +0 -0
  195. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/overleaf.md +0 -0
  196. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/pipeline/manual-steps.md +0 -0
  197. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/pipeline/running-and-logging.md +0 -0
  198. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/quickstart.md +0 -0
  199. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/references.md +0 -0
  200. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/releases.md +0 -0
  201. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/reproducibility.md +0 -0
  202. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/subprojects.md +0 -0
  203. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  204. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/ai-agents.md +0 -0
  205. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/conda-envs.md +0 -0
  206. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/existing-project.md +0 -0
  207. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/first-project.md +0 -0
  208. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/github-actions.md +0 -0
  209. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  210. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  211. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  212. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  213. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  214. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  215. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  216. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  217. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  218. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  219. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  220. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  221. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  222. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  223. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  224. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/create-project.png +0 -0
  225. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  226. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/excel-chart.png +0 -0
  227. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/excel-data.png +0 -0
  228. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  229. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/needs-clone.png +0 -0
  230. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/new-stage.png +0 -0
  231. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  232. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  233. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/status-more-rows.png +0 -0
  234. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  235. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/untracked-data.png +0 -0
  236. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/updated-publication.png +0 -0
  237. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  238. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/office/workflow-page.png +0 -0
  239. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/clone.png +0 -0
  240. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/create-project.png +0 -0
  241. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  242. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  243. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  244. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/new-token.png +0 -0
  245. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/reclone.png +0 -0
  246. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  247. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/quick-actions.png +0 -0
  248. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/run-proc.png +0 -0
  249. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/create-calkit-env.png +0 -0
  250. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/create-inner-env.png +0 -0
  251. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/create-new-calkit-env.png +0 -0
  252. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/select-calkit-env.png +0 -0
  253. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/slurm-job-running.png +0 -0
  254. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/slurm-launch-options.png +0 -0
  255. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/img/vscode-slurm-notebook/starting-slurm-job.png +0 -0
  256. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/index.md +0 -0
  257. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/jupyterlab.md +0 -0
  258. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/latex-codespaces.md +0 -0
  259. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/matlab.md +0 -0
  260. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/notebook-pipeline.md +0 -0
  261. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/office.md +0 -0
  262. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/openfoam.md +0 -0
  263. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/procedures.md +0 -0
  264. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/tutorials/vscode-slurm-notebook.md +0 -0
  265. {calkit_python-0.41.18 → calkit_python-0.41.20}/docs/version-control.md +0 -0
  266. {calkit_python-0.41.18 → calkit_python-0.41.20}/flake.lock +0 -0
  267. {calkit_python-0.41.18 → calkit_python-0.41.20}/flake.nix +0 -0
  268. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/.yarnrc.yml +0 -0
  269. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/babel.config.js +0 -0
  270. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/install.json +0 -0
  271. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/jest.config.js +0 -0
  272. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/jupyter-config/server-config/calkit.json +0 -0
  273. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/package.json +0 -0
  274. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/schema/plugin.json +0 -0
  275. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/__tests__/useQueries.spec.ts +0 -0
  276. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/calkit-config.ts +0 -0
  277. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/cell-output-marker.ts +0 -0
  278. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/commit-dialog.tsx +0 -0
  279. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/environment-editor.tsx +0 -0
  280. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/notebook-registration.tsx +0 -0
  281. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/notebook-toolbar.tsx +0 -0
  282. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/pipeline-status-bar.tsx +0 -0
  283. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/project-info-editor.tsx +0 -0
  284. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/sidebar-settings.tsx +0 -0
  285. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/sidebar.tsx +0 -0
  286. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/components/stage-editor.tsx +0 -0
  287. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/feature-flags.ts +0 -0
  288. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/file-browser-menu.ts +0 -0
  289. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/hooks/__tests__/useQueries.test.tsx +0 -0
  290. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/hooks/useQueries.ts +0 -0
  291. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/icons.ts +0 -0
  292. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/index.ts +0 -0
  293. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/io-tracker.ts +0 -0
  294. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/pipeline-state.ts +0 -0
  295. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/queryClient.ts +0 -0
  296. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/request.ts +0 -0
  297. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/src/shims-mainmenu.d.ts +0 -0
  298. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/base.css +0 -0
  299. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/cell-output-marker.css +0 -0
  300. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/environment-editor.css +0 -0
  301. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/environment-selector.css +0 -0
  302. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/img/calkit-no-bg.png +0 -0
  303. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/index.css +0 -0
  304. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/index.js +0 -0
  305. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/notebook-toolbar.css +0 -0
  306. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/pipeline-status-bar.css +0 -0
  307. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/style/sidebar.css +0 -0
  308. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/tsconfig.json +0 -0
  309. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/tsconfig.test.json +0 -0
  310. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/.gitignore +0 -0
  311. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/README.md +0 -0
  312. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/jupyter_server_test_config.py +0 -0
  313. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/package.json +0 -0
  314. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/playwright.config.js +0 -0
  315. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/tests/calkit.spec.ts +0 -0
  316. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/ui-tests/yarn.lock +0 -0
  317. {calkit_python-0.41.18 → calkit_python-0.41.20}/jupyterlab-ext/yarn.lock +0 -0
  318. {calkit_python-0.41.18 → calkit_python-0.41.20}/mkdocs.yml +0 -0
  319. {calkit_python-0.41.18 → calkit_python-0.41.20}/scripts/generate-docs-references.py +0 -0
  320. {calkit_python-0.41.18 → calkit_python-0.41.20}/scripts/install.ps1 +0 -0
  321. {calkit_python-0.41.18 → calkit_python-0.41.20}/scripts/install.sh +0 -0
  322. {calkit_python-0.41.18 → calkit_python-0.41.20}/scripts/make-calk9.sh +0 -0
  323. {calkit_python-0.41.18 → calkit_python-0.41.20}/scripts/sync-docs.py +0 -0
  324. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  325. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/nb-julia.ipynb +0 -0
  326. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/nb-params.ipynb +0 -0
  327. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/nb-subdir.ipynb +0 -0
  328. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/pipeline.ipynb +0 -0
  329. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/script.py +0 -0
  330. {calkit_python-0.41.18 → calkit_python-0.41.20}/test/test-log.log +0 -0
  331. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/.gitignore +0 -0
  332. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/.vscodeignore +0 -0
  333. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/CHANGELOG.md +0 -0
  334. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/LICENSE +0 -0
  335. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/README.md +0 -0
  336. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/images/calkit-icon.svg +0 -0
  337. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/images/calkit-no-bg.png +0 -0
  338. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/package-lock.json +0 -0
  339. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/package.json +0 -0
  340. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/scripts/set-proposed-api.js +0 -0
  341. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/environments.ts +0 -0
  342. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/extension.ts +0 -0
  343. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/figures/core.ts +0 -0
  344. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/figures/view.ts +0 -0
  345. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/notebooks.ts +0 -0
  346. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/pipeline/core.ts +0 -0
  347. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/sidebar.ts +0 -0
  348. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/test/environments.test.ts +0 -0
  349. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/test/figures.test.ts +0 -0
  350. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/test/kernel-selection.test.ts +0 -0
  351. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/test/notebooks.test.ts +0 -0
  352. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/test/pipeline.test.ts +0 -0
  353. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/src/types.ts +0 -0
  354. {calkit_python-0.41.18 → calkit_python-0.41.20}/vscode-ext/tsconfig.json +0 -0
@@ -24,3 +24,4 @@ vscode-ext/out
24
24
  .claude
25
25
  TODO.md
26
26
  **/__pycache__/
27
+ CLAUDE.md
@@ -98,7 +98,7 @@ This guide will help you get started.
98
98
  ## 🎉 Join the community
99
99
 
100
100
  - Participate in **[GitHub Discussions](https://github.com/calkit/discussions)**.
101
- - Join our [**Discord**](https://discord.gg/ubb7gAXc) for real-time collaboration.
101
+ - Join our [**Discord**](https://discord.gg/m2MBC79HzD) for real-time collaboration.
102
102
  - Follow our updates on [**LinkedIn**](https://linkedin.com/company/calkit).
103
103
 
104
104
  We appreciate your help in making Calkit better! 🚀
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.41.18
3
+ Version: 0.41.20
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -26,7 +26,7 @@ Requires-Dist: arithmeval
26
26
  Requires-Dist: bibtexparser
27
27
  Requires-Dist: checksumdir
28
28
  Requires-Dist: docx2pdf
29
- Requires-Dist: dvc==3.67.1
29
+ Requires-Dist: dvc[all]==3.67.1
30
30
  Requires-Dist: fastapi
31
31
  Requires-Dist: fsspec>=2026.4.0
32
32
  Requires-Dist: gitpython
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import os
6
6
  import re
7
7
  import subprocess
8
- from typing import TYPE_CHECKING
8
+ from typing import TYPE_CHECKING, NoReturn
9
9
 
10
10
  import typer
11
11
  from typer.core import TyperGroup
@@ -96,7 +96,7 @@ def run_cmd(cmd: list[str]):
96
96
  pty.spawn(cmd, lambda fd: os.read(fd, 1024))
97
97
 
98
98
 
99
- def raise_error(txt: str):
99
+ def raise_error(txt: str) -> NoReturn:
100
100
  typer.echo(typer.style("Error: " + str(txt), fg="red"), err=True)
101
101
  raise typer.Exit(1)
102
102
 
@@ -7,6 +7,7 @@ import os
7
7
  import string
8
8
  import subprocess
9
9
  from copy import deepcopy
10
+ from pathlib import Path
10
11
 
11
12
  import typer
12
13
  from typing_extensions import Annotated
@@ -135,6 +136,36 @@ def build(
135
136
  help="Path to a latexmkrc file to use for compilation.",
136
137
  ),
137
138
  ] = None,
139
+ output_dir: Annotated[
140
+ str | None,
141
+ typer.Option(
142
+ "--output-dir",
143
+ help=(
144
+ "Directory for the compiled PDF, relative to the current "
145
+ "directory. Passed to latexmk as -outdir."
146
+ ),
147
+ ),
148
+ ] = None,
149
+ aux_dir: Annotated[
150
+ str | None,
151
+ typer.Option(
152
+ "--aux-dir",
153
+ help=(
154
+ "Directory for auxiliary files, relative to the current "
155
+ "directory. Passed to latexmk as -auxdir."
156
+ ),
157
+ ),
158
+ ] = None,
159
+ latexmk_args: Annotated[
160
+ list[str],
161
+ typer.Option(
162
+ "--latexmk-arg",
163
+ help=(
164
+ "Extra argument to pass through to latexmk. Repeat the option "
165
+ "to pass more than one."
166
+ ),
167
+ ),
168
+ ] = [],
138
169
  no_synctex: Annotated[
139
170
  bool,
140
171
  typer.Option(
@@ -173,7 +204,20 @@ def build(
173
204
  latexmk_cmd.append("-silent")
174
205
  if force:
175
206
  latexmk_cmd.append("-f")
176
- latexmk_cmd += ["-interaction=nonstopmode", tex_file]
207
+ # latexmk runs with -cd, so its -outdir/-auxdir are relative to the .tex
208
+ # file's directory; convert the (current-directory-relative) Calkit paths
209
+ # into that frame.
210
+ tex_dir = os.path.dirname(tex_file) or "."
211
+ if output_dir is not None:
212
+ rel = Path(os.path.relpath(output_dir, tex_dir)).as_posix()
213
+ latexmk_cmd.append(f"-outdir={rel}")
214
+ if aux_dir is not None:
215
+ rel = Path(os.path.relpath(aux_dir, tex_dir)).as_posix()
216
+ latexmk_cmd.append(f"-auxdir={rel}")
217
+ latexmk_cmd.append("-interaction=nonstopmode")
218
+ # User pass-through args come last so they can override Calkit's defaults.
219
+ latexmk_cmd += latexmk_args
220
+ latexmk_cmd.append(tex_file)
177
221
  if environment is not None:
178
222
  if no_check:
179
223
  check_cmd = ["--no-check"]
@@ -261,21 +261,23 @@ def list_releases():
261
261
  objs = calkit.load_calkit_info().get("releases", {})
262
262
  for name, obj in objs.items():
263
263
  typer.echo(name + ":")
264
- # First figure out if the release is published
264
+ # Figure out if the release is published. Internal releases are never
265
+ # uploaded to an archival service, so skip the lookup for them.
265
266
  published = None
266
- try:
267
- published = calkit.invenio.get(
268
- f"/records/{obj.get('record_id')}",
269
- service=obj.get("publisher"),
270
- )["is_published"]
271
- except Exception:
267
+ if not obj.get("internal"):
272
268
  try:
273
269
  published = calkit.invenio.get(
274
- f"/records/{obj.get('record_id')}/draft",
270
+ f"/records/{obj.get('record_id')}",
275
271
  service=obj.get("publisher"),
276
272
  )["is_published"]
277
- except Exception as e:
278
- warn(f"Cannot tell if release {name} is published: {e}")
273
+ except Exception:
274
+ try:
275
+ published = calkit.invenio.get(
276
+ f"/records/{obj.get('record_id')}/draft",
277
+ service=obj.get("publisher"),
278
+ )["is_published"]
279
+ except Exception as e:
280
+ warn(f"Cannot tell if release {name} is published: {e}")
279
281
  if published is not None:
280
282
  typer.echo(f" published: {published}")
281
283
  for k, v in obj.items():
@@ -179,11 +179,26 @@ def init(
179
179
  typer.Option(
180
180
  "--force",
181
181
  "-f",
182
- help="Force reinitializing DVC if already initialized.",
182
+ help="Re-initialize even if the project is already initialized.",
183
183
  ),
184
184
  ] = False,
185
185
  ):
186
186
  """Initialize the current working directory."""
187
+ import git
188
+ from git.exc import InvalidGitRepositoryError
189
+
190
+ def _project_is_initialized() -> bool:
191
+ try:
192
+ git.Repo(".", search_parent_directories=False)
193
+ except InvalidGitRepositoryError:
194
+ return False
195
+ return os.path.isfile(".dvc/config") and os.path.isfile("calkit.yaml")
196
+
197
+ if _project_is_initialized() and not force:
198
+ raise_error(
199
+ "This project is already initialized. "
200
+ "Use --force to re-initialize."
201
+ )
187
202
  subprocess.run(["git", "init"])
188
203
  result = calkit.dvc.run_dvc_command(
189
204
  ["init"] + (["--force"] if force else [])
@@ -197,13 +212,15 @@ def init(
197
212
  # Commit the newly created .dvc directory
198
213
  repo = calkit.git.get_repo()
199
214
  repo.git.add(".dvc")
200
- repo.git.commit("-m", "Initialize DVC")
215
+ if calkit.git.get_staged_files(repo=repo):
216
+ repo.git.commit("-m", "Initialize DVC")
201
217
  # Create an empty calkit.yaml if one doesn't already exist
202
218
  if not os.path.isfile("calkit.yaml"):
203
219
  with open("calkit.yaml", "w"):
204
220
  pass
205
221
  repo.git.add("calkit.yaml")
206
- repo.git.commit("-m", "Initialize Calkit")
222
+ if calkit.git.get_staged_files(repo=repo):
223
+ repo.git.commit("-m", "Initialize Calkit")
207
224
  # TODO: Initialize `dvc.yaml`
208
225
  # TODO: Add a sane .gitignore file
209
226
  # TODO: Add a sane LICENSE file?