code: def _strict_reuse_experiment(self, queries):
      # This test mocks the apply_function_expression, if it is called, it will raise
      # an exception.
      exec_times = []
      batches = []
      for i, query in enumerate(queries):
          timer = Timer()
          if i != 0:
              with timer, patch.object(
                  Batch, "apply_function_expression"
              ) as mock_batch_func:
                  mock_batch_func.side_effect = Exception(
                      "Results are not reused"
                  )
                  batches.append(
                      execute_query_fetch_all(self.evadb, query)
                  )
          else:
              with timer:
                  batches.append(
                      execute_query_fetch_all(self.evadb, query)
                  )
          exec_times.append(timer.total_elapsed_time)
      return batches, exec_times
  
imports: import gc
  import os
  import unittest
  from pathlib import Path
  from test.markers import gpu_skip_marker, windows_skip_marker
  from test.util import get_evadb_for_testing, get_logical_query_plan, load_functions_for_testing, shutdown_ray
  from mock import patch
  from evadb.configuration.constants import EvaDB_ROOT_DIR
  from evadb.models.storage.batch import Batch
  from evadb.optimizer.operators import LogicalFunctionScan
  from evadb.optimizer.plan_generator import PlanGenerator
  from evadb.optimizer.rules.rules import CacheFunctionExpressionInApply, CacheFunctionExpressionInFilter, CacheFunctionExpressionInProject
  from evadb.optimizer.rules.rules_manager import RulesManager, disable_rules
  from evadb.server.command_handler import execute_query_fetch_all
  from evadb.utils.stats import Timer
label_desc: Use image node_id 6 for calling the ReuseTest obj's underlying member method code with example usage: obj._strict_reuse_experiment(queries) and returns: batches,  exec_times