code: def make_forest(
      data,
      n_neighbors,
      n_trees,
      leaf_size,
      rng_state,
      random_state,
      n_jobs=None,
      angular=False,
      max_depth=200,
  ):
      """Build a random projection forest with ``n_trees``.
  
      Parameters
      ----------
      data
      n_neighbors
      n_trees
      leaf_size
      rng_state
      angular
  
      Returns
      -------
      forest: list
          A list of random projection trees.
      """
      # print(ts(), "Started forest construction")
      result = []
      if leaf_size is None:
          leaf_size = max(10, np.int32(n_neighbors))
      if n_jobs is None:
          n_jobs = -1
  
      rng_states = random_state.randint(
          INT32_MIN, INT32_MAX, size=(n_trees, 3)
      ).astype(np.int64)
      try:
          if scipy.sparse.isspmatrix_csr(data):
              result = joblib.Parallel(
                  n_jobs=n_jobs, require="sharedmem"
              )(
                  joblib.delayed(make_sparse_tree)(
                      data.indices,
                      data.indptr,
                      data.data,
                      rng_states[i],
                      leaf_size,
                      angular,
                      max_depth=max_depth,
                  )
                  for i in range(n_trees)
              )
          else:
              result = joblib.Parallel(
                  n_jobs=n_jobs, require="sharedmem"
              )(
                  joblib.delayed(make_dense_tree)(
                      data,
                      rng_states[i],
                      leaf_size,
                      angular,
                      max_depth=max_depth,
                  )
                  for i in range(n_trees)
              )
      except (RuntimeError, RecursionError, SystemError):
          warn(
              "Random Projection forest initialisation failed due to recursion"
              "limit being reached. Something is a little strange with your "
              "graph_data, and this may take longer than normal to compute."
          )
  
      return tuple(result)
  
imports: from warnings import warn
  import locale
  import numpy
  import numba
  import scipy.sparse
  from pynndescent.sparse import sparse_mul, sparse_diff, sparse_sum, arr_intersect, sparse_dot_product
  from pynndescent.utils import tau_rand_int, norm
  import joblib
  from collections import namedtuple
label_desc: Use image node_id 15 for calling a global function with example usage: make_forest(data, n_neighbors, n_trees, leaf_size, rng_state, random_state, n_jobs, angular, max_depth) and returns: tuple