class_docstr: Jointly trains 2 surrogate decision trees.
  Refines diff (or sim) regions by sample generation.
docstr: Args:
      max_depth: maximum depth of the joint surrogate tree to be built
      feature_names: list of input feature names
      alpha: parameter to control degree of favouring common nodes vs. separate nodes
      split_criterion: which divergence criterion to use? (see paper for more details)
      refine: not used here
docstr_tok: ["Args",":","max_depth",":","maximum","depth","of","the","joint","surrogate","tree","to","be","built","feature_names",":","list","of","input","feature","names","alpha",":","parameter","to","control","degree","of","favouring","common","nodes","vs.","separate","nodes","split_criterion",":","which","divergence","criterion","to","use","?","(","see","paper","for","more","details",")","refine",":","not","used","here"]
code: def __init__(
      self,
      max_depth,
      feature_names,
      alpha=0.0,
      split_criterion=1,
      refine=False,
  ):
      """
      Args:
          max_depth: maximum depth of the joint surrogate tree to be built
          feature_names: list of input feature names
          alpha: parameter to control degree of favouring common nodes vs. separate nodes
          split_criterion: which divergence criterion to use? (see paper for more details)
          refine: not used here
      """
      self.depth1 = 0
      self.depth2 = 0
      self.alpha = alpha
      self.max_depth = max_depth
      self.feature_names = feature_names  # considered common
      # output two decision trees
      self.tree1 = None
      self.tree2 = None
      if split_criterion == 1:
          # default is alpha=0, diverge if atleast one tree is pure
          self.continue_same_prefix = self.split_condition
      else:
          self.continue_same_prefix = self.split_condition2
  
      self.refine = refine  # unused
      self.generated_data = {}
      self.diffrules = []
  
imports: import numpy
  import pandas
  from aix360.algorithms.imd.rule import Rule
label_desc: Use image node_id 1 to create a new JointSurrogateTree object  with example: obj = JointSurrogateTree(max_depth, feature_names, alpha, split_criterion, refine)