vortex-nwp 2.0.0b1__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.
Files changed (146) hide show
  1. vortex/__init__.py +135 -0
  2. vortex/algo/__init__.py +12 -0
  3. vortex/algo/components.py +2136 -0
  4. vortex/algo/mpitools.py +1648 -0
  5. vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +27 -0
  6. vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +29 -0
  7. vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +18 -0
  8. vortex/algo/serversynctools.py +170 -0
  9. vortex/config.py +115 -0
  10. vortex/data/__init__.py +13 -0
  11. vortex/data/abstractstores.py +1572 -0
  12. vortex/data/containers.py +780 -0
  13. vortex/data/contents.py +596 -0
  14. vortex/data/executables.py +284 -0
  15. vortex/data/flow.py +113 -0
  16. vortex/data/geometries.ini +2689 -0
  17. vortex/data/geometries.py +703 -0
  18. vortex/data/handlers.py +1021 -0
  19. vortex/data/outflow.py +67 -0
  20. vortex/data/providers.py +465 -0
  21. vortex/data/resources.py +201 -0
  22. vortex/data/stores.py +1271 -0
  23. vortex/gloves.py +282 -0
  24. vortex/layout/__init__.py +27 -0
  25. vortex/layout/appconf.py +109 -0
  26. vortex/layout/contexts.py +511 -0
  27. vortex/layout/dataflow.py +1069 -0
  28. vortex/layout/jobs.py +1276 -0
  29. vortex/layout/monitor.py +833 -0
  30. vortex/layout/nodes.py +1424 -0
  31. vortex/layout/subjobs.py +464 -0
  32. vortex/nwp/__init__.py +11 -0
  33. vortex/nwp/algo/__init__.py +12 -0
  34. vortex/nwp/algo/assim.py +483 -0
  35. vortex/nwp/algo/clim.py +920 -0
  36. vortex/nwp/algo/coupling.py +609 -0
  37. vortex/nwp/algo/eda.py +632 -0
  38. vortex/nwp/algo/eps.py +613 -0
  39. vortex/nwp/algo/forecasts.py +745 -0
  40. vortex/nwp/algo/fpserver.py +927 -0
  41. vortex/nwp/algo/ifsnaming.py +403 -0
  42. vortex/nwp/algo/ifsroot.py +311 -0
  43. vortex/nwp/algo/monitoring.py +202 -0
  44. vortex/nwp/algo/mpitools.py +554 -0
  45. vortex/nwp/algo/odbtools.py +974 -0
  46. vortex/nwp/algo/oopsroot.py +735 -0
  47. vortex/nwp/algo/oopstests.py +186 -0
  48. vortex/nwp/algo/request.py +579 -0
  49. vortex/nwp/algo/stdpost.py +1285 -0
  50. vortex/nwp/data/__init__.py +12 -0
  51. vortex/nwp/data/assim.py +392 -0
  52. vortex/nwp/data/boundaries.py +261 -0
  53. vortex/nwp/data/climfiles.py +539 -0
  54. vortex/nwp/data/configfiles.py +149 -0
  55. vortex/nwp/data/consts.py +929 -0
  56. vortex/nwp/data/ctpini.py +133 -0
  57. vortex/nwp/data/diagnostics.py +181 -0
  58. vortex/nwp/data/eda.py +148 -0
  59. vortex/nwp/data/eps.py +383 -0
  60. vortex/nwp/data/executables.py +1039 -0
  61. vortex/nwp/data/fields.py +96 -0
  62. vortex/nwp/data/gridfiles.py +308 -0
  63. vortex/nwp/data/logs.py +551 -0
  64. vortex/nwp/data/modelstates.py +334 -0
  65. vortex/nwp/data/monitoring.py +220 -0
  66. vortex/nwp/data/namelists.py +644 -0
  67. vortex/nwp/data/obs.py +748 -0
  68. vortex/nwp/data/oopsexec.py +72 -0
  69. vortex/nwp/data/providers.py +182 -0
  70. vortex/nwp/data/query.py +217 -0
  71. vortex/nwp/data/stores.py +147 -0
  72. vortex/nwp/data/surfex.py +338 -0
  73. vortex/nwp/syntax/__init__.py +9 -0
  74. vortex/nwp/syntax/stdattrs.py +375 -0
  75. vortex/nwp/tools/__init__.py +10 -0
  76. vortex/nwp/tools/addons.py +35 -0
  77. vortex/nwp/tools/agt.py +55 -0
  78. vortex/nwp/tools/bdap.py +48 -0
  79. vortex/nwp/tools/bdcp.py +38 -0
  80. vortex/nwp/tools/bdm.py +21 -0
  81. vortex/nwp/tools/bdmp.py +49 -0
  82. vortex/nwp/tools/conftools.py +1311 -0
  83. vortex/nwp/tools/drhook.py +62 -0
  84. vortex/nwp/tools/grib.py +268 -0
  85. vortex/nwp/tools/gribdiff.py +99 -0
  86. vortex/nwp/tools/ifstools.py +163 -0
  87. vortex/nwp/tools/igastuff.py +249 -0
  88. vortex/nwp/tools/mars.py +56 -0
  89. vortex/nwp/tools/odb.py +548 -0
  90. vortex/nwp/tools/partitioning.py +234 -0
  91. vortex/nwp/tools/satrad.py +56 -0
  92. vortex/nwp/util/__init__.py +6 -0
  93. vortex/nwp/util/async.py +184 -0
  94. vortex/nwp/util/beacon.py +40 -0
  95. vortex/nwp/util/diffpygram.py +359 -0
  96. vortex/nwp/util/ens.py +198 -0
  97. vortex/nwp/util/hooks.py +128 -0
  98. vortex/nwp/util/taskdeco.py +81 -0
  99. vortex/nwp/util/usepygram.py +591 -0
  100. vortex/nwp/util/usetnt.py +87 -0
  101. vortex/proxy.py +6 -0
  102. vortex/sessions.py +341 -0
  103. vortex/syntax/__init__.py +9 -0
  104. vortex/syntax/stdattrs.py +628 -0
  105. vortex/syntax/stddeco.py +176 -0
  106. vortex/toolbox.py +982 -0
  107. vortex/tools/__init__.py +11 -0
  108. vortex/tools/actions.py +457 -0
  109. vortex/tools/addons.py +297 -0
  110. vortex/tools/arm.py +76 -0
  111. vortex/tools/compression.py +322 -0
  112. vortex/tools/date.py +20 -0
  113. vortex/tools/ddhpack.py +10 -0
  114. vortex/tools/delayedactions.py +672 -0
  115. vortex/tools/env.py +513 -0
  116. vortex/tools/folder.py +663 -0
  117. vortex/tools/grib.py +559 -0
  118. vortex/tools/lfi.py +746 -0
  119. vortex/tools/listings.py +354 -0
  120. vortex/tools/names.py +575 -0
  121. vortex/tools/net.py +1790 -0
  122. vortex/tools/odb.py +10 -0
  123. vortex/tools/parallelism.py +336 -0
  124. vortex/tools/prestaging.py +186 -0
  125. vortex/tools/rawfiles.py +10 -0
  126. vortex/tools/schedulers.py +413 -0
  127. vortex/tools/services.py +871 -0
  128. vortex/tools/storage.py +1061 -0
  129. vortex/tools/surfex.py +61 -0
  130. vortex/tools/systems.py +3396 -0
  131. vortex/tools/targets.py +384 -0
  132. vortex/util/__init__.py +9 -0
  133. vortex/util/config.py +1071 -0
  134. vortex/util/empty.py +24 -0
  135. vortex/util/helpers.py +184 -0
  136. vortex/util/introspection.py +63 -0
  137. vortex/util/iosponge.py +76 -0
  138. vortex/util/roles.py +51 -0
  139. vortex/util/storefunctions.py +103 -0
  140. vortex/util/structs.py +26 -0
  141. vortex/util/worker.py +150 -0
  142. vortex_nwp-2.0.0b1.dist-info/LICENSE +517 -0
  143. vortex_nwp-2.0.0b1.dist-info/METADATA +50 -0
  144. vortex_nwp-2.0.0b1.dist-info/RECORD +146 -0
  145. vortex_nwp-2.0.0b1.dist-info/WHEEL +5 -0
  146. vortex_nwp-2.0.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,133 @@
1
+ """
2
+ Ctpini files.
3
+ """
4
+
5
+ from bronx.fancies import loggers
6
+
7
+ from vortex.data.outflow import StaticResource
8
+ from vortex.data.flow import GeoFlowResource
9
+ from ..syntax.stdattrs import gvar
10
+ from vortex.data.contents import DataTemplate
11
+ from .gridfiles import GridPoint
12
+
13
+ #: No automatic export
14
+ __all__ = []
15
+
16
+ logger = loggers.getLogger(__name__)
17
+
18
+
19
+ class CtpiniDirectiveFile(GeoFlowResource):
20
+ """
21
+ Class dealing with Ctpini directive file.
22
+ """
23
+
24
+ _footprint = dict(
25
+ info = "Ctpini directive file",
26
+ attr = dict(
27
+ kind = dict(
28
+ values = ["ctpini_directives_file", ],
29
+ ),
30
+ nativefmt = dict(
31
+ default = "ascii"
32
+ )
33
+ )
34
+ )
35
+
36
+ @property
37
+ def realkind(self):
38
+ return "ctpini_directives_file"
39
+
40
+
41
+ class AsciiFiles(StaticResource):
42
+ """
43
+ Class to deal with miscellaneous ascii files coming from genv.
44
+ """
45
+
46
+ _abstract = True
47
+ _footprint = [
48
+ gvar,
49
+ dict(
50
+ info = 'Abstract class for ascii files from genv.',
51
+ )
52
+ ]
53
+
54
+
55
+ class CtpiniAsciiFiles(AsciiFiles):
56
+ """
57
+ Class to deal with Genv Ctpini ascii files.
58
+ """
59
+
60
+ _footprint = [
61
+ dict(
62
+ info = "Ctpini Genv ascii files.",
63
+ attr = dict(
64
+ kind = dict(
65
+ values = ["ctpini_ascii_file"],
66
+ ),
67
+ source = dict(
68
+ values = ["levels", "covano", "fort61", "coor", "cov46"],
69
+ ),
70
+ gvar = dict(
71
+ default = "tsr_misc_[source]",
72
+ ),
73
+ clscontents=dict(
74
+ default = DataTemplate
75
+ ),
76
+ )
77
+ )
78
+ ]
79
+
80
+ @property
81
+ def realkind(self):
82
+ return "ctpini_ascii_file"
83
+
84
+
85
+ class GridPointCtpini(GridPoint):
86
+ """
87
+ Class to deal with Gridpoint files used as input in Ctpini.
88
+ """
89
+
90
+ _footprint = dict(
91
+ info = 'Ctpini Gridpoint Fields',
92
+ attr = dict(
93
+ kind = dict(
94
+ values = ['ctpini_gridpoint', ],
95
+ ),
96
+ origin = dict(
97
+ values = ['oper', 'PS', 'dble', 'PX', 'ctpini', 'PTSR', ],
98
+ remap = dict(
99
+ PS = 'oper',
100
+ PX = 'dble',
101
+ PTSR = 'ctpini',
102
+ ),
103
+ ),
104
+ parameter = dict(
105
+ values = ['PMERSOL', 'T850HPA', 'Z15PVU', 'Z20PVU', 'Z07PVU', 'TROPO'],
106
+ ),
107
+ run_ctpini = dict(
108
+ optional = True,
109
+ default = None,
110
+ ),
111
+ nativefmt = dict(
112
+ values = ['geo', ],
113
+ default = 'geo',
114
+ ),
115
+ )
116
+ )
117
+
118
+ @property
119
+ def realkind(self):
120
+ return "ctpini_gridpoint"
121
+
122
+ def namebuilding_info(self):
123
+ """Generic information, radical = ``grid``."""
124
+ ninfo = super().namebuilding_info()
125
+ if self.origin == 'ctpini' and self.run_ctpini is not None:
126
+ source = [self.model, self.origin, self.parameter, self.run_ctpini]
127
+ else:
128
+ source = [self.model, self.origin, self.parameter]
129
+ ninfo.update(
130
+ radical='ctpini-grid',
131
+ src=source,
132
+ )
133
+ return ninfo
@@ -0,0 +1,181 @@
1
+ """
2
+ TODO: Module documentation.
3
+ """
4
+
5
+ import footprints
6
+
7
+ from vortex.data.flow import GeoFlowResource, GeoPeriodFlowResource
8
+ from vortex.syntax.stdattrs import term_deco
9
+ from vortex.syntax.stddeco import namebuilding_append, namebuilding_insert, overwrite_realkind
10
+
11
+ #: No automatic export
12
+ __all__ = []
13
+
14
+
15
+ class ISP(GeoFlowResource):
16
+ """Class for Forecasted Satellite Image resource. Obsolete."""
17
+
18
+ _footprint = dict(
19
+ info = 'Forecasted Satellite Image',
20
+ attr = dict(
21
+ kind = dict(
22
+ values = ['isp', 'fsi']
23
+ ),
24
+ nativefmt = dict(
25
+ values = ['foo', ],
26
+ default = 'foo',
27
+ ),
28
+ )
29
+ )
30
+
31
+ @property
32
+ def realkind(self):
33
+ return 'isp'
34
+
35
+ def archive_basename(self):
36
+ """OP ARCHIVE specific naming convention."""
37
+ return 'anim0'
38
+
39
+ def olive_basename(self):
40
+ """OLIVE specific naming convention."""
41
+ return 'ISP' + self.model[:4].upper()
42
+
43
+
44
+ @namebuilding_insert('radical', lambda s: 'ddh')
45
+ @namebuilding_append('src', lambda s: s.scope)
46
+ class _DDHcommon(GeoFlowResource):
47
+ """
48
+ Abstract class for Horizontal Diagnostics.
49
+ """
50
+ _abstract = True
51
+ _footprint = dict(
52
+ info = 'Diagnostic on Horizontal Domains',
53
+ attr = dict(
54
+ kind = dict(
55
+ values = ['ddh', 'dhf'],
56
+ remap = dict(dhf='ddh')
57
+ ),
58
+ nativefmt = dict(),
59
+ scope = dict(
60
+ values = ['limited', 'dlimited', 'global', 'zonal'],
61
+ remap = dict(limited='dlimited')
62
+ ),
63
+ )
64
+ )
65
+
66
+
67
+ class DDH(_DDHcommon):
68
+ """
69
+ Class for Horizontal Diagnostics.
70
+ Used to be a ``dhf`` !
71
+ """
72
+ _footprint = [
73
+ term_deco,
74
+ dict(
75
+ info = 'Diagnostic on Horizontal Domains',
76
+ attr = dict(
77
+ nativefmt = dict(
78
+ values = ['lfi', 'lfa'],
79
+ default = 'lfi',
80
+ ),
81
+ )
82
+ )
83
+ ]
84
+
85
+ @property
86
+ def realkind(self):
87
+ return 'ddh'
88
+
89
+ def archive_basename(self):
90
+ """OP ARCHIVE specific naming convention."""
91
+ return 'dhf{:s}{:s}+{:s}'.format(self.scope[:2].lower(), self.model[:4].lower(), self.term.fmth)
92
+
93
+ def olive_basename(self):
94
+ """OLIVE specific naming convention."""
95
+ return 'DHF{:s}{:s}+{:s}'.format(self.scope[:2].upper(), self.model[:4].upper(), self.term.fmth)
96
+
97
+
98
+ class DDHpack(_DDHcommon):
99
+ """
100
+ Class for Horizontal Diagnostics with all terms packed in a single directory.
101
+ Used to be a ``dhf`` !
102
+ """
103
+ _footprint = dict(
104
+ info = 'Diagnostic on Horizontal Domains packed in a single directory',
105
+ attr = dict(
106
+ nativefmt = dict(
107
+ values = ['ddhpack', ],
108
+ ),
109
+ )
110
+ )
111
+
112
+ def olive_basename(self):
113
+ """OLIVE specific naming convention."""
114
+ return 'DHF{:s}{:s}.tar'.format(self.scope[:2].upper(), self.model[:4].upper())
115
+
116
+ @property
117
+ def realkind(self):
118
+ return 'ddhpack'
119
+
120
+
121
+ _surfex_diag_decofp = footprints.DecorativeFootprint(
122
+ info='Diagnostic files outputed by surfex during a model run',
123
+ attr=dict(
124
+ kind=dict(
125
+ values=['diagnostics', ]
126
+ ),
127
+ scope=dict(
128
+ ),
129
+ model=dict(
130
+ values=['surfex', ]
131
+ ),
132
+ nativefmt=dict(
133
+ values=['netcdf', 'grib', ],
134
+ default='netcdf',
135
+ optional=True
136
+ ),
137
+ ),
138
+ decorator=[namebuilding_append('src', lambda s: s.scope),
139
+ overwrite_realkind('diagnostics')]
140
+ )
141
+
142
+
143
+ class SurfexDiagnostics(GeoFlowResource):
144
+ """Diagnostic files outputed by surfex during a model run (date/term version)."""
145
+
146
+ _footprint = [_surfex_diag_decofp, term_deco]
147
+
148
+
149
+ class SurfexPeriodDiagnostics(GeoPeriodFlowResource):
150
+ """Diagnostic files outputed by surfex during a model run (period version)."""
151
+
152
+ _footprint = [_surfex_diag_decofp, ]
153
+
154
+
155
+ class ObjTrack(GeoFlowResource):
156
+ """Class for Object Tracks."""
157
+
158
+ _footprint = dict(
159
+ info = 'Object Tracks json file',
160
+ attr = dict(
161
+ kind = dict(
162
+ values = ['objtrack']
163
+ ),
164
+ nativefmt = dict(
165
+ values = ['json', 'hdf5', 'foo', ],
166
+ default = 'foo',
167
+ ),
168
+ )
169
+ )
170
+
171
+ @property
172
+ def realkind(self):
173
+ return 'objtrack'
174
+
175
+ def archive_basename(self):
176
+ """OP ARCHIVE specific naming convention."""
177
+ return 'track{:s}{:s}+{:s}'.format(self.scope[:2].lower(), self.model[:4].lower(), self.term.fmth)
178
+
179
+ def olive_basename(self):
180
+ """OLIVE specific naming convention."""
181
+ return 'track{:s}{:s}+{:s}'.format(self.scope[:2].upper(), self.model[:4].upper(), self.term.fmth)
vortex/nwp/data/eda.py ADDED
@@ -0,0 +1,148 @@
1
+ """
2
+ Resources needed to build the Ensemble Data Assimilation system.
3
+ """
4
+
5
+ from bronx.fancies import loggers
6
+
7
+ from vortex.data.flow import GeoFlowResource
8
+ from .assim import _BackgroundErrorInfo
9
+ from vortex.syntax.stdattrs import term_deco
10
+ from vortex.syntax.stddeco import namebuilding_insert
11
+ from ..syntax.stdattrs import gvar
12
+
13
+ #: Automatic export off
14
+ __all__ = []
15
+
16
+ logger = loggers.getLogger(__name__)
17
+
18
+
19
+ @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
20
+ class RawFiles(GeoFlowResource):
21
+ """Input files for wavelet covariances estimation. To be removed soon."""
22
+
23
+ _footprint = [
24
+ term_deco,
25
+ gvar,
26
+ dict(
27
+ info = 'Input files for wavelet covariances estimation',
28
+ attr = dict(
29
+ kind = dict(
30
+ values = ['rawfiles'],
31
+ ),
32
+ nativefmt = dict(
33
+ values = ['rawfiles', 'unknown'],
34
+ ),
35
+ gvar = dict(
36
+ default = 'aearp_rawfiles_t[geometry:truncation]'
37
+ ),
38
+ ipert = dict(
39
+ type = int,
40
+ optional = True,
41
+ ),
42
+ )
43
+ )
44
+ ]
45
+
46
+ @property
47
+ def realkind(self):
48
+ return self.kind
49
+
50
+ def archive_basename(self):
51
+ """OP ARCHIVE specific naming convention."""
52
+ return 'RAWFILEP(memberfix:member)+{:s}.{:d}'.format(self.term.fmthour, self.geometry.truncation)
53
+
54
+ def olive_basename(self):
55
+ """OLIVE specific naming convention."""
56
+ raise NotImplementedError()
57
+
58
+ def gget_basename(self):
59
+ """GGET specific naming convention."""
60
+ if self.ipert is None:
61
+ raise ValueError('ipert is mandatory with the GCO provider')
62
+ return dict(suffix='.{:03d}.tar'.format(self.ipert))
63
+
64
+
65
+ @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
66
+ class RandBFiles(GeoFlowResource):
67
+ """Input files for wavelet covariances estimation."""
68
+
69
+ _footprint = [
70
+ term_deco,
71
+ gvar,
72
+ dict(
73
+ info = 'Input files for wavelet covariances estimation',
74
+ attr = dict(
75
+ kind = dict(
76
+ values = ['randbfiles', 'famembers'],
77
+ remap = dict(autoremap = 'first')
78
+ ),
79
+ nativefmt = dict(
80
+ values = ['fa', 'unknown'],
81
+ ),
82
+ gvar = dict(
83
+ default = 'aearp_randb_t[geometry:truncation]'
84
+ ),
85
+ ipert = dict(
86
+ type = int,
87
+ optional = True,
88
+ ),
89
+ )
90
+ )
91
+ ]
92
+
93
+ @property
94
+ def realkind(self):
95
+ return 'randbfiles'
96
+
97
+ def archive_basename(self):
98
+ """OP ARCHIVE specific naming convention."""
99
+ return 'famember(memberfix:member)+{:s}.{:d}'.format(self.term.fmthour, self.geometry.truncation)
100
+
101
+ def olive_basename(self):
102
+ """OLIVE specific naming convention."""
103
+ raise NotImplementedError()
104
+
105
+ def gget_basename(self):
106
+ """GGET specific naming convention."""
107
+ if self.ipert is None:
108
+ raise ValueError('ipert is mandatory with the GCO provider')
109
+ return dict(suffix='.{:03d}.{}'.format(self.ipert, 'fa'))
110
+
111
+
112
+ class InflationFactor(_BackgroundErrorInfo):
113
+ """
114
+ Inflation factor profiles.
115
+ """
116
+
117
+ _footprint = dict(
118
+ info='Inflation factor profiles',
119
+ attr=dict(
120
+ kind=dict(
121
+ values=['infl_factor', 'infl', 'inflation_factor'],
122
+ remap=dict(autoremap='first'),
123
+ ),
124
+ gvar = dict(
125
+ default = 'inflation_factor'
126
+ ),
127
+ nativefmt=dict(
128
+ values=['ascii'],
129
+ default='ascii',
130
+ ),
131
+ term=dict(
132
+ optional=True,
133
+ default=3
134
+ ),
135
+ ),
136
+ )
137
+
138
+ @property
139
+ def realkind(self):
140
+ return 'inflation_factor'
141
+
142
+ def archive_basename(self):
143
+ """OP ARCHIVE specific naming convention."""
144
+ return self.realkind
145
+
146
+ def olive_basename(self):
147
+ """OLIVE specific naming convention."""
148
+ return self.realkind