class_docstr: Annotates nodes with QN information.
  
  Note: Not using NodeAnnos to avoid circular dependencies.
code: def visit_Subscript(self, node):
      # TODO(mdan): This may no longer apply if we overload getitem.
      node = self.generic_visit(node)
      s = node.slice
      if isinstance(s, (gast.Tuple, gast.Slice)):
          # TODO(mdan): Support range and multi-dimensional indices.
          # Continuing silently because some demos use these.
          return node
      if isinstance(s, gast.Constant) and s.value != Ellipsis:
          subscript = QN(Literal(s.value))
      else:
          # The index may be an expression, case in which a name doesn't make sense.
          if anno.hasanno(s, anno.Basic.QN):
              subscript = anno.getanno(s, anno.Basic.QN)
          else:
              return node
      if anno.hasanno(node.value, anno.Basic.QN):
          anno.setanno(
              node,
              anno.Basic.QN,
              QN(
                  anno.getanno(node.value, anno.Basic.QN),
                  subscript=subscript,
              ),
          )
      return node
  
imports: import collections
  import gast
  from tensorflow.python.autograph.pyct import anno
  from tensorflow.python.autograph.pyct import parser
label_desc: Use image node_id 3 for calling the QnResolver obj's underlying member method code with example usage: obj.visit_Subscript(node) and returns: node, node, node