pygeofetch 2.2.0__tar.gz → 2.3.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.2.0 → pygeofetch-2.3.0}/CHANGELOG.md +6 -6
- {pygeofetch-2.2.0/pygeofetch.egg-info → pygeofetch-2.3.0}/PKG-INFO +1 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/__init__.py +2 -2
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/main.py +2 -2
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/unwrap.py +7 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0/pygeofetch.egg-info}/PKG-INFO +1 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pyproject.toml +1 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_pgv_integration_contract.py +1 -1
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/LICENSE +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/MANIFEST.in +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/README.md +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/auth_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/cli/search_commands.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/downloader.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/engine.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/core/searcher.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/analysis.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/annotation.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/atmosphere.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/coregister.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/deburst.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/esd.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/extraction.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/flatearth.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/geolocation.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/gpu.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/interferogram.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/ionosphere.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/preflight.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/provenance.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/stack_selection.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/synthetic.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/timeseries.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/validate.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/visualize.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/insar/workflow.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/base.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/indices.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/preprocessor.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processing/sar.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/indices.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/stacker.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/processor/timeseries.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/airbus_oneatlas.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/alaska_satellite_facility.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/aws_earth.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/base.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/copernicus.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/copernicus_nodes.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/digitalglobe.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/earth_explorer_additional.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/element84.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/eodag_provider.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/esa_scihub.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/geoserver_generic.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/google_earth_engine.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/inpe_cbers.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/isro_bhuvan.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/jaxa_earth.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/maxar_gbdx.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/nasa_earthdata.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/nasa_earthdata_cloud.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/noaa_big_data.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/opentopography.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/planet.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/planetary_computer.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/sentinel_hub.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/terrabotics.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/providers/usgs.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/_native.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/extraction.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/sar/processor.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/gcp_recovery.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/viz/__init__.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/viz/map.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch/viz/plot.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/SOURCES.txt +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/requires.txt +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/setup.cfg +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_atmospheric_circular_regression (1).py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_atmospheric_circular_regression.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_build_sbas_network.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_burst_metadata.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_burst_processing_integration.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_burst_sync_large_gap.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_burst_sync_prescreening.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_burst_synchronization.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_copernicus_nodes.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_coregister_integration.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_coregister_upgrades.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_era5_atmospheric_correction.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_extraction.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_flat_earth_phase.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_gcp_reprojection.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_insar.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_ionosphere.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_map_preview_consolidation.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_models.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_preflight_gate (1).py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_preflight_gate.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_provider_geometry_audit (1).py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_provider_geometry_audit.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_provider_scene_disambiguation.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_providers.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_raster_collocation_integration.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_reference_pixel_and_despike.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_risk_mapping.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_screen_stack_orchestration.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_search_download.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_stack_selection_consolidation.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_topo_r2_bug.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_utils.py +0 -0
- {pygeofetch-2.2.0 → pygeofetch-2.3.0}/tests/test_viz_plot.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
All notable changes to PyGeoFetch are documented here.
|
|
4
|
-
Format follows [Keep a Changelog](https://keepachangelog.com/en/2.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/2.3.0/).
|
|
5
5
|
|
|
6
|
-
## [2.
|
|
6
|
+
## [2.3.0] — 2026-07-29
|
|
7
7
|
|
|
8
8
|
### Added
|
|
9
9
|
- Major SNAPHU unwrapping improvements for urban InSAR applications
|
|
@@ -51,7 +51,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/2.2.0/).
|
|
|
51
51
|
|
|
52
52
|
### Migration Guide
|
|
53
53
|
```python
|
|
54
|
-
# Before (v2.
|
|
54
|
+
# Before (v2.3.0)
|
|
55
55
|
unwrapper = PhaseUnwrapper(cost_mode="defo", init_method="mcf")
|
|
56
56
|
unwrapped = unwrapper.unwrap(phase, coherence, nlooks=2.0)
|
|
57
57
|
|
|
@@ -72,7 +72,7 @@ unwrapped = unwrapper.unwrap(
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
|
-
## [2.
|
|
75
|
+
## [2.3.0] — 2026-07-12
|
|
76
76
|
|
|
77
77
|
### Added
|
|
78
78
|
- Federated search across 22+ satellite data providers
|
|
@@ -188,8 +188,8 @@ unwrapped = unwrapper.unwrap(
|
|
|
188
188
|
|
|
189
189
|
| Version | Date | Key Changes |
|
|
190
190
|
|---------|------------|-------------|
|
|
191
|
-
| **2.
|
|
192
|
-
| **2.
|
|
191
|
+
| **2.3.0** | 2026-07-29 | SNAPHU unwrapping fixes, 87.1% reliable pixels |
|
|
192
|
+
| **2.3.0** | 2026-07-12 | 22 providers, 17 indices, Sentinel-1C/D |
|
|
193
193
|
| **1.9.2** | 2026-06-15 | Batch processing, parallel downloads |
|
|
194
194
|
| **1.9.1** | 2026-05-20 | 3D terrain, SNAPHU integration, time series |
|
|
195
195
|
| **1.9.0** | 2026-04-25 | Initial public release |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
PyGeoFetch v2.
|
|
2
|
+
PyGeoFetch v2.3.0 — Universal Satellite Data Pipeline.
|
|
3
3
|
|
|
4
4
|
Unified access to 22+ satellite data providers with a consistent
|
|
5
5
|
Python API and CLI. Supports authentication management, federated search,
|
|
@@ -30,7 +30,7 @@ CLI::
|
|
|
30
30
|
pygeofetch doctor
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
|
-
__version__ = "2.
|
|
33
|
+
__version__ = "2.3.0"
|
|
34
34
|
__author__ = "PyGeoFetch Contributors"
|
|
35
35
|
__license__ = "MIT"
|
|
36
36
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
PyGeoFetch CLI v2.
|
|
2
|
+
PyGeoFetch CLI v2.3.0 main entry point.
|
|
3
3
|
|
|
4
4
|
Full command reference:
|
|
5
5
|
pygeofetch auth — credential management
|
|
@@ -71,7 +71,7 @@ def cli(
|
|
|
71
71
|
) -> None:
|
|
72
72
|
"""
|
|
73
73
|
\b
|
|
74
|
-
PyGeoFetch v2.
|
|
74
|
+
PyGeoFetch v2.3.0 — Universal Satellite Data Pipeline
|
|
75
75
|
===========================================================
|
|
76
76
|
Unified access to 22+ satellite data providers.
|
|
77
77
|
|
|
@@ -370,6 +370,11 @@ class PhaseUnwrapper:
|
|
|
370
370
|
igram.tofile(str(igram_path))
|
|
371
371
|
corr.tofile(str(corr_path))
|
|
372
372
|
nlooks_int = max(1, int(nlooks))
|
|
373
|
+
|
|
374
|
+
# FIX: Removed 'CONNCOMPOUTFORMAT UINT_DATA'. It is not a valid
|
|
375
|
+
# SNAPHU parameter. SNAPHU always writes connected components as
|
|
376
|
+
# 32-bit unsigned integers by default. The strict Windows port
|
|
377
|
+
# we use rejects the config file if it sees unknown keys.
|
|
373
378
|
conf_text = f"""INFILE igram.cpx
|
|
374
379
|
INFILEFORMAT COMPLEX_DATA
|
|
375
380
|
CORRFILE corr.cor
|
|
@@ -377,7 +382,6 @@ CORRFILEFORMAT FLOAT_DATA
|
|
|
377
382
|
OUTFILE unw.unw
|
|
378
383
|
OUTFILEFORMAT FLOAT_DATA
|
|
379
384
|
CONNCOMPFILE conncomp.cc
|
|
380
|
-
CONNCOMPOUTFORMAT UINT_DATA
|
|
381
385
|
LINELENGTH {width}
|
|
382
386
|
STATCOSTMODE {self._cost_mode.upper()}
|
|
383
387
|
INITMETHOD {self._init_method.upper()}
|
|
@@ -392,6 +396,7 @@ NLOOKSAZ {nlooks_int}
|
|
|
392
396
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
393
397
|
result, unw_path, cc_path = _run_snaphu(tmp_dir)
|
|
394
398
|
|
|
399
|
+
# AUTO-REPAIR: Catch Windows STATUS_DLL_NOT_FOUND (0xC0000135)
|
|
395
400
|
if result.returncode in (3221225781, -1073741515):
|
|
396
401
|
logger.warning("SNAPHU crashed with STATUS_DLL_NOT_FOUND (0xC0000135). Auto-bundling runtime DLLs...")
|
|
397
402
|
self._ensure_runtime_dlls(bin_dir)
|
|
@@ -411,6 +416,7 @@ NLOOKSAZ {nlooks_int}
|
|
|
411
416
|
if count < min_region_size or (count / total_pixels) < min_conncomp_frac:
|
|
412
417
|
conncomp[conncomp == lbl] = 0
|
|
413
418
|
return unw, conncomp.astype(np.int32)
|
|
419
|
+
|
|
414
420
|
|
|
415
421
|
def _ensure_runtime_dlls(self, bin_dir: Path):
|
|
416
422
|
import shutil, zipfile, io, urllib.request
|
|
@@ -1153,4 +1153,4 @@ class TestFinalEngineSmoke:
|
|
|
1153
1153
|
|
|
1154
1154
|
# ── Contract footer ───────────────────────────────────────────────────────────
|
|
1155
1155
|
# PyGeoVision integration contract: ALL TESTS MUST PASS
|
|
1156
|
-
# Contract version: PyGeoVision v2.
|
|
1156
|
+
# Contract version: PyGeoVision v2.3.0 / PyGeoFetch patch July 2026
|
|
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
|
|
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
|
|
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
|