code: def Mux(fs, sel, simplify=True):
      
      # convert Mux([a, b], x) to Mux([a, b], [x])
      if isinstance(sel, Expression):
          sel = [sel]
  
      if len(sel) < clog2(len(fs)):
          fstr = "expected at least {} select bits, got {}"
          raise ValueError(fstr.format(clog2(len(fs)), len(sel)))
  
      it = boolfunc.iter_terms(sel)
      y = exprnode.or_(*[exprnode.and_(f.node, *[lit.node for lit in next(it)])
                         for f in fs])
      if simplify:
          y = y.simplify()
      return _expr(y)
docs: Return an expression that multiplexes a sequence of input functions over a
      sequence of select functions.