code: def test_logical_to_physical_function(self):
      load_query = f"LOAD VIDEO '{self.video_file_path}' INTO MyVideo;"
      execute_query_fetch_all(self.evadb, load_query)
  
      create_function_query = """CREATE FUNCTION DummyObjectDetector
                    INPUT  (Frame_Array NDARRAY UINT8(3, 256, 256))
                    OUTPUT (label NDARRAY STR(10))
                    TYPE  Classification
                    IMPL  'test/util.py';
          """
      execute_query_fetch_all(self.evadb, create_function_query)
  
      select_query = """SELECT id, DummyObjectDetector(data)
                      FROM MyVideo
                      WHERE DummyObjectDetector(data).label = ['person'];
          """
      actual_batch = execute_query_fetch_all(self.evadb, select_query)
      actual_batch.sort()
      expected = [
          {"myvideo.id": i * 2, "dummyobjectdetector.label": ["person"]}
          for i in range(NUM_FRAMES // 2)
      ]
      expected_batch = Batch(frames=pd.DataFrame(expected))
      self.assertEqual(actual_batch, expected_batch)
  
      execute_query_fetch_all(
          self.evadb, "DROP TABLE IF EXISTS MyVideo;"
      )
  
file_path: evadb/test/unit_tests/optimizer/test_cascade_optimizer.py
imports: import unittest
  from test.util import NUM_FRAMES, create_sample_video, file_remove, get_evadb_for_testing, shutdown_ray
  import pandas
  import pytest
  from evadb.models.storage.batch import Batch
  from evadb.server.command_handler import execute_query_fetch_all
label_desc: Use image node_id 3 for calling the CascadeOptimizer obj's underlying member method code with example usage: obj.test_logical_to_physical_function() without return types