class_docstr: Base data structure of SingleData and MultiData.
  
  NOTE:
  - For performance issue, only **np.floating** is supported in the underlayer data !!!
  - Boolean based on np.floating is also supported. Here are some examples
  
  .. code-block:: python
  
      np.array([ np.nan]).any() -> True
      np.array([ np.nan]).all() -> True
      np.array([1. , 0.]).any() -> True
      np.array([1. , 0.]).all() -> False
class_docstr_tok: ["Base","data","structure","of","SingleData","and","MultiData",".","NOTE",":","-","For","performance","issue",",","only","*","*","np.floating","*","*","is","supported","in","the","underlayer","data","!","!","!","-","Boolean","based","on","np.floating","is","also","supported",".","Here","are","some","examples","..","code-block",":",":","python","np.array","(","[","np.nan","]",")",".any","(",")","-",">","True","np.array","(","[","np.nan","]",")",".all","(",")","-",">","True","np.array","(","[","1.",",","0",".","]",")",".any","(",")","-",">","True","np.array","(","[","1.",",","0",".","]",")",".all","(",")","-",">","False"]
code: def __init__(
      self, data: np.ndarray, *indices: Union[List, pd.Index, Index]
  ):
      self.data = data
      self.indices = indices
  
      # get the expected data shape
      # - The index has higher priority
      self.data = np.array(data)
  
      expected_dim = max(self.data.ndim, len(indices))
  
      data_shape = []
      for i in range(expected_dim):
          idx_l = indices[i] if len(indices) > i else []
          if len(idx_l) == 0:
              data_shape.append(self.data.shape[i])
          else:
              data_shape.append(len(idx_l))
      data_shape = tuple(data_shape)
  
      # broadcast the data to expected shape
      if self.data.shape != data_shape:
          self.data = np.broadcast_to(self.data, data_shape)
  
      self.data = self.data.astype(np.float64)
      # Please notice following cases when converting the type
      # - np.array([None, 1]).astype(np.float64) -> array([nan,  1.])
  
      # create index from user's index data.
      self.indices: List[Index] = self.loc_idx_cls.proc_idx_l(
          indices, data_shape
      )
  
      for dim in range(expected_dim):
          assert self.data.shape[dim] == len(self.indices[dim])
  
      self.ndim = expected_dim
  
imports: from __future__ import annotations
  from typing import Dict, Tuple, Union, Callable, List
  import bisect
  import numpy
  import pandas
label_desc: Use image node_id 1 to create a new IndexData object  with example: obj = IndexData(data)