code: def _itemize(objs):
      
      if not isinstance(objs, collections.Sequence):
          raise TypeError("expected a sequence of Function")
  
      isseq = [isinstance(obj, collections.Sequence) for obj in objs]
      if not any(isseq):
          ftype = None
          for obj in objs:
              if ftype is None:
                  if isinstance(obj, BinaryDecisionDiagram):
                      ftype = BinaryDecisionDiagram
                  elif isinstance(obj, Expression):
                      ftype = Expression
                  elif isinstance(obj, TruthTable):
                      ftype = TruthTable
                  else:
                      raise TypeError("expected valid Function inputs")
              elif not isinstance(obj, ftype):
                  raise ValueError("expected uniform Function types")
          return list(objs), ((0, len(objs)), ), ftype
      elif all(isseq):
          items = list()
          shape = None
          ftype = None
          for obj in objs:
              _items, _shape, _ftype = _itemize(obj)
              if shape is None:
                  shape = _shape
              elif shape != _shape:
                  raise ValueError("expected uniform farray dimensions")
              if ftype is None:
                  ftype = _ftype
              elif ftype != _ftype:
                  raise ValueError("expected uniform Function types")
              items += _items
          shape = ((0, len(objs)), ) + shape
          return items, shape, ftype
      else:
          raise ValueError("expected uniform farray dimensions")
docs: Recursive helper function for farray.