code: def transform(self, blocks, y=None):
          
          feature_vecs = (
              tuple(re.search(token, block.css[attrib]) is not None
                    for block in blocks)
              for attrib, tokens in self.attribute_tokens
              for token in tokens
              )
          return np.column_stack(tuple(feature_vecs)).astype(int)
docs: Transform an ordered sequence of blocks into a 2D features matrix with
          shape (num blocks, num features).
  
          Args:
              blocks (List[Block]): as output by :class:`Blockifier.blockify`
              y (None): This isn't used, it's only here for API consistency.
  
          Returns:
              `np.ndarray`: 2D array of shape (num blocks, num CSS attributes),
                  where values are either 0 or 1, indicating the absence or
                  presence of a given token in a CSS attribute on a given block.