vortex-nwp 2.0.0b1__py3-none-any.whl → 2.1.0__py3-none-any.whl
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.
- vortex/__init__.py +75 -47
- vortex/algo/__init__.py +3 -2
- vortex/algo/components.py +944 -618
- vortex/algo/mpitools.py +802 -497
- vortex/algo/mpitools_templates/__init__.py +1 -0
- vortex/algo/serversynctools.py +34 -33
- vortex/config.py +19 -22
- vortex/data/__init__.py +9 -3
- vortex/data/abstractstores.py +593 -655
- vortex/data/containers.py +217 -162
- vortex/data/contents.py +65 -39
- vortex/data/executables.py +93 -102
- vortex/data/flow.py +40 -34
- vortex/data/geometries.py +228 -132
- vortex/data/handlers.py +436 -227
- vortex/data/outflow.py +15 -15
- vortex/data/providers.py +185 -163
- vortex/data/resources.py +48 -42
- vortex/data/stores.py +540 -417
- vortex/data/sync_templates/__init__.py +0 -0
- vortex/gloves.py +114 -87
- vortex/layout/__init__.py +1 -8
- vortex/layout/contexts.py +150 -84
- vortex/layout/dataflow.py +353 -202
- vortex/layout/monitor.py +264 -128
- vortex/nwp/__init__.py +5 -2
- vortex/nwp/algo/__init__.py +14 -5
- vortex/nwp/algo/assim.py +205 -151
- vortex/nwp/algo/clim.py +683 -517
- vortex/nwp/algo/coupling.py +447 -225
- vortex/nwp/algo/eda.py +437 -229
- vortex/nwp/algo/eps.py +403 -231
- vortex/nwp/algo/forecasts.py +416 -275
- vortex/nwp/algo/fpserver.py +683 -307
- vortex/nwp/algo/ifsnaming.py +205 -145
- vortex/nwp/algo/ifsroot.py +215 -122
- vortex/nwp/algo/monitoring.py +137 -76
- vortex/nwp/algo/mpitools.py +330 -190
- vortex/nwp/algo/odbtools.py +637 -353
- vortex/nwp/algo/oopsroot.py +454 -273
- vortex/nwp/algo/oopstests.py +90 -56
- vortex/nwp/algo/request.py +287 -206
- vortex/nwp/algo/stdpost.py +878 -522
- vortex/nwp/data/__init__.py +22 -4
- vortex/nwp/data/assim.py +125 -137
- vortex/nwp/data/boundaries.py +121 -68
- vortex/nwp/data/climfiles.py +193 -211
- vortex/nwp/data/configfiles.py +73 -69
- vortex/nwp/data/consts.py +426 -401
- vortex/nwp/data/ctpini.py +59 -43
- vortex/nwp/data/diagnostics.py +94 -66
- vortex/nwp/data/eda.py +50 -51
- vortex/nwp/data/eps.py +195 -146
- vortex/nwp/data/executables.py +440 -434
- vortex/nwp/data/fields.py +63 -48
- vortex/nwp/data/gridfiles.py +183 -111
- vortex/nwp/data/logs.py +250 -217
- vortex/nwp/data/modelstates.py +180 -151
- vortex/nwp/data/monitoring.py +72 -99
- vortex/nwp/data/namelists.py +254 -202
- vortex/nwp/data/obs.py +400 -308
- vortex/nwp/data/oopsexec.py +22 -20
- vortex/nwp/data/providers.py +90 -65
- vortex/nwp/data/query.py +71 -82
- vortex/nwp/data/stores.py +49 -36
- vortex/nwp/data/surfex.py +136 -137
- vortex/nwp/syntax/__init__.py +1 -1
- vortex/nwp/syntax/stdattrs.py +173 -111
- vortex/nwp/tools/__init__.py +2 -2
- vortex/nwp/tools/addons.py +22 -17
- vortex/nwp/tools/agt.py +24 -12
- vortex/nwp/tools/bdap.py +16 -5
- vortex/nwp/tools/bdcp.py +4 -1
- vortex/nwp/tools/bdm.py +3 -0
- vortex/nwp/tools/bdmp.py +14 -9
- vortex/nwp/tools/conftools.py +728 -378
- vortex/nwp/tools/drhook.py +12 -8
- vortex/nwp/tools/grib.py +65 -39
- vortex/nwp/tools/gribdiff.py +22 -17
- vortex/nwp/tools/ifstools.py +82 -42
- vortex/nwp/tools/igastuff.py +167 -143
- vortex/nwp/tools/mars.py +14 -2
- vortex/nwp/tools/odb.py +234 -125
- vortex/nwp/tools/partitioning.py +61 -37
- vortex/nwp/tools/satrad.py +27 -12
- vortex/nwp/util/async.py +83 -55
- vortex/nwp/util/beacon.py +10 -10
- vortex/nwp/util/diffpygram.py +174 -86
- vortex/nwp/util/ens.py +144 -63
- vortex/nwp/util/hooks.py +30 -19
- vortex/nwp/util/taskdeco.py +28 -24
- vortex/nwp/util/usepygram.py +278 -172
- vortex/nwp/util/usetnt.py +31 -17
- vortex/sessions.py +72 -39
- vortex/syntax/__init__.py +1 -1
- vortex/syntax/stdattrs.py +410 -171
- vortex/syntax/stddeco.py +31 -22
- vortex/toolbox.py +327 -192
- vortex/tools/__init__.py +11 -2
- vortex/tools/actions.py +110 -121
- vortex/tools/addons.py +111 -92
- vortex/tools/arm.py +42 -22
- vortex/tools/compression.py +72 -69
- vortex/tools/date.py +11 -4
- vortex/tools/delayedactions.py +242 -132
- vortex/tools/env.py +75 -47
- vortex/tools/folder.py +342 -171
- vortex/tools/grib.py +341 -162
- vortex/tools/lfi.py +423 -216
- vortex/tools/listings.py +109 -40
- vortex/tools/names.py +218 -156
- vortex/tools/net.py +655 -299
- vortex/tools/parallelism.py +93 -61
- vortex/tools/prestaging.py +55 -31
- vortex/tools/schedulers.py +172 -105
- vortex/tools/services.py +403 -334
- vortex/tools/storage.py +293 -358
- vortex/tools/surfex.py +24 -24
- vortex/tools/systems.py +1234 -643
- vortex/tools/targets.py +156 -100
- vortex/util/__init__.py +1 -1
- vortex/util/config.py +378 -327
- vortex/util/empty.py +2 -2
- vortex/util/helpers.py +56 -24
- vortex/util/introspection.py +18 -12
- vortex/util/iosponge.py +8 -4
- vortex/util/roles.py +4 -6
- vortex/util/storefunctions.py +39 -13
- vortex/util/structs.py +3 -3
- vortex/util/worker.py +29 -17
- vortex_nwp-2.1.0.dist-info/METADATA +67 -0
- vortex_nwp-2.1.0.dist-info/RECORD +144 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/WHEEL +1 -1
- vortex/layout/appconf.py +0 -109
- vortex/layout/jobs.py +0 -1276
- vortex/layout/nodes.py +0 -1424
- vortex/layout/subjobs.py +0 -464
- vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
- vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info/licenses}/LICENSE +0 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/top_level.txt +0 -0
vortex/nwp/algo/oopstests.py
CHANGED
|
@@ -6,9 +6,17 @@ import json
|
|
|
6
6
|
|
|
7
7
|
import footprints
|
|
8
8
|
|
|
9
|
-
from vortex.algo.components import
|
|
9
|
+
from vortex.algo.components import (
|
|
10
|
+
AlgoComponentDecoMixin,
|
|
11
|
+
algo_component_deco_mixin_autodoc,
|
|
12
|
+
)
|
|
10
13
|
from ..syntax.stdattrs import oops_test_type, oops_expected_target
|
|
11
|
-
from .oopsroot import
|
|
14
|
+
from .oopsroot import (
|
|
15
|
+
OOPSParallel,
|
|
16
|
+
OOPSODB,
|
|
17
|
+
OOPSMembersTermsDecoMixin,
|
|
18
|
+
OOPSMembersTermsDetectDecoMixin,
|
|
19
|
+
)
|
|
12
20
|
|
|
13
21
|
#: No automatic export
|
|
14
22
|
__all__ = []
|
|
@@ -25,14 +33,14 @@ class _OOPSTestDecoMixin(AlgoComponentDecoMixin):
|
|
|
25
33
|
the dictionary that is used to build the binary' command line.
|
|
26
34
|
"""
|
|
27
35
|
|
|
28
|
-
_MIXIN_EXTRA_FOOTPRINTS = (oops_test_type,
|
|
36
|
+
_MIXIN_EXTRA_FOOTPRINTS = (oops_test_type,)
|
|
29
37
|
|
|
30
38
|
def _ooptest_cli_opts_extend(self, prev):
|
|
31
39
|
"""Prepare options for the resource's command line."""
|
|
32
|
-
prev[
|
|
40
|
+
prev["test_type"] = self.test_type
|
|
33
41
|
return prev
|
|
34
42
|
|
|
35
|
-
_MIXIN_CLI_OPTS_EXTEND = (_ooptest_cli_opts_extend,
|
|
43
|
+
_MIXIN_CLI_OPTS_EXTEND = (_ooptest_cli_opts_extend,)
|
|
36
44
|
|
|
37
45
|
|
|
38
46
|
@algo_component_deco_mixin_autodoc
|
|
@@ -61,11 +69,13 @@ class _OOPSTestExpTargetDecoMixin(AlgoComponentDecoMixin):
|
|
|
61
69
|
# if attribute 'expected_target' is attribute and given to the algo, use it
|
|
62
70
|
target = self._set_expected_target_from_attribute()
|
|
63
71
|
# else, go find Reference summary in effective inputs
|
|
64
|
-
if target is not None and target.get(
|
|
72
|
+
if target is not None and target.get("from") == "reference_summary":
|
|
65
73
|
target = self._set_expected_target_from_reference_summary()
|
|
66
74
|
# Else, default to be sure to pass any in-binary-test
|
|
67
75
|
if target is None:
|
|
68
|
-
target =
|
|
76
|
+
target = (
|
|
77
|
+
self._set_expected_target_default()
|
|
78
|
+
) # CLEANME: to be removed after CY47 ?
|
|
69
79
|
# Then in the end, export variable
|
|
70
80
|
target = json.dumps(target)
|
|
71
81
|
logger.info("Expected Target for Test: " + target)
|
|
@@ -73,88 +83,112 @@ class _OOPSTestExpTargetDecoMixin(AlgoComponentDecoMixin):
|
|
|
73
83
|
|
|
74
84
|
def _set_expected_target_from_attribute(self):
|
|
75
85
|
"""Read target in Algo attribute."""
|
|
76
|
-
if hasattr(self,
|
|
86
|
+
if hasattr(self, "expected_target"):
|
|
77
87
|
if self.expected_target is not None:
|
|
78
88
|
target = self.expected_target
|
|
79
|
-
logger.info(
|
|
89
|
+
logger.info("Set EXPECTED_RESULT from Attribute")
|
|
80
90
|
return target
|
|
81
91
|
|
|
82
92
|
def _set_expected_target_from_reference_summary(self):
|
|
83
93
|
"""Read target in ReferenceSummary effective input"""
|
|
84
94
|
target = None
|
|
85
|
-
ref_summary = [
|
|
86
|
-
|
|
95
|
+
ref_summary = [
|
|
96
|
+
s
|
|
97
|
+
for s in self.context.sequence.effective_inputs(
|
|
98
|
+
role=("Reference",)
|
|
99
|
+
)
|
|
100
|
+
if s.rh.resource.kind == "taskinfo"
|
|
101
|
+
]
|
|
87
102
|
if len(ref_summary) > 0:
|
|
88
103
|
ref_summary = ref_summary[0].rh.contents.data
|
|
89
|
-
target = ref_summary.get(
|
|
90
|
-
|
|
104
|
+
target = ref_summary.get("oops:" + self.test_type, {}).get(
|
|
105
|
+
"as EXPECTED_RESULT", None
|
|
106
|
+
)
|
|
91
107
|
if target is not None:
|
|
92
|
-
logger.info(
|
|
108
|
+
logger.info("Set EXPECTED_RESULT from Reference summary")
|
|
93
109
|
return target
|
|
94
110
|
|
|
95
|
-
def _set_expected_target_default(
|
|
111
|
+
def _set_expected_target_default(
|
|
112
|
+
self,
|
|
113
|
+
): # CLEANME: to be removed after CY47 ?
|
|
96
114
|
"""Set default, for binary not to crash before CY47."""
|
|
97
|
-
target = {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
target = {
|
|
116
|
+
"significant_digits": "-9",
|
|
117
|
+
"expected_Jo": "9999",
|
|
118
|
+
"expected_variances": "9999",
|
|
119
|
+
"expected_diff": "9999",
|
|
120
|
+
}
|
|
121
|
+
logger.info("Set default EXPECTED_RESULT")
|
|
102
122
|
return target
|
|
103
123
|
|
|
104
124
|
def _ooptest_exptarget_prepare_hook(self, rh, opts):
|
|
105
125
|
"""Call set_expected_target juste after prepare."""
|
|
106
126
|
self.set_expected_target()
|
|
107
127
|
|
|
108
|
-
_MIXIN_PREPARE_HOOKS = (_ooptest_exptarget_prepare_hook,
|
|
128
|
+
_MIXIN_PREPARE_HOOKS = (_ooptest_exptarget_prepare_hook,)
|
|
109
129
|
|
|
110
130
|
|
|
111
|
-
class OOPSTest(
|
|
112
|
-
|
|
131
|
+
class OOPSTest(
|
|
132
|
+
OOPSParallel,
|
|
133
|
+
_OOPSTestDecoMixin,
|
|
134
|
+
_OOPSTestExpTargetDecoMixin,
|
|
135
|
+
OOPSMembersTermsDetectDecoMixin,
|
|
136
|
+
):
|
|
113
137
|
"""OOPS Tests without ODB."""
|
|
114
138
|
|
|
115
139
|
_footprint = dict(
|
|
116
|
-
info
|
|
117
|
-
attr
|
|
118
|
-
kind
|
|
119
|
-
values
|
|
140
|
+
info="OOPS Test run.",
|
|
141
|
+
attr=dict(
|
|
142
|
+
kind=dict(
|
|
143
|
+
values=["ootest"],
|
|
120
144
|
),
|
|
121
|
-
test_type
|
|
122
|
-
outcast
|
|
145
|
+
test_type=dict(
|
|
146
|
+
outcast=[
|
|
147
|
+
"ensemble/build",
|
|
148
|
+
]
|
|
123
149
|
),
|
|
124
|
-
)
|
|
150
|
+
),
|
|
125
151
|
)
|
|
126
152
|
|
|
127
153
|
|
|
128
|
-
class OOPSTestEnsBuild(
|
|
154
|
+
class OOPSTestEnsBuild(
|
|
155
|
+
OOPSParallel, _OOPSTestDecoMixin, OOPSMembersTermsDecoMixin
|
|
156
|
+
):
|
|
129
157
|
"""OOPS Tests without ODB: ensemble/build specific case"""
|
|
130
158
|
|
|
131
159
|
_footprint = dict(
|
|
132
|
-
info
|
|
133
|
-
attr
|
|
134
|
-
kind
|
|
135
|
-
values
|
|
160
|
+
info="OOPS Test run.",
|
|
161
|
+
attr=dict(
|
|
162
|
+
kind=dict(
|
|
163
|
+
values=["ootest"],
|
|
136
164
|
),
|
|
137
|
-
test_type
|
|
138
|
-
values
|
|
165
|
+
test_type=dict(
|
|
166
|
+
values=[
|
|
167
|
+
"ensemble/build",
|
|
168
|
+
]
|
|
139
169
|
),
|
|
140
|
-
)
|
|
170
|
+
),
|
|
141
171
|
)
|
|
142
172
|
|
|
143
173
|
|
|
144
|
-
class OOPSObsOpTest(
|
|
145
|
-
|
|
174
|
+
class OOPSObsOpTest(
|
|
175
|
+
OOPSODB,
|
|
176
|
+
_OOPSTestDecoMixin,
|
|
177
|
+
_OOPSTestExpTargetDecoMixin,
|
|
178
|
+
OOPSMembersTermsDetectDecoMixin,
|
|
179
|
+
):
|
|
146
180
|
"""OOPS Obs Operators Tests."""
|
|
147
181
|
|
|
148
182
|
_footprint = dict(
|
|
149
|
-
info
|
|
150
|
-
attr
|
|
151
|
-
kind
|
|
152
|
-
values
|
|
183
|
+
info="OOPS Obs Operators Tests.",
|
|
184
|
+
attr=dict(
|
|
185
|
+
kind=dict(
|
|
186
|
+
values=["ootestobs"],
|
|
153
187
|
),
|
|
154
|
-
virtualdb
|
|
155
|
-
default
|
|
188
|
+
virtualdb=dict(
|
|
189
|
+
default="ccma",
|
|
156
190
|
),
|
|
157
|
-
)
|
|
191
|
+
),
|
|
158
192
|
)
|
|
159
193
|
|
|
160
194
|
|
|
@@ -162,15 +196,15 @@ class OOPSecma2ccma(OOPSODB, _OOPSTestDecoMixin):
|
|
|
162
196
|
"""OOPS Test ECMA 2 CCMA completer."""
|
|
163
197
|
|
|
164
198
|
_footprint = dict(
|
|
165
|
-
info
|
|
166
|
-
attr
|
|
167
|
-
kind
|
|
168
|
-
values
|
|
199
|
+
info="OOPS ECMA 2 CCMA completer.",
|
|
200
|
+
attr=dict(
|
|
201
|
+
kind=dict(
|
|
202
|
+
values=["ootest2ccma"],
|
|
169
203
|
),
|
|
170
|
-
virtualdb
|
|
171
|
-
values
|
|
204
|
+
virtualdb=dict(
|
|
205
|
+
values=["ecma"],
|
|
172
206
|
),
|
|
173
|
-
)
|
|
207
|
+
),
|
|
174
208
|
)
|
|
175
209
|
|
|
176
210
|
def postfix(self, rh, opts):
|
|
@@ -182,5 +216,5 @@ class OOPSecma2ccma(OOPSODB, _OOPSTestDecoMixin):
|
|
|
182
216
|
"""Make the appropriate renaming of files in ECMA to CCMA."""
|
|
183
217
|
for e in self.lookupodb():
|
|
184
218
|
edir = e.rh.container.localpath()
|
|
185
|
-
self.odb.change_layout(
|
|
186
|
-
self.system.mv(edir, edir.replace(
|
|
219
|
+
self.odb.change_layout("ECMA", "CCMA", edir)
|
|
220
|
+
self.system.mv(edir, edir.replace("ECMA", "CCMA"))
|