Skip to content

luts.py error when using "interp" with pre-built LUTs #697

@evan-greenbrg

Description

@evan-greenbrg

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.

Full traceback for posterity:

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)


Metadata

Metadata

Assignees

No one assigned

    Labels

    bugfixFixing an error

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions