code: def test_start_python_pipeline_with_empty_py_requirements_and_without_system_packages(
      self, mock_check_output, mock_runner
  ):
      hook = BeamHook(runner=DEFAULT_RUNNER)
      wait_for_done = mock_runner.return_value.wait_for_done
      process_line_callback = MagicMock()
      check_job_status_callback = MagicMock()
  
      with pytest.raises(
          AirflowException, match=r"Invalid method invocation\."
      ):
          hook.start_python_pipeline(
              variables=copy.deepcopy(BEAM_VARIABLES_PY),
              py_file=PY_FILE,
              py_options=PY_OPTIONS,
              py_requirements=[],
              process_line_callback=process_line_callback,
              check_job_status_callback=check_job_status_callback,
          )
  
      mock_runner.assert_not_called()
      wait_for_done.assert_not_called()
  
imports: from __future__ import annotations
  import copy
  import os
  import re
  import subprocess
  from unittest import mock
  from unittest.mock import ANY, AsyncMock, MagicMock
  import pytest
  from airflow.exceptions import AirflowException
  from airflow.providers.apache.beam.hooks.beam import BeamAsyncHook, BeamHook, beam_options_to_args, run_beam_command
label_desc: Use image node_id 5 for calling the TestBeamHook obj's underlying member method code with example usage: obj.test_start_python_pipeline_with_empty_py_requirements_and_without_system_packages(mock_check_output, mock_runner) without return types