code: def __init__(
      self,
      dim: int,
      num_attention_heads: int,
      attention_head_dim: int,
      kv_input_dim: int,
      kv_input_dim_proj_use_bias: bool,
      dropout=0.0,
      cross_attention_dim: Optional[int] = None,
      attention_bias: bool = False,
      attention_out_bias: bool = True,
  ):
      super().__init__()
      if kv_input_dim != dim:
          self.kv_mapper = nn.Linear(
              kv_input_dim, dim, kv_input_dim_proj_use_bias
          )
      else:
          self.kv_mapper = None
  
      self.norm1 = RMSNorm(dim, 1e-06)
  
      self.attn1 = Attention(
          query_dim=dim,
          heads=num_attention_heads,
          dim_head=attention_head_dim,
          dropout=dropout,
          bias=attention_bias,
          cross_attention_dim=cross_attention_dim,
          out_bias=attention_out_bias,
      )
  
      self.norm2 = RMSNorm(dim, 1e-06)
  
      self.attn2 = Attention(
          query_dim=dim,
          cross_attention_dim=cross_attention_dim,
          heads=num_attention_heads,
          dim_head=attention_head_dim,
          dropout=dropout,
          bias=attention_bias,
          out_bias=attention_out_bias,
      )
  
imports: from typing import Any, Dict, Optional
  import torch
  import torch.nn.functional
  from torch import nn
  from ..utils import USE_PEFT_BACKEND
  from ..utils.torch_utils import maybe_allow_in_graph
  from .activations import GEGLU, GELU, ApproximateGELU
  from .attention_processor import Attention
  from .embeddings import SinusoidalPositionalEmbedding
  from .lora import LoRACompatibleLinear
  from .normalization import AdaLayerNorm, AdaLayerNormContinuous, AdaLayerNormZero, RMSNorm
label_desc: Use image node_id 1 to create a new SkipFFTransformerBlock object from inherited base classes: nn with example: obj = SkipFFTransformerBlock(dim, num_attention_heads, attention_head_dim, kv_input_dim, kv_input_dim_proj_use_bias, dropout, cross_attention_dim, attention_bias, attention_out_bias)