polytope-python 2.0.4__tar.gz → 2.1.1__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 (271) hide show
  1. {polytope_python-2.0.4 → polytope_python-2.1.1}/.gitignore +3 -0
  2. {polytope_python-2.0.4/polytope_python.egg-info → polytope_python-2.1.1}/PKG-INFO +1 -1
  3. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/_version.py +1 -1
  4. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/fdb.py +23 -14
  5. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/local_regular.py +42 -20
  6. {polytope_python-2.0.4 → polytope_python-2.1.1/polytope_python.egg-info}/PKG-INFO +1 -1
  7. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/ci-config.yml +0 -0
  8. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/ci-hpc-config.yml +0 -0
  9. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/workflows/cd.yml +0 -0
  10. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/workflows/downstream-ci.yml +0 -0
  11. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/workflows/label-public-pr.yml +0 -0
  12. {polytope_python-2.0.4 → polytope_python-2.1.1}/.github/workflows/test-pypi.yml +0 -0
  13. {polytope_python-2.0.4 → polytope_python-2.1.1}/.pre-commit-config.yaml +0 -0
  14. {polytope_python-2.0.4 → polytope_python-2.1.1}/.readthedocs.yaml +0 -0
  15. {polytope_python-2.0.4 → polytope_python-2.1.1}/ACKNOWLEDGEMENTS.rst +0 -0
  16. {polytope_python-2.0.4 → polytope_python-2.1.1}/CONTRIBUTING.rst +0 -0
  17. {polytope_python-2.0.4 → polytope_python-2.1.1}/LICENSE +0 -0
  18. {polytope_python-2.0.4 → polytope_python-2.1.1}/Makefile +0 -0
  19. {polytope_python-2.0.4 → polytope_python-2.1.1}/README.md +0 -0
  20. {polytope_python-2.0.4 → polytope_python-2.1.1}/codecov.yml +0 -0
  21. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/API.md +0 -0
  22. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/Axis_types.md +0 -0
  23. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/Datacube.md +0 -0
  24. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/Overview.md +0 -0
  25. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/Slicer.md +0 -0
  26. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/images/Polytope_APIs_3.png +0 -0
  27. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/images/polytope_components_5.png +0 -0
  28. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/images/slicing_process.png +0 -0
  29. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Developer_Guide/shapes.md +0 -0
  30. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Overview/Overview.md +0 -0
  31. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Overview/Polytope_at_ECMWF.md +0 -0
  32. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Overview/images_overview/ecmwf_datacube.png +0 -0
  33. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/Overview/images_overview/ecmwf_polytope.png +0 -0
  34. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/User_Guide/Building_Features.md +0 -0
  35. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/User_Guide/Example.md +0 -0
  36. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/User_Guide/Getting_started.md +0 -0
  37. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/User_Guide/Overview.md +0 -0
  38. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Algorithm/User_Guide/images_users/shipping_route.png +0 -0
  39. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Data_Portfolio.md +0 -0
  40. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Design_doc.md +0 -0
  41. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_boundingbox_example.ipynb +0 -0
  42. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_country_example.ipynb +0 -0
  43. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_polygon_example.ipynb +0 -0
  44. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_timeseries_example.ipynb +0 -0
  45. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_trajectory_example.ipynb +0 -0
  46. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/OpenData/od_vertical_profile_example.ipynb +0 -0
  47. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/boundingbox_example.ipynb +0 -0
  48. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/country_example.ipynb +0 -0
  49. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/examples.md +0 -0
  50. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/polygon_example.ipynb +0 -0
  51. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/timeseries_example.ipynb +0 -0
  52. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/trajectory_example.ipynb +0 -0
  53. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Examples/vertical_profile_example.ipynb +0 -0
  54. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/boundingbox.md +0 -0
  55. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/feature.md +0 -0
  56. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/polygon.md +0 -0
  57. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/timeseries.md +0 -0
  58. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/trajectory.md +0 -0
  59. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Features/vertical_profile.md +0 -0
  60. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Installation.md +0 -0
  61. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Overview.md +0 -0
  62. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/Service/Quick_Start.md +0 -0
  63. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/extra.css +0 -0
  64. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/flight_path.png +0 -0
  65. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/greece.png +0 -0
  66. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/logo.gif +0 -0
  67. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/polytope_feature.png +0 -0
  68. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/polytope_logo_new_animated_AdobeExpress_3.gif +0 -0
  69. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/timeseries.png +0 -0
  70. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/timeseries_example.png +0 -0
  71. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/images/timeseries_qs.png +0 -0
  72. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/index.md +0 -0
  73. {polytope_python-2.0.4 → polytope_python-2.1.1}/docs/requirements.txt +0 -0
  74. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/3D_shipping_route.py +0 -0
  75. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/3D_shipping_route_wave_model.py +0 -0
  76. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/4D_flight_path.py +0 -0
  77. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/country_slicing.py +0 -0
  78. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/cyclic_route_around_earth.py +0 -0
  79. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shp +0 -0
  80. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shx +0 -0
  81. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/Shipping-Lanes-v1.shp +0 -0
  82. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/Shipping-Lanes-v1.shx +0 -0
  83. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/World_Countries__Generalized_.shp +0 -0
  84. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/World_Countries__Generalized_.shx +0 -0
  85. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/earth_image.jpg +0 -0
  86. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/map_earth_4k.jpg +0 -0
  87. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/mars_req_9km_wind.req +0 -0
  88. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/mars_req_levels.req +0 -0
  89. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/mars_req_timeseries.req +0 -0
  90. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/output4.grib +0 -0
  91. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/output4.req +0 -0
  92. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/output8.grib +0 -0
  93. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/output8.req +0 -0
  94. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/temp_model_levels.grib +0 -0
  95. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/timeseries_t2m.grib +0 -0
  96. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/data/winds.grib +0 -0
  97. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/healpix_grid_box_example.py +0 -0
  98. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/octahedral_grid_box_example.py +0 -0
  99. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/octahedral_grid_country_example.py +0 -0
  100. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/plotting_country_data.py +0 -0
  101. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/read_me_example.py +0 -0
  102. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/requirements_examples.txt +0 -0
  103. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/slicing_all_ecmwf_countries.py +0 -0
  104. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/timeseries_example.py +0 -0
  105. {polytope_python-2.0.4 → polytope_python-2.1.1}/examples/wind_farms.py +0 -0
  106. {polytope_python-2.0.4 → polytope_python-2.1.1}/mkdocs.yml +0 -0
  107. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/fdb_performance.py +0 -0
  108. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/fdb_performance_3D.py +0 -0
  109. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/fdb_scalability_plot.py +0 -0
  110. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/fdb_slice_many_numbers_timeseries.py +0 -0
  111. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/performance_many_num_steps.py +0 -0
  112. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/plotting_scalability.py +0 -0
  113. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/scalability_test.py +0 -0
  114. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance/scalability_test_2.py +0 -0
  115. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance_unstructured/octahedral_vs_unstructured_slicing.py +0 -0
  116. {polytope_python-2.0.4 → polytope_python-2.1.1}/performance_unstructured/plot_structured_vs_unstructured_slicing.py +0 -0
  117. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/__init__.py +0 -0
  118. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/__init__.py +0 -0
  119. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/__init__.py +0 -0
  120. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/catalogue_helper.py +0 -0
  121. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/datacube.py +0 -0
  122. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/mock.py +0 -0
  123. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/backends/xarray.py +0 -0
  124. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/datacube_axis.py +0 -0
  125. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/index_tree.proto +0 -0
  126. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/index_tree_pb2.py +0 -0
  127. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/quadtree/quad_tree.py +0 -0
  128. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/quadtree/quadtree_additional_operations.py +0 -0
  129. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/tensor_index_tree.py +0 -0
  130. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/__init__.py +0 -0
  131. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_cyclic/__init__.py +0 -0
  132. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +0 -0
  133. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/__init__.py +0 -0
  134. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py +0 -0
  135. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/__init__.py +0 -0
  136. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix.py +0 -0
  137. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py +0 -0
  138. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +0 -0
  139. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/__init__.py +0 -0
  140. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/icon.py +0 -0
  141. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/lambert_conformal.py +0 -0
  142. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/unstructured.py +0 -0
  143. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py +0 -0
  144. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_gaussian.py +0 -0
  145. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py +0 -0
  146. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/regular.py +0 -0
  147. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_merger/__init__.py +0 -0
  148. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_merger/datacube_merger.py +0 -0
  149. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_reverse/__init__.py +0 -0
  150. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_reverse/datacube_reverse.py +0 -0
  151. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_transformations.py +0 -0
  152. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_type_change/__init__.py +0 -0
  153. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py +0 -0
  154. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/datacube/tree_encoding.py +0 -0
  155. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/__init__.py +0 -0
  156. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/engine.py +0 -0
  157. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/hullslicer.py +0 -0
  158. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/optimised_point_in_polygon_slicer.py +0 -0
  159. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/optimised_quadtree_slicer.py +0 -0
  160. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/point_in_polygon_slicer.py +0 -0
  161. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/quadtree_slicer.py +0 -0
  162. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/engine/slicing_tools.py +0 -0
  163. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/options.py +0 -0
  164. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/polytope.py +0 -0
  165. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/shapes.py +0 -0
  166. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/__init__.py +0 -0
  167. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/combinatorics.py +0 -0
  168. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/engine_tools.py +0 -0
  169. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/exceptions.py +0 -0
  170. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/geometry.py +0 -0
  171. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/list_tools.py +0 -0
  172. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_feature/utility/profiling.py +0 -0
  173. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_python.egg-info/SOURCES.txt +0 -0
  174. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_python.egg-info/dependency_links.txt +0 -0
  175. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_python.egg-info/requires.txt +0 -0
  176. {polytope_python-2.0.4 → polytope_python-2.1.1}/polytope_python.egg-info/top_level.txt +0 -0
  177. {polytope_python-2.0.4 → polytope_python-2.1.1}/pyproject.toml +0 -0
  178. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/Cargo.toml +0 -0
  179. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/distance.rs +0 -0
  180. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/healpix_nested.rs +0 -0
  181. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/lambert_conformal.rs +0 -0
  182. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/lib.rs +0 -0
  183. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/list_tools.rs +0 -0
  184. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/octahedral.rs +0 -0
  185. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/point_in_polygon.rs +0 -0
  186. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/quadtree_mod.rs +0 -0
  187. {polytope_python-2.0.4 → polytope_python-2.1.1}/rust/src/slicing_tools.rs +0 -0
  188. {polytope_python-2.0.4 → polytope_python-2.1.1}/setup.cfg +0 -0
  189. {polytope_python-2.0.4 → polytope_python-2.1.1}/setup.py +0 -0
  190. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/conftest.py +0 -0
  191. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/fdb_data/schema +0 -0
  192. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/helper_functions.py +0 -0
  193. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/profiled_quadtree.profile +0 -0
  194. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/quadtree_slicer_profiler.py +0 -0
  195. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_axis_mappers.py +0 -0
  196. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_bad_request_error.py +0 -0
  197. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_combinatorics.py +0 -0
  198. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_axis_over_negative_vals.py +0 -0
  199. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_axis_slicer_not_0.py +0 -0
  200. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_axis_slicing.py +0 -0
  201. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_nearest.py +0 -0
  202. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_simple.py +0 -0
  203. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_cyclic_snapping.py +0 -0
  204. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_datacube_axes_init.py +0 -0
  205. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_datacube_mock.py +0 -0
  206. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_datacube_xarray.py +0 -0
  207. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_date_time_unmerged.py +0 -0
  208. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_ecmwf_oper_data_fdb.py +0 -0
  209. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_engine_slicer.py +0 -0
  210. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_fdb_datacube.py +0 -0
  211. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_fdb_unmap_tree.py +0 -0
  212. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_float_type.py +0 -0
  213. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_healpix_mapper.py +0 -0
  214. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_healpix_nested_grid.py +0 -0
  215. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_hull_slicer.py +0 -0
  216. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_hullslicer_engine.py +0 -0
  217. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_icon_grid_unstructured.py +0 -0
  218. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_icon_grid_unstructured_fdb.py +0 -0
  219. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_incomplete_tree_fdb.py +0 -0
  220. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_lambert_lam_grid_unstructured_fdb.py +0 -0
  221. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_lambert_lam_grid_unstructured_fdb_optimised_quadtree.py +0 -0
  222. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_local_grid_cyclic.py +0 -0
  223. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_local_regular_grid.py +0 -0
  224. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_local_swiss_grid.py +0 -0
  225. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_mappers.py +0 -0
  226. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_merge_cyclic_octahedral.py +0 -0
  227. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_merge_octahedral_one_axis.py +0 -0
  228. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_merge_transformation.py +0 -0
  229. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_multiple_param_fdb.py +0 -0
  230. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_octahedral_grid.py +0 -0
  231. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_orca_irregular_grid.py +0 -0
  232. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_orca_irregular_grid_optimised_point_in_polygon.py +0 -0
  233. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_orca_irregular_grid_point_in_polygon.py +0 -0
  234. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_override_md5_hash_options.py +0 -0
  235. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_point_nearest.py +0 -0
  236. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_point_shape.py +0 -0
  237. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_point_union.py +0 -0
  238. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_polytope_extract.py +0 -0
  239. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_polytope_extract_fdb.py +0 -0
  240. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_profiling_requesttree.py +0 -0
  241. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_quad_tree.py +0 -0
  242. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_quadtree_edge_cases.py +0 -0
  243. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_quadtree_indices.py +0 -0
  244. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_quadtree_optimisation.py +0 -0
  245. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_reduced_ll_grid.py +0 -0
  246. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_regular_grid.py +0 -0
  247. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_regular_reduced_grid.py +0 -0
  248. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_request_tree.py +0 -0
  249. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_request_trees_after_slicing.py +0 -0
  250. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_reverse_transformation.py +0 -0
  251. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_shapes.py +0 -0
  252. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_shapes_volume.py +0 -0
  253. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slice_date_range_fdb.py +0 -0
  254. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slice_date_range_fdb_v2.py +0 -0
  255. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slice_fdb_box.py +0 -0
  256. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicer_engine.py +0 -0
  257. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicer_era5.py +0 -0
  258. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicer_xarray.py +0 -0
  259. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicing_unsliceable_axis.py +0 -0
  260. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicing_xarray_3D.py +0 -0
  261. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_slicing_xarray_4D.py +0 -0
  262. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_snapping.py +0 -0
  263. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_snapping_real_data.py +0 -0
  264. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_tree_protobuf.py +0 -0
  265. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_tree_protobuf_encoding.py +0 -0
  266. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_tree_protobuf_encoding_fdb.py +0 -0
  267. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_type_change_transformation.py +0 -0
  268. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_union_gj.py +0 -0
  269. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_union_point_box.py +0 -0
  270. {polytope_python-2.0.4 → polytope_python-2.1.1}/tests/test_wave_spectra_data.py +0 -0
  271. {polytope_python-2.0.4 → polytope_python-2.1.1}/tox.ini +0 -0
@@ -57,6 +57,7 @@ target
57
57
  rust_deployment_venv
58
58
  *.so
59
59
  *.nc
60
+ *.grb
60
61
 
61
62
  test_w_qubed
62
63
  rust_venv
@@ -75,4 +76,6 @@ performance_plots_qubed
75
76
  *.nc
76
77
  **/*venv*
77
78
 
79
+ bugfix*
80
+
78
81
  icon_grids
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polytope-python
3
- Version: 2.0.4
3
+ Version: 2.1.1
4
4
  Summary: Polytope datacube feature extraction library
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  Maintainer-email: James Hawkes <James.Hawkes@ecmwf.int>, Mathilde Leuridan <Mathilde.Leuridan@ecmwf.int>
@@ -1,2 +1,2 @@
1
1
  # Do not change! Do not track in version control!
2
- __version__ = "2.0.4"
2
+ __version__ = "2.1.1"
@@ -219,28 +219,32 @@ class FDBDatacube(Datacube):
219
219
 
220
220
  def remove_duplicates_in_request_ranges(self, fdb_node_ranges, current_start_idxs):
221
221
  seen_indices = set()
222
+ new_fdb_node_ranges = []
223
+ new_current_start_idxs = []
222
224
  for i, idxs_list in enumerate(current_start_idxs):
225
+ new_idx_group = []
226
+ new_fdb_group = []
223
227
  for k, sub_lat_idxs in enumerate(idxs_list):
224
228
  actual_fdb_node = fdb_node_ranges[i][k]
225
- original_fdb_node_range_vals = []
226
- new_current_start_idx = []
229
+ original_vals = []
230
+ filtered_idxs = []
227
231
  for j, idx in enumerate(sub_lat_idxs):
228
232
  if idx not in seen_indices:
229
- # NOTE: need to remove it from the values in the corresponding tree node
230
- # NOTE: need to read just the range we give to gj
231
- original_fdb_node_range_vals.append(actual_fdb_node[0].values[j])
232
233
  seen_indices.add(idx)
233
- new_current_start_idx.append(idx)
234
- if original_fdb_node_range_vals != []:
235
- actual_fdb_node[0].values = tuple(original_fdb_node_range_vals)
234
+ filtered_idxs.append(idx)
235
+ original_vals.append(actual_fdb_node[0].values[j])
236
+ if filtered_idxs:
237
+ # keep only if we had values still
238
+ actual_fdb_node[0].values = tuple(original_vals)
239
+ new_idx_group.append(filtered_idxs)
240
+ new_fdb_group.append(actual_fdb_node)
236
241
  else:
237
- # there are no values on this node anymore so can remove it
242
+ # remove this node because we removed all values
238
243
  actual_fdb_node[0].remove_branch()
239
- if len(new_current_start_idx) == 0:
240
- current_start_idxs[i].pop(k)
241
- else:
242
- current_start_idxs[i][k] = new_current_start_idx
243
- return (fdb_node_ranges, current_start_idxs)
244
+ new_current_start_idxs.append(new_idx_group)
245
+ new_fdb_node_ranges.append(new_fdb_group)
246
+
247
+ return new_fdb_node_ranges, new_current_start_idxs
244
248
 
245
249
  def nearest_lat_lon_search(self, requests):
246
250
  if len(self.nearest_search) != 0:
@@ -341,6 +345,9 @@ class FDBDatacube(Datacube):
341
345
  # TODO: change this to accommodate non consecutive indexes being compressed too
342
346
  current_idx[i].extend(key_value_path["values"])
343
347
  fdb_range_n[i].append(c)
348
+ assert len(current_idx) == len(fdb_range_n)
349
+ for i, node in enumerate(fdb_range_n):
350
+ assert len(node[0].values) == len(current_idx[i])
344
351
  return (current_idx, fdb_range_n)
345
352
 
346
353
  def assign_fdb_output_to_nodes(self, output_iterator, fdb_requests_decoding_info):
@@ -363,6 +370,8 @@ class FDBDatacube(Datacube):
363
370
  (new_fdb_node_ranges, new_current_start_idx) = self.remove_duplicates_in_request_ranges(
364
371
  fdb_node_ranges, current_start_idx
365
372
  )
373
+ current_start_idx = new_current_start_idx
374
+ fdb_node_ranges = new_fdb_node_ranges
366
375
  interm_request_ranges = []
367
376
  # TODO: modify the start indexes to have as many arrays as the request ranges
368
377
  new_fdb_node_ranges = []
@@ -1,5 +1,7 @@
1
1
  import bisect
2
2
 
3
+ import numpy as np
4
+
3
5
  from ..datacube_mappers import DatacubeMapper
4
6
 
5
7
 
@@ -45,15 +47,28 @@ class LocalRegularGridMapper(DatacubeMapper):
45
47
  if self._axis_reversed[mapped_axes[1]]:
46
48
  raise NotImplementedError("Local regular grid with second axis in decreasing order is not supported")
47
49
 
50
+ self._second_axis_vals = np.arange(
51
+ self._second_axis_min,
52
+ self._second_axis_min + self._second_deg_increment * (self.second_resolution + 1),
53
+ self._second_deg_increment,
54
+ dtype=np.float64,
55
+ )
56
+
48
57
  def first_axis_vals(self):
49
58
  if self._axis_reversed[self._mapped_axes[0]]:
50
- first_ax_vals = [
51
- self._first_axis_max - i * self._first_deg_increment for i in range(self.first_resolution + 1)
52
- ]
59
+ first_ax_vals = np.arange(
60
+ self._first_axis_max,
61
+ self._first_axis_max - self._first_deg_increment * (self.first_resolution + 1),
62
+ -self._first_deg_increment,
63
+ dtype=np.float64,
64
+ )
53
65
  else:
54
- first_ax_vals = [
55
- self._first_axis_min + i * self._first_deg_increment for i in range(self.first_resolution + 1)
56
- ]
66
+ first_ax_vals = np.arange(
67
+ self._first_axis_min,
68
+ self._first_axis_min + self._first_deg_increment * (self.first_resolution + 1),
69
+ self._first_deg_increment,
70
+ dtype=np.float64,
71
+ )
57
72
  return first_ax_vals
58
73
 
59
74
  def map_first_axis(self, lower, upper):
@@ -62,10 +77,7 @@ class LocalRegularGridMapper(DatacubeMapper):
62
77
  return return_vals
63
78
 
64
79
  def second_axis_vals(self, first_val):
65
- second_ax_vals = [
66
- self._second_axis_min + i * self._second_deg_increment for i in range(self.second_resolution + 1)
67
- ]
68
- return second_ax_vals
80
+ return self._second_axis_vals
69
81
 
70
82
  def map_second_axis(self, first_val, lower, upper):
71
83
  axis_lines = self.second_axis_vals(first_val)
@@ -89,16 +101,26 @@ class LocalRegularGridMapper(DatacubeMapper):
89
101
  return first_idx * self.second_resolution
90
102
 
91
103
  def unmap(self, first_val, second_vals, unmapped_idx=None):
92
- tol = 1e-8
93
- first_val = [i for i in self._first_axis_vals if first_val[0] - tol <= i <= first_val[0] + tol][0]
94
- first_idx = self._first_axis_vals.index(first_val)
95
- return_idxs = []
96
- for second_val in second_vals:
97
- second_val = [i for i in self.second_axis_vals(first_val) if second_val - tol <= i <= second_val + tol][0]
98
- second_idx = self.second_axis_vals(first_val).index(second_val)
99
- final_index = self.axes_idx_to_regular_idx(first_idx, second_idx)
100
- return_idxs.append(final_index)
101
- return return_idxs
104
+ first_array = self._first_axis_vals
105
+ second_array = self._second_axis_vals
106
+ second_vals = np.asarray(second_vals)
107
+ descending = self._axis_reversed[self._mapped_axes[0]]
108
+ if descending:
109
+ # right descending order for searchsorted
110
+ first_idx = np.searchsorted(first_array[::-1], first_val[0])
111
+ first_idx = len(first_array) - 1 - first_idx
112
+ else:
113
+ first_idx = np.searchsorted(first_array, first_val[0])
114
+ if first_idx > 0 and first_idx < len(first_array):
115
+ left_val = first_array[first_idx - 1]
116
+ right_val = first_array[first_idx]
117
+ if abs(first_val[0] - left_val) < abs(first_val[0] - right_val):
118
+ first_idx -= 1
119
+ second_idxs = np.searchsorted(second_array, second_vals)
120
+
121
+ # map to grid idx
122
+ final_idxs = first_idx * (self.second_resolution + 1) + second_idxs
123
+ return final_idxs
102
124
 
103
125
 
104
126
  # md5 grid hash in form {resolution : hash}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polytope-python
3
- Version: 2.0.4
3
+ Version: 2.1.1
4
4
  Summary: Polytope datacube feature extraction library
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  Maintainer-email: James Hawkes <James.Hawkes@ecmwf.int>, Mathilde Leuridan <Mathilde.Leuridan@ecmwf.int>
File without changes