          cdef np.ndarray[long, ndim=2] output
          output = np.ndarray(shape=(self.length, len(attr_ids)), dtype=int)
          for i in range(self.length):
              for j, feature in enumerate(attr_ids):
                  output[i, j] = get_attr(self.lex[i], feature)
          return output
  
      def count_by(self, attr_id_t attr_id):
          cdef int i
          cdef attr_t attr
 
</s> remove             attr = get_attr(self.lex[i], attr_id)
 </s> add             attr = get_attr(self.data[i].lex, attr_id) </s> remove             if tokens[i].id == 1:
 </s> add             if tokens[i].lex.id == 1: </s> remove             self.lex[i] = &EMPTY_LEXEME
        self.lex += PADDING
        self.idx += PADDING
        self.pos += PADDING
        self.ner += PADDING
 </s> add             self._data[i] = EMPTY_TOKEN
        self.data = self._data + PADDING </s> remove     cdef int _save_cached(self, const Lexeme* const* tokens, hash_t key, int n) except -1:
 </s> add     cdef int _save_cached(self, const TokenC* tokens, hash_t key, int n) except -1: </s> remove             lexemes[i] = tokens[i]
 </s> add             lexemes[i] = tokens[i].lex
                output[i, j] = get_attr(self.data[i].lex, feature)
          cdef np.ndarray[long, ndim=2] output
          output = np.ndarray(shape=(self.length, len(attr_ids)), dtype=int)
          for i in range(self.length):
              for j, feature in enumerate(attr_ids):
                output[i, j] = get_attr(self.data[i].lex, feature)
          return output
  
      def count_by(self, attr_id_t attr_id):
          cdef int i
          cdef attr_t attr
keep keep keep keep replace keep keep keep keep keep
 * Introduce a TokenC struct, to handle token indices, pos tags and sense tags 
spacy/tokens.pyx