class_docstr: Replace tuple nodes by shape when relevant
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse("def foo(n): import numpy; return numpy.ones((n,4))")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(TupleToShape, node)
  >>> print(pm.dump(backend.Python, node))
  def foo(n):
      import numpy
      return numpy.ones(builtins.pythran.make_shape(n, 4))
class_docstr_tok: ["Replace","tuple","nodes","by","shape","when","relevant",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","def","foo","(","n",")",":","import","numpy",";","return","numpy.ones","(","(","n,4",")",")","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","TupleToShape",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","def","foo","(","n",")",":","import","numpy","return","numpy.ones","(","builtins.pythran.make_shape","(","n",",","4",")",")"]
code: def __init__(self):
      self.update = False
      super(TupleToShape, self).__init__(Aliases)
  
file_path: catboost/contrib/python/pythran/pythran/optimizations/tuple_to_shape.py
imports: from pythran.analyses import Aliases
  from pythran.tables import MODULES
  from pythran.passmanager import Transformation
  from pythran.utils import pythran_builtin_attr
  import gast
label_desc: Use image node_id 1 to create a new TupleToShape object from inherited base classes: Transformation with example: obj = TupleToShape()