code: def test_meta_schedule_py_runner():
      """Test meta schedule PyRunner"""
  
      @derived_object
      class TestRunner(PyRunner):
          def run(
              self, runner_inputs: List[RunnerInput]
          ) -> List[RunnerFuture]:
              raise ValueError("TestRunner")
  
      runner = TestRunner()
      with pytest.raises(ValueError, match="TestRunner"):
          runner.run([])
  
imports: import itertools
  import sys
  import time
  from typing import Any, List
  import numpy
  import pytest
  import tvm
  import tvm.testing
  from tvm._ffi import register_func
  from tvm.meta_schedule.arg_info import TensorInfo
  from tvm.meta_schedule.builder import BuilderInput, LocalBuilder
  from tvm.meta_schedule.runner import EvaluatorConfig, LocalRunner, PyRunner, RPCConfig, RPCRunner, RunnerFuture, RunnerInput
  from tvm.meta_schedule.runner.local_runner import default_alloc_argument
  from tvm.meta_schedule.runner.rpc_runner import T_ARG_INFO_JSON_OBJ_LIST, T_ARGUMENT_LIST
  from tvm.meta_schedule.runner.rpc_runner import default_alloc_argument
  from tvm.meta_schedule.testing.local_rpc import LocalRPC
  from tvm.meta_schedule.utils import derived_object, get_global_func_with_default_on_worker
  from tvm.rpc import RPCSession
  from tvm.runtime import Device, Module
  from tvm.script import tir
  from tvm.target import Target
  from tvm.tir import FloatImm
label_desc: Use image node_id 6 for calling a global function with example usage: test_meta_schedule_py_runner() without return types