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.
Files changed (191) hide show
  1. pygeofetch-2.6.2.2/CHANGELOG.md +452 -0
  2. {pygeofetch-2.6.2/pygeofetch.egg-info → pygeofetch-2.6.2.2}/PKG-INFO +47 -44
  3. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/README.md +31 -35
  4. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/__init__.py +1 -1
  5. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/auth_commands.py +6 -3
  6. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/download_commands.py +62 -1
  7. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/main.py +10 -6
  8. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/monitor_commands.py +49 -14
  9. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/search_commands.py +62 -2
  10. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/authenticator.py +122 -19
  11. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/downloader.py +31 -13
  12. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/engine.py +236 -1
  13. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/monitor.py +16 -5
  14. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/scheduler.py +239 -8
  15. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/searcher.py +26 -2
  16. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/state.py +20 -6
  17. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/__init__.py +96 -71
  18. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/analysis.py +62 -40
  19. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/annotation.py +116 -70
  20. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/atmosphere.py +168 -70
  21. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/coregister.py +126 -58
  22. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/deburst.py +39 -12
  23. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/esd.py +65 -28
  24. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/extraction.py +126 -67
  25. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/flatearth.py +45 -18
  26. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/geolocation.py +79 -29
  27. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/gpu.py +3 -1
  28. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/interferogram.py +502 -193
  29. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/ionosphere.py +118 -45
  30. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/offset_geometry.py +47 -43
  31. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/offset_tracking.py +45 -20
  32. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/preflight.py +295 -170
  33. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/provenance.py +2 -1
  34. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/ps_selection.py +21 -9
  35. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/splitspectrum_diagnostic.py +12 -4
  36. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/stack_selection.py +179 -77
  37. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/synthetic.py +53 -17
  38. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/timeseries.py +268 -152
  39. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/unwrap.py +408 -156
  40. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/validate.py +36 -13
  41. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/visualize.py +15 -5
  42. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/insar/workflow.py +102 -29
  43. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/meta.yaml +1 -1
  44. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/satellite_data.py +5 -3
  45. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/indices.py +5 -0
  46. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/preprocessor.py +55 -25
  47. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/sar.py +13 -4
  48. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/indices.py +4 -0
  49. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/stacker.py +4 -0
  50. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/timeseries.py +41 -13
  51. pygeofetch-2.6.2.2/pygeofetch/providers/airbus_oneatlas.py +468 -0
  52. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/alaska_satellite_facility.py +5 -2
  53. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/aws_earth.py +1 -1
  54. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/base.py +2 -0
  55. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/copernicus.py +19 -8
  56. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/copernicus_nodes.py +73 -23
  57. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/digitalglobe.py +5 -2
  58. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/earth_explorer_additional.py +5 -2
  59. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/element84.py +1 -1
  60. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/eodag_provider.py +9 -5
  61. pygeofetch-2.6.2.2/pygeofetch/providers/esa_scihub.py +168 -0
  62. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/geoserver_generic.py +5 -2
  63. pygeofetch-2.6.2.2/pygeofetch/providers/google_earth_engine.py +156 -0
  64. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/inpe_cbers.py +5 -2
  65. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/isro_bhuvan.py +5 -2
  66. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/jaxa_earth.py +5 -2
  67. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/maxar_gbdx.py +5 -2
  68. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/nasa_earthdata.py +6 -4
  69. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/nasa_earthdata_cloud.py +2 -2
  70. pygeofetch-2.6.2.2/pygeofetch/providers/noaa_big_data.py +335 -0
  71. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/opentopography.py +6 -2
  72. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/planet.py +4 -3
  73. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/planetary_computer.py +1 -1
  74. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/sentinel_hub.py +11 -7
  75. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/terrabotics.py +4 -3
  76. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/usgs.py +20 -5
  77. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/__init__.py +1 -1
  78. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_native.py +1 -1
  79. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/extraction.py +8 -4
  80. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/gcp_recovery.py +1 -3
  81. pygeofetch-2.6.2.2/pygeofetch/validation/__init__.py +24 -0
  82. pygeofetch-2.6.2.2/pygeofetch/validation/optical_validator.py +918 -0
  83. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/map.py +82 -33
  84. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/plot.py +106 -45
  85. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2/pygeofetch.egg-info}/PKG-INFO +47 -44
  86. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/SOURCES.txt +12 -2
  87. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/requires.txt +18 -7
  88. pygeofetch-2.6.2.2/pyproject.toml +307 -0
  89. pygeofetch-2.6.2.2/tests/test_airbus_oneatlas.py +317 -0
  90. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_atmospheric_circular_regression.py +24 -7
  91. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_build_sbas_network.py +68 -38
  92. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_metadata.py +20 -6
  93. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_processing_integration.py +113 -32
  94. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_sync_large_gap.py +49 -35
  95. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_sync_prescreening.py +68 -43
  96. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_burst_synchronization.py +56 -36
  97. pygeofetch-2.6.2.2/tests/test_circuit_breaker_wiring.py +118 -0
  98. pygeofetch-2.6.2.2/tests/test_cli_optical_validation.py +147 -0
  99. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_copernicus_nodes.py +63 -36
  100. pygeofetch-2.6.2.2/tests/test_coregister_integration.py +353 -0
  101. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_coregister_upgrades.py +110 -47
  102. pygeofetch-2.6.2.2/tests/test_credential_encryption.py +151 -0
  103. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_era5_atmospheric_correction.py +17 -6
  104. pygeofetch-2.6.2.2/tests/test_esa_scihub.py +80 -0
  105. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_extraction.py +46 -12
  106. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_flat_earth_phase.py +72 -24
  107. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_gcp_reprojection.py +30 -9
  108. pygeofetch-2.6.2.2/tests/test_google_earth_engine.py +78 -0
  109. pygeofetch-2.6.2.2/tests/test_insar.py +691 -0
  110. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_ionosphere.py +102 -33
  111. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_map_preview_consolidation.py +41 -24
  112. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_models.py +10 -3
  113. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_monitor.py +51 -30
  114. pygeofetch-2.6.2.2/tests/test_noaa_big_data.py +143 -0
  115. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_offset_tracking.py +76 -31
  116. pygeofetch-2.6.2.2/tests/test_optical_validation_wiring.py +237 -0
  117. pygeofetch-2.6.2.2/tests/test_optical_validator.py +496 -0
  118. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_pgv_integration_contract.py +42 -42
  119. pygeofetch-2.6.2.2/tests/test_pipeline_process_export.py +234 -0
  120. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_preflight_gate.py +398 -107
  121. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_provider_geometry_audit (1).py +45 -41
  122. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_provider_scene_disambiguation.py +31 -12
  123. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_providers.py +1 -0
  124. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_ps_selection.py +122 -54
  125. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_raster_collocation_integration.py +78 -37
  126. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_reference_pixel_and_despike.py +64 -38
  127. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_risk_mapping.py +101 -43
  128. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_screen_stack_orchestration.py +68 -41
  129. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_search_download.py +3 -1
  130. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_sign_convention.py +71 -37
  131. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_splitspectrum_diagnostic.py +7 -2
  132. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_stack_selection_consolidation.py +104 -45
  133. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_state.py +33 -24
  134. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_topo_r2_bug.py +42 -21
  135. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_utils.py +2 -1
  136. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/tests/test_wls_inversion.py +124 -54
  137. pygeofetch-2.6.2/CHANGELOG.md +0 -195
  138. pygeofetch-2.6.2/pygeofetch/providers/airbus_oneatlas.py +0 -267
  139. pygeofetch-2.6.2/pygeofetch/providers/esa_scihub.py +0 -269
  140. pygeofetch-2.6.2/pygeofetch/providers/google_earth_engine.py +0 -267
  141. pygeofetch-2.6.2/pygeofetch/providers/noaa_big_data.py +0 -253
  142. pygeofetch-2.6.2/pyproject.toml +0 -201
  143. pygeofetch-2.6.2/tests/test_coregister_integration.py +0 -354
  144. pygeofetch-2.6.2/tests/test_insar.py +0 -578
  145. pygeofetch-2.6.2/tests/test_preflight_gate (1).py +0 -319
  146. pygeofetch-2.6.2/tests/test_provider_geometry_audit.py +0 -177
  147. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/LICENSE +0 -0
  148. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/MANIFEST.in +0 -0
  149. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/__init__.py +0 -0
  150. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/config_commands.py +0 -0
  151. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/index_commands.py +0 -0
  152. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/pipeline_process_commands.py +0 -0
  153. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/postprocess_commands.py +0 -0
  154. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/preprocess_commands.py +0 -0
  155. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/cli/sar_commands.py +0 -0
  156. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/__init__.py +0 -0
  157. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/defaults.yaml +0 -0
  158. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/config/settings.py +0 -0
  159. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/__init__.py +0 -0
  160. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/cache_manager.py +0 -0
  161. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/logging.py +0 -0
  162. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/core/orbits.py +0 -0
  163. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/__init__.py +0 -0
  164. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/download_task.py +0 -0
  165. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/search_query.py +0 -0
  166. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/models/user_auth.py +0 -0
  167. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/__init__.py +0 -0
  168. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/base.py +0 -0
  169. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/batch.py +0 -0
  170. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/pipeline.py +0 -0
  171. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processing/postprocessor.py +0 -0
  172. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/__init__.py +0 -0
  173. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/landsat.py +0 -0
  174. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/processor/loader.py +0 -0
  175. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/providers/__init__.py +0 -0
  176. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_ost.py +0 -0
  177. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/_sarxarray.py +0 -0
  178. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/sar/processor.py +0 -0
  179. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/__init__.py +0 -0
  180. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/file_utils.py +0 -0
  181. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/geo_utils.py +0 -0
  182. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/logging_setup.py +0 -0
  183. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/retry_handler.py +0 -0
  184. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/utils/validators.py +0 -0
  185. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch/viz/__init__.py +0 -0
  186. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/dependency_links.txt +0 -0
  187. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/entry_points.txt +0 -0
  188. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/not-zip-safe +0 -0
  189. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/pygeofetch.egg-info/top_level.txt +0 -0
  190. {pygeofetch-2.6.2 → pygeofetch-2.6.2.2}/setup.cfg +0 -0
  191. {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://appiahkubis14.github.io/pygeofetch-docs/
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>=3.0; extra == "ost"
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.6.0; extra == "viz"
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.4.0; extra == "viz"
95
- Requires-Dist: whiteboxgui>=2.4.0; extra == "viz"
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.9.4; extra == "viz"
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,sar,schedule,viz]; extra == "full"
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
  [![PyPI version](https://badge.fury.io/py/pygeofetch.svg)](https://pypi.org/project/pygeofetch/)
141
146
  [![Python Versions](https://img.shields.io/pypi/pyversions/pygeofetch.svg)](https://pypi.org/project/pygeofetch/)
142
147
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
143
- [![Tests](https://github.com/appiahkubis14/pygeofetch/actions/workflows/tests.yml/badge.svg)](https://github.com/appiahkubis14/pygeofetch/actions)
144
- [![Coverage](https://codecov.io/gh/appiahkubis14/pygeofetch/branch/main/graph/badge.svg)](https://codecov.io/gh/appiahkubis14/pygeofetch)
148
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.22087230.svg)](https://doi.org/10.5281/zenodo.22087230)
149
+ [![Tests](https://github.com/EOCoreINT/pygeofetch/actions/workflows/tests.yml/badge.svg)](https://github.com/EOCoreINT/pygeofetch/actions/workflows/tests.yml)
150
+ [![codecov](https://codecov.io/gh/appiahkubis14/pygeofetch/graph/badge.svg?token=2PS2A2VZL6)](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://appiahkubis14.github.io/pygeofetch-docs/) · [Notebooks](#-notebooks)
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/images/trend_map.png" width="48%" />
176
- <img src="https://raw.githubusercontent.com/EOCoreINT/pygeofetch/main/docs/images/trend_classification.png" width="48%" />
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]" # + MintPy passthrough for advanced corrections
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://appiahkubis14.github.io/pygeofetch-docs/) and [`pygeofetch/insar/README.md`](pygeofetch/insar/README.md).
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://appiahkubis14.github.io/pygeofetch-docs/).
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
- <!-- ## 📚 Notebooks
369
-
370
- | Notebook | Topics |
371
- |---|---|
372
- | `01_getting_started.ipynb` | Install, doctor, first search, first download |
373
- | `02_authentication_and_providers.ipynb` | All 24 providers, credentials, capability filters |
374
- | `03_advanced_search.ipynb` | Federated search, CQL2 filters, output formats, caching |
375
- | `04_download_and_postprocessing.ipynb` | Band selection, parallel downloads, post-processing |
376
- | `05_pipelines_and_scheduling.ipynb` | YAML pipelines, scheduling, Python builder API |
377
- | `06_real_world_workflows.ipynb` | NDVI time series, change detection, multi-sensor fusion |
378
- | `07_copernicus_and_authenticated_providers.ipynb` | Copernicus, USGS, NASA, Planet, ASF, OpenTopography |
379
- | `08_cli_complete_reference.ipynb` | Every CLI command with runnable examples |
380
- | `09_processing_complete.ipynb` | Full processing engine: preprocessing, indices, SAR, pipelines |
381
- | [`mexico_city_full_confirmed (2).ipynb`](<https://github.com/EOCoreINT/mexico-subsidence-project/blob/main/mexico_city_full_confirmed%20(2).ipynb>) ↗ | The [Mexico City case study](#-case-study-mapping-mexico-city-land-subsidence-with-insar) above, in a separate companion repo — real search/download, full InSAR chain, SBAS inversion |
382
- | `piton_fournaise_full.ipynb` | Verified InSAR pipeline against the real April 2021 Piton de la Fournaise eruption |
383
- | `amatrice_full.ipynb` | Verified InSAR pipeline against the real 2016 Amatrice, Italy earthquake |
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://appiahkubis14.github.io/pygeofetch-docs/** — CLI reference, provider auth guides, pipeline configuration, post-processing catalogue, and InSAR verification methodology.
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