code: def map_recursive_zip(fn: Callable, arg0, *args) -> Any:
      """
      Apply fn to each Node appearing arg. arg may be a list, tuple, slice, or dict with string keys.
      """
      if _orig_type(arg0) != torch.Size and _orig_isinstance(
          arg0, _orig_tuple
      ):
          for arg in args:
              assert (
                  not _orig_isinstance(arg, torch.Size)
              ) and _orig_isinstance(arg, _orig_tuple)
              assert len(arg0) == len(arg)
          return _orig_tuple(
              map_recursive_zip(fn, *sub_args)
              for sub_args in _orig_zip(arg0, *args)
          )
      elif _orig_isinstance(arg0, _orig_list):
          for arg in args:
              assert _orig_isinstance(arg, _orig_list)
              assert len(arg0) == len(arg)
          return _orig_list(
              map_recursive_zip(fn, *sub_args)
              for sub_args in _orig_zip(arg0, *args)
          )
      elif _orig_isinstance(arg0, _orig_dict):
          keys = _orig_set(arg0.keys())
          for arg in args:
              assert (
                  _orig_isinstance(arg, _orig_dict)
                  and len(keys.symmetric_difference(arg.keys())) == 0
              )
          return {
              k: map_recursive_zip(
                  fn, arg0[k], *(arg[k] for arg in args)
              )
              for k in keys
          }
      else:
          # assert not _orig_isinstance(arg0, slice)
          return fn(arg0, *args)
  
file_path: nni/nni/common/concrete_trace_utils/utils.py
imports: import builtins
  import operator
  from typing import Any, Callable, Type
  import functools
  import torch
  from torch.fx import Node
label_desc: Use image node_id 3 for calling a global function with example usage: map_recursive_zip(fn, arg0) and returns: _orig_tuple, _orig_list, unknown, fn