code: def pack_tups(*args):
      import numpy as np
      _DEBUG = False
      NOT_ITER = -1
      UNINIT_VAL = -1
      if _DEBUG:
          print("args = {0}".format(args))
      class StrNoIter(str):
          def __iter__(self):
              raise NotImplementedError("Non-iterable string")
      mod_args = [(StrNoIter(a) if isinstance(a, str) else a) for a in args]
      iterlens = [(len(a) if iterable(a) else NOT_ITER) for a in mod_args]
      maxiter = max(iterlens)
      if not all(map(lambda v: v in (NOT_ITER, maxiter), iterlens)):
          raise ValueError("All iterable items must be of equal length")
      if maxiter == NOT_ITER:
          return [args]
      tups = list(zip(*[(np.repeat(a, maxiter) if l == NOT_ITER else a)
              for (a,l) in zip(mod_args, iterlens)]))
      if _DEBUG:
          print("tups = {0}".format(tups))
      return tups