code: def visit_Compare(self, node):
      self.generic_visit(node)
      noned_var, negated = self.match_is_none(node)
      if noned_var is None:
          return node
      call = ast.Call(
          ast.Attribute(
              ast.Attribute(
                  ast.Name("builtins", ast.Load(), None, None),
                  "pythran",
                  ast.Load(),
              ),
              "is_none",
              ast.Load(),
          ),
          [noned_var],
          [],
      )
  
      self.update = True
  
      if negated:
          return ast.UnaryOp(ast.Not(), call)
      else:
          return call
  
file_path: catboost/contrib/python/pythran/pythran/transformations/normalize_is_none.py
imports: from pythran.passmanager import Transformation
  from pythran.analyses import Ancestors
  from pythran.syntax import PythranSyntaxError
  from functools import reduce
  import gast
label_desc: Use image node_id 4 for calling the NormalizeIsNone obj's underlying member method code with example usage: obj.visit_Compare(node) and returns: node, ast, call