code: def _zip_equal(*iterables):
      # Check whether the iterables are all the same size.
      try:
          first_size = len(iterables[0])
          for i, it in enumerate(iterables[1:], 1):
              size = len(it)
              if size != first_size:
                  raise UnequalIterablesError(
                      details=(first_size, i, size)
                  )
          # All sizes are equal, we can use the built-in zip.
          return zip(*iterables)
      # If any one of the iterables didn't have a length, start reading
      # them until one runs out.
      except TypeError:
          return _zip_equal_generator(iterables)
  
imports: import math
  import operator
  from collections import deque
  from collections.abc import Sized
  from functools import partial, reduce
  from itertools import chain, combinations, compress, count, cycle, groupby, islice, product, repeat, starmap, tee, zip_longest
  from random import randrange, sample, choice
label_desc: Use image node_id 15 for calling a global function with example usage: _zip_equal() and returns: zip, _zip_equal_generator