polytope-python 2.1.7__tar.gz → 2.1.9__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.
- polytope_python-2.1.9/.github/workflows/ci.yml +32 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/workflows/downstream-ci.yml +1 -1
- {polytope_python-2.1.7/polytope_python.egg-info → polytope_python-2.1.9}/PKG-INFO +4 -3
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/_version.py +1 -1
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/fdb.py +11 -3
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py +2 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/lambert_conformal.py +2 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/local_regular.py +7 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py +2 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/optimised_point_in_polygon_slicer.py +2 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/optimised_quadtree_slicer.py +3 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/point_in_polygon_slicer.py +2 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/quadtree_slicer.py +17 -4
- {polytope_python-2.1.7 → polytope_python-2.1.9/polytope_python.egg-info}/PKG-INFO +4 -3
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_python.egg-info/SOURCES.txt +1 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_python.egg-info/requires.txt +3 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/pyproject.toml +3 -2
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/ci-config.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/ci-hpc-config.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/workflows/cd.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/workflows/label-public-pr.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.github/workflows/test-pypi.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.gitignore +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.pre-commit-config.yaml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/.readthedocs.yaml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/ACKNOWLEDGEMENTS.rst +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/CONTRIBUTING.rst +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/LICENSE +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/Makefile +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/README.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/codecov.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/API.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/Axis_types.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/Datacube.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/Slicer.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/images/Polytope_APIs_3.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/images/polytope_components_5.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/images/slicing_process.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/shapes.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Overview/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Overview/Polytope_at_ECMWF.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Overview/images_overview/ecmwf_datacube.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Overview/images_overview/ecmwf_polytope.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Building_Features.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Example.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Getting_started.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/images_users/shipping_route.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Client/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Server/Design.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Server/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Data_Portfolio.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Design_doc.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_boundingbox_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_circle_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_country_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_polygon_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_position_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_timeseries_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_trajectory_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/OpenData/od_vertical_profile_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/boundingbox_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/circle_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/climate_dt_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/country_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/examples.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/extremes_dt_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/on-demand_dt_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/opendata_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/operational_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/polygon_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/position_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/timeseries_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/trajectory_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/vertical_profile_example.ipynb +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/boundingbox.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/circle.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/feature.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/polygon.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/position.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/timeseries.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/trajectory.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Features/vertical_profile.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Full_fields.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Installation.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Overview.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Quick_Start.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/extra.css +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/flight_path.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/greece.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/logo.gif +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/polytope_feature.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/polytope_logo_new_animated_AdobeExpress_3.gif +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/timeseries.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/timeseries_example.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/images/timeseries_qs.png +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/index.md +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/docs/requirements.txt +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/3D_shipping_route.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/3D_shipping_route_wave_model.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/4D_flight_path.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/country_slicing.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/cyclic_route_around_earth.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shp +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shx +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/Shipping-Lanes-v1.shp +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/Shipping-Lanes-v1.shx +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/World_Countries__Generalized_.shp +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/World_Countries__Generalized_.shx +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/earth_image.jpg +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/map_earth_4k.jpg +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/mars_req_9km_wind.req +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/mars_req_levels.req +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/mars_req_timeseries.req +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/output4.grib +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/output4.req +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/output8.grib +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/output8.req +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/temp_model_levels.grib +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/timeseries_t2m.grib +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/winds.grib +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/healpix_grid_box_example.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/octahedral_grid_box_example.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/octahedral_grid_country_example.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/plotting_country_data.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/read_me_example.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/requirements_examples.txt +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/slicing_all_ecmwf_countries.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/timeseries_example.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/examples/wind_farms.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/mkdocs.yml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/fdb_performance.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/fdb_performance_3D.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/fdb_scalability_plot.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/fdb_slice_many_numbers_timeseries.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/performance_many_num_steps.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/plotting_scalability.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/scalability_test.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance/scalability_test_2.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance_unstructured/octahedral_vs_unstructured_slicing.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/performance_unstructured/plot_structured_vs_unstructured_slicing.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/catalogue_helper.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/datacube.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/mock.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/backends/xarray.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/datacube_axis.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/index_tree.proto +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/index_tree_pb2.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/quadtree/quad_tree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/quadtree/quadtree_additional_operations.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/switching_grid_helper.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/tensor_index_tree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_cyclic/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/icon.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular_mapper_types/unstructured.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_gaussian.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/regular.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_merger/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_merger/datacube_merger.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_reverse/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_reverse/datacube_reverse.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_transformations.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_type_change/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/datacube/tree_encoding.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/engine.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/hullslicer.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/slicing_tools.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/options.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/polytope.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/shapes.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/__init__.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/combinatorics.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/engine_tools.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/exceptions.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/geometry.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/list_tools.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/utility/profiling.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_python.egg-info/dependency_links.txt +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_python.egg-info/top_level.txt +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/Cargo.toml +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/distance.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/healpix_nested.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/lambert_conformal.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/lib.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/list_tools.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/octahedral.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/point_in_polygon.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/quadtree_mod.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/rust/src/slicing_tools.rs +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/setup.cfg +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/setup.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/conftest.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/fdb_data/schema +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/helper_functions.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/profiled_quadtree.profile +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/quadtree_slicer_profiler.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_axis_mappers.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_bad_request_error.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_combinatorics.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_axis_over_negative_vals.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_axis_slicer_not_0.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_axis_slicing.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_nearest.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_simple.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_cyclic_snapping.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_datacube_axes_init.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_datacube_mock.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_datacube_xarray.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_date_time_unmerged.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_ecmwf_oper_data_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_engine_slicer.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_fdb_datacube.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_fdb_unmap_tree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_float_type.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_healpix_mapper.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_healpix_nested_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_hull_slicer.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_hullslicer_engine.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_icon_grid_unstructured.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_icon_grid_unstructured_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_incomplete_tree_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_lambert_lam_grid_unstructured_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_lambert_lam_grid_unstructured_fdb_optimised_quadtree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_local_grid_cyclic.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_local_regular_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_local_swiss_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_mappers.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_merge_cyclic_octahedral.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_merge_octahedral_one_axis.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_merge_transformation.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_multiple_param_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_octahedral_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_orca_irregular_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_orca_irregular_grid_optimised_point_in_polygon.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_orca_irregular_grid_point_in_polygon.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_override_md5_hash_options.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_point_nearest.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_point_shape.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_point_union.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_polytope_extract.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_polytope_extract_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_profiling_requesttree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_quad_tree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_quadtree_edge_cases.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_quadtree_indices.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_quadtree_optimisation.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_reduced_ll_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_regular_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_regular_reduced_grid.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_request_tree.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_request_trees_after_slicing.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_reverse_transformation.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_shapes.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_shapes_volume.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slice_date_range_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slice_date_range_fdb_v2.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slice_fdb_box.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicer_engine.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicer_era5.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicer_xarray.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicing_unsliceable_axis.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicing_xarray_3D.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_slicing_xarray_4D.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_snapping.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_snapping_real_data.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_tree_protobuf.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_tree_protobuf_encoding.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_tree_protobuf_encoding_fdb.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_type_change_transformation.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_union_gj.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_union_point_box.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tests/test_wave_spectra_data.py +0 -0
- {polytope_python-2.1.7 → polytope_python-2.1.9}/tox.ini +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ "main", "develop" ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ "main", "develop" ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
python-qa:
|
|
11
|
+
name: python-qa
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout Repository
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
repository: ${{ inputs.repository }}
|
|
18
|
+
ref: ${{ inputs.ref }}
|
|
19
|
+
- name: Setup Python
|
|
20
|
+
uses: actions/setup-python@v4
|
|
21
|
+
with:
|
|
22
|
+
python-version: 3.x
|
|
23
|
+
- name: Install Python Dependencies
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
python -m pip install black flake8 isort
|
|
27
|
+
- name: Check isort
|
|
28
|
+
run: isort --check --diff . --profile black
|
|
29
|
+
- name: Check black
|
|
30
|
+
run: black --check --diff .
|
|
31
|
+
- name: Check flake8
|
|
32
|
+
run: flake8 .
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polytope-python
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.9
|
|
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>
|
|
@@ -31,6 +31,7 @@ Requires-Dist: tripy
|
|
|
31
31
|
Requires-Dist: xarray
|
|
32
32
|
Requires-Dist: conflator
|
|
33
33
|
Requires-Dist: protobuf
|
|
34
|
+
Requires-Dist: shapely
|
|
34
35
|
Provides-Extra: tests
|
|
35
36
|
Requires-Dist: pytest; extra == "tests"
|
|
36
37
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
@@ -40,14 +41,14 @@ Requires-Dist: h5netcdf; extra == "tests"
|
|
|
40
41
|
Requires-Dist: h5py; extra == "tests"
|
|
41
42
|
Requires-Dist: earthkit-data; extra == "tests"
|
|
42
43
|
Requires-Dist: matplotlib; extra == "tests"
|
|
43
|
-
Requires-Dist: pyfdb; extra == "tests"
|
|
44
|
+
Requires-Dist: pyfdb<=0.1.3; extra == "tests"
|
|
44
45
|
Provides-Extra: unstructured
|
|
45
46
|
Requires-Dist: eckit; extra == "unstructured"
|
|
46
47
|
Provides-Extra: catalogue
|
|
47
48
|
Requires-Dist: qubed; extra == "catalogue"
|
|
48
49
|
Provides-Extra: switching-grids
|
|
49
50
|
Requires-Dist: eccodes; extra == "switching-grids"
|
|
50
|
-
Requires-Dist: pyfdb; extra == "switching-grids"
|
|
51
|
+
Requires-Dist: pyfdb<=0.1.3; extra == "switching-grids"
|
|
51
52
|
Dynamic: license-file
|
|
52
53
|
|
|
53
54
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Do not change! Do not track in version control!
|
|
2
|
-
__version__ = "2.1.
|
|
2
|
+
__version__ = "2.1.9"
|
|
@@ -113,11 +113,19 @@ class FDBDatacube(Datacube):
|
|
|
113
113
|
# special param with direction and frequency
|
|
114
114
|
if len(polytope.points[idx]) > 1:
|
|
115
115
|
raise ValueError(
|
|
116
|
-
"Param
|
|
116
|
+
"Param 140251 is part of a special branching of the datacube. Please request it separately." # noqa: E501
|
|
117
|
+
)
|
|
118
|
+
if ax == "stream":
|
|
119
|
+
upper, lower, idx = polytope.extents(ax)
|
|
120
|
+
if "clmn" not in polytope.points[idx]:
|
|
121
|
+
self.fdb_coordinates.pop("year", None)
|
|
122
|
+
self.fdb_coordinates.pop("month", None)
|
|
123
|
+
else:
|
|
124
|
+
if len(polytope.points[idx]) > 1:
|
|
125
|
+
raise ValueError(
|
|
126
|
+
"Stream clmn is part of a special branching of the datacube. Please request it separately." # noqa: E501
|
|
117
127
|
)
|
|
118
128
|
self.fdb_coordinates.pop("quantile", None)
|
|
119
|
-
self.fdb_coordinates.pop("year", None)
|
|
120
|
-
self.fdb_coordinates.pop("month", None)
|
|
121
129
|
|
|
122
130
|
# NOTE: verify that we also remove the axis object for axes we've removed here
|
|
123
131
|
axes_to_remove = set(self.complete_axes) - set(self.fdb_coordinates.keys())
|
|
@@ -13,8 +13,8 @@ try:
|
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
use_rust = True
|
|
16
|
-
except (ModuleNotFoundError, ImportError):
|
|
17
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
16
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
17
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class NestedHealpixGridMapper(DatacubeMapper):
|
|
@@ -7,8 +7,8 @@ try:
|
|
|
7
7
|
from polytope_feature.polytope_rs import get_latlons_oblate, get_latlons_sphere
|
|
8
8
|
|
|
9
9
|
use_rust = True
|
|
10
|
-
except (ModuleNotFoundError, ImportError):
|
|
11
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
10
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
11
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class LambertConformalGridMapper(DatacubeMapper):
|
|
@@ -114,8 +114,7 @@ class LocalRegularGridMapper(DatacubeMapper):
|
|
|
114
114
|
descending = self._axis_reversed[self._mapped_axes[0]]
|
|
115
115
|
if descending:
|
|
116
116
|
# right descending order for searchsorted
|
|
117
|
-
first_idx = np.searchsorted(first_array
|
|
118
|
-
first_idx = len(first_array) - 1 - first_idx
|
|
117
|
+
first_idx = np.searchsorted(-first_array, -first_val[0])
|
|
119
118
|
else:
|
|
120
119
|
first_idx = np.searchsorted(first_array, first_val[0])
|
|
121
120
|
if first_idx > 0 and first_idx < len(first_array):
|
|
@@ -124,6 +123,12 @@ class LocalRegularGridMapper(DatacubeMapper):
|
|
|
124
123
|
if abs(first_val[0] - left_val) < abs(first_val[0] - right_val):
|
|
125
124
|
first_idx -= 1
|
|
126
125
|
second_idxs = np.searchsorted(second_array, second_vals)
|
|
126
|
+
for i, second_idx in enumerate(second_idxs):
|
|
127
|
+
if second_idx > 0 and second_idx < len(second_array):
|
|
128
|
+
left_val = second_array[second_idx - 1]
|
|
129
|
+
right_val = second_array[second_idx]
|
|
130
|
+
if abs(second_vals[i] - left_val) < abs(second_vals[i] - right_val):
|
|
131
|
+
second_idxs[i] -= 1
|
|
127
132
|
|
|
128
133
|
# map to grid idx
|
|
129
134
|
final_idxs = first_idx * (self.second_resolution + 1) + second_idxs
|
|
@@ -12,8 +12,8 @@ try:
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
use_rust = True
|
|
15
|
-
except (ModuleNotFoundError, ImportError):
|
|
16
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
15
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
16
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class OctahedralGridMapper(DatacubeMapper):
|
|
@@ -9,8 +9,8 @@ try:
|
|
|
9
9
|
from polytope_feature.polytope_rs import extract_point_in_poly_bbox
|
|
10
10
|
|
|
11
11
|
use_rust = True
|
|
12
|
-
except (ModuleNotFoundError, ImportError):
|
|
13
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
12
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
13
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
14
14
|
|
|
15
15
|
from shapely.geometry import Point
|
|
16
16
|
from shapely.geometry.polygon import Polygon
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/optimised_quadtree_slicer.py
RENAMED
|
@@ -10,8 +10,9 @@ try:
|
|
|
10
10
|
from polytope_feature.polytope_rs import QuadTree
|
|
11
11
|
|
|
12
12
|
use_rust = True
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
|
|
14
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
15
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
15
16
|
from ..datacube.quadtree.quad_tree import QuadTree
|
|
16
17
|
|
|
17
18
|
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/polytope_feature/engine/point_in_polygon_slicer.py
RENAMED
|
@@ -9,8 +9,8 @@ try:
|
|
|
9
9
|
from polytope_feature.polytope_rs import extract_point_in_poly
|
|
10
10
|
|
|
11
11
|
use_rust = True
|
|
12
|
-
except (ModuleNotFoundError, ImportError):
|
|
13
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
12
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
13
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
14
14
|
|
|
15
15
|
from shapely.geometry import Point
|
|
16
16
|
from shapely.geometry.polygon import Polygon
|
|
@@ -7,8 +7,8 @@ try:
|
|
|
7
7
|
from polytope_feature.polytope_rs import QuadTree
|
|
8
8
|
|
|
9
9
|
use_rust = True
|
|
10
|
-
except (ModuleNotFoundError, ImportError):
|
|
11
|
-
print("Failed to load Rust extension, falling back to Python implementation.")
|
|
10
|
+
except (ModuleNotFoundError, ImportError) as e:
|
|
11
|
+
print(f"Failed to load Rust extension with error: {e}, falling back to Python implementation.")
|
|
12
12
|
from ..datacube.quadtree.quad_tree import QuadTree
|
|
13
13
|
|
|
14
14
|
|
|
@@ -19,6 +19,7 @@ class QuadTreeSlicer(Engine):
|
|
|
19
19
|
# TODO: maybe we create the quadtree as soon as we have an unstructured slicer type and return it
|
|
20
20
|
# to the slicer somehow?
|
|
21
21
|
quad_tree = QuadTree()
|
|
22
|
+
# NOTE: the points here are assumed to be lat/lon implicitly
|
|
22
23
|
points = [tuple(point) for point in points]
|
|
23
24
|
quad_tree.build_point_tree(points)
|
|
24
25
|
self.points = points
|
|
@@ -27,17 +28,29 @@ class QuadTreeSlicer(Engine):
|
|
|
27
28
|
def extract_single(self, datacube, polytope):
|
|
28
29
|
# extract a single polygon
|
|
29
30
|
# if need to find nearest points, then take alternative slicing method using quadtree to find nearest point
|
|
31
|
+
axes = polytope.axes()
|
|
32
|
+
assert len(axes) == 2
|
|
33
|
+
assert "latitude" in axes and "longitude" in axes
|
|
34
|
+
revert_axes = not (list(axes) == ["latitude", "longitude"])
|
|
30
35
|
if use_rust:
|
|
31
36
|
if len(datacube.nearest_search) == 0:
|
|
32
|
-
|
|
37
|
+
if revert_axes:
|
|
38
|
+
polytope_points = [tuple(reversed(point)) for point in polytope.points]
|
|
39
|
+
else:
|
|
40
|
+
polytope_points = [tuple(point) for point in polytope.points]
|
|
33
41
|
polygon_points = self.quad_tree.query_polygon(self.points, 0, polytope_points)
|
|
34
42
|
else:
|
|
35
43
|
k = datacube.nearest_search[tuple(polytope.axes())][1]
|
|
36
|
-
|
|
44
|
+
if revert_axes:
|
|
45
|
+
nn_points = [tuple(reversed(pt)) for pt in datacube.nearest_search[tuple(polytope.axes())][0]]
|
|
46
|
+
else:
|
|
47
|
+
nn_points = [tuple(pt) for pt in datacube.nearest_search[tuple(polytope.axes())][0]]
|
|
37
48
|
polygon_points = []
|
|
38
49
|
for nn_pt in nn_points:
|
|
39
50
|
polygon_points.extend(self.quad_tree.k_nearest_neighbor(nn_pt, k, self.points))
|
|
40
51
|
else:
|
|
52
|
+
if revert_axes:
|
|
53
|
+
polytope.points = [tuple(reversed(point)) for point in polytope.points]
|
|
41
54
|
polygon_points = self.quad_tree.query_polygon(polytope)
|
|
42
55
|
return polygon_points
|
|
43
56
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polytope-python
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.9
|
|
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>
|
|
@@ -31,6 +31,7 @@ Requires-Dist: tripy
|
|
|
31
31
|
Requires-Dist: xarray
|
|
32
32
|
Requires-Dist: conflator
|
|
33
33
|
Requires-Dist: protobuf
|
|
34
|
+
Requires-Dist: shapely
|
|
34
35
|
Provides-Extra: tests
|
|
35
36
|
Requires-Dist: pytest; extra == "tests"
|
|
36
37
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
@@ -40,14 +41,14 @@ Requires-Dist: h5netcdf; extra == "tests"
|
|
|
40
41
|
Requires-Dist: h5py; extra == "tests"
|
|
41
42
|
Requires-Dist: earthkit-data; extra == "tests"
|
|
42
43
|
Requires-Dist: matplotlib; extra == "tests"
|
|
43
|
-
Requires-Dist: pyfdb; extra == "tests"
|
|
44
|
+
Requires-Dist: pyfdb<=0.1.3; extra == "tests"
|
|
44
45
|
Provides-Extra: unstructured
|
|
45
46
|
Requires-Dist: eckit; extra == "unstructured"
|
|
46
47
|
Provides-Extra: catalogue
|
|
47
48
|
Requires-Dist: qubed; extra == "catalogue"
|
|
48
49
|
Provides-Extra: switching-grids
|
|
49
50
|
Requires-Dist: eccodes; extra == "switching-grids"
|
|
50
|
-
Requires-Dist: pyfdb; extra == "switching-grids"
|
|
51
|
+
Requires-Dist: pyfdb<=0.1.3; extra == "switching-grids"
|
|
51
52
|
Dynamic: license-file
|
|
52
53
|
|
|
53
54
|
|
|
@@ -6,13 +6,14 @@ tripy
|
|
|
6
6
|
xarray
|
|
7
7
|
conflator
|
|
8
8
|
protobuf
|
|
9
|
+
shapely
|
|
9
10
|
|
|
10
11
|
[catalogue]
|
|
11
12
|
qubed
|
|
12
13
|
|
|
13
14
|
[switching_grids]
|
|
14
15
|
eccodes
|
|
15
|
-
pyfdb
|
|
16
|
+
pyfdb<=0.1.3
|
|
16
17
|
|
|
17
18
|
[tests]
|
|
18
19
|
pytest
|
|
@@ -23,7 +24,7 @@ h5netcdf
|
|
|
23
24
|
h5py
|
|
24
25
|
earthkit-data
|
|
25
26
|
matplotlib
|
|
26
|
-
pyfdb
|
|
27
|
+
pyfdb<=0.1.3
|
|
27
28
|
|
|
28
29
|
[unstructured]
|
|
29
30
|
eckit
|
|
@@ -39,6 +39,7 @@ dependencies = [
|
|
|
39
39
|
"xarray",
|
|
40
40
|
"conflator",
|
|
41
41
|
"protobuf",
|
|
42
|
+
"shapely",
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
[project.optional-dependencies]
|
|
@@ -51,7 +52,7 @@ tests = [
|
|
|
51
52
|
"h5py",
|
|
52
53
|
"earthkit-data",
|
|
53
54
|
"matplotlib",
|
|
54
|
-
"pyfdb"
|
|
55
|
+
"pyfdb<=0.1.3",
|
|
55
56
|
]
|
|
56
57
|
|
|
57
58
|
unstructured = [
|
|
@@ -64,7 +65,7 @@ catalogue = [
|
|
|
64
65
|
|
|
65
66
|
switching_grids = [
|
|
66
67
|
"eccodes",
|
|
67
|
-
"pyfdb"
|
|
68
|
+
"pyfdb<=0.1.3"
|
|
68
69
|
]
|
|
69
70
|
|
|
70
71
|
[project.urls]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Developer_Guide/Axis_types.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/Overview/Polytope_at_ECMWF.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Building_Features.md
RENAMED
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Algorithm/User_Guide/Getting_started.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/boundingbox_example.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/climate_dt_example.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/extremes_dt_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/on-demand_dt_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/opendata_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/operational_example.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/position_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/timeseries_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/trajectory_example.ipynb
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/docs/Service/Examples/vertical_profile_example.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shp
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/EMODnet_HA_WindFarms_pg_20220324.shx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/World_Countries__Generalized_.shp
RENAMED
|
File without changes
|
{polytope_python-2.1.7 → polytope_python-2.1.9}/examples/data/World_Countries__Generalized_.shx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|