class_docstr: FastFlow.
  
  Unsupervised Anomaly Detection and Localization via 2D Normalizing Flows.
  
  Args:
      input_size (tuple[int, int]): Model input size.
      backbone (str): Backbone CNN network
      pre_trained (bool, optional): Boolean to check whether to use a pre_trained backbone.
      flow_steps (int, optional): Flow steps.
      conv3x3_only (bool, optinoal): Use only conv3x3 in fast_flow model. Defaults to False.
      hidden_ratio (float, optional): Ratio to calculate hidden var channels. Defaults to 1.0.
  
  Raises:
      ValueError: When the backbone is not supported.
class_docstr_tok: ["FastFlow",".","Unsupervised","Anomaly","Detection","and","Localization","via","2D","Normalizing","Flows",".","Args",":","input_size","(","tuple","[","int",",","int","]",")",":","Model","input","size",".","backbone","(","str",")",":","Backbone","CNN","network","pre_trained","(","bool",",","optional",")",":","Boolean","to","check","whether","to","use","a","pre_trained","backbone",".","flow_steps","(","int",",","optional",")",":","Flow","steps",".","conv3x3_only","(","bool",",","optinoal",")",":","Use","only","conv3x3","in","fast_flow","model",".","Defaults","to","False",".","hidden_ratio","(","float",",","optional",")",":","Ratio","to","calculate","hidden","var","channels",".","Defaults","to","1.0",".","Raises",":","ValueError",":","When","the","backbone","is","not","supported","."]
docstr: Get Class-Attention-Image-Transformers (CaiT) features.
  
  Args:
      input_tensor (Tensor): Input Tensor.
  
  Returns:
      list[Tensor]: List of features.
docstr_tok: ["Get","Class-Attention-Image-Transformers","(","CaiT",")","features",".","Args",":","input_tensor","(","Tensor",")",":","Input","Tensor",".","Returns",":","list","[","Tensor","]",":","List","of","features","."]
code: def _get_cait_features(self, input_tensor: Tensor) -> list[Tensor]:
      """Get Class-Attention-Image-Transformers (CaiT) features.
  
      Args:
          input_tensor (Tensor): Input Tensor.
  
      Returns:
          list[Tensor]: List of features.
      """
      feature = self.feature_extractor.patch_embed(input_tensor)
      feature = feature + self.feature_extractor.pos_embed
      feature = self.feature_extractor.pos_drop(feature)
      for i in range(41):  # paper Table 6. Block Index = 40
          feature = self.feature_extractor.blocks[i](feature)
      batch_size, _, num_channels = feature.shape
      feature = self.feature_extractor.norm(feature)
      feature = feature.permute(0, 2, 1)
      feature = feature.reshape(
          batch_size,
          num_channels,
          self.input_size[0] // 16,
          self.input_size[1] // 16,
      )
      features = [feature]
      return features
  
file_path: anomalib/src/anomalib/models/fastflow/torch_model.py
imports: from __future__ import annotations
  from typing import Callable
  import timm
  import torch
  from FrEIA.framework import SequenceINN
  from timm.models.cait import Cait
  from timm.models.vision_transformer import VisionTransformer
  from torch import Tensor, nn
  from anomalib.models.components.flow import AllInOneBlock
  from anomalib.models.fastflow.anomaly_map import AnomalyMapGenerator
label_desc: Use image node_id 4 for calling the FastflowModel obj's underlying member method code with example usage: obj._get_cait_features(input_tensor) and returns: features