PyGeoFetch 2.6.6.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.
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/CHANGELOG.md +7 -7
- {pygeofetch-2.6.6.0/pygeofetch.egg-info → pygeofetch-2.6.8.0}/PKG-INFO +2 -2
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/README.md +1 -1
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/__init__.py +1 -1
- pygeofetch-2.6.8.0/pygeofetch/insar/__init__.py +314 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0/pygeofetch.egg-info}/PKG-INFO +2 -2
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/SOURCES.txt +1 -1
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pyproject.toml +1 -1
- pygeofetch-2.6.6.0/pygeofetch/viz/__init__.py +0 -21
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/LICENSE +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/MANIFEST.in +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/auth_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/classify_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/main.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/monitor_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/multisensor_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/optical_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/scale_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/cli/search_commands.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/chunked_processor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/geoparquet_io.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_formats/zarr_io.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/data_organizer.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/downloader.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/engine.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/monitor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/progress.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/searcher.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/core/state.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/geotech/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/geotech/risk_mapper.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/advanced_safeguards.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/analysis.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/annotation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/atmosphere.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/auto_fallback.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/coregister.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/deburst.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/esd.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/extraction.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/feasibility.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/flatearth.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/geolocation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/gpu.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/interferogram.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/ionosphere.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/network_thinning.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/offset_geometry.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/offset_tracking.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/preflight.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/provenance.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/ps_selection.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/stack_selection.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/synthetic.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/timeseries.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/unwrap.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/validate.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/visualize.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/insar/workflow.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/stream_options.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/_init.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/dem_differencing.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/flood_mapping.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/insar_optical_fusion.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/terrain_corrected_change.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/multisensor/vegetation_disturbance.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/optical/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/optical/offset_tracking.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/base.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/classification.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/indices.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/preprocessor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/sar.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processing/uq_exporter.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/indices.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/stacker.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/processor/timeseries.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/airbus_oneatlas.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/alaska_satellite_facility.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/aws_earth.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/base.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/copernicus.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/copernicus_nodes.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/digitalglobe.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/earth_explorer_additional.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/element84.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/eodag_provider.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/esa_scihub.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/geoserver_generic.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/google_earth_engine.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/inpe_cbers.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/isro_bhuvan.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/jaxa_earth.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/maxar_gbdx.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/nasa_earthdata.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/nasa_earthdata_cloud.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/noaa_big_data.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/opentopography.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/planet.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/planetary_computer.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/sentinel_hub.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/terrabotics.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/providers/usgs.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_native.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/extraction.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/math.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/pipelines.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/sar/processor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/burst_streaming.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/cog_streamer.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/lightweight_prefetch.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/stac_compute/window_calculator.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/scene.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/streaming/windowed.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/gcp_recovery.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/geocoding.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/sar_math.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/validation/__init__.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/validation/optical_validator.py +0 -0
- {pygeofetch-2.6.6.0/pygeofetch/insar → pygeofetch-2.6.8.0/pygeofetch/viz}/__init__.py +0 -0
- {pygeofetch-2.6.6.0/pygeofetch/insar → pygeofetch-2.6.8.0/pygeofetch/viz}/insar.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/viz/map.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch/viz/plot.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/requires.txt +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/setup.cfg +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_advanced_safeguards.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_airbus_oneatlas.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_alaska_satellite_facility.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_atmospheric_circular_regression.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_auto_fallback.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_auto_fallback_fixed.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_build_sbas_network-new.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_build_sbas_network.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_burst_metadata.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_burst_processing_integration.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_burst_sync_large_gap.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_burst_sync_prescreening.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_burst_synchronization.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_circuit_breaker_wiring.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_cli_optical_validation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_copernicus_nodes.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_coregister_integration.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_coregister_upgrades (1).py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_coregister_upgrades.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_credential_encryption.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_data_organizer.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_dem_differencing_pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_digitalglobe.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_earth_explorer_additional.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_era5_atmospheric_correction.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_esa_scihub.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_extraction.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_flat_earth_phase.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_flood_mapping_pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_gcp_reprojection.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_geology_indices_and_rvi_fix.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_geoserver_generic.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_google_earth_engine.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_inpe_cbers.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_insar.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_insar_optical_fusion_pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_ionosphere.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_isro_bhuvan.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_jaxa_earth.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_lightweight_prefetch.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_map_preview_consolidation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_models.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_monitor.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_nasa_earthdata_cloud_s3_fix.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_nasa_earthdata_public_search.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_network_thinning.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_noaa_big_data.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_offset_tracking.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_opentopography_pointcloud_usgs.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_optical_offset_tracking.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_optical_validation_wiring.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_optical_validator.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_optical_validator_stac.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_pgv_integration_contract.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_pipeline_process_export.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_planet_asset_type_fix.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_preflight_gate.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_preflight_quiet.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_preflight_spatial_baseline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_provider_geometry_audit.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_provider_scene_disambiguation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_providers.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_ps_selection.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_raster_collocation_integration.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_reference_pixel_and_despike.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_risk_mapper.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_risk_mapping.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_sar_pipelines.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_screen_stack_orchestration.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_search_download.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_sentinel_hub_catalog_fix.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_sign_convention.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_stack_selection_consolidation.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_state.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_strain_and_fusion.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_streaming.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_terrain_corrected_change_pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_topo_r2_bug.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_uq_exporter.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_utils.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_vegetation_disturbance_pipeline.py +0 -0
- {pygeofetch-2.6.6.0 → pygeofetch-2.6.8.0}/tests/test_viz_plot.py +0 -0
- {pygeofetch-2.6.6.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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
410
|
-
2026-07-29 and 2026-07-12. **2.6.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
}
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 2.6.
|
|
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.
|
|
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
|
}
|
|
@@ -65,7 +65,6 @@ pygeofetch/insar/feasibility.py
|
|
|
65
65
|
pygeofetch/insar/flatearth.py
|
|
66
66
|
pygeofetch/insar/geolocation.py
|
|
67
67
|
pygeofetch/insar/gpu.py
|
|
68
|
-
pygeofetch/insar/insar.py
|
|
69
68
|
pygeofetch/insar/interferogram.py
|
|
70
69
|
pygeofetch/insar/ionosphere.py
|
|
71
70
|
pygeofetch/insar/network_thinning.py
|
|
@@ -168,6 +167,7 @@ pygeofetch/utils/validators.py
|
|
|
168
167
|
pygeofetch/validation/__init__.py
|
|
169
168
|
pygeofetch/validation/optical_validator.py
|
|
170
169
|
pygeofetch/viz/__init__.py
|
|
170
|
+
pygeofetch/viz/insar.py
|
|
171
171
|
pygeofetch/viz/map.py
|
|
172
172
|
pygeofetch/viz/plot.py
|
|
173
173
|
tests/test_advanced_safeguards.py
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|