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
@@ -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):