calkit-python 0.35.3__tar.gz → 0.35.4__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 (283) hide show
  1. {calkit_python-0.35.3 → calkit_python-0.35.4}/PKG-INFO +1 -1
  2. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/git.py +42 -4
  3. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/releases.py +1 -1
  4. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_git.py +51 -0
  5. calkit_python-0.35.4/calkit/tests/test_releases.py +44 -0
  6. {calkit_python-0.35.3 → calkit_python-0.35.4}/.gitignore +0 -0
  7. {calkit_python-0.35.3 → calkit_python-0.35.4}/.pre-commit-config.yaml +0 -0
  8. {calkit_python-0.35.3 → calkit_python-0.35.4}/.prettierignore +0 -0
  9. {calkit_python-0.35.3 → calkit_python-0.35.4}/.python-version +0 -0
  10. {calkit_python-0.35.3 → calkit_python-0.35.4}/.yarnrc.yml +0 -0
  11. {calkit_python-0.35.3 → calkit_python-0.35.4}/CITATION.cff +0 -0
  12. {calkit_python-0.35.3 → calkit_python-0.35.4}/CODE_OF_CONDUCT.md +0 -0
  13. {calkit_python-0.35.3 → calkit_python-0.35.4}/CONTRIBUTING.md +0 -0
  14. {calkit_python-0.35.3 → calkit_python-0.35.4}/LICENSE +0 -0
  15. {calkit_python-0.35.3 → calkit_python-0.35.4}/Makefile +0 -0
  16. {calkit_python-0.35.3 → calkit_python-0.35.4}/README.md +0 -0
  17. {calkit_python-0.35.3 → calkit_python-0.35.4}/babel.config.js +0 -0
  18. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/__init__.py +0 -0
  19. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/__main__.py +0 -0
  20. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/calc.py +0 -0
  21. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/check.py +0 -0
  22. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/__init__.py +0 -0
  23. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/check.py +0 -0
  24. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/cloud.py +0 -0
  25. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/config.py +0 -0
  26. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/core.py +0 -0
  27. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/describe.py +0 -0
  28. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/import_.py +0 -0
  29. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/latex.py +0 -0
  30. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/list.py +0 -0
  31. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/main/__init__.py +0 -0
  32. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/main/core.py +0 -0
  33. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/main/xr.py +0 -0
  34. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/new.py +0 -0
  35. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/notebooks.py +0 -0
  36. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/office.py +0 -0
  37. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/overleaf.py +0 -0
  38. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/slurm.py +0 -0
  39. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cli/update.py +0 -0
  40. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/cloud.py +0 -0
  41. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/conda.py +0 -0
  42. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/config.py +0 -0
  43. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/core.py +0 -0
  44. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/datasets.py +0 -0
  45. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/detect.py +0 -0
  46. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/docker.py +0 -0
  47. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/dvc.py +0 -0
  48. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/environments.py +0 -0
  49. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/fs.py +0 -0
  50. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/github.py +0 -0
  51. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/gui.py +0 -0
  52. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/invenio.py +0 -0
  53. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/julia.py +0 -0
  54. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/jupyter.py +0 -0
  55. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/jupyterlab/__init__.py +0 -0
  56. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/jupyterlab/routes.py +0 -0
  57. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/package.json +0 -0
  58. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  59. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  60. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  61. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  62. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  63. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/909.651be47ca47390b78a92.js +0 -0
  64. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  65. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  66. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  67. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/remoteEntry.c091821b3d7f2d287a67.js +0 -0
  68. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/style.js +0 -0
  69. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/labextension/static/third-party-licenses.json +0 -0
  70. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/licenses.py +0 -0
  71. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/magics.py +0 -0
  72. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/matlab.py +0 -0
  73. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/models/__init__.py +0 -0
  74. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/models/core.py +0 -0
  75. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/models/io.py +0 -0
  76. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/models/iteration.py +0 -0
  77. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/models/pipeline.py +0 -0
  78. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/notebooks.py +0 -0
  79. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/office.py +0 -0
  80. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/ops.py +0 -0
  81. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/overleaf.py +0 -0
  82. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/pipeline.py +0 -0
  83. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/server.py +0 -0
  84. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/__init__.py +0 -0
  85. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/core.py +0 -0
  86. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/__init__.py +0 -0
  87. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/article/paper.tex +0 -0
  88. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/core.py +0 -0
  89. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/jfm/jfm.bst +0 -0
  90. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/jfm/jfm.cls +0 -0
  91. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  92. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/jfm/paper.tex +0 -0
  93. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/templates/latex/jfm/upmath.sty +0 -0
  94. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/__init__.py +0 -0
  95. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/__init__.py +0 -0
  96. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/main/__init__.py +0 -0
  97. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/main/test_core.py +0 -0
  98. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/main/test_xr.py +0 -0
  99. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_check.py +0 -0
  100. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_config.py +0 -0
  101. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_import.py +0 -0
  102. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_latex.py +0 -0
  103. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_list.py +0 -0
  104. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_new.py +0 -0
  105. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_notebooks.py +0 -0
  106. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/cli/test_overleaf.py +0 -0
  107. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/jupyterlab/__init__.py +0 -0
  108. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/jupyterlab/test_routes.py +0 -0
  109. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/models/__init__.py +0 -0
  110. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/models/test_iteration.py +0 -0
  111. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/models/test_pipeline.py +0 -0
  112. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_calc.py +0 -0
  113. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_check.py +0 -0
  114. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_conda.py +0 -0
  115. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_core.py +0 -0
  116. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_detect.py +0 -0
  117. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_docker.py +0 -0
  118. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_dvc.py +0 -0
  119. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_environments.py +0 -0
  120. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_fs.py +0 -0
  121. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_invenio.py +0 -0
  122. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_julia.py +0 -0
  123. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_jupyter.py +0 -0
  124. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_magics.py +0 -0
  125. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_matlab.py +0 -0
  126. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_notebooks.py +0 -0
  127. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_pipeline.py +0 -0
  128. {calkit_python-0.35.3 → calkit_python-0.35.4}/calkit/tests/test_templates.py +0 -0
  129. {calkit_python-0.35.3 → calkit_python-0.35.4}/conftest.py +0 -0
  130. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/CNAME +0 -0
  131. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/apps.md +0 -0
  132. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/calculations.md +0 -0
  133. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/calkit-yaml.md +0 -0
  134. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/cli-reference.md +0 -0
  135. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/cloud-integration.md +0 -0
  136. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/datasets.md +0 -0
  137. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/dependencies.md +0 -0
  138. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/environments.md +0 -0
  139. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/examples.md +0 -0
  140. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/governance.md +0 -0
  141. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/help.md +0 -0
  142. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/c-to-the-k-white.svg +0 -0
  143. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/calkit-fragmentation-compendium.png +0 -0
  144. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/calkit-no-bg.png +0 -0
  145. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/connect-zenodo.png +0 -0
  146. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab/all-green.png +0 -0
  147. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  148. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab/new-env.png +0 -0
  149. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab/new-notebook.png +0 -0
  150. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  151. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/jupyterlab-params.png +0 -0
  152. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/plos-osi-code-2024-03.png +0 -0
  153. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/img/vscode-nb-params.png +0 -0
  154. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/index.md +0 -0
  155. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/installation.md +0 -0
  156. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/jupyterlab.md +0 -0
  157. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/local-server.md +0 -0
  158. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/notebooks.md +0 -0
  159. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/overleaf.md +0 -0
  160. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/pipeline/index.md +0 -0
  161. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/pipeline/manual-steps.md +0 -0
  162. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/pipeline/running-and-logging.md +0 -0
  163. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/pipeline/slurm.md +0 -0
  164. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/quickstart.md +0 -0
  165. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/references.md +0 -0
  166. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/releases.md +0 -0
  167. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/reproducibility.md +0 -0
  168. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  169. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/conda-envs.md +0 -0
  170. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/existing-project.md +0 -0
  171. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/first-project.md +0 -0
  172. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/github-actions.md +0 -0
  173. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  174. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  175. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  176. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  177. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  178. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  179. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  180. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  181. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  182. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  183. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  184. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  185. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  186. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  187. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  188. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/create-project.png +0 -0
  189. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  190. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/excel-chart.png +0 -0
  191. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/excel-data.png +0 -0
  192. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  193. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/needs-clone.png +0 -0
  194. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/new-stage.png +0 -0
  195. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  196. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  197. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/status-more-rows.png +0 -0
  198. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  199. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/untracked-data.png +0 -0
  200. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/updated-publication.png +0 -0
  201. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  202. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/office/workflow-page.png +0 -0
  203. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/clone.png +0 -0
  204. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/create-project.png +0 -0
  205. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  206. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  207. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  208. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/new-token.png +0 -0
  209. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/reclone.png +0 -0
  210. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  211. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/quick-actions.png +0 -0
  212. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/img/run-proc.png +0 -0
  213. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/index.md +0 -0
  214. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/jupyterlab.md +0 -0
  215. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/latex-codespaces.md +0 -0
  216. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/matlab.md +0 -0
  217. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/notebook-pipeline.md +0 -0
  218. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/office.md +0 -0
  219. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/openfoam.md +0 -0
  220. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/tutorials/procedures.md +0 -0
  221. {calkit_python-0.35.3 → calkit_python-0.35.4}/docs/version-control.md +0 -0
  222. {calkit_python-0.35.3 → calkit_python-0.35.4}/install.json +0 -0
  223. {calkit_python-0.35.3 → calkit_python-0.35.4}/jest.config.js +0 -0
  224. {calkit_python-0.35.3 → calkit_python-0.35.4}/jupyter-config/server-config/calkit.json +0 -0
  225. {calkit_python-0.35.3 → calkit_python-0.35.4}/mkdocs.yml +0 -0
  226. {calkit_python-0.35.3 → calkit_python-0.35.4}/package.json +0 -0
  227. {calkit_python-0.35.3 → calkit_python-0.35.4}/pyproject.toml +0 -0
  228. {calkit_python-0.35.3 → calkit_python-0.35.4}/schema/plugin.json +0 -0
  229. {calkit_python-0.35.3 → calkit_python-0.35.4}/scripts/install.ps1 +0 -0
  230. {calkit_python-0.35.3 → calkit_python-0.35.4}/scripts/install.sh +0 -0
  231. {calkit_python-0.35.3 → calkit_python-0.35.4}/scripts/make-calk9.sh +0 -0
  232. {calkit_python-0.35.3 → calkit_python-0.35.4}/scripts/sync-docs.py +0 -0
  233. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/__tests__/useQueries.spec.ts +0 -0
  234. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/calkit-config.ts +0 -0
  235. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/cell-output-marker.ts +0 -0
  236. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/commit-dialog.tsx +0 -0
  237. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/environment-editor.tsx +0 -0
  238. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/notebook-registration.tsx +0 -0
  239. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/notebook-toolbar.tsx +0 -0
  240. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/pipeline-status-bar.tsx +0 -0
  241. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/project-info-editor.tsx +0 -0
  242. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/sidebar-settings.tsx +0 -0
  243. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/sidebar.tsx +0 -0
  244. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/components/stage-editor.tsx +0 -0
  245. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/feature-flags.ts +0 -0
  246. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/file-browser-menu.ts +0 -0
  247. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/hooks/__tests__/useQueries.test.tsx +0 -0
  248. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/hooks/useQueries.ts +0 -0
  249. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/icons.ts +0 -0
  250. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/index.ts +0 -0
  251. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/io-tracker.ts +0 -0
  252. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/pipeline-state.ts +0 -0
  253. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/queryClient.ts +0 -0
  254. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/request.ts +0 -0
  255. {calkit_python-0.35.3 → calkit_python-0.35.4}/src/shims-mainmenu.d.ts +0 -0
  256. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/base.css +0 -0
  257. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/cell-output-marker.css +0 -0
  258. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/environment-editor.css +0 -0
  259. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/environment-selector.css +0 -0
  260. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/img/calkit-no-bg.png +0 -0
  261. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/index.css +0 -0
  262. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/index.js +0 -0
  263. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/notebook-toolbar.css +0 -0
  264. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/pipeline-status-bar.css +0 -0
  265. {calkit_python-0.35.3 → calkit_python-0.35.4}/style/sidebar.css +0 -0
  266. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  267. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/nb-julia.ipynb +0 -0
  268. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/nb-params.ipynb +0 -0
  269. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/nb-subdir.ipynb +0 -0
  270. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/pipeline.ipynb +0 -0
  271. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/script.py +0 -0
  272. {calkit_python-0.35.3 → calkit_python-0.35.4}/test/test-log.log +0 -0
  273. {calkit_python-0.35.3 → calkit_python-0.35.4}/tsconfig.json +0 -0
  274. {calkit_python-0.35.3 → calkit_python-0.35.4}/tsconfig.test.json +0 -0
  275. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/.gitignore +0 -0
  276. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/README.md +0 -0
  277. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/jupyter_server_test_config.py +0 -0
  278. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/package.json +0 -0
  279. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/playwright.config.js +0 -0
  280. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/tests/calkit.spec.ts +0 -0
  281. {calkit_python-0.35.3 → calkit_python-0.35.4}/ui-tests/yarn.lock +0 -0
  282. {calkit_python-0.35.3 → calkit_python-0.35.4}/uv.lock +0 -0
  283. {calkit_python-0.35.3 → calkit_python-0.35.4}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.35.3
3
+ Version: 0.35.4
4
4
  Summary: Reproducibility simplified.
5
5
  Project-URL: Homepage, https://calkit.org
6
6
  Project-URL: Issues, https://github.com/calkit/calkit/issues
@@ -150,10 +150,48 @@ def ensure_path_is_not_ignored(
150
150
  gitignore_txt = f.read()
151
151
  lines = gitignore_txt.splitlines()
152
152
  no_ignore_line = f"!{target_path}"
153
- if target_path in lines:
154
- lines.remove(target_path)
155
- elif no_ignore_line not in lines:
156
- lines.append(no_ignore_line)
153
+ path_parts = Path(target_path).parts
154
+ if len(path_parts) == 1:
155
+ # Simple (non-nested) path: remove the direct ignore rule, or add a
156
+ # negation if the ignore comes from a glob or other pattern.
157
+ if target_path in lines:
158
+ lines.remove(target_path)
159
+ elif no_ignore_line not in lines:
160
+ lines.append(no_ignore_line)
161
+ else:
162
+ # Nested path: Git will not traverse into a directory excluded by a
163
+ # "dir/" pattern, so a bare "!dir/sub/file" negation has no effect.
164
+ # We need to:
165
+ # 1. Convert any "ancestor/" (or "ancestor") exclude to "ancestor/*"
166
+ # so that git traverses the directory while still ignoring its
167
+ # direct children by default.
168
+ # 2. Add "!ancestor/" un-ignore rules for each intermediate directory
169
+ # so git recurses into them.
170
+ # 3. Add "ancestor/*" re-ignore rules so that only explicitly
171
+ # un-ignored files within each intermediate directory are tracked.
172
+ # 4. Add the final "!target_path" negation for the specific file.
173
+ if target_path in lines:
174
+ lines.remove(target_path)
175
+ for i in range(1, len(path_parts)):
176
+ ancestor = "/".join(path_parts[:i])
177
+ reignore_glob = f"{ancestor}/*"
178
+ # Convert a directory-exclude pattern to a glob so git traverses it
179
+ if f"{ancestor}/" in lines:
180
+ idx = lines.index(f"{ancestor}/")
181
+ lines[idx] = reignore_glob
182
+ elif ancestor in lines:
183
+ idx = lines.index(ancestor)
184
+ lines[idx] = reignore_glob
185
+ # Un-ignore this intermediate directory so git recurses into it
186
+ no_ignore_dir = f"!{ancestor}/"
187
+ if no_ignore_dir not in lines:
188
+ lines.append(no_ignore_dir)
189
+ # Re-ignore everything inside this intermediate directory so that
190
+ # only explicitly un-ignored entries are tracked
191
+ if reignore_glob not in lines:
192
+ lines.append(reignore_glob)
193
+ if no_ignore_line not in lines:
194
+ lines.append(no_ignore_line)
157
195
  with open(gitignore_path, "w") as f:
158
196
  f.write(os.linesep.join(lines))
159
197
  return True
@@ -129,7 +129,7 @@ def create_citation_cff(
129
129
  def ls_files() -> list[str]:
130
130
  """List all files to be released."""
131
131
  repo = git.Repo()
132
- git_files = repo.git.ls_files(".").strip().split("\n")
132
+ git_files = repo.git.ls_files(".", recurse_submodules=True).splitlines()
133
133
  dvc_files = calkit.dvc.list_paths(recursive=True)
134
134
  return git_files + dvc_files
135
135
 
@@ -1,5 +1,6 @@
1
1
  """Tests for ``calkit.git``."""
2
2
 
3
+ import os
3
4
  from pathlib import Path
4
5
 
5
6
  import git
@@ -97,3 +98,53 @@ def test_ensure_path_is_not_ignored(tmp_dir):
97
98
  gi_sub = f.read().splitlines()
98
99
  assert "test.txt" not in gi_sub
99
100
  assert "!test.txt" not in gi_sub
101
+
102
+
103
+ def test_ensure_path_is_not_ignored_nested(tmp_dir):
104
+ """Test that nested paths in ignored directories are correctly un-ignored.
105
+
106
+ When a parent directory is excluded with a trailing slash (e.g.,
107
+ ``results/``), git will not traverse into it, so a simple negation like
108
+ ``!results/StageName/end.json`` has no effect. The fix converts the
109
+ directory exclude to a glob pattern and adds intermediate un-ignore rules.
110
+ """
111
+ repo = git.Repo.init()
112
+ # Ignore the entire results/ directory
113
+ with open(".gitignore", "w") as f:
114
+ f.write("results/\n")
115
+ # Create the nested target file so git can evaluate ignore status
116
+ os.makedirs("results/StageName", exist_ok=True)
117
+ with open("results/StageName/end.json", "w") as f:
118
+ f.write("{}")
119
+ # The file must be ignored before we try to un-ignore it
120
+ assert repo.ignored("results/StageName/end.json")
121
+ result = calkit.git.ensure_path_is_not_ignored(
122
+ repo, path="results/StageName/end.json"
123
+ )
124
+ assert result is True
125
+ with open(".gitignore") as f:
126
+ lines = f.read().splitlines()
127
+ # The plain directory exclude should be replaced with a glob
128
+ assert "results/" not in lines
129
+ assert "results/*" in lines
130
+ # Intermediate directory must be un-ignored so git traverses into it
131
+ assert "!results/StageName/" in lines
132
+ # The intermediate directory's other contents must be re-ignored
133
+ assert "results/StageName/*" in lines
134
+ # The specific file must be explicitly un-ignored
135
+ assert "!results/StageName/end.json" in lines
136
+ # Verify git no longer considers the target file as ignored
137
+ assert not repo.ignored("results/StageName/end.json")
138
+ # Other files in results/ must still be ignored
139
+ with open("results/other.txt", "w") as f:
140
+ f.write("other")
141
+ assert repo.ignored("results/other.txt")
142
+ # Other files in the intermediate directory must still be ignored
143
+ with open("results/StageName/other.json", "w") as f:
144
+ f.write("{}")
145
+ assert repo.ignored("results/StageName/other.json")
146
+ # Calling again should be a no-op (path is no longer ignored)
147
+ result2 = calkit.git.ensure_path_is_not_ignored(
148
+ repo, path="results/StageName/end.json"
149
+ )
150
+ assert result2 is None
@@ -0,0 +1,44 @@
1
+ """Tests for the ``releases`` module."""
2
+
3
+ import subprocess
4
+
5
+ import git
6
+
7
+ from calkit.releases import ls_files
8
+
9
+
10
+ def test_ls_files(tmp_dir):
11
+ subprocess.run(["calkit", "init"], check=True)
12
+ # Create some files and add them to git and dvc
13
+ (tmp_dir / "file1.txt").write_text("This is file 1.")
14
+ (tmp_dir / "file2.txt").write_text("This is file 2.")
15
+ subprocess.run(["git", "add", "file1.txt"], check=True)
16
+ subprocess.run(["git", "commit", "-m", "Add file1.txt"], check=True)
17
+ subprocess.run(["calkit", "dvc", "add", "file2.txt"], check=True)
18
+ # Get the list of files to be released
19
+ files = ls_files()
20
+ assert "file1.txt" in files
21
+ assert "file2.txt" in files
22
+ # Now add some files in a git submodule and ensure they are included
23
+ submodule_source = tmp_dir / "submodule-source"
24
+ submodule_repo = git.Repo.init(submodule_source)
25
+ (submodule_source / "submodule-file.txt").write_text(
26
+ "This file lives in the submodule."
27
+ )
28
+ submodule_repo.git.add("submodule-file.txt")
29
+ submodule_repo.index.commit("Add submodule file")
30
+ subprocess.run(
31
+ [
32
+ "git",
33
+ "-c",
34
+ "protocol.file.allow=always",
35
+ "submodule",
36
+ "add",
37
+ str(submodule_source),
38
+ "submodule",
39
+ ],
40
+ check=True,
41
+ )
42
+ subprocess.run(["git", "commit", "-m", "Add submodule"], check=True)
43
+ files = ls_files()
44
+ assert "submodule/submodule-file.txt" in files
File without changes
File without changes
File without changes