PyGeoFetch 2.6.2.7__py3-none-any.whl → 2.6.2.8__py3-none-any.whl

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/__init__.py CHANGED
@@ -30,7 +30,7 @@ CLI::
30
30
  pygeofetch doctor
31
31
  """
32
32
 
33
- __version__ = "2.6.2.7.4"
33
+ __version__ = "2.6.2.8.4"
34
34
  __author__ = "PyGeoFetch Contributors"
35
35
  __license__ = "MIT"
36
36
 
@@ -293,7 +293,23 @@ def run_multi_modal_deformation(
293
293
  # received a scalar `pairs` list, not a per-pixel coherence raster
294
294
  # -- build one the same real, honest way the multi-sensor
295
295
  # notebooks do (mean across the real per-pair coherence arrays).
296
- mean_coherence_raster = np.mean([np.asarray(p.coherence) for p in pairs], axis=0)
296
+ #
297
+ # Real, necessary edge case, confirmed directly: when `pairs` is
298
+ # genuinely empty (a total InSAR failure with zero usable pairs at
299
+ # all, not just low coherence), `np.mean([], axis=0)` silently
300
+ # degrades to a scalar `nan` with shape `()` rather than raising --
301
+ # which then fails the real shape check inside fuse_insar_optical
302
+ # with a confusing "all input arrays must share the same real
303
+ # shape" error that gives no hint the real cause was an empty
304
+ # pairs list. Build a properly-shaped all-NaN raster explicitly in
305
+ # this case instead: a real, honest signal of "zero real coherence
306
+ # information available," matching `velocity`'s own real shape so
307
+ # fuse_insar_optical's fusion logic runs correctly and correctly
308
+ # concludes optical-only, rather than crashing before it can.
309
+ if pairs:
310
+ mean_coherence_raster = np.mean([np.asarray(p.coherence) for p in pairs], axis=0)
311
+ else:
312
+ mean_coherence_raster = np.full(np.asarray(velocity).shape, np.nan)
297
313
 
298
314
  fused = fuse_insar_optical(
299
315
  insar_velocity=velocity,
@@ -329,4 +345,4 @@ def run_multi_modal_deformation(
329
345
  "n_optical_windows_reliable": int(offset_result.reliable.sum()),
330
346
  "n_optical_windows_total": int(offset_result.reliable.size),
331
347
  },
332
- )
348
+ )
pygeofetch/meta.yaml CHANGED
@@ -1,4 +1,4 @@
1
- {% set version = "2.6.2.7.4" %}
1
+ {% set version = "2.6.2.8.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.2.7
3
+ Version: 2.6.2.8
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
@@ -167,13 +167,13 @@ Where pygeofetch goes further than most data-access libraries is in its **InSAR
167
167
 
168
168
  | | |
169
169
  |---|---|
170
- | 🔐 **Authenticated access** | 22 verified providers; credentials stored via a Fernet-encrypted local file by default, or the system keyring (Keychain / Credential Manager / Secret Service) as an opt-in alternative |
171
- | 🔍 **Federated search** | One query across all providers → STAC 1.0 GeoJSON / GeoParquet / CSV, with real footprint geometry where the provider supplies it |
172
- | 📥 **Resilient downloads** | Parallel, resumable, checksum-verified, band-selective, atomic writes |
173
- | ⚙️ **Preprocessing** | Atmospheric correction, cloud masking, reprojection, resampling, pan-sharpening, mosaicking |
174
- | 📊 **17 spectral indices** | NDVI, EVI, SAVI, NDWI, MNDWI, NDBI, LST, Albedo, dNBR, GLCM texture, and more |
175
- | 🌐 **Verified InSAR chain** | Coregistration → phase removal → atmospheric/ionospheric correction → unwrapping → SBAS inversion |
176
- | 📋 **YAML pipelines** | Chainable, schedulable, repeatable workflows with full run history |
170
+ | **Authenticated access** | 22 verified providers; credentials stored via a Fernet-encrypted local file by default, or the system keyring (Keychain / Credential Manager / Secret Service) as an opt-in alternative |
171
+ | **Federated search** | One query across all providers → STAC 1.0 GeoJSON / GeoParquet / CSV, with real footprint geometry where the provider supplies it |
172
+ | **Resilient downloads** | Parallel, resumable, checksum-verified, band-selective, atomic writes |
173
+ | **Preprocessing** | Atmospheric correction, cloud masking, reprojection, resampling, pan-sharpening, mosaicking |
174
+ | **17 spectral indices** | NDVI, EVI, SAVI, NDWI, MNDWI, NDBI, LST, Albedo, dNBR, GLCM texture, and more |
175
+ | **Verified InSAR chain** | Coregistration → phase removal → atmospheric/ionospheric correction → unwrapping → SBAS inversion |
176
+ | **YAML pipelines** | Chainable, schedulable, repeatable workflows with full run history |
177
177
 
178
178
  ---
179
179
 
@@ -369,7 +369,7 @@ If you use PyGeoFetch in your research or operational work, please cite it using
369
369
  title = {PyGeoFetch: A Unified Python Framework for Multi-Provider Satellite Data Acquisition, Pre-download Quality Control, and Geospatial Processing},
370
370
  year = {2026},
371
371
  publisher = {Zenodo},
372
- version = {2.6.2.7.1},
372
+ version = {2.6.2.8.1},
373
373
  doi = {10.5281/zenodo.22087230},
374
374
  url = {https://doi.org/10.5281/zenodo.22087230}
375
375
  }
@@ -1,5 +1,5 @@
1
- pygeofetch/__init__.py,sha256=ynNVI54vEcWsdnY_aq4rV7o_7UX8b9GNOyqw6gcqc4I,1994
2
- pygeofetch/meta.yaml,sha256=JY5J_BlfrCgQeL1KFTd2NsgsW9_Vvw0TEJexkYh4Bks,1284
1
+ pygeofetch/__init__.py,sha256=wLrUCmB8GbXTOJtEuN6yOfZYBVebkhtKokEiaqrga4A,1994
2
+ pygeofetch/meta.yaml,sha256=T6ftbgztSS94-HznuAU4OZE83tYii7JCARzDKmxjYX0,1284
3
3
  pygeofetch/cli/__init__.py,sha256=QZMIIHEgmjGFieucqq9fZ5uephxP9-jdu1s8Q4qqw8o,30
4
4
  pygeofetch/cli/auth_commands.py,sha256=OUYbInPaERvAfNZ_NmAF3azHoJm14cGn_ZTQtxjjcs4,7871
5
5
  pygeofetch/cli/config_commands.py,sha256=1Pps0HLCLPODMlM6SFV8ru3IKCDpexSTz8uKIXvIIF8,3918
@@ -36,7 +36,7 @@ pygeofetch/insar/advanced_safeguards.py,sha256=CDMmxyC4PsldTaVXrxYm9vaJ2HS0izICB
36
36
  pygeofetch/insar/analysis.py,sha256=GLNNE2OY17Y92p4FJSu7DwitRRp6AFLj1hccSmw3Mqg,35770
37
37
  pygeofetch/insar/annotation.py,sha256=NRtH9HTlMQX1WkYLiJS9H7NrBxmUDBYIsZUOWVXZ37M,20775
38
38
  pygeofetch/insar/atmosphere.py,sha256=frOTzYxIz33L4vPxbCQ4fVSkY2c_BZqHwIUoi4grK2Y,23032
39
- pygeofetch/insar/auto_fallback.py,sha256=WRg-3pBIOFCFUK8BM_n2bZZAyvN1IwRLaEIU-1aIGEw,13652
39
+ pygeofetch/insar/auto_fallback.py,sha256=00tn6WT_w38vzv--bQvTWPKw2HRdo1UrWXhxpM7OGTE,14589
40
40
  pygeofetch/insar/coregister.py,sha256=9QILqYi6quuRsnqZr4K3Feyrkp-SN_ZOO3ypAgP4lJI,57924
41
41
  pygeofetch/insar/deburst.py,sha256=liWkKoP-UYYRRXxVYjsm2dpNCnIamL0RfH9JAe-660w,6456
42
42
  pygeofetch/insar/esd.py,sha256=FR0k7TwIUGInDA1u9cW4zrrX0HGTY5MuclfeDcShL9k,26177
@@ -137,9 +137,9 @@ pygeofetch/validation/optical_validator.py,sha256=S0D361GibQwA2vvGb9_H8_6mxvaFKD
137
137
  pygeofetch/viz/__init__.py,sha256=xf2C9IL4n3bv3oxk8RYkogq7nkuNyt18V-urAoXWRQY,449
138
138
  pygeofetch/viz/map.py,sha256=f8whny5mnz7gDsStNdgtVSpqTNHSDhSZoRT2Qs-Lvos,16403
139
139
  pygeofetch/viz/plot.py,sha256=JybD4qElJBOTvWCu7VllL5DqkKFYf5ttJdFfsgApfLE,56601
140
- pygeofetch-2.6.2.7.dist-info/licenses/LICENSE,sha256=zavMyhODD6NvZTmmKFEtATrngwY4CU_NEtY7lhjxGnI,1075
141
- pygeofetch-2.6.2.7.dist-info/METADATA,sha256=5lI5ucqkUNx5MaIdn_hoQLYW4s1vshn3W1w3LSPr9kc,25010
142
- pygeofetch-2.6.2.7.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
143
- pygeofetch-2.6.2.7.dist-info/entry_points.txt,sha256=dHiUXLF5xNJ8vgtXZoUQNleEMQUeDPZiKQOE1tW8SDY,55
144
- pygeofetch-2.6.2.7.dist-info/top_level.txt,sha256=rOmnZargIfNk99fwVOqt6OJyJvpSTBBAYO5HU37yhHk,11
145
- pygeofetch-2.6.2.7.dist-info/RECORD,,
140
+ pygeofetch-2.6.2.8.dist-info/licenses/LICENSE,sha256=zavMyhODD6NvZTmmKFEtATrngwY4CU_NEtY7lhjxGnI,1075
141
+ pygeofetch-2.6.2.8.dist-info/METADATA,sha256=nj-G1srXTRAHtohO8c5Qsi1rF0EU_RPE53NiIqghRyo,24973
142
+ pygeofetch-2.6.2.8.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
143
+ pygeofetch-2.6.2.8.dist-info/entry_points.txt,sha256=dHiUXLF5xNJ8vgtXZoUQNleEMQUeDPZiKQOE1tW8SDY,55
144
+ pygeofetch-2.6.2.8.dist-info/top_level.txt,sha256=rOmnZargIfNk99fwVOqt6OJyJvpSTBBAYO5HU37yhHk,11
145
+ pygeofetch-2.6.2.8.dist-info/RECORD,,