docs: def getitem(self, index):
          """
          direct access without going through self.selection
          """
          if index >= getattr(self.tree, self.size):
              raise IndexError(index)
          if self.__cache_objects and index in self.__cache:
              return self.__cache[index]
          obj = self.tree_object_cls(self.tree, self.name, self.prefix, index)
          if self.__cache_objects:
              self.__cache[index] = obj
          return obj