calkit-python 0.24.6__tar.gz → 0.24.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {calkit_python-0.24.6 → calkit_python-0.24.8}/PKG-INFO +15 -39
- {calkit_python-0.24.6 → calkit_python-0.24.8}/README.md +14 -38
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/__init__.py +1 -1
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/check.py +3 -2
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/new.py +56 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/cli/test_new.py +4 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_conda.py +7 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/index.md +14 -28
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/FUNDING.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/workflows/docs.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/workflows/format.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/workflows/publish-test.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/workflows/publish.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.github/workflows/test.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.gitignore +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.pre-commit-config.yaml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/.python-version +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/CONTRIBUTING.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/LICENSE +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/Makefile +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/__main__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/calc.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/check.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/cloud.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/config.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/import_.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/list.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/main.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/notebooks.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/office.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/overleaf.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cli/update.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/cloud.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/conda.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/config.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/datasets.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/docker.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/dvc.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/environments.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/git.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/github.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/gui.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/jupyter.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/magics.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/matlab.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/models/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/models/core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/models/iteration.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/models/pipeline.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/notebooks.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/office.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/ops.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/pipeline.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/releases.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/server.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/article/paper.tex +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/jfm/jfm.bst +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/jfm/jfm.cls +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/jfm/lineno-FLM.sty +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/jfm/paper.tex +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/templates/latex/jfm/upmath.sty +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/cli/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/cli/test_config.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/cli/test_list.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/cli/test_main.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/models/__init__.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/models/test_pipeline.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_calc.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_check.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_core.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_dvc.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_jupyter.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_magics.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_pipeline.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/tests/test_templates.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/calkit/zenodo.py +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/CNAME +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/apps.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/calculations.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/calkit-yaml.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/cli-reference.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/cloud-integration.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/datasets.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/dependencies.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/environments.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/examples.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/help.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/img/c-to-the-k-white.svg +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/img/calkit-no-bg.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/img/connect-zenodo.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/installation.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/local-server.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/overleaf.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/pipeline/index.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/pipeline/manual-steps.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/references.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/releases.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/adding-latex-pub-docker.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/conda-envs.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/existing-project.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/first-project.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/building-codespace.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/codespaces-secrets-2.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/editor-split.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/go-to-linked-code.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/issue-from-selection.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-project.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-pub-2.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-token.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/paper.tex.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/project-home-3.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/push.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/stage.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/anakin-excel.jpg +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/chart-more-rows.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/create-project.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/elsevier-research-data-guidelines.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/excel-chart.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/excel-data.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/insert-link-to-file.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/needs-clone.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/new-stage.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/phd-comics-version-control.webp +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/pipeline-out-of-date.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/status-more-rows.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/uncommitted-changes.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/untracked-data.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/updated-publication.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/word-to-pdf-stage-2.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/workflow-page.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/clone.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/create-project.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/datasets-page.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/figure-on-website-updated.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/figure-on-website.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/new-token.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/reclone.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/status-after-import-dataset.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/run-proc.png +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/index.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/latex-codespaces.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/matlab.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/notebook-pipeline.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/office.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/openfoam.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/procedures.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/docs/version-control.md +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/mkdocs.yml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/pyproject.toml +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/test/pipeline.ipynb +0 -0
- {calkit_python-0.24.6 → calkit_python-0.24.8}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calkit-python
|
|
3
|
-
Version: 0.24.
|
|
3
|
+
Version: 0.24.8
|
|
4
4
|
Summary: Reproducibility simplified.
|
|
5
5
|
Project-URL: Homepage, https://calkit.org
|
|
6
6
|
Project-URL: Issues, https://github.com/calkit/calkit/issues
|
|
@@ -54,47 +54,23 @@ Description-Content-Type: text/markdown
|
|
|
54
54
|
</a>
|
|
55
55
|
</p>
|
|
56
56
|
|
|
57
|
-
Calkit is
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
(like "pressing a single button" in
|
|
69
|
-
[Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)),
|
|
70
|
-
which should finish in less than 15 minutes
|
|
71
|
-
(suggested by
|
|
72
|
-
[Vandewalle et al. (2009)](https://doi.org/10.1109/MSP.2009.932122)).
|
|
73
|
-
|
|
74
|
-
If the processes are too expensive to rerun in under 15 minutes,
|
|
75
|
-
it should be possible to confirm that none of the input data
|
|
76
|
-
or process definitions (e.g., environment specifications, scripts)
|
|
77
|
-
have changed since saving the current versions of each output artifact
|
|
78
|
-
(figure, table, dataset, publication, etc.)
|
|
79
|
-
|
|
80
|
-
When your project is reproducible,
|
|
81
|
-
you'll be able to iterate more quickly and more often,
|
|
82
|
-
easily onboard collaborators,
|
|
83
|
-
make fewer mistakes,
|
|
84
|
-
and feel confident sharing all of your project materials
|
|
85
|
-
with your research articles,
|
|
86
|
-
because you'll know the code will actually run!
|
|
87
|
-
This will allow others to reuse parts of your project in their own research,
|
|
88
|
-
accelerating the pace of discovery.
|
|
89
|
-
|
|
90
|
-
Working at this level of automation, discipline, and rigor may sound like
|
|
91
|
-
a lot of effort,
|
|
92
|
-
but Calkit makes it easy!
|
|
57
|
+
Calkit's mission is to make every scientific study reproducible.
|
|
58
|
+
That is,
|
|
59
|
+
it should be possible to go from raw data to research article
|
|
60
|
+
by "pressing a single button"
|
|
61
|
+
([Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)).
|
|
62
|
+
|
|
63
|
+
Calkit makes this level of automation possible without extensive software
|
|
64
|
+
engineering expertise by providing a project framework and toolset that unifies
|
|
65
|
+
and simplifies the use of enabling technologies like Git,
|
|
66
|
+
DVC, Conda, Docker, and more,
|
|
67
|
+
while guiding users away from common reproducibility pitfalls.
|
|
93
68
|
|
|
94
69
|
## Features
|
|
95
70
|
|
|
96
71
|
- A declarative pipeline that forces users to define an environment
|
|
97
|
-
for every stage, so
|
|
72
|
+
for every stage, so long lists of instructions in a README and
|
|
73
|
+
"but it works on my machine" are things of the past.
|
|
98
74
|
- A CLI to run the project's pipeline to verify it's reproducible,
|
|
99
75
|
regenerating outputs as needed and
|
|
100
76
|
ensuring all
|
|
@@ -106,7 +82,7 @@ but Calkit makes it easy!
|
|
|
106
82
|
- A command line interface (CLI) to simplify keeping code, text, and larger
|
|
107
83
|
data files backed up in the same project repo using both
|
|
108
84
|
[Git](https://git-scm.com/) and [DVC](https://dvc.org/).
|
|
109
|
-
- A complementary
|
|
85
|
+
- A complementary self-hostable and GitHub-integrated
|
|
110
86
|
[cloud system](https://github.com/calkit/calkit-cloud)
|
|
111
87
|
to facilitate backup, collaboration,
|
|
112
88
|
and sharing throughout the entire research lifecycle.
|
|
@@ -17,47 +17,23 @@
|
|
|
17
17
|
</a>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
|
-
Calkit is
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
(like "pressing a single button" in
|
|
32
|
-
[Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)),
|
|
33
|
-
which should finish in less than 15 minutes
|
|
34
|
-
(suggested by
|
|
35
|
-
[Vandewalle et al. (2009)](https://doi.org/10.1109/MSP.2009.932122)).
|
|
36
|
-
|
|
37
|
-
If the processes are too expensive to rerun in under 15 minutes,
|
|
38
|
-
it should be possible to confirm that none of the input data
|
|
39
|
-
or process definitions (e.g., environment specifications, scripts)
|
|
40
|
-
have changed since saving the current versions of each output artifact
|
|
41
|
-
(figure, table, dataset, publication, etc.)
|
|
42
|
-
|
|
43
|
-
When your project is reproducible,
|
|
44
|
-
you'll be able to iterate more quickly and more often,
|
|
45
|
-
easily onboard collaborators,
|
|
46
|
-
make fewer mistakes,
|
|
47
|
-
and feel confident sharing all of your project materials
|
|
48
|
-
with your research articles,
|
|
49
|
-
because you'll know the code will actually run!
|
|
50
|
-
This will allow others to reuse parts of your project in their own research,
|
|
51
|
-
accelerating the pace of discovery.
|
|
52
|
-
|
|
53
|
-
Working at this level of automation, discipline, and rigor may sound like
|
|
54
|
-
a lot of effort,
|
|
55
|
-
but Calkit makes it easy!
|
|
20
|
+
Calkit's mission is to make every scientific study reproducible.
|
|
21
|
+
That is,
|
|
22
|
+
it should be possible to go from raw data to research article
|
|
23
|
+
by "pressing a single button"
|
|
24
|
+
([Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)).
|
|
25
|
+
|
|
26
|
+
Calkit makes this level of automation possible without extensive software
|
|
27
|
+
engineering expertise by providing a project framework and toolset that unifies
|
|
28
|
+
and simplifies the use of enabling technologies like Git,
|
|
29
|
+
DVC, Conda, Docker, and more,
|
|
30
|
+
while guiding users away from common reproducibility pitfalls.
|
|
56
31
|
|
|
57
32
|
## Features
|
|
58
33
|
|
|
59
34
|
- A declarative pipeline that forces users to define an environment
|
|
60
|
-
for every stage, so
|
|
35
|
+
for every stage, so long lists of instructions in a README and
|
|
36
|
+
"but it works on my machine" are things of the past.
|
|
61
37
|
- A CLI to run the project's pipeline to verify it's reproducible,
|
|
62
38
|
regenerating outputs as needed and
|
|
63
39
|
ensuring all
|
|
@@ -69,7 +45,7 @@ but Calkit makes it easy!
|
|
|
69
45
|
- A command line interface (CLI) to simplify keeping code, text, and larger
|
|
70
46
|
data files backed up in the same project repo using both
|
|
71
47
|
[Git](https://git-scm.com/) and [DVC](https://dvc.org/).
|
|
72
|
-
- A complementary
|
|
48
|
+
- A complementary self-hostable and GitHub-integrated
|
|
73
49
|
[cloud system](https://github.com/calkit/calkit-cloud)
|
|
74
50
|
to facilitate backup, collaboration,
|
|
75
51
|
and sharing throughout the entire research lifecycle.
|
|
@@ -55,7 +55,7 @@ def check_environment(
|
|
|
55
55
|
verbose: Annotated[
|
|
56
56
|
bool, typer.Option("--verbose", help="Print verbose output.")
|
|
57
57
|
] = False,
|
|
58
|
-
):
|
|
58
|
+
) -> str | None:
|
|
59
59
|
"""Check that an environment is up-to-date."""
|
|
60
60
|
dotenv.load_dotenv(dotenv_path=".env", verbose=verbose)
|
|
61
61
|
ck_info = calkit.load_calkit_info(process_includes="environments")
|
|
@@ -136,6 +136,7 @@ def check_environment(
|
|
|
136
136
|
)
|
|
137
137
|
else:
|
|
138
138
|
raise_error(f"Environment kind '{env['kind']}' not supported")
|
|
139
|
+
return get_env_lock_fpath(env=env, env_name=env_name, as_posix=False)
|
|
139
140
|
|
|
140
141
|
|
|
141
142
|
@check_app.command(name="docker-env")
|
|
@@ -192,11 +193,11 @@ def check_docker_env(
|
|
|
192
193
|
# content in the image
|
|
193
194
|
keys = [
|
|
194
195
|
"RepoTags",
|
|
196
|
+
"RepoDigests",
|
|
195
197
|
"Architecture",
|
|
196
198
|
"Os",
|
|
197
199
|
"Size",
|
|
198
200
|
"RootFS",
|
|
199
|
-
"Descriptor",
|
|
200
201
|
]
|
|
201
202
|
resp = {}
|
|
202
203
|
for key in keys:
|
|
@@ -21,6 +21,7 @@ from typing_extensions import Annotated
|
|
|
21
21
|
|
|
22
22
|
import calkit
|
|
23
23
|
from calkit.cli import raise_error, warn
|
|
24
|
+
from calkit.cli.check import check_environment
|
|
24
25
|
from calkit.cli.update import update_devcontainer
|
|
25
26
|
from calkit.core import ryaml
|
|
26
27
|
from calkit.docker import LAYERS
|
|
@@ -593,6 +594,13 @@ def new_docker_env(
|
|
|
593
594
|
no_commit: Annotated[
|
|
594
595
|
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
595
596
|
] = False,
|
|
597
|
+
no_check: Annotated[
|
|
598
|
+
bool,
|
|
599
|
+
typer.Option(
|
|
600
|
+
"--no-check",
|
|
601
|
+
help="Do not check environment is up-to-date after creation.",
|
|
602
|
+
),
|
|
603
|
+
] = False,
|
|
596
604
|
):
|
|
597
605
|
"""Create a new Docker environment."""
|
|
598
606
|
if base is not None and path is None:
|
|
@@ -648,6 +656,10 @@ def new_docker_env(
|
|
|
648
656
|
with open("calkit.yaml", "w") as f:
|
|
649
657
|
ryaml.dump(ck_info, f)
|
|
650
658
|
repo.git.add("calkit.yaml")
|
|
659
|
+
if not no_check:
|
|
660
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
661
|
+
if env_lock_fpath is not None:
|
|
662
|
+
repo.git.add(env_lock_fpath)
|
|
651
663
|
if not no_commit and repo.git.diff("--staged"):
|
|
652
664
|
repo.git.commit(["-m", f"Add Docker environment {name}"])
|
|
653
665
|
|
|
@@ -1033,6 +1045,13 @@ def new_conda_env(
|
|
|
1033
1045
|
no_commit: Annotated[
|
|
1034
1046
|
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
1035
1047
|
] = False,
|
|
1048
|
+
no_check: Annotated[
|
|
1049
|
+
bool,
|
|
1050
|
+
typer.Option(
|
|
1051
|
+
"--no-check",
|
|
1052
|
+
help="Do not check environment is up-to-date after creation.",
|
|
1053
|
+
),
|
|
1054
|
+
] = False,
|
|
1036
1055
|
):
|
|
1037
1056
|
"""Create a new Conda environment."""
|
|
1038
1057
|
if os.path.isfile(path) and not overwrite:
|
|
@@ -1081,6 +1100,10 @@ def new_conda_env(
|
|
|
1081
1100
|
with open("calkit.yaml", "w") as f:
|
|
1082
1101
|
ryaml.dump(ck_info, f)
|
|
1083
1102
|
repo.git.add("calkit.yaml")
|
|
1103
|
+
if not no_check:
|
|
1104
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1105
|
+
if env_lock_fpath is not None:
|
|
1106
|
+
repo.git.add(env_lock_fpath)
|
|
1084
1107
|
if not no_commit and repo.git.diff("--staged"):
|
|
1085
1108
|
repo.git.commit(["-m", f"Add Conda environment {name}"])
|
|
1086
1109
|
|
|
@@ -1117,6 +1140,13 @@ def new_uv_venv(
|
|
|
1117
1140
|
no_commit: Annotated[
|
|
1118
1141
|
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
1119
1142
|
] = False,
|
|
1143
|
+
no_check: Annotated[
|
|
1144
|
+
bool,
|
|
1145
|
+
typer.Option(
|
|
1146
|
+
"--no-check",
|
|
1147
|
+
help="Do not check environment is up-to-date after creation.",
|
|
1148
|
+
),
|
|
1149
|
+
] = False,
|
|
1120
1150
|
):
|
|
1121
1151
|
"""Create a new uv virtual environment."""
|
|
1122
1152
|
if os.path.isfile(path) and not overwrite:
|
|
@@ -1158,6 +1188,10 @@ def new_uv_venv(
|
|
|
1158
1188
|
with open("calkit.yaml", "w") as f:
|
|
1159
1189
|
ryaml.dump(ck_info, f)
|
|
1160
1190
|
repo.git.add("calkit.yaml")
|
|
1191
|
+
if not no_check:
|
|
1192
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1193
|
+
if env_lock_fpath is not None:
|
|
1194
|
+
repo.git.add(env_lock_fpath)
|
|
1161
1195
|
if not no_commit and repo.git.diff("--staged"):
|
|
1162
1196
|
repo.git.commit(["-m", f"Add uv venv {name}"])
|
|
1163
1197
|
|
|
@@ -1191,6 +1225,13 @@ def new_venv(
|
|
|
1191
1225
|
no_commit: Annotated[
|
|
1192
1226
|
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
1193
1227
|
] = False,
|
|
1228
|
+
no_check: Annotated[
|
|
1229
|
+
bool,
|
|
1230
|
+
typer.Option(
|
|
1231
|
+
"--no-check",
|
|
1232
|
+
help="Do not check environment is up-to-date after creation.",
|
|
1233
|
+
),
|
|
1234
|
+
] = False,
|
|
1194
1235
|
):
|
|
1195
1236
|
"""Create a new Python virtual environment with venv."""
|
|
1196
1237
|
if os.path.isfile(path) and not overwrite:
|
|
@@ -1230,6 +1271,10 @@ def new_venv(
|
|
|
1230
1271
|
with open("calkit.yaml", "w") as f:
|
|
1231
1272
|
ryaml.dump(ck_info, f)
|
|
1232
1273
|
repo.git.add("calkit.yaml")
|
|
1274
|
+
if not no_check:
|
|
1275
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1276
|
+
if env_lock_fpath is not None:
|
|
1277
|
+
repo.git.add(env_lock_fpath)
|
|
1233
1278
|
if not no_commit and repo.git.diff("--staged"):
|
|
1234
1279
|
repo.git.commit(["-m", f"Add venv {name}"])
|
|
1235
1280
|
|
|
@@ -1263,6 +1308,13 @@ def new_pixi_env(
|
|
|
1263
1308
|
no_commit: Annotated[
|
|
1264
1309
|
bool, typer.Option("--no-commit", help="Do not commit changes.")
|
|
1265
1310
|
] = False,
|
|
1311
|
+
no_check: Annotated[
|
|
1312
|
+
bool,
|
|
1313
|
+
typer.Option(
|
|
1314
|
+
"--no-check",
|
|
1315
|
+
help="Do not check environment is up-to-date after creation.",
|
|
1316
|
+
),
|
|
1317
|
+
] = False,
|
|
1266
1318
|
):
|
|
1267
1319
|
"""Create a new pixi virtual environment."""
|
|
1268
1320
|
repo = git.Repo()
|
|
@@ -1321,6 +1373,10 @@ def new_pixi_env(
|
|
|
1321
1373
|
ryaml.dump(ck_info, f)
|
|
1322
1374
|
repo.git.add("pixi.toml")
|
|
1323
1375
|
repo.git.add("calkit.yaml")
|
|
1376
|
+
if not no_check:
|
|
1377
|
+
env_lock_fpath = check_environment(env_name=name)
|
|
1378
|
+
if env_lock_fpath is not None:
|
|
1379
|
+
repo.git.add(env_lock_fpath)
|
|
1324
1380
|
if not no_commit and repo.git.diff("--staged"):
|
|
1325
1381
|
repo.git.commit(["-m", f"Add pixi env {name}"])
|
|
1326
1382
|
|
|
@@ -272,6 +272,7 @@ def test_new_stage(tmp_dir):
|
|
|
272
272
|
"tex",
|
|
273
273
|
"--image",
|
|
274
274
|
"texlive/texlive:latest-full",
|
|
275
|
+
"--no-check",
|
|
275
276
|
]
|
|
276
277
|
)
|
|
277
278
|
subprocess.check_call(
|
|
@@ -450,6 +451,7 @@ def test_new_python_script_stage(tmp_dir):
|
|
|
450
451
|
"--python",
|
|
451
452
|
"3.13",
|
|
452
453
|
"requests",
|
|
454
|
+
"--no-check",
|
|
453
455
|
]
|
|
454
456
|
)
|
|
455
457
|
subprocess.check_call(
|
|
@@ -524,6 +526,7 @@ def test_new_latex_stage(tmp_dir):
|
|
|
524
526
|
"tex",
|
|
525
527
|
"--image",
|
|
526
528
|
"texlive/texlive:latest-full",
|
|
529
|
+
"--no-check",
|
|
527
530
|
]
|
|
528
531
|
)
|
|
529
532
|
subprocess.check_call(
|
|
@@ -567,6 +570,7 @@ def test_new_matlab_script_stage(tmp_dir):
|
|
|
567
570
|
"matlab1",
|
|
568
571
|
"--image",
|
|
569
572
|
"mathworks/matlab:latest",
|
|
573
|
+
"--no-check",
|
|
570
574
|
]
|
|
571
575
|
)
|
|
572
576
|
subprocess.check_call(
|
|
@@ -50,6 +50,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
50
50
|
"conda-env",
|
|
51
51
|
"-n",
|
|
52
52
|
ENV_NAME,
|
|
53
|
+
"--no-check",
|
|
53
54
|
"python",
|
|
54
55
|
"pip",
|
|
55
56
|
"--pip",
|
|
@@ -71,6 +72,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
71
72
|
"--overwrite",
|
|
72
73
|
"-n",
|
|
73
74
|
ENV_NAME,
|
|
75
|
+
"--no-check",
|
|
74
76
|
"python=3.11.0",
|
|
75
77
|
"pip",
|
|
76
78
|
"--pip",
|
|
@@ -94,6 +96,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
94
96
|
"--overwrite",
|
|
95
97
|
"-n",
|
|
96
98
|
ENV_NAME,
|
|
99
|
+
"--no-check",
|
|
97
100
|
"python=3.11.0",
|
|
98
101
|
"pip",
|
|
99
102
|
"sqlalchemy",
|
|
@@ -121,6 +124,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
121
124
|
"--overwrite",
|
|
122
125
|
"-n",
|
|
123
126
|
ENV_NAME,
|
|
127
|
+
"--no-check",
|
|
124
128
|
"python=3.11.0",
|
|
125
129
|
"pip",
|
|
126
130
|
"sqlalchemy",
|
|
@@ -136,6 +140,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
136
140
|
"--overwrite",
|
|
137
141
|
"-n",
|
|
138
142
|
ENV_NAME,
|
|
143
|
+
"--no-check",
|
|
139
144
|
"python=3.11.0",
|
|
140
145
|
"pip",
|
|
141
146
|
"--pip",
|
|
@@ -153,6 +158,7 @@ def test_check_env(tmp_dir, conda_env_name):
|
|
|
153
158
|
"--overwrite",
|
|
154
159
|
"-n",
|
|
155
160
|
ENV_NAME,
|
|
161
|
+
"--no-check",
|
|
156
162
|
"python=3.12",
|
|
157
163
|
"--pip",
|
|
158
164
|
"numpy>=1",
|
|
@@ -185,6 +191,7 @@ def test_check_prefix_env(tmp_dir, conda_env_prefix):
|
|
|
185
191
|
"python=3.12",
|
|
186
192
|
"--prefix",
|
|
187
193
|
conda_env_prefix,
|
|
194
|
+
"--no-check",
|
|
188
195
|
]
|
|
189
196
|
)
|
|
190
197
|
res = check_env()
|
|
@@ -1,27 +1,16 @@
|
|
|
1
1
|
# Home
|
|
2
2
|
|
|
3
|
-
Calkit is
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
(like "pressing a single button" in
|
|
15
|
-
[Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)),
|
|
16
|
-
which should finish in less than 15 minutes
|
|
17
|
-
(suggested by
|
|
18
|
-
[Vandewalle et al. (2009)](https://doi.org/10.1109/MSP.2009.932122)).
|
|
19
|
-
|
|
20
|
-
If the processes are too expensive to rerun in under 15 minutes,
|
|
21
|
-
it should be possible to confirm that none of the input data
|
|
22
|
-
or process definitions (e.g., environment specifications, scripts)
|
|
23
|
-
have changed since saving the current versions of each output artifact
|
|
24
|
-
(figure, table, dataset, publication, etc.)
|
|
3
|
+
Calkit's mission is to make every scientific study reproducible.
|
|
4
|
+
That is,
|
|
5
|
+
it should be possible to go from raw data to research article
|
|
6
|
+
by "pressing a single button"
|
|
7
|
+
([Claerbout and Karrenbach (1992)](https://doi.org/10.1190/1.1822162)).
|
|
8
|
+
|
|
9
|
+
Calkit makes this level of automation possible without extensive software
|
|
10
|
+
engineering expertise by providing a project framework and toolset that unifies
|
|
11
|
+
and simplifies the use of enabling technologies like Git,
|
|
12
|
+
DVC, Conda, Docker, and more,
|
|
13
|
+
while guiding users away from common reproducibility pitfalls.
|
|
25
14
|
|
|
26
15
|
When your project is reproducible,
|
|
27
16
|
you'll be able to iterate more quickly and more often,
|
|
@@ -33,14 +22,11 @@ because you'll know the code will actually run!
|
|
|
33
22
|
This will allow others to reuse parts of your project in their own research,
|
|
34
23
|
accelerating the pace of discovery.
|
|
35
24
|
|
|
36
|
-
Working at this level of automation, discipline, and rigor may sound like
|
|
37
|
-
a lot of effort,
|
|
38
|
-
but Calkit makes it easy!
|
|
39
|
-
|
|
40
25
|
## Features
|
|
41
26
|
|
|
42
27
|
- A declarative pipeline that forces users to define an environment
|
|
43
|
-
for every stage, so
|
|
28
|
+
for every stage, so long lists of instructions in a README and
|
|
29
|
+
"but it works on my machine" are things of the past.
|
|
44
30
|
- A CLI to run the project's pipeline to verify it's reproducible,
|
|
45
31
|
regenerating outputs as needed and
|
|
46
32
|
ensuring all
|
|
@@ -52,7 +38,7 @@ but Calkit makes it easy!
|
|
|
52
38
|
- A command line interface (CLI) to simplify keeping code, text, and larger
|
|
53
39
|
data files backed up in the same project repo using both
|
|
54
40
|
[Git](https://git-scm.com/) and [DVC](https://dvc.org/).
|
|
55
|
-
- A complementary
|
|
41
|
+
- A complementary self-hostable and GitHub-integrated
|
|
56
42
|
[cloud system](https://github.com/calkit/calkit-cloud)
|
|
57
43
|
to facilitate backup, collaboration,
|
|
58
44
|
and sharing throughout the entire research lifecycle.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/editor-split.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-project.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-pub-2.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/new-token.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/paper.tex.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/latex-codespaces/project-home-3.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/insert-link-to-file.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/pipeline-out-of-date.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/status-more-rows.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/uncommitted-changes.png
RENAMED
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/updated-publication.png
RENAMED
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/office/word-to-pdf-stage-2.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/create-project.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calkit_python-0.24.6 → calkit_python-0.24.8}/docs/tutorials/img/openfoam/figure-on-website.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|