class_docstr: Turns built in method calls into function calls.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse("[].append(12)")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(NormalizeMethodCalls, node)
  >>> print(pm.dump(backend.Python, node))
  builtins.list.append([], 12)
class_docstr_tok: ["Turns","built","in","method","calls","into","function","calls",".",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","[","]",".append","(","12",")","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","NormalizeMethodCalls",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","builtins.list.append","(","[","]",",","12",")"]
code: def visit_BinOp(self, node):
      # replace "str" % (...) by builtins.str.__mod__(...)
      # the reason why we do this is that % formatting is handled by
      # a third party library that's relatively costly to load, so using a
      # function name instead of an operator overload makes it possible to
      # load it only when needed. The drawback is that % formatting is no
      # longer supported when lhs is not a literal
      self.generic_visit(node)
      if isinstance(node.op, ast.Mod) and isstr(node.left):
          self.update = True
          return ast.Call(
              ast.Attribute(
                  ast.Attribute(
                      ast.Name("builtins", ast.Load(), None, None),
                      "str",
                      ast.Load(),
                  ),
                  "__mod__",
                  ast.Load(),
              ),
              [node.left, node.right],
              [],
          )
      return node
  
imports: from pythran.analyses import Globals, Ancestors
  from pythran.passmanager import Transformation
  from pythran.syntax import PythranSyntaxError
  from pythran.tables import attributes, functions, methods, MODULES
  from pythran.tables import duplicated_methods
  from pythran.conversion import mangle, demangle
  from pythran.utils import isstr
  import gast
  from functools import reduce
label_desc: Use image node_id 13 for calling the NormalizeMethodCalls obj's underlying member method code with example usage: obj.visit_BinOp(node) and returns: node, ast