esgf-qa 0.3.0__tar.gz → 0.4.0__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.
- esgf_qa-0.4.0/.pre-commit-config.yaml +57 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/HISTORY.rst +19 -0
- esgf_qa-0.4.0/MANIFEST.in +21 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/PKG-INFO +42 -28
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/README.md +41 -28
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/_constants.py +42 -1
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/_version.py +3 -3
- esgf_qa-0.4.0/esgf_qa/cluster_results.py +466 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/con_checks.py +209 -11
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/run_qa.py +247 -418
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/PKG-INFO +42 -28
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/SOURCES.txt +9 -3
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/requires.txt +1 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/top_level.txt +2 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/pyproject.toml +14 -11
- esgf_qa-0.4.0/tests/test_cli.py +267 -0
- esgf_qa-0.4.0/tests/test_cluster_results.py +166 -0
- esgf_qa-0.4.0/tests/test_con_checks.py +263 -0
- esgf_qa-0.4.0/tests/test_qaviewer.py +147 -0
- esgf_qa-0.4.0/tests/test_run_dummy_qa.py +191 -0
- esgf_qa-0.4.0/tests/test_run_qa.py +181 -0
- esgf_qa-0.3.0/.gitignore +0 -13
- esgf_qa-0.3.0/MANIFEST.in +0 -7
- esgf_qa-0.3.0/docs/esgf-qa_Logo.png +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/LICENSE +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/display_qc_results.html +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/__init__.py +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa/qaviewer.py +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/dependency_links.txt +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/esgf_qa.egg-info/entry_points.txt +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/fonts/Inter-Regular.woff2 +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/fonts/Inter-SemiBold.woff2 +0 -0
- {esgf_qa-0.3.0 → esgf_qa-0.4.0}/setup.cfg +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
default_language_version:
|
|
2
|
+
python: python3
|
|
3
|
+
|
|
4
|
+
repos:
|
|
5
|
+
- repo: https://github.com/asottile/pyupgrade
|
|
6
|
+
rev: v3.21.0
|
|
7
|
+
hooks:
|
|
8
|
+
- id: pyupgrade
|
|
9
|
+
args: [ '--py39-plus' ]
|
|
10
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
11
|
+
rev: v6.0.0
|
|
12
|
+
hooks:
|
|
13
|
+
- id: trailing-whitespace
|
|
14
|
+
- id: end-of-file-fixer
|
|
15
|
+
- id: check-toml
|
|
16
|
+
- id: check-yaml
|
|
17
|
+
- id: debug-statements
|
|
18
|
+
- id: mixed-line-ending
|
|
19
|
+
- repo: https://github.com/pappasam/toml-sort
|
|
20
|
+
rev: v0.24.3
|
|
21
|
+
hooks:
|
|
22
|
+
- id: toml-sort-fix
|
|
23
|
+
- repo: https://github.com/psf/black-pre-commit-mirror
|
|
24
|
+
rev: 25.9.0
|
|
25
|
+
hooks:
|
|
26
|
+
- id: black
|
|
27
|
+
- repo: https://github.com/PyCQA/isort
|
|
28
|
+
rev: 7.0.0
|
|
29
|
+
hooks:
|
|
30
|
+
- id: isort
|
|
31
|
+
args: ['--profile', 'black']
|
|
32
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
33
|
+
rev: v0.14.3
|
|
34
|
+
hooks:
|
|
35
|
+
- id: ruff
|
|
36
|
+
args:
|
|
37
|
+
- --fix
|
|
38
|
+
- --exit-non-zero-on-fix
|
|
39
|
+
- repo: https://github.com/python-jsonschema/check-jsonschema
|
|
40
|
+
rev: 0.34.1
|
|
41
|
+
hooks:
|
|
42
|
+
- id: check-github-workflows
|
|
43
|
+
- repo: meta
|
|
44
|
+
hooks:
|
|
45
|
+
- id: check-hooks-apply
|
|
46
|
+
- id: check-useless-excludes
|
|
47
|
+
|
|
48
|
+
ci:
|
|
49
|
+
autofix_commit_msg: |
|
|
50
|
+
[pre-commit.ci] auto fixes from pre-commit.com hooks
|
|
51
|
+
for more information, see https://pre-commit.ci
|
|
52
|
+
autofix_prs: true
|
|
53
|
+
autoupdate_branch: ''
|
|
54
|
+
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
|
|
55
|
+
autoupdate_schedule: weekly
|
|
56
|
+
skip: [ ]
|
|
57
|
+
submodules: false
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
0.4.0 (2025-11-05)
|
|
2
|
+
------------------
|
|
3
|
+
|
|
4
|
+
New Features
|
|
5
|
+
^^^^^^^^^^^^
|
|
6
|
+
|
|
7
|
+
* Allowing checker options to be specified via command line for all checkers.
|
|
8
|
+
* Improved support of ``cc-plugin-wcrp``: enabled inter-file/dataset consistency & continuity checks.
|
|
9
|
+
|
|
10
|
+
Bug Fixes
|
|
11
|
+
^^^^^^^^^
|
|
12
|
+
|
|
13
|
+
* Time continuity check: No longer throwing exception on unsupported time coordinates.
|
|
14
|
+
|
|
15
|
+
Breaking Changes
|
|
16
|
+
^^^^^^^^^^^^^^^^
|
|
17
|
+
|
|
18
|
+
* No longer allowing respecification of checkers and options when resuming QA run (commit 3d2e082d40aef7c512ce828b1e4600ef81176e37).
|
|
19
|
+
|
|
1
20
|
0.3.0 (2025-10-17)
|
|
2
21
|
------------------
|
|
3
22
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
|
|
4
|
+
recursive-include tests *.py
|
|
5
|
+
recursive-include fonts *
|
|
6
|
+
|
|
7
|
+
global-exclude __pycache__ *.py[co]
|
|
8
|
+
|
|
9
|
+
# Exclude GitHub workflows and metadata
|
|
10
|
+
prune .github
|
|
11
|
+
|
|
12
|
+
# Exclude CI environment
|
|
13
|
+
prune ci
|
|
14
|
+
|
|
15
|
+
# Exclude documentation
|
|
16
|
+
prune docs
|
|
17
|
+
|
|
18
|
+
# Exclude project config files
|
|
19
|
+
exclude mkdocs.yml
|
|
20
|
+
exclude .pre-commit.yml
|
|
21
|
+
exclude .gitignore
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: esgf-qa
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: QA based on compliance-checker
|
|
5
5
|
Author-email: Martin Schupfner <schupfner@dkrz.de>
|
|
6
6
|
Maintainer-email: Martin Schupfner <schupfner@dkrz.de>
|
|
@@ -38,6 +38,7 @@ Requires-Dist: flake8-print; extra == "dev"
|
|
|
38
38
|
Requires-Dist: pre-commit; extra == "dev"
|
|
39
39
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
40
40
|
Requires-Dist: pytest-flake8; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
41
42
|
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
42
43
|
Requires-Dist: twine; extra == "dev"
|
|
43
44
|
Requires-Dist: wheel; extra == "dev"
|
|
@@ -45,34 +46,36 @@ Dynamic: license-file
|
|
|
45
46
|
|
|
46
47
|
[](https://pypi.org/project/esgf-qa/)
|
|
47
48
|
|
|
48
|
-
# esgf-qa
|
|
49
|
-
|
|
49
|
+
# esgf-qa
|
|
50
|
+
### Quality Assurance Workflow Based on `compliance-checker` and `cc-plugin-wcrp` (or other cc-plugins)
|
|
51
|
+
<img src="https://raw.githubusercontent.com/ESGF/esgf-qa/master/docs/esgf-qa_Logo.png" align="left" width="120">
|
|
50
52
|
|
|
51
|
-
`esgf-qa`
|
|
52
|
-
[ioos/compliance-checker](https://github.com/ioos/compliance-checker)
|
|
53
|
+
`esgf-qa` provides a flexible quality assurance (QA) workflow for evaluating dataset compliance using the
|
|
54
|
+
[ioos/compliance-checker](https://github.com/ioos/compliance-checker) framework
|
|
55
|
+
(including [CF](https://cfconventions.org/) compliance checks)
|
|
56
|
+
and various community plugins (`cc-plugin`s), such as
|
|
53
57
|
[ESGF/cc-plugin-wcrp](https://github.com/ESGF/cc-plugin-wcrp) and
|
|
54
58
|
[euro-cordex/cc-plugin-cc6](https://github.com/euro-cordex/cc-plugin-cc6).
|
|
55
59
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
consistency checks) as well as to summarize the test results.
|
|
60
|
+
The tool executes file-based quality control (QC) tests through the Compliance Checker,
|
|
61
|
+
and, where applicable, performs additional dataset-level checks to test inter-file time-axis continuity
|
|
62
|
+
and consistency in variable, coordinate and attribute definitions.
|
|
63
|
+
Results from both file- and dataset-level checks are aggregated, summarized, and clustered for easier interpretation.
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
### Currently supported checkers
|
|
66
|
+
|
|
67
|
+
While `esgf-qa` has been primarily developed for workflows assessing compliance with WCRP project data specifications
|
|
68
|
+
(e.g., CMIP, CORDEX), it can also be used for general CF-compliance testing and easily extended to support any
|
|
69
|
+
`cc-plugin` and projects following CORDEX- or CMIP-style CMOR table conventions.
|
|
65
70
|
|
|
66
71
|
| Standard | Checker Name |
|
|
67
72
|
| ---------------------------------------------------------------------------------------------------- | ------------ |
|
|
68
|
-
| [
|
|
69
|
-
| [
|
|
70
|
-
| [CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)
|
|
71
|
-
| [CMIP6
|
|
72
|
-
| [
|
|
73
|
-
|
|
|
74
|
-
| [EERIE CMOR Tables & CV](https://github.com/eerie-project/dreq_tools) | eerie |
|
|
75
|
-
| Custom MIP | mip |
|
|
73
|
+
| [CF Conventions](https://cfconventions.org/) (shipped with [ioos/compliance-checker](https://github.com/ioos/compliance-checker)) | cf |
|
|
74
|
+
| [WCRP CMIP6](https://pcmdi.llnl.gov/CMIP6/):<br><ul><li>[CMIP6 DRS](https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf)</li><li>[CMIP6 CVs](https://github.com/WCRP-CMIP/CMIP6_CVs) (esgvoc)</li></li><li>[cmip6-cmor-tables](https://github.com/PCMDI/cmip6-cmor-tables) (esgvoc)</li></ul> | wcrp_cmip6 |
|
|
75
|
+
| [WCRP CORDEX-CMIP6](https://cordex.org/):<br><ul><li>[CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)</li><li>[cordex-cmip6-cv](https://github.com/WCRP-CORDEX/cordex-cmip6-cv) (esgvoc)</li><li>[cordex-cmip6-cmor-tables](https://github.com/WCRP-CORDEX/cordex-cmip6-cmor-tables) (esgvoc)</li></ul> | wcrp_cordex_cmip6 |
|
|
76
|
+
| [WCRP CORDEX-CMIP6](https://cordex.org/):<br><ul><li>[CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)</li><li>[cordex-cmip6-cv](https://github.com/WCRP-CORDEX/cordex-cmip6-cv)</li><li>[cordex-cmip6-cmor-tables](https://github.com/WCRP-CORDEX/cordex-cmip6-cmor-tables)</li></ul> | cc6 |
|
|
77
|
+
| [EERIE](https://eerie-project.eu/):<br>[EERIE CMOR Tables & CV](https://github.com/eerie-project/dreq_tools) | eerie |
|
|
78
|
+
| Custom MIP (CMOR/MIP tables have to be specified) | mip |
|
|
76
79
|
|
|
77
80
|
## Installation
|
|
78
81
|
|
|
@@ -109,11 +112,16 @@ esgvoc install
|
|
|
109
112
|
|
|
110
113
|
- Test your installation
|
|
111
114
|
|
|
112
|
-
The following command should now also list the `
|
|
115
|
+
The following command should now also list the `cc-plugin-wcrp` checks next to all `cc_plugin_cc6` and `compliance_checker` checks:
|
|
113
116
|
```
|
|
114
117
|
cchecker.py -l
|
|
115
118
|
```
|
|
116
119
|
|
|
120
|
+
The following command should now list the necessary projects with metadata sources for `esgvoc`:
|
|
121
|
+
```
|
|
122
|
+
esgvoc status
|
|
123
|
+
```
|
|
124
|
+
|
|
117
125
|
## Usage
|
|
118
126
|
|
|
119
127
|
```shell
|
|
@@ -125,10 +133,10 @@ $ esgqa [-h] [-o <OUTPUT_DIR>] [-t <TEST>] [-O OPTION] [-i <INFO>] [-r] [-C] <pa
|
|
|
125
133
|
- options:
|
|
126
134
|
- `-h, --help`: show this help message and exit
|
|
127
135
|
- `-o, --output_dir OUTPUT_DIR`: Directory to store QA results. Needs to be non-existing or empty or from previous QA run. If not specified, will store results in `./cc-qa-check-results/YYYYMMDD-HHmm_<hash>`.
|
|
128
|
-
- `-t, --test TEST`: The test to run ('wcrp_cmip6:latest'
|
|
129
|
-
- `-O, --option OPTION`: Additional options to be passed to the checkers. Format: '<checker>:<option_name>[:<option_value>]'
|
|
136
|
+
- `-t, --test TEST`: The test to run (`'wcrp_cmip6:latest'`, `'wcrp_cordex_cmip6:latest'` or `'cf:<version>'`, can be specified multiple times, eg.: `'-t wcrp_cmip6:latest -t cf:1.7'`) - default: running latest CF checks `'cf:latest'`.
|
|
137
|
+
- `-O, --option OPTION`: Additional options to be passed to the checkers. Format: `'<checker>:<option_name>[:<option_value>]'`. Multiple invocations possible.
|
|
130
138
|
- `-i, --info INFO`: Information used to tag the QA results, eg. the simulation id to identify the checked run. Suggested is the original experiment-id you gave the run.
|
|
131
|
-
- `-r, --resume`: Specify to continue a previous QC run. Requires the
|
|
139
|
+
- `-r, --resume`: Specify to continue a previous QC run. Requires the `<output_dir>` argument to be set.
|
|
132
140
|
- `-C, --include_consistency_checks`: Include basic consistency and continuity checks. When using the `wcrp-*`, `cc6`, `mip` or `eerie` checkers, they are included by default.
|
|
133
141
|
|
|
134
142
|
### Example Usage
|
|
@@ -137,7 +145,7 @@ $ esgqa [-h] [-o <OUTPUT_DIR>] [-t <TEST>] [-O OPTION] [-i <INFO>] [-r] [-C] <pa
|
|
|
137
145
|
$ esgqa -t wcrp_cordex_cmip6:latest -t cf:1.11 -o QA_results/IAEVALL02_2025-10-20 -i "IAEVALL02" ESGF_Buff/IAEVALL02/CORDEX-CMIP6
|
|
138
146
|
```
|
|
139
147
|
|
|
140
|
-
To resume at a later date, eg. if the QA run did not finish in time or more files have been added to the
|
|
148
|
+
To resume at a later date, eg. if the QA run did not finish in time or more files have been added to the `<parent_dir>`
|
|
141
149
|
(note, that the last modification date of files is NOT taken into account - once a certain file path has been checked
|
|
142
150
|
it will be marked as checked and checks will only be repeated if runtime errors occured):
|
|
143
151
|
|
|
@@ -164,8 +172,13 @@ The results will be stored in two `json` files:
|
|
|
164
172
|
|
|
165
173
|
### Web view
|
|
166
174
|
The clustered results can be viewed using the following website:
|
|
167
|
-
|
|
175
|
+
|
|
176
|
+
- DKRZ: [https://cmiphub.dkrz.de/info/display_qc_results.html](https://cmiphub.dkrz.de/info/display_qc_results.html).
|
|
177
|
+
- IPSL: coming soon
|
|
178
|
+
|
|
168
179
|
This website runs entirely in the user's browser using JavaScript, without requiring interaction with a web server.
|
|
180
|
+
You can select one of the recent QA runs conducted at the respective site or select a local QA run result file to be displayed.
|
|
181
|
+
|
|
169
182
|
Alternatively, you can open the included `display_qc_results.html` file directly in your browser.
|
|
170
183
|
While the web view also supports the full (unclustered) results, it is recommended to not use the web view for files greater than a few MegaBytes.
|
|
171
184
|
|
|
@@ -188,8 +201,9 @@ in the GitLab Repository [qa-results](https://gitlab.dkrz.de/udag/qa-results). Y
|
|
|
188
201
|
|
|
189
202
|
This project is licensed under the Apache License 2.0, and includes the Inter font, which is licensed under the SIL Open Font License 1.1. See the [LICENSE](./LICENSE) file for more details.
|
|
190
203
|
|
|
204
|
+
|
|
191
205
|
> [!NOTE]
|
|
192
|
-
> **This project was originally developed by [DKRZ](https://www.dkrz.de)** under the name **cc-qa** (see [DKRZ GitLab](https://gitlab.dkrz.de/udag/cc-qa)), with funding from the
|
|
206
|
+
> **This project was originally developed by [DKRZ](https://www.dkrz.de)** under the name **cc-qa** (see [DKRZ GitLab](https://gitlab.dkrz.de/udag/cc-qa)), with funding from the _German Ministry of Research, Technology and Space_ ([BMFTR](https://www.bmftr.bund.de/en), reference `01LP2326E`).
|
|
193
207
|
> It has since been renamed to **esgf-qa** and is now maintained under the **Earth System Grid Federation (ESGF)** organization on GitHub.
|
|
194
208
|
>
|
|
195
209
|
> If you previously used `cc-qa`, please update your installations as described above.
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
[](https://pypi.org/project/esgf-qa/)
|
|
2
2
|
|
|
3
|
-
# esgf-qa
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
# esgf-qa
|
|
4
|
+
### Quality Assurance Workflow Based on `compliance-checker` and `cc-plugin-wcrp` (or other cc-plugins)
|
|
5
|
+
<img src="https://raw.githubusercontent.com/ESGF/esgf-qa/master/docs/esgf-qa_Logo.png" align="left" width="120">
|
|
6
|
+
|
|
7
|
+
`esgf-qa` provides a flexible quality assurance (QA) workflow for evaluating dataset compliance using the
|
|
8
|
+
[ioos/compliance-checker](https://github.com/ioos/compliance-checker) framework
|
|
9
|
+
(including [CF](https://cfconventions.org/) compliance checks)
|
|
10
|
+
and various community plugins (`cc-plugin`s), such as
|
|
8
11
|
[ESGF/cc-plugin-wcrp](https://github.com/ESGF/cc-plugin-wcrp) and
|
|
9
12
|
[euro-cordex/cc-plugin-cc6](https://github.com/euro-cordex/cc-plugin-cc6).
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
The tool executes file-based quality control (QC) tests through the Compliance Checker,
|
|
15
|
+
and, where applicable, performs additional dataset-level checks to test inter-file time-axis continuity
|
|
16
|
+
and consistency in variable, coordinate and attribute definitions.
|
|
17
|
+
Results from both file- and dataset-level checks are aggregated, summarized, and clustered for easier interpretation.
|
|
18
|
+
|
|
19
|
+
### Currently supported checkers
|
|
16
20
|
|
|
17
|
-
`esgf-qa`
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
While `esgf-qa` has been primarily developed for workflows assessing compliance with WCRP project data specifications
|
|
22
|
+
(e.g., CMIP, CORDEX), it can also be used for general CF-compliance testing and easily extended to support any
|
|
23
|
+
`cc-plugin` and projects following CORDEX- or CMIP-style CMOR table conventions.
|
|
20
24
|
|
|
21
25
|
| Standard | Checker Name |
|
|
22
26
|
| ---------------------------------------------------------------------------------------------------- | ------------ |
|
|
23
|
-
| [
|
|
24
|
-
| [
|
|
25
|
-
| [CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)
|
|
26
|
-
| [CMIP6
|
|
27
|
-
| [
|
|
28
|
-
|
|
|
29
|
-
| [EERIE CMOR Tables & CV](https://github.com/eerie-project/dreq_tools) | eerie |
|
|
30
|
-
| Custom MIP | mip |
|
|
27
|
+
| [CF Conventions](https://cfconventions.org/) (shipped with [ioos/compliance-checker](https://github.com/ioos/compliance-checker)) | cf |
|
|
28
|
+
| [WCRP CMIP6](https://pcmdi.llnl.gov/CMIP6/):<br><ul><li>[CMIP6 DRS](https://wcrp-cmip.github.io/WGCM_Infrastructure_Panel/Papers/CMIP6_global_attributes_filenames_CVs_v6.2.7.pdf)</li><li>[CMIP6 CVs](https://github.com/WCRP-CMIP/CMIP6_CVs) (esgvoc)</li></li><li>[cmip6-cmor-tables](https://github.com/PCMDI/cmip6-cmor-tables) (esgvoc)</li></ul> | wcrp_cmip6 |
|
|
29
|
+
| [WCRP CORDEX-CMIP6](https://cordex.org/):<br><ul><li>[CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)</li><li>[cordex-cmip6-cv](https://github.com/WCRP-CORDEX/cordex-cmip6-cv) (esgvoc)</li><li>[cordex-cmip6-cmor-tables](https://github.com/WCRP-CORDEX/cordex-cmip6-cmor-tables) (esgvoc)</li></ul> | wcrp_cordex_cmip6 |
|
|
30
|
+
| [WCRP CORDEX-CMIP6](https://cordex.org/):<br><ul><li>[CORDEX-CMIP6 Archive Specifications](https://doi.org/10.5281/zenodo.10961069)</li><li>[cordex-cmip6-cv](https://github.com/WCRP-CORDEX/cordex-cmip6-cv)</li><li>[cordex-cmip6-cmor-tables](https://github.com/WCRP-CORDEX/cordex-cmip6-cmor-tables)</li></ul> | cc6 |
|
|
31
|
+
| [EERIE](https://eerie-project.eu/):<br>[EERIE CMOR Tables & CV](https://github.com/eerie-project/dreq_tools) | eerie |
|
|
32
|
+
| Custom MIP (CMOR/MIP tables have to be specified) | mip |
|
|
31
33
|
|
|
32
34
|
## Installation
|
|
33
35
|
|
|
@@ -64,11 +66,16 @@ esgvoc install
|
|
|
64
66
|
|
|
65
67
|
- Test your installation
|
|
66
68
|
|
|
67
|
-
The following command should now also list the `
|
|
69
|
+
The following command should now also list the `cc-plugin-wcrp` checks next to all `cc_plugin_cc6` and `compliance_checker` checks:
|
|
68
70
|
```
|
|
69
71
|
cchecker.py -l
|
|
70
72
|
```
|
|
71
73
|
|
|
74
|
+
The following command should now list the necessary projects with metadata sources for `esgvoc`:
|
|
75
|
+
```
|
|
76
|
+
esgvoc status
|
|
77
|
+
```
|
|
78
|
+
|
|
72
79
|
## Usage
|
|
73
80
|
|
|
74
81
|
```shell
|
|
@@ -80,10 +87,10 @@ $ esgqa [-h] [-o <OUTPUT_DIR>] [-t <TEST>] [-O OPTION] [-i <INFO>] [-r] [-C] <pa
|
|
|
80
87
|
- options:
|
|
81
88
|
- `-h, --help`: show this help message and exit
|
|
82
89
|
- `-o, --output_dir OUTPUT_DIR`: Directory to store QA results. Needs to be non-existing or empty or from previous QA run. If not specified, will store results in `./cc-qa-check-results/YYYYMMDD-HHmm_<hash>`.
|
|
83
|
-
- `-t, --test TEST`: The test to run ('wcrp_cmip6:latest'
|
|
84
|
-
- `-O, --option OPTION`: Additional options to be passed to the checkers. Format: '<checker>:<option_name>[:<option_value>]'
|
|
90
|
+
- `-t, --test TEST`: The test to run (`'wcrp_cmip6:latest'`, `'wcrp_cordex_cmip6:latest'` or `'cf:<version>'`, can be specified multiple times, eg.: `'-t wcrp_cmip6:latest -t cf:1.7'`) - default: running latest CF checks `'cf:latest'`.
|
|
91
|
+
- `-O, --option OPTION`: Additional options to be passed to the checkers. Format: `'<checker>:<option_name>[:<option_value>]'`. Multiple invocations possible.
|
|
85
92
|
- `-i, --info INFO`: Information used to tag the QA results, eg. the simulation id to identify the checked run. Suggested is the original experiment-id you gave the run.
|
|
86
|
-
- `-r, --resume`: Specify to continue a previous QC run. Requires the
|
|
93
|
+
- `-r, --resume`: Specify to continue a previous QC run. Requires the `<output_dir>` argument to be set.
|
|
87
94
|
- `-C, --include_consistency_checks`: Include basic consistency and continuity checks. When using the `wcrp-*`, `cc6`, `mip` or `eerie` checkers, they are included by default.
|
|
88
95
|
|
|
89
96
|
### Example Usage
|
|
@@ -92,7 +99,7 @@ $ esgqa [-h] [-o <OUTPUT_DIR>] [-t <TEST>] [-O OPTION] [-i <INFO>] [-r] [-C] <pa
|
|
|
92
99
|
$ esgqa -t wcrp_cordex_cmip6:latest -t cf:1.11 -o QA_results/IAEVALL02_2025-10-20 -i "IAEVALL02" ESGF_Buff/IAEVALL02/CORDEX-CMIP6
|
|
93
100
|
```
|
|
94
101
|
|
|
95
|
-
To resume at a later date, eg. if the QA run did not finish in time or more files have been added to the
|
|
102
|
+
To resume at a later date, eg. if the QA run did not finish in time or more files have been added to the `<parent_dir>`
|
|
96
103
|
(note, that the last modification date of files is NOT taken into account - once a certain file path has been checked
|
|
97
104
|
it will be marked as checked and checks will only be repeated if runtime errors occured):
|
|
98
105
|
|
|
@@ -119,8 +126,13 @@ The results will be stored in two `json` files:
|
|
|
119
126
|
|
|
120
127
|
### Web view
|
|
121
128
|
The clustered results can be viewed using the following website:
|
|
122
|
-
|
|
129
|
+
|
|
130
|
+
- DKRZ: [https://cmiphub.dkrz.de/info/display_qc_results.html](https://cmiphub.dkrz.de/info/display_qc_results.html).
|
|
131
|
+
- IPSL: coming soon
|
|
132
|
+
|
|
123
133
|
This website runs entirely in the user's browser using JavaScript, without requiring interaction with a web server.
|
|
134
|
+
You can select one of the recent QA runs conducted at the respective site or select a local QA run result file to be displayed.
|
|
135
|
+
|
|
124
136
|
Alternatively, you can open the included `display_qc_results.html` file directly in your browser.
|
|
125
137
|
While the web view also supports the full (unclustered) results, it is recommended to not use the web view for files greater than a few MegaBytes.
|
|
126
138
|
|
|
@@ -143,8 +155,9 @@ in the GitLab Repository [qa-results](https://gitlab.dkrz.de/udag/qa-results). Y
|
|
|
143
155
|
|
|
144
156
|
This project is licensed under the Apache License 2.0, and includes the Inter font, which is licensed under the SIL Open Font License 1.1. See the [LICENSE](./LICENSE) file for more details.
|
|
145
157
|
|
|
158
|
+
|
|
146
159
|
> [!NOTE]
|
|
147
|
-
> **This project was originally developed by [DKRZ](https://www.dkrz.de)** under the name **cc-qa** (see [DKRZ GitLab](https://gitlab.dkrz.de/udag/cc-qa)), with funding from the
|
|
160
|
+
> **This project was originally developed by [DKRZ](https://www.dkrz.de)** under the name **cc-qa** (see [DKRZ GitLab](https://gitlab.dkrz.de/udag/cc-qa)), with funding from the _German Ministry of Research, Technology and Space_ ([BMFTR](https://www.bmftr.bund.de/en), reference `01LP2326E`).
|
|
148
161
|
> It has since been renamed to **esgf-qa** and is now maintained under the **Earth System Grid Federation (ESGF)** organization on GitHub.
|
|
149
162
|
>
|
|
150
163
|
> If you previously used `cc-qa`, please update your installations as described above.
|
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
from datetime import timedelta
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# Collection of supported checkers
|
|
4
|
+
checker_dict = {
|
|
5
|
+
"cc6": "CORDEX-CMIP6",
|
|
6
|
+
"cf": "CF-Conventions",
|
|
7
|
+
"mip": "MIP",
|
|
8
|
+
"plugin_cmip6": "CMIP6",
|
|
9
|
+
# "wcrp-cmip5": "CMIP5",
|
|
10
|
+
"wcrp_cmip6": "CMIP6",
|
|
11
|
+
# "wcrp_cmip7": "CMIP7-AFT",
|
|
12
|
+
# "wcrp_cmip7": "CMIP7",
|
|
13
|
+
# "wcrp_cordex": "CORDEX",
|
|
14
|
+
"wcrp_cordex_cmip6": "CORDEX-CMIP6",
|
|
15
|
+
# "obs4mips": "Obs4MIPs",
|
|
16
|
+
# "input4mips": "Input4MIPs",
|
|
17
|
+
}
|
|
18
|
+
checker_dict_ext = {
|
|
19
|
+
# "pcons": "ParentConsistency"
|
|
20
|
+
"cons": "Consistency",
|
|
21
|
+
"cont": "Continuity",
|
|
22
|
+
"comp": "Compatibility",
|
|
23
|
+
**checker_dict,
|
|
24
|
+
}
|
|
25
|
+
checker_release_versions = {}
|
|
26
|
+
|
|
27
|
+
# DRS parent directory names
|
|
28
|
+
DRS_path_parent = {
|
|
29
|
+
"CMIP5": "CMIP5",
|
|
30
|
+
"CMIP6": "CMIP6",
|
|
31
|
+
"CMIP7": "CMIP7",
|
|
32
|
+
"CMIP7-AFT": "CMIP7",
|
|
33
|
+
"CORDEX": "CORDEX",
|
|
34
|
+
"CORDEX-CMIP6": "CORDEX-CMIP6",
|
|
35
|
+
"Obs4MIPs": "Obs4MIPs",
|
|
36
|
+
"Input4MIPs": "Input4MIPs",
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Definition of maximum permitted deviations from the given frequency
|
|
4
40
|
deltdic = {}
|
|
5
41
|
deltdic["monmax"] = timedelta(days=31.01).total_seconds()
|
|
6
42
|
deltdic["monmin"] = timedelta(days=27.99).total_seconds()
|
|
@@ -29,3 +65,8 @@ deltdic["decmin"] = timedelta(days=3660.01).total_seconds()
|
|
|
29
65
|
deltdic["cen"] = timedelta(days=36000).total_seconds()
|
|
30
66
|
deltdic["cenmax"] = timedelta(days=35999.99).total_seconds()
|
|
31
67
|
deltdic["cenmin"] = timedelta(days=36600.01).total_seconds()
|
|
68
|
+
# CMIP-style frequencies for "time: point":
|
|
69
|
+
for l_freq in ["subhr", "1hr", "3hr", "6hr", "day", "mon", "yr"]:
|
|
70
|
+
deltdic[l_freq + "Pt"] = deltdic[l_freq]
|
|
71
|
+
deltdic[l_freq + "Ptmax"] = deltdic[l_freq + "max"]
|
|
72
|
+
deltdic[l_freq + "Ptmin"] = deltdic[l_freq + "min"]
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.4.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 4, 0)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gdd534515f'
|