code: def interactions(problem, Y):
      """Computes the second order effects
  
      Computes the second order effects (interactions) between
      all combinations of pairs of input factors
  
      Parameters
      ----------
      problem: dict
          The problem definition
      Y: numpy.array
          The NumPy array containing the model outputs
  
      Returns
      -------
      ie_names: list
          The names of the interaction pairs
      IE: list
          The sensitivity indices for the pairwise interactions
      """
      names = problem["names"]
      num_vars = problem["num_vars"]
  
      X = generate_contrast(problem)
  
      ie_names = []
      IE = []
  
      for col in range(X.shape[1]):
          for col_2 in range(col):
              x = X[:, col] * X[:, col_2]
              var_names = (names[col_2], names[col])
              ie_names.append(var_names)
              IE.append((1.0 / (2 * num_vars)) * np.dot(Y, x))
  
      return ie_names, IE
  
file_path: SALib/src/SALib/analyze/ff.py
imports: import numpy
  from .None import common_args
  import pandas
  from types import MethodType
  from SALib.util import read_param_file, ResultDict
  from SALib.sample.ff import generate_contrast, extend_bounds
label_desc: Use image node_id 3 for calling a global function with example usage: interactions(problem, Y) and returns: ie_names,  IE