code: def _precompute_subtree_active_features(self) -> numpy.ndarray:
      subtree_active_features = numpy.full(
          (self._n_nodes, self._n_features), fill_value=False
      )
  
      for node_index in reversed(range(self._n_nodes)):
          feature = self._get_node_split_feature(node_index)
          if (
              feature >= 0
          ):  # Not leaf. Avoid unnecessary call to `_is_node_leaf`.
              subtree_active_features[node_index, feature] = True
              for child_node_index in self._get_node_children(
                  node_index
              ):
                  subtree_active_features[
                      node_index
                  ] |= subtree_active_features[child_node_index]
  
      return subtree_active_features
  
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 8 for calling the _FanovaTree obj's underlying member method code with example usage: obj._precompute_subtree_active_features() and returns: subtree_active_features