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.
Files changed (141) hide show
  1. vortex/__init__.py +75 -47
  2. vortex/algo/__init__.py +3 -2
  3. vortex/algo/components.py +944 -618
  4. vortex/algo/mpitools.py +802 -497
  5. vortex/algo/mpitools_templates/__init__.py +1 -0
  6. vortex/algo/serversynctools.py +34 -33
  7. vortex/config.py +19 -22
  8. vortex/data/__init__.py +9 -3
  9. vortex/data/abstractstores.py +593 -655
  10. vortex/data/containers.py +217 -162
  11. vortex/data/contents.py +65 -39
  12. vortex/data/executables.py +93 -102
  13. vortex/data/flow.py +40 -34
  14. vortex/data/geometries.py +228 -132
  15. vortex/data/handlers.py +436 -227
  16. vortex/data/outflow.py +15 -15
  17. vortex/data/providers.py +185 -163
  18. vortex/data/resources.py +48 -42
  19. vortex/data/stores.py +540 -417
  20. vortex/data/sync_templates/__init__.py +0 -0
  21. vortex/gloves.py +114 -87
  22. vortex/layout/__init__.py +1 -8
  23. vortex/layout/contexts.py +150 -84
  24. vortex/layout/dataflow.py +353 -202
  25. vortex/layout/monitor.py +264 -128
  26. vortex/nwp/__init__.py +5 -2
  27. vortex/nwp/algo/__init__.py +14 -5
  28. vortex/nwp/algo/assim.py +205 -151
  29. vortex/nwp/algo/clim.py +683 -517
  30. vortex/nwp/algo/coupling.py +447 -225
  31. vortex/nwp/algo/eda.py +437 -229
  32. vortex/nwp/algo/eps.py +403 -231
  33. vortex/nwp/algo/forecasts.py +416 -275
  34. vortex/nwp/algo/fpserver.py +683 -307
  35. vortex/nwp/algo/ifsnaming.py +205 -145
  36. vortex/nwp/algo/ifsroot.py +215 -122
  37. vortex/nwp/algo/monitoring.py +137 -76
  38. vortex/nwp/algo/mpitools.py +330 -190
  39. vortex/nwp/algo/odbtools.py +637 -353
  40. vortex/nwp/algo/oopsroot.py +454 -273
  41. vortex/nwp/algo/oopstests.py +90 -56
  42. vortex/nwp/algo/request.py +287 -206
  43. vortex/nwp/algo/stdpost.py +878 -522
  44. vortex/nwp/data/__init__.py +22 -4
  45. vortex/nwp/data/assim.py +125 -137
  46. vortex/nwp/data/boundaries.py +121 -68
  47. vortex/nwp/data/climfiles.py +193 -211
  48. vortex/nwp/data/configfiles.py +73 -69
  49. vortex/nwp/data/consts.py +426 -401
  50. vortex/nwp/data/ctpini.py +59 -43
  51. vortex/nwp/data/diagnostics.py +94 -66
  52. vortex/nwp/data/eda.py +50 -51
  53. vortex/nwp/data/eps.py +195 -146
  54. vortex/nwp/data/executables.py +440 -434
  55. vortex/nwp/data/fields.py +63 -48
  56. vortex/nwp/data/gridfiles.py +183 -111
  57. vortex/nwp/data/logs.py +250 -217
  58. vortex/nwp/data/modelstates.py +180 -151
  59. vortex/nwp/data/monitoring.py +72 -99
  60. vortex/nwp/data/namelists.py +254 -202
  61. vortex/nwp/data/obs.py +400 -308
  62. vortex/nwp/data/oopsexec.py +22 -20
  63. vortex/nwp/data/providers.py +90 -65
  64. vortex/nwp/data/query.py +71 -82
  65. vortex/nwp/data/stores.py +49 -36
  66. vortex/nwp/data/surfex.py +136 -137
  67. vortex/nwp/syntax/__init__.py +1 -1
  68. vortex/nwp/syntax/stdattrs.py +173 -111
  69. vortex/nwp/tools/__init__.py +2 -2
  70. vortex/nwp/tools/addons.py +22 -17
  71. vortex/nwp/tools/agt.py +24 -12
  72. vortex/nwp/tools/bdap.py +16 -5
  73. vortex/nwp/tools/bdcp.py +4 -1
  74. vortex/nwp/tools/bdm.py +3 -0
  75. vortex/nwp/tools/bdmp.py +14 -9
  76. vortex/nwp/tools/conftools.py +728 -378
  77. vortex/nwp/tools/drhook.py +12 -8
  78. vortex/nwp/tools/grib.py +65 -39
  79. vortex/nwp/tools/gribdiff.py +22 -17
  80. vortex/nwp/tools/ifstools.py +82 -42
  81. vortex/nwp/tools/igastuff.py +167 -143
  82. vortex/nwp/tools/mars.py +14 -2
  83. vortex/nwp/tools/odb.py +234 -125
  84. vortex/nwp/tools/partitioning.py +61 -37
  85. vortex/nwp/tools/satrad.py +27 -12
  86. vortex/nwp/util/async.py +83 -55
  87. vortex/nwp/util/beacon.py +10 -10
  88. vortex/nwp/util/diffpygram.py +174 -86
  89. vortex/nwp/util/ens.py +144 -63
  90. vortex/nwp/util/hooks.py +30 -19
  91. vortex/nwp/util/taskdeco.py +28 -24
  92. vortex/nwp/util/usepygram.py +278 -172
  93. vortex/nwp/util/usetnt.py +31 -17
  94. vortex/sessions.py +72 -39
  95. vortex/syntax/__init__.py +1 -1
  96. vortex/syntax/stdattrs.py +410 -171
  97. vortex/syntax/stddeco.py +31 -22
  98. vortex/toolbox.py +327 -192
  99. vortex/tools/__init__.py +11 -2
  100. vortex/tools/actions.py +110 -121
  101. vortex/tools/addons.py +111 -92
  102. vortex/tools/arm.py +42 -22
  103. vortex/tools/compression.py +72 -69
  104. vortex/tools/date.py +11 -4
  105. vortex/tools/delayedactions.py +242 -132
  106. vortex/tools/env.py +75 -47
  107. vortex/tools/folder.py +342 -171
  108. vortex/tools/grib.py +341 -162
  109. vortex/tools/lfi.py +423 -216
  110. vortex/tools/listings.py +109 -40
  111. vortex/tools/names.py +218 -156
  112. vortex/tools/net.py +655 -299
  113. vortex/tools/parallelism.py +93 -61
  114. vortex/tools/prestaging.py +55 -31
  115. vortex/tools/schedulers.py +172 -105
  116. vortex/tools/services.py +403 -334
  117. vortex/tools/storage.py +293 -358
  118. vortex/tools/surfex.py +24 -24
  119. vortex/tools/systems.py +1234 -643
  120. vortex/tools/targets.py +156 -100
  121. vortex/util/__init__.py +1 -1
  122. vortex/util/config.py +378 -327
  123. vortex/util/empty.py +2 -2
  124. vortex/util/helpers.py +56 -24
  125. vortex/util/introspection.py +18 -12
  126. vortex/util/iosponge.py +8 -4
  127. vortex/util/roles.py +4 -6
  128. vortex/util/storefunctions.py +39 -13
  129. vortex/util/structs.py +3 -3
  130. vortex/util/worker.py +29 -17
  131. vortex_nwp-2.1.0.dist-info/METADATA +67 -0
  132. vortex_nwp-2.1.0.dist-info/RECORD +144 -0
  133. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/WHEEL +1 -1
  134. vortex/layout/appconf.py +0 -109
  135. vortex/layout/jobs.py +0 -1276
  136. vortex/layout/nodes.py +0 -1424
  137. vortex/layout/subjobs.py +0 -464
  138. vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
  139. vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
  140. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info/licenses}/LICENSE +0 -0
  141. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/top_level.txt +0 -0
@@ -12,32 +12,31 @@ from ..syntax.stdattrs import gvar, gdomain
12
12
  __all__ = []
13
13
 
14
14
 
15
- @namebuilding_insert('radical', lambda s: 'clim')
15
+ @namebuilding_insert("radical", lambda s: "clim")
16
16
  class GenericClim(ModelGeoResource):
17
17
  """Abstract class for a model climatology.
18
18
 
19
19
  An HorizontalGeometry object is needed. A Genvkey can be given.
20
20
  """
21
+
21
22
  _abstract = True
22
23
  _footprint = [
23
24
  gvar,
24
25
  dict(
25
- info = 'Model climatology',
26
- attr = dict(
27
- kind = dict(
28
- values = ['clim_model']
29
- ),
30
- nativefmt = dict(
31
- values = ['fa'],
32
- default = 'fa',
26
+ info="Model climatology",
27
+ attr=dict(
28
+ kind=dict(values=["clim_model"]),
29
+ nativefmt=dict(
30
+ values=["fa"],
31
+ default="fa",
33
32
  ),
34
- )
35
- )
33
+ ),
34
+ ),
36
35
  ]
37
36
 
38
37
  @property
39
38
  def realkind(self):
40
- return 'clim_model'
39
+ return "clim_model"
41
40
 
42
41
  @property
43
42
  def truncation(self):
@@ -46,7 +45,7 @@ class GenericClim(ModelGeoResource):
46
45
 
47
46
  def olive_basename(self):
48
47
  """OLIVE specific naming convention."""
49
- return 'Const.Clim'
48
+ return "Const.Clim"
50
49
 
51
50
 
52
51
  class GlobalClim(GenericClim):
@@ -54,16 +53,13 @@ class GlobalClim(GenericClim):
54
53
 
55
54
  A SpectralGeometry object is needed. A Genvkey can be given.
56
55
  """
56
+
57
57
  _footprint = dict(
58
- info = 'Model climatology for Global Models',
59
- attr = dict(
60
- model = dict(
61
- values = ['arpege']
62
- ),
63
- gvar = dict(
64
- default = 'clim_[model]_[geometry::gco_grid_def]'
65
- ),
66
- )
58
+ info="Model climatology for Global Models",
59
+ attr=dict(
60
+ model=dict(values=["arpege"]),
61
+ gvar=dict(default="clim_[model]_[geometry::gco_grid_def]"),
62
+ ),
67
63
  )
68
64
 
69
65
 
@@ -76,8 +72,8 @@ class MonthlyGlobalClim(GlobalClim):
76
72
  _footprint = [
77
73
  month_deco,
78
74
  dict(
79
- info = 'Monthly model climatology for Global Models',
80
- )
75
+ info="Monthly model climatology for Global Models",
76
+ ),
81
77
  ]
82
78
 
83
79
 
@@ -87,19 +83,18 @@ class ClimLAM(GenericClim):
87
83
  A SpectralGeometry object is needed. A Genvkey can be given
88
84
  with a default name retrieved thanks to a GenvDomain object.
89
85
  """
86
+
90
87
  _footprint = [
91
88
  gdomain,
92
89
  dict(
93
- info = 'Model climatology for Local Area Models',
94
- attr = dict(
95
- model = dict(
96
- values = ['aladin', 'arome', 'alaro', 'harmoniearome']
97
- ),
98
- gvar = dict(
99
- default = 'clim_[geometry::gco_grid_def]'
90
+ info="Model climatology for Local Area Models",
91
+ attr=dict(
92
+ model=dict(
93
+ values=["aladin", "arome", "alaro", "harmoniearome"]
100
94
  ),
101
- )
102
- )
95
+ gvar=dict(default="clim_[geometry::gco_grid_def]"),
96
+ ),
97
+ ),
103
98
  ]
104
99
 
105
100
 
@@ -113,8 +108,8 @@ class MonthlyClimLAM(ClimLAM):
113
108
  _footprint = [
114
109
  month_deco,
115
110
  dict(
116
- info = 'Monthly model climatology for Local Area Models',
117
- )
111
+ info="Monthly model climatology for Local Area Models",
112
+ ),
118
113
  ]
119
114
 
120
115
 
@@ -124,27 +119,24 @@ class ClimBDAP(GenericClim):
124
119
  A LonlatGeometry object is needed. A Genvkey can be given
125
120
  with a default name retrieved thanks to a GenvDomain object.
126
121
  """
122
+
127
123
  _footprint = [
128
124
  gdomain,
129
125
  dict(
130
- info = 'Bdap climatology',
131
- attr = dict(
132
- kind = dict(
133
- values = ['clim_bdap']
134
- ),
135
- geometry = dict(
136
- type = LonlatGeometry,
126
+ info="Bdap climatology",
127
+ attr=dict(
128
+ kind=dict(values=["clim_bdap"]),
129
+ geometry=dict(
130
+ type=LonlatGeometry,
137
131
  ),
138
- gvar = dict(
139
- default = 'clim_dap_[gdomain]'
140
- ),
141
- )
142
- )
132
+ gvar=dict(default="clim_dap_[gdomain]"),
133
+ ),
134
+ ),
143
135
  ]
144
136
 
145
137
  @property
146
138
  def realkind(self):
147
- return 'clim_bdap'
139
+ return "clim_bdap"
148
140
 
149
141
 
150
142
  class MonthlyClimBDAP(ClimBDAP):
@@ -157,8 +149,8 @@ class MonthlyClimBDAP(ClimBDAP):
157
149
  _footprint = [
158
150
  month_deco,
159
151
  dict(
160
- info = 'Monthly Bdap climatology',
161
- )
152
+ info="Monthly Bdap climatology",
153
+ ),
162
154
  ]
163
155
 
164
156
 
@@ -170,30 +162,29 @@ class GTOPO30DerivedDB(StaticGeoResource):
170
162
 
171
163
  A Genvkey can be given.
172
164
  """
165
+
173
166
  _footprint = [
174
167
  gvar,
175
168
  dict(
176
- info = 'Database for GTOPO30-derived parameters.',
177
- attr = dict(
178
- kind = dict(
179
- values = ['misc_orography'],
169
+ info="Database for GTOPO30-derived parameters.",
170
+ attr=dict(
171
+ kind=dict(
172
+ values=["misc_orography"],
180
173
  ),
181
- source = dict(
182
- values = ['GTOPO30'],
174
+ source=dict(
175
+ values=["GTOPO30"],
183
176
  ),
184
- geometry = dict(
185
- values = ['global2m5'],
177
+ geometry=dict(
178
+ values=["global2m5"],
186
179
  ),
187
- gvar = dict(
188
- default = '[source]_[kind]'
189
- ),
190
- )
191
- )
180
+ gvar=dict(default="[source]_[kind]"),
181
+ ),
182
+ ),
192
183
  ]
193
184
 
194
185
  @property
195
186
  def realkind(self):
196
- return 'misc_orography'
187
+ return "misc_orography"
197
188
 
198
189
 
199
190
  class UrbanisationDB(StaticGeoResource):
@@ -201,30 +192,29 @@ class UrbanisationDB(StaticGeoResource):
201
192
 
202
193
  A Genvkey can be given.
203
194
  """
195
+
204
196
  _footprint = [
205
197
  gvar,
206
198
  dict(
207
- info = 'Database for urbanisation.',
208
- attr = dict(
209
- kind = dict(
210
- values = ['urbanisation'],
211
- ),
212
- source = dict(
213
- type = str,
199
+ info="Database for urbanisation.",
200
+ attr=dict(
201
+ kind=dict(
202
+ values=["urbanisation"],
214
203
  ),
215
- geometry = dict(
216
- values = ['global2m5'],
204
+ source=dict(
205
+ type=str,
217
206
  ),
218
- gvar = dict(
219
- default = '[source]_[kind]'
207
+ geometry=dict(
208
+ values=["global2m5"],
220
209
  ),
221
- )
222
- )
210
+ gvar=dict(default="[source]_[kind]"),
211
+ ),
212
+ ),
223
213
  ]
224
214
 
225
215
  @property
226
216
  def realkind(self):
227
- return 'urbanisation'
217
+ return "urbanisation"
228
218
 
229
219
 
230
220
  class WaterPercentageDB(StaticGeoResource):
@@ -232,30 +222,29 @@ class WaterPercentageDB(StaticGeoResource):
232
222
 
233
223
  A Genvkey can be given.
234
224
  """
225
+
235
226
  _footprint = [
236
227
  gvar,
237
228
  dict(
238
- info = 'Database for water percentage.',
239
- attr = dict(
240
- kind = dict(
241
- values = ['water_percentage'],
242
- ),
243
- source = dict(
244
- type = str,
229
+ info="Database for water percentage.",
230
+ attr=dict(
231
+ kind=dict(
232
+ values=["water_percentage"],
245
233
  ),
246
- geometry = dict(
247
- values = ['global2m5'],
234
+ source=dict(
235
+ type=str,
248
236
  ),
249
- gvar = dict(
250
- default = '[source]_[kind]'
237
+ geometry=dict(
238
+ values=["global2m5"],
251
239
  ),
252
- )
253
- )
240
+ gvar=dict(default="[source]_[kind]"),
241
+ ),
242
+ ),
254
243
  ]
255
244
 
256
245
  @property
257
246
  def realkind(self):
258
- return 'water_percentage'
247
+ return "water_percentage"
259
248
 
260
249
 
261
250
  class SoilANdVegDB(StaticGeoResource):
@@ -263,30 +252,29 @@ class SoilANdVegDB(StaticGeoResource):
263
252
 
264
253
  A Genvkey can be given.
265
254
  """
255
+
266
256
  _footprint = [
267
257
  gvar,
268
258
  dict(
269
- info = 'Database for Soil and Vegetation.',
270
- attr = dict(
271
- kind = dict(
272
- values = ['soil_and_veg'],
273
- ),
274
- source = dict(
275
- type = str,
259
+ info="Database for Soil and Vegetation.",
260
+ attr=dict(
261
+ kind=dict(
262
+ values=["soil_and_veg"],
276
263
  ),
277
- geometry = dict(
278
- values = ['global1dg', 'europeb01'],
264
+ source=dict(
265
+ type=str,
279
266
  ),
280
- gvar = dict(
281
- default = '[source]_[kind]'
267
+ geometry=dict(
268
+ values=["global1dg", "europeb01"],
282
269
  ),
283
- )
284
- )
270
+ gvar=dict(default="[source]_[kind]"),
271
+ ),
272
+ ),
285
273
  ]
286
274
 
287
275
  @property
288
276
  def realkind(self):
289
- return 'soil_and_veg'
277
+ return "soil_and_veg"
290
278
 
291
279
 
292
280
  class MonthlyLAIDB(StaticGeoResource):
@@ -294,31 +282,30 @@ class MonthlyLAIDB(StaticGeoResource):
294
282
 
295
283
  A Genvkey can be given.
296
284
  """
285
+
297
286
  _footprint = [
298
287
  gvar,
299
288
  month_deco,
300
289
  dict(
301
- info = 'Database for monthly LAI.',
302
- attr = dict(
303
- kind = dict(
304
- values = ['LAI'],
305
- ),
306
- source = dict(
307
- type = str,
290
+ info="Database for monthly LAI.",
291
+ attr=dict(
292
+ kind=dict(
293
+ values=["LAI"],
308
294
  ),
309
- geometry = dict(
310
- values = ['global1dg', 'europeb01'],
295
+ source=dict(
296
+ type=str,
311
297
  ),
312
- gvar = dict(
313
- default = '[source]_[kind]'
298
+ geometry=dict(
299
+ values=["global1dg", "europeb01"],
314
300
  ),
315
- )
316
- )
301
+ gvar=dict(default="[source]_[kind]"),
302
+ ),
303
+ ),
317
304
  ]
318
305
 
319
306
  @property
320
307
  def realkind(self):
321
- return 'LAI'
308
+ return "LAI"
322
309
 
323
310
 
324
311
  class MonthlyVegDB(StaticGeoResource):
@@ -326,31 +313,30 @@ class MonthlyVegDB(StaticGeoResource):
326
313
 
327
314
  A Genvkey can be given.
328
315
  """
316
+
329
317
  _footprint = [
330
318
  gvar,
331
319
  month_deco,
332
320
  dict(
333
- info = 'Database for monthly vegetation.',
334
- attr = dict(
335
- kind = dict(
336
- values = ['vegetation'],
337
- ),
338
- source = dict(
339
- type = str,
321
+ info="Database for monthly vegetation.",
322
+ attr=dict(
323
+ kind=dict(
324
+ values=["vegetation"],
340
325
  ),
341
- geometry = dict(
342
- values = ['global1dg', 'europeb01'],
326
+ source=dict(
327
+ type=str,
343
328
  ),
344
- gvar = dict(
345
- default = '[source]_[kind]'
329
+ geometry=dict(
330
+ values=["global1dg", "europeb01"],
346
331
  ),
347
- )
348
- )
332
+ gvar=dict(default="[source]_[kind]"),
333
+ ),
334
+ ),
349
335
  ]
350
336
 
351
337
  @property
352
338
  def realkind(self):
353
- return 'vegetation'
339
+ return "vegetation"
354
340
 
355
341
 
356
342
  class SoilClimatologyDB(StaticGeoResource):
@@ -360,30 +346,29 @@ class SoilClimatologyDB(StaticGeoResource):
360
346
 
361
347
  A Genvkey can be given.
362
348
  """
349
+
363
350
  _footprint = [
364
351
  gvar,
365
352
  dict(
366
- info = 'Database for soil climatology parameters.',
367
- attr = dict(
368
- kind = dict(
369
- values = ['soil_clim'],
353
+ info="Database for soil climatology parameters.",
354
+ attr=dict(
355
+ kind=dict(
356
+ values=["soil_clim"],
370
357
  ),
371
- source = dict(
372
- type = str,
358
+ source=dict(
359
+ type=str,
373
360
  ),
374
- geometry = dict(
375
- values = ['globaln108', 'global1dg'],
361
+ geometry=dict(
362
+ values=["globaln108", "global1dg"],
376
363
  ),
377
- gvar = dict(
378
- default = '[source]_[kind]'
379
- ),
380
- )
381
- )
364
+ gvar=dict(default="[source]_[kind]"),
365
+ ),
366
+ ),
382
367
  ]
383
368
 
384
369
  @property
385
370
  def realkind(self):
386
- return 'soil_clim'
371
+ return "soil_clim"
387
372
 
388
373
 
389
374
  class SurfGeopotentialDB(StaticGeoResource):
@@ -393,30 +378,29 @@ class SurfGeopotentialDB(StaticGeoResource):
393
378
 
394
379
  A Genvkey can be given.
395
380
  """
381
+
396
382
  _footprint = [
397
383
  gvar,
398
384
  dict(
399
- info = 'Database for surface geopotential.',
400
- attr = dict(
401
- kind = dict(
402
- values = ['surfgeopotential'],
385
+ info="Database for surface geopotential.",
386
+ attr=dict(
387
+ kind=dict(
388
+ values=["surfgeopotential"],
403
389
  ),
404
- source = dict(
405
- type = str,
390
+ source=dict(
391
+ type=str,
406
392
  ),
407
- geometry = dict(
408
- values = ['global1dg'],
393
+ geometry=dict(
394
+ values=["global1dg"],
409
395
  ),
410
- gvar = dict(
411
- default = '[source]_[kind]'
412
- ),
413
- )
414
- )
396
+ gvar=dict(default="[source]_[kind]"),
397
+ ),
398
+ ),
415
399
  ]
416
400
 
417
401
  @property
418
402
  def realkind(self):
419
- return 'surfgeopotential'
403
+ return "surfgeopotential"
420
404
 
421
405
 
422
406
  class MonthlySoilClimatologyDB(SoilClimatologyDB):
@@ -426,11 +410,12 @@ class MonthlySoilClimatologyDB(SoilClimatologyDB):
426
410
 
427
411
  A Genvkey can be given.
428
412
  """
413
+
429
414
  _footprint = [
430
415
  month_deco,
431
416
  dict(
432
- info = 'Database for monthly soil climatology parameters.',
433
- )
417
+ info="Database for monthly soil climatology parameters.",
418
+ ),
434
419
  ]
435
420
 
436
421
 
@@ -441,26 +426,25 @@ class MonthlyChemicalDB(StaticGeoResource):
441
426
 
442
427
  A Genvkey can be given.
443
428
  """
429
+
444
430
  _footprint = [
445
431
  gvar,
446
432
  month_deco,
447
433
  dict(
448
- info = 'Database for monthly chemicals.',
449
- attr = dict(
450
- kind = dict(
451
- values = ['ozone', 'aerosols'],
452
- ),
453
- source = dict(
454
- type = str,
434
+ info="Database for monthly chemicals.",
435
+ attr=dict(
436
+ kind=dict(
437
+ values=["ozone", "aerosols"],
455
438
  ),
456
- geometry = dict(
457
- values = ['global2dg5', 'global5x4'],
439
+ source=dict(
440
+ type=str,
458
441
  ),
459
- gvar = dict(
460
- default = '[source]_[kind]'
442
+ geometry=dict(
443
+ values=["global2dg5", "global5x4"],
461
444
  ),
462
- )
463
- )
445
+ gvar=dict(default="[source]_[kind]"),
446
+ ),
447
+ ),
464
448
  ]
465
449
 
466
450
  @property
@@ -472,23 +456,23 @@ class GeometryIllustration(StaticGeoResource):
472
456
  """Illustration of a domain geographic coverage."""
473
457
 
474
458
  _footprint = dict(
475
- info = 'Illustration of a domain geographic coverage.',
476
- attr = dict(
477
- kind = dict(
478
- values = ['geometry_plot'],
459
+ info="Illustration of a domain geographic coverage.",
460
+ attr=dict(
461
+ kind=dict(
462
+ values=["geometry_plot"],
479
463
  ),
480
- nativefmt = dict(
481
- values = ['png', 'pdf'],
464
+ nativefmt=dict(
465
+ values=["png", "pdf"],
482
466
  ),
483
- )
467
+ ),
484
468
  )
485
469
 
486
470
  @property
487
471
  def realkind(self):
488
- return 'geometry_plot'
472
+ return "geometry_plot"
489
473
 
490
474
 
491
- @namebuilding_append('src', lambda s: [s.stat, s.level, s.nbfiles])
475
+ @namebuilding_append("src", lambda s: [s.stat, s.level, s.nbfiles])
492
476
  class Stabal(ModelGeoResource):
493
477
  """Spectral covariance operators.
494
478
 
@@ -503,35 +487,33 @@ class Stabal(ModelGeoResource):
503
487
  _footprint = [
504
488
  gvar,
505
489
  dict(
506
- info = 'Spectral covariance operators',
507
- attr = dict(
508
- kind = dict(
509
- values = ['stabal'],
510
- ),
511
- stat = dict(
512
- values = ['bal', 'cv', 'cvt'],
513
- ),
514
- level = dict(
515
- type = int,
516
- optional = True,
517
- default = 96,
518
- values = [41, 96],
519
- ),
520
- nbfiles = dict(
521
- default = 0,
522
- optional = True,
523
- type = int,
524
- ),
525
- gvar = dict(
526
- default = 'stabal[level]_[stat]'
527
- ),
528
- )
529
- )
490
+ info="Spectral covariance operators",
491
+ attr=dict(
492
+ kind=dict(
493
+ values=["stabal"],
494
+ ),
495
+ stat=dict(
496
+ values=["bal", "cv", "cvt"],
497
+ ),
498
+ level=dict(
499
+ type=int,
500
+ optional=True,
501
+ default=96,
502
+ values=[41, 96],
503
+ ),
504
+ nbfiles=dict(
505
+ default=0,
506
+ optional=True,
507
+ type=int,
508
+ ),
509
+ gvar=dict(default="stabal[level]_[stat]"),
510
+ ),
511
+ ),
530
512
  ]
531
513
 
532
514
  @property
533
515
  def realkind(self):
534
- return 'stabal'
516
+ return "stabal"
535
517
 
536
518
  @property
537
519
  def truncation(self):