code: def sub_for(expr, substitutions):
      
      mapping = {k.op(): v for k, v in substitutions}
      substitutor = Substitutor()
      return substitutor.substitute(expr, mapping)
docs: Substitute subexpressions in `expr` with expression to expression
      mapping `substitutions`.
  
      Parameters
      ----------
      expr : ibis.expr.types.Expr
          An Ibis expression
      substitutions : List[Tuple[ibis.expr.types.Expr, ibis.expr.types.Expr]]
          A mapping from expression to expression. If any subexpression of `expr`
          is equal to any of the keys in `substitutions`, the value for that key
          will replace the corresponding expression in `expr`.
  
      Returns
      -------
      ibis.expr.types.Expr
          An Ibis expression