code: def test_forest_classifier_joint(self):
      for ForestClassifier in (
          RandomForestClassifier,
          ExtraTreesClassifier,
      ):
          idx = np.arange(len(self.iris.data))
          np.random.shuffle(idx)
          X = self.iris.data[idx]
          Y = self.iris.target[idx]
          dt = ForestClassifier(max_depth=3)
          dt.fit(X[: int(len(X) / 2)], Y[: int(len(X) / 2)])
          testX = X[int(len(X) / 2) :]
          base_prediction = dt.predict_proba(testX)
          pred, bias, contribs = treeinterpreter.predict(
              dt, testX, joint_contribution=True
          )
          self.assertTrue(np.allclose(base_prediction, pred))
          self.assertTrue(
              np.allclose(
                  base_prediction,
                  np.array(
                      [sum(contrib.values()) for contrib in contribs]
                  )
                  + bias,
              )
          )
  
file_path: treeinterpreter/tests/test_treeinterpreter.py
imports: import numpy
  import unittest
  from sklearn.datasets import load_boston, load_iris
  from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier, ExtraTreesClassifier, ExtraTreesRegressor
  from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor, ExtraTreeClassifier, ExtraTreeRegressor
  from treeinterpreter import treeinterpreter
label_desc: Use image node_id 7 for calling the TestTreeinterpreter obj's underlying member method code with example usage: obj.test_forest_classifier_joint() without return types