code: def _copy_tree(source, destination):
      """Recursively copies source to destination."""
      # TODO(b/35363519): Perhaps use Beam IO eventually (which also already
      # supports recursive copy)?
      import tensorflow as tf  # pylint: disable=g-import-not-at-top
  
      if tf.io.gfile.isdir(source):
          source_dir_name = os.path.basename(os.path.normpath(source))
          if source_dir_name == impl_helper.METADATA_DIR_NAME:
              return
  
          tf.io.gfile.makedirs(destination)
          for filename in tf.io.gfile.listdir(source):
              _copy_tree(
                  os.path.join(source, filename),
                  os.path.join(destination, filename),
              )
      else:
          tf.io.gfile.copy(source, destination)
  
file_path: transform/tensorflow_transform/beam/tft_beam_io/transform_fn_io.py
imports: import os
  import apache_beam
  import tensorflow_transform
  from tensorflow_transform import impl_helper
  from tensorflow_transform.beam import common
  from tensorflow_transform.beam.tft_beam_io import beam_metadata_io
  from tensorflow_transform.tf_metadata import metadata_io
label_desc: Use image node_id 2 for calling a global function with example usage: _copy_tree(source, destination) without return types