code: def parenthesize(self, expr, level, *args, strict=False, **kwargs):
          
          needs_parenths = (
              (precedence(expr) < level) or
              (strict and precedence(expr) == level))
          if needs_parenths:
              return (
                  self._parenth_left + self.doprint(expr, *args, **kwargs) +
                  self._parenth_right)
          else:
              return self.doprint(expr, *args, **kwargs)
docs: Render `expr` and wrap the result in parentheses if the precedence
          of `expr` is below the given `level` (or at the given `level` if
          `strict` is True. Extra `args` and `kwargs` are passed to the internal
          `doit` renderer