calkit-python 0.34.2__tar.gz → 0.34.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 (273) hide show
  1. {calkit_python-0.34.2 → calkit_python-0.34.4}/PKG-INFO +2 -1
  2. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/main.py +2 -0
  3. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/overleaf.py +73 -18
  4. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/overleaf.py +12 -1
  5. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_main.py +65 -0
  6. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_overleaf.py +16 -0
  7. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/overleaf.md +1 -4
  8. {calkit_python-0.34.2 → calkit_python-0.34.4}/pyproject.toml +1 -0
  9. {calkit_python-0.34.2 → calkit_python-0.34.4}/uv.lock +11 -0
  10. {calkit_python-0.34.2 → calkit_python-0.34.4}/.gitignore +0 -0
  11. {calkit_python-0.34.2 → calkit_python-0.34.4}/.pre-commit-config.yaml +0 -0
  12. {calkit_python-0.34.2 → calkit_python-0.34.4}/.prettierignore +0 -0
  13. {calkit_python-0.34.2 → calkit_python-0.34.4}/.python-version +0 -0
  14. {calkit_python-0.34.2 → calkit_python-0.34.4}/.yarnrc.yml +0 -0
  15. {calkit_python-0.34.2 → calkit_python-0.34.4}/CITATION.cff +0 -0
  16. {calkit_python-0.34.2 → calkit_python-0.34.4}/CODE_OF_CONDUCT.md +0 -0
  17. {calkit_python-0.34.2 → calkit_python-0.34.4}/CONTRIBUTING.md +0 -0
  18. {calkit_python-0.34.2 → calkit_python-0.34.4}/LICENSE +0 -0
  19. {calkit_python-0.34.2 → calkit_python-0.34.4}/Makefile +0 -0
  20. {calkit_python-0.34.2 → calkit_python-0.34.4}/README.md +0 -0
  21. {calkit_python-0.34.2 → calkit_python-0.34.4}/babel.config.js +0 -0
  22. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/__init__.py +0 -0
  23. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/__main__.py +0 -0
  24. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/calc.py +0 -0
  25. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/check.py +0 -0
  26. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/__init__.py +0 -0
  27. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/check.py +0 -0
  28. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/cloud.py +0 -0
  29. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/config.py +0 -0
  30. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/core.py +0 -0
  31. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/describe.py +0 -0
  32. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/import_.py +0 -0
  33. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/latex.py +0 -0
  34. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/list.py +0 -0
  35. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/new.py +0 -0
  36. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/notebooks.py +0 -0
  37. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/office.py +0 -0
  38. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/slurm.py +0 -0
  39. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cli/update.py +0 -0
  40. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/cloud.py +0 -0
  41. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/conda.py +0 -0
  42. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/config.py +0 -0
  43. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/core.py +0 -0
  44. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/datasets.py +0 -0
  45. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/detect.py +0 -0
  46. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/docker.py +0 -0
  47. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/dvc.py +0 -0
  48. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/environments.py +0 -0
  49. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/git.py +0 -0
  50. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/github.py +0 -0
  51. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/gui.py +0 -0
  52. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/invenio.py +0 -0
  53. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/jupyter.py +0 -0
  54. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/jupyterlab/__init__.py +0 -0
  55. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/jupyterlab/routes.py +0 -0
  56. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/package.json +0 -0
  57. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/schemas/calkit/package.json.orig +0 -0
  58. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/schemas/calkit/plugin.json +0 -0
  59. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/502.9a2c5772a15466e923ef.js +0 -0
  60. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/695.2c41003a452d43d2b358.js +0 -0
  61. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/867.a42a046aa5108f54f8fb.js +0 -0
  62. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/909.99b13e1e3c2a6e1ceb30.js +0 -0
  63. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js +0 -0
  64. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/946.050af2abf7845cfbdbd2.js.LICENSE.txt +0 -0
  65. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/b2f1c3efe70cb539d121.png +0 -0
  66. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/remoteEntry.63846b8de2465d49bd89.js +0 -0
  67. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/style.js +0 -0
  68. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/labextension/static/third-party-licenses.json +0 -0
  69. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/licenses.py +0 -0
  70. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/magics.py +0 -0
  71. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/matlab.py +0 -0
  72. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/models/__init__.py +0 -0
  73. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/models/core.py +0 -0
  74. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/models/io.py +0 -0
  75. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/models/iteration.py +0 -0
  76. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/models/pipeline.py +0 -0
  77. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/notebooks.py +0 -0
  78. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/office.py +0 -0
  79. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/ops.py +0 -0
  80. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/pipeline.py +0 -0
  81. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/releases.py +0 -0
  82. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/server.py +0 -0
  83. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/__init__.py +0 -0
  84. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/core.py +0 -0
  85. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/__init__.py +0 -0
  86. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/article/paper.tex +0 -0
  87. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/core.py +0 -0
  88. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/jfm/jfm.bst +0 -0
  89. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/jfm/jfm.cls +0 -0
  90. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
  91. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/jfm/paper.tex +0 -0
  92. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/templates/latex/jfm/upmath.sty +0 -0
  93. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/__init__.py +0 -0
  94. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/__init__.py +0 -0
  95. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_check.py +0 -0
  96. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_config.py +0 -0
  97. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_import.py +0 -0
  98. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_latex.py +0 -0
  99. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_list.py +0 -0
  100. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_new.py +0 -0
  101. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/cli/test_notebooks.py +0 -0
  102. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/jupyterlab/__init__.py +0 -0
  103. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/jupyterlab/test_routes.py +0 -0
  104. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/models/__init__.py +0 -0
  105. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/models/test_iteration.py +0 -0
  106. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/models/test_pipeline.py +0 -0
  107. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_calc.py +0 -0
  108. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_check.py +0 -0
  109. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_conda.py +0 -0
  110. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_core.py +0 -0
  111. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_detect.py +0 -0
  112. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_dvc.py +0 -0
  113. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_environments.py +0 -0
  114. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_git.py +0 -0
  115. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_invenio.py +0 -0
  116. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_jupyter.py +0 -0
  117. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_magics.py +0 -0
  118. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_matlab.py +0 -0
  119. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_notebooks.py +0 -0
  120. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_pipeline.py +0 -0
  121. {calkit_python-0.34.2 → calkit_python-0.34.4}/calkit/tests/test_templates.py +0 -0
  122. {calkit_python-0.34.2 → calkit_python-0.34.4}/conftest.py +0 -0
  123. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/CNAME +0 -0
  124. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/apps.md +0 -0
  125. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/calculations.md +0 -0
  126. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/calkit-yaml.md +0 -0
  127. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/cli-reference.md +0 -0
  128. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/cloud-integration.md +0 -0
  129. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/datasets.md +0 -0
  130. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/dependencies.md +0 -0
  131. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/environments.md +0 -0
  132. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/examples.md +0 -0
  133. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/governance.md +0 -0
  134. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/help.md +0 -0
  135. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/c-to-the-k-white.svg +0 -0
  136. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/calkit-fragmentation-compendium.png +0 -0
  137. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/calkit-no-bg.png +0 -0
  138. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/connect-zenodo.png +0 -0
  139. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab/all-green.png +0 -0
  140. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab/collect-data-stale.png +0 -0
  141. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab/new-env.png +0 -0
  142. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab/new-notebook.png +0 -0
  143. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab/pipeline-badge.png +0 -0
  144. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/jupyterlab-params.png +0 -0
  145. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/plos-osi-code-2024-03.png +0 -0
  146. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/img/vscode-nb-params.png +0 -0
  147. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/index.md +0 -0
  148. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/installation.md +0 -0
  149. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/jupyterlab.md +0 -0
  150. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/local-server.md +0 -0
  151. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/notebooks.md +0 -0
  152. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/pipeline/index.md +0 -0
  153. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/pipeline/manual-steps.md +0 -0
  154. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/pipeline/running-and-logging.md +0 -0
  155. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/pipeline/slurm.md +0 -0
  156. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/quickstart.md +0 -0
  157. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/references.md +0 -0
  158. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/releases.md +0 -0
  159. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/reproducibility.md +0 -0
  160. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/adding-latex-pub-docker.md +0 -0
  161. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/conda-envs.md +0 -0
  162. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/existing-project.md +0 -0
  163. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/first-project.md +0 -0
  164. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/github-actions.md +0 -0
  165. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/actions-repo-secrets.png +0 -0
  166. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
  167. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
  168. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
  169. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
  170. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
  171. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
  172. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
  173. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
  174. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
  175. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
  176. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/push.png +0 -0
  177. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
  178. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
  179. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/chart-more-rows.png +0 -0
  180. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/create-project.png +0 -0
  181. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
  182. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/excel-chart.png +0 -0
  183. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/excel-data.png +0 -0
  184. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
  185. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/needs-clone.png +0 -0
  186. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/new-stage.png +0 -0
  187. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
  188. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
  189. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/status-more-rows.png +0 -0
  190. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
  191. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/untracked-data.png +0 -0
  192. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/updated-publication.png +0 -0
  193. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
  194. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/office/workflow-page.png +0 -0
  195. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/clone.png +0 -0
  196. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/create-project.png +0 -0
  197. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
  198. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
  199. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
  200. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/new-token.png +0 -0
  201. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/reclone.png +0 -0
  202. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
  203. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/quick-actions.png +0 -0
  204. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/img/run-proc.png +0 -0
  205. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/index.md +0 -0
  206. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/jupyterlab.md +0 -0
  207. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/latex-codespaces.md +0 -0
  208. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/matlab.md +0 -0
  209. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/notebook-pipeline.md +0 -0
  210. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/office.md +0 -0
  211. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/openfoam.md +0 -0
  212. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/tutorials/procedures.md +0 -0
  213. {calkit_python-0.34.2 → calkit_python-0.34.4}/docs/version-control.md +0 -0
  214. {calkit_python-0.34.2 → calkit_python-0.34.4}/install.json +0 -0
  215. {calkit_python-0.34.2 → calkit_python-0.34.4}/jest.config.js +0 -0
  216. {calkit_python-0.34.2 → calkit_python-0.34.4}/jupyter-config/server-config/calkit.json +0 -0
  217. {calkit_python-0.34.2 → calkit_python-0.34.4}/mkdocs.yml +0 -0
  218. {calkit_python-0.34.2 → calkit_python-0.34.4}/package.json +0 -0
  219. {calkit_python-0.34.2 → calkit_python-0.34.4}/schema/plugin.json +0 -0
  220. {calkit_python-0.34.2 → calkit_python-0.34.4}/scripts/install.ps1 +0 -0
  221. {calkit_python-0.34.2 → calkit_python-0.34.4}/scripts/install.sh +0 -0
  222. {calkit_python-0.34.2 → calkit_python-0.34.4}/scripts/make-calk9.sh +0 -0
  223. {calkit_python-0.34.2 → calkit_python-0.34.4}/scripts/sync-docs.py +0 -0
  224. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/__tests__/useQueries.spec.ts +0 -0
  225. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/calkit-config.ts +0 -0
  226. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/cell-output-marker.ts +0 -0
  227. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/commit-dialog.tsx +0 -0
  228. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/environment-editor.tsx +0 -0
  229. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/notebook-registration.tsx +0 -0
  230. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/notebook-toolbar.tsx +0 -0
  231. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/pipeline-status-bar.tsx +0 -0
  232. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/project-info-editor.tsx +0 -0
  233. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/sidebar-settings.tsx +0 -0
  234. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/sidebar.tsx +0 -0
  235. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/components/stage-editor.tsx +0 -0
  236. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/feature-flags.ts +0 -0
  237. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/file-browser-menu.ts +0 -0
  238. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/hooks/__tests__/useQueries.test.tsx +0 -0
  239. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/hooks/useQueries.ts +0 -0
  240. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/icons.ts +0 -0
  241. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/index.ts +0 -0
  242. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/io-tracker.ts +0 -0
  243. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/pipeline-state.ts +0 -0
  244. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/queryClient.ts +0 -0
  245. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/request.ts +0 -0
  246. {calkit_python-0.34.2 → calkit_python-0.34.4}/src/shims-mainmenu.d.ts +0 -0
  247. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/base.css +0 -0
  248. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/cell-output-marker.css +0 -0
  249. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/environment-editor.css +0 -0
  250. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/environment-selector.css +0 -0
  251. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/img/calkit-no-bg.png +0 -0
  252. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/index.css +0 -0
  253. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/index.js +0 -0
  254. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/notebook-toolbar.css +0 -0
  255. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/pipeline-status-bar.css +0 -0
  256. {calkit_python-0.34.2 → calkit_python-0.34.4}/style/sidebar.css +0 -0
  257. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/dvc-md5-dir/osx-arm64.txt +0 -0
  258. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/nb-julia.ipynb +0 -0
  259. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/nb-params.ipynb +0 -0
  260. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/nb-subdir.ipynb +0 -0
  261. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/pipeline.ipynb +0 -0
  262. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/script.py +0 -0
  263. {calkit_python-0.34.2 → calkit_python-0.34.4}/test/test-log.log +0 -0
  264. {calkit_python-0.34.2 → calkit_python-0.34.4}/tsconfig.json +0 -0
  265. {calkit_python-0.34.2 → calkit_python-0.34.4}/tsconfig.test.json +0 -0
  266. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/.gitignore +0 -0
  267. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/README.md +0 -0
  268. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/jupyter_server_test_config.py +0 -0
  269. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/package.json +0 -0
  270. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/playwright.config.js +0 -0
  271. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/tests/calkit.spec.ts +0 -0
  272. {calkit_python-0.34.2 → calkit_python-0.34.4}/ui-tests/yarn.lock +0 -0
  273. {calkit_python-0.34.2 → calkit_python-0.34.4}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calkit-python
3
- Version: 0.34.2
3
+ Version: 0.34.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
@@ -44,6 +44,7 @@ Requires-Dist: python-dotenv>=1
44
44
  Requires-Dist: pywin32; platform_system == 'Windows'
45
45
  Requires-Dist: requests
46
46
  Requires-Dist: sqlitedict>=2.1.0
47
+ Requires-Dist: texsoup>=0.3.1
47
48
  Requires-Dist: toml>=0.10.2
48
49
  Requires-Dist: tqdm>=4.67.1
49
50
  Requires-Dist: typer==0.21.1
@@ -1189,6 +1189,7 @@ def run(
1189
1189
  "allow-missing",
1190
1190
  "dry",
1191
1191
  "keep-going",
1192
+ "ignore-errors",
1192
1193
  "force-downstream",
1193
1194
  "glob",
1194
1195
  "no-commit",
@@ -1199,6 +1200,7 @@ def run(
1199
1200
  if pipeline is not None:
1200
1201
  args += ["--pipeline", pipeline]
1201
1202
  if downstream is not None:
1203
+ args.append("--downstream")
1202
1204
  args += downstream
1203
1205
  start_time_no_tz = calkit.utcnow(remove_tz=True)
1204
1206
  start_time = calkit.utcnow(remove_tz=False)
@@ -18,6 +18,19 @@ from calkit.cli import raise_error, warn
18
18
  overleaf_app = typer.Typer(no_args_is_help=True)
19
19
 
20
20
 
21
+ def _extract_title_from_tex(tex_file_path: str) -> str | None:
22
+ """Extract the title from a LaTeX file."""
23
+ from TexSoup import TexSoup
24
+
25
+ try:
26
+ with open(tex_file_path) as f:
27
+ overleaf_target_text = f.read()
28
+ texsoup = TexSoup(overleaf_target_text)
29
+ return str(texsoup.title.string) if texsoup.title else None
30
+ except Exception:
31
+ return None
32
+
33
+
21
34
  def _get_overleaf_token() -> str:
22
35
  """Get the user's Overleaf token from config.
23
36
 
@@ -78,13 +91,13 @@ def import_publication(
78
91
  ),
79
92
  ],
80
93
  title: Annotated[
81
- str,
94
+ str | None,
82
95
  typer.Option(
83
96
  "--title",
84
97
  "-t",
85
98
  help="Title of the publication.",
86
99
  ),
87
- ],
100
+ ] = None,
88
101
  target_path: Annotated[
89
102
  str | None,
90
103
  typer.Option(
@@ -143,6 +156,18 @@ def import_publication(
143
156
  help="Force adding the publication even if it already exists.",
144
157
  ),
145
158
  ] = False,
159
+ push_only: Annotated[
160
+ bool,
161
+ typer.Option(
162
+ "--push-only",
163
+ "-P",
164
+ help=(
165
+ "Push local files to Overleaf without pulling. "
166
+ "Useful when initializing a new Overleaf project from local "
167
+ "files."
168
+ ),
169
+ ),
170
+ ] = False,
146
171
  ):
147
172
  """Import a publication from an Overleaf project."""
148
173
  from calkit.cli.main import ignore as git_ignore
@@ -188,7 +213,9 @@ def import_publication(
188
213
  git.Repo.clone_from(git_clone_url, overleaf_project_dir)
189
214
  # Detect target path if not specified
190
215
  if target_path is None:
191
- ol_contents = os.listdir(overleaf_project_dir)
216
+ ol_contents = os.listdir(
217
+ dest_dir if push_only else overleaf_project_dir
218
+ )
192
219
  for cand in ["main.tex", "report.tex", "paper.tex"]:
193
220
  if cand in ol_contents:
194
221
  target_path = cand
@@ -203,10 +230,26 @@ def import_publication(
203
230
  "Target TeX file path cannot be detected; "
204
231
  "please specify with --target"
205
232
  )
233
+ return
234
+ # Try to extract title from the target LaTeX file if not provided
235
+ if not title:
236
+ target_tex_path = os.path.join(
237
+ dest_dir if push_only else overleaf_project_dir, target_path
238
+ )
239
+ extracted_title = _extract_title_from_tex(target_tex_path)
240
+ if extracted_title:
241
+ typer.echo(f"Detected title: {extracted_title}")
242
+ title = extracted_title
243
+ if not title:
244
+ raise_error(
245
+ "Title could not be detected from the LaTeX file; "
246
+ "please specify with --title"
247
+ )
206
248
  # Determine the PDF output path
207
249
  pdf_path = target_path.removesuffix(".tex") + ".pdf" # type: ignore
208
250
  typer.echo(f"Using PDF path: {pdf_path}")
209
251
  tex_path = pdf_path.removesuffix(".pdf") + ".tex"
252
+ target_tex_path = Path(dest_dir, tex_path).as_posix()
210
253
  pub_path = Path(dest_dir, pdf_path).as_posix()
211
254
  pub_paths = [pub.get("path") for pub in pubs]
212
255
  if not overwrite and pub_path in pub_paths:
@@ -240,20 +283,18 @@ def import_publication(
240
283
  with open("calkit.yaml", "w") as f:
241
284
  calkit.ryaml.dump(ck_info, f)
242
285
  # Check that we have a build stage
243
- # TODO: Use Calkit pipeline for this
244
286
  typer.echo("Checking for a build stage in the pipeline")
287
+ pipeline = ck_info.get("pipeline", {})
288
+ stages = pipeline.get("stages", {})
245
289
  stage_name = None
246
- if os.path.isfile("dvc.yaml"):
247
- with open("dvc.yaml", "r") as f:
248
- dvc_info = calkit.ryaml.load(f)
249
- stages = dvc_info.get("stages", {})
250
- for stage_name_i, stage in stages.items():
251
- if pub_path in stage.get("outs", []):
252
- stage_name = stage_name_i
253
- typer.echo(f"Found build stage '{stage_name}' in pipeline")
254
- break
255
- else:
256
- stages = {}
290
+ for stage_name_i, stage in stages.items():
291
+ if (
292
+ stage.get("kind") == "latex"
293
+ and stage.get("target_path") == target_tex_path
294
+ ):
295
+ stage_name = stage_name_i
296
+ typer.echo(f"Found build stage '{stage_name}' in pipeline")
297
+ break
257
298
  if stage_name is None:
258
299
  # Create a new stage
259
300
  stage_name = calkit.to_kebab_case("build-" + dest_dir)
@@ -265,7 +306,7 @@ def import_publication(
265
306
  new_latex_stage(
266
307
  name=stage_name,
267
308
  environment=tex_env_name,
268
- target_path=Path(dest_dir, tex_path).as_posix(),
309
+ target_path=target_tex_path,
269
310
  inputs=[
270
311
  os.path.join(dest_dir, p) for p in sync_paths + push_paths
271
312
  ],
@@ -308,7 +349,7 @@ def import_publication(
308
349
  ]
309
350
  )
310
351
  # Sync the project
311
- sync(paths=[dest_dir], no_commit=no_commit)
352
+ sync(paths=[dest_dir], no_commit=no_commit, push_only=push_only)
312
353
 
313
354
 
314
355
  @overleaf_app.command(name="sync")
@@ -347,7 +388,7 @@ def sync(
347
388
  typer.Option(
348
389
  "--no-push",
349
390
  help=(
350
- "Do not push the changes to the project remote. "
391
+ "Do not push the changes to the main project remote. "
351
392
  "Changes will always be pushed to Overleaf."
352
393
  ),
353
394
  ),
@@ -367,6 +408,19 @@ def sync(
367
408
  help="Mark merge conflicts as resolved before committing.",
368
409
  ),
369
410
  ] = False,
411
+ push_only: Annotated[
412
+ bool,
413
+ typer.Option(
414
+ "--push-only",
415
+ "-P",
416
+ help=(
417
+ "Only push local files to Overleaf without pulling from "
418
+ "Overleaf. "
419
+ "Useful when initializing a new Overleaf project from local "
420
+ "files."
421
+ ),
422
+ ),
423
+ ] = False,
370
424
  ):
371
425
  """Sync folders with Overleaf."""
372
426
  # TODO: We should probably ensure the pipeline isn't stale
@@ -487,6 +541,7 @@ def sync(
487
541
  verbose=verbose,
488
542
  resolving_conflict=resolve,
489
543
  print_info=typer.echo,
544
+ push_only=push_only,
490
545
  )
491
546
  except Exception as e:
492
547
  raise_error(str(e))
@@ -307,6 +307,7 @@ def sync(
307
307
  print_info=print,
308
308
  verbose: bool = False,
309
309
  resolving_conflict: bool = False,
310
+ push_only: bool = False,
310
311
  ) -> dict:
311
312
  """Sync between the main project repo and Overleaf repo.
312
313
 
@@ -315,6 +316,10 @@ def sync(
315
316
  All files in the Overleaf repo are committed to Git, while some in the
316
317
  main project can be ignored, e.g., in cases where they are copied in from
317
318
  a map-paths stage.
319
+
320
+ When push_only is True, only push local files to Overleaf without pulling
321
+ or applying changes from Overleaf to local. Useful for initializing a new
322
+ Overleaf project from local files.
318
323
  """
319
324
  res = {}
320
325
  # Normalize ``path_in_project`` as a posix path
@@ -344,7 +349,13 @@ def sync(
344
349
  )
345
350
  paths_for_overleaf_patch = paths.paths_to_use_for_git_patch
346
351
  res["paths_for_overleaf_patch"] = paths_for_overleaf_patch
347
- if last_sync_commit:
352
+ if push_only:
353
+ # When push_only is True, skip pulling from Overleaf and applying
354
+ # patches to local
355
+ # Simply copy files to Overleaf
356
+ print_info("Push-only sync; skipping pull from Overleaf")
357
+ res["patch"] = None
358
+ elif last_sync_commit:
348
359
  # Compute a patch in the Overleaf project between HEAD and the last
349
360
  # sync
350
361
  patch = overleaf_repo.git.format_patch(
@@ -13,6 +13,7 @@ import dvc.repo
13
13
  import git
14
14
  import pytest
15
15
  import toml
16
+ import yaml
16
17
  from dvc.exceptions import NotDvcRepoError
17
18
  from git.exc import InvalidGitRepositoryError
18
19
 
@@ -645,6 +646,70 @@ def test_run(tmp_dir):
645
646
  assert "stage_run_info" in res
646
647
 
647
648
 
649
+ def test_run_ignore_errors(tmp_dir):
650
+ subprocess.check_call(["calkit", "init"])
651
+ # Create a pipeline with a failing stage and an independent stage
652
+ dvc_yaml = {
653
+ "stages": {
654
+ "failing-stage": {
655
+ "cmd": 'python -c "import sys; sys.exit(1)"',
656
+ },
657
+ "independent-stage": {
658
+ "cmd": "python -c \"open('out.txt', 'w').write('done')\"",
659
+ "outs": ["out.txt"],
660
+ },
661
+ }
662
+ }
663
+ with open("dvc.yaml", "w") as f:
664
+ yaml.dump(dvc_yaml, f)
665
+ subprocess.check_call(
666
+ ["calkit", "save", "-am", "Create pipeline", "--no-push"]
667
+ )
668
+ # Without --ignore-errors, the pipeline should fail
669
+ result = subprocess.run(["calkit", "run"])
670
+ assert result.returncode != 0
671
+ # With --ignore-errors, the independent stage should complete
672
+ if os.path.exists("out.txt"):
673
+ os.remove("out.txt")
674
+ subprocess.check_call(["calkit", "run", "--ignore-errors"])
675
+ assert os.path.exists("out.txt")
676
+
677
+
678
+ def test_run_downstream(tmp_dir):
679
+ subprocess.check_call(["calkit", "init"])
680
+ # Create a pipeline: stage-a -> stage-b
681
+ dvc_yaml = {
682
+ "stages": {
683
+ "stage-a": {
684
+ "cmd": "python -c \"open('a.txt', 'w').write('a')\"",
685
+ "outs": ["a.txt"],
686
+ },
687
+ "stage-b": {
688
+ "cmd": (
689
+ "python -c \"open('b.txt', 'w')"
690
+ ".write(open('a.txt').read() + 'b')\""
691
+ ),
692
+ "deps": ["a.txt"],
693
+ "outs": ["b.txt"],
694
+ },
695
+ }
696
+ }
697
+ with open("dvc.yaml", "w") as f:
698
+ yaml.dump(dvc_yaml, f)
699
+ # Run all stages to prime the cache
700
+ subprocess.check_call(["calkit", "run"])
701
+ assert os.path.exists("a.txt")
702
+ assert os.path.exists("b.txt")
703
+ # Delete outputs and run with --downstream stage-a: both stages should run
704
+ os.remove("a.txt")
705
+ os.remove("b.txt")
706
+ subprocess.check_call(
707
+ ["calkit", "run", "--downstream", "stage-a", "--force"]
708
+ )
709
+ assert os.path.exists("a.txt")
710
+ assert os.path.exists("b.txt")
711
+
712
+
648
713
  def test_stage_run_info_from_log_content():
649
714
  fpath = os.path.join(
650
715
  os.path.dirname(__file__), "..", "..", "..", "test", "test-log.log"
@@ -7,6 +7,7 @@ import uuid
7
7
  import git
8
8
 
9
9
  import calkit
10
+ from calkit.cli.overleaf import _extract_title_from_tex
10
11
  from calkit.git import ls_files
11
12
 
12
13
 
@@ -141,3 +142,18 @@ def test_overleaf(tmp_dir):
141
142
  assert "main.pdf" not in ol_repo_git_show
142
143
  assert "main.log" not in ol_repo_git_show
143
144
  assert "main.aux" not in ol_repo_git_show
145
+
146
+
147
+ def test_extract_title_from_tex(tmp_dir):
148
+ # Test that we can extract a title from a simple LaTeX file
149
+ tex = r"""
150
+ \documentclass{article}
151
+ \title{My Cool Paper}
152
+ \begin{document}
153
+ Hello world!
154
+ \end{document}
155
+ """
156
+ with open("test.tex", "w") as f:
157
+ f.write(tex)
158
+ title = _extract_title_from_tex("test.tex")
159
+ assert title == "My Cool Paper"
@@ -51,10 +51,7 @@ For example:
51
51
  ```sh
52
52
  calkit overleaf import \
53
53
  https://www.overleaf.com/project/68000059d42b134573cb2e35 \
54
- paper \
55
- --title "My paper title" \
56
- --kind journal-article \
57
- --push-path figures
54
+ paper
58
55
  ```
59
56
 
60
57
  This command will link a local project folder, in this case `paper`,
@@ -52,6 +52,7 @@ dependencies = [
52
52
  "sqlitedict>=2.1.0",
53
53
  "json2latex>=0.0.3",
54
54
  "toml>=0.10.2",
55
+ "texsoup>=0.3.1",
55
56
  ]
56
57
  description = "Reproducibility simplified."
57
58
  dynamic = ["version"]
@@ -512,6 +512,7 @@ dependencies = [
512
512
  { name = "pywin32", marker = "sys_platform == 'win32'" },
513
513
  { name = "requests" },
514
514
  { name = "sqlitedict" },
515
+ { name = "texsoup" },
515
516
  { name = "toml" },
516
517
  { name = "tqdm" },
517
518
  { name = "typer" },
@@ -580,6 +581,7 @@ requires-dist = [
580
581
  { name = "pywin32", marker = "sys_platform == 'win32'" },
581
582
  { name = "requests" },
582
583
  { name = "sqlitedict", specifier = ">=2.1.0" },
584
+ { name = "texsoup", specifier = ">=0.3.1" },
583
585
  { name = "toml", specifier = ">=0.10.2" },
584
586
  { name = "tqdm", specifier = ">=4.67.1" },
585
587
  { name = "typer", specifier = "==0.21.1" },
@@ -5065,6 +5067,15 @@ wheels = [
5065
5067
  { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload-time = "2024-03-12T14:34:36.569Z" },
5066
5068
  ]
5067
5069
 
5070
+ [[package]]
5071
+ name = "texsoup"
5072
+ version = "0.3.1"
5073
+ source = { registry = "https://pypi.org/simple" }
5074
+ sdist = { url = "https://files.pythonhosted.org/packages/84/58/1c503390ed1a81cdcbff811dbf7a54132994acef8dd2194d55cf657a9e97/TexSoup-0.3.1.tar.gz", hash = "sha256:3f6b2ad0abe3688a6656f544c1ba04d0eb25f423f8c377b7369f9ce061ddb70b", size = 26174, upload-time = "2020-08-03T10:14:56.027Z" }
5075
+ wheels = [
5076
+ { url = "https://files.pythonhosted.org/packages/5c/a7/e9eb0e14633710b51b8472a3beccc7d6a44d55a0a3ef4493ebb4b7977253/TexSoup-0.3.1-py3-none-any.whl", hash = "sha256:ae8f08d17f86a905b7c2ce01c9f2da613fbca0bcea78c71d727719e896045bed", size = 27809, upload-time = "2024-02-28T09:15:28.697Z" },
5077
+ ]
5078
+
5068
5079
  [[package]]
5069
5080
  name = "tinycss2"
5070
5081
  version = "1.4.0"
File without changes
File without changes
File without changes