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
vortex/nwp/data/consts.py CHANGED
@@ -8,7 +8,11 @@ from vortex.data.contents import DataRaw, JsonDictContent, TextContent
8
8
  from vortex.data.geometries import GaussGeometry, LonlatGeometry
9
9
  from vortex.data.outflow import ModelGeoResource, ModelResource, StaticResource
10
10
  from vortex.syntax.stdattrs import month_deco
11
- from vortex.syntax.stddeco import namebuilding_append, namebuilding_delete, namebuilding_insert
11
+ from vortex.syntax.stddeco import (
12
+ namebuilding_append,
13
+ namebuilding_delete,
14
+ namebuilding_insert,
15
+ )
12
16
 
13
17
  #: No automatic export
14
18
  __all__ = []
@@ -18,159 +22,162 @@ class GenvModelResource(ModelResource):
18
22
  """Abstract class for gget driven resources."""
19
23
 
20
24
  _abstract = True
21
- _footprint = [gvar, ]
25
+ _footprint = [
26
+ gvar,
27
+ ]
22
28
 
23
29
 
24
30
  class GenvModelGeoResource(ModelGeoResource):
25
31
  """Abstract class for gget driven resources."""
26
32
 
27
33
  _abstract = True
28
- _footprint = [gvar, ]
34
+ _footprint = [
35
+ gvar,
36
+ ]
29
37
 
30
38
 
31
39
  class GPSList(GenvModelResource):
32
40
  """
33
41
  Class of a GPS satellite ground coefficients. A Genvkey can be given.
34
42
  """
43
+
35
44
  _footprint = dict(
36
- info = 'Set of GPS coefficients',
37
- attr = dict(
38
- kind = dict(
39
- values = ['gpslist', 'listgpssol'],
40
- remap = dict(listgpssol = 'gpslist'),
41
- ),
42
- clscontents = dict(
43
- default = TextContent,
45
+ info="Set of GPS coefficients",
46
+ attr=dict(
47
+ kind=dict(
48
+ values=["gpslist", "listgpssol"],
49
+ remap=dict(listgpssol="gpslist"),
44
50
  ),
45
- gvar = dict(
46
- default = 'list_gpssol'
51
+ clscontents=dict(
52
+ default=TextContent,
47
53
  ),
48
- )
54
+ gvar=dict(default="list_gpssol"),
55
+ ),
49
56
  )
50
57
 
51
58
  @property
52
59
  def realkind(self):
53
- return 'gpslist'
60
+ return "gpslist"
54
61
 
55
62
 
56
63
  class MODESList(GenvModelResource):
57
64
  """
58
65
  Class of a MODE-S satellite white list for Bator.
59
66
  """
67
+
60
68
  _footprint = dict(
61
- info = 'Set of MODE-S coefficients',
62
- attr = dict(
63
- kind = dict(
64
- values = ['modeslist', 'listmodes'],
65
- remap = dict(listmodes = 'modeslist'),
69
+ info="Set of MODE-S coefficients",
70
+ attr=dict(
71
+ kind=dict(
72
+ values=["modeslist", "listmodes"],
73
+ remap=dict(listmodes="modeslist"),
66
74
  ),
67
- clscontents = dict(
68
- default = TextContent,
75
+ clscontents=dict(
76
+ default=TextContent,
69
77
  ),
70
- gvar = dict(
71
- default = 'list_modes',
78
+ gvar=dict(
79
+ default="list_modes",
72
80
  ),
73
- )
81
+ ),
74
82
  )
75
83
 
76
84
  @property
77
85
  def realkind(self):
78
- return 'modeslist'
86
+ return "modeslist"
79
87
 
80
88
 
81
89
  class BatodbConf(GenvModelResource):
82
90
  """
83
91
  Default parameters for BATOR execution. A Genvkey can be given.
84
92
  """
93
+
85
94
  _footprint = dict(
86
- info = 'Batodb parametrization',
87
- attr = dict(
88
- kind = dict(
89
- values = ['batodbconf', 'batorconf', 'parambator'],
90
- remap = dict(
91
- parambator = 'batodbconf',
92
- batorconf = 'batodbconf',
95
+ info="Batodb parametrization",
96
+ attr=dict(
97
+ kind=dict(
98
+ values=["batodbconf", "batorconf", "parambator"],
99
+ remap=dict(
100
+ parambator="batodbconf",
101
+ batorconf="batodbconf",
93
102
  ),
94
103
  ),
95
- clscontents = dict(
96
- default = TextContent,
97
- ),
98
- gvar = dict(
99
- default = 'param_bator_cfg'
104
+ clscontents=dict(
105
+ default=TextContent,
100
106
  ),
101
- )
107
+ gvar=dict(default="param_bator_cfg"),
108
+ ),
102
109
  )
103
110
 
104
111
  @property
105
112
  def realkind(self):
106
- return 'batodbconf'
113
+ return "batodbconf"
107
114
 
108
115
 
109
116
  class BatorAveragingMask(GenvModelResource):
110
117
  """
111
118
  Configuration file that drives the averaging of radiances in Bator.'''
112
119
  """
120
+
113
121
  _footprint = dict(
114
- info = 'Definition file for the bator averaging',
115
- attr = dict(
116
- kind = dict(
117
- values = ['avgmask', ]
118
- ),
119
- sensor = dict(
122
+ info="Definition file for the bator averaging",
123
+ attr=dict(
124
+ kind=dict(
125
+ values=[
126
+ "avgmask",
127
+ ]
120
128
  ),
121
- clscontents = dict(
122
- default = TextContent,
129
+ sensor=dict(),
130
+ clscontents=dict(
131
+ default=TextContent,
123
132
  ),
124
- gvar = dict(
125
- default = 'MASK_[sensor]',
133
+ gvar=dict(
134
+ default="MASK_[sensor]",
126
135
  ),
127
- )
136
+ ),
128
137
  )
129
138
 
130
139
  @property
131
140
  def realkind(self):
132
- return 'avgmask'
141
+ return "avgmask"
133
142
 
134
143
 
135
144
  class AtmsMask(BatorAveragingMask):
136
145
  """Kept for backward compatibility with cy40 (see BatorAveragingMask)."""
146
+
137
147
  _footprint = dict(
138
- attr = dict(
139
- kind = dict(
140
- values = ['atms', 'atmsmask'],
141
- remap = dict(atms='atmsmask'),
148
+ attr=dict(
149
+ kind=dict(
150
+ values=["atms", "atmsmask"],
151
+ remap=dict(atms="atmsmask"),
142
152
  ),
143
- sensor = dict(
144
- default = 'atms',
145
- optional = True,
153
+ sensor=dict(
154
+ default="atms",
155
+ optional=True,
146
156
  ),
147
157
  )
148
158
  )
149
159
 
150
160
  @property
151
161
  def realkind(self):
152
- return 'atmsmask'
162
+ return "atmsmask"
153
163
 
154
164
 
155
165
  class RtCoef(GenvModelResource):
156
166
  """
157
167
  Class of a tar-zip file of satellite coefficients. A Genvkey can be given.
158
168
  """
169
+
159
170
  _footprint = dict(
160
- info = 'Set of satellite coefficients',
161
- attr = dict(
162
- kind = dict(
163
- values = ['rtcoef', 'mwave_rtcoef']
164
- ),
165
- gvar = dict(
166
- default = '[kind]_tgz'
167
- ),
168
- )
171
+ info="Set of satellite coefficients",
172
+ attr=dict(
173
+ kind=dict(values=["rtcoef", "mwave_rtcoef"]),
174
+ gvar=dict(default="[kind]_tgz"),
175
+ ),
169
176
  )
170
177
 
171
178
  @property
172
179
  def realkind(self):
173
- return 'rtcoef'
180
+ return "rtcoef"
174
181
 
175
182
 
176
183
  class RRTM(GenvModelResource):
@@ -178,21 +185,22 @@ class RRTM(GenvModelResource):
178
185
  Class of a tar-zip file of coefficients for radiative transfers computations.
179
186
  A Genvkey can be given.
180
187
  """
188
+
181
189
  _footprint = dict(
182
- info = 'Coefficients of RRTM scheme',
183
- attr = dict(
184
- kind = dict(
185
- values = ['rrtm', ]
186
- ),
187
- gvar = dict(
188
- default = 'rrtm_const'
190
+ info="Coefficients of RRTM scheme",
191
+ attr=dict(
192
+ kind=dict(
193
+ values=[
194
+ "rrtm",
195
+ ]
189
196
  ),
190
- )
197
+ gvar=dict(default="rrtm_const"),
198
+ ),
191
199
  )
192
200
 
193
201
  @property
194
202
  def realkind(self):
195
- return 'rrtm'
203
+ return "rrtm"
196
204
 
197
205
 
198
206
  class CoefModel(GenvModelResource):
@@ -200,22 +208,21 @@ class CoefModel(GenvModelResource):
200
208
  TODO.
201
209
  A Genvkey can be given.
202
210
  """
211
+
203
212
  _footprint = dict(
204
- info = 'Coefficients for some purpose... but which one ?',
205
- attr = dict(
206
- kind = dict(
207
- values = ['coef_model', 'coefmodel'],
208
- remap = dict(autoremap = 'first'),
209
- ),
210
- gvar = dict(
211
- default = 'coef_model'
213
+ info="Coefficients for some purpose... but which one ?",
214
+ attr=dict(
215
+ kind=dict(
216
+ values=["coef_model", "coefmodel"],
217
+ remap=dict(autoremap="first"),
212
218
  ),
213
- )
219
+ gvar=dict(default="coef_model"),
220
+ ),
214
221
  )
215
222
 
216
223
  @property
217
224
  def realkind(self):
218
- return 'coef_model'
225
+ return "coef_model"
219
226
 
220
227
 
221
228
  class ScatCMod5(GenvModelResource):
@@ -223,22 +230,21 @@ class ScatCMod5(GenvModelResource):
223
230
  TODO.
224
231
  A Genvkey can be given.
225
232
  """
233
+
226
234
  _footprint = dict(
227
- info = 'Coefficients for some purpose... but which one ?',
228
- attr = dict(
229
- kind = dict(
230
- values = ['cmod5', 'cmod5table', 'scat_cmod5', 'scatcmod5'],
231
- remap = dict(autoremap = 'first'),
232
- ),
233
- gvar = dict(
234
- default = 'scat_cmod5_table'
235
+ info="Coefficients for some purpose... but which one ?",
236
+ attr=dict(
237
+ kind=dict(
238
+ values=["cmod5", "cmod5table", "scat_cmod5", "scatcmod5"],
239
+ remap=dict(autoremap="first"),
235
240
  ),
236
- )
241
+ gvar=dict(default="scat_cmod5_table"),
242
+ ),
237
243
  )
238
244
 
239
245
  @property
240
246
  def realkind(self):
241
- return 'cmod5'
247
+ return "cmod5"
242
248
 
243
249
 
244
250
  class BcorIRSea(GenvModelResource):
@@ -246,24 +252,23 @@ class BcorIRSea(GenvModelResource):
246
252
  Obsolete.
247
253
  A Genvkey can be given.
248
254
  """
255
+
249
256
  _footprint = dict(
250
- info = 'Some bias ?',
251
- attr = dict(
252
- kind = dict(
253
- values = ['bcor'],
254
- ),
255
- scope = dict(
256
- values = ['irsea'],
257
+ info="Some bias ?",
258
+ attr=dict(
259
+ kind=dict(
260
+ values=["bcor"],
257
261
  ),
258
- gvar = dict(
259
- default = 'bcor_meto_[scope]'
262
+ scope=dict(
263
+ values=["irsea"],
260
264
  ),
261
- )
265
+ gvar=dict(default="bcor_meto_[scope]"),
266
+ ),
262
267
  )
263
268
 
264
269
  @property
265
270
  def realkind(self):
266
- return 'bcor_irsea'
271
+ return "bcor_irsea"
267
272
 
268
273
 
269
274
  class RmtbError(GenvModelResource):
@@ -271,24 +276,23 @@ class RmtbError(GenvModelResource):
271
276
  Obsolete.
272
277
  A Genvkey can be given.
273
278
  """
279
+
274
280
  _footprint = dict(
275
- info = 'Some bias ?',
276
- attr = dict(
277
- kind = dict(
278
- values = ['rmtberr'],
279
- ),
280
- scope = dict(
281
- values = ['airs', 'noaa'],
281
+ info="Some bias ?",
282
+ attr=dict(
283
+ kind=dict(
284
+ values=["rmtberr"],
282
285
  ),
283
- gvar = dict(
284
- default = '[scope]_rmtberr'
286
+ scope=dict(
287
+ values=["airs", "noaa"],
285
288
  ),
286
- )
289
+ gvar=dict(default="[scope]_rmtberr"),
290
+ ),
287
291
  )
288
292
 
289
293
  @property
290
294
  def realkind(self):
291
- return 'rmtberr'
295
+ return "rmtberr"
292
296
 
293
297
 
294
298
  class ChanSpectral(GenvModelResource):
@@ -296,27 +300,26 @@ class ChanSpectral(GenvModelResource):
296
300
  Obsolete.
297
301
  A Genvkey can be given.
298
302
  """
303
+
299
304
  _footprint = dict(
300
- info = 'Coefficients for some purpose... but which one ?',
301
- attr = dict(
302
- kind = dict(
303
- values = ['chanspec', 'chan_spec'],
304
- remap = dict(autoremap = 'first'),
305
- ),
306
- scope = dict(
307
- optional = True,
308
- default = 'noaa',
309
- values = ['noaa'],
305
+ info="Coefficients for some purpose... but which one ?",
306
+ attr=dict(
307
+ kind=dict(
308
+ values=["chanspec", "chan_spec"],
309
+ remap=dict(autoremap="first"),
310
310
  ),
311
- gvar = dict(
312
- default = '[scope]_chanspec'
311
+ scope=dict(
312
+ optional=True,
313
+ default="noaa",
314
+ values=["noaa"],
313
315
  ),
314
- )
316
+ gvar=dict(default="[scope]_chanspec"),
317
+ ),
315
318
  )
316
319
 
317
320
  @property
318
321
  def realkind(self):
319
- return 'chanspec'
322
+ return "chanspec"
320
323
 
321
324
 
322
325
  class Correl(GenvModelResource):
@@ -324,25 +327,24 @@ class Correl(GenvModelResource):
324
327
  TODO.
325
328
  A Genvkey can be given.
326
329
  """
330
+
327
331
  _footprint = dict(
328
- info = 'Coefficients for some purpose... but which one ?',
329
- attr = dict(
330
- kind = dict(
331
- values = ['correl'],
332
- ),
333
- scope = dict(
334
- optional = True,
335
- default = 'misc',
332
+ info="Coefficients for some purpose... but which one ?",
333
+ attr=dict(
334
+ kind=dict(
335
+ values=["correl"],
336
336
  ),
337
- gvar = dict(
338
- default = '[scope]_correl'
337
+ scope=dict(
338
+ optional=True,
339
+ default="misc",
339
340
  ),
340
- )
341
+ gvar=dict(default="[scope]_correl"),
342
+ ),
341
343
  )
342
344
 
343
345
  @property
344
346
  def realkind(self):
345
- return 'correl'
347
+ return "correl"
346
348
 
347
349
 
348
350
  class CstLim(GenvModelResource):
@@ -350,27 +352,26 @@ class CstLim(GenvModelResource):
350
352
  Obsolete.
351
353
  A Genvkey can be given.
352
354
  """
355
+
353
356
  _footprint = dict(
354
- info = 'Coefficients for some purpose... but which one ?',
355
- attr = dict(
356
- kind = dict(
357
- values = ['cstlim', 'cst_lim'],
358
- remap = dict(autoremap = 'first'),
359
- ),
360
- scope = dict(
361
- optional = True,
362
- default = 'noaa',
363
- values = ['noaa'],
357
+ info="Coefficients for some purpose... but which one ?",
358
+ attr=dict(
359
+ kind=dict(
360
+ values=["cstlim", "cst_lim"],
361
+ remap=dict(autoremap="first"),
364
362
  ),
365
- gvar = dict(
366
- default = '[scope]_cstlim'
363
+ scope=dict(
364
+ optional=True,
365
+ default="noaa",
366
+ values=["noaa"],
367
367
  ),
368
- )
368
+ gvar=dict(default="[scope]_cstlim"),
369
+ ),
369
370
  )
370
371
 
371
372
  @property
372
373
  def realkind(self):
373
- return 'cstlim'
374
+ return "cstlim"
374
375
 
375
376
 
376
377
  class RszCoef(GenvModelResource):
@@ -378,22 +379,21 @@ class RszCoef(GenvModelResource):
378
379
  Obsolete.
379
380
  A Genvkey can be given.
380
381
  """
382
+
381
383
  _footprint = dict(
382
- info = 'Coefficients for some purpose... but which one ?',
383
- attr = dict(
384
- kind = dict(
385
- values = ['rszcoef', 'rsz_coef'],
386
- remap = dict(autoremap = 'first'),
387
- ),
388
- gvar = dict(
389
- default = 'rszcoef_fmt'
384
+ info="Coefficients for some purpose... but which one ?",
385
+ attr=dict(
386
+ kind=dict(
387
+ values=["rszcoef", "rsz_coef"],
388
+ remap=dict(autoremap="first"),
390
389
  ),
391
- )
390
+ gvar=dict(default="rszcoef_fmt"),
391
+ ),
392
392
  )
393
393
 
394
394
  @property
395
395
  def realkind(self):
396
- return 'rszcoef'
396
+ return "rszcoef"
397
397
 
398
398
 
399
399
  class RtCoefAirs(GenvModelResource):
@@ -401,21 +401,20 @@ class RtCoefAirs(GenvModelResource):
401
401
  Obsolete.
402
402
  A Genvkey can be given.
403
403
  """
404
+
404
405
  _footprint = dict(
405
- info = 'Coefficients for some purpose... but which one ?',
406
- attr = dict(
407
- kind = dict(
408
- values = ['rtcoef_airs'],
409
- ),
410
- gvar = dict(
411
- default = 'rtcoef_airs_ieee'
406
+ info="Coefficients for some purpose... but which one ?",
407
+ attr=dict(
408
+ kind=dict(
409
+ values=["rtcoef_airs"],
412
410
  ),
413
- )
411
+ gvar=dict(default="rtcoef_airs_ieee"),
412
+ ),
414
413
  )
415
414
 
416
415
  @property
417
416
  def realkind(self):
418
- return 'rtcoef_airs'
417
+ return "rtcoef_airs"
419
418
 
420
419
 
421
420
  class RtCoefAtovs(GenvModelResource):
@@ -423,21 +422,20 @@ class RtCoefAtovs(GenvModelResource):
423
422
  Obsolete.
424
423
  A Genvkey can be given.
425
424
  """
425
+
426
426
  _footprint = dict(
427
- info = 'Coefficients for some purpose... but which one ?',
428
- attr = dict(
429
- kind = dict(
430
- values = ['rtcoef_atovs'],
431
- ),
432
- gvar = dict(
433
- default = 'rtcoef_ieee_atovs'
427
+ info="Coefficients for some purpose... but which one ?",
428
+ attr=dict(
429
+ kind=dict(
430
+ values=["rtcoef_atovs"],
434
431
  ),
435
- )
432
+ gvar=dict(default="rtcoef_ieee_atovs"),
433
+ ),
436
434
  )
437
435
 
438
436
  @property
439
437
  def realkind(self):
440
- return 'rtcoef_atovs'
438
+ return "rtcoef_atovs"
441
439
 
442
440
 
443
441
  class SigmaB(GenvModelResource):
@@ -445,42 +443,47 @@ class SigmaB(GenvModelResource):
445
443
  Obsolete.
446
444
  A Genvkey can be given.
447
445
  """
446
+
448
447
  _footprint = dict(
449
- info = 'Coefficients for some purpose... but which one ?',
450
- attr = dict(
451
- kind = dict(
452
- values = ['sigmab', 'sigma', 'sigma_b'],
453
- remap = dict(autoremap = 'first'),
454
- ),
455
- gvar = dict(
456
- default = 'misc_sigmab'
448
+ info="Coefficients for some purpose... but which one ?",
449
+ attr=dict(
450
+ kind=dict(
451
+ values=["sigmab", "sigma", "sigma_b"],
452
+ remap=dict(autoremap="first"),
457
453
  ),
458
- )
454
+ gvar=dict(default="misc_sigmab"),
455
+ ),
459
456
  )
460
457
 
461
458
  @property
462
459
  def realkind(self):
463
- return 'sigmab'
460
+ return "sigmab"
464
461
 
465
462
 
466
463
  class AtlasEmissivity(GenvModelResource):
467
464
  """
468
465
  Abstract class for any Emissivity atlas.
469
466
  """
467
+
470
468
  _abstract = True
471
469
  _footprint = dict(
472
- attr = dict(
473
- kind = dict(
474
- values = ['atlas_emissivity', 'atlasemissivity', 'atlasemiss', 'emiss',
475
- 'emissivity_atlas'],
476
- remap = dict(autoremap = 'first'),
470
+ attr=dict(
471
+ kind=dict(
472
+ values=[
473
+ "atlas_emissivity",
474
+ "atlasemissivity",
475
+ "atlasemiss",
476
+ "emiss",
477
+ "emissivity_atlas",
478
+ ],
479
+ remap=dict(autoremap="first"),
477
480
  ),
478
481
  )
479
482
  )
480
483
 
481
484
  @property
482
485
  def realkind(self):
483
- return 'atlas_emissivity'
486
+ return "atlas_emissivity"
484
487
 
485
488
 
486
489
  class AtlasEmissivityGeneric(AtlasEmissivity):
@@ -488,23 +491,24 @@ class AtlasEmissivityGeneric(AtlasEmissivity):
488
491
  A yearly emissivity atlas from a specific source.
489
492
  A Genvkey can be given.
490
493
  """
494
+
491
495
  _footprint = dict(
492
- info = 'Yearly emissivity atlas from a given source.',
493
- attr = dict(
494
- source = dict(
495
- values = ['uwir', 'telsem'],
496
- ),
497
- gvar = dict(
498
- default = '[source]_emis_atlas'
496
+ info="Yearly emissivity atlas from a given source.",
497
+ attr=dict(
498
+ source=dict(
499
+ values=["uwir", "telsem"],
499
500
  ),
500
- month = dict(
501
+ gvar=dict(default="[source]_emis_atlas"),
502
+ month=dict(
501
503
  # This is a fake attribute that avoid warnings...
502
- values = [None, ],
503
- optional = True,
504
- default = None,
505
- doc_visibility = footprints.doc.visibility.GURU,
506
- )
507
- )
504
+ values=[
505
+ None,
506
+ ],
507
+ optional=True,
508
+ default=None,
509
+ doc_visibility=footprints.doc.visibility.GURU,
510
+ ),
511
+ ),
508
512
  )
509
513
 
510
514
 
@@ -513,24 +517,33 @@ class AtlasEmissivityInstrument(AtlasEmissivity):
513
517
  A yearly emissivity atlas for a specific instrument/sensor.
514
518
  A Genvkey can be given.
515
519
  """
520
+
516
521
  _footprint = dict(
517
- info = 'Yearly emissivity atlas for a given instrument(s).',
518
- attr = dict(
519
- instrument = dict(
520
- values = ['seviri', 'ssmis', 'iasi', 'amsua', 'amsub', 'an1', 'an2'],
521
- remap = dict(an1='amsua', an2='amsub')
522
- ),
523
- gvar = dict(
524
- default = 'emissivity_atlas_[instrument]'
522
+ info="Yearly emissivity atlas for a given instrument(s).",
523
+ attr=dict(
524
+ instrument=dict(
525
+ values=[
526
+ "seviri",
527
+ "ssmis",
528
+ "iasi",
529
+ "amsua",
530
+ "amsub",
531
+ "an1",
532
+ "an2",
533
+ ],
534
+ remap=dict(an1="amsua", an2="amsub"),
525
535
  ),
526
- month = dict(
536
+ gvar=dict(default="emissivity_atlas_[instrument]"),
537
+ month=dict(
527
538
  # This is a fake attribute that avoid warnings...
528
- values = [None, ],
529
- optional = True,
530
- default = None,
531
- doc_visibility = footprints.doc.visibility.GURU,
532
- )
533
- )
539
+ values=[
540
+ None,
541
+ ],
542
+ optional=True,
543
+ default=None,
544
+ doc_visibility=footprints.doc.visibility.GURU,
545
+ ),
546
+ ),
534
547
  )
535
548
 
536
549
 
@@ -539,15 +552,14 @@ class AtlasMonthlyEmissivityInstrument(AtlasEmissivityInstrument):
539
552
  A monthly emissivity atlas for a specific instrument/sensor.
540
553
  A Genvkey can be given.
541
554
  """
555
+
542
556
  _footprint = [
543
557
  month_deco,
544
558
  dict(
545
- info = 'Monthly emissivity atlas for a given instrument(s).',
546
- attr = dict(
547
- gvar = dict(
548
- default = 'emissivity_atlas_[instrument]_monthly'
549
- ),
550
- )
559
+ info="Monthly emissivity atlas for a given instrument(s).",
560
+ attr=dict(
561
+ gvar=dict(default="emissivity_atlas_[instrument]_monthly"),
562
+ ),
551
563
  ),
552
564
  ]
553
565
 
@@ -557,16 +569,15 @@ class AtlasEmissivityPack(AtlasEmissivity):
557
569
  Legacy yearly emissivity atlases for Amsu-A/B. DEPRECIATED.
558
570
  A Genvkey can be given.
559
571
  """
572
+
560
573
  _footprint = dict(
561
- info = 'Atlas of emissivity according to some pack of instrument(s).',
562
- attr = dict(
563
- pack = dict(
564
- values = ['1', '2'],
565
- ),
566
- gvar = dict(
567
- default = 'emissivity[pack]'
574
+ info="Atlas of emissivity according to some pack of instrument(s).",
575
+ attr=dict(
576
+ pack=dict(
577
+ values=["1", "2"],
568
578
  ),
569
- )
579
+ gvar=dict(default="emissivity[pack]"),
580
+ ),
570
581
  )
571
582
 
572
583
 
@@ -575,16 +586,13 @@ class SeaIceLonLat(GenvModelGeoResource):
575
586
  Coordinates of the file containing sea ice observations.
576
587
  It is used to create the ice_content file.
577
588
  """
589
+
578
590
  _footprint = dict(
579
- info = 'Coordinates used for ice_concent creation.',
580
- attr = dict(
581
- kind = dict(
582
- values = ['seaice_lonlat']
583
- ),
584
- gvar = dict(
585
- default = 'sea_ice_lonlat'
586
- ),
587
- )
591
+ info="Coordinates used for ice_concent creation.",
592
+ attr=dict(
593
+ kind=dict(values=["seaice_lonlat"]),
594
+ gvar=dict(default="sea_ice_lonlat"),
595
+ ),
588
596
  )
589
597
 
590
598
 
@@ -593,37 +601,47 @@ class ODBRaw(GenvModelResource):
593
601
  Class for static ODB layouts RSTBIAS, COUNTRYRSTRHBIAS, SONDETYPERSTRHBIAS.
594
602
  A GenvKey can be given.
595
603
  """
604
+
596
605
  _footprint = dict(
597
- info = 'ODB Raw bias',
598
- attr = dict(
599
- kind = dict(
600
- values = ['odbraw'],
601
- ),
602
- layout = dict(
603
- values = [
604
- 'rstbias', 'countryrstrhbias', 'sondetyperstrhbias',
605
- 'RSTBIAS', 'COUNTRYRSTRHBIAS', 'SONDETYPERSTRHBIAS',
606
+ info="ODB Raw bias",
607
+ attr=dict(
608
+ kind=dict(
609
+ values=["odbraw"],
610
+ ),
611
+ layout=dict(
612
+ values=[
613
+ "rstbias",
614
+ "countryrstrhbias",
615
+ "sondetyperstrhbias",
616
+ "RSTBIAS",
617
+ "COUNTRYRSTRHBIAS",
618
+ "SONDETYPERSTRHBIAS",
606
619
  ],
607
- remap = dict(
608
- RSTBIAS = 'rstbias',
609
- COUNTRYRSTRHBIAS = 'countryrstrhbias',
610
- SONDETYPERSTRHBIAS = 'sondetyperstrhbias',
620
+ remap=dict(
621
+ RSTBIAS="rstbias",
622
+ COUNTRYRSTRHBIAS="countryrstrhbias",
623
+ SONDETYPERSTRHBIAS="sondetyperstrhbias",
611
624
  ),
612
625
  ),
613
- gvar = dict(
614
- default = 'rs_bias_odbtable_[layout]',
615
- )
616
- )
626
+ gvar=dict(
627
+ default="rs_bias_odbtable_[layout]",
628
+ ),
629
+ ),
617
630
  )
618
631
 
619
632
  @property
620
633
  def realkind(self):
621
- return 'odbraw'
634
+ return "odbraw"
622
635
 
623
636
 
624
- @namebuilding_delete('fmt')
625
- @namebuilding_insert('radical', lambda s: 'matfil')
626
- @namebuilding_append('geo', lambda s: [s.scope.area, ])
637
+ @namebuilding_delete("fmt")
638
+ @namebuilding_insert("radical", lambda s: "matfil")
639
+ @namebuilding_append(
640
+ "geo",
641
+ lambda s: [
642
+ s.scope.area,
643
+ ],
644
+ )
627
645
  class MatFilter(GenvModelGeoResource):
628
646
  """
629
647
  Class of a filtering matrix. A GaussGeometry object is needed,
@@ -633,35 +651,32 @@ class MatFilter(GenvModelGeoResource):
633
651
  """
634
652
 
635
653
  _footprint = dict(
636
- info = 'Filtering matrix',
637
- attr = dict(
638
- model = dict(
639
- optional = True,
640
- ),
641
- kind = dict(
642
- values = ['matfilter']
643
- ),
644
- geometry = dict(
645
- type = GaussGeometry
654
+ info="Filtering matrix",
655
+ attr=dict(
656
+ model=dict(
657
+ optional=True,
646
658
  ),
647
- scope = dict(
648
- type = LonlatGeometry,
659
+ kind=dict(values=["matfilter"]),
660
+ geometry=dict(type=GaussGeometry),
661
+ scope=dict(
662
+ type=LonlatGeometry,
649
663
  ),
650
- gvar = dict(
651
- default = 'mat_filter_[scope::area]'
652
- )
653
- )
664
+ gvar=dict(default="mat_filter_[scope::area]"),
665
+ ),
654
666
  )
655
667
 
656
668
  @property
657
669
  def realkind(self):
658
- return 'matfilter'
670
+ return "matfilter"
659
671
 
660
672
  def olive_basename(self):
661
673
  """OLIVE specific naming convention."""
662
- return ('matrix.fil.' + self.scope.area +
663
- '.t{!s}'.format(self.geometry.truncation) +
664
- '.c{!s}'.format(self.geometry.stretching))
674
+ return (
675
+ "matrix.fil."
676
+ + self.scope.area
677
+ + ".t{!s}".format(self.geometry.truncation)
678
+ + ".c{!s}".format(self.geometry.stretching)
679
+ )
665
680
 
666
681
 
667
682
  class WaveletTable(GenvModelGeoResource):
@@ -671,21 +686,25 @@ class WaveletTable(GenvModelGeoResource):
671
686
  """
672
687
 
673
688
  _footprint = dict(
674
- info = 'Wavelet covariance operators',
675
- attr = dict(
676
- kind = dict(
677
- values = ['wtable', 'wavelettable', 'wavelet_table', 'rtable', 'rtabwavelet'],
678
- remap = dict(autoremap = 'first'),
679
- ),
680
- gvar = dict(
681
- default = 'RTABLE_WAVELET'
689
+ info="Wavelet covariance operators",
690
+ attr=dict(
691
+ kind=dict(
692
+ values=[
693
+ "wtable",
694
+ "wavelettable",
695
+ "wavelet_table",
696
+ "rtable",
697
+ "rtabwavelet",
698
+ ],
699
+ remap=dict(autoremap="first"),
682
700
  ),
683
- )
701
+ gvar=dict(default="RTABLE_WAVELET"),
702
+ ),
684
703
  )
685
704
 
686
705
  @property
687
706
  def realkind(self):
688
- return 'wtable'
707
+ return "wtable"
689
708
 
690
709
 
691
710
  class AmvError(GenvModelGeoResource):
@@ -693,26 +712,27 @@ class AmvError(GenvModelGeoResource):
693
712
  TODO.
694
713
  A Genvkey can be given.
695
714
  """
715
+
696
716
  _footprint = dict(
697
- info='AMV Tracking Error',
717
+ info="AMV Tracking Error",
698
718
  attr=dict(
699
719
  kind=dict(
700
- values=['amvtrackingerror', 'amvtr', 'amverror', 'amv_error'],
720
+ values=["amvtrackingerror", "amvtr", "amverror", "amv_error"],
701
721
  remap=dict(
702
- amvtrackingerror='amv_error',
703
- amvtr='amv_error',
704
- amverror='amv_error',
722
+ amvtrackingerror="amv_error",
723
+ amvtr="amv_error",
724
+ amverror="amv_error",
705
725
  ),
706
726
  ),
707
727
  gvar=dict(
708
- default='amv_tracking_error',
728
+ default="amv_tracking_error",
709
729
  ),
710
- )
730
+ ),
711
731
  )
712
732
 
713
733
  @property
714
734
  def realkind(self):
715
- return 'amv_error'
735
+ return "amv_error"
716
736
 
717
737
 
718
738
  class AmvBias(GenvModelGeoResource):
@@ -720,108 +740,111 @@ class AmvBias(GenvModelGeoResource):
720
740
  TODO.
721
741
  A Genvkey can be given.
722
742
  """
743
+
723
744
  _footprint = dict(
724
- info='AMV Tracking Error',
745
+ info="AMV Tracking Error",
725
746
  attr=dict(
726
747
  kind=dict(
727
- values=['amvbias', 'amv_bias'],
728
- remap=dict(amvbias='amv_bias'),
748
+ values=["amvbias", "amv_bias"],
749
+ remap=dict(amvbias="amv_bias"),
729
750
  ),
730
- gvar=dict(
731
- default='amv_bias_info'
732
- ),
733
- )
751
+ gvar=dict(default="amv_bias_info"),
752
+ ),
734
753
  )
735
754
 
736
755
  @property
737
756
  def realkind(self):
738
- return 'amv_bias'
757
+ return "amv_bias"
739
758
 
740
759
 
741
760
  class LFIScripts(StaticResource):
742
761
  """
743
762
  The LFI scripts. A Genvkey can be given.
744
763
  """
764
+
745
765
  _footprint = [
746
766
  gvar,
747
767
  dict(
748
- info='LFI scripts',
768
+ info="LFI scripts",
749
769
  attr=dict(
750
770
  kind=dict(
751
- values=['lfiscripts', ],
752
- ),
753
- gvar=dict(
754
- default='tools_lfi'
771
+ values=[
772
+ "lfiscripts",
773
+ ],
755
774
  ),
756
- )
757
- )
775
+ gvar=dict(default="tools_lfi"),
776
+ ),
777
+ ),
758
778
  ]
759
779
 
760
780
  @property
761
781
  def realkind(self):
762
- return 'lfiscripts'
782
+ return "lfiscripts"
763
783
 
764
784
 
765
785
  class FilteringRequest(GenvModelResource):
766
786
  """
767
787
  Class of a JSON file that describes a resource filter. A Genvkey can be given.
768
788
  """
789
+
769
790
  _footprint = dict(
770
- info = "Description of a resource's data filter",
771
- attr = dict(
772
- kind = dict(
773
- values = ['filtering_request', ],
774
- ),
775
- filtername = dict(
776
- ),
777
- nativefmt = dict(
778
- values = ['json', ],
779
- default = 'json',
791
+ info="Description of a resource's data filter",
792
+ attr=dict(
793
+ kind=dict(
794
+ values=[
795
+ "filtering_request",
796
+ ],
780
797
  ),
781
- clscontents = dict(
782
- default = JsonDictContent,
798
+ filtername=dict(),
799
+ nativefmt=dict(
800
+ values=[
801
+ "json",
802
+ ],
803
+ default="json",
783
804
  ),
784
- gvar = dict(
785
- default = 'filtering_request'
805
+ clscontents=dict(
806
+ default=JsonDictContent,
786
807
  ),
787
- )
808
+ gvar=dict(default="filtering_request"),
809
+ ),
788
810
  )
789
811
 
790
812
  @property
791
813
  def realkind(self):
792
- return 'filtering_request'
814
+ return "filtering_request"
793
815
 
794
816
  def gget_urlquery(self):
795
817
  """GGET specific query : ``extract``."""
796
- return 'extract=filter_{:s}.json'.format(self.filtername)
818
+ return "extract=filter_{:s}.json".format(self.filtername)
797
819
 
798
820
 
799
821
  class GribAPIConfig(StaticResource):
800
822
  """
801
823
  Configuration files for the Grib-API (samples or definitions)
802
824
  """
825
+
803
826
  _footprint = [
804
827
  gvar,
805
828
  dict(
806
- info='Grib-API configuration files',
829
+ info="Grib-API configuration files",
807
830
  attr=dict(
808
831
  kind=dict(
809
- values = ['gribapiconf', ],
832
+ values=[
833
+ "gribapiconf",
834
+ ],
810
835
  ),
811
- target = dict(
812
- values = ['samples', 'def', 'definitions'],
813
- remap = dict(definitions='def'),
836
+ target=dict(
837
+ values=["samples", "def", "definitions"],
838
+ remap=dict(definitions="def"),
814
839
  ),
815
- gvar=dict(
816
- default = 'grib_api_[target]'
817
- ),
818
- )
819
- )
840
+ gvar=dict(default="grib_api_[target]"),
841
+ ),
842
+ ),
820
843
  ]
821
844
 
822
845
  @property
823
846
  def realkind(self):
824
- return 'gribapiconf'
847
+ return "gribapiconf"
825
848
 
826
849
 
827
850
  class StdPressure(GenvModelGeoResource):
@@ -831,26 +854,24 @@ class StdPressure(GenvModelGeoResource):
831
854
  """
832
855
 
833
856
  _footprint = dict(
834
- info = 'Standard pressure profile',
835
- attr = dict(
836
- kind = dict(
837
- values = ['stdpressure'],
838
- ),
839
- level = dict(
840
- type = int,
841
- optional = True,
842
- default = 60,
843
- values = [60],
857
+ info="Standard pressure profile",
858
+ attr=dict(
859
+ kind=dict(
860
+ values=["stdpressure"],
844
861
  ),
845
- gvar = dict(
846
- default = 'std_pressure'
862
+ level=dict(
863
+ type=int,
864
+ optional=True,
865
+ default=60,
866
+ values=[60],
847
867
  ),
848
- )
868
+ gvar=dict(default="std_pressure"),
869
+ ),
849
870
  )
850
871
 
851
872
  @property
852
873
  def realkind(self):
853
- return 'stdpressure'
874
+ return "stdpressure"
854
875
 
855
876
 
856
877
  class TruncObj(GenvModelGeoResource):
@@ -860,20 +881,18 @@ class TruncObj(GenvModelGeoResource):
860
881
  """
861
882
 
862
883
  _footprint = dict(
863
- info = 'Standard error truncation',
864
- attr = dict(
865
- kind = dict(
866
- values = ['truncobj', 'stderr_trunc'],
867
- ),
868
- gvar = dict(
869
- default = 'trunc_obj'
884
+ info="Standard error truncation",
885
+ attr=dict(
886
+ kind=dict(
887
+ values=["truncobj", "stderr_trunc"],
870
888
  ),
871
- )
889
+ gvar=dict(default="trunc_obj"),
890
+ ),
872
891
  )
873
892
 
874
893
  @property
875
894
  def realkind(self):
876
- return 'truncobj'
895
+ return "truncobj"
877
896
 
878
897
 
879
898
  class InterChannelsCorrelations(GenvModelResource):
@@ -883,47 +902,53 @@ class InterChannelsCorrelations(GenvModelResource):
883
902
  """
884
903
 
885
904
  _footprint = dict(
886
- info = 'Inter channel correlations for a given instrument.',
887
- attr = dict(
888
- kind = dict(
889
- values = ['correlations', ],
890
- ),
891
- instrument = dict(
892
- values = ['cris', 'iasi', ],
905
+ info="Inter channel correlations for a given instrument.",
906
+ attr=dict(
907
+ kind=dict(
908
+ values=[
909
+ "correlations",
910
+ ],
893
911
  ),
894
- gvar = dict(
895
- default = 'correlations_[instrument]'
912
+ instrument=dict(
913
+ values=[
914
+ "cris",
915
+ "iasi",
916
+ ],
896
917
  ),
897
- clscontents = dict(
898
- default = DataRaw,
918
+ gvar=dict(default="correlations_[instrument]"),
919
+ clscontents=dict(
920
+ default=DataRaw,
899
921
  ),
900
922
  ),
901
923
  )
902
924
 
903
925
  @property
904
926
  def realkind(self):
905
- return 'correlations'
927
+ return "correlations"
906
928
 
907
929
 
908
930
  class SunMoonPositionCoeff(StaticResource):
909
931
  """
910
932
  Coefficients of the Chebyshev polynomials used to calculate the position of the moon and the sun.
911
933
  """
934
+
912
935
  _footprint = [
913
936
  gvar,
914
937
  dict(
915
- info='Chebyshev polynomials for the moon and sun position',
938
+ info="Chebyshev polynomials for the moon and sun position",
916
939
  attr=dict(
917
940
  kind=dict(
918
- values = ['sunmoonpositioncoeffs', ],
941
+ values=[
942
+ "sunmoonpositioncoeffs",
943
+ ],
919
944
  ),
920
945
  gvar=dict(
921
- default = 'sun_moon_position_tgz',
946
+ default="sun_moon_position_tgz",
922
947
  ),
923
- )
924
- )
948
+ ),
949
+ ),
925
950
  ]
926
951
 
927
952
  @property
928
953
  def realkind(self):
929
- return 'sunmoonpositioncoeffs'
954
+ return "sunmoonpositioncoeffs"