PyGeoFetch 2.6.7.0__tar.gz → 2.6.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/CHANGELOG.md +7 -7
  2. {pygeofetch-2.6.7.0/pygeofetch.egg-info → pygeofetch-2.6.8.0}/PKG-INFO +2 -2
  3. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/README.md +1 -1
  4. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/__init__.py +1 -1
  5. pygeofetch-2.6.8.0/pygeofetch/insar/__init__.py +314 -0
  6. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/meta.yaml +1 -1
  7. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0/pygeofetch.egg-info}/PKG-INFO +2 -2
  8. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pyproject.toml +1 -1
  9. pygeofetch-2.6.7.0/pygeofetch/viz/__init__.py +0 -21
  10. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/LICENSE +0 -0
  11. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/MANIFEST.in +0 -0
  12. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/__init__.py +0 -0
  13. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/auth_commands.py +0 -0
  14. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/classify_commands.py +0 -0
  15. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/config_commands.py +0 -0
  16. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/download_commands.py +0 -0
  17. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/index_commands.py +0 -0
  18. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/main.py +0 -0
  19. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/monitor_commands.py +0 -0
  20. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/multisensor_commands.py +0 -0
  21. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/optical_commands.py +0 -0
  22. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/pipeline_process_commands.py +0 -0
  23. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/postprocess_commands.py +0 -0
  24. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/preprocess_commands.py +0 -0
  25. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/sar_commands.py +0 -0
  26. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/scale_commands.py +0 -0
  27. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/search_commands.py +0 -0
  28. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/config/__init__.py +0 -0
  29. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/config/defaults.yaml +0 -0
  30. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/config/settings.py +0 -0
  31. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/__init__.py +0 -0
  32. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/authenticator.py +0 -0
  33. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/cache_manager.py +0 -0
  34. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/chunked_processor.py +0 -0
  35. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/__init__.py +0 -0
  36. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/geoparquet_io.py +0 -0
  37. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/zarr_io.py +0 -0
  38. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_organizer.py +0 -0
  39. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/downloader.py +0 -0
  40. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/engine.py +0 -0
  41. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/logging.py +0 -0
  42. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/monitor.py +0 -0
  43. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/orbits.py +0 -0
  44. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/progress.py +0 -0
  45. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/scheduler.py +0 -0
  46. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/searcher.py +0 -0
  47. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/core/state.py +0 -0
  48. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/geotech/__init__.py +0 -0
  49. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/geotech/risk_mapper.py +0 -0
  50. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/advanced_safeguards.py +0 -0
  51. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/analysis.py +0 -0
  52. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/annotation.py +0 -0
  53. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/atmosphere.py +0 -0
  54. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/auto_fallback.py +0 -0
  55. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/coregister.py +0 -0
  56. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/deburst.py +0 -0
  57. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/esd.py +0 -0
  58. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/extraction.py +0 -0
  59. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/feasibility.py +0 -0
  60. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/flatearth.py +0 -0
  61. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/geolocation.py +0 -0
  62. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/gpu.py +0 -0
  63. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/interferogram.py +0 -0
  64. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/ionosphere.py +0 -0
  65. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/network_thinning.py +0 -0
  66. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/offset_geometry.py +0 -0
  67. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/offset_tracking.py +0 -0
  68. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/preflight.py +0 -0
  69. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/provenance.py +0 -0
  70. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/ps_selection.py +0 -0
  71. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/splitspectrum_diagnostic.py +0 -0
  72. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/stack_selection.py +0 -0
  73. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/synthetic.py +0 -0
  74. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/timeseries.py +0 -0
  75. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/unwrap.py +0 -0
  76. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/validate.py +0 -0
  77. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/visualize.py +0 -0
  78. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/workflow.py +0 -0
  79. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/__init__.py +0 -0
  80. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/download_task.py +0 -0
  81. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/satellite_data.py +0 -0
  82. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/search_query.py +0 -0
  83. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/stream_options.py +0 -0
  84. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/models/user_auth.py +0 -0
  85. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/__init__.py +0 -0
  86. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/_init.py +0 -0
  87. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/dem_differencing.py +0 -0
  88. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/flood_mapping.py +0 -0
  89. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/insar_optical_fusion.py +0 -0
  90. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/terrain_corrected_change.py +0 -0
  91. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/vegetation_disturbance.py +0 -0
  92. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/optical/__init__.py +0 -0
  93. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/optical/offset_tracking.py +0 -0
  94. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/__init__.py +0 -0
  95. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/base.py +0 -0
  96. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/batch.py +0 -0
  97. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/classification.py +0 -0
  98. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/indices.py +0 -0
  99. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/pipeline.py +0 -0
  100. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/postprocessor.py +0 -0
  101. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/preprocessor.py +0 -0
  102. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/sar.py +0 -0
  103. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/uq_exporter.py +0 -0
  104. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/__init__.py +0 -0
  105. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/indices.py +0 -0
  106. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/landsat.py +0 -0
  107. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/loader.py +0 -0
  108. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/stacker.py +0 -0
  109. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/timeseries.py +0 -0
  110. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/__init__.py +0 -0
  111. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/airbus_oneatlas.py +0 -0
  112. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/alaska_satellite_facility.py +0 -0
  113. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/aws_earth.py +0 -0
  114. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/base.py +0 -0
  115. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/copernicus.py +0 -0
  116. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/copernicus_nodes.py +0 -0
  117. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/digitalglobe.py +0 -0
  118. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/earth_explorer_additional.py +0 -0
  119. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/element84.py +0 -0
  120. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/eodag_provider.py +0 -0
  121. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/esa_scihub.py +0 -0
  122. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/geoserver_generic.py +0 -0
  123. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/google_earth_engine.py +0 -0
  124. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/inpe_cbers.py +0 -0
  125. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/isro_bhuvan.py +0 -0
  126. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/jaxa_earth.py +0 -0
  127. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/maxar_gbdx.py +0 -0
  128. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/nasa_earthdata.py +0 -0
  129. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/nasa_earthdata_cloud.py +0 -0
  130. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/noaa_big_data.py +0 -0
  131. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/opentopography.py +0 -0
  132. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/planet.py +0 -0
  133. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/planetary_computer.py +0 -0
  134. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/sentinel_hub.py +0 -0
  135. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/terrabotics.py +0 -0
  136. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/usgs.py +0 -0
  137. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/__init__.py +0 -0
  138. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_native.py +0 -0
  139. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_ost.py +0 -0
  140. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_sarxarray.py +0 -0
  141. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/extraction.py +0 -0
  142. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/math.py +0 -0
  143. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/pipelines.py +0 -0
  144. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/processor.py +0 -0
  145. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/__init__.py +0 -0
  146. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/burst_streaming.py +0 -0
  147. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/cog_streamer.py +0 -0
  148. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/lightweight_prefetch.py +0 -0
  149. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/window_calculator.py +0 -0
  150. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/__init__.py +0 -0
  151. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/scene.py +0 -0
  152. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/windowed.py +0 -0
  153. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/__init__.py +0 -0
  154. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/file_utils.py +0 -0
  155. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/gcp_recovery.py +0 -0
  156. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/geo_utils.py +0 -0
  157. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/geocoding.py +0 -0
  158. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/logging_setup.py +0 -0
  159. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/retry_handler.py +0 -0
  160. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/sar_math.py +0 -0
  161. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/validators.py +0 -0
  162. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/validation/__init__.py +0 -0
  163. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/validation/optical_validator.py +0 -0
  164. {pygeofetch-2.6.7.0/pygeofetch/insar → pygeofetch-2.6.8.0/pygeofetch/viz}/__init__.py +0 -0
  165. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/viz/insar.py +0 -0
  166. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/viz/map.py +0 -0
  167. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch/viz/plot.py +0 -0
  168. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/SOURCES.txt +0 -0
  169. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/dependency_links.txt +0 -0
  170. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/entry_points.txt +0 -0
  171. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/not-zip-safe +0 -0
  172. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/requires.txt +0 -0
  173. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/top_level.txt +0 -0
  174. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/setup.cfg +0 -0
  175. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_advanced_safeguards.py +0 -0
  176. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_airbus_oneatlas.py +0 -0
  177. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_alaska_satellite_facility.py +0 -0
  178. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_atmospheric_circular_regression.py +0 -0
  179. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_auto_fallback.py +0 -0
  180. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_auto_fallback_fixed.py +0 -0
  181. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_build_sbas_network-new.py +0 -0
  182. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_build_sbas_network.py +0 -0
  183. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_burst_metadata.py +0 -0
  184. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_burst_processing_integration.py +0 -0
  185. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_burst_sync_large_gap.py +0 -0
  186. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_burst_sync_prescreening.py +0 -0
  187. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_burst_synchronization.py +0 -0
  188. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_circuit_breaker_wiring.py +0 -0
  189. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_cli_optical_validation.py +0 -0
  190. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_copernicus_nodes.py +0 -0
  191. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_coregister_integration.py +0 -0
  192. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_coregister_upgrades (1).py +0 -0
  193. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_coregister_upgrades.py +0 -0
  194. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_credential_encryption.py +0 -0
  195. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_data_organizer.py +0 -0
  196. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_dem_differencing_pipeline.py +0 -0
  197. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_digitalglobe.py +0 -0
  198. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_earth_explorer_additional.py +0 -0
  199. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_era5_atmospheric_correction.py +0 -0
  200. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_esa_scihub.py +0 -0
  201. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_extraction.py +0 -0
  202. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_flat_earth_phase.py +0 -0
  203. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_flood_mapping_pipeline.py +0 -0
  204. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_gcp_reprojection.py +0 -0
  205. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_geology_indices_and_rvi_fix.py +0 -0
  206. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_geoserver_generic.py +0 -0
  207. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_google_earth_engine.py +0 -0
  208. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_inpe_cbers.py +0 -0
  209. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_insar.py +0 -0
  210. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_insar_optical_fusion_pipeline.py +0 -0
  211. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_ionosphere.py +0 -0
  212. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_isro_bhuvan.py +0 -0
  213. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_jaxa_earth.py +0 -0
  214. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_lightweight_prefetch.py +0 -0
  215. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_map_preview_consolidation.py +0 -0
  216. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_models.py +0 -0
  217. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_monitor.py +0 -0
  218. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_nasa_earthdata_cloud_s3_fix.py +0 -0
  219. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_nasa_earthdata_public_search.py +0 -0
  220. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_network_thinning.py +0 -0
  221. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_noaa_big_data.py +0 -0
  222. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_offset_tracking.py +0 -0
  223. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_opentopography_pointcloud_usgs.py +0 -0
  224. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_optical_offset_tracking.py +0 -0
  225. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_optical_validation_wiring.py +0 -0
  226. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_optical_validator.py +0 -0
  227. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_optical_validator_stac.py +0 -0
  228. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_pgv_integration_contract.py +0 -0
  229. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_pipeline_process_export.py +0 -0
  230. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_planet_asset_type_fix.py +0 -0
  231. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_preflight_gate.py +0 -0
  232. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_preflight_quiet.py +0 -0
  233. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_preflight_spatial_baseline.py +0 -0
  234. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_provider_geometry_audit.py +0 -0
  235. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_provider_scene_disambiguation.py +0 -0
  236. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_providers.py +0 -0
  237. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_ps_selection.py +0 -0
  238. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_raster_collocation_integration.py +0 -0
  239. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_reference_pixel_and_despike.py +0 -0
  240. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_risk_mapper.py +0 -0
  241. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_risk_mapping.py +0 -0
  242. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_sar_pipelines.py +0 -0
  243. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_screen_stack_orchestration.py +0 -0
  244. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_search_download.py +0 -0
  245. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_sentinel_hub_catalog_fix.py +0 -0
  246. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_sign_convention.py +0 -0
  247. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_splitspectrum_diagnostic.py +0 -0
  248. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_stack_selection_consolidation.py +0 -0
  249. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_state.py +0 -0
  250. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_strain_and_fusion.py +0 -0
  251. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_streaming.py +0 -0
  252. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_terrain_corrected_change_pipeline.py +0 -0
  253. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_topo_r2_bug.py +0 -0
  254. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_uq_exporter.py +0 -0
  255. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_utils.py +0 -0
  256. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_vegetation_disturbance_pipeline.py +0 -0
  257. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_viz_plot.py +0 -0
  258. {pygeofetch-2.6.7.0 → pygeofetch-2.6.8.0}/tests/test_wls_inversion.py +0 -0
@@ -20,7 +20,7 @@ date, and marked accordingly rather than filled in with invented
20
20
  bullet points.
21
21
  ```
22
22
 
23
- ## [Unreleased] — v2.6.7.0.4
23
+ ## [Unreleased] — v2.6.8.0.4
24
24
 
25
25
  ```{note}
26
26
  Not yet published to PyPI. This entry documents work completed and
@@ -130,7 +130,7 @@ audit and remain open for a follow-up pass.
130
130
 
131
131
  ---
132
132
 
133
- ## [2.6.7.0.4] — 2026-08-25 (latest)
133
+ ## [2.6.8.0.4] — 2026-08-25 (latest)
134
134
 
135
135
  Confirmed via direct fetch of the current PyPI listing.
136
136
 
@@ -149,7 +149,7 @@ Confirmed via direct fetch of the current PyPI listing.
149
149
  - `SearchQuery.sort_ascending: bool` — earlier examples showed a `sort_order: "asc"/"desc"` string field that doesn't exist on the model (the CLI's `--sort-order` flag does convert to this internally, so CLI docs were unaffected)
150
150
  - `DownloadOptions.post_process` requires a list of `PostProcessAction` objects — passing plain strings raises a real `pydantic.ValidationError`
151
151
 
152
- ## [2.6.7.0] — 2026-08-24
152
+ ## [2.6.8.0] — 2026-08-24
153
153
  Real, verified release. Detailed notes not independently recovered from PyPI's release-history page (no distinct per-version notes exposed for this release specifically).
154
154
 
155
155
  ## [2.6.1] — 2026-08-22
@@ -261,9 +261,9 @@ recovered.
261
261
 
262
262
  ```{note}
263
263
  The previous version of this changelog had an entry labeled
264
- **"2.6.7.0.4 — 2026-07-12"** describing 22+ providers, Sentinel-1C/1D
264
+ **"2.6.8.0.4 — 2026-07-12"** describing 22+ providers, Sentinel-1C/1D
265
265
  support, SLC search with provider routing, precise orbit file
266
- management, 17 spectral indices, and various bug fixes. **2.6.7.0.4 was
266
+ management, 17 spectral indices, and various bug fixes. **2.6.8.0.4 was
267
267
  only ever released once, on 2026-08-25** — it was never released on
268
268
  2026-07-12. The date matches this real release, **1.0.8**, exactly.
269
269
  That content is reproduced below under the version it actually
@@ -406,8 +406,8 @@ The version of this file uploaded for this update had **5 entries
406
406
  covering 5 dates**. PyPI's real release history has **54 releases**.
407
407
  Specific issues found and fixed:
408
408
 
409
- 1. **Two different entries were both labeled `2.6.7.0.4`**, dated
410
- 2026-07-29 and 2026-07-12. **2.6.7.0.4 was only ever released once**,
409
+ 1. **Two different entries were both labeled `2.6.8.0.4`**, dated
410
+ 2026-07-29 and 2026-07-12. **2.6.8.0.4 was only ever released once**,
411
411
  on 2026-08-25 (confirmed directly from the live PyPI listing).
412
412
  2. **The 2026-07-12 entry's date exactly matches a real release**
413
413
  — version **1.0.8** — and its content (22+ providers, Sentinel-1C/D,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeofetch
3
- Version: 2.6.7.0
3
+ Version: 2.6.8.0
4
4
  Summary: Universal satellite data pipeline + geospatial processing platform
5
5
  Author-email: Samuel Appiah Kubi <appiahkubis14@gmail.com>
6
6
  License: MIT License
@@ -371,7 +371,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
371
371
  title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
372
372
  year = {2026},
373
373
  publisher = {Zenodo},
374
- version = {2.6.7.0.1},
374
+ version = {2.6.8.0.1},
375
375
  doi = {10.5281/zenodo.22087230},
376
376
  url = {https://doi.org/10.5281/zenodo.22087230}
377
377
  }
@@ -229,7 +229,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
229
229
  title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
230
230
  year = {2026},
231
231
  publisher = {Zenodo},
232
- version = {2.6.7.0.1},
232
+ version = {2.6.8.0.1},
233
233
  doi = {10.5281/zenodo.22087230},
234
234
  url = {https://doi.org/10.5281/zenodo.22087230}
235
235
  }
@@ -30,7 +30,7 @@ CLI::
30
30
  pygeofetch doctor
31
31
  """
32
32
 
33
- __version__ = "2.6.7.0.4"
33
+ __version__ = "2.6.8.0.4"
34
34
  __author__ = "PyGeoFetch Contributors"
35
35
  __license__ = "MIT"
36
36
 
@@ -0,0 +1,314 @@
1
+ """
2
+ PyGeoFetch InSAR — a state-of-the-art Interferometric SAR processing chain.
3
+
4
+ Install with: pip install "pygeofetch[insar]"
5
+ Adds time-series inversion: pip install "pygeofetch[insar-full]"
6
+
7
+ This module implements the full InSAR processing chain as practiced by
8
+ ASF HyP3, ISCE2/3, GAMMA, and SNAP, using pure-Python, pip-installable
9
+ components wherever a proven one exists:
10
+
11
+ 1. Coregistration — geometric (orbit + DEM) + Enhanced Spectral
12
+ Diversity (ESD) refinement to <0.001 px accuracy,
13
+ required for TOPS burst-overlap phase continuity
14
+ (Prats-Iraola et al. 2012; Yagüe-Martínez et al. 2016)
15
+ 2. Interferogram — complex conjugate multiplication + topographic
16
+ phase removal using a reference DEM
17
+ 3. Coherence — already implemented in pygeofetch.processing.sar
18
+ 4. Phase unwrapping — SNAPHU (Chen & Zebker 2001) via the official
19
+ snaphu-py bindings — the same algorithm used by
20
+ ASF, ISCE2/3, and GAMMA
21
+ 5. Atmospheric — ERA5-based tropospheric delay correction
22
+ correction (Jolivet et al. 2011, 2014 — the PyAPS method)
23
+ 6. Time series — Small BAseline Subset (SBAS) inversion
24
+ (Berardino et al. 2002), with optional weighted,
25
+ bridge-pair-aware inversion (invert_weighted) and
26
+ real, native phase-closure (Yunjun et al. 2019
27
+ style) and DEM-error correction — no external
28
+ MintPy installation required for either.
29
+ 7. PS-InSAR — Persistent Scatterer densification (Ferretti,
30
+ Prati & Rocca 2001): amplitude dispersion index
31
+ selection, post-inversion temporal coherence
32
+ refinement, and atmospheric phase screen (APS)
33
+ estimation. Tested against synthetic data with
34
+ known ground truth at every stage; not yet
35
+ validated against a real site's real PS
36
+ distribution.
37
+ 8. Offset tracking — amplitude cross-correlation for deformation
38
+ beyond phase's ambiguity limit, with sub-pixel
39
+ refinement, real SNR-based quality control, and
40
+ range/azimuth-to-ENU geometric decomposition. The
41
+ range-to-vertical sign convention has a dedicated
42
+ regression test (see geolocation.py); the ENU
43
+ solver's heading_angle_deg is NOT yet verified
44
+ against real product orbit metadata — see
45
+ offset_geometry.py's own docstring before using
46
+ this in production.
47
+
48
+ References:
49
+ Chen, C.W. & Zebker, H.A. (2001). Two-dimensional phase unwrapping with
50
+ use of statistical models for cost functions in a network programming
51
+ framework. J. Opt. Soc. Am. A, 18(2), 338-351.
52
+ Berardino, P., Fornaro, G., Lanari, R., & Sansosti, E. (2002). A new
53
+ algorithm for surface deformation monitoring based on small baseline
54
+ differential SAR interferograms. IEEE TGRS, 40(11), 2375-2383.
55
+ Ferretti, A., Prati, C., & Rocca, F. (2001). Permanent scatterers in
56
+ SAR interferometry. IEEE TGRS, 39(1), 8-20.
57
+ Yunjun, Z., Fattahi, H., Amelung, F. (2019). Small baseline InSAR time
58
+ series analysis: unwrapping error correction and noise reduction.
59
+ Computers & Geosciences, 133, 104331.
60
+ Prats-Iraola, P. et al. (2012). TOPS interferometry with TerraSAR-X.
61
+ IEEE TGRS, 50(8), 3179-3188.
62
+ Jolivet, R. et al. (2014). Improving InSAR geodesy using Global
63
+ Atmospheric Models. JGR Solid Earth, 119(3), 2019-2034.
64
+
65
+ Usage::
66
+
67
+ from pygeofetch.insar import InterferogramGenerator, PhaseUnwrapper
68
+
69
+ gen = InterferogramGenerator()
70
+ result = gen.process_pair(
71
+ reference="slc_20260601.tif",
72
+ secondary="slc_20260613.tif",
73
+ dem="dem.tif",
74
+ )
75
+
76
+ unwrapper = PhaseUnwrapper()
77
+ unwrapped = unwrapper.unwrap(result.interferogram, result.coherence)
78
+
79
+ Weighted, bridge-aware inversion with real native corrections::
80
+
81
+ from pygeofetch.insar import DataValidator, SBASTimeSeries
82
+
83
+ classification = DataValidator.classify_pairs(sbas_pairs, all_dates)
84
+ sbas = SBASTimeSeries(wavelength_m=0.05546576, reference_date=all_dates[0])
85
+ ts = sbas.invert_weighted(
86
+ sbas_pairs, classification=classification,
87
+ correct_unwrap=True, correct_dem=True, reference_pixel=(row, col),
88
+ )
89
+
90
+ PS-InSAR densification and offset tracking::
91
+
92
+ from pygeofetch.insar import select_persistent_scatterers, OffsetTracker
93
+
94
+ ps_result = select_persistent_scatterers(amplitude_stack)
95
+ tracker = OffsetTracker(search_window_size=64, step_size=16)
96
+ offsets = tracker.track(reference_amplitude, secondary_amplitude)
97
+ """
98
+
99
+ # Real, orbit-based coregistration components. All exported here are
100
+ # individually verified against known ground truth (see each module's
101
+ # docstring for specifics): annotation.py against ESA's own field-path
102
+ # spec; orbit parsing/interpolation against exact reference values;
103
+ # find_zero_doppler_time against known times from starting guesses up
104
+ # to 30 seconds off; geodetic_to_ecef via round-trip verification.
105
+ # solve_ground_point (in geolocation.py) is deliberately NOT exported
106
+ # here — it has a known, unresolved reliability gap and is not
107
+ # recommended as a primary coregistration path; use
108
+ # compute_offset_field_from_dem() instead, which avoids it entirely.
109
+ from pygeofetch.insar.annotation import (
110
+ BurstInfo,
111
+ SLCGeometry,
112
+ SwathTiming,
113
+ parse_burst_info,
114
+ parse_slc_geometry,
115
+ )
116
+ from pygeofetch.insar.atmosphere import AtmosphericCorrector
117
+ from pygeofetch.insar.coregister import (
118
+ CoregistrationQuality,
119
+ collocate_by_geocoding,
120
+ compute_offset_field_from_dem,
121
+ fit_offset_polynomial,
122
+ fit_offset_polynomial_robust,
123
+ refine_offsets_by_coherence,
124
+ resample_with_offset_field,
125
+ )
126
+ from pygeofetch.insar.deburst import compute_burst_row_ranges, deburst_array
127
+ from pygeofetch.insar.esd import (
128
+ SENTINEL1_IW_DELTA_F_OVL_HZ,
129
+ compute_overlap_row_ranges,
130
+ estimate_esd_shift_per_burst_overlap,
131
+ )
132
+ from pygeofetch.insar.extraction import SLCExtractor
133
+ from pygeofetch.insar.flatearth import compute_flat_earth_phase
134
+ from pygeofetch.insar.geolocation import (
135
+ find_zero_doppler_time,
136
+ geodetic_to_ecef,
137
+ interpolate_orbit_state,
138
+ los_to_vertical_displacement,
139
+ parse_orbit_file,
140
+ range_offset_to_vertical_displacement,
141
+ )
142
+ from pygeofetch.insar.gpu import gpu_available
143
+ from pygeofetch.insar.interferogram import InterferogramGenerator, InterferogramResult
144
+ from pygeofetch.insar.ionosphere import IonosphericCorrector, parse_ionex
145
+
146
+ # Range/azimuth pixel offsets to ground East/North/Up displacement. The
147
+ # math is verified (solve_enu_displacement agrees with
148
+ # range_offset_to_vertical_displacement to 9 decimal places on the same
149
+ # known scenario, in both operating modes). heading_angle_deg is NOT
150
+ # verified against any real product's orbit metadata — every test this
151
+ # session used a typical Sentinel-1 descending value (190 deg). Pull the
152
+ # real value from real product metadata before using this in production;
153
+ # see this module's own docstring for the full caveat.
154
+ from pygeofetch.insar.offset_geometry import (
155
+ pixel_to_physical_offsets,
156
+ solve_enu_displacement,
157
+ )
158
+
159
+ # Amplitude-based offset tracking. NCC verified to machine precision
160
+ # against the direct textbook definition; sub-pixel refinement verified
161
+ # to <0.06px on a blind synthetic shift; the full OffsetTracker windowing
162
+ # class verified on a spatially-VARYING synthetic field, not just a
163
+ # uniform shift.
164
+ from pygeofetch.insar.offset_tracking import (
165
+ OffsetTracker,
166
+ OffsetTrackingResult,
167
+ compute_snr,
168
+ normalized_cross_correlation,
169
+ subpixel_peak_offset,
170
+ )
171
+ from pygeofetch.insar.preflight import PreflightGate, PreflightIssue, PreflightReport
172
+ from pygeofetch.insar.provenance import write_provenance_manifest
173
+
174
+ # Persistent Scatterer InSAR (Ferretti, Prati & Rocca 2001). Real, tested
175
+ # against synthetic data with known ground truth at every stage (ADI
176
+ # correctly separates stable-vs-noisy and bright-vs-dim pixels; temporal
177
+ # coherence correctly demotes an amplitude-only false positive; APS
178
+ # recovery under 1% relative error from 0.5% real sparse coverage) — not
179
+ # yet validated against a real site's actual PS distribution.
180
+ from pygeofetch.insar.ps_selection import (
181
+ PSSelectionResult,
182
+ compute_amplitude_dispersion_index,
183
+ estimate_atmospheric_phase_screen,
184
+ refine_ps_mask_with_temporal_coherence,
185
+ select_persistent_scatterers,
186
+ temporal_coherence,
187
+ )
188
+ from pygeofetch.insar.stack_selection import (
189
+ bbox_to_geojson_path,
190
+ preview_search_results,
191
+ search_and_select_consistent_stack,
192
+ select_burst_synchronized_dates,
193
+ select_consistent_geometry,
194
+ )
195
+ from pygeofetch.insar.synthetic import (
196
+ SyntheticInterferogramResult,
197
+ displacement_to_los,
198
+ generate_synthetic_interferogram,
199
+ okada_surface_deformation,
200
+ spatially_correlated_field,
201
+ )
202
+ from pygeofetch.insar.timeseries import (
203
+ BurstSyncResult,
204
+ InterferogramPair,
205
+ PairCandidate,
206
+ SBASTimeSeries,
207
+ TimeSeriesResult,
208
+ build_sbas_network,
209
+ despike_velocity,
210
+ generate_candidate_pairs,
211
+ screen_stack_burst_synchronization,
212
+ select_pairs_for_processing,
213
+ select_reliable_reference_pixel,
214
+ )
215
+ from pygeofetch.insar.unwrap import (
216
+ PhaseUnwrapper,
217
+ bridge_unwrap_regions,
218
+ goldstein_filter,
219
+ multilook,
220
+ )
221
+ from pygeofetch.insar.validate import (
222
+ DataValidator,
223
+ PairClassification,
224
+ ValidationResult,
225
+ )
226
+ from pygeofetch.insar.visualize import (
227
+ visualize_interferogram,
228
+ visualize_timeseries,
229
+ visualize_unwrapped,
230
+ )
231
+ from pygeofetch.insar.workflow import InSARProject
232
+
233
+ __all__ = [
234
+ "InterferogramGenerator",
235
+ "InterferogramResult",
236
+ "PhaseUnwrapper",
237
+ "multilook",
238
+ "goldstein_filter",
239
+ "bridge_unwrap_regions",
240
+ "okada_surface_deformation",
241
+ "displacement_to_los",
242
+ "spatially_correlated_field",
243
+ "generate_synthetic_interferogram",
244
+ "SyntheticInterferogramResult",
245
+ "SBASTimeSeries",
246
+ "PairCandidate",
247
+ "build_sbas_network",
248
+ "BurstSyncResult",
249
+ "generate_candidate_pairs",
250
+ "screen_stack_burst_synchronization",
251
+ "select_pairs_for_processing",
252
+ "select_reliable_reference_pixel",
253
+ "despike_velocity",
254
+ "InterferogramPair",
255
+ "TimeSeriesResult",
256
+ "AtmosphericCorrector",
257
+ "SLCExtractor",
258
+ "DataValidator",
259
+ "ValidationResult",
260
+ "PairClassification",
261
+ "gpu_available",
262
+ "visualize_interferogram",
263
+ "visualize_unwrapped",
264
+ "visualize_timeseries",
265
+ "SLCGeometry",
266
+ "parse_slc_geometry",
267
+ "BurstInfo",
268
+ "SwathTiming",
269
+ "parse_burst_info",
270
+ "compute_burst_row_ranges",
271
+ "deburst_array",
272
+ "compute_overlap_row_ranges",
273
+ "estimate_esd_shift_per_burst_overlap",
274
+ "SENTINEL1_IW_DELTA_F_OVL_HZ",
275
+ "compute_flat_earth_phase",
276
+ "IonosphericCorrector",
277
+ "parse_ionex",
278
+ "InSARProject",
279
+ "geodetic_to_ecef",
280
+ "find_zero_doppler_time",
281
+ "parse_orbit_file",
282
+ "interpolate_orbit_state",
283
+ "los_to_vertical_displacement",
284
+ "range_offset_to_vertical_displacement",
285
+ "compute_offset_field_from_dem",
286
+ "fit_offset_polynomial",
287
+ "fit_offset_polynomial_robust",
288
+ "refine_offsets_by_coherence",
289
+ "resample_with_offset_field",
290
+ "collocate_by_geocoding",
291
+ "CoregistrationQuality",
292
+ "select_consistent_geometry",
293
+ "search_and_select_consistent_stack",
294
+ "select_burst_synchronized_dates",
295
+ "bbox_to_geojson_path",
296
+ "preview_search_results",
297
+ "PreflightGate",
298
+ "PreflightReport",
299
+ "PreflightIssue",
300
+ "write_provenance_manifest",
301
+ "PSSelectionResult",
302
+ "compute_amplitude_dispersion_index",
303
+ "select_persistent_scatterers",
304
+ "temporal_coherence",
305
+ "refine_ps_mask_with_temporal_coherence",
306
+ "estimate_atmospheric_phase_screen",
307
+ "OffsetTrackingResult",
308
+ "OffsetTracker",
309
+ "normalized_cross_correlation",
310
+ "subpixel_peak_offset",
311
+ "compute_snr",
312
+ "pixel_to_physical_offsets",
313
+ "solve_enu_displacement",
314
+ ]
@@ -1,4 +1,4 @@
1
- {% set version = "2.6.7.0.4" %}
1
+ {% set version = "2.6.8.0.4" %}
2
2
 
3
3
  package:
4
4
  name: pygeofetch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeofetch
3
- Version: 2.6.7.0
3
+ Version: 2.6.8.0
4
4
  Summary: Universal satellite data pipeline + geospatial processing platform
5
5
  Author-email: Samuel Appiah Kubi <appiahkubis14@gmail.com>
6
6
  License: MIT License
@@ -371,7 +371,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
371
371
  title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
372
372
  year = {2026},
373
373
  publisher = {Zenodo},
374
- version = {2.6.7.0.1},
374
+ version = {2.6.8.0.1},
375
375
  doi = {10.5281/zenodo.22087230},
376
376
  url = {https://doi.org/10.5281/zenodo.22087230}
377
377
  }
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pygeofetch"
7
- version = "2.6.7.0"
7
+ version = "2.6.8.0"
8
8
  description = "Universal satellite data pipeline + geospatial processing platform"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -1,21 +0,0 @@
1
- """
2
- PyGeoFetch Viz — optional visualization layer.
3
-
4
- Install with: pip install "pygeofetch[viz]"
5
-
6
- Usage::
7
-
8
- from pygeofetch.viz import MapViewer, Plotter
9
-
10
- mv = MapViewer()
11
- mv.add_raster("ndvi.tif", colormap="RdYlGn")
12
- mv.show()
13
-
14
- pl = Plotter()
15
- pl.plot_raster("ndvi.tif", title="NDVI", output="ndvi.png")
16
- """
17
-
18
- from pygeofetch.viz.map import MapViewer
19
- from pygeofetch.viz.plot import Plotter
20
-
21
- __all__ = ["MapViewer", "Plotter"]
File without changes
File without changes