class_docstr: Infer symbolic type for all AST node. 
class_docstr_tok: ["Infer","symbolic","type","for","all","AST","node","."]
code: def visit_Subscript(self, node):
      self.visit(node.value)
      if self.stores_to(node):
          self.result[node.value] = self.builder.AddConst(
              self.result[node.value]
          )
      # type of a[1:2, 3, 4:1] is the type of: declval(a)(slice, long, slice)
      if isextslice(node.slice):
          self.visit(node.slice)
          self.update_type(
              node,
              self.builder.ExpressionType,
              lambda a, *b: "{0}({1})".format(a, ", ".join(b)),
              self.result[node.value],
              *[self.result[d] for d in node.slice.elts],
          )
      elif isnum(node.slice) and node.slice.value >= 0:
          # type of a[2] is the type of an elements of a
          # this special case is to make type inference easier
          # for the back end compiler
          self.update_type(
              node,
              self.builder.ElementType,
              node.slice.value,
              self.result[node.value],
          )
      else:
          # type of a[i] is the return type of the matching function
          self.visit(node.slice)
          self.update_type(
              node,
              self.builder.ExpressionType,
              "{0}[{1}]".format,
              self.result[node.value],
              self.result[node.slice],
          )
  
imports: from pythran.analyses import LazynessAnalysis, StrictAliases, YieldPoints
  from pythran.analyses import LocalNodeDeclarations, Immediates, RangeValues
  from pythran.analyses import Ancestors
  from pythran.config import cfg
  from pythran.cxxtypes import TypeBuilder, ordered_set
  from pythran.intrinsic import UserFunction, Class
  from pythran.passmanager import ModuleAnalysis
  from pythran.tables import operator_to_lambda, MODULES
  from pythran.types.conversion import pytype_to_ctype
  from pythran.types.reorder import Reorder
  from pythran.utils import attr_to_path, cxxid, isnum, isextslice
  from collections import defaultdict
  from functools import reduce
  import gast
  from itertools import islice
  from copy import deepcopy
label_desc: Use image node_id 28 for calling the Types obj's underlying member method code with example usage: obj.visit_Subscript(node) without return types