vortex-nwp 2.1.2__tar.gz → 2.1.3__tar.gz

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 (188) hide show
  1. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/PKG-INFO +1 -1
  2. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/pyproject.toml +1 -1
  3. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/__init__.py +2 -2
  4. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/geometries.py +13 -0
  5. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex_nwp.egg-info/PKG-INFO +1 -1
  6. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex_nwp.egg-info/SOURCES.txt +1 -0
  7. vortex_nwp-2.1.3/tests/test_geometries.py +170 -0
  8. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/LICENSE +0 -0
  9. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/README.md +0 -0
  10. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/setup.cfg +0 -0
  11. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/__init__.py +0 -0
  12. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/components.py +0 -0
  13. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/mpitools.py +0 -0
  14. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/mpitools_templates/__init__.py +0 -0
  15. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +0 -0
  16. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +0 -0
  17. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +0 -0
  18. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/algo/serversynctools.py +0 -0
  19. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/config.py +0 -0
  20. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/__init__.py +0 -0
  21. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/abstractstores.py +0 -0
  22. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/containers.py +0 -0
  23. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/contents.py +0 -0
  24. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/executables.py +0 -0
  25. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/flow.py +0 -0
  26. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/geometries.ini +0 -0
  27. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/handlers.py +0 -0
  28. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/outflow.py +0 -0
  29. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/providers.py +0 -0
  30. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/resources.py +0 -0
  31. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/stores.py +0 -0
  32. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/data/sync_templates/__init__.py +0 -0
  33. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/gloves.py +0 -0
  34. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/layout/__init__.py +0 -0
  35. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/layout/contexts.py +0 -0
  36. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/layout/dataflow.py +0 -0
  37. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/layout/monitor.py +0 -0
  38. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/__init__.py +0 -0
  39. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/__init__.py +0 -0
  40. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/assim.py +0 -0
  41. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/clim.py +0 -0
  42. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/coupling.py +0 -0
  43. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/eda.py +0 -0
  44. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/eps.py +0 -0
  45. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/forecasts.py +0 -0
  46. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/fpserver.py +0 -0
  47. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/ifsnaming.py +0 -0
  48. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/ifsroot.py +0 -0
  49. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/monitoring.py +0 -0
  50. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/mpitools.py +0 -0
  51. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/odbtools.py +0 -0
  52. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/oopsroot.py +0 -0
  53. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/oopstests.py +0 -0
  54. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/request.py +0 -0
  55. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/algo/stdpost.py +0 -0
  56. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/__init__.py +0 -0
  57. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/assim.py +0 -0
  58. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/boundaries.py +0 -0
  59. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/climfiles.py +0 -0
  60. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/configfiles.py +0 -0
  61. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/consts.py +0 -0
  62. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/ctpini.py +0 -0
  63. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/diagnostics.py +0 -0
  64. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/eda.py +0 -0
  65. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/eps.py +0 -0
  66. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/executables.py +0 -0
  67. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/fields.py +0 -0
  68. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/gridfiles.py +0 -0
  69. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/logs.py +0 -0
  70. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/modelstates.py +0 -0
  71. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/monitoring.py +0 -0
  72. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/namelists.py +0 -0
  73. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/obs.py +0 -0
  74. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/oopsexec.py +0 -0
  75. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/providers.py +0 -0
  76. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/query.py +0 -0
  77. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/stores.py +0 -0
  78. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/data/surfex.py +0 -0
  79. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/syntax/__init__.py +0 -0
  80. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/syntax/stdattrs.py +0 -0
  81. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/__init__.py +0 -0
  82. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/addons.py +0 -0
  83. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/agt.py +0 -0
  84. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/bdap.py +0 -0
  85. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/bdcp.py +0 -0
  86. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/bdm.py +0 -0
  87. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/bdmp.py +0 -0
  88. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/conftools.py +0 -0
  89. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/drhook.py +0 -0
  90. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/grib.py +0 -0
  91. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/gribdiff.py +0 -0
  92. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/ifstools.py +0 -0
  93. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/igastuff.py +0 -0
  94. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/mars.py +0 -0
  95. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/odb.py +0 -0
  96. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/partitioning.py +0 -0
  97. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/tools/satrad.py +0 -0
  98. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/__init__.py +0 -0
  99. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/async.py +0 -0
  100. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/beacon.py +0 -0
  101. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/diffpygram.py +0 -0
  102. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/ens.py +0 -0
  103. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/hooks.py +0 -0
  104. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/taskdeco.py +0 -0
  105. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/usepygram.py +0 -0
  106. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/nwp/util/usetnt.py +0 -0
  107. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/proxy.py +0 -0
  108. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/sessions.py +0 -0
  109. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/syntax/__init__.py +0 -0
  110. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/syntax/stdattrs.py +0 -0
  111. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/syntax/stddeco.py +0 -0
  112. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/toolbox.py +0 -0
  113. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/__init__.py +0 -0
  114. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/actions.py +0 -0
  115. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/addons.py +0 -0
  116. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/arm.py +0 -0
  117. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/compression.py +0 -0
  118. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/date.py +0 -0
  119. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/ddhpack.py +0 -0
  120. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/delayedactions.py +0 -0
  121. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/env.py +0 -0
  122. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/folder.py +0 -0
  123. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/grib.py +0 -0
  124. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/lfi.py +0 -0
  125. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/listings.py +0 -0
  126. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/names.py +0 -0
  127. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/net.py +0 -0
  128. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/odb.py +0 -0
  129. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/parallelism.py +0 -0
  130. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/prestaging.py +0 -0
  131. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/rawfiles.py +0 -0
  132. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/schedulers.py +0 -0
  133. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/services.py +0 -0
  134. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/storage.py +0 -0
  135. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/surfex.py +0 -0
  136. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/systems.py +0 -0
  137. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/tools/targets.py +0 -0
  138. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/__init__.py +0 -0
  139. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/config.py +0 -0
  140. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/empty.py +0 -0
  141. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/helpers.py +0 -0
  142. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/introspection.py +0 -0
  143. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/iosponge.py +0 -0
  144. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/roles.py +0 -0
  145. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/storefunctions.py +0 -0
  146. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/structs.py +0 -0
  147. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex/util/worker.py +0 -0
  148. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex_nwp.egg-info/dependency_links.txt +0 -0
  149. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex_nwp.egg-info/requires.txt +0 -0
  150. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/src/vortex_nwp.egg-info/top_level.txt +0 -0
  151. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_algo_server.py +0 -0
  152. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_arpifs_listings_integration.py +0 -0
  153. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_cfgparser.py +0 -0
  154. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_cfgtemplating.py +0 -0
  155. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_compression.py +0 -0
  156. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_config.py +0 -0
  157. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_conftools.py +0 -0
  158. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_containers.py +0 -0
  159. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_doctests.py +0 -0
  160. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_ecflow.py +0 -0
  161. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_ecmwf_interface.py +0 -0
  162. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_env.py +0 -0
  163. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_epygram.py +0 -0
  164. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_gco.py +0 -0
  165. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_ifstools.py +0 -0
  166. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_import.py +0 -0
  167. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_iosponge.py +0 -0
  168. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_job_examples.py +0 -0
  169. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_layoutappconf.py +0 -0
  170. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_layoutjobs.py +0 -0
  171. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_layoutmonitor.py +0 -0
  172. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_layoutnodes.py +0 -0
  173. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_net_netstat.py +0 -0
  174. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_net_ssh.py +0 -0
  175. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_partitioning.py +0 -0
  176. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_providers.py +0 -0
  177. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_sessions_stuff.py +0 -0
  178. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_simpleworkflow.py +0 -0
  179. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_smartftget.py +0 -0
  180. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_ssh.py +0 -0
  181. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_storage.py +0 -0
  182. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_stores.py +0 -0
  183. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_syntax.py +0 -0
  184. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_targets.py +0 -0
  185. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_templates.py +0 -0
  186. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_toolsodb.py +0 -0
  187. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_uget.py +0 -0
  188. {vortex_nwp-2.1.2 → vortex_nwp-2.1.3}/tests/test_vortexnames.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortex-nwp
3
- Version: 2.1.2
3
+ Version: 2.1.3
4
4
  Summary: A Python library to write Numerical Weather Prediction pipelines components
5
5
  Author-email: The Vortex Team <vortex.support@meteo.fr>
6
6
  License: CECILL-C
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "vortex-nwp"
7
- version = "2.1.2"
7
+ version = "2.1.3"
8
8
  description = "A Python library to write Numerical Weather Prediction pipelines components"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -53,10 +53,10 @@ from .toolbox import algo as task
53
53
 
54
54
  from . import nwp as nwp # footprints import
55
55
 
56
- __version__ = "2.1.2"
56
+ __version__ = "2.1.3"
57
57
  __prompt__ = "Vortex v-" + __version__ + ":"
58
58
 
59
- __nextversion__ = "2.1.3"
59
+ __nextversion__ = "2.1.4"
60
60
  __tocinfoline__ = "VORTEX core package"
61
61
 
62
62
  __all__ = [
@@ -764,12 +764,25 @@ def load(inifile="@geometries.ini", refresh=False, verbose=True):
764
764
 
765
765
  The class that will be instantiated depends on the "kind" keyword..
766
766
  """
767
+ from vortex import sessions
768
+
767
769
  iniconf = configparser.ConfigParser()
770
+
771
+ # Load from vortex distribution
768
772
  with importlib.resources.open_text(
769
773
  "vortex.data",
770
774
  "geometries.ini",
771
775
  ) as fh:
772
776
  iniconf.read_file(fh)
777
+
778
+ # Load from user's config directory if it exists
779
+ glove = sessions.current().glove
780
+ local = sessions.system()
781
+ user_geometries = glove.configrc + "/geometries.ini"
782
+ if local.path.exists(user_geometries):
783
+ with open(user_geometries, encoding="utf-8") as fh:
784
+ iniconf.read_file(fh)
785
+
773
786
  for item in iniconf.sections():
774
787
  gdesc = dict(iniconf.items(item))
775
788
  gkind = gdesc.get("kind")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortex-nwp
3
- Version: 2.1.2
3
+ Version: 2.1.3
4
4
  Summary: A Python library to write Numerical Weather Prediction pipelines components
5
5
  Author-email: The Vortex Team <vortex.support@meteo.fr>
6
6
  License: CECILL-C
@@ -159,6 +159,7 @@ tests/test_ecmwf_interface.py
159
159
  tests/test_env.py
160
160
  tests/test_epygram.py
161
161
  tests/test_gco.py
162
+ tests/test_geometries.py
162
163
  tests/test_ifstools.py
163
164
  tests/test_import.py
164
165
  tests/test_iosponge.py
@@ -0,0 +1,170 @@
1
+ """Tests for geometry loading from distribution and user configuration."""
2
+
3
+ import os
4
+ import tempfile
5
+ from pathlib import Path
6
+ from unittest.mock import PropertyMock, patch
7
+
8
+ import pytest
9
+
10
+
11
+ @pytest.fixture
12
+ def user_geometries_file():
13
+ """Create a temporary user geometries.ini file and set up the environment."""
14
+ # Create a temporary directory for user config
15
+ with tempfile.TemporaryDirectory() as tmpdir:
16
+ user_config_dir = Path(tmpdir)
17
+ geometries_file = user_config_dir / "geometries.ini"
18
+
19
+ # Write test geometries to the file
20
+ geometries_file.write_text("""# User-specific geometries for testing
21
+ [test_user_geo]
22
+ info = My custom test geometry
23
+ kind = gauss
24
+ area = france
25
+ truncation = 999
26
+ stretching = 3.0
27
+
28
+ [test_projected]
29
+ info = User projected geometry
30
+ kind = projected
31
+ area = testarea
32
+ resolution = 5.0
33
+ runit = km
34
+ """)
35
+
36
+ # Patch the configrc property to return our temp directory
37
+ with patch(
38
+ "vortex.gloves.Glove.configrc", new_callable=PropertyMock
39
+ ) as mock_configrc:
40
+ mock_configrc.return_value = str(user_config_dir)
41
+ yield geometries_file
42
+
43
+
44
+ @pytest.fixture
45
+ def user_override_file():
46
+ """Create a user geometries.ini that overrides a standard geometry."""
47
+ with tempfile.TemporaryDirectory() as tmpdir:
48
+ user_config_dir = Path(tmpdir)
49
+ geometries_file = user_config_dir / "geometries.ini"
50
+
51
+ # Override a standard geometry
52
+ geometries_file.write_text("""# Override standard geometry
53
+ [global798]
54
+ info = User-overridden ARPEGE geometry
55
+ kind = gauss
56
+ area = custom
57
+ truncation = 798
58
+ stretching = 5.0
59
+ """)
60
+
61
+ with patch(
62
+ "vortex.gloves.Glove.configrc", new_callable=PropertyMock
63
+ ) as mock_configrc:
64
+ mock_configrc.return_value = str(user_config_dir)
65
+ yield geometries_file
66
+
67
+
68
+ def test_load_standard_geometries():
69
+ """Test that standard geometries are loaded from distribution."""
70
+ from vortex.data import geometries
71
+
72
+ # Should have loaded standard geometries
73
+ # There are 335 in the distribution at the time of writing
74
+ assert len(geometries.keys()) > 300
75
+
76
+ # Check a known standard geometry
77
+ assert "global798" in geometries.keys()
78
+
79
+ geo = geometries.get(tag="global798")
80
+ assert geo.info == "ARPEGE TL798 stretched-rotated geometry"
81
+ assert geo.truncation == 798
82
+ assert geo.stretching == 2.4
83
+ assert geo.area == "france"
84
+
85
+
86
+ def test_load_user_geometries(user_geometries_file):
87
+ """Test that user geometries are loaded from ~/.vortexrc/geometries.ini."""
88
+ # Import geometries module - this will trigger load() with our patched configrc
89
+ # need to reload to pick up the new configrc path
90
+ import importlib
91
+ from vortex.data import geometries as geom_module
92
+
93
+ importlib.reload(geom_module)
94
+
95
+ from vortex.data import geometries
96
+
97
+ # User geometries should be present
98
+ assert "test_user_geo" in geometries.keys()
99
+ assert "test_projected" in geometries.keys()
100
+
101
+ # Check user gaussian geometry
102
+ geo = geometries.get(tag="test_user_geo")
103
+ assert geo.info == "My custom test geometry"
104
+ assert geo.truncation == 999
105
+ assert geo.stretching == 3.0
106
+ assert type(geo).__name__ == "GaussGeometry"
107
+
108
+ # Check user projected geometry
109
+ geo2 = geometries.get(tag="test_projected")
110
+ assert geo2.info == "User projected geometry"
111
+ assert geo2.resolution == 5.0
112
+ assert type(geo2).__name__ == "ProjectedGeometry"
113
+
114
+
115
+ def test_user_geometry_override(user_override_file):
116
+ """Test that user geometries override standard ones with the same tag."""
117
+ import importlib
118
+ from vortex.data import geometries as geom_module
119
+
120
+ importlib.reload(geom_module)
121
+
122
+ from vortex.data import geometries
123
+
124
+ # The global798 geometry should have user values, not standard ones
125
+ geo = geometries.get(tag="global798")
126
+ assert geo.info == "User-overridden ARPEGE geometry"
127
+ assert geo.area == "custom"
128
+ assert geo.stretching == 5.0
129
+ assert (
130
+ geo.truncation == 798
131
+ ) # Same as original but with different stretching
132
+
133
+
134
+ def test_geometry_singleton_behavior():
135
+ """Test that GetByTag returns the same object for repeated calls."""
136
+ from vortex.data import geometries
137
+
138
+ # Multiple retrievals should return the same object
139
+ geo1 = geometries.get(tag="global798")
140
+ geo2 = geometries.Geometry("global798")
141
+ geo3 = geometries.GaussGeometry("global798")
142
+
143
+ # All should be the exact same object (singleton behavior)
144
+ assert geo1 is geo2
145
+ assert geo2 is geo3
146
+
147
+
148
+ def test_create_new_geometry_requires_explicit_new():
149
+ """Test that creating a non-existent geometry requires new=True."""
150
+ from vortex.data import geometries
151
+
152
+ # Trying to access non-existent geometry should raise RuntimeError
153
+ with pytest.raises(RuntimeError, match="does not exist yet"):
154
+ geometries.Geometry("nonexistent_geometry")
155
+
156
+ # But creating with new=True should work
157
+ new_geo = geometries.GaussGeometry(
158
+ tag="runtime_created_geo",
159
+ new=True,
160
+ info="Created at runtime",
161
+ truncation=100,
162
+ stretching=2.0,
163
+ area="test",
164
+ )
165
+
166
+ assert new_geo.tag == "runtime_created_geo"
167
+
168
+ # Now it should be accessible
169
+ retrieved = geometries.Geometry("runtime_created_geo")
170
+ assert retrieved is new_geo
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes