vortex-nwp 2.0.0b1__py3-none-any.whl → 2.0.0b2__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 (139) hide show
  1. vortex/__init__.py +59 -45
  2. vortex/algo/__init__.py +3 -2
  3. vortex/algo/components.py +940 -614
  4. vortex/algo/mpitools.py +802 -497
  5. vortex/algo/serversynctools.py +34 -33
  6. vortex/config.py +19 -22
  7. vortex/data/__init__.py +9 -3
  8. vortex/data/abstractstores.py +593 -655
  9. vortex/data/containers.py +217 -162
  10. vortex/data/contents.py +65 -39
  11. vortex/data/executables.py +93 -102
  12. vortex/data/flow.py +40 -34
  13. vortex/data/geometries.py +228 -132
  14. vortex/data/handlers.py +428 -225
  15. vortex/data/outflow.py +15 -15
  16. vortex/data/providers.py +185 -163
  17. vortex/data/resources.py +48 -42
  18. vortex/data/stores.py +544 -413
  19. vortex/gloves.py +114 -87
  20. vortex/layout/__init__.py +1 -8
  21. vortex/layout/contexts.py +150 -84
  22. vortex/layout/dataflow.py +353 -202
  23. vortex/layout/monitor.py +264 -128
  24. vortex/nwp/__init__.py +5 -2
  25. vortex/nwp/algo/__init__.py +14 -5
  26. vortex/nwp/algo/assim.py +205 -151
  27. vortex/nwp/algo/clim.py +683 -517
  28. vortex/nwp/algo/coupling.py +447 -225
  29. vortex/nwp/algo/eda.py +437 -229
  30. vortex/nwp/algo/eps.py +403 -231
  31. vortex/nwp/algo/forecasts.py +420 -271
  32. vortex/nwp/algo/fpserver.py +683 -307
  33. vortex/nwp/algo/ifsnaming.py +205 -145
  34. vortex/nwp/algo/ifsroot.py +210 -122
  35. vortex/nwp/algo/monitoring.py +132 -76
  36. vortex/nwp/algo/mpitools.py +321 -191
  37. vortex/nwp/algo/odbtools.py +617 -353
  38. vortex/nwp/algo/oopsroot.py +449 -273
  39. vortex/nwp/algo/oopstests.py +90 -56
  40. vortex/nwp/algo/request.py +287 -206
  41. vortex/nwp/algo/stdpost.py +878 -522
  42. vortex/nwp/data/__init__.py +22 -4
  43. vortex/nwp/data/assim.py +125 -137
  44. vortex/nwp/data/boundaries.py +121 -68
  45. vortex/nwp/data/climfiles.py +193 -211
  46. vortex/nwp/data/configfiles.py +73 -69
  47. vortex/nwp/data/consts.py +426 -401
  48. vortex/nwp/data/ctpini.py +59 -43
  49. vortex/nwp/data/diagnostics.py +94 -66
  50. vortex/nwp/data/eda.py +50 -51
  51. vortex/nwp/data/eps.py +195 -146
  52. vortex/nwp/data/executables.py +440 -434
  53. vortex/nwp/data/fields.py +63 -48
  54. vortex/nwp/data/gridfiles.py +183 -111
  55. vortex/nwp/data/logs.py +250 -217
  56. vortex/nwp/data/modelstates.py +180 -151
  57. vortex/nwp/data/monitoring.py +72 -99
  58. vortex/nwp/data/namelists.py +254 -202
  59. vortex/nwp/data/obs.py +400 -308
  60. vortex/nwp/data/oopsexec.py +22 -20
  61. vortex/nwp/data/providers.py +90 -65
  62. vortex/nwp/data/query.py +71 -82
  63. vortex/nwp/data/stores.py +49 -36
  64. vortex/nwp/data/surfex.py +136 -137
  65. vortex/nwp/syntax/__init__.py +1 -1
  66. vortex/nwp/syntax/stdattrs.py +173 -111
  67. vortex/nwp/tools/__init__.py +2 -2
  68. vortex/nwp/tools/addons.py +22 -17
  69. vortex/nwp/tools/agt.py +24 -12
  70. vortex/nwp/tools/bdap.py +16 -5
  71. vortex/nwp/tools/bdcp.py +4 -1
  72. vortex/nwp/tools/bdm.py +3 -0
  73. vortex/nwp/tools/bdmp.py +14 -9
  74. vortex/nwp/tools/conftools.py +728 -378
  75. vortex/nwp/tools/drhook.py +12 -8
  76. vortex/nwp/tools/grib.py +65 -39
  77. vortex/nwp/tools/gribdiff.py +22 -17
  78. vortex/nwp/tools/ifstools.py +82 -42
  79. vortex/nwp/tools/igastuff.py +167 -143
  80. vortex/nwp/tools/mars.py +14 -2
  81. vortex/nwp/tools/odb.py +234 -125
  82. vortex/nwp/tools/partitioning.py +61 -37
  83. vortex/nwp/tools/satrad.py +27 -12
  84. vortex/nwp/util/async.py +83 -55
  85. vortex/nwp/util/beacon.py +10 -10
  86. vortex/nwp/util/diffpygram.py +174 -86
  87. vortex/nwp/util/ens.py +144 -63
  88. vortex/nwp/util/hooks.py +30 -19
  89. vortex/nwp/util/taskdeco.py +28 -24
  90. vortex/nwp/util/usepygram.py +278 -172
  91. vortex/nwp/util/usetnt.py +31 -17
  92. vortex/sessions.py +72 -39
  93. vortex/syntax/__init__.py +1 -1
  94. vortex/syntax/stdattrs.py +410 -171
  95. vortex/syntax/stddeco.py +31 -22
  96. vortex/toolbox.py +327 -192
  97. vortex/tools/__init__.py +11 -2
  98. vortex/tools/actions.py +125 -59
  99. vortex/tools/addons.py +111 -92
  100. vortex/tools/arm.py +42 -22
  101. vortex/tools/compression.py +72 -69
  102. vortex/tools/date.py +11 -4
  103. vortex/tools/delayedactions.py +242 -132
  104. vortex/tools/env.py +75 -47
  105. vortex/tools/folder.py +342 -171
  106. vortex/tools/grib.py +311 -149
  107. vortex/tools/lfi.py +423 -216
  108. vortex/tools/listings.py +109 -40
  109. vortex/tools/names.py +218 -156
  110. vortex/tools/net.py +632 -298
  111. vortex/tools/parallelism.py +93 -61
  112. vortex/tools/prestaging.py +55 -31
  113. vortex/tools/schedulers.py +172 -105
  114. vortex/tools/services.py +402 -333
  115. vortex/tools/storage.py +293 -358
  116. vortex/tools/surfex.py +24 -24
  117. vortex/tools/systems.py +1211 -631
  118. vortex/tools/targets.py +156 -100
  119. vortex/util/__init__.py +1 -1
  120. vortex/util/config.py +377 -327
  121. vortex/util/empty.py +2 -2
  122. vortex/util/helpers.py +56 -24
  123. vortex/util/introspection.py +18 -12
  124. vortex/util/iosponge.py +8 -4
  125. vortex/util/roles.py +4 -6
  126. vortex/util/storefunctions.py +39 -13
  127. vortex/util/structs.py +3 -3
  128. vortex/util/worker.py +29 -17
  129. vortex_nwp-2.0.0b2.dist-info/METADATA +66 -0
  130. vortex_nwp-2.0.0b2.dist-info/RECORD +142 -0
  131. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/WHEEL +1 -1
  132. vortex/layout/appconf.py +0 -109
  133. vortex/layout/jobs.py +0 -1276
  134. vortex/layout/nodes.py +0 -1424
  135. vortex/layout/subjobs.py +0 -464
  136. vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
  137. vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
  138. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/LICENSE +0 -0
  139. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/top_level.txt +0 -0
@@ -4,8 +4,20 @@ Various Resources for executables used in NWP.
4
4
 
5
5
  import vortex
6
6
 
7
- from vortex.data.executables import Script, GnuScript, BlackBox, NWPModel, SurfaceModel, OceanographicModel
8
- from ..syntax.stdattrs import gvar, arpifs_cycle, gmkpack_compiler_identification_deco, executable_flavour_deco
7
+ from vortex.data.executables import (
8
+ Script,
9
+ GnuScript,
10
+ BlackBox,
11
+ NWPModel,
12
+ SurfaceModel,
13
+ OceanographicModel,
14
+ )
15
+ from ..syntax.stdattrs import (
16
+ gvar,
17
+ arpifs_cycle,
18
+ gmkpack_compiler_identification_deco,
19
+ executable_flavour_deco,
20
+ )
9
21
  from ..syntax.stdattrs import ArpIfsSimplifiedCycle
10
22
 
11
23
  #: No automatic export
@@ -14,22 +26,29 @@ __all__ = []
14
26
 
15
27
  def gmkpack_bin_deco(cls):
16
28
  """Add the necessary method to look into gmkpack directories."""
29
+
17
30
  def guess_binary_sources(self, provider):
18
31
  """Return the sources location baseld on gmkpack layout."""
19
32
  sh = vortex.ticket().sh
20
33
  srcdirs = []
21
- if provider.realkind == 'remote' and provider.tube in ('file', 'symlink'):
34
+ if provider.realkind == "remote" and provider.tube in (
35
+ "file",
36
+ "symlink",
37
+ ):
22
38
  packroot = sh.path.dirname(provider.pathname(self))
23
- srcroot = sh.path.join(packroot, 'src')
39
+ srcroot = sh.path.join(packroot, "src")
24
40
  if sh.path.exists(srcroot):
25
41
  insrc = sh.listdir(srcroot)
26
- if 'local' in insrc:
27
- srcdirs.append('local')
28
- for inter in [d for d in sorted(insrc, reverse=True)
29
- if d.startswith('inter')]:
42
+ if "local" in insrc:
43
+ srcdirs.append("local")
44
+ for inter in [
45
+ d
46
+ for d in sorted(insrc, reverse=True)
47
+ if d.startswith("inter")
48
+ ]:
30
49
  srcdirs.append(inter)
31
- if 'main' in insrc:
32
- srcdirs.append('main')
50
+ if "main" in insrc:
51
+ srcdirs.append("main")
33
52
  srcdirs = [sh.path.join(srcroot, d) for d in srcdirs]
34
53
  return srcdirs
35
54
 
@@ -47,66 +66,79 @@ class IFSModel(NWPModel):
47
66
  gmkpack_compiler_identification_deco,
48
67
  gvar,
49
68
  dict(
50
- info = 'IFS Model',
51
- attr = dict(
52
- gvar = dict(
53
- default = 'master_[model]'
54
- ),
55
- kind = dict(
56
- values = ['ifsmodel', 'mfmodel'],
69
+ info="IFS Model",
70
+ attr=dict(
71
+ gvar=dict(default="master_[model]"),
72
+ kind=dict(
73
+ values=["ifsmodel", "mfmodel"],
57
74
  ),
58
- model = dict(
59
- outcast = ['aladin', 'arome'],
75
+ model=dict(
76
+ outcast=["aladin", "arome"],
60
77
  ),
61
- )
62
- )
78
+ ),
79
+ ),
63
80
  ]
64
81
 
65
82
  @property
66
83
  def realkind(self):
67
- return 'ifsmodel'
84
+ return "ifsmodel"
68
85
 
69
86
  def iga_pathinfo(self):
70
87
  """Standard path information for IGA inline cache."""
71
- return dict(
72
- model=self.model
73
- )
88
+ return dict(model=self.model)
74
89
 
75
90
  def iga_basename(self):
76
91
  """Standard expected basename for IGA inline cache."""
77
- return 'ARPEGE'
78
-
79
- def command_line(self, model='arpifs', vmodel='meteo',
80
- name='XRUN', conf=1, timescheme='sli',
81
- timestep=600, fcterm=0, fcunit='h'):
92
+ return "ARPEGE"
93
+
94
+ def command_line(
95
+ self,
96
+ model="arpifs",
97
+ vmodel="meteo",
98
+ name="XRUN",
99
+ conf=1,
100
+ timescheme="sli",
101
+ timestep=600,
102
+ fcterm=0,
103
+ fcunit="h",
104
+ ):
82
105
  """
83
106
  Build command line for execution as a single string.
84
107
  Depending on the cycle it may returns nothing.
85
108
  """
86
- if self.cycle < 'cy41':
87
- return '-v{:s} -e{:s} -c{:d} -a{:s} -t{:g} -f{:s}{:d} -m{:s}'.format(
88
- vmodel, name, conf, timescheme, timestep, fcunit, fcterm, model
109
+ if self.cycle < "cy41":
110
+ return (
111
+ "-v{:s} -e{:s} -c{:d} -a{:s} -t{:g} -f{:s}{:d} -m{:s}".format(
112
+ vmodel,
113
+ name,
114
+ conf,
115
+ timescheme,
116
+ timestep,
117
+ fcunit,
118
+ fcterm,
119
+ model,
120
+ )
89
121
  )
90
122
  else:
91
- return ''
123
+ return ""
92
124
 
93
125
 
94
126
  class Arome(IFSModel):
95
127
  """Dedicated to local area model."""
96
128
 
97
129
  _footprint = dict(
98
- info = 'ALADIN / AROME Local Area Model',
99
- attr = dict(
100
- model = dict(
101
- values = ['aladin', 'arome'],
102
- outcast = set(),
130
+ info="ALADIN / AROME Local Area Model",
131
+ attr=dict(
132
+ model=dict(
133
+ values=["aladin", "arome"],
134
+ outcast=set(),
103
135
  ),
104
- )
136
+ ),
105
137
  )
106
138
 
107
139
  def command_line(self, **kw):
108
140
  """Enforce aladin model option."""
109
- kw.setdefault('model', 'aladin')
141
+ kw.setdefault("model", "aladin")
110
142
  return super().command_line(**kw)
111
143
 
112
144
 
@@ -116,24 +148,26 @@ class NemoModel(OceanographicModel):
116
148
  _footprint = [
117
149
  gvar,
118
150
  dict(
119
- info = 'NEMO',
120
- attr = dict(
121
- gvar = dict(
122
- default = 'master_[model]'
123
- ),
124
- kind = dict(
125
- values = ['nemomodel', ],
151
+ info="NEMO",
152
+ attr=dict(
153
+ gvar=dict(default="master_[model]"),
154
+ kind=dict(
155
+ values=[
156
+ "nemomodel",
157
+ ],
126
158
  ),
127
- model = dict(
128
- values = ['nemo', ],
159
+ model=dict(
160
+ values=[
161
+ "nemo",
162
+ ],
129
163
  ),
130
- )
131
- )
164
+ ),
165
+ ),
132
166
  ]
133
167
 
134
168
  @property
135
169
  def realkind(self):
136
- return 'nemo'
170
+ return "nemo"
137
171
 
138
172
 
139
173
  @gmkpack_bin_deco
@@ -144,21 +178,21 @@ class Prep(BlackBox):
144
178
  arpifs_cycle,
145
179
  gvar,
146
180
  dict(
147
- info = 'Prep utility to interpolate Surfex files',
148
- attr = dict(
149
- gvar = dict(
150
- default = 'master_prep'
151
- ),
152
- kind = dict(
153
- values = ['prep', ],
181
+ info="Prep utility to interpolate Surfex files",
182
+ attr=dict(
183
+ gvar=dict(default="master_prep"),
184
+ kind=dict(
185
+ values=[
186
+ "prep",
187
+ ],
154
188
  ),
155
- )
156
- )
189
+ ),
190
+ ),
157
191
  ]
158
192
 
159
193
  @property
160
194
  def realkind(self):
161
- return 'prep'
195
+ return "prep"
162
196
 
163
197
 
164
198
  @gmkpack_bin_deco
@@ -168,21 +202,21 @@ class PGD(BlackBox):
168
202
  _footprint = [
169
203
  gvar,
170
204
  dict(
171
- info = 'PGD utility to create Surfex clim files',
172
- attr = dict(
173
- gvar = dict(
174
- default = 'master_pgd'
175
- ),
176
- kind = dict(
177
- values = ['buildpgd', ],
205
+ info="PGD utility to create Surfex clim files",
206
+ attr=dict(
207
+ gvar=dict(default="master_pgd"),
208
+ kind=dict(
209
+ values=[
210
+ "buildpgd",
211
+ ],
178
212
  ),
179
- )
180
- )
213
+ ),
214
+ ),
181
215
  ]
182
216
 
183
217
  @property
184
218
  def realkind(self):
185
- return 'buildpgd'
219
+ return "buildpgd"
186
220
 
187
221
 
188
222
  @gmkpack_bin_deco
@@ -192,24 +226,24 @@ class OfflineSurfex(SurfaceModel):
192
226
  _footprint = [
193
227
  gvar,
194
228
  dict(
195
- info = 'Surfex executable',
196
- attr = dict(
197
- gvar = dict(
198
- default = 'master_offline'
199
- ),
200
- kind = dict(
201
- values = ['offline', 'soda'],
229
+ info="Surfex executable",
230
+ attr=dict(
231
+ gvar=dict(default="master_offline"),
232
+ kind=dict(
233
+ values=["offline", "soda"],
202
234
  ),
203
- model = dict(
204
- values = ['surfex', ],
235
+ model=dict(
236
+ values=[
237
+ "surfex",
238
+ ],
205
239
  ),
206
- )
207
- )
240
+ ),
241
+ ),
208
242
  ]
209
243
 
210
244
  @property
211
245
  def realkind(self):
212
- return 'offline'
246
+ return "offline"
213
247
 
214
248
 
215
249
  @gmkpack_bin_deco
@@ -219,22 +253,20 @@ class ProGrid(BlackBox):
219
253
  _footprint = [
220
254
  gvar,
221
255
  dict(
222
- info = 'ProGrid utility for grib conversion',
223
- attr = dict(
224
- gvar = dict(
225
- default = 'master_progrid'
226
- ),
227
- kind = dict(
228
- values = ['progrid', 'gribtool'],
229
- remap = dict(gribtool = 'progrid'),
256
+ info="ProGrid utility for grib conversion",
257
+ attr=dict(
258
+ gvar=dict(default="master_progrid"),
259
+ kind=dict(
260
+ values=["progrid", "gribtool"],
261
+ remap=dict(gribtool="progrid"),
230
262
  ),
231
- )
232
- )
263
+ ),
264
+ ),
233
265
  ]
234
266
 
235
267
  @property
236
268
  def realkind(self):
237
- return 'progrid'
269
+ return "progrid"
238
270
 
239
271
 
240
272
  @gmkpack_bin_deco
@@ -244,22 +276,20 @@ class ProTool(BlackBox):
244
276
  _footprint = [
245
277
  gvar,
246
278
  dict(
247
- info = 'ProTool utility for field manipulation',
248
- attr = dict(
249
- gvar = dict(
250
- default = 'master_addsurf'
251
- ),
252
- kind = dict(
253
- values = ['protool', 'addsurf'],
254
- remap = dict(addsurf='protool'),
279
+ info="ProTool utility for field manipulation",
280
+ attr=dict(
281
+ gvar=dict(default="master_addsurf"),
282
+ kind=dict(
283
+ values=["protool", "addsurf"],
284
+ remap=dict(addsurf="protool"),
255
285
  ),
256
- )
257
- )
286
+ ),
287
+ ),
258
288
  ]
259
289
 
260
290
  @property
261
291
  def realkind(self):
262
- return 'protool'
292
+ return "protool"
263
293
 
264
294
 
265
295
  @gmkpack_bin_deco
@@ -269,16 +299,14 @@ class SstNetcdf2Ascii(BlackBox):
269
299
  _footprint = [
270
300
  gvar,
271
301
  dict(
272
- info = 'Tool to change the format of NetCDF sst files',
273
- attr = dict(
274
- gvar = dict(
275
- default = "master_sst_netcdf"
302
+ info="Tool to change the format of NetCDF sst files",
303
+ attr=dict(
304
+ gvar=dict(default="master_sst_netcdf"),
305
+ kind=dict(
306
+ values=["sst_netcdf"],
276
307
  ),
277
- kind = dict(
278
- values = ['sst_netcdf'],
279
- )
280
- )
281
- )
308
+ ),
309
+ ),
282
310
  ]
283
311
 
284
312
 
@@ -289,21 +317,19 @@ class SstGrb2Ascii(BlackBox):
289
317
  _footprint = [
290
318
  gvar,
291
319
  dict(
292
- info = 'Tool to change the format of grib sst files',
293
- attr = dict(
294
- gvar = dict(
295
- default = "master_lectbdap"
320
+ info="Tool to change the format of grib sst files",
321
+ attr=dict(
322
+ gvar=dict(default="master_lectbdap"),
323
+ kind=dict(
324
+ values=["lectbdap"],
296
325
  ),
297
- kind = dict(
298
- values = ['lectbdap'],
299
- )
300
- )
301
- )
326
+ ),
327
+ ),
302
328
  ]
303
329
 
304
330
  def command_line(self, year, month, day, hour, lon, lat):
305
331
  """Build the command line to launch the executable."""
306
- return '-y{year} -m{month} -d{day} -r{hour} -o{lon} -a{lat}'.format(
332
+ return "-y{year} -m{month} -d{day} -r{hour} -o{lon} -a{lat}".format(
307
333
  year=year, month=month, day=day, hour=hour, lon=lon, lat=lat
308
334
  )
309
335
 
@@ -315,16 +341,12 @@ class IceGrb2Ascii(BlackBox):
315
341
  _footprint = [
316
342
  gvar,
317
343
  dict(
318
- info = 'Ice_grib executable to convert sea ice grib files into ascii files',
319
- attr = dict(
320
- gvar = dict(
321
- default = 'master_ice_grb'
322
- ),
323
- kind = dict(
324
- values = ['ice_grb']
325
- )
326
- )
327
- )
344
+ info="Ice_grib executable to convert sea ice grib files into ascii files",
345
+ attr=dict(
346
+ gvar=dict(default="master_ice_grb"),
347
+ kind=dict(values=["ice_grb"]),
348
+ ),
349
+ ),
328
350
  ]
329
351
 
330
352
 
@@ -335,25 +357,21 @@ class IceNCDF2Ascii(BlackBox):
335
357
  _footprint = [
336
358
  gvar,
337
359
  dict(
338
- info = 'Ice_netcdf executable to convert sea ice NetCDF files into obsoul files',
339
- attr = dict(
340
- gvar = dict(
341
- default = 'master_ice_netcdf'
342
- ),
343
- kind = dict(
344
- values = ['ice_netcdf']
345
- )
346
- )
347
- )
360
+ info="Ice_netcdf executable to convert sea ice NetCDF files into obsoul files",
361
+ attr=dict(
362
+ gvar=dict(default="master_ice_netcdf"),
363
+ kind=dict(values=["ice_netcdf"]),
364
+ ),
365
+ ),
348
366
  ]
349
367
 
350
368
  def command_line(self, file_in_hn, file_in_hs, param, file_out):
351
369
  """Build the command line to launch the executable."""
352
- return '{file_in_hn} {file_in_hs} {param} {file_out}'.format(
370
+ return "{file_in_hn} {file_in_hs} {param} {file_out}".format(
353
371
  file_in_hn=file_in_hn,
354
372
  file_in_hs=file_in_hs,
355
373
  param=param,
356
- file_out=file_out
374
+ file_out=file_out,
357
375
  )
358
376
 
359
377
 
@@ -363,27 +381,25 @@ class IOAssign(BlackBox):
363
381
  _footprint = [
364
382
  gvar,
365
383
  dict(
366
- info = 'ProTool utility for field manipulation',
367
- attr = dict(
368
- kind = dict(
369
- values = ['ioassign', 'odbioassign'],
370
- remap = dict(odbioassign = 'ioassign'),
371
- ),
372
- gvar = dict(
373
- default = 'master_ioassign'
384
+ info="ProTool utility for field manipulation",
385
+ attr=dict(
386
+ kind=dict(
387
+ values=["ioassign", "odbioassign"],
388
+ remap=dict(odbioassign="ioassign"),
374
389
  ),
375
- iotool = dict(
376
- optional = True,
377
- default = 'create_ioassign',
378
- access = 'rwx',
390
+ gvar=dict(default="master_ioassign"),
391
+ iotool=dict(
392
+ optional=True,
393
+ default="create_ioassign",
394
+ access="rwx",
379
395
  ),
380
- )
381
- )
396
+ ),
397
+ ),
382
398
  ]
383
399
 
384
400
  @property
385
401
  def realkind(self):
386
- return 'ioassign'
402
+ return "ioassign"
387
403
 
388
404
 
389
405
  @gmkpack_bin_deco
@@ -394,29 +410,27 @@ class Batodb(BlackBox):
394
410
  arpifs_cycle,
395
411
  gvar,
396
412
  dict(
397
- info = 'Batodb conversion program',
398
- attr = dict(
399
- kind = dict(
400
- values = ['bator', 'batodb'],
401
- remap = dict(bator = 'batodb'),
402
- ),
403
- gvar = dict(
404
- default = 'master_batodb'
413
+ info="Batodb conversion program",
414
+ attr=dict(
415
+ kind=dict(
416
+ values=["bator", "batodb"],
417
+ remap=dict(bator="batodb"),
405
418
  ),
406
- )
407
- )
419
+ gvar=dict(default="master_batodb"),
420
+ ),
421
+ ),
408
422
  ]
409
423
 
410
424
  @property
411
425
  def realkind(self):
412
- return 'batodb'
426
+ return "batodb"
413
427
 
414
428
  def command_line(self, dataid=None, date=None):
415
429
  """Build the command-line."""
416
430
  cmdstuff = list()
417
- if dataid == 'hh' and date is not None:
418
- cmdstuff.append('{0.hh:s}'.format(date))
419
- return ' '.join(cmdstuff)
431
+ if dataid == "hh" and date is not None:
432
+ cmdstuff.append("{0.hh:s}".format(date))
433
+ return " ".join(cmdstuff)
420
434
 
421
435
 
422
436
  @gmkpack_bin_deco
@@ -426,31 +440,40 @@ class Odbtools(BlackBox):
426
440
  _footprint = [
427
441
  gvar,
428
442
  dict(
429
- info = 'Odbtools shuffle program',
430
- attr = dict(
431
- kind = dict(
432
- values = ['odbtools'],
433
- ),
434
- gvar = dict(
435
- default = 'master_odbtools'
443
+ info="Odbtools shuffle program",
444
+ attr=dict(
445
+ kind=dict(
446
+ values=["odbtools"],
436
447
  ),
437
- )
438
- )
448
+ gvar=dict(default="master_odbtools"),
449
+ ),
450
+ ),
439
451
  ]
440
452
 
441
453
  @property
442
454
  def realkind(self):
443
- return 'odbtools'
444
-
445
- def command_line(self, dbin='ECMA', dbout='CCMA', npool=1, nslot=1, fcma=None, masksize=None, date=None):
455
+ return "odbtools"
456
+
457
+ def command_line(
458
+ self,
459
+ dbin="ECMA",
460
+ dbout="CCMA",
461
+ npool=1,
462
+ nslot=1,
463
+ fcma=None,
464
+ masksize=None,
465
+ date=None,
466
+ ):
446
467
  """Build command line for execution as a single string."""
447
- cmdline = '-i{:s} -o{:s} -b1 -a{:d} -T{:d}'.format(dbin.upper(), dbout.upper(), npool, nslot)
468
+ cmdline = "-i{:s} -o{:s} -b1 -a{:d} -T{:d}".format(
469
+ dbin.upper(), dbout.upper(), npool, nslot
470
+ )
448
471
  if fcma is not None:
449
- cmdline = cmdline + ' -F{:s}'.format(fcma.upper())
472
+ cmdline = cmdline + " -F{:s}".format(fcma.upper())
450
473
  if masksize is not None:
451
- cmdline = cmdline + ' -n{:d}'.format(int(masksize))
474
+ cmdline = cmdline + " -n{:d}".format(int(masksize))
452
475
  if date is not None:
453
- cmdline = cmdline + ' -B' + date.ymdh
476
+ cmdline = cmdline + " -B" + date.ymdh
454
477
  return cmdline
455
478
 
456
479
 
@@ -461,16 +484,14 @@ class FcqODB(BlackBox):
461
484
  _footprint = [
462
485
  gvar,
463
486
  dict(
464
- info = 'Flags calculation program',
465
- attr = dict(
466
- kind = dict(
467
- values = ['fcqodb'],
487
+ info="Flags calculation program",
488
+ attr=dict(
489
+ kind=dict(
490
+ values=["fcqodb"],
468
491
  ),
469
- gvar = dict(
470
- default = 'master_fcqodb'
471
- )
492
+ gvar=dict(default="master_fcqodb"),
472
493
  ),
473
- )
494
+ ),
474
495
  ]
475
496
 
476
497
 
@@ -481,21 +502,19 @@ class VarBCTool(BlackBox):
481
502
  _footprint = [
482
503
  gvar,
483
504
  dict(
484
- info = 'VarBC merger program',
485
- attr = dict(
486
- kind = dict(
487
- values = ['varbctool'],
488
- ),
489
- gvar = dict(
490
- default = 'master_merge_varbc'
505
+ info="VarBC merger program",
506
+ attr=dict(
507
+ kind=dict(
508
+ values=["varbctool"],
491
509
  ),
492
- )
493
- )
510
+ gvar=dict(default="master_merge_varbc"),
511
+ ),
512
+ ),
494
513
  ]
495
514
 
496
515
  @property
497
516
  def realkind(self):
498
- return 'varbctool'
517
+ return "varbctool"
499
518
 
500
519
 
501
520
  class LopezMix(BlackBox):
@@ -504,22 +523,20 @@ class LopezMix(BlackBox):
504
523
  _footprint = [
505
524
  gvar,
506
525
  dict(
507
- info = 'Surface mix',
508
- attr = dict(
509
- kind = dict(
510
- values = ['lopezmix', 'lopez', 'mastsurf', 'surfmix'],
511
- remap = dict(autoremap = 'first'),
512
- ),
513
- gvar = dict(
514
- default = 'master_surfmix'
526
+ info="Surface mix",
527
+ attr=dict(
528
+ kind=dict(
529
+ values=["lopezmix", "lopez", "mastsurf", "surfmix"],
530
+ remap=dict(autoremap="first"),
515
531
  ),
516
- )
517
- )
532
+ gvar=dict(default="master_surfmix"),
533
+ ),
534
+ ),
518
535
  ]
519
536
 
520
537
  @property
521
538
  def realkind(self):
522
- return 'lopezmix'
539
+ return "lopezmix"
523
540
 
524
541
 
525
542
  class MasterDiag(BlackBox):
@@ -530,42 +547,38 @@ class MasterDiag(BlackBox):
530
547
  arpifs_cycle,
531
548
  gvar,
532
549
  dict(
533
- info = 'MasterDiag abstract class utility for diagnostics computation',
534
- attr = dict(
535
- gvar = dict(
536
- default = 'master_diag_[diagnostic]'
537
- ),
538
- kind = dict(
539
- values = ['masterdiag', 'masterdiagpi'],
540
- remap = dict(masterdiagpi='masterdiag'),
550
+ info="MasterDiag abstract class utility for diagnostics computation",
551
+ attr=dict(
552
+ gvar=dict(default="master_diag_[diagnostic]"),
553
+ kind=dict(
554
+ values=["masterdiag", "masterdiagpi"],
555
+ remap=dict(masterdiagpi="masterdiag"),
541
556
  ),
542
- diagnostic = dict(
543
- info = "The type of diagnostic to be performed.",
544
- optional = True,
545
- values = ['voisin', 'neighbour', 'aromepi', 'labo'],
546
- remap = dict(neighbour='voisin'),
557
+ diagnostic=dict(
558
+ info="The type of diagnostic to be performed.",
559
+ optional=True,
560
+ values=["voisin", "neighbour", "aromepi", "labo"],
561
+ remap=dict(neighbour="voisin"),
547
562
  ),
548
- )
549
- )
563
+ ),
564
+ ),
550
565
  ]
551
566
 
552
567
  @property
553
568
  def realkind(self):
554
- return 'masterdiag'
569
+ return "masterdiag"
555
570
 
556
571
 
557
572
  class MasterDiagLabo(MasterDiag):
558
573
  """binary to compute a diagnostic with some gribs for cycle after the 46th."""
559
574
 
560
575
  _footprint = dict(
561
- attr = dict(
562
- diagnostic = dict(
563
- default = 'labo',
576
+ attr=dict(
577
+ diagnostic=dict(
578
+ default="labo",
564
579
  )
565
580
  ),
566
- only = dict(
567
- after_cycle = ArpIfsSimplifiedCycle('cy46')
568
- )
581
+ only=dict(after_cycle=ArpIfsSimplifiedCycle("cy46")),
569
582
  )
570
583
 
571
584
 
@@ -573,14 +586,12 @@ class MasterDiagPi(MasterDiag):
573
586
  """binary to compute a diagnostic with some gribs for cycle before the 46th."""
574
587
 
575
588
  _footprint = dict(
576
- attr = dict(
577
- diagnostic = dict(
578
- default = 'aromepi',
589
+ attr=dict(
590
+ diagnostic=dict(
591
+ default="aromepi",
579
592
  )
580
593
  ),
581
- only=dict(
582
- before_cycle = ArpIfsSimplifiedCycle('cy46')
583
- )
594
+ only=dict(before_cycle=ArpIfsSimplifiedCycle("cy46")),
584
595
  )
585
596
 
586
597
 
@@ -588,26 +599,27 @@ class IOPoll(Script):
588
599
  """
589
600
  The IOPoll script. A Genvkey can be given.
590
601
  """
602
+
591
603
  _footprint = [
592
604
  gvar,
593
605
  dict(
594
- info='IOPoll script',
606
+ info="IOPoll script",
595
607
  attr=dict(
596
608
  kind=dict(
597
- optional = False,
598
- values=['iopoll', 'io_poll'],
599
- remap=dict(autoremap='first'),
609
+ optional=False,
610
+ values=["iopoll", "io_poll"],
611
+ remap=dict(autoremap="first"),
600
612
  ),
601
613
  gvar=dict(
602
- default='tools_io_poll',
614
+ default="tools_io_poll",
603
615
  ),
604
- )
605
- )
616
+ ),
617
+ ),
606
618
  ]
607
619
 
608
620
  @property
609
621
  def realkind(self):
610
- return 'iopoll'
622
+ return "iopoll"
611
623
 
612
624
 
613
625
  class LFITools(BlackBox):
@@ -616,21 +628,21 @@ class LFITools(BlackBox):
616
628
  _footprint = [
617
629
  gvar,
618
630
  dict(
619
- info = 'Tool to handle LFI/FA files',
620
- attr = dict(
621
- kind = dict(
622
- values = ['lfitools', ],
623
- ),
624
- gvar = dict(
625
- default = 'master_lfitools'
631
+ info="Tool to handle LFI/FA files",
632
+ attr=dict(
633
+ kind=dict(
634
+ values=[
635
+ "lfitools",
636
+ ],
626
637
  ),
627
- )
628
- )
638
+ gvar=dict(default="master_lfitools"),
639
+ ),
640
+ ),
629
641
  ]
630
642
 
631
643
  @property
632
644
  def realkind(self):
633
- return 'lfitools'
645
+ return "lfitools"
634
646
 
635
647
 
636
648
  class SFXTools(BlackBox):
@@ -639,21 +651,21 @@ class SFXTools(BlackBox):
639
651
  _footprint = [
640
652
  gvar,
641
653
  dict(
642
- info = 'Tool that handles Surfex files',
643
- attr = dict(
644
- kind = dict(
645
- values = ['sfxtools', ],
646
- ),
647
- gvar = dict(
648
- default = 'master_sfxtools'
654
+ info="Tool that handles Surfex files",
655
+ attr=dict(
656
+ kind=dict(
657
+ values=[
658
+ "sfxtools",
659
+ ],
649
660
  ),
650
- )
651
- )
661
+ gvar=dict(default="master_sfxtools"),
662
+ ),
663
+ ),
652
664
  ]
653
665
 
654
666
  @property
655
667
  def realkind(self):
656
- return 'sfxtools'
668
+ return "sfxtools"
657
669
 
658
670
 
659
671
  @gmkpack_bin_deco
@@ -663,21 +675,19 @@ class Combi(BlackBox):
663
675
  _footprint = [
664
676
  gvar,
665
677
  dict(
666
- info = 'Tool to build EPS initial conditions',
667
- attr = dict(
668
- kind = dict(
669
- values = ['combi'],
670
- ),
671
- gvar = dict(
672
- default = 'master_combi'
678
+ info="Tool to build EPS initial conditions",
679
+ attr=dict(
680
+ kind=dict(
681
+ values=["combi"],
673
682
  ),
674
- )
675
- )
683
+ gvar=dict(default="master_combi"),
684
+ ),
685
+ ),
676
686
  ]
677
687
 
678
688
  @property
679
689
  def realkind(self):
680
- return 'combi'
690
+ return "combi"
681
691
 
682
692
 
683
693
  @gmkpack_bin_deco
@@ -687,21 +697,19 @@ class Gobptout(BlackBox):
687
697
  _footprint = [
688
698
  gvar,
689
699
  dict(
690
- info = 'Gobptout utility for grib conversion',
691
- attr = dict(
692
- gvar = dict(
693
- default = 'master_gobtout'
694
- ),
695
- kind = dict(
696
- values = ['gobptout'],
700
+ info="Gobptout utility for grib conversion",
701
+ attr=dict(
702
+ gvar=dict(default="master_gobtout"),
703
+ kind=dict(
704
+ values=["gobptout"],
697
705
  ),
698
- )
699
- )
706
+ ),
707
+ ),
700
708
  ]
701
709
 
702
710
  @property
703
711
  def realkind(self):
704
- return 'gobptout'
712
+ return "gobptout"
705
713
 
706
714
 
707
715
  @gmkpack_bin_deco
@@ -711,21 +719,19 @@ class Clust(BlackBox):
711
719
  _footprint = [
712
720
  gvar,
713
721
  dict(
714
- info = 'Tool that selects a subset of EPS members using the Clustering method',
715
- attr = dict(
716
- kind = dict(
717
- values = ['clust'],
718
- ),
719
- gvar = dict(
720
- default = 'master_clust'
722
+ info="Tool that selects a subset of EPS members using the Clustering method",
723
+ attr=dict(
724
+ kind=dict(
725
+ values=["clust"],
721
726
  ),
722
- )
723
- )
727
+ gvar=dict(default="master_clust"),
728
+ ),
729
+ ),
724
730
  ]
725
731
 
726
732
  @property
727
733
  def realkind(self):
728
- return 'clust'
734
+ return "clust"
729
735
 
730
736
 
731
737
  @gmkpack_bin_deco
@@ -735,21 +741,19 @@ class PertSurf(BlackBox):
735
741
  _footprint = [
736
742
  gvar,
737
743
  dict(
738
- info = 'Tool that adds perturbations to surface fields',
739
- attr = dict(
740
- kind = dict(
741
- values = ['pertsurf'],
742
- ),
743
- gvar = dict(
744
- default = 'master_pertsurf'
744
+ info="Tool that adds perturbations to surface fields",
745
+ attr=dict(
746
+ kind=dict(
747
+ values=["pertsurf"],
745
748
  ),
746
- )
747
- )
749
+ gvar=dict(default="master_pertsurf"),
750
+ ),
751
+ ),
748
752
  ]
749
753
 
750
754
  @property
751
755
  def realkind(self):
752
- return 'pertsurf'
756
+ return "pertsurf"
753
757
 
754
758
 
755
759
  @gmkpack_bin_deco
@@ -762,21 +766,19 @@ class AddPearp(BlackBox):
762
766
  _footprint = [
763
767
  gvar,
764
768
  dict(
765
- info = 'Tool that adds perturbations taken from a given PEARP member',
766
- attr = dict(
767
- kind = dict(
768
- values = ['addpearp'],
769
- ),
770
- gvar = dict(
771
- default = 'master_addpearp'
769
+ info="Tool that adds perturbations taken from a given PEARP member",
770
+ attr=dict(
771
+ kind=dict(
772
+ values=["addpearp"],
772
773
  ),
773
- )
774
- )
774
+ gvar=dict(default="master_addpearp"),
775
+ ),
776
+ ),
775
777
  ]
776
778
 
777
779
  @property
778
780
  def realkind(self):
779
- return 'addpearp'
781
+ return "addpearp"
780
782
 
781
783
 
782
784
  class BDMExecutableBUFR(Script):
@@ -785,45 +787,47 @@ class BDMExecutableBUFR(Script):
785
787
  _footprint = [
786
788
  gvar,
787
789
  dict(
788
- info = 'Executable to extract BDM files using Oulan',
789
- attr = dict(
790
- source = dict(
791
- values = ['alim.awk', 'alim_olive.awk'],
790
+ info="Executable to extract BDM files using Oulan",
791
+ attr=dict(
792
+ source=dict(
793
+ values=["alim.awk", "alim_olive.awk"],
792
794
  ),
793
- kind = dict(
794
- optional = False,
795
- values = ['bdm_bufr_extract', ],
795
+ kind=dict(
796
+ optional=False,
797
+ values=[
798
+ "bdm_bufr_extract",
799
+ ],
796
800
  ),
797
801
  gvar=dict(
798
- values=['extract_stuff'],
799
- default='extract_stuff',
802
+ values=["extract_stuff"],
803
+ default="extract_stuff",
800
804
  ),
801
- language = dict(
802
- default = 'awk',
803
- values = ['awk'],
804
- optional = True,
805
- )
806
- )
807
- )
805
+ language=dict(
806
+ default="awk",
807
+ values=["awk"],
808
+ optional=True,
809
+ ),
810
+ ),
811
+ ),
808
812
  ]
809
813
 
810
814
  @property
811
815
  def realkind(self):
812
- return 'bdm_bufr_extract'
816
+ return "bdm_bufr_extract"
813
817
 
814
818
  def gget_urlquery(self):
815
819
  """GGET specific query : ``extract``."""
816
- return 'extract=' + self.source
820
+ return "extract=" + self.source
817
821
 
818
822
  def command_line(self, **opts):
819
823
  """Returns optional attribute :attr:`rawopts`."""
820
824
  args = []
821
- if 'query' in opts:
822
- args.append(opts['query']) # The query name
825
+ if "query" in opts:
826
+ args.append(opts["query"]) # The query name
823
827
  superraw = super().command_line(**opts)
824
828
  if superraw:
825
829
  args.append(superraw) # Other arguments provided by the user
826
- return ' '.join(args)
830
+ return " ".join(args)
827
831
 
828
832
 
829
833
  class BDMExecutableOulan(BlackBox):
@@ -832,22 +836,24 @@ class BDMExecutableOulan(BlackBox):
832
836
  _footprint = [
833
837
  gvar,
834
838
  dict(
835
- info = 'Executable to extract BDM BUFR files',
836
- attr = dict(
837
- kind = dict(
838
- values = ['bdm_oulan_extract', ],
839
+ info="Executable to extract BDM BUFR files",
840
+ attr=dict(
841
+ kind=dict(
842
+ values=[
843
+ "bdm_oulan_extract",
844
+ ],
839
845
  ),
840
846
  gvar=dict(
841
- values=['master_oulan'],
842
- default='master_oulan',
847
+ values=["master_oulan"],
848
+ default="master_oulan",
843
849
  ),
844
- )
845
- )
850
+ ),
851
+ ),
846
852
  ]
847
853
 
848
854
  @property
849
855
  def realkind(self):
850
- return 'bdm_obsoul_extract'
856
+ return "bdm_obsoul_extract"
851
857
 
852
858
 
853
859
  class ExecMonitoring(BlackBox):
@@ -856,16 +862,14 @@ class ExecMonitoring(BlackBox):
856
862
  _footprint = [
857
863
  gvar,
858
864
  dict(
859
- info = 'Executable to compute monitoring statistics',
860
- attr = dict(
861
- gvar = dict(
862
- default = "master_monitoring"
865
+ info="Executable to compute monitoring statistics",
866
+ attr=dict(
867
+ gvar=dict(default="master_monitoring"),
868
+ kind=dict(
869
+ values=["exec_monitoring"],
863
870
  ),
864
- kind = dict(
865
- values = ['exec_monitoring'],
866
- )
867
- )
868
- )
871
+ ),
872
+ ),
869
873
  ]
870
874
 
871
875
 
@@ -875,21 +879,19 @@ class ExecReverser(BlackBox):
875
879
  _footprint = [
876
880
  gvar,
877
881
  dict(
878
- info='Executable to compute initial state for Ctpini',
882
+ info="Executable to compute initial state for Ctpini",
879
883
  attr=dict(
880
- gvar=dict(
881
- default="master_involive_km"
882
- ),
884
+ gvar=dict(default="master_involive_km"),
883
885
  kind=dict(
884
- values=['exec_reverser'],
886
+ values=["exec_reverser"],
885
887
  ),
886
- )
887
- )
888
+ ),
889
+ ),
888
890
  ]
889
891
 
890
892
  @property
891
893
  def realkind(self):
892
- return 'exec_reverser'
894
+ return "exec_reverser"
893
895
 
894
896
 
895
897
  @gmkpack_bin_deco
@@ -899,28 +901,30 @@ class Rgrid(BlackBox):
899
901
  _footprint = [
900
902
  gvar,
901
903
  dict(
902
- info = 'Executable to make a gaussian reduced grid',
903
- attr = dict(
904
- kind = dict(
905
- values = ['rgrid', ],
904
+ info="Executable to make a gaussian reduced grid",
905
+ attr=dict(
906
+ kind=dict(
907
+ values=[
908
+ "rgrid",
909
+ ],
906
910
  ),
907
911
  gvar=dict(
908
- values=['master_rgrid'],
909
- default='master_rgrid',
912
+ values=["master_rgrid"],
913
+ default="master_rgrid",
910
914
  ),
911
- )
912
- )
915
+ ),
916
+ ),
913
917
  ]
914
918
 
915
919
  @property
916
920
  def realkind(self):
917
- return 'rgrid'
921
+ return "rgrid"
918
922
 
919
923
  def command_line(self, **opts):
920
924
  args = []
921
925
  for k, v in opts.items():
922
- args.extend(['-' + k, v])
923
- return ' '.join(args)
926
+ args.extend(["-" + k, v])
927
+ return " ".join(args)
924
928
 
925
929
 
926
930
  @gmkpack_bin_deco
@@ -930,16 +934,18 @@ class Festat(BlackBox):
930
934
  _footprint = [
931
935
  gvar,
932
936
  dict(
933
- info = 'Executable to compute the B matrix',
934
- attr = dict(
935
- kind = dict(
936
- values = ["festat", ],
937
+ info="Executable to compute the B matrix",
938
+ attr=dict(
939
+ kind=dict(
940
+ values=[
941
+ "festat",
942
+ ],
937
943
  ),
938
- gvar = dict(
939
- optional = True,
944
+ gvar=dict(
945
+ optional=True,
940
946
  ),
941
- )
942
- )
947
+ ),
948
+ ),
943
949
  ]
944
950
 
945
951
 
@@ -949,21 +955,25 @@ class EnsembleDiagScript(GnuScript):
949
955
  _footprint = [
950
956
  gvar,
951
957
  dict(
952
- info='Script to compute some ensemble diagnostics.',
958
+ info="Script to compute some ensemble diagnostics.",
953
959
  attr=dict(
954
960
  kind=dict(
955
- values = ["ens_diag_script", ],
961
+ values=[
962
+ "ens_diag_script",
963
+ ],
956
964
  ),
957
965
  scope=dict(
958
- values = ["generic", ],
959
- optional = True,
960
- default = "generic",
966
+ values=[
967
+ "generic",
968
+ ],
969
+ optional=True,
970
+ default="generic",
961
971
  ),
962
972
  gvar=dict(
963
- default = "master_ensdiag_[scope]",
973
+ default="master_ensdiag_[scope]",
964
974
  ),
965
- )
966
- )
975
+ ),
976
+ ),
967
977
  ]
968
978
 
969
979
 
@@ -973,21 +983,19 @@ class DomeoForcing(BlackBox):
973
983
  _footprint = [
974
984
  gvar,
975
985
  dict(
976
- info = 'Some binary that tweak forcing files for domeo use',
977
- attr = dict(
978
- kind = dict(
979
- values = ['domeo_forcing'],
980
- ),
981
- gvar = dict(
982
- default = 'master_domeo_forcing'
986
+ info="Some binary that tweak forcing files for domeo use",
987
+ attr=dict(
988
+ kind=dict(
989
+ values=["domeo_forcing"],
983
990
  ),
984
- )
985
- )
991
+ gvar=dict(default="master_domeo_forcing"),
992
+ ),
993
+ ),
986
994
  ]
987
995
 
988
996
  @property
989
997
  def realkind(self):
990
- return 'domeo_forcing'
998
+ return "domeo_forcing"
991
999
 
992
1000
 
993
1001
  class DomeoScriptDataCor(Script):
@@ -996,24 +1004,22 @@ class DomeoScriptDataCor(Script):
996
1004
  _footprint = [
997
1005
  gvar,
998
1006
  dict(
999
- info = 'correction script',
1000
- attr = dict(
1001
- kind = dict(
1002
- values = ['domeo_cor_script']
1003
- ),
1004
- purpose = dict(
1005
- values = ['forcing', 'crop'],
1007
+ info="correction script",
1008
+ attr=dict(
1009
+ kind=dict(values=["domeo_cor_script"]),
1010
+ purpose=dict(
1011
+ values=["forcing", "crop"],
1006
1012
  ),
1007
- gvar = dict(
1008
- default = 'scr_domeo_cor_[purpose]',
1013
+ gvar=dict(
1014
+ default="scr_domeo_cor_[purpose]",
1009
1015
  ),
1010
- )
1011
- )
1016
+ ),
1017
+ ),
1012
1018
  ]
1013
1019
 
1014
1020
  @property
1015
1021
  def realkind(self):
1016
- return 'domeo_cor_script'
1022
+ return "domeo_cor_script"
1017
1023
 
1018
1024
 
1019
1025
  class Xios(BlackBox):
@@ -1022,18 +1028,18 @@ class Xios(BlackBox):
1022
1028
  _footprint = [
1023
1029
  gvar,
1024
1030
  dict(
1025
- info = 'The XIOS I/O Server.',
1026
- attr = dict(
1027
- kind = dict(
1028
- values = ['xios', ],
1029
- ),
1030
- gvar = dict(
1031
- default = 'master_xios'
1031
+ info="The XIOS I/O Server.",
1032
+ attr=dict(
1033
+ kind=dict(
1034
+ values=[
1035
+ "xios",
1036
+ ],
1032
1037
  ),
1033
- )
1034
- )
1038
+ gvar=dict(default="master_xios"),
1039
+ ),
1040
+ ),
1035
1041
  ]
1036
1042
 
1037
1043
  @property
1038
1044
  def realkind(self):
1039
- return 'xios'
1045
+ return "xios"