docstr: Opr Tree:
                   LogicalFilter
                   /                             LogicalGet      LogicalFilter
                            /                                       LogicalGet       LogicalGet
  
  Pattern:
                   LogicalFilter
                   /                             LogicalGet      Dummy
docstr_tok: ["Opr","Tree",":","LogicalFilter","\/","LogicalGet","LogicalFilter","\/","LogicalGet","LogicalGet","Pattern",":","LogicalFilter","\/","LogicalGet","Dummy"]
code: def test_nested_binder_match(self):
      """
          Opr Tree:
                           LogicalFilter
                           /           \
                    LogicalGet      LogicalFilter
                                    /           \
                              LogicalGet       LogicalGet
  
          Pattern:
                           LogicalFilter
                           /           \
                    LogicalGet      Dummy
          """
  
      sub_child_opr = LogicalGet(MagicMock(), MagicMock(), MagicMock())
      sub_child_opr_2 = LogicalGet(
          MagicMock(), MagicMock(), MagicMock()
      )
      sub_root_opr = LogicalFilter(
          MagicMock(), [sub_child_opr, sub_child_opr_2]
      )
  
      child_opr = LogicalGet(MagicMock(), MagicMock(), MagicMock())
      root_opr = LogicalFilter(MagicMock(), [child_opr, sub_root_opr])
  
      child_ptn = Pattern(OperatorType.LOGICALGET)
      root_ptn = Pattern(OperatorType.LOGICALFILTER)
      root_ptn.append_child(child_ptn)
      root_ptn.append_child(Pattern(OperatorType.DUMMY))
  
      opt_ctxt = OptimizerContext(MagicMock(), CostModel())
      root_grp_expr = opt_ctxt.add_opr_to_group(root_opr)
      binder = Binder(root_grp_expr, root_ptn, opt_ctxt.memo)
      expected_match = copy.copy(root_opr)
      expected_match.children = [child_opr, Dummy(2, None)]
      for match in iter(binder):
          self.helper_pre_order_match(expected_match, match)
  
      opt_ctxt = OptimizerContext(MagicMock(), CostModel())
      sub_root_grp_expr = opt_ctxt.add_opr_to_group(sub_root_opr)
      expected_match = copy.copy(sub_root_opr)
      expected_match.children = [sub_child_opr, Dummy(1, None)]
      binder = Binder(sub_root_grp_expr, root_ptn, opt_ctxt.memo)
      for match in iter(binder):
          self.helper_pre_order_match(expected_match, match)
  
file_path: evadb/test/unit_tests/optimizer/test_binder.py
imports: import copy
  import unittest
  from mock import MagicMock
  from evadb.optimizer.binder import Binder
  from evadb.optimizer.cost_model import CostModel
  from evadb.optimizer.operators import Dummy, LogicalFilter, LogicalGet, OperatorType
  from evadb.optimizer.optimizer_context import OptimizerContext
  from evadb.optimizer.rules.pattern import Pattern
label_desc: Use image node_id 3 for calling the TestBinder obj's underlying member method code with example usage: obj.test_nested_binder_match() without return types