docs: def __expr_str(cls, expr, level):
          '''Returns string representing the expression.'''
          ident = ' ' * level * 4
  
          if isinstance(expr, tuple):
              return '{}{}'.format(ident, str(expr))
  
          if expr.etype[0] in ['pvar', 'constant']:
              return '{}Expression(etype={}, args={})'.format(ident, expr.etype, expr.args)
  
          if not isinstance(expr, Expression):
              return '{}{}'.format(ident, str(expr))
  
          args = list(cls.__expr_str(arg, level + 1) for arg in expr.args)
          args = '\n'.join(args)
          return '{}Expression(etype={}, args=\n{})'.format(ident, expr.etype, args)