nomad-ml-workflows 0.0.6__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 (43) hide show
  1. nomad_ml_workflows-0.0.6/.devcontainer/devcontainer.json +25 -0
  2. nomad_ml_workflows-0.0.6/.github/dependabot.yml +12 -0
  3. nomad_ml_workflows-0.0.6/.github/workflows/actions.yml +43 -0
  4. nomad_ml_workflows-0.0.6/.github/workflows/mkdocs-deploy.yml +34 -0
  5. nomad_ml_workflows-0.0.6/.github/workflows/publish-pypi.yml +39 -0
  6. nomad_ml_workflows-0.0.6/.gitignore +130 -0
  7. nomad_ml_workflows-0.0.6/.vscode/settings.json +21 -0
  8. nomad_ml_workflows-0.0.6/LICENSE +22 -0
  9. nomad_ml_workflows-0.0.6/MANIFEST.in +0 -0
  10. nomad_ml_workflows-0.0.6/PKG-INFO +197 -0
  11. nomad_ml_workflows-0.0.6/README.md +139 -0
  12. nomad_ml_workflows-0.0.6/docs/assets/.gitignore +1 -0
  13. nomad_ml_workflows-0.0.6/docs/assets/favicon.png +0 -0
  14. nomad_ml_workflows-0.0.6/docs/assets/nomad-plugin-logo.png +0 -0
  15. nomad_ml_workflows-0.0.6/docs/explanation/explanation.md +4 -0
  16. nomad_ml_workflows-0.0.6/docs/how_to/contribute_to_the_documentation.md +4 -0
  17. nomad_ml_workflows-0.0.6/docs/how_to/contribute_to_this_plugin.md +5 -0
  18. nomad_ml_workflows-0.0.6/docs/how_to/install_this_plugin.md +4 -0
  19. nomad_ml_workflows-0.0.6/docs/how_to/use_this_plugin.md +10 -0
  20. nomad_ml_workflows-0.0.6/docs/index.md +48 -0
  21. nomad_ml_workflows-0.0.6/docs/reference/references.md +4 -0
  22. nomad_ml_workflows-0.0.6/docs/stylesheets/extra.css +69 -0
  23. nomad_ml_workflows-0.0.6/docs/theme/partials/header.html +86 -0
  24. nomad_ml_workflows-0.0.6/docs/tutorial/tutorial.md +4 -0
  25. nomad_ml_workflows-0.0.6/mkdocs.yml +60 -0
  26. nomad_ml_workflows-0.0.6/pyproject.toml +144 -0
  27. nomad_ml_workflows-0.0.6/setup.cfg +4 -0
  28. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/__init__.py +0 -0
  29. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/__init__.py +3 -0
  30. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/export_entries/__init__.py +53 -0
  31. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/export_entries/activities.py +209 -0
  32. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/export_entries/models.py +245 -0
  33. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/export_entries/utils.py +172 -0
  34. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows/actions/export_entries/workflows.py +169 -0
  35. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/PKG-INFO +197 -0
  36. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/SOURCES.txt +41 -0
  37. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/dependency_links.txt +1 -0
  38. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/entry_points.txt +2 -0
  39. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/requires.txt +18 -0
  40. nomad_ml_workflows-0.0.6/src/nomad_ml_workflows.egg-info/top_level.txt +1 -0
  41. nomad_ml_workflows-0.0.6/tests/actions/test_action.py +47 -0
  42. nomad_ml_workflows-0.0.6/tests/conftest.py +0 -0
  43. nomad_ml_workflows-0.0.6/tests/data/.gitkeep +0 -0
@@ -0,0 +1,25 @@
1
+ // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2
+ // README at: https://github.com/devcontainers/templates/tree/main/src/python
3
+ {
4
+ "name": "Python 3",
5
+ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6
+ "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bookworm",
7
+ // Features to add to the dev container. More info: https://containers.dev/features.
8
+ // "features": {},
9
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
10
+ // "forwardPorts": [],
11
+ // Use 'postCreateCommand' to run commands after the container is created.
12
+ "postCreateCommand": "pipx install cruft",
13
+ // Configure tool-specific properties.
14
+ "customizations": {
15
+ // Configure properties specific to VS Code.
16
+ "vscode": {
17
+ // Add the IDs of extensions you want installed when the container is created.
18
+ "extensions": [
19
+ "charliermarsh.ruff"
20
+ ]
21
+ }
22
+ }
23
+ // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
24
+ // "remoteUser": "root"
25
+ }
@@ -0,0 +1,12 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for more information:
4
+ # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+ # https://containers.dev/guide/dependabot
6
+
7
+ version: 2
8
+ updates:
9
+ - package-ecosystem: "devcontainers"
10
+ directory: "/"
11
+ schedule:
12
+ interval: weekly
@@ -0,0 +1,43 @@
1
+ name: install-and-test-workflow
2
+
3
+ on: [push]
4
+
5
+ env:
6
+ UV_VERSION: 0.9
7
+ PYTHON_VERSION: 3.12
8
+ UV_SYSTEM_PYTHON: true
9
+
10
+ jobs:
11
+ install-and-test:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v5
17
+ with:
18
+ version: ${{ env.UV_VERSION }}
19
+ - name: Setup Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: ${{ env.PYTHON_VERSION }}
23
+ - name: Install dependencies
24
+ run: |
25
+ uv sync --all-extras
26
+ - name: Test with pytest
27
+ run: |
28
+ uv run --with coverage coverage run -m pytest -sv
29
+ - name: Submit to coveralls
30
+ continue-on-error: true
31
+ env:
32
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
33
+ run: |
34
+ uv run --with coveralls coveralls --service=github
35
+
36
+ ruff-linting:
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+ - uses: astral-sh/ruff-action@v3
41
+ - run: ruff check .
42
+ # Uncomment the following line to enable format check
43
+ # - run: ruff format --check .
@@ -0,0 +1,34 @@
1
+ name: Deploy MkDocs Site
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main # Triggers deployment on push to the main branch
7
+
8
+ env:
9
+ REGISTRY: ghcr.io
10
+ UV_VERSION: 0.9
11
+ PYTHON_VERSION: 3.12
12
+ UV_SYSTEM_PYTHON: true
13
+
14
+ jobs:
15
+ deploy:
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - name: Checkout Repository
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Install uv
23
+ uses: astral-sh/setup-uv@v5
24
+ with:
25
+ version: ${{ env.UV_VERSION }}
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: ${{ env.PYTHON_VERSION }}
31
+
32
+ - name: Build and Deploy
33
+ run: |
34
+ uv run --extra dev mkdocs gh-deploy --force --remote-branch gh-pages
@@ -0,0 +1,39 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Publish Python Package to PyPI
10
+
11
+ on:
12
+ release:
13
+ types: [published]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ deploy:
20
+
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v3
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v3
27
+ with:
28
+ python-version: '3.x'
29
+ - name: Install dependencies
30
+ run: |
31
+ python -m pip install --upgrade pip
32
+ pip install build
33
+ - name: Build package
34
+ run: python -m build
35
+ - name: Publish package
36
+ uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
37
+ with:
38
+ user: __token__
39
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,130 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+ .pyenv
113
+
114
+ # Spyder project settings
115
+ .spyderproject
116
+ .spyproject
117
+
118
+ # Rope project settings
119
+ .ropeproject
120
+
121
+ # mkdocs documentation
122
+ /site
123
+
124
+ # mypy
125
+ .mypy_cache/
126
+ .dmypy.json
127
+ dmypy.json
128
+
129
+ # Pyre type checker
130
+ .pyre/
@@ -0,0 +1,21 @@
1
+ {
2
+ "editor.rulers": [
3
+ 88
4
+ ],
5
+ "editor.renderWhitespace": "all",
6
+ "editor.tabSize": 4,
7
+ "files.trimTrailingWhitespace": true,
8
+ "[python]": {
9
+ "editor.formatOnSave": true,
10
+ "editor.codeActionsOnSave": {
11
+ "source.fixAll": "explicit",
12
+ "source.organizeImports": "explicit"
13
+ },
14
+ "editor.defaultFormatter": "charliermarsh.ruff"
15
+ },
16
+ "python.testing.pytestArgs": [
17
+ "tests"
18
+ ],
19
+ "python.testing.unittestEnabled": false,
20
+ "python.testing.pytestEnabled": true
21
+ }
@@ -0,0 +1,22 @@
1
+
2
+ The MIT License (MIT)
3
+
4
+ Copyright (c) 2025 Sarthak Kapoor
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
File without changes
@@ -0,0 +1,197 @@
1
+ Metadata-Version: 2.4
2
+ Name: nomad-ml-workflows
3
+ Version: 0.0.6
4
+ Summary: A NOMAD plugin for managing ML workflows.
5
+ Author-email: Sarthak Kapoor <sarthak.kapoor@physik.hu-berlin.de>
6
+ Maintainer-email: Sarthak Kapoor <sarthak.kapoor@physik.hu-berlin.de>
7
+ License:
8
+ The MIT License (MIT)
9
+
10
+ Copyright (c) 2025 Sarthak Kapoor
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in
20
+ all copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
+ THE SOFTWARE.
29
+
30
+ Project-URL: Repository, https://github.com/FAIRmat-NFDI/nomad-ml-workflows
31
+ Classifier: Intended Audience :: Developers
32
+ Classifier: Operating System :: OS Independent
33
+ Classifier: Programming Language :: Python
34
+ Classifier: Programming Language :: Python :: 3.10
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: License :: OSI Approved :: MIT License
38
+ Requires-Python: >=3.10
39
+ Description-Content-Type: text/markdown
40
+ License-File: LICENSE
41
+ Requires-Dist: nomad-lab>=1.4.0
42
+ Requires-Dist: json-stream
43
+ Requires-Dist: pydantic
44
+ Requires-Dist: temporalio
45
+ Provides-Extra: dev
46
+ Requires-Dist: nomad-lab[infrastructure]>=1.4.0; extra == "dev"
47
+ Requires-Dist: ruff; extra == "dev"
48
+ Requires-Dist: pytest; extra == "dev"
49
+ Requires-Dist: structlog; extra == "dev"
50
+ Requires-Dist: mkdocs; extra == "dev"
51
+ Requires-Dist: mkdocs-material>=8.1.1; extra == "dev"
52
+ Requires-Dist: pymdown-extensions; extra == "dev"
53
+ Requires-Dist: mkdocs-click; extra == "dev"
54
+ Requires-Dist: pytest-asyncio; extra == "dev"
55
+ Provides-Extra: cpu-action
56
+ Requires-Dist: pyarrow; extra == "cpu-action"
57
+ Dynamic: license-file
58
+
59
+ # nomad-ml-workflows
60
+
61
+ A NOMAD plugin for managing ML workflows. Currently, it provides an action to export large number of entries from NOMAD database as tabular data files. Other ML workflow related actions and schemas will be added in future.
62
+
63
+ ## 📦 Installation
64
+ You can install the plugin using pip:
65
+ ```sh
66
+ pip install nomad-ml-workflows @ git+https://github.com/FAIRmat-NFDI/nomad-ml-workflows.git
67
+ ```
68
+
69
+ However, to fully utilize the plugin, you need to add it to your NOMAD instance as described [below](#-adding-this-plugin-to-nomad).
70
+
71
+ ## ✨ Features
72
+
73
+ - Export a large number of NOMAD entries as tabular data files (CSV, Parquet) using NOMAD Actions. Once the action is triggered, it will:
74
+ - Search entries based on user-defined criteria.
75
+ - Optionally include or exclude data fields from the entries.
76
+ - Package the entries into tabular data files like CSV or Parquet (or as JSON)
77
+ - Export the files to a specified Project (or previously known as Upload) in NOAMD.
78
+
79
+ These can then be downloaded from the NOMAD web interface for local use.
80
+
81
+ ## ⚙️ Configuration
82
+ The Export Entries action can be configured using the following parameters in
83
+ the `nomad.yaml` configuration file of your NOMAD Oasis instance:
84
+
85
+ ```yaml
86
+ plugins:
87
+ entry_points:
88
+ options:
89
+ nomad_ml_workflows.actions:export_entries:
90
+ search_batch_timeout: 7200
91
+ # Timeout (in seconds) for each search batch in the Export Entries
92
+ # action. Set this accordingly to time out longer searches.
93
+ max_entries_export_limit: 100000
94
+ # Maximum number of entries that can be exported in a single
95
+ # Export Entries action.
96
+ ```
97
+
98
+
99
+ ## 🚀 Adding this plugin to NOMAD
100
+
101
+ Currently, NOMAD has two distinct flavors that are relevant depending on your role as an user:
102
+ 1. [A NOMAD Oasis](#adding-this-plugin-in-your-nomad-oasis): any user with a NOMAD Oasis instance.
103
+ 2. [Local NOMAD installation and the source code of NOMAD](#adding-this-plugin-in-your-local-nomad-installation-and-the-source-code-of-nomad): internal developers.
104
+
105
+ ### Adding this plugin in your NOMAD Oasis
106
+
107
+ Read the [NOMAD plugin documentation](https://nomad-lab.eu/prod/v1/staging/docs/howto/oasis/plugins_install.html) for all details on how to deploy the plugin on your NOMAD instance.
108
+
109
+ ### Adding this plugin in your local NOMAD installation and the source code of NOMAD
110
+
111
+ We now recommend using the dedicated [`nomad-distro-dev`](https://github.com/FAIRmat-NFDI/nomad-distro-dev) repository to simplify the process. Please refer to that repository for detailed instructions.
112
+
113
+
114
+ ## 🛠️ Development
115
+
116
+ If you want to develop locally this plugin, clone the project and in the plugin folder, create a virtual environment (you can use Python 3.10, 3.11 or 3.12):
117
+ ```sh
118
+ git clone https://github.com/FAIRmat-NFDI/nomad-ml-workflows.git
119
+ cd nomad-ml-workflows
120
+ python3.11 -m venv .pyenv
121
+ . .pyenv/bin/activate
122
+ ```
123
+
124
+ Make sure to have `pip` upgraded:
125
+ ```sh
126
+ pip install --upgrade pip
127
+ ```
128
+
129
+ We recommend installing `uv` for fast pip installation of the packages:
130
+ ```sh
131
+ pip install uv
132
+ ```
133
+
134
+ Install the `nomad-lab` package:
135
+ ```sh
136
+ uv pip install -e '.[dev]'
137
+ ```
138
+
139
+ ### Run linting and auto-formatting
140
+
141
+ We use [Ruff](https://docs.astral.sh/ruff/) for linting and formatting the code. Ruff auto-formatting is also a part of the GitHub workflow actions. You can run locally:
142
+ ```sh
143
+ ruff check .
144
+ ruff format . --check
145
+ ```
146
+
147
+ ### Debugging
148
+
149
+ For interactive debugging of the tests, use `pytest` with the `--pdb` flag. We recommend using an IDE for debugging, e.g., _VSCode_. If that is the case, add the following snippet to your `.vscode/launch.json`:
150
+ ```json
151
+ {
152
+ "configurations": [
153
+ {
154
+ "name": "<descriptive tag>",
155
+ "type": "debugpy",
156
+ "request": "launch",
157
+ "cwd": "${workspaceFolder}",
158
+ "program": "${workspaceFolder}/.pyenv/bin/pytest",
159
+ "justMyCode": true,
160
+ "env": {
161
+ "_PYTEST_RAISE": "1"
162
+ },
163
+ "args": [
164
+ "-sv",
165
+ "--pdb",
166
+ "<path-to-plugin-tests>",
167
+ ]
168
+ }
169
+ ]
170
+ }
171
+ ```
172
+
173
+ where `<path-to-plugin-tests>` must be changed to the local path to the test module to be debugged.
174
+
175
+ The settings configuration file `.vscode/settings.json` automatically applies the linting and formatting upon saving the modified file.
176
+
177
+ ### Documentation on Github pages
178
+
179
+ To view the documentation locally, install the related packages using:
180
+ ```sh
181
+ uv pip install -r requirements_docs.txt
182
+ ```
183
+
184
+ Run the documentation server:
185
+ ```sh
186
+ mkdocs serve
187
+ ```
188
+
189
+
190
+ ## 👥 Main contributors
191
+ | Name | E-mail |
192
+ |------|------------|
193
+ | Sarthak Kapoor | [sarthak.kapoor@physik.hu-berlin.de](mailto:sarthak.kapoor@physik.hu-berlin.de)
194
+
195
+
196
+ ## 📄 License
197
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1,139 @@
1
+ # nomad-ml-workflows
2
+
3
+ A NOMAD plugin for managing ML workflows. Currently, it provides an action to export large number of entries from NOMAD database as tabular data files. Other ML workflow related actions and schemas will be added in future.
4
+
5
+ ## 📦 Installation
6
+ You can install the plugin using pip:
7
+ ```sh
8
+ pip install nomad-ml-workflows @ git+https://github.com/FAIRmat-NFDI/nomad-ml-workflows.git
9
+ ```
10
+
11
+ However, to fully utilize the plugin, you need to add it to your NOMAD instance as described [below](#-adding-this-plugin-to-nomad).
12
+
13
+ ## ✨ Features
14
+
15
+ - Export a large number of NOMAD entries as tabular data files (CSV, Parquet) using NOMAD Actions. Once the action is triggered, it will:
16
+ - Search entries based on user-defined criteria.
17
+ - Optionally include or exclude data fields from the entries.
18
+ - Package the entries into tabular data files like CSV or Parquet (or as JSON)
19
+ - Export the files to a specified Project (or previously known as Upload) in NOAMD.
20
+
21
+ These can then be downloaded from the NOMAD web interface for local use.
22
+
23
+ ## ⚙️ Configuration
24
+ The Export Entries action can be configured using the following parameters in
25
+ the `nomad.yaml` configuration file of your NOMAD Oasis instance:
26
+
27
+ ```yaml
28
+ plugins:
29
+ entry_points:
30
+ options:
31
+ nomad_ml_workflows.actions:export_entries:
32
+ search_batch_timeout: 7200
33
+ # Timeout (in seconds) for each search batch in the Export Entries
34
+ # action. Set this accordingly to time out longer searches.
35
+ max_entries_export_limit: 100000
36
+ # Maximum number of entries that can be exported in a single
37
+ # Export Entries action.
38
+ ```
39
+
40
+
41
+ ## 🚀 Adding this plugin to NOMAD
42
+
43
+ Currently, NOMAD has two distinct flavors that are relevant depending on your role as an user:
44
+ 1. [A NOMAD Oasis](#adding-this-plugin-in-your-nomad-oasis): any user with a NOMAD Oasis instance.
45
+ 2. [Local NOMAD installation and the source code of NOMAD](#adding-this-plugin-in-your-local-nomad-installation-and-the-source-code-of-nomad): internal developers.
46
+
47
+ ### Adding this plugin in your NOMAD Oasis
48
+
49
+ Read the [NOMAD plugin documentation](https://nomad-lab.eu/prod/v1/staging/docs/howto/oasis/plugins_install.html) for all details on how to deploy the plugin on your NOMAD instance.
50
+
51
+ ### Adding this plugin in your local NOMAD installation and the source code of NOMAD
52
+
53
+ We now recommend using the dedicated [`nomad-distro-dev`](https://github.com/FAIRmat-NFDI/nomad-distro-dev) repository to simplify the process. Please refer to that repository for detailed instructions.
54
+
55
+
56
+ ## 🛠️ Development
57
+
58
+ If you want to develop locally this plugin, clone the project and in the plugin folder, create a virtual environment (you can use Python 3.10, 3.11 or 3.12):
59
+ ```sh
60
+ git clone https://github.com/FAIRmat-NFDI/nomad-ml-workflows.git
61
+ cd nomad-ml-workflows
62
+ python3.11 -m venv .pyenv
63
+ . .pyenv/bin/activate
64
+ ```
65
+
66
+ Make sure to have `pip` upgraded:
67
+ ```sh
68
+ pip install --upgrade pip
69
+ ```
70
+
71
+ We recommend installing `uv` for fast pip installation of the packages:
72
+ ```sh
73
+ pip install uv
74
+ ```
75
+
76
+ Install the `nomad-lab` package:
77
+ ```sh
78
+ uv pip install -e '.[dev]'
79
+ ```
80
+
81
+ ### Run linting and auto-formatting
82
+
83
+ We use [Ruff](https://docs.astral.sh/ruff/) for linting and formatting the code. Ruff auto-formatting is also a part of the GitHub workflow actions. You can run locally:
84
+ ```sh
85
+ ruff check .
86
+ ruff format . --check
87
+ ```
88
+
89
+ ### Debugging
90
+
91
+ For interactive debugging of the tests, use `pytest` with the `--pdb` flag. We recommend using an IDE for debugging, e.g., _VSCode_. If that is the case, add the following snippet to your `.vscode/launch.json`:
92
+ ```json
93
+ {
94
+ "configurations": [
95
+ {
96
+ "name": "<descriptive tag>",
97
+ "type": "debugpy",
98
+ "request": "launch",
99
+ "cwd": "${workspaceFolder}",
100
+ "program": "${workspaceFolder}/.pyenv/bin/pytest",
101
+ "justMyCode": true,
102
+ "env": {
103
+ "_PYTEST_RAISE": "1"
104
+ },
105
+ "args": [
106
+ "-sv",
107
+ "--pdb",
108
+ "<path-to-plugin-tests>",
109
+ ]
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ where `<path-to-plugin-tests>` must be changed to the local path to the test module to be debugged.
116
+
117
+ The settings configuration file `.vscode/settings.json` automatically applies the linting and formatting upon saving the modified file.
118
+
119
+ ### Documentation on Github pages
120
+
121
+ To view the documentation locally, install the related packages using:
122
+ ```sh
123
+ uv pip install -r requirements_docs.txt
124
+ ```
125
+
126
+ Run the documentation server:
127
+ ```sh
128
+ mkdocs serve
129
+ ```
130
+
131
+
132
+ ## 👥 Main contributors
133
+ | Name | E-mail |
134
+ |------|------------|
135
+ | Sarthak Kapoor | [sarthak.kapoor@physik.hu-berlin.de](mailto:sarthak.kapoor@physik.hu-berlin.de)
136
+
137
+
138
+ ## 📄 License
139
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
@@ -0,0 +1 @@
1
+ nomad-oasis*.zip
@@ -0,0 +1,4 @@
1
+ # Explanation
2
+
3
+ !!! note "Attention"
4
+ TODO
@@ -0,0 +1,4 @@
1
+ # Contribute to the documentation
2
+
3
+ !!! note "Attention"
4
+ TODO