code: def _fill_nan_shape(kw: dict):
      nsplits = kw.get("nsplits")
      shape = kw.get("shape")
      if nsplits is not None and shape is not None:
          nsplits = tuple(nsplits)
          shape = list(shape)
          for idx, (s, sp) in enumerate(zip(shape, nsplits)):
              if not np.isnan(s):
                  continue
              s = sum(sp)
              if not np.isnan(s):
                  shape[idx] = s
          kw["shape"] = tuple(shape)
          kw["nsplits"] = nsplits
      return kw
  
imports: import sys
  from typing import Any, Callable, Dict, List, Tuple, Type, Union
  import numpy
  from ...metrics import Metrics
  from ...typing import TileableType, ChunkType, OperandType
  from ...utils import calc_data_size
  from ..context import Context
  from ..mode import is_eager_mode
  from ..entity import OutputType, ExecutableTuple, get_chunk_types, get_tileable_types, get_output_types, get_fetch_class
label_desc: Use image node_id 8 for calling the TileableOperandMixin obj's underlying member method code with example usage: obj._fill_nan_shape(kw) and returns: kw