code: def test_should_reorder_multiple_predicates(self, mock):
      def side_effect_func(name):
          if name == "DummyMultiObjectDetector":
              return MagicMock(cost=10)
          else:
              return MagicMock(cost=5)
  
      mock.side_effect = side_effect_func
  
      cheapest_pred = "id<10"
      cheap_pred = "DummyObjectDetector(data).label = ['person']"
      costly_pred = (
          "DummyMultiObjectDetector(data).labels @> ['person']"
      )
  
      query = (
          f"SELECT id FROM MyVideo WHERE {costly_pred} AND {cheap_pred} AND "
          f"{cheapest_pred};"
      )
  
      plan = get_physical_query_plan(self.evadb, query)
      predicate_plans = list(plan.find_all(PredicatePlan))
      self.assertEqual(len(predicate_plans), 1)
  
      left = predicate_plans[0].predicate.children[0]
      right = predicate_plans[0].predicate.children[1]
  
      # only 2 comparison expressions as id predicate is pushed down
      self.assertIsInstance(left, ComparisonExpression)
      self.assertIsInstance(right, ComparisonExpression)
      # predicates reordered based on the cost
      self.assertEqual(left.children[0].name, "DummyObjectDetector")
      self.assertEqual(
          right.children[0].name, "DummyMultiObjectDetector"
      )
  
imports: import unittest
  from test.markers import gpu_skip_marker
  from test.util import get_evadb_for_testing, get_physical_query_plan, load_functions_for_testing, shutdown_ray
  import numpy
  import pandas
  import pytest
  from mock import MagicMock, patch
  from evadb.configuration.constants import EvaDB_ROOT_DIR
  from evadb.expression.comparison_expression import ComparisonExpression
  from evadb.models.storage.batch import Batch
  from evadb.optimizer.plan_generator import PlanGenerator
  from evadb.optimizer.rules.rules import PushDownFilterThroughApplyAndMerge, PushDownFilterThroughJoin, ReorderPredicates
  from evadb.optimizer.rules.rules_manager import RulesManager, disable_rules
  from evadb.plan_nodes.predicate_plan import PredicatePlan
  from evadb.server.command_handler import execute_query_fetch_all
  from evadb.utils.stats import Timer
label_desc: Use image node_id 7 for calling the OptimizerRulesTest obj's underlying member method code with example usage: obj.test_should_reorder_multiple_predicates(mock) and returns: MagicMock, MagicMock