code: def _precompute_split_midpoints_and_sizes(
      self,
  ) -> Tuple[List[numpy.ndarray], List[numpy.ndarray]]:
      midpoints = []
      sizes = []
  
      search_spaces = self._search_spaces
      for feature, feature_split_values in enumerate(
          self._compute_features_split_values()
      ):
          feature_split_values = numpy.concatenate(
              (
                  numpy.atleast_1d(search_spaces[feature, 0]),
                  feature_split_values,
                  numpy.atleast_1d(search_spaces[feature, 1]),
              )
          )
          midpoint = 0.5 * (
              feature_split_values[1:] + feature_split_values[:-1]
          )
          size = feature_split_values[1:] - feature_split_values[:-1]
  
          midpoints.append(midpoint)
          sizes.append(size)
  
      return midpoints, sizes
  
imports: from __future__ import annotations
  from functools import lru_cache
  import itertools
  from typing import List
  from typing import Set
  from typing import Tuple
  from typing import TYPE_CHECKING
  from typing import Union
  import numpy
label_desc: Use image node_id 6 for calling the _FanovaTree obj's underlying member method code with example usage: obj._precompute_split_midpoints_and_sizes() and returns: midpoints,  sizes