code: def unarchive_with_progress(
      name: str, path: str
  ) -> Generator[str, int, int]:
      """
      Unarchive a file and return the unarchiving progress -> Generator[filename, extrace_size, total_size]
  
      Args:
          name(str) : file or directory name to be unarchived
          path(str) : storage name of archive file
  
      Examples:
          .. code-block:: python
  
              unarchive_path = 'test.tar.gz'
              for filename, extract_size, total_szie in unarchive_with_progress(unarchive_path, path='./output'):
                  print(filename, extract_size, total_size)
      """
      with open(name, mode="r") as file:
          total_size = extract_size = 0
          for filename in file.getnames():
              total_size += file.getxarinfo(filename).size
  
          for filename in file.getnames():
              file.extract(filename, path)
              extract_size += file.getxarinfo(filename).size
              yield filename, extract_size, total_size
  
imports: import os
  import tarfile
  import zipfile
  from typing import List, Generator, Callable
  import rarfile
label_desc: Use image node_id 4 for calling a global function with example usage: unarchive_with_progress(name, path) without return types