Fix now (correctness/safety):
- Thread safety: Global caches _loaded_grids, _loaded_geoids, _itrf_params need locking
- All-NaN raster crash: int(np.nanmin(NaN_array)) is undefined behavior
- uint8 cubic overflow: Cubic ringing can produce values outside [0, 255], silent wrap on cast
Add tests (coverage gaps):
4. Missing end-to-end merge tests for last, max, min strategies
5. 1x1 and 2x2 source rasters
6. All-NaN raster reprojection
Improve (robustness):
7. Geoid returning silent 0.0 at poles instead of NaN
8. Cubic NaN handling too aggressive (should renormalize like bilinear)
9. Silent exception swallowing in Numba fallback path
Fix now (correctness/safety):
Add tests (coverage gaps):
4. Missing end-to-end merge tests for last, max, min strategies
5. 1x1 and 2x2 source rasters
6. All-NaN raster reprojection
Improve (robustness):
7. Geoid returning silent 0.0 at poles instead of NaN
8. Cubic NaN handling too aggressive (should renormalize like bilinear)
9. Silent exception swallowing in Numba fallback path