class_docstr: Replaces **2 by a call to numpy.square.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse('a**2')
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(Square, node)
  >>> print(pm.dump(backend.Python, node))
  import numpy as __pythran_import_numpy
  __pythran_import_numpy.square(a)
  >>> node = ast.parse('__pythran_import_numpy.power(a,2)')
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(Square, node)
  >>> print(pm.dump(backend.Python, node))
  import numpy as __pythran_import_numpy
  __pythran_import_numpy.square(a)
code: def replace(self, value):
      self.update = self.need_import = True
      module_name = ast.Name(mangle("numpy"), ast.Load(), None, None)
      return ast.Call(
          ast.Attribute(module_name, "square", ast.Load()), [value], []
      )
  
file_path: pythran/pythran/optimizations/square.py
imports: from pythran.passmanager import Transformation
  from pythran.analyses.ast_matcher import ASTMatcher, AST_any
  from pythran.conversion import mangle
  from pythran.utils import isnum
  import gast
  import copy
label_desc: Use image node_id 2 for calling the Square obj's underlying member method code with example usage: obj.replace(value) and returns: ast