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
@@ -3,10 +3,28 @@ Data resources (mostly NWP).
3
3
  """
4
4
 
5
5
  # Recursive inclusion of packages with potential FootprintBase classes
6
- from . import boundaries, climfiles, consts, diagnostics, executables, fields
7
- from . import assim, gridfiles, logs, modelstates, namelists, obs, surfex, eps, eda
8
- from . import providers, stores, query, monitoring, ctpini
9
- from . import oopsexec, configfiles
6
+ from . import boundaries as boundaries
7
+ from . import climfiles as climfiles
8
+ from . import consts as consts
9
+ from . import diagnostics as diagnostics
10
+ from . import executables as executables
11
+ from . import fields as fields
12
+ from . import assim as assim
13
+ from . import gridfiles as gridfiles
14
+ from . import logs as logs
15
+ from . import modelstates as modelstates
16
+ from . import namelists as namelists
17
+ from . import obs as obs
18
+ from . import surfex as surfex
19
+ from . import eps as eps
20
+ from . import eda as eda
21
+ from . import providers as providers
22
+ from . import stores as stores
23
+ from . import query as query
24
+ from . import monitoring as monitoring
25
+ from . import ctpini as ctpini
26
+ from . import oopsexec as oopsexec
27
+ from . import configfiles as configfiles
10
28
 
11
29
  #: No automatic export
12
30
  __all__ = []
vortex/nwp/data/assim.py CHANGED
@@ -18,7 +18,9 @@ __all__ = []
18
18
  logger = loggers.getLogger(__name__)
19
19
 
20
20
 
21
- @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
21
+ @namebuilding_insert(
22
+ "geo", lambda s: s._geo2basename_info(add_stretching=False)
23
+ )
22
24
  class _BackgroundErrorInfo(GeoFlowResource):
23
25
  """
24
26
  A generic class for data in grib format related to the background error.
@@ -29,25 +31,20 @@ class _BackgroundErrorInfo(GeoFlowResource):
29
31
  term_deco,
30
32
  gvar,
31
33
  dict(
32
- info='Background standard deviation',
34
+ info="Background standard deviation",
33
35
  attr=dict(
34
- term=dict(
35
- optional=True,
36
- default=3
37
- ),
36
+ term=dict(optional=True, default=3),
38
37
  nativefmt=dict(
39
- default='grib',
40
- ),
41
- gvar = dict(
42
- default = 'errgrib_t[geometry:truncation]'
38
+ default="grib",
43
39
  ),
40
+ gvar=dict(default="errgrib_t[geometry:truncation]"),
44
41
  ),
45
- )
42
+ ),
46
43
  ]
47
44
 
48
45
  @property
49
46
  def realkind(self):
50
- return 'bgstdinfo'
47
+ return "bgstdinfo"
51
48
 
52
49
 
53
50
  class BackgroundStdError(_BackgroundErrorInfo):
@@ -66,77 +63,73 @@ class BackgroundStdError(_BackgroundErrorInfo):
66
63
  """
67
64
 
68
65
  _footprint = dict(
69
- info='Background error standard deviation',
66
+ info="Background error standard deviation",
70
67
  attr=dict(
71
68
  kind=dict(
72
- values=['bgstderr', 'bg_stderr', 'bgerrstd'],
73
- remap=dict(autoremap='first'),
69
+ values=["bgstderr", "bg_stderr", "bgerrstd"],
70
+ remap=dict(autoremap="first"),
74
71
  ),
75
72
  stage=dict(
76
73
  optional=True,
77
- default='unbal',
78
- values=['scr', 'vor', 'full', 'unbal', 'profile'],
79
- remap=dict(vor='unbal'),
74
+ default="unbal",
75
+ values=["scr", "vor", "full", "unbal", "profile"],
76
+ remap=dict(vor="unbal"),
80
77
  ),
81
78
  origin=dict(
82
79
  optional=True,
83
- values=['ens', 'diag'],
84
- default = 'ens',
85
- ),
86
- gvar = dict(
87
- default = 'errgrib_vor_monthly'
80
+ values=["ens", "diag"],
81
+ default="ens",
88
82
  ),
83
+ gvar=dict(default="errgrib_vor_monthly"),
89
84
  nativefmt=dict(
90
- values=['grib', 'ascii'],
91
- default='grib',
85
+ values=["grib", "ascii"],
86
+ default="grib",
92
87
  ),
93
88
  ),
94
89
  )
95
90
 
96
91
  @property
97
92
  def realkind(self):
98
- return 'bgstderr'
93
+ return "bgstderr"
99
94
 
100
95
  def namebuilding_info(self):
101
96
  """Generic information for names fabric, with radical = ``bcor``."""
102
97
  infos = super().namebuilding_info()
103
- infos['src'].append(self.stage)
104
- if self.stage != 'scr':
105
- infos['src'].append(self.origin)
98
+ infos["src"].append(self.stage)
99
+ if self.stage != "scr":
100
+ infos["src"].append(self.origin)
106
101
  return infos
107
102
 
108
103
  def archive_basename(self):
109
104
  """OP ARCHIVE specific naming convention."""
110
- if self.stage in ('unbal',):
111
- return '(errgribfix:igakey)'
105
+ if self.stage in ("unbal",):
106
+ return "(errgribfix:igakey)"
112
107
  else:
113
- return 'errgrib_' + self.stage
108
+ return "errgrib_" + self.stage
114
109
 
115
110
  def olive_basename(self):
116
111
  """OLIVE specific naming convention."""
117
- if self.stage in ('unbal',):
118
- return 'errgribvor'
112
+ if self.stage in ("unbal",):
113
+ return "errgribvor"
119
114
  else:
120
- return 'sigma_b'
115
+ return "sigma_b"
121
116
 
122
117
  def gget_basename(self):
123
118
  """GGET specific naming convention."""
124
- return dict(suffix='.m{:02d}'.format(self.date.month))
119
+ return dict(suffix=".m{:02d}".format(self.date.month))
125
120
 
126
121
 
127
- @namebuilding_append('src', lambda s: s.variable)
122
+ @namebuilding_append("src", lambda s: s.variable)
128
123
  class SplitBackgroundStdError(BackgroundStdError):
129
124
  """Background error standard deviation, for a given variable."""
130
125
 
131
126
  _footprint = dict(
132
- info='Background error standard deviation',
127
+ info="Background error standard deviation",
133
128
  attr=dict(
134
129
  variable=dict(
135
- info = "Variable contained in this resource.",
136
- ),
137
- gvar = dict(
138
- default = 'errgrib_vor_[variable]_monthly'
130
+ info="Variable contained in this resource.",
139
131
  ),
132
+ gvar=dict(default="errgrib_vor_[variable]_monthly"),
140
133
  ),
141
134
  )
142
135
 
@@ -146,30 +139,28 @@ class BackgroundErrorNorm(_BackgroundErrorInfo):
146
139
 
147
140
  _footprint = [
148
141
  dict(
149
- info='Background error normalisation data for wavelet covariances',
142
+ info="Background error normalisation data for wavelet covariances",
150
143
  attr=dict(
151
144
  kind=dict(
152
- values=['bgstdrenorm', 'bgerrnorm'],
153
- remap=dict(autoremap='first'),
154
- ),
155
- gvar = dict(
156
- default = 'srenorm_t[geometry:truncation]'
145
+ values=["bgstdrenorm", "bgerrnorm"],
146
+ remap=dict(autoremap="first"),
157
147
  ),
148
+ gvar=dict(default="srenorm_t[geometry:truncation]"),
158
149
  ),
159
150
  )
160
151
  ]
161
152
 
162
153
  @property
163
154
  def realkind(self):
164
- return 'bgstdrenorm'
155
+ return "bgstdrenorm"
165
156
 
166
157
  def archive_basename(self):
167
158
  """OP ARCHIVE specific naming convention."""
168
- return 'srenorm.{!s}'.format(self.geometry.truncation)
159
+ return "srenorm.{!s}".format(self.geometry.truncation)
169
160
 
170
161
  def olive_basename(self):
171
162
  """OLIVE specific naming convention."""
172
- return 'srenorm.t{!s}'.format(self.geometry.truncation)
163
+ return "srenorm.t{!s}".format(self.geometry.truncation)
173
164
 
174
165
  def archive_pathinfo(self):
175
166
  """Op Archive specific pathname needs."""
@@ -178,11 +169,13 @@ class BackgroundErrorNorm(_BackgroundErrorInfo):
178
169
  model=self.model,
179
170
  date=self.date,
180
171
  cutoff=self.cutoff,
181
- arpege_aearp_directory='wavelet',
172
+ arpege_aearp_directory="wavelet",
182
173
  )
183
174
 
184
175
 
185
- @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
176
+ @namebuilding_insert(
177
+ "geo", lambda s: s._geo2basename_info(add_stretching=False)
178
+ )
186
179
  class Wavelet(GeoFlowResource):
187
180
  """Background error wavelet covariances."""
188
181
 
@@ -190,34 +183,29 @@ class Wavelet(GeoFlowResource):
190
183
  term_deco,
191
184
  gvar,
192
185
  dict(
193
- info = 'Background error wavelet covariances',
194
- attr = dict(
195
- kind = dict(
196
- values = ['wavelet', 'waveletcv'],
197
- remap = dict(autoremap = 'first'),
198
- ),
199
- gvar = dict(
200
- default = 'wavelet_cv_t[geometry:truncation]'
201
- ),
202
- term=dict(
203
- optional=True,
204
- default=3
186
+ info="Background error wavelet covariances",
187
+ attr=dict(
188
+ kind=dict(
189
+ values=["wavelet", "waveletcv"],
190
+ remap=dict(autoremap="first"),
205
191
  ),
206
- )
207
- )
192
+ gvar=dict(default="wavelet_cv_t[geometry:truncation]"),
193
+ term=dict(optional=True, default=3),
194
+ ),
195
+ ),
208
196
  ]
209
197
 
210
198
  @property
211
199
  def realkind(self):
212
- return 'wavelet'
200
+ return "wavelet"
213
201
 
214
202
  def archive_basename(self):
215
203
  """OP ARCHIVE specific naming convention."""
216
- return 'wavelet.cv.{!s}'.format(self.geometry.truncation)
204
+ return "wavelet.cv.{!s}".format(self.geometry.truncation)
217
205
 
218
206
  def olive_basename(self):
219
207
  """OLIVE specific naming convention."""
220
- return 'wavelet.cv.t{!s}'.format(self.geometry.truncation)
208
+ return "wavelet.cv.t{!s}".format(self.geometry.truncation)
221
209
 
222
210
  def archive_pathinfo(self):
223
211
  """Op Archive specific pathname needs."""
@@ -230,139 +218,143 @@ class Wavelet(GeoFlowResource):
230
218
  )
231
219
 
232
220
 
233
- @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
221
+ @namebuilding_insert(
222
+ "geo", lambda s: s._geo2basename_info(add_stretching=False)
223
+ )
234
224
  class RawControlVector(GeoFlowResource):
235
225
  """Raw Control Vector as issued by minimisation, playing the role of an Increment."""
236
226
 
237
227
  _footprint = dict(
238
- info = 'Raw Control Vector',
239
- attr = dict(
240
- kind = dict(
241
- values = ['rawcv', 'rcv', 'increment', 'minimcv'],
242
- remap = dict(autoremap = 'first'),
228
+ info="Raw Control Vector",
229
+ attr=dict(
230
+ kind=dict(
231
+ values=["rawcv", "rcv", "increment", "minimcv"],
232
+ remap=dict(autoremap="first"),
243
233
  ),
244
- )
234
+ ),
245
235
  )
246
236
 
247
237
  @property
248
238
  def realkind(self):
249
- return 'rawcv'
239
+ return "rawcv"
250
240
 
251
241
  def olive_basename(self):
252
242
  """OLIVE specific naming convention."""
253
- return 'MININCR'
243
+ return "MININCR"
254
244
 
255
245
 
256
- @namebuilding_insert('geo', lambda s: s._geo2basename_info(add_stretching=False))
246
+ @namebuilding_insert(
247
+ "geo", lambda s: s._geo2basename_info(add_stretching=False)
248
+ )
257
249
  class InternalMinim(GeoFlowResource):
258
250
  """Generic class for resources internal to minimisation."""
259
251
 
260
252
  _abstract = True
261
253
  _footprint = dict(
262
- attr = dict(
263
- nativefmt = dict(
264
- values = ['fa', 'lfi', 'grib'],
265
- default = 'fa',
254
+ attr=dict(
255
+ nativefmt=dict(
256
+ values=["fa", "lfi", "grib"],
257
+ default="fa",
266
258
  ),
267
- term = dict(
268
- type = Time,
269
- optional = True,
270
- default = Time(-3),
259
+ term=dict(
260
+ type=Time,
261
+ optional=True,
262
+ default=Time(-3),
271
263
  ),
272
264
  )
273
265
  )
274
266
 
275
267
  def olive_suffixtr(self):
276
268
  """Return BR or HR specific OLIVE suffix according to geo streching."""
277
- return 'HR' if self.geometry.stretching > 1 else 'BR'
269
+ return "HR" if self.geometry.stretching > 1 else "BR"
278
270
 
279
271
 
280
272
  class StartingPointMinim(InternalMinim):
281
273
  """Guess as reprocessed by the minimisation."""
282
274
 
283
275
  _footprint = dict(
284
- info = 'Starting Point Output Minim',
285
- attr = dict(
286
- kind = dict(
287
- values = ['stpmin'],
276
+ info="Starting Point Output Minim",
277
+ attr=dict(
278
+ kind=dict(
279
+ values=["stpmin"],
288
280
  ),
289
- )
281
+ ),
290
282
  )
291
283
 
292
284
  @property
293
285
  def realkind(self):
294
- return 'stpmin'
286
+ return "stpmin"
295
287
 
296
288
  def olive_basename(self):
297
289
  """OLIVE specific naming convention."""
298
- return 'STPMIN' + self.olive_suffixtr()
290
+ return "STPMIN" + self.olive_suffixtr()
299
291
 
300
292
 
301
293
  class AnalysedStateMinim(InternalMinim):
302
294
  """Analysed state as produced by the minimisation."""
303
295
 
304
296
  _footprint = dict(
305
- info = 'Analysed Output Minim',
306
- attr = dict(
307
- kind = dict(
308
- values = ['anamin'],
297
+ info="Analysed Output Minim",
298
+ attr=dict(
299
+ kind=dict(
300
+ values=["anamin"],
309
301
  ),
310
- )
302
+ ),
311
303
  )
312
304
 
313
305
  @property
314
306
  def realkind(self):
315
- return 'anamin'
307
+ return "anamin"
316
308
 
317
309
  def olive_basename(self):
318
310
  """OLIVE specific naming convention."""
319
- return 'ANAMIN' + self.olive_suffixtr()
311
+ return "ANAMIN" + self.olive_suffixtr()
320
312
 
321
313
 
322
314
  class PrecevMap(FlowResource):
323
315
  """Map of the precondionning eigenvectors as produced by minimisation."""
324
316
 
325
317
  _footprint = dict(
326
- info = 'Prec EV Map',
327
- attr = dict(
328
- kind = dict(
329
- values = ['precevmap'],
318
+ info="Prec EV Map",
319
+ attr=dict(
320
+ kind=dict(
321
+ values=["precevmap"],
330
322
  ),
331
- clscontents = dict(
332
- default = JsonDictContent,
323
+ clscontents=dict(
324
+ default=JsonDictContent,
333
325
  ),
334
- nativefmt = dict(
335
- values = ['json'],
336
- default = 'json',
326
+ nativefmt=dict(
327
+ values=["json"],
328
+ default="json",
337
329
  ),
338
- )
330
+ ),
339
331
  )
340
332
 
341
333
  @property
342
334
  def realkind(self):
343
- return 'precevmap'
335
+ return "precevmap"
344
336
 
345
337
 
346
- @namebuilding_append('src', lambda s: str(s.evnum))
338
+ @namebuilding_append("src", lambda s: str(s.evnum))
347
339
  class Precev(FlowResource):
348
340
  """Precondionning eigenvectors as produced by minimisation."""
349
341
 
350
342
  _footprint = dict(
351
- info = 'Starting Point Output Minim',
352
- attr = dict(
353
- kind = dict(
354
- values = ['precev'],
343
+ info="Starting Point Output Minim",
344
+ attr=dict(
345
+ kind=dict(
346
+ values=["precev"],
355
347
  ),
356
- evnum = dict(
357
- type = FmtInt,
358
- args = dict(fmt = '03'),
348
+ evnum=dict(
349
+ type=FmtInt,
350
+ args=dict(fmt="03"),
359
351
  ),
360
- )
352
+ ),
361
353
  )
362
354
 
363
355
  @property
364
356
  def realkind(self):
365
- return 'precev'
357
+ return "precev"
366
358
 
367
359
 
368
360
  class IOassignScript(Script):
@@ -371,22 +363,18 @@ class IOassignScript(Script):
371
363
  _footprint = [
372
364
  gvar,
373
365
  dict(
374
- info = 'Script for IOASSIGN',
375
- attr = dict(
376
- kind = dict(
377
- values = ['ioassign_script']
378
- ),
379
- gvar = dict(
380
- default = 'ioassign_script_[purpose]'
381
- ),
366
+ info="Script for IOASSIGN",
367
+ attr=dict(
368
+ kind=dict(values=["ioassign_script"]),
369
+ gvar=dict(default="ioassign_script_[purpose]"),
382
370
  purpose=dict(
383
- info = "The purpose of the script",
384
- values = ['merge', 'create']
371
+ info="The purpose of the script",
372
+ values=["merge", "create"],
385
373
  ),
386
- )
387
- )
374
+ ),
375
+ ),
388
376
  ]
389
377
 
390
378
  @property
391
379
  def realkind(self):
392
- return 'ioassign_script'
380
+ return "ioassign_script"