PyGeoFetch 2.6.2.9__tar.gz → 2.6.4.0__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.
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/CHANGELOG.md +7 -7
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/LICENSE +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/MANIFEST.in +0 -0
- {pygeofetch-2.6.2.9/pygeofetch.egg-info → pygeofetch-2.6.4.0}/PKG-INFO +4 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/README.md +2 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/__init__.py +5 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/auth_commands.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/cli/classify_commands.py +174 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/index_commands.py +232 -40
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/main.py +108 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/monitor_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/multisensor_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/optical_commands.py +92 -16
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/postprocess_commands.py +72 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/sar_commands.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/cli/scale_commands.py +288 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/cli/search_commands.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/cache_manager.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/core/chunked_processor.py +324 -0
- pygeofetch-2.6.4.0/pygeofetch/core/data_formats/__init__.py +23 -0
- pygeofetch-2.6.4.0/pygeofetch/core/data_formats/geoparquet_io.py +216 -0
- pygeofetch-2.6.4.0/pygeofetch/core/data_formats/zarr_io.py +250 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/data_organizer.py +5 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/downloader.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/engine.py +53 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/logging.py +194 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/monitor.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/orbits.py +60 -11
- pygeofetch-2.6.4.0/pygeofetch/core/progress.py +175 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/searcher.py +37 -86
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/core/state.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/geotech/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/geotech/risk_mapper.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/advanced_safeguards.py +38 -21
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/analysis.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/annotation.py +25 -4
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/atmosphere.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/auto_fallback.py +4 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/coregister.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/deburst.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/esd.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/extraction.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/insar/feasibility.py +351 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/flatearth.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/geolocation.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/gpu.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/interferogram.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/ionosphere.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/offset_geometry.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/offset_tracking.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/preflight.py +272 -59
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/provenance.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/ps_selection.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/stack_selection.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/synthetic.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/timeseries.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/unwrap.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/validate.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/visualize.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/insar/workflow.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/models/download_task.py +3 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/models/search_query.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/models/stream_options.py +141 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/models/user_auth.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/multisensor/_init.py +55 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/multisensor/dem_differencing.py +55 -9
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/multisensor/flood_mapping.py +59 -19
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/multisensor/insar_optical_fusion.py +16 -7
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/multisensor/terrain_corrected_change.py +58 -12
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/multisensor/vegetation_disturbance.py +74 -26
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/optical/__init__.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/optical/offset_tracking.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/base.py +117 -3
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/batch.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/processing/classification.py +412 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/indices.py +154 -28
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/postprocessor.py +227 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/preprocessor.py +9 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/sar.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processing/uq_exporter.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/indices.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/stacker.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/processor/timeseries.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/__init__.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/airbus_oneatlas.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/alaska_satellite_facility.py +9 -7
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/aws_earth.py +12 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/base.py +21 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/copernicus.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/copernicus_nodes.py +2 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/digitalglobe.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/earth_explorer_additional.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/element84.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/eodag_provider.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/esa_scihub.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/geoserver_generic.py +6 -6
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/google_earth_engine.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/inpe_cbers.py +3 -3
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/isro_bhuvan.py +5 -5
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/jaxa_earth.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/maxar_gbdx.py +5 -5
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/nasa_earthdata.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/nasa_earthdata_cloud.py +7 -3
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/noaa_big_data.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/opentopography.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/planet.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/planetary_computer.py +17 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/sentinel_hub.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/terrabotics.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/providers/usgs.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/__init__.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/_native.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/extraction.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/math.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/pipelines.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/sar/processor.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/stac_compute/__init__.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/stac_compute/burst_streaming.py +253 -0
- pygeofetch-2.6.4.0/pygeofetch/stac_compute/cog_streamer.py +186 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/stac_compute/lightweight_prefetch.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/stac_compute/window_calculator.py +134 -0
- pygeofetch-2.6.4.0/pygeofetch/streaming/__init__.py +37 -0
- pygeofetch-2.6.4.0/pygeofetch/streaming/scene.py +295 -0
- pygeofetch-2.6.4.0/pygeofetch/streaming/windowed.py +402 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/gcp_recovery.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/geo_utils.py +0 -0
- pygeofetch-2.6.4.0/pygeofetch/utils/geocoding.py +138 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/sar_math.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/validation/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/validation/optical_validator.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/viz/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/viz/map.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch/viz/plot.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0/pygeofetch.egg-info}/PKG-INFO +4 -2
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch.egg-info/SOURCES.txt +20 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch.egg-info/requires.txt +2 -0
- pygeofetch-2.6.4.0/pygeofetch.egg-info/top_level.txt +1 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pyproject.toml +3 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/setup.cfg +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_advanced_safeguards.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_airbus_oneatlas.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_alaska_satellite_facility.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_atmospheric_circular_regression.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_auto_fallback.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_auto_fallback_fixed.py +22 -8
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_build_sbas_network-new.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_build_sbas_network.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_burst_metadata.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_burst_processing_integration.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_burst_sync_large_gap.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_burst_sync_prescreening.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_burst_synchronization.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_circuit_breaker_wiring.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_cli_optical_validation.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_copernicus_nodes.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_coregister_integration.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_coregister_upgrades (1).py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_coregister_upgrades.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_credential_encryption.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_data_organizer.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_dem_differencing_pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_digitalglobe.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_earth_explorer_additional.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_era5_atmospheric_correction.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_esa_scihub.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_extraction.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_flat_earth_phase.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_flood_mapping_pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_gcp_reprojection.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_geology_indices_and_rvi_fix.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_geoserver_generic.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_google_earth_engine.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_inpe_cbers.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_insar.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_insar_optical_fusion_pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_ionosphere.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_isro_bhuvan.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_jaxa_earth.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_lightweight_prefetch.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_map_preview_consolidation.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_models.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_monitor.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_nasa_earthdata_cloud_s3_fix.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_nasa_earthdata_public_search.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_noaa_big_data.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_offset_tracking.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_opentopography_pointcloud_usgs.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_optical_offset_tracking.py +93 -21
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_optical_validation_wiring.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_optical_validator.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_optical_validator_stac.py +39 -13
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_pgv_integration_contract.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_pipeline_process_export.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_planet_asset_type_fix.py +20 -16
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_preflight_gate.py +0 -0
- pygeofetch-2.6.4.0/tests/test_preflight_quiet.py +340 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_preflight_spatial_baseline.py +30 -20
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_provider_geometry_audit.py +1 -1
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_provider_scene_disambiguation.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_providers.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_ps_selection.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_raster_collocation_integration.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_reference_pixel_and_despike.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_risk_mapper.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_risk_mapping.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_sar_pipelines.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_screen_stack_orchestration.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_search_download.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_sentinel_hub_catalog_fix.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_sign_convention.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_stack_selection_consolidation.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_state.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_strain_and_fusion.py +0 -0
- pygeofetch-2.6.4.0/tests/test_streaming.py +566 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_terrain_corrected_change_pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_topo_r2_bug.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_uq_exporter.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_utils.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_vegetation_disturbance_pipeline.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_viz_plot.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/tests/test_wls_inversion.py +0 -0
- pygeofetch-2.6.2.9/pygeofetch.egg-info/top_level.txt +0 -2
- /pygeofetch-2.6.2.9/pygeofetch/multisensor/_init.py → /pygeofetch-2.6.4.0/pygeofetch/multisensor/__init__.py +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-2.6.2.9 → pygeofetch-2.6.4.0}/pygeofetch.egg-info/not-zip-safe +0 -0
|
@@ -20,7 +20,7 @@ date, and marked accordingly rather than filled in with invented
|
|
|
20
20
|
bullet points.
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
## [Unreleased] — v2.6.
|
|
23
|
+
## [Unreleased] — v2.6.4.0.4
|
|
24
24
|
|
|
25
25
|
```{note}
|
|
26
26
|
Not yet published to PyPI. This entry documents work completed and
|
|
@@ -130,7 +130,7 @@ audit and remain open for a follow-up pass.
|
|
|
130
130
|
|
|
131
131
|
---
|
|
132
132
|
|
|
133
|
-
## [2.6.
|
|
133
|
+
## [2.6.4.0.4] — 2026-08-25 (latest)
|
|
134
134
|
|
|
135
135
|
Confirmed via direct fetch of the current PyPI listing.
|
|
136
136
|
|
|
@@ -149,7 +149,7 @@ Confirmed via direct fetch of the current PyPI listing.
|
|
|
149
149
|
- `SearchQuery.sort_ascending: bool` — earlier examples showed a `sort_order: "asc"/"desc"` string field that doesn't exist on the model (the CLI's `--sort-order` flag does convert to this internally, so CLI docs were unaffected)
|
|
150
150
|
- `DownloadOptions.post_process` requires a list of `PostProcessAction` objects — passing plain strings raises a real `pydantic.ValidationError`
|
|
151
151
|
|
|
152
|
-
## [2.6.
|
|
152
|
+
## [2.6.4.0] — 2026-08-24
|
|
153
153
|
Real, verified release. Detailed notes not independently recovered from PyPI's release-history page (no distinct per-version notes exposed for this release specifically).
|
|
154
154
|
|
|
155
155
|
## [2.6.1] — 2026-08-22
|
|
@@ -261,9 +261,9 @@ recovered.
|
|
|
261
261
|
|
|
262
262
|
```{note}
|
|
263
263
|
The previous version of this changelog had an entry labeled
|
|
264
|
-
**"2.6.
|
|
264
|
+
**"2.6.4.0.4 — 2026-07-12"** describing 22+ providers, Sentinel-1C/1D
|
|
265
265
|
support, SLC search with provider routing, precise orbit file
|
|
266
|
-
management, 17 spectral indices, and various bug fixes. **2.6.
|
|
266
|
+
management, 17 spectral indices, and various bug fixes. **2.6.4.0.4 was
|
|
267
267
|
only ever released once, on 2026-08-25** — it was never released on
|
|
268
268
|
2026-07-12. The date matches this real release, **1.0.8**, exactly.
|
|
269
269
|
That content is reproduced below under the version it actually
|
|
@@ -406,8 +406,8 @@ The version of this file uploaded for this update had **5 entries
|
|
|
406
406
|
covering 5 dates**. PyPI's real release history has **54 releases**.
|
|
407
407
|
Specific issues found and fixed:
|
|
408
408
|
|
|
409
|
-
1. **Two different entries were both labeled `2.6.
|
|
410
|
-
2026-07-29 and 2026-07-12. **2.6.
|
|
409
|
+
1. **Two different entries were both labeled `2.6.4.0.4`**, dated
|
|
410
|
+
2026-07-29 and 2026-07-12. **2.6.4.0.4 was only ever released once**,
|
|
411
411
|
on 2026-08-25 (confirmed directly from the live PyPI listing).
|
|
412
412
|
2. **The 2026-07-12 entry's date exactly matches a real release**
|
|
413
413
|
— version **1.0.8** — and its content (22+ providers, Sentinel-1C/D,
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.4.0
|
|
4
4
|
Summary: Universal satellite data pipeline + geospatial processing platform
|
|
5
5
|
Author-email: Samuel Appiah Kubi <appiahkubis14@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -43,6 +43,8 @@ Requires-Python: >=3.9
|
|
|
43
43
|
Description-Content-Type: text/markdown
|
|
44
44
|
License-File: LICENSE
|
|
45
45
|
Requires-Dist: httpx>=0.27
|
|
46
|
+
Requires-Dist: pydantic
|
|
47
|
+
Requires-Dist: rich
|
|
46
48
|
Requires-Dist: click>=8.1
|
|
47
49
|
Requires-Dist: pydantic>=2.5
|
|
48
50
|
Requires-Dist: pydantic-settings>=2.1
|
|
@@ -369,7 +371,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
|
|
|
369
371
|
title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
|
|
370
372
|
year = {2026},
|
|
371
373
|
publisher = {Zenodo},
|
|
372
|
-
version = {2.6.
|
|
374
|
+
version = {2.6.4.0.1},
|
|
373
375
|
doi = {10.5281/zenodo.22087230},
|
|
374
376
|
url = {https://doi.org/10.5281/zenodo.22087230}
|
|
375
377
|
}
|
|
@@ -229,7 +229,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
|
|
|
229
229
|
title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
|
|
230
230
|
year = {2026},
|
|
231
231
|
publisher = {Zenodo},
|
|
232
|
-
version = {2.6.
|
|
232
|
+
version = {2.6.4.0.1},
|
|
233
233
|
doi = {10.5281/zenodo.22087230},
|
|
234
234
|
url = {https://doi.org/10.5281/zenodo.22087230}
|
|
235
235
|
}
|
|
@@ -263,4 +263,4 @@ pip install -e ".[test]" && pytest tests/ -v
|
|
|
263
263
|
|
|
264
264
|
## License
|
|
265
265
|
|
|
266
|
-
MIT — see [LICENSE](LICENSE). © 2026 Samuel Appiah Kubi.
|
|
266
|
+
MIT — see [LICENSE](LICENSE). © 2026 Samuel Appiah Kubi.
|
|
@@ -30,13 +30,16 @@ CLI::
|
|
|
30
30
|
pygeofetch doctor
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
|
-
__version__ = "2.6.
|
|
33
|
+
__version__ = "2.6.4.0.4"
|
|
34
34
|
__author__ = "PyGeoFetch Contributors"
|
|
35
35
|
__license__ = "MIT"
|
|
36
36
|
|
|
37
37
|
from pygeofetch.core.engine import PyGeoFetch # noqa: F401
|
|
38
|
+
from pygeofetch.core.logging import (
|
|
39
|
+
quiet_logs, # noqa: F401 (notebook-friendly logging)
|
|
40
|
+
)
|
|
38
41
|
|
|
39
|
-
__all__ = ["PyGeoFetch", "__version__"]
|
|
42
|
+
__all__ = ["PyGeoFetch", "quiet_logs", "__version__"]
|
|
40
43
|
|
|
41
44
|
|
|
42
45
|
# Optional modules — lazy imported to avoid hard dependency errors
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"""CLI commands for pixel classification."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
import click
|
|
8
|
+
from rich.console import Console
|
|
9
|
+
|
|
10
|
+
# from pygeofetch.cli.index_commands import clip_options, _parse_bbox
|
|
11
|
+
|
|
12
|
+
console = Console()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _engine():
|
|
16
|
+
from pygeofetch.core.engine import PyGeoFetch
|
|
17
|
+
|
|
18
|
+
return PyGeoFetch(log_level="WARNING")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _pr(result, name):
|
|
22
|
+
if result.success:
|
|
23
|
+
size_mb = (
|
|
24
|
+
result.output_path.stat().st_size / (1024 * 1024)
|
|
25
|
+
if result.output_path and result.output_path.exists()
|
|
26
|
+
else 0
|
|
27
|
+
)
|
|
28
|
+
console.print(
|
|
29
|
+
f"[green]✓[/] {name} → {result.output_path}"
|
|
30
|
+
f" ({size_mb:.1f} MB, {result.duration_seconds:.2f}s)"
|
|
31
|
+
)
|
|
32
|
+
meta = result.metadata or {}
|
|
33
|
+
for k, v in meta.items():
|
|
34
|
+
if k != "classification_report":
|
|
35
|
+
console.print(f" {k}: {v}")
|
|
36
|
+
else:
|
|
37
|
+
console.print(f"[red]✗[/] {name} failed: {result.error}")
|
|
38
|
+
sys.exit(1)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@click.group()
|
|
42
|
+
def classify() -> None:
|
|
43
|
+
"""Pixel classification — unsupervised K-means and supervised Random Forest/SVM."""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@classify.command("kmeans")
|
|
47
|
+
@click.argument("inputs", nargs=-1, type=click.Path(exists=True))
|
|
48
|
+
@click.option(
|
|
49
|
+
"--clusters",
|
|
50
|
+
"-k",
|
|
51
|
+
default=5,
|
|
52
|
+
show_default=True,
|
|
53
|
+
type=int,
|
|
54
|
+
help="Number of clusters.",
|
|
55
|
+
)
|
|
56
|
+
@click.option("--output", "-o", default=None)
|
|
57
|
+
@click.option("--random-state", default=42, show_default=True, type=int)
|
|
58
|
+
# @clip_options
|
|
59
|
+
def kmeans_cmd(inputs, clusters, output, random_state, bbox, geometry, geometry_crs):
|
|
60
|
+
"""Unsupervised K-means clustering. No training data needed.
|
|
61
|
+
|
|
62
|
+
Example: pygeofetch classify kmeans B02.tif B03.tif B04.tif B08.tif -k 5
|
|
63
|
+
"""
|
|
64
|
+
if len(inputs) < 1:
|
|
65
|
+
console.print("[red]Provide at least 1 input band raster[/]")
|
|
66
|
+
sys.exit(1)
|
|
67
|
+
e = _engine()
|
|
68
|
+
r = e.classify.kmeans(
|
|
69
|
+
inputs=list(inputs),
|
|
70
|
+
n_clusters=clusters,
|
|
71
|
+
output=output,
|
|
72
|
+
random_state=random_state,
|
|
73
|
+
bbox=bbox,
|
|
74
|
+
geometry=geometry,
|
|
75
|
+
geometry_crs=geometry_crs,
|
|
76
|
+
)
|
|
77
|
+
_pr(r, f"K-means ({clusters} clusters)")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@classify.command("train")
|
|
81
|
+
@click.argument("inputs", nargs=-1, type=click.Path(exists=True))
|
|
82
|
+
@click.option(
|
|
83
|
+
"--training-data",
|
|
84
|
+
required=True,
|
|
85
|
+
type=click.Path(exists=True),
|
|
86
|
+
help="Vector file (GeoJSON/Shapefile) with labeled training geometries.",
|
|
87
|
+
)
|
|
88
|
+
@click.option(
|
|
89
|
+
"--class-field",
|
|
90
|
+
required=True,
|
|
91
|
+
help="Attribute column holding the real class label.",
|
|
92
|
+
)
|
|
93
|
+
@click.option(
|
|
94
|
+
"--output-model", "-o", required=True, help="Where to save the trained model."
|
|
95
|
+
)
|
|
96
|
+
@click.option(
|
|
97
|
+
"--model-type",
|
|
98
|
+
default="random_forest",
|
|
99
|
+
type=click.Choice(["random_forest", "svm"]),
|
|
100
|
+
show_default=True,
|
|
101
|
+
)
|
|
102
|
+
@click.option(
|
|
103
|
+
"--n-estimators",
|
|
104
|
+
default=100,
|
|
105
|
+
show_default=True,
|
|
106
|
+
type=int,
|
|
107
|
+
help="Random Forest tree count.",
|
|
108
|
+
)
|
|
109
|
+
@click.option(
|
|
110
|
+
"--test-size",
|
|
111
|
+
default=0.2,
|
|
112
|
+
show_default=True,
|
|
113
|
+
type=float,
|
|
114
|
+
help="Fraction of samples held out for real accuracy reporting.",
|
|
115
|
+
)
|
|
116
|
+
def train_cmd(
|
|
117
|
+
inputs,
|
|
118
|
+
training_data,
|
|
119
|
+
class_field,
|
|
120
|
+
output_model,
|
|
121
|
+
model_type,
|
|
122
|
+
n_estimators,
|
|
123
|
+
test_size,
|
|
124
|
+
):
|
|
125
|
+
"""Train a supervised classifier from labeled vector training samples.
|
|
126
|
+
|
|
127
|
+
Example: pygeofetch classify train B02.tif B03.tif B04.tif B08.tif
|
|
128
|
+
--training-data samples.geojson --class-field land_cover -o model.joblib
|
|
129
|
+
"""
|
|
130
|
+
if len(inputs) < 1:
|
|
131
|
+
console.print("[red]Provide at least 1 input band raster[/]")
|
|
132
|
+
sys.exit(1)
|
|
133
|
+
e = _engine()
|
|
134
|
+
r = e.classify.train(
|
|
135
|
+
inputs=list(inputs),
|
|
136
|
+
training_data=training_data,
|
|
137
|
+
class_field=class_field,
|
|
138
|
+
output_model=output_model,
|
|
139
|
+
model_type=model_type,
|
|
140
|
+
n_estimators=n_estimators,
|
|
141
|
+
test_size=test_size,
|
|
142
|
+
)
|
|
143
|
+
_pr(r, f"train ({model_type})")
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
@classify.command("predict")
|
|
147
|
+
@click.argument("inputs", nargs=-1, type=click.Path(exists=True))
|
|
148
|
+
@click.option(
|
|
149
|
+
"--model",
|
|
150
|
+
"-m",
|
|
151
|
+
required=True,
|
|
152
|
+
type=click.Path(exists=True),
|
|
153
|
+
help="A model trained via 'classify train'.",
|
|
154
|
+
)
|
|
155
|
+
@click.option("--output", "-o", default=None)
|
|
156
|
+
# @clip_options
|
|
157
|
+
def predict_cmd(inputs, model, output, bbox, geometry, geometry_crs):
|
|
158
|
+
"""Apply a trained model to a real raster stack, producing a classification map.
|
|
159
|
+
|
|
160
|
+
Example: pygeofetch classify predict B02.tif B03.tif B04.tif B08.tif -m model.joblib
|
|
161
|
+
"""
|
|
162
|
+
if len(inputs) < 1:
|
|
163
|
+
console.print("[red]Provide at least 1 input band raster[/]")
|
|
164
|
+
sys.exit(1)
|
|
165
|
+
e = _engine()
|
|
166
|
+
r = e.classify.predict(
|
|
167
|
+
inputs=list(inputs),
|
|
168
|
+
model=model,
|
|
169
|
+
output=output,
|
|
170
|
+
bbox=bbox,
|
|
171
|
+
geometry=geometry,
|
|
172
|
+
geometry_crs=geometry_crs,
|
|
173
|
+
)
|
|
174
|
+
_pr(r, "predict")
|
|
File without changes
|
|
File without changes
|