code: def copy_and_change_pipeline_name(
      orig_path: str,
      new_path: str,
      origin_pipeline_name: str,
      new_pipeline_name: str,
  ) -> None:
      """Copy pipeline file to new path with pipeline name changed."""
      contents = io_utils.read_string_file(orig_path)
      assert (
          contents.count(origin_pipeline_name) == 1
      ), "DSL file can only contain one pipeline name"
      contents = contents.replace(
          origin_pipeline_name, new_pipeline_name
      )
      io_utils.write_string_file(new_path, contents)
  
file_path: tfx/tfx/tools/cli/e2e/test_utils.py
imports: import datetime
  import random
  import string
  import subprocess
  from typing import Any, List
  from absl import logging
  from tfx import components
  from tfx.dsl.components.base.base_component import BaseComponent
  from tfx.utils import io_utils
label_desc: Use image node_id 3 for calling a global function with example usage: copy_and_change_pipeline_name(orig_path, new_path, origin_pipeline_name, new_pipeline_name) without return types