vortex-nwp 2.0.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 (144) hide show
  1. vortex/__init__.py +159 -0
  2. vortex/algo/__init__.py +13 -0
  3. vortex/algo/components.py +2462 -0
  4. vortex/algo/mpitools.py +1953 -0
  5. vortex/algo/mpitools_templates/__init__.py +1 -0
  6. vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +27 -0
  7. vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +29 -0
  8. vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +18 -0
  9. vortex/algo/serversynctools.py +171 -0
  10. vortex/config.py +112 -0
  11. vortex/data/__init__.py +19 -0
  12. vortex/data/abstractstores.py +1510 -0
  13. vortex/data/containers.py +835 -0
  14. vortex/data/contents.py +622 -0
  15. vortex/data/executables.py +275 -0
  16. vortex/data/flow.py +119 -0
  17. vortex/data/geometries.ini +2689 -0
  18. vortex/data/geometries.py +799 -0
  19. vortex/data/handlers.py +1230 -0
  20. vortex/data/outflow.py +67 -0
  21. vortex/data/providers.py +487 -0
  22. vortex/data/resources.py +207 -0
  23. vortex/data/stores.py +1390 -0
  24. vortex/data/sync_templates/__init__.py +0 -0
  25. vortex/gloves.py +309 -0
  26. vortex/layout/__init__.py +20 -0
  27. vortex/layout/contexts.py +577 -0
  28. vortex/layout/dataflow.py +1220 -0
  29. vortex/layout/monitor.py +969 -0
  30. vortex/nwp/__init__.py +14 -0
  31. vortex/nwp/algo/__init__.py +21 -0
  32. vortex/nwp/algo/assim.py +537 -0
  33. vortex/nwp/algo/clim.py +1086 -0
  34. vortex/nwp/algo/coupling.py +831 -0
  35. vortex/nwp/algo/eda.py +840 -0
  36. vortex/nwp/algo/eps.py +785 -0
  37. vortex/nwp/algo/forecasts.py +886 -0
  38. vortex/nwp/algo/fpserver.py +1303 -0
  39. vortex/nwp/algo/ifsnaming.py +463 -0
  40. vortex/nwp/algo/ifsroot.py +404 -0
  41. vortex/nwp/algo/monitoring.py +263 -0
  42. vortex/nwp/algo/mpitools.py +694 -0
  43. vortex/nwp/algo/odbtools.py +1258 -0
  44. vortex/nwp/algo/oopsroot.py +916 -0
  45. vortex/nwp/algo/oopstests.py +220 -0
  46. vortex/nwp/algo/request.py +660 -0
  47. vortex/nwp/algo/stdpost.py +1641 -0
  48. vortex/nwp/data/__init__.py +30 -0
  49. vortex/nwp/data/assim.py +380 -0
  50. vortex/nwp/data/boundaries.py +314 -0
  51. vortex/nwp/data/climfiles.py +521 -0
  52. vortex/nwp/data/configfiles.py +153 -0
  53. vortex/nwp/data/consts.py +954 -0
  54. vortex/nwp/data/ctpini.py +149 -0
  55. vortex/nwp/data/diagnostics.py +209 -0
  56. vortex/nwp/data/eda.py +147 -0
  57. vortex/nwp/data/eps.py +432 -0
  58. vortex/nwp/data/executables.py +1045 -0
  59. vortex/nwp/data/fields.py +111 -0
  60. vortex/nwp/data/gridfiles.py +380 -0
  61. vortex/nwp/data/logs.py +584 -0
  62. vortex/nwp/data/modelstates.py +363 -0
  63. vortex/nwp/data/monitoring.py +193 -0
  64. vortex/nwp/data/namelists.py +696 -0
  65. vortex/nwp/data/obs.py +840 -0
  66. vortex/nwp/data/oopsexec.py +74 -0
  67. vortex/nwp/data/providers.py +207 -0
  68. vortex/nwp/data/query.py +206 -0
  69. vortex/nwp/data/stores.py +160 -0
  70. vortex/nwp/data/surfex.py +337 -0
  71. vortex/nwp/syntax/__init__.py +9 -0
  72. vortex/nwp/syntax/stdattrs.py +437 -0
  73. vortex/nwp/tools/__init__.py +10 -0
  74. vortex/nwp/tools/addons.py +40 -0
  75. vortex/nwp/tools/agt.py +67 -0
  76. vortex/nwp/tools/bdap.py +59 -0
  77. vortex/nwp/tools/bdcp.py +41 -0
  78. vortex/nwp/tools/bdm.py +24 -0
  79. vortex/nwp/tools/bdmp.py +54 -0
  80. vortex/nwp/tools/conftools.py +1661 -0
  81. vortex/nwp/tools/drhook.py +66 -0
  82. vortex/nwp/tools/grib.py +294 -0
  83. vortex/nwp/tools/gribdiff.py +104 -0
  84. vortex/nwp/tools/ifstools.py +203 -0
  85. vortex/nwp/tools/igastuff.py +273 -0
  86. vortex/nwp/tools/mars.py +68 -0
  87. vortex/nwp/tools/odb.py +657 -0
  88. vortex/nwp/tools/partitioning.py +258 -0
  89. vortex/nwp/tools/satrad.py +71 -0
  90. vortex/nwp/util/__init__.py +6 -0
  91. vortex/nwp/util/async.py +212 -0
  92. vortex/nwp/util/beacon.py +40 -0
  93. vortex/nwp/util/diffpygram.py +447 -0
  94. vortex/nwp/util/ens.py +279 -0
  95. vortex/nwp/util/hooks.py +139 -0
  96. vortex/nwp/util/taskdeco.py +85 -0
  97. vortex/nwp/util/usepygram.py +697 -0
  98. vortex/nwp/util/usetnt.py +101 -0
  99. vortex/proxy.py +6 -0
  100. vortex/sessions.py +374 -0
  101. vortex/syntax/__init__.py +9 -0
  102. vortex/syntax/stdattrs.py +867 -0
  103. vortex/syntax/stddeco.py +185 -0
  104. vortex/toolbox.py +1117 -0
  105. vortex/tools/__init__.py +20 -0
  106. vortex/tools/actions.py +523 -0
  107. vortex/tools/addons.py +316 -0
  108. vortex/tools/arm.py +96 -0
  109. vortex/tools/compression.py +325 -0
  110. vortex/tools/date.py +27 -0
  111. vortex/tools/ddhpack.py +10 -0
  112. vortex/tools/delayedactions.py +782 -0
  113. vortex/tools/env.py +541 -0
  114. vortex/tools/folder.py +834 -0
  115. vortex/tools/grib.py +738 -0
  116. vortex/tools/lfi.py +953 -0
  117. vortex/tools/listings.py +423 -0
  118. vortex/tools/names.py +637 -0
  119. vortex/tools/net.py +2124 -0
  120. vortex/tools/odb.py +10 -0
  121. vortex/tools/parallelism.py +368 -0
  122. vortex/tools/prestaging.py +210 -0
  123. vortex/tools/rawfiles.py +10 -0
  124. vortex/tools/schedulers.py +480 -0
  125. vortex/tools/services.py +940 -0
  126. vortex/tools/storage.py +996 -0
  127. vortex/tools/surfex.py +61 -0
  128. vortex/tools/systems.py +3976 -0
  129. vortex/tools/targets.py +440 -0
  130. vortex/util/__init__.py +9 -0
  131. vortex/util/config.py +1122 -0
  132. vortex/util/empty.py +24 -0
  133. vortex/util/helpers.py +216 -0
  134. vortex/util/introspection.py +69 -0
  135. vortex/util/iosponge.py +80 -0
  136. vortex/util/roles.py +49 -0
  137. vortex/util/storefunctions.py +129 -0
  138. vortex/util/structs.py +26 -0
  139. vortex/util/worker.py +162 -0
  140. vortex_nwp-2.0.0.dist-info/METADATA +67 -0
  141. vortex_nwp-2.0.0.dist-info/RECORD +144 -0
  142. vortex_nwp-2.0.0.dist-info/WHEEL +5 -0
  143. vortex_nwp-2.0.0.dist-info/licenses/LICENSE +517 -0
  144. vortex_nwp-2.0.0.dist-info/top_level.txt +1 -0
vortex/util/worker.py ADDED
@@ -0,0 +1,162 @@
1
+ """
2
+ This package defines a class for default contexts used
3
+ by a PoolWorker process of the Jeeves daemon.
4
+ """
5
+
6
+ import logging
7
+
8
+ from bronx.fancies import loggers
9
+
10
+ logger = loggers.getLogger(__name__)
11
+
12
+
13
+ class AttrDict(dict):
14
+ """Dict object that can be accessed by attributes.
15
+
16
+ >>> obj = AttrDict()
17
+ >>> obj.test = 'hi'
18
+ >>> print(obj['test'])
19
+ hi
20
+
21
+ >>> obj['test'] = "bye"
22
+ >>> print(obj.test)
23
+ bye
24
+
25
+ >>> print(len(obj))
26
+ 1
27
+
28
+ >>> obj.clear()
29
+ >>> print(len(obj))
30
+ 0
31
+
32
+ >>> obj.a
33
+ Traceback (most recent call last):
34
+ ...
35
+ AttributeError: 'AttrDict' object has no attribute 'a'
36
+ """
37
+
38
+ def __init__(self, *args, **kwargs):
39
+ super().__init__(*args, **kwargs)
40
+ self.__dict__ = self
41
+
42
+
43
+ class VortexWorker:
44
+ """Context for a vortex session handled by an asynchronous process such as Jeeves.
45
+
46
+ An _oper_ profile should be used from Jeeves: the default is to use a _research_ profile.
47
+ See :mod:`vortex.gloves`.
48
+ """
49
+
50
+ _PRIVATESESSION_TAG = "asyncworker_view"
51
+ _PRIVATEGLOVE_TAG = "asyncworker_id"
52
+ _PRIVATESESSION = None
53
+ _PRIVATEMODULES = set()
54
+
55
+ def __init__(
56
+ self, modules=tuple(), verbose=False, logger=None, profile=None
57
+ ):
58
+ self._logger = logger
59
+ self._modules = modules
60
+ self._context_lock = False
61
+ self._context_prev_ticket = None
62
+ self.verbose = verbose
63
+ self.profile = profile
64
+ self.rc = True
65
+
66
+ @property
67
+ def logger(self):
68
+ return self._logger
69
+
70
+ @property
71
+ def modules(self):
72
+ return self._modules
73
+
74
+ @property
75
+ def session(self):
76
+ """The session associated with Async Worker."""
77
+ if self._PRIVATESESSION is None:
78
+ import vortex
79
+
80
+ t = vortex.sessions.get(
81
+ tag=self._PRIVATESESSION_TAG,
82
+ glove=vortex.sessions.getglove(
83
+ tag=self._PRIVATEGLOVE_TAG, profile=self.profile
84
+ ),
85
+ )
86
+ sh = t.system()
87
+ import vortex.tools.lfi # @UnusedImport
88
+ import vortex.tools.grib # @UnusedImport
89
+ import vortex.tools.folder # @UnusedImport
90
+ import footprints as fp
91
+
92
+ fp.proxy.addon(kind="lfi", shell=sh)
93
+ fp.proxy.addon(kind="grib", shell=sh)
94
+ fp.proxy.addon(kind="allfolders", shell=sh, verboseload=False)
95
+ self._PRIVATESESSION = t
96
+ return self._PRIVATESESSION
97
+
98
+ def get_dataset(self, ask):
99
+ """Struct friendly access to data request."""
100
+ return AttrDict(ask.data)
101
+
102
+ def reset_loggers(self, logger):
103
+ if not self.verbose:
104
+ # footprints & bronx can be very talkative... we try to limit that !
105
+ global_level = logger.getEffectiveLevel()
106
+ f_logger = loggers.getLogger("footprints")
107
+ b_logger = loggers.getLogger("bronx")
108
+ if global_level <= logging.INFO and not self.verbose:
109
+ f_logger.setLevel(logging.INFO)
110
+ b_logger.setLevel(logging.INFO)
111
+ else:
112
+ f_logger.setLevel(logging.NOTSET)
113
+ b_logger.setLevel(logging.NOTSET)
114
+
115
+ def __enter__(self, *args):
116
+ if self._context_lock:
117
+ raise RuntimeError(
118
+ "Imbricated context manager calls are forbidden."
119
+ )
120
+ self._context_lock = True
121
+ if self.logger is None:
122
+ self._logger = logger
123
+ else:
124
+ self.reset_loggers(self.logger)
125
+ # Activate our own session
126
+ import vortex
127
+
128
+ self._context_prev_ticket = vortex.sessions.current()
129
+ if not self.session.active:
130
+ self.session.activate()
131
+ # Import extra modules
132
+ for modname in self.modules:
133
+ if modname not in self._PRIVATEMODULES:
134
+ self.session.sh.import_module(modname)
135
+ self._PRIVATEMODULES.add(modname)
136
+ # Ok, let's talk...
137
+ self.logger.info(
138
+ "VORTEX enter glove_profile=%s ", self.session.glove.profile
139
+ )
140
+ self.logger.debug(
141
+ " modules=%s addons=%s",
142
+ self.modules,
143
+ self.session.sh.loaded_addons(),
144
+ )
145
+ return self
146
+
147
+ def __exit__(self, exc_type, exc_value, exc_traceback):
148
+ """Well... nothing much to do..."""
149
+ if exc_value is not None:
150
+ self.logger.critical("VORTEX exits on error", exc_info=exc_value)
151
+ self.rc = False
152
+ else:
153
+ self.logger.debug("VORTEX exits nicely.")
154
+ self._context_prev_ticket.activate()
155
+ self._context_lock = False
156
+ return True
157
+
158
+
159
+ if __name__ == "__main__":
160
+ import doctest
161
+
162
+ doctest.testmod(verbose=False)
@@ -0,0 +1,67 @@
1
+ Metadata-Version: 2.4
2
+ Name: vortex-nwp
3
+ Version: 2.0.0
4
+ Summary: A Python library to write Numerical Weather Prediction pipelines components
5
+ Author-email: The Vortex Team <vortex.support@meteo.fr>
6
+ License: CECILL-C
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: License :: CeCILL-C Free Software License Agreement (CECILL-C)
9
+ Requires-Python: >=3.7
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: bronx
13
+ Requires-Dist: footprints
14
+ Requires-Dist: taylorism
15
+ Requires-Dist: tomli
16
+ Requires-Dist: arpifs_listings
17
+ Provides-Extra: docs
18
+ Requires-Dist: sphinx; extra == "docs"
19
+ Requires-Dist: sphinx-book-theme; extra == "docs"
20
+ Requires-Dist: sphinx-copybutton; extra == "docs"
21
+ Provides-Extra: dev
22
+ Requires-Dist: ruff==0.9.1; extra == "dev"
23
+ Requires-Dist: pytest; extra == "dev"
24
+ Dynamic: license-file
25
+
26
+ ## vortex
27
+
28
+ A Python library to write individual tasks in Numerical Weather
29
+ Prediction pipelines.
30
+
31
+ ![A blue coloured vortex pointing downwards on a lighter blue background](vortex.png)
32
+
33
+ Experiments in Numerical Weather Prediction (NWP) and related fields
34
+ consist in a series of computational tasks that can depend on each
35
+ other's output data. Each task is typically made of three successive
36
+ steps:
37
+
38
+ 1. Fetch required input data.
39
+ 2. Execute a program.
40
+ 3. Make the program's output data available to subsequent tasks in the
41
+ pipeline.
42
+
43
+ Tasks have historically been written in some variant of the UNIX
44
+ shell, which was convenient to interact with the file system, manage
45
+ environment variables and execute programs. As NWP pipelines and
46
+ tasks grow more and more complex, however, there is a need for a
47
+ language providing more abstraction and code reuse mechanisms.
48
+
49
+ On top of the popular Python language, *vortex* provides abstractions
50
+ that encapsulate running -- potentially distributed -- programs as
51
+ well as fetching and storing the data they consume and generate.
52
+
53
+ ### Documentation
54
+
55
+ The documentation is available at [vortex-nwp.readthedocs.io](https://vortex-nwp.readthedocs.io).
56
+
57
+ ### Installation
58
+
59
+ Vortex can be installed using `pip` like most Python packages:
60
+
61
+ ```bash
62
+ pip install vortex-nwp
63
+ ```
64
+
65
+ ### Contributing
66
+
67
+ See [CONTRIBUTING.md](CONTRIBUTING.md).
@@ -0,0 +1,144 @@
1
+ vortex/__init__.py,sha256=3fjmBPDy8ly7cAW31NJ--6u-BFYDC7DtoGxdp9-NTzM,4183
2
+ vortex/config.py,sha256=E7feBIG22POq5TyUN3MNXH-ZU7q08alF5nrJ1aUftG0,2815
3
+ vortex/gloves.py,sha256=GKz27S8eLfRlk8fNqVL_z1gsQ8zvEj73p5uVi11ou00,8487
4
+ vortex/proxy.py,sha256=OlPrVUJS5FoKt5pX8ApN1crFFDj8RJAqhDEilwvfrYU,127
5
+ vortex/sessions.py,sha256=l_ZUUFS-l0J2Mg6KEXaUQiDhbIABrWCfcY-9ExazKEg,9988
6
+ vortex/toolbox.py,sha256=h2QE5BoXWWEcQwK21D9YPda6t4rmCtLB5F9WeJrqT14,41379
7
+ vortex/algo/__init__.py,sha256=I_9COn_QBRbwvbqhs0X3CdHeR97NZhBacIqwKjnVBTg,359
8
+ vortex/algo/components.py,sha256=zs_DaKHFEHX9GQ-pn1HheAo4JvNusQi3D4u3ZhqVqe4,89362
9
+ vortex/algo/mpitools.py,sha256=EffZ4Ok934tvEYyUjKpVA-lEUVA29FwUVBtUQ8xWnDI,73977
10
+ vortex/algo/serversynctools.py,sha256=fPel0txVHsrUfk6VFaeKa0D6i21fOskIAR_BbByBv9g,5601
11
+ vortex/algo/mpitools_templates/__init__.py,sha256=Jbw903aPqVKF-AaSoB-mGMxthSvm88O_yqGoGmf_S_U,18
12
+ vortex/algo/mpitools_templates/envelope_wrapper_default.tpl,sha256=4VhkDx_YbOYywKQ82HIxRJXGcDpLuOgqcY7Edx9Rxyw,453
13
+ vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl,sha256=iB4_4jz-7QDqpl6AxrlCACsotJnEMG75dtazuGfkCb4,514
14
+ vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl,sha256=hh1Um95FIuvXAhUTMifAfixtfGgyjF1vEaF1nmbqMLw,502
15
+ vortex/data/__init__.py,sha256=XaHof5W6oCalr4X6oYAK4zW3z3F6mKuwdbKxmmmDraY,560
16
+ vortex/data/abstractstores.py,sha256=tDEEHqyk7-5ETS8RdYFxiGAOkxmtJbj5TlR7Qx_JtAE,55373
17
+ vortex/data/containers.py,sha256=Qny5rqwXEdDWxG4JlC8KcsSAsHK3pp8qukZj1PTFBOM,26004
18
+ vortex/data/contents.py,sha256=ZrwlJfOvkTemzikFRgYBQH3ApC-TPNrbZxpZstzDdbY,19079
19
+ vortex/data/executables.py,sha256=FeR3SA2wW97zAQXwWVecZ0v6VYT5L_3K1Czuv33Bk74,6723
20
+ vortex/data/flow.py,sha256=P1itBnA8jaoCWnVQjqbD_Pf26rpzud1JdwSLECDnDl4,3008
21
+ vortex/data/geometries.ini,sha256=J7hX5hYWqwBjdUAul6q8j10U6b3I-QEHrFJ98LBTQXM,52805
22
+ vortex/data/geometries.py,sha256=SjCF-74zDkbpt3qQujJU_UpeoBtgS7-xrEhbC4ywyRE,27429
23
+ vortex/data/handlers.py,sha256=6tRfCw9yzQCndVhRjz3ia0dyYhV3F7_rWeXjoxBtbvs,47550
24
+ vortex/data/outflow.py,sha256=IPKJkn75lRvhSqN5969TuhRAPnsZKlrWR4Cmw6VBFDs,1475
25
+ vortex/data/providers.py,sha256=kLHJI3F9mkRjRcQzs0xaH_cdfvXd9H4x5h1Lm4PGSFk,15652
26
+ vortex/data/resources.py,sha256=UOwvQDTJxS9z66Aa7JM2nWM3IxrMWvY3L2J9D5w3sZw,6348
27
+ vortex/data/stores.py,sha256=SASD78OChHCac-tgk1dZjRd7g3cYVsHiVf5c7UVl_KE,44354
28
+ vortex/data/sync_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ vortex/layout/__init__.py,sha256=aZsDhVJrd3-648vw-UESI_2BLxyGl71sHdyrg9cL638,826
30
+ vortex/layout/contexts.py,sha256=GkysEtOOUj3nQvGUWrFjOOjzv7SmWFPUSLTH_pMMycI,20363
31
+ vortex/layout/dataflow.py,sha256=SKOUJKbtftW4POStjyBqNrqjvfbutsNHnWQ-p_75l_8,44792
32
+ vortex/layout/monitor.py,sha256=DIUXoW242tg5B6fFEEe2Og-NOxli1T_xpcNWFvTaWXQ,34316
33
+ vortex/nwp/__init__.py,sha256=UfB2il-lEjF87PyVO9sGxjcuy3OYhZwskZw3z52VYAE,311
34
+ vortex/nwp/algo/__init__.py,sha256=_it4GhWxay_WAy0qr2IxLdIqsjWxXcsSSB7wx1BitB4,577
35
+ vortex/nwp/algo/assim.py,sha256=vt3UjvAik4xBl_QC-Yj1CxY4vaiAYvGzzf27XwLoykA,15922
36
+ vortex/nwp/algo/clim.py,sha256=Z9QwUfosH0X_xTg6mam68qWIvw6Ts6CZIpc7Nb0NO1s,37511
37
+ vortex/nwp/algo/coupling.py,sha256=6KQ_YB7PCvVbt6c2VEtpCzwIyWRTjLfu54mNpKnXL9Q,29755
38
+ vortex/nwp/algo/eda.py,sha256=Wf2mt1r6v_ZYDz4BFyt-4JP1XAsO8sZW3O1UAOSRzmU,30746
39
+ vortex/nwp/algo/eps.py,sha256=JCBFiaFF9TQ-x7Szgw44Cd39tRD9184UXqOtoT6aRCs,26812
40
+ vortex/nwp/algo/forecasts.py,sha256=sqs0IETanpfS8q1f1Pl3mQZtSNbfOIUOidmcduGp8EU,30063
41
+ vortex/nwp/algo/fpserver.py,sha256=98HQZsdQE22spy_mIE1G-NORQMMjfA5grEjeIMSlP9w,50163
42
+ vortex/nwp/algo/ifsnaming.py,sha256=WfpSpRJ7ua3ihqv8Y4UkrvE4pb0CkNWKIlW9EjY-2ao,11188
43
+ vortex/nwp/algo/ifsroot.py,sha256=Mmp0sZtexP5ob3iUFTiVbgVWog7ubAYPut0cAB0vbbg,14230
44
+ vortex/nwp/algo/monitoring.py,sha256=JVPZPw_I5QRVtYvvSYpJpBy5RRPhqBQjcAFfIkvKuHA,8893
45
+ vortex/nwp/algo/mpitools.py,sha256=QO3I9iMdY69znnA6hJy8XUAzBoejDpsVMQFRo3YzXro,24876
46
+ vortex/nwp/algo/odbtools.py,sha256=xltXS1lpxeeJXeCGnFiqFUhGqMI6BlZzKcSLhsnd2cs,44094
47
+ vortex/nwp/algo/oopsroot.py,sha256=es3p7RPOixQT74TcglJX1q8MswxveVnLZa84kyhu3uM,33806
48
+ vortex/nwp/algo/oopstests.py,sha256=owQAS7_fGbUGZGzMsJek32dbb3JQ6dafSVBrdmveQ-Q,6654
49
+ vortex/nwp/algo/request.py,sha256=y5N9RUfKoPXR6EbSely37Zz6d-2HYyfV3UCvvoenqbY,22809
50
+ vortex/nwp/algo/stdpost.py,sha256=kpZrP6s92PrrAWyLrf61bSidwkJzC3M6sxrmpete3S0,54824
51
+ vortex/nwp/data/__init__.py,sha256=K__vn-gvNL7ytd0DGEQAZzkuo2gLwcCcfgMcQMLuOE4,886
52
+ vortex/nwp/data/assim.py,sha256=Dv5nmRYDDzYopC6xIwAl92HFTIz3k18C1jFE_IhYzuU,10095
53
+ vortex/nwp/data/boundaries.py,sha256=xZoIriM5L-Q66_am6rOD2ZO0s-31iAUeTE7NZIXXvHI,8114
54
+ vortex/nwp/data/climfiles.py,sha256=hlpe51wc-qrLFV_PX3vCedfLJu8Ko4VHa_qoVmA-Wcg,12610
55
+ vortex/nwp/data/configfiles.py,sha256=0c3VvM25dhU6-QEJs5Wo4IckIVjXFHc-tTEzh1Bho1c,3760
56
+ vortex/nwp/data/consts.py,sha256=riUtekoj3ozBgjxW6xEzhEaWWA7QvZFhU52Y3JS02Eg,21871
57
+ vortex/nwp/data/ctpini.py,sha256=wEpJG7Px2hb7Vudn4eY2vJHKi8YYO99Sd6UJAeT5kMI,3537
58
+ vortex/nwp/data/diagnostics.py,sha256=4ZP1w0ls2FIH59441rTCYDrp0JFfRJ7tiLDWmrdvuwM,5054
59
+ vortex/nwp/data/eda.py,sha256=rVQ35SpHVdHAQ10-LhyGy1k6P9Dbd6os8Crz2I4ThvY,4112
60
+ vortex/nwp/data/eps.py,sha256=nLKTEpEeMxV9oE_sf87xihspMqwzXA8r9uJPP6PdycE,11861
61
+ vortex/nwp/data/executables.py,sha256=xFRHzE5rK71m7gkd-LgMO3KSs0uBeCLqW-8vmedMHqQ,25036
62
+ vortex/nwp/data/fields.py,sha256=umIbobpgbqIxo4pIIKgpYHwmk4CNLj2LBINOAF-Hs_g,3088
63
+ vortex/nwp/data/gridfiles.py,sha256=wXuszvi_-ADaH6NC5A-QM6HhhYgOKtL2dt3DSS5-mWk,10894
64
+ vortex/nwp/data/logs.py,sha256=ZteBocLstW4KuXYEYyHkPNU_wBImSEo-eZHgSeh28gA,17756
65
+ vortex/nwp/data/modelstates.py,sha256=Yy0zHkuR6bAqscoE828Pq48zr1ba2qQ0LZ6BvlitwvM,10420
66
+ vortex/nwp/data/monitoring.py,sha256=-9IYKftPlMi1gGVwbswwdldUY7Y8nLrsrIHG9AW2l8Q,4768
67
+ vortex/nwp/data/namelists.py,sha256=OlKf_XIcxMzqFb6BK1sotV0naLBWQFm0_SkjJfMhTR0,20853
68
+ vortex/nwp/data/obs.py,sha256=ZYUJ_NvI1OaaWw7h4I5tM3lNns66l--bwtHtayWKPoA,25378
69
+ vortex/nwp/data/oopsexec.py,sha256=LlCfDZuEZVuTBFwa-pzRpO9nxOOq2398ObBItjiOXBE,1995
70
+ vortex/nwp/data/providers.py,sha256=eHibwb_jkeFLyIywY4nA3PzpvxHal5J_3NjlF2M0bvc,7293
71
+ vortex/nwp/data/query.py,sha256=IGGgGNMKH3beTpsx1_YsIYg6OE-cUBQzczwBE9m1JPU,5451
72
+ vortex/nwp/data/stores.py,sha256=-WK7uaF4SlwDgABVFx-Vz7_hdSLPsYgIcECWl46Prk8,5354
73
+ vortex/nwp/data/surfex.py,sha256=u8_SBCBAKhz1utghoGmB-bWTtDwIFteOEQv1HRkYLYw,7643
74
+ vortex/nwp/syntax/__init__.py,sha256=m9oAm8sMUB8WzEnq93II1I20fYd1O29nBGWaa5ClmzQ,281
75
+ vortex/nwp/syntax/stdattrs.py,sha256=HiLqZG_iuxqzYLsybMNAxoz_z96frg_PTksXomuYCRE,12928
76
+ vortex/nwp/tools/__init__.py,sha256=sR7JX87XxZGSWzH1zLHzbdid7hIy96yUQodYqZo8Jz8,230
77
+ vortex/nwp/tools/addons.py,sha256=-EFJanufVR1Czt156VmhYSKrmCz8ddJ4IqTa12wuYGc,934
78
+ vortex/nwp/tools/agt.py,sha256=argNI3XB5G__mxcZH1K8BWd1Fw9W2Fvfiu5Y_S8sBb8,2342
79
+ vortex/nwp/tools/bdap.py,sha256=GdqC4QclVHzZUNQGYQPu9EmFPNEEBadDNGsLmrE2XUs,1689
80
+ vortex/nwp/tools/bdcp.py,sha256=cDlkIVZW9grF2YnieIoiwsDhPxQsJIcaBuOCu6rsCzo,986
81
+ vortex/nwp/tools/bdm.py,sha256=e9o3IpR9C4GGd7NhXWt0bpogrcVkqn_hbEJBtThSV5g,360
82
+ vortex/nwp/tools/bdmp.py,sha256=tlsaPvsPtKSXrq2T7X_xtAdWGZ3Hg2qJUJfH8Fetx3E,1506
83
+ vortex/nwp/tools/conftools.py,sha256=bCZ1vUMc1fkuzFEKw95KDXD9Fs4-uDg546RHuJyJmtU,59494
84
+ vortex/nwp/tools/drhook.py,sha256=8BgHw1UGxgviLche73XUltuUtkN9rqjBPy4oBLyG4KY,1972
85
+ vortex/nwp/tools/grib.py,sha256=Uur8z4NjGoRXV4Via-63F9Px59FKG5UxiLM9yMgNkUs,10262
86
+ vortex/nwp/tools/gribdiff.py,sha256=VD4nH06DuFheE9HsFT1UXWnvAC5vUfVBPeqQhCK4wbo,3137
87
+ vortex/nwp/tools/ifstools.py,sha256=JzkQgsD4zwbPFA9Du_oRnOog7liHF8w5JmoxzyWKc08,7041
88
+ vortex/nwp/tools/igastuff.py,sha256=IAnsFwiBcnyqHMmXiTX32dE1uaSWst41DBM98SNMdVU,8249
89
+ vortex/nwp/tools/mars.py,sha256=HR_dpczIhTxQFcNs0BXGsXvMHZkFX4u-XhYw5lFIxXY,1823
90
+ vortex/nwp/tools/odb.py,sha256=2PbZ6p5VIcGDzZLDcUEx39IAqF1GhUWgNOhO8uXywmk,23101
91
+ vortex/nwp/tools/partitioning.py,sha256=8_QVB3fNr5sPY7tlh2FxTzzLyLATq9AEuEheZiiHWUI,9242
92
+ vortex/nwp/tools/satrad.py,sha256=t16vD0lGoUtxhbfDuC282dIEtCrQ9xYFtjUpEqoZa8s,2421
93
+ vortex/nwp/util/__init__.py,sha256=Weqz6S6ZTwjtveSMD1poZYDAKvnsZFjq172VrAq221Q,71
94
+ vortex/nwp/util/async.py,sha256=8Nqn48BRR89utiPjDtS0MK0PGUQYl1cPy_qkLD2hA6M,7031
95
+ vortex/nwp/util/beacon.py,sha256=ZIHlG9siLh0kK6mMx3iYkbscyM7j5BJ5MOOB0Ey7dH8,1181
96
+ vortex/nwp/util/diffpygram.py,sha256=ZFDrbHNZBVBmXGjFsnH5EcyGW7lawNtT6GZA7BPGpU4,14957
97
+ vortex/nwp/util/ens.py,sha256=laRzoD2ZCV-lp_IEFBb-cmBt_Zlnl6nf_Ps0Gs5nkY4,9533
98
+ vortex/nwp/util/hooks.py,sha256=8di5CY0oPDgVnXtKVcbmC6UU_pdZypwEJ_U8M6d4bOE,4646
99
+ vortex/nwp/util/taskdeco.py,sha256=bX-gVnA6IUaOsJjxm0nVddrG7aniN7TRCbl9r23A8s0,2335
100
+ vortex/nwp/util/usepygram.py,sha256=255OL_RadazMQdf-iSHxc4a7AgfmOmfSyzCHyN54q8I,23766
101
+ vortex/nwp/util/usetnt.py,sha256=PwQuUWcBdo8WOw25b_Jw5T1N9HJZFmEXopphNi-Xgzc,3462
102
+ vortex/syntax/__init__.py,sha256=q0eJcJ1gRbSrALTC8UaORRrHNmRxVUpbTNB1_uQbJi0,288
103
+ vortex/syntax/stdattrs.py,sha256=OosTS6hdGGh1r5rwZNngmMb6zFj0NUrFZmYs7lDbysY,20927
104
+ vortex/syntax/stddeco.py,sha256=Y94wAf-zEQr8RUmF_OUZkBKO1fPZnx3ju2g3DnPl9cw,6411
105
+ vortex/tools/__init__.py,sha256=KPsj7iqvy-vlo3WEIx8PmbqJYVDXCzZZdDSbMlqDq0k,482
106
+ vortex/tools/actions.py,sha256=BrPDuYXKiGChRVtjXVhLyEGls0-AP6C8TaeTMiQwPyo,16001
107
+ vortex/tools/addons.py,sha256=vTfAXEz0zrFDGUbrFxwgBO67enrE2mmLbKKlakLSNpI,10439
108
+ vortex/tools/arm.py,sha256=jl--2QOkhHkRXlxpZgo4E3Zw7Z_Gnr4z1fjPnPNyuyc,3112
109
+ vortex/tools/compression.py,sha256=dTXX1VrzxEj1qoBDKbB_T-_8X9iGHOlPaseczfu8cuw,11221
110
+ vortex/tools/date.py,sha256=GT-kh_48j6LqQJuXB3XA2FV1wkY6XWnXv-YhjSdU9GQ,645
111
+ vortex/tools/ddhpack.py,sha256=tOcQ5XQ7yTFBlisyjANDPMPQPijvHwz8yWY1eBfZMAs,206
112
+ vortex/tools/delayedactions.py,sha256=miw6q5L5eOaxtLXhPIJlVs5Mi8vMXuIx55dY2TtU8BU,27126
113
+ vortex/tools/env.py,sha256=ka7VaM3D5XuMRxja7oWA-eLgsUFqtWOmPvfbyHBi8Ps,18460
114
+ vortex/tools/folder.py,sha256=R3bQtwnyn01WzkF3NdzJKb2tCkAPWYB61Bb90r0B09I,27992
115
+ vortex/tools/grib.py,sha256=aH1y2LZDRBn3TywXsVZlxTRk6kdShMVgbHJTpGcfMGU,25700
116
+ vortex/tools/lfi.py,sha256=9mvXL-R5PQtTut7gsSMGJa0iNqpNgOFp7yuEMqYGIBA,29681
117
+ vortex/tools/listings.py,sha256=LTfQHjT0XlK3Hxewbi06HZQjKhALmg0Gvz69UooOFog,15123
118
+ vortex/tools/names.py,sha256=Knb2YsUsEjGpODBva1kEOBXRM2d_H0ylHwp-OoO3mnY,21644
119
+ vortex/tools/net.py,sha256=MWamIGwm52qDpRhpxMP1BihsyZW4SwoPl6hg0GgX7WA,73734
120
+ vortex/tools/odb.py,sha256=TZ1Qq8QmFIh3OP-bsgnwPuHPdfMKNXUAfhc-KSx9tZQ,193
121
+ vortex/tools/parallelism.py,sha256=f4uBp37Q3BG71Qn1yy_YSTPdk-2ZZ7zoGRQsGm6pT1Y,12345
122
+ vortex/tools/prestaging.py,sha256=lGJIo4SA8pDziF1nbBogsrK1bgwDQA6tj9Wg9VUFt6Q,7078
123
+ vortex/tools/rawfiles.py,sha256=keUI6QtEZQrWQ7H_Sg_TY9SY32anfb-suqJkrDmdXN0,215
124
+ vortex/tools/schedulers.py,sha256=XduOQab1dRiHwz7Mnt3mxXByGzAHMsDLCwlUOpMdXEk,15828
125
+ vortex/tools/services.py,sha256=_cVaHQmwknJmSny6y20BL2M2K68MKN-ydOFtxWn9lPs,29228
126
+ vortex/tools/storage.py,sha256=YBhq00j39NipaK1EDovr0VF7EArdpp5AuFx0lqB0_p4,34411
127
+ vortex/tools/surfex.py,sha256=qbCIGt-dmfIRWRRMjOQnzc9sGNnt8PIFSqQYT77trhw,1408
128
+ vortex/tools/systems.py,sha256=yIs-Qy7roVdOAeWas20grfhiw-aeJVZ9JyIvTyu8mro,148751
129
+ vortex/tools/targets.py,sha256=-n2uMoEFdz3AeoSd1IGhlr7dYYb8xantUeh9_ggk9iI,14896
130
+ vortex/util/__init__.py,sha256=Zt0OASbKbNnnwUqFHFoq5Mk13sGYSQhxqh7bUvJH6Y8,198
131
+ vortex/util/config.py,sha256=KJHq0GMNRlwzh2WUdpwn1FIKCuAXla7nPRe7j3IZGcI,40045
132
+ vortex/util/empty.py,sha256=EYcltpsjGxATAPPAVK2QRq_Bc5tcFLfF34dE1KO1tvk,535
133
+ vortex/util/helpers.py,sha256=vmz2h3MCL1FElZpn-MX3MX6L_RCQfyqMXTcYWpcYyr4,7492
134
+ vortex/util/introspection.py,sha256=VWZ6Ntr4fMJD4Xr_q-F7_lMHTSjDpHptnZ3SckBtuYY,2146
135
+ vortex/util/iosponge.py,sha256=wuEa0Flv_UeOndg7P9KnBOvW73zCQT1GoxNpqic4Gic,2594
136
+ vortex/util/roles.py,sha256=9un_QAijaMn5iTS7PrdoWI5_NNw7uHxMWTnyhc5aNzg,1150
137
+ vortex/util/storefunctions.py,sha256=uSfG-G_A88iJf3DwFBd-j0rw6eJta8opfRT39aQHsHM,3615
138
+ vortex/util/structs.py,sha256=vapErq0MNhiKlsnjrv_a5M0Rn29KbP3WE_oiy4Hfwb8,683
139
+ vortex/util/worker.py,sha256=zp8f2tx4SXwf1v55XMdYLAx7n3vSlg8PRGrkHgnfdmg,4721
140
+ vortex_nwp-2.0.0.dist-info/licenses/LICENSE,sha256=ewBJPmWAcQqtBPrydH10tt6ECkcYP3b1o2RfH85pJF0,21863
141
+ vortex_nwp-2.0.0.dist-info/METADATA,sha256=zQc2WitX1IFsowNtv7Wc4g0cIlN0USTscn28SGP3bX0,2185
142
+ vortex_nwp-2.0.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
143
+ vortex_nwp-2.0.0.dist-info/top_level.txt,sha256=3xfbSD7kw8xKl0jk4GNHsOPKbhubstfWHPl6bxHciRQ,7
144
+ vortex_nwp-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (78.1.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+