code: def make_vp(n=100, p=100):
      """Generates data according to https://arxiv.org/abs/1607.02670 (Sparse additive Gaussian process with soft interactions)
      X_i ~ N(0, I)
      y = x1 + x2^2 + x3 + x4^2 + x5 + x1x2 + x2x3 + x3x4 + N(0, 0.14)
  
      Args:
          n (int): number of sample
          p (int): number of features
  
      Returns:
          Tuple[np.array, np.array]: design matrix and label vector
  
      """
      X = np.random.normal(size=(n, p))
      effects = (
          X[:, 0] + X[:, 1] ** 2 + X[:, 2] + X[:, 3] ** 2 + X[:, 4]
      )
      interactions = (
          X[:, 0] * X[:, 1] + X[:, 1] * X[:, 2] + X[:, 2] * X[:, 3]
      )
  
      y = effects + interactions + np.random.normal(scale=0.14, size=n)
  
      return X, y
  
file_path: imodels/imodels/util/tree_interaction_utils.py
imports: import itertools
  from typing import Set, Tuple
  import numpy
  import pandas
label_desc: Use image node_id 2 for calling a global function with example usage: make_vp(n, p) and returns: X,  y