pygeofetch 2.6.2__tar.gz → 2.6.2.2__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.2/CHANGELOG.md +452 -0
- {pygeofetch-2.6.2/pygeofetch.egg-info → pygeofetch-2.6.2.2}/PKG-INFO +47 -44
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/README.md +31 -35
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/__init__.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/auth_commands.py +6 -3
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/download_commands.py +62 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/main.py +10 -6
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/monitor_commands.py +49 -14
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/search_commands.py +62 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/authenticator.py +122 -19
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/downloader.py +31 -13
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/engine.py +236 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/monitor.py +16 -5
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/scheduler.py +239 -8
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/searcher.py +26 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/state.py +20 -6
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/__init__.py +96 -71
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/analysis.py +62 -40
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/annotation.py +116 -70
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/atmosphere.py +168 -70
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/coregister.py +126 -58
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/deburst.py +39 -12
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/esd.py +65 -28
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/extraction.py +126 -67
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/flatearth.py +45 -18
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/geolocation.py +79 -29
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/gpu.py +3 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/interferogram.py +502 -193
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/ionosphere.py +118 -45
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/offset_geometry.py +47 -43
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/offset_tracking.py +45 -20
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/preflight.py +295 -170
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/provenance.py +2 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/ps_selection.py +21 -9
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/splitspectrum_diagnostic.py +12 -4
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/stack_selection.py +179 -77
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/synthetic.py +53 -17
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/timeseries.py +268 -152
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/unwrap.py +408 -156
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/validate.py +36 -13
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/visualize.py +15 -5
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/workflow.py +102 -29
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/satellite_data.py +5 -3
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/indices.py +5 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/preprocessor.py +55 -25
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/sar.py +13 -4
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/indices.py +4 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/stacker.py +4 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/timeseries.py +41 -13
- pygeofetch-2.6.2.2/pygeofetch/providers/airbus_oneatlas.py +468 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/alaska_satellite_facility.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/aws_earth.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/base.py +2 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/copernicus.py +19 -8
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/copernicus_nodes.py +73 -23
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/digitalglobe.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/earth_explorer_additional.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/element84.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/eodag_provider.py +9 -5
- pygeofetch-2.6.2.2/pygeofetch/providers/esa_scihub.py +168 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/geoserver_generic.py +5 -2
- pygeofetch-2.6.2.2/pygeofetch/providers/google_earth_engine.py +156 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/inpe_cbers.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/isro_bhuvan.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/jaxa_earth.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/maxar_gbdx.py +5 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/nasa_earthdata.py +6 -4
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/nasa_earthdata_cloud.py +2 -2
- pygeofetch-2.6.2.2/pygeofetch/providers/noaa_big_data.py +335 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/opentopography.py +6 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/planet.py +4 -3
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/planetary_computer.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/sentinel_hub.py +11 -7
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/terrabotics.py +4 -3
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/usgs.py +20 -5
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/__init__.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_native.py +1 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/extraction.py +8 -4
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/gcp_recovery.py +1 -3
- pygeofetch-2.6.2.2/pygeofetch/validation/__init__.py +24 -0
- pygeofetch-2.6.2.2/pygeofetch/validation/optical_validator.py +918 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/map.py +82 -33
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/plot.py +106 -45
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2/pygeofetch.egg-info}/PKG-INFO +47 -44
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/SOURCES.txt +12 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/requires.txt +18 -7
- pygeofetch-2.6.2.2/pyproject.toml +307 -0
- pygeofetch-2.6.2.2/tests/test_airbus_oneatlas.py +317 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_atmospheric_circular_regression.py +24 -7
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_build_sbas_network.py +68 -38
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_metadata.py +20 -6
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_processing_integration.py +113 -32
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_sync_large_gap.py +49 -35
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_sync_prescreening.py +68 -43
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_synchronization.py +56 -36
- pygeofetch-2.6.2.2/tests/test_circuit_breaker_wiring.py +118 -0
- pygeofetch-2.6.2.2/tests/test_cli_optical_validation.py +147 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_copernicus_nodes.py +63 -36
- pygeofetch-2.6.2.2/tests/test_coregister_integration.py +353 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_coregister_upgrades.py +110 -47
- pygeofetch-2.6.2.2/tests/test_credential_encryption.py +151 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_era5_atmospheric_correction.py +17 -6
- pygeofetch-2.6.2.2/tests/test_esa_scihub.py +80 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_extraction.py +46 -12
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_flat_earth_phase.py +72 -24
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_gcp_reprojection.py +30 -9
- pygeofetch-2.6.2.2/tests/test_google_earth_engine.py +78 -0
- pygeofetch-2.6.2.2/tests/test_insar.py +691 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_ionosphere.py +102 -33
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_map_preview_consolidation.py +41 -24
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_models.py +10 -3
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_monitor.py +51 -30
- pygeofetch-2.6.2.2/tests/test_noaa_big_data.py +143 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_offset_tracking.py +76 -31
- pygeofetch-2.6.2.2/tests/test_optical_validation_wiring.py +237 -0
- pygeofetch-2.6.2.2/tests/test_optical_validator.py +496 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_pgv_integration_contract.py +42 -42
- pygeofetch-2.6.2.2/tests/test_pipeline_process_export.py +234 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_preflight_gate.py +398 -107
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_provider_geometry_audit (1).py +45 -41
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_provider_scene_disambiguation.py +31 -12
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_providers.py +1 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_ps_selection.py +122 -54
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_raster_collocation_integration.py +78 -37
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_reference_pixel_and_despike.py +64 -38
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_risk_mapping.py +101 -43
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_screen_stack_orchestration.py +68 -41
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_search_download.py +3 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_sign_convention.py +71 -37
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_splitspectrum_diagnostic.py +7 -2
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_stack_selection_consolidation.py +104 -45
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_state.py +33 -24
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_topo_r2_bug.py +42 -21
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_utils.py +2 -1
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_wls_inversion.py +124 -54
- pygeofetch-2.6.2/CHANGELOG.md +0 -195
- pygeofetch-2.6.2/pygeofetch/providers/airbus_oneatlas.py +0 -267
- pygeofetch-2.6.2/pygeofetch/providers/esa_scihub.py +0 -269
- pygeofetch-2.6.2/pygeofetch/providers/google_earth_engine.py +0 -267
- pygeofetch-2.6.2/pygeofetch/providers/noaa_big_data.py +0 -253
- pygeofetch-2.6.2/pyproject.toml +0 -201
- pygeofetch-2.6.2/tests/test_coregister_integration.py +0 -354
- pygeofetch-2.6.2/tests/test_insar.py +0 -578
- pygeofetch-2.6.2/tests/test_preflight_gate (1).py +0 -319
- pygeofetch-2.6.2/tests/test_provider_geometry_audit.py +0 -177
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/LICENSE +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/MANIFEST.in +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/base.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/processor.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/__init__.py +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/setup.cfg +0 -0
- {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_viz_plot.py +0 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to pygeofetch are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
|
|
6
|
+
```{note}
|
|
7
|
+
This file was rebuilt from PyPI's actual release history
|
|
8
|
+
(https://pypi.org/project/pygeofetch/#history), not just extended from
|
|
9
|
+
the previous version of this document. **54 real releases exist**,
|
|
10
|
+
not the 5 previously documented. See "Corrections to the previous
|
|
11
|
+
changelog" at the bottom for specific discrepancies found and fixed.
|
|
12
|
+
|
|
13
|
+
PyPI's release-history page lists every version and its real release
|
|
14
|
+
date (both used below, directly verified), but does not expose
|
|
15
|
+
distinct per-version release notes the way GitHub Releases would.
|
|
16
|
+
Detailed notes below are included only where independently confirmed
|
|
17
|
+
against that version's own PyPI project-description snapshot; every
|
|
18
|
+
other release is listed with its real, verified version number and
|
|
19
|
+
date, and marked accordingly rather than filled in with invented
|
|
20
|
+
bullet points.
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## [Unreleased] — v2.6.2.1
|
|
24
|
+
|
|
25
|
+
```{note}
|
|
26
|
+
Not yet published to PyPI. This entry documents work completed and
|
|
27
|
+
verified so far, not a finished/closed release -- several providers
|
|
28
|
+
flagged during this pass (digitalglobe, earth_explorer_additional,
|
|
29
|
+
geoserver_generic, inpe_cbers, isro_bhuvan, jaxa_earth,
|
|
30
|
+
alaska_satellite_facility, maxar_gbdx) still need the same real-API
|
|
31
|
+
audit and remain open for a follow-up pass.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- **Pipeline `process`/`export` steps were stub implementations** —
|
|
36
|
+
logged a message and returned `{"status": "stub"}` without doing
|
|
37
|
+
any real work. Both now delegate to real, tested logic: `process`
|
|
38
|
+
reuses the same action executor `DownloadOptions.post_process` and
|
|
39
|
+
the CLI's `--post-process` flag already use; `export` genuinely
|
|
40
|
+
copies files to local disk, uploads to S3/GCS, and can POST a
|
|
41
|
+
webhook notification on completion.
|
|
42
|
+
- **`CircuitBreaker` was dead code** — instantiated per-provider but
|
|
43
|
+
never invoked, and `get_provider()` recreated a fresh provider (and
|
|
44
|
+
therefore a fresh, always-zeroed breaker) on every call, so failure
|
|
45
|
+
state could never have accumulated regardless. Fixed both: provider
|
|
46
|
+
instances are now cached per `FederatedSearcher`, and the real
|
|
47
|
+
`provider.search(...)` call is wrapped in the breaker.
|
|
48
|
+
- **Credential file storage used base64, not encryption** — the
|
|
49
|
+
file-backend's own source comment read "Basic obfuscation (not
|
|
50
|
+
encryption)". Replaced with real Fernet symmetric encryption, with
|
|
51
|
+
transparent migration for existing users' previously-stored
|
|
52
|
+
credentials.
|
|
53
|
+
- **Airbus OneAtlas provider was entirely non-functional** — fake
|
|
54
|
+
auth (never called a real endpoint), a fictional search endpoint,
|
|
55
|
+
and a result parser that never populated downloadable assets, so
|
|
56
|
+
`download()` always failed regardless of credentials. Fully
|
|
57
|
+
rewritten against Airbus's real, documented OneAtlas Data Living
|
|
58
|
+
Library API.
|
|
59
|
+
- **NOAA Big Data provider hit a fictional REST endpoint** — GOES
|
|
60
|
+
imagery is served from real, public S3 buckets, not a search API.
|
|
61
|
+
Rewritten to list real S3 objects and produce genuine downloadable
|
|
62
|
+
hrefs.
|
|
63
|
+
- **`esa_scihub` and `google_earth_engine` crashed on every call** —
|
|
64
|
+
both called a method, `_check_integration_verified()`, that does
|
|
65
|
+
not exist anywhere in the codebase. Both now fail honestly instead:
|
|
66
|
+
`esa_scihub`'s real target (Copernicus Open Access Hub) was
|
|
67
|
+
decommissioned in 2023 and now points users to `copernicus`;
|
|
68
|
+
`google_earth_engine` needs a fundamentally different auth/API
|
|
69
|
+
architecture than this file's generic template provided, and now
|
|
70
|
+
says so clearly instead of crashing or silently pretending to work.
|
|
71
|
+
- **5 broken dependency pins in `pyproject.toml`** — `whitebox`,
|
|
72
|
+
`whiteboxgui`, `sidecar`, `contextily`, and `opensartoolkit` were
|
|
73
|
+
each pinned to a minimum version that has never existed on PyPI,
|
|
74
|
+
breaking `pip install` for the affected extras. Verified fixed with
|
|
75
|
+
a real `pip install --dry-run` across every extra combined.
|
|
76
|
+
- **7 real `mypy` errors** across `core/scheduler.py`,
|
|
77
|
+
`core/authenticator.py`, and `viz/plot.py` — including a return-type
|
|
78
|
+
inconsistency across the 3 pipeline export helpers, an unannotated
|
|
79
|
+
`Fernet | None` attribute, and a genuinely deprecated
|
|
80
|
+
`matplotlib.cm.get_cmap()` call (already removed from newer
|
|
81
|
+
matplotlib type stubs). Fixing the deprecated call unmasked one
|
|
82
|
+
further latent type mismatch (`classification_colors` typed too
|
|
83
|
+
narrowly for what it actually accepts at runtime), also fixed.
|
|
84
|
+
|
|
85
|
+
### Added
|
|
86
|
+
- **New: optical data validation and preflight system**
|
|
87
|
+
(`pygeofetch.validation`) — a configurable pre-download quality gate
|
|
88
|
+
for optical imagery, mirroring `pygeofetch.insar.preflight`'s
|
|
89
|
+
philosophy: `OpticalValidationConfig` (every check independently
|
|
90
|
+
toggleable — AOI coverage, cloud cover, required bands, processing
|
|
91
|
+
level, temporal bounds on by default; snow/ice cover and a
|
|
92
|
+
geometry-only nodata-margin heuristic off by default) and
|
|
93
|
+
`OpticalPreflightValidator` (`validate_scene()` /
|
|
94
|
+
`run_preflight()`), plus a new `OpticalValidationError` exception.
|
|
95
|
+
Accepts real `SatelliteData` objects or plain STAC-like dicts
|
|
96
|
+
interchangeably.
|
|
97
|
+
- **Wired into `PyGeoFetch.search()` and `.download()`** via a new
|
|
98
|
+
`validate_optical` toggle — settable as an instance-level default in
|
|
99
|
+
`__init__` and/or overridden per call. `search()` derives the AOI
|
|
100
|
+
automatically from the query's own `bbox`/`geometry`. `download()`
|
|
101
|
+
is a genuinely independent gate (useful for items loaded via
|
|
102
|
+
`download_from_file()` that never went through `search()`); rejected
|
|
103
|
+
items are never attempted, and a synthesized `DownloadResult(status=
|
|
104
|
+
FAILED, ...)` stands in at that item's original position, preserving
|
|
105
|
+
the existing guarantee that the returned list's length and order
|
|
106
|
+
always match the input. The `shapely` dependency this needs is
|
|
107
|
+
imported lazily — a base `pip install pygeofetch` and a default
|
|
108
|
+
`PyGeoFetch()` never require it, only actually enabling validation
|
|
109
|
+
does (verified with `shapely` explicitly blocked from `sys.modules`).
|
|
110
|
+
- 108 new tests total across this pass (pipeline steps, circuit
|
|
111
|
+
breaker, credential encryption, Airbus, NOAA, esa_scihub,
|
|
112
|
+
google_earth_engine, the optical validator, and its
|
|
113
|
+
search()/download() wiring) — full suite now **497 passed, 0
|
|
114
|
+
failed**, up from 377 at the start of this pass.
|
|
115
|
+
- Full 29-page Read the Docs site, with every code example checked
|
|
116
|
+
against real source rather than the previous marketing copy.
|
|
117
|
+
|
|
118
|
+
### Documentation
|
|
119
|
+
- New page: `core-features/optical-validation.md`.
|
|
120
|
+
- `core-features/providers.md` updated with the real, current status
|
|
121
|
+
for `airbus_oneatlas`, `noaa_big_data`, `esa_scihub`, and
|
|
122
|
+
`google_earth_engine`.
|
|
123
|
+
- `reference/python-api.md` updated with the `validate_optical` /
|
|
124
|
+
`optical_validation_config` constructor and method parameters.
|
|
125
|
+
- `reference/pipelines.md`, `reference/security.md`,
|
|
126
|
+
`reference/error-handling.md`, `reference/roadmap.md`, and
|
|
127
|
+
`reference/testing.md` updated to describe the fixes above as
|
|
128
|
+
resolved (with current, verified test counts) rather than as open
|
|
129
|
+
bugs.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## [2.6.2.2] — 2026-08-25 (latest)
|
|
134
|
+
|
|
135
|
+
Confirmed via direct fetch of the current PyPI listing.
|
|
136
|
+
|
|
137
|
+
### Highlights
|
|
138
|
+
- 24 provider integrations (up from 22+ in earlier releases), including Sentinel-1C/1D constellation support
|
|
139
|
+
- Full verified InSAR chain: burst-aware coregistration, real flat-earth/topographic phase removal, ERA5 tropospheric + real IONEX/CDDIS ionospheric correction, SNAPHU phase unwrapping, SBAS time-series inversion — independently verified against synthetic ground truth and the Mexico City / Piton de la Fournaise / Amatrice case studies
|
|
140
|
+
- `InSARProject`: high-level search-to-interferogram workflow wrapper
|
|
141
|
+
- `PreflightGate`: pre-download AOI coverage, temporal-network, and burst-timing-family validation — avoids wasted downloads before they cost bandwidth
|
|
142
|
+
- Real orbit-based coregistration (genuine per-pixel offsets from real orbit state vectors) with automatic fallback to shape-based resampling
|
|
143
|
+
- LOS-to-vertical displacement conversion with configurable incidence angle
|
|
144
|
+
- Real footprint geometry surfaced where providers supply it, alongside bbox-only fallback where they don't
|
|
145
|
+
- DOI-registered software citation via Zenodo
|
|
146
|
+
|
|
147
|
+
### Corrected from earlier versions (confirmed via source inspection during unrelated maintenance work, not from this PyPI listing)
|
|
148
|
+
- `PyGeoFetch` is the real class name — some earlier release READMEs' own Python API examples used a lowercase `pygeofetch()` constructor that does not match the installed package
|
|
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
|
+
- `DownloadOptions.post_process` requires a list of `PostProcessAction` objects — passing plain strings raises a real `pydantic.ValidationError`
|
|
151
|
+
|
|
152
|
+
## [2.6.2] — 2026-08-24
|
|
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
|
+
|
|
155
|
+
## [2.6.1] — 2026-08-22
|
|
156
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
157
|
+
|
|
158
|
+
## [2.6.0] — 2026-08-17
|
|
159
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
160
|
+
|
|
161
|
+
## [2.5.0] — 2026-08-17
|
|
162
|
+
Real, verified release (same-day release as 2.6.0). Detailed notes not independently recovered.
|
|
163
|
+
|
|
164
|
+
## [2.4.0] — 2026-08-10
|
|
165
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
166
|
+
|
|
167
|
+
## [2.3.0] — 2026-08-10
|
|
168
|
+
Real, verified release (same-day release as 2.4.0). Detailed notes not independently recovered.
|
|
169
|
+
|
|
170
|
+
## [2.2.0] — 2026-08-10
|
|
171
|
+
Real, verified release (same-day release as 2.3.0/2.4.0). Detailed notes not independently recovered.
|
|
172
|
+
|
|
173
|
+
## [2.1.0] — 2026-08-07
|
|
174
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
175
|
+
|
|
176
|
+
## [2.0.9] — 2026-08-07
|
|
177
|
+
## [2.0.8] — 2026-08-07
|
|
178
|
+
## [2.0.7] — 2026-08-07
|
|
179
|
+
## [2.0.6] — 2026-08-07
|
|
180
|
+
## [2.0.5] — 2026-08-07
|
|
181
|
+
## [2.0.4] — 2026-08-07
|
|
182
|
+
## [2.0.3] — 2026-08-07
|
|
183
|
+
## [2.0.2] — 2026-08-07
|
|
184
|
+
|
|
185
|
+
Eight patch releases in one day (2.0.2 through 2.0.9), all real and
|
|
186
|
+
verified against PyPI. Rapid same-day patch sequences like this
|
|
187
|
+
typically indicate iterative packaging/CI fixes rather than distinct
|
|
188
|
+
feature work — consistent with the version-number pattern, but not
|
|
189
|
+
independently confirmed per-patch from PyPI alone.
|
|
190
|
+
|
|
191
|
+
## [2.0.1] — 2026-08-06
|
|
192
|
+
## [2.0.0] — 2026-08-06
|
|
193
|
+
|
|
194
|
+
Major version bump to 2.0.0, same day as the first 2.0.x patch.
|
|
195
|
+
Detailed per-version release notes not independently recovered from
|
|
196
|
+
PyPI for either.
|
|
197
|
+
|
|
198
|
+
## [1.9.9] — 2026-08-06
|
|
199
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
200
|
+
|
|
201
|
+
## [1.9.8] — 2026-08-04
|
|
202
|
+
## [1.9.7] — 2026-08-03
|
|
203
|
+
## [1.9.6] — 2026-08-03
|
|
204
|
+
## [1.9.5] — 2026-08-03
|
|
205
|
+
|
|
206
|
+
Real, verified releases. Detailed notes not independently recovered.
|
|
207
|
+
|
|
208
|
+
## [1.9.4] — 2026-08-02
|
|
209
|
+
## [1.9.3] — 2026-08-02
|
|
210
|
+
|
|
211
|
+
Real, verified releases. Detailed notes not independently recovered.
|
|
212
|
+
|
|
213
|
+
## [1.9.2] — 2026-07-26
|
|
214
|
+
|
|
215
|
+
Confirmed via direct fetch of this version's own PyPI project page.
|
|
216
|
+
|
|
217
|
+
### Added
|
|
218
|
+
- Federated search across 22+ satellite data providers with deduplicated results
|
|
219
|
+
- 7 search output formats: `table`, `json`, `stac`, `geojson`, `geoparquet`, `csv`, `ids`
|
|
220
|
+
- Adaptive parallel downloads: band selection, SHA256 checksum verification, resume support, exponential-backoff retries, atomic writes
|
|
221
|
+
- Preprocessing engine (`client.preprocess`): `atmos`, `cloud_mask`, `cloud_fill`, `topo_correct`, `clip`, `reproject`, `resample`, `pansharpen`, `tile`, `mosaic`, `composite`
|
|
222
|
+
- 15 spectral indices (`client.indices`): ndvi, evi, savi, ndwi, mndwi, ndbi, ndsi, ndmi, nbr/dnbr, tct, pca, texture, lst, albedo, band_math
|
|
223
|
+
- Post-processing chain (`client.post`): vectorize → smooth → regularize → zonal_stats → buffer → centroids → compress → cog
|
|
224
|
+
- SAR processing (`client.sar`): despeckle, calibrate, flood_map, coherence
|
|
225
|
+
- `pygeofetch.insar`: `InterferogramGenerator`, `PhaseUnwrapper` (SNAPHU), `AtmosphericCorrector`, `SBASTimeSeries`, `DataValidator` — real orbit-based coregistration when a DEM + both SAFE archives + both `.EOF` orbit files are supplied, falling back cleanly to shape-based resampling otherwise
|
|
226
|
+
- YAML pipeline orchestration with cron scheduling, Python builder API (`client.pipeline(...)`), 6 built-in templates (ndvi, change_detection, flood_map, urban_mapping, sar_analysis, land_cover)
|
|
227
|
+
- 9 example notebooks covering install through full processing workflows
|
|
228
|
+
- `pygeofetch doctor` installation/connectivity diagnostics
|
|
229
|
+
|
|
230
|
+
### Known state at this version (superseded by later fixes)
|
|
231
|
+
- Python API examples in this version's own README use a lowercase
|
|
232
|
+
`pygeofetch()` constructor (`from pygeofetch import pygeofetch`),
|
|
233
|
+
which doesn't match the real `PyGeoFetch` class name used
|
|
234
|
+
internally by the package at this point in its history
|
|
235
|
+
- Extras were `sar` (not yet split from a separate `insar` extra) —
|
|
236
|
+
the base SAR/InSAR dependency layout changed in later releases
|
|
237
|
+
|
|
238
|
+
## [1.9.1] — 2026-07-25
|
|
239
|
+
## [1.9.0] — 2026-07-25
|
|
240
|
+
## [1.8.0] — 2026-07-25
|
|
241
|
+
|
|
242
|
+
Three releases the same day. Real, verified. Detailed notes not
|
|
243
|
+
independently recovered.
|
|
244
|
+
|
|
245
|
+
## [1.7.0] — 2026-07-24
|
|
246
|
+
## [1.6.0] — 2026-07-23
|
|
247
|
+
## [1.5.0] — 2026-07-23
|
|
248
|
+
## [1.4.0] — 2026-07-22
|
|
249
|
+
## [1.3.0] — 2026-07-21
|
|
250
|
+
## [1.2.0] — 2026-07-18
|
|
251
|
+
|
|
252
|
+
Real, verified releases. Detailed notes not independently recovered.
|
|
253
|
+
|
|
254
|
+
## [1.1.0] — 2026-07-13
|
|
255
|
+
## [1.0.9] — 2026-07-13
|
|
256
|
+
|
|
257
|
+
Real, verified releases, same day. Detailed notes not independently
|
|
258
|
+
recovered.
|
|
259
|
+
|
|
260
|
+
## [1.0.8] — 2026-07-12
|
|
261
|
+
|
|
262
|
+
```{note}
|
|
263
|
+
The previous version of this changelog had an entry labeled
|
|
264
|
+
**"2.6.2.2 — 2026-07-12"** describing 22+ providers, Sentinel-1C/1D
|
|
265
|
+
support, SLC search with provider routing, precise orbit file
|
|
266
|
+
management, 17 spectral indices, and various bug fixes. **2.6.2.2 was
|
|
267
|
+
only ever released once, on 2026-08-25** — it was never released on
|
|
268
|
+
2026-07-12. The date matches this real release, **1.0.8**, exactly.
|
|
269
|
+
That content is reproduced below under the version it actually
|
|
270
|
+
belongs to.
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Added
|
|
274
|
+
- Federated search across 22+ satellite data providers
|
|
275
|
+
- Sentinel-1C and Sentinel-1D constellation support (active since May/April 2026)
|
|
276
|
+
- SLC product type search with automatic provider routing
|
|
277
|
+
- Precise orbit file management (POEORB/RESORB) for InSAR workflows
|
|
278
|
+
- 17 spectral indices: NDVI, EVI, SAVI, NDWI, MNDWI, NDBI, NDSI, NDMI, NBR, dNBR, TCT, PCA, Texture, LST, Albedo, Band Math, Stack
|
|
279
|
+
- SAR processing: despeckle, calibrate, flood mapping, coherence
|
|
280
|
+
- 41-step chainable processing pipeline builder
|
|
281
|
+
- YAML pipeline definitions with cron scheduling
|
|
282
|
+
- Cloud Optimized GeoTIFF output
|
|
283
|
+
- Clean search result tables with ANSI-aware column alignment
|
|
284
|
+
- Live download progress with Jupyter notebook HTML widget support
|
|
285
|
+
- Credential redaction in all log output
|
|
286
|
+
|
|
287
|
+
### Fixed
|
|
288
|
+
- `AuthManager.add_credentials()` now accepts dict form
|
|
289
|
+
- `download()` length/order contract guaranteed
|
|
290
|
+
- Partial downloads detected via file validation
|
|
291
|
+
- CRS identity transform detection after reprojection
|
|
292
|
+
- `resolve_band_keys` missing import in `aws_earth` provider
|
|
293
|
+
- Band alias conflict between Sentinel-2 and Landsat naming conventions
|
|
294
|
+
- Copernicus `product_type` OData filter now correctly applied
|
|
295
|
+
- USGS M2M API authentication payload (`authType`, `catalogId` fields)
|
|
296
|
+
- ZIP archive validation no longer attempts rasterio open on archives
|
|
297
|
+
|
|
298
|
+
### Providers
|
|
299
|
+
- Copernicus Dataspace (Sentinel-1/2/3/5P, SLC + GRD)
|
|
300
|
+
- AWS Earth (Sentinel-2, Landsat via STAC)
|
|
301
|
+
- Planetary Computer (Sentinel-2, Landsat, MODIS)
|
|
302
|
+
- Element84 Earth Search (STAC)
|
|
303
|
+
- USGS Earth Explorer (Landsat 1–9, ASTER, SRTM)
|
|
304
|
+
- NASA Earthdata (MODIS, ICESat-2, GEDI)
|
|
305
|
+
- Alaska SAR Facility (Sentinel-1 SLC, ALOS PALSAR)
|
|
306
|
+
- Planet Labs, Sentinel Hub, Maxar, Airbus, OpenTopography, and more
|
|
307
|
+
|
|
308
|
+
## [1.0.7] — 2026-07-07
|
|
309
|
+
## [1.0.6] — 2026-07-07
|
|
310
|
+
## [1.0.5] — 2026-07-07
|
|
311
|
+
## [1.0.4] — 2026-07-07
|
|
312
|
+
|
|
313
|
+
Four releases the same day. Real, verified. Detailed notes not
|
|
314
|
+
independently recovered.
|
|
315
|
+
|
|
316
|
+
## [1.0.3] — 2026-07-06
|
|
317
|
+
Real, verified release. Detailed notes not independently recovered.
|
|
318
|
+
|
|
319
|
+
## [1.0.2] — 2026-06-28
|
|
320
|
+
|
|
321
|
+
### Added (per the previous version of this changelog, unverified against PyPI for this exact version)
|
|
322
|
+
- Batch processing support for multiple scenes
|
|
323
|
+
- Parallel download with configurable thread count
|
|
324
|
+
- Progress tracking with ETA estimation
|
|
325
|
+
- Automatic retry on network failures (3 attempts)
|
|
326
|
+
- Checksum verification for downloaded files
|
|
327
|
+
|
|
328
|
+
### Fixed
|
|
329
|
+
- Memory leak in large STAC search results
|
|
330
|
+
- Timeout issues with slow API responses
|
|
331
|
+
- Incorrect band ordering in Sentinel-2 L2A products
|
|
332
|
+
- CRS transformation for MODIS sinusoidal projection
|
|
333
|
+
|
|
334
|
+
```{note}
|
|
335
|
+
The previous changelog attributed this content to a version
|
|
336
|
+
**"1.9.2 — 2026-06-15."** No pygeofetch release exists on 2026-06-15,
|
|
337
|
+
and 1.9.2 was actually released 2026-07-26 (see above, with different,
|
|
338
|
+
independently-verified content). 1.0.2's real release date
|
|
339
|
+
(2026-06-28) is the closest real date to the claimed one, and the
|
|
340
|
+
package was already well past a "batch processing" stage of maturity
|
|
341
|
+
by 1.9.2, so this content most plausibly belongs to an earlier
|
|
342
|
+
version -- but this attribution is a best-effort guess, not a
|
|
343
|
+
confirmed match like the 1.0.8 correction above. Treat it as
|
|
344
|
+
unverified.
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## [1.0.1] — 2026-06-27
|
|
348
|
+
## [1.0.0] — 2026-06-27
|
|
349
|
+
|
|
350
|
+
The 1.0.0 stable release, same day as 1.0.1. Real, verified. Detailed
|
|
351
|
+
notes not independently recovered beyond what's implied by the version
|
|
352
|
+
number itself (first release out of beta versioning).
|
|
353
|
+
|
|
354
|
+
## [0.1.7] — 2026-06-17
|
|
355
|
+
## [0.1.6] — 2026-06-13
|
|
356
|
+
## [0.1.5] — 2026-06-13
|
|
357
|
+
## [0.1.4] — 2026-06-05
|
|
358
|
+
## [0.1.3] — 2026-05-28
|
|
359
|
+
## [0.1.2] — 2026-05-28
|
|
360
|
+
|
|
361
|
+
Real, verified beta releases. Detailed notes not independently
|
|
362
|
+
recovered.
|
|
363
|
+
|
|
364
|
+
## [0.1.1] — 2026-05-23
|
|
365
|
+
|
|
366
|
+
Real, verified release, same day as 0.1.0. Detailed notes not
|
|
367
|
+
independently recovered.
|
|
368
|
+
|
|
369
|
+
## [0.1.0] — 2026-05-23 (initial release)
|
|
370
|
+
|
|
371
|
+
Confirmed via direct fetch of this version's own PyPI project page —
|
|
372
|
+
the first ever release.
|
|
373
|
+
|
|
374
|
+
### Added
|
|
375
|
+
- Initial public beta release (classified `Development Status :: 4 - Beta`)
|
|
376
|
+
- Federated search and parallel, resumable downloads across an initial provider set
|
|
377
|
+
- 22 provider integrations at launch, including USGS, Copernicus CDSE, NASA Earthdata (+ Cloud), OpenTopography, Planet Labs, Sentinel Hub, Maxar GBDX, Airbus OneAtlas, Alaska Satellite Facility, NOAA Big Data, Google Earth Engine, TerraBotics, AWS Earth, Planetary Computer, Element84, ESA SciHub mirror, JAXA ALOS World, ISRO Bhuvan, INPE CBERS, DigitalGlobe, GeoServer Generic
|
|
378
|
+
- YAML pipeline orchestration with cron scheduling
|
|
379
|
+
- Post-processing action chain: unzip, reproject, compress, ndvi, ndwi, composite, atmospheric, clip, resample, cog, merge, pan-sharpen
|
|
380
|
+
- Docker support (Docker Hub + GitHub Container Registry)
|
|
381
|
+
- Full CLI: auth, providers, search, download, cache, pipeline, config, system commands
|
|
382
|
+
|
|
383
|
+
### Notably absent at this version (added later)
|
|
384
|
+
- No `pygeofetch.insar` module yet — the full InSAR chain
|
|
385
|
+
(`InterferogramGenerator`, `PhaseUnwrapper`, `SBASTimeSeries`, etc.)
|
|
386
|
+
does not appear anywhere in this version's own feature list or
|
|
387
|
+
roadmap, and was clearly added in a later release
|
|
388
|
+
- Extras were just `geo`, `dev`, `all` — far narrower than the current
|
|
389
|
+
extras layout (`geo`, `processor`, `providers`, `insar`, `sar`,
|
|
390
|
+
`ost`, `viz`, `viz-3d`, `cloud`, `notebook`, `schedule`, `dev`,
|
|
391
|
+
`insar-full`, `full`, `all`)
|
|
392
|
+
- Config environment-variable prefix was `SATELLITE_BRIDGE_*` at this
|
|
393
|
+
point (an internal project codename), later changed to
|
|
394
|
+
`PYGEOFETCH_*`
|
|
395
|
+
- This version's own roadmap (v0.2.0/v0.3.0/v1.0.0 targets) planned
|
|
396
|
+
BlackSky and KOMPSAT providers, a web dashboard, and a hosted cloud
|
|
397
|
+
offering — none of which appear in later versions' feature lists,
|
|
398
|
+
suggesting the roadmap was substantially re-prioritized toward the
|
|
399
|
+
InSAR chain and provider-count expansion that actually shipped
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Corrections to the previous changelog
|
|
404
|
+
|
|
405
|
+
The version of this file uploaded for this update had **5 entries
|
|
406
|
+
covering 5 dates**. PyPI's real release history has **54 releases**.
|
|
407
|
+
Specific issues found and fixed:
|
|
408
|
+
|
|
409
|
+
1. **Two different entries were both labeled `2.6.2.2`**, dated
|
|
410
|
+
2026-07-29 and 2026-07-12. **2.6.2.2 was only ever released once**,
|
|
411
|
+
on 2026-08-25 (confirmed directly from the live PyPI listing).
|
|
412
|
+
2. **The 2026-07-12 entry's date exactly matches a real release**
|
|
413
|
+
— version **1.0.8** — and its content (22+ providers, Sentinel-1C/D,
|
|
414
|
+
SLC search, orbit files, 17 indices) is consistent with that point
|
|
415
|
+
in the project's real history. Reassigned to 1.0.8 above with high
|
|
416
|
+
confidence.
|
|
417
|
+
3. **The 2026-07-29 entry doesn't match any real release date at
|
|
418
|
+
all** (no pygeofetch version was ever released on that date — the
|
|
419
|
+
nearest real dates are 2026-07-26 and 2026-08-02). Its own
|
|
420
|
+
"Migration Guide" section internally references "v2.4.0" as a
|
|
421
|
+
*before* state and "v1.10.0" as the *after* state, but the real
|
|
422
|
+
version sequence has 2.4.0 releasing *later* (2026-08-10) than
|
|
423
|
+
1.9.x, and no version 1.10.0 exists anywhere in the real history —
|
|
424
|
+
so this entry's version references are internally inconsistent
|
|
425
|
+
with the real release sequence, not just misdated. It could not be
|
|
426
|
+
confidently reassigned to a specific real version and is **omitted
|
|
427
|
+
above** rather than attached to a guess. If you have the original
|
|
428
|
+
source (a GitHub release, a commit, an internal doc) for this
|
|
429
|
+
SNAPHU/urban-InSAR unwrapping work, it should be re-added under
|
|
430
|
+
whichever real version actually shipped it.
|
|
431
|
+
4. **The "1.9.2 — 2026-06-15" entry** doesn't match either: no release
|
|
432
|
+
exists on that date, and the real 1.9.2 (2026-07-26) has a fully
|
|
433
|
+
different, independently-verified feature set (see above). Its
|
|
434
|
+
content was tentatively reassigned to 1.0.2 (2026-06-28, the
|
|
435
|
+
closest real date) above, but flagged as an unverified guess rather
|
|
436
|
+
than a confirmed correction.
|
|
437
|
+
5. **"1.9.1 — 2026-05-20" and "1.9.0 — 2026-04-25"** in the previous
|
|
438
|
+
file also don't match real dates for those version numbers (real
|
|
439
|
+
1.9.1 released 2026-07-25; there is no pygeofetch release at all
|
|
440
|
+
on 2026-04-25 — that predates even the real first release,
|
|
441
|
+
2026-05-23). This content wasn't reassigned anywhere, for the same
|
|
442
|
+
reason as #3: no confident match to a real version was found.
|
|
443
|
+
|
|
444
|
+
**49 of the 54 real releases have no independently-verified detailed
|
|
445
|
+
notes** in this file — PyPI's release-history page doesn't expose
|
|
446
|
+
per-version notes, and confirming each one would require fetching and
|
|
447
|
+
diffing all 54 individual version snapshots. The version numbers and
|
|
448
|
+
dates for all 54 are real and verified; only the narrative content is
|
|
449
|
+
incomplete. If per-version detail matters going forward, the fix is
|
|
450
|
+
process, not research: tag real GitHub releases with real notes at
|
|
451
|
+
release time, so this file (or an auto-generated one) has a genuine
|
|
452
|
+
source to pull from instead of reconstructing after the fact.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 2.6.2
|
|
3
|
+
Version: 2.6.2.2
|
|
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
|
|
@@ -26,7 +26,7 @@ License: MIT License
|
|
|
26
26
|
SOFTWARE.
|
|
27
27
|
|
|
28
28
|
Project-URL: Homepage, https://www.eocoreint.com/
|
|
29
|
-
Project-URL: Documentation, https://
|
|
29
|
+
Project-URL: Documentation, https://pygeofetch.readthedocs.io/en/latest/
|
|
30
30
|
Project-URL: Repository, https://github.com/EOCoreINT/pygeofetch
|
|
31
31
|
Project-URL: Bug Tracker, https://github.com/EOCoreINT/pygeofetch/issues
|
|
32
32
|
Keywords: satellite,remote-sensing,GIS,earth-observation,geospatial,SAR,Sentinel,Landsat
|
|
@@ -55,6 +55,7 @@ Requires-Dist: requests>=2.31
|
|
|
55
55
|
Requires-Dist: anyio>=4.2
|
|
56
56
|
Requires-Dist: numpy>=1.26
|
|
57
57
|
Requires-Dist: tqdm>=4.66
|
|
58
|
+
Requires-Dist: eval_type_backport>=0.2; python_version < "3.10"
|
|
58
59
|
Provides-Extra: geo
|
|
59
60
|
Requires-Dist: rasterio>=1.3; extra == "geo"
|
|
60
61
|
Requires-Dist: geopandas>=0.14; extra == "geo"
|
|
@@ -72,11 +73,14 @@ Requires-Dist: scikit-image>=0.23; extra == "processor"
|
|
|
72
73
|
Requires-Dist: geopandas>=0.14; extra == "processor"
|
|
73
74
|
Provides-Extra: providers
|
|
74
75
|
Requires-Dist: eodag>=3.0; extra == "providers"
|
|
76
|
+
Provides-Extra: sar
|
|
77
|
+
Requires-Dist: sarxarray>=0.1; extra == "sar"
|
|
75
78
|
Provides-Extra: insar
|
|
76
|
-
Requires-Dist: sarxarray>=0.1; extra == "insar"
|
|
77
79
|
Requires-Dist: scipy>=1.12; extra == "insar"
|
|
80
|
+
Requires-Dist: shapely>=2.0; extra == "insar"
|
|
81
|
+
Requires-Dist: xarray>=2024.1; extra == "insar"
|
|
78
82
|
Provides-Extra: ost
|
|
79
|
-
Requires-Dist: opensartoolkit>=
|
|
83
|
+
Requires-Dist: opensartoolkit>=0.12.1; extra == "ost"
|
|
80
84
|
Provides-Extra: viz
|
|
81
85
|
Requires-Dist: leafmap>=0.30; extra == "viz"
|
|
82
86
|
Requires-Dist: folium>=0.16; extra == "viz"
|
|
@@ -87,15 +91,15 @@ Requires-Dist: ipyleaflet>=0.17.0; extra == "viz"
|
|
|
87
91
|
Requires-Dist: ipywidgets>=8.0.0; extra == "viz"
|
|
88
92
|
Requires-Dist: ipyevents>=2.0.2; extra == "viz"
|
|
89
93
|
Requires-Dist: ipyfilechooser>=0.6.0; extra == "viz"
|
|
90
|
-
Requires-Dist: sidecar>=0.
|
|
94
|
+
Requires-Dist: sidecar>=0.5.0; extra == "viz"
|
|
91
95
|
Requires-Dist: bokeh>=3.0.0; extra == "viz"
|
|
92
96
|
Requires-Dist: seaborn>=0.12.0; extra == "viz"
|
|
93
97
|
Requires-Dist: plotly>=5.14.0; extra == "viz"
|
|
94
|
-
Requires-Dist: whitebox>=2.
|
|
95
|
-
Requires-Dist: whiteboxgui>=2.
|
|
98
|
+
Requires-Dist: whitebox>=2.3.0; extra == "viz"
|
|
99
|
+
Requires-Dist: whiteboxgui>=2.2.0; extra == "viz"
|
|
96
100
|
Requires-Dist: geemap>=0.28.0; extra == "viz"
|
|
97
101
|
Requires-Dist: osmnx>=1.9.4; extra == "viz"
|
|
98
|
-
Requires-Dist: contextily>=1.
|
|
102
|
+
Requires-Dist: contextily>=1.6.0; extra == "viz"
|
|
99
103
|
Requires-Dist: xyzservices>=2023.10.0; extra == "viz"
|
|
100
104
|
Requires-Dist: mapclassify>=2.6.0; extra == "viz"
|
|
101
105
|
Requires-Dist: geoplot>=0.5.0; extra == "viz"
|
|
@@ -121,31 +125,37 @@ Requires-Dist: pytest>=8.0; extra == "dev"
|
|
|
121
125
|
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
122
126
|
Requires-Dist: pytest-mock>=3.12; extra == "dev"
|
|
123
127
|
Requires-Dist: ruff>=0.3; extra == "dev"
|
|
128
|
+
Requires-Dist: black<25.0,>=24.0; extra == "dev"
|
|
124
129
|
Requires-Dist: mypy>=1.8; extra == "dev"
|
|
125
130
|
Requires-Dist: build>=1.0; extra == "dev"
|
|
126
131
|
Requires-Dist: twine>=5.0; extra == "dev"
|
|
132
|
+
Provides-Extra: test
|
|
133
|
+
Requires-Dist: pygeofetch[dev,geo,insar]; extra == "test"
|
|
127
134
|
Provides-Extra: insar-full
|
|
128
135
|
Requires-Dist: snaphu>=0.1; extra == "insar-full"
|
|
129
136
|
Requires-Dist: scipy>=1.12; extra == "insar-full"
|
|
130
137
|
Provides-Extra: full
|
|
131
|
-
Requires-Dist: pygeofetch[cloud,geo,notebook,processor,providers,
|
|
138
|
+
Requires-Dist: pygeofetch[cloud,geo,insar,notebook,processor,providers,schedule,viz]; extra == "full"
|
|
132
139
|
Provides-Extra: all
|
|
133
140
|
Requires-Dist: pygeofetch[full]; extra == "all"
|
|
134
141
|
Dynamic: license-file
|
|
135
142
|
|
|
136
143
|
<div align="center">
|
|
137
144
|
|
|
138
|
-
<img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/main/icon/pygeofetch_logo.png" alt="PyGeoFetch Logo" width="350">
|
|
139
|
-
|
|
140
145
|
[](https://pypi.org/project/pygeofetch/)
|
|
141
146
|
[](https://pypi.org/project/pygeofetch/)
|
|
142
147
|
[](https://opensource.org/licenses/MIT)
|
|
143
|
-
[](https://doi.org/10.5281/zenodo.22087230)
|
|
149
|
+
[](https://github.com/EOCoreINT/pygeofetch/actions/workflows/tests.yml)
|
|
150
|
+
[](https://codecov.io/gh/appiahkubis14/pygeofetch)
|
|
145
151
|
|
|
146
152
|
**A unified satellite data and geospatial processing platform — one CLI, one Python API, 24 providers, and a fully verified InSAR chain.**
|
|
147
153
|
|
|
148
|
-
[Quick Start](#-quick-start) · [Mexico City Case Study](#-case-study-mapping-mexico-city-land-subsidence-with-insar) · [Case Study Repo ↗](https://github.com/EOCoreINT/mexico-subsidence-project) · [Documentation](https://
|
|
154
|
+
[Quick Start](#-quick-start) · [Mexico City Case Study](#-case-study-mapping-mexico-city-land-subsidence-with-insar) · [Case Study Repo ↗](https://github.com/EOCoreINT/mexico-subsidence-project) · [Documentation](https://pygeofetch.readthedocs.io/en/latest/) · [Notebooks](#-notebooks)
|
|
155
|
+
|
|
156
|
+
<br>
|
|
157
|
+
<img src="icon/concept_a.png" alt="PyGeoFetch Logo" width="350">
|
|
158
|
+
<br>
|
|
149
159
|
|
|
150
160
|
</div>
|
|
151
161
|
|
|
@@ -172,8 +182,8 @@ Where pygeofetch goes further than most data-access libraries is in its **InSAR
|
|
|
172
182
|
---
|
|
173
183
|
|
|
174
184
|
<p align="center">
|
|
175
|
-
<img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/main/docs/
|
|
176
|
-
<img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/main/docs/
|
|
185
|
+
<img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/refs/heads/main/docs/static/download.png" width="48%" />
|
|
186
|
+
<img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/refs/heads/main/docs/static/download%20(1).png" width="48%" />
|
|
177
187
|
</p>
|
|
178
188
|
<p align="center"><em>NDVI trend (2018–2024) and severity classification for the Obuasi Municipal District, Ghana — computed end-to-end with pygeofetch from boundary-clipped USGS Landsat data.</em></p>
|
|
179
189
|
|
|
@@ -213,7 +223,7 @@ Every provider has been directly verified to return at minimum a correct boundin
|
|
|
213
223
|
pip install pygeofetch # core — free providers work immediately
|
|
214
224
|
pip install "pygeofetch[geo]" # + rasterio, geopandas, shapely
|
|
215
225
|
pip install "pygeofetch[insar]" # + native SBAS inversion, phase unwrapping
|
|
216
|
-
pip install "pygeofetch[insar-full]" # +
|
|
226
|
+
pip install "pygeofetch[insar-full]" # + For Linux Users
|
|
217
227
|
pip install "pygeofetch[all]" # everything
|
|
218
228
|
```
|
|
219
229
|
|
|
@@ -317,7 +327,7 @@ The full, runnable notebook — real search and download throughout, no syntheti
|
|
|
317
327
|
|
|
318
328
|
**InSAR** (`pygeofetch.insar`): `SLCExtractor` · `InterferogramGenerator` · `AtmosphericCorrector` (elevation-correlated or real ERA5) · `IonosphericCorrector` (real IONEX/CDDIS) · `PhaseUnwrapper` (SNAPHU) · `SBASTimeSeries` · `DataValidator` · `InSARProject` (high-level, search-to-interferogram wrapper)
|
|
319
329
|
|
|
320
|
-
Full method signatures and options are in the [documentation](https://
|
|
330
|
+
Full method signatures and options are in the [documentation](https://pygeofetch.readthedocs.io/en/latest/) and [`pygeofetch/insar/README.md`](pygeofetch/insar/README.md).
|
|
321
331
|
|
|
322
332
|
---
|
|
323
333
|
|
|
@@ -361,37 +371,30 @@ Every capability above is also exposed as a CLI command, grouped by area:
|
|
|
361
371
|
| `proc-pipeline` / `pipeline` | `pygeofetch pipeline schedule weekly.yaml` | YAML pipeline execution and scheduling |
|
|
362
372
|
| `cache` / `config` | `pygeofetch cache prune --max-size 1GB` | Cache and configuration management |
|
|
363
373
|
|
|
364
|
-
Run `pygeofetch --help` or any subcommand with `--help` for the complete, current option list, or see the [CLI reference docs](https://
|
|
374
|
+
Run `pygeofetch --help` or any subcommand with `--help` for the complete, current option list, or see the [CLI reference docs](https://pygeofetch.readthedocs.io/en/latest/).
|
|
365
375
|
|
|
366
376
|
---
|
|
367
377
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
| `provider_search_footprint_test.ipynb` | Search and footprint-map validation across all 24 providers |
|
|
385
|
-
|
|
386
|
-
```bash
|
|
387
|
-
cd notebooks/ && jupyter lab
|
|
388
|
-
``` -->
|
|
389
|
-
|
|
390
|
-
---
|
|
378
|
+
## 📚 Citation
|
|
379
|
+
|
|
380
|
+
If you use PyGeoFetch in your research or operational work, please cite it using the following:
|
|
381
|
+
|
|
382
|
+
### Software Citation
|
|
383
|
+
```bibtex
|
|
384
|
+
@software{pygeofetch_2026,
|
|
385
|
+
author = {Appiah Kubi, Samuel},
|
|
386
|
+
title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
|
|
387
|
+
year = {2026},
|
|
388
|
+
publisher = {Zenodo},
|
|
389
|
+
version = {2.6.2.2},
|
|
390
|
+
doi = {10.5281/zenodo.22087230},
|
|
391
|
+
url = {https://doi.org/10.5281/zenodo.22087230}
|
|
392
|
+
}
|
|
393
|
+
```
|
|
391
394
|
|
|
392
395
|
## Documentation
|
|
393
396
|
|
|
394
|
-
Full documentation: **https://
|
|
397
|
+
Full documentation: **https://pygeofetch.readthedocs.io/en/latest/** — CLI reference, provider auth guides, pipeline configuration, post-processing catalogue, and InSAR verification methodology.
|
|
395
398
|
|
|
396
399
|
## Contributing
|
|
397
400
|
|
|
@@ -400,7 +403,7 @@ Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Good first
|
|
|
400
403
|
```bash
|
|
401
404
|
git clone git@github.com:EOCoreINT/pygeofetch.git && cd pygeofetch
|
|
402
405
|
pip install -e ".[dev,all]" && pytest tests/unit/ -v
|
|
403
|
-
|
|
406
|
+
|
|
404
407
|
|
|
405
408
|
## License
|
|
406
409
|
|