code: def __getitem__(self, key):
      """ """
      # WARNING
      # Here we want to make sure to use buffers and texture (instead of
      # lists) since only them are aware of any external modification.
      if self._need_update:
          self._update()
  
      V = self._vertices_buffer
      idxs = None
      U = None
      if self._indices_list is not None:
          idxs = self._indices_buffer
      if self._uniforms_list is not None:
          U = self._uniforms_texture.data.ravel().view(self.utype)
  
      # Getting a whole field
      if isinstance(key, str):
          # Getting a named field from vertices
          if key in V.dtype.names:
              return V[key]
          # Getting a named field from uniforms
          elif U is not None and key in U.dtype.names:
              # Careful, U is the whole texture that can be bigger than list
              # return U[key]
              return U[key][: len(self._uniforms_list)]
          else:
              raise IndexError("Unknown field name ('%s')" % key)
  
      # Getting individual item
      elif isinstance(key, int):
          vstart, vend = self._vertices_list._items[key]
          vertices = V[vstart:vend]
          indices = None
          uniforms = None
          if idxs is not None:
              istart, iend = self._indices_list._items[key]
              indices = idxs[istart:iend]
  
          if U is not None:
              ustart, uend = self._uniforms_list._items[key]
              uniforms = U[ustart:uend]
  
          return Item(self, key, vertices, indices, uniforms)
  
      # Error
      else:
          raise IndexError("Cannot get more than one item at once")
  
imports: from __future__ import division
  import math
  import numpy
  from ...gloo import Texture2D, VertexBuffer, IndexBuffer
  from .util import dtype_reduce
  from .array_list import ArrayList
label_desc: Use image node_id 8 for calling the BaseCollection obj's underlying member method code with example usage: obj.__getitem__(key) and returns: V, Item, U