I'm hitting a more opaque error when running a pre-built LUT. I think this is an edge case where the value of surface_elevation in the image is less than the lowest point on the lut grid. The interpolation that is occuring within Isofit is triggering an error. This occurs in cases when the "interp" key is used within the isofit config:
"surface_elevation_km": {
"interp": 0.0
}
What is the intended behavior here? Do we want to support interpolation outside of the lut grid? If so, that functionality may be broken. If not, we should handle the error explicitly and return a statement saying that the scene-value lies outside of the lut grid.
Traceback (most recent call last):
File "/home/bgreenbe/miniforge3/envs/isofit_env/bin/isofit", line 8, in <module>
sys.exit(cli())
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/click/core.py", line 1161, in __call_
_
return self.main(*args, **kwargs)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/click/core.py", line 1082, in main
rv = self.invoke(ctx)
File "/store/bgreenbe/Github/isofit/isofit/__main__.py", line 63, in invoke
super().invoke(ctx)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/click/core.py", line 1697, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/click/core.py", line 1443, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/click/core.py", line 788, in invoke
return __callback(*args, **kwargs)
File "/store/bgreenbe/Github/isofit/isofit/utils/apply_oe.py", line 847, in cli
apply_oe(**kwargs)
File "/store/bgreenbe/Github/isofit/isofit/utils/apply_oe.py", line 736, in apply_oe
retrieval_full.run()
File "/store/bgreenbe/Github/isofit/isofit/core/isofit.py", line 119, in run
self.fm = fm = ForwardModel(self.config)
File "/store/bgreenbe/Github/isofit/isofit/core/forward.py", line 72, in __init__
self.RT = RadiativeTransfer(self.full_config)
File "/store/bgreenbe/Github/isofit/isofit/radiative_transfer/radiative_transfer.py", line 98, in __init__
rte = Engines[confRT.engine_name](**params)
File "/store/bgreenbe/Github/isofit/isofit/radiative_transfer/radiative_transfer_engine.py", line 143, in __init__
self.lut = luts.load(lut_path, subset=engine_config.lut_names)
File "/store/bgreenbe/Github/isofit/isofit/radiative_transfer/luts.py", line 723, in load
ds = optimizedInterp(ds, interp)
File "/store/bgreenbe/Github/isofit/isofit/radiative_transfer/luts.py", line 313, in optimizedInterp
return ds.interp(**strat)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/dataset.py", line 4004, i
n interp
variables[name] = missing.interp(var, var_indexers, method, **kwargs)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/missing.py", line 626, in
interp
interped = interp_func(
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/missing.py", line 743, in
interp_func
return _interpnd(var, x, new_x, func, kwargs)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/missing.py", line 761, in
_interpnd
return _interp1d(var, x, new_x, func, kwargs)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/missing.py", line 749, in
_interp1d
rslt = func(x, var, assume_sorted=True, **kwargs)(np.ravel(new_x))
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/xarray/core/missing.py", line 162, in
__init__
self.f = interp1d(
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/scipy/interpolate/_interpolate.py", l
ine 310, in __init__
self._y = self._reshape_yi(self.y)
File "/home/bgreenbe/miniforge3/envs/isofit_env/lib/python3.10/site-packages/scipy/interpolate/_polyint.py", line
114, in _reshape_yi
return yi.reshape((yi.shape[0], -1))
ValueError: cannot reshape array of size 0 into shape (0,newaxis)
I'm hitting a more opaque error when running a pre-built LUT. I think this is an edge case where the value of surface_elevation in the image is less than the lowest point on the lut grid. The interpolation that is occuring within Isofit is triggering an error. This occurs in cases when the "interp" key is used within the isofit config:
What is the intended behavior here? Do we want to support interpolation outside of the lut grid? If so, that functionality may be broken. If not, we should handle the error explicitly and return a statement saying that the scene-value lies outside of the lut grid.
Full traceback for posterity: