class_docstr: ## ResNet Block
docstr: :param x: is the input feature map with shape `[batch_size, channels, height, width]`
  :param t_emb: is the time step embeddings of shape `[batch_size, d_t_emb]`
docstr_tok: [":","param","x",":","is","the","input","feature","map","with","shape","`","[","batch_size",",","channels",",","height",",","width","]","`",":","param","t_emb",":","is","the","time","step","embeddings","of","shape","`","[","batch_size",",","d_t_emb","]","`"]
code: def forward(self, x: torch.Tensor, t_emb: torch.Tensor):
      """
      :param x: is the input feature map with shape `[batch_size, channels, height, width]`
      :param t_emb: is the time step embeddings of shape `[batch_size, d_t_emb]`
      """
      # Initial convolution
      h = self.in_layers(x)
      # Time step embeddings
      t_emb = self.emb_layers(t_emb).type(h.dtype)
      # Add time step embeddings
      h = h + t_emb[:, :, None, None]
      # Final convolution
      h = self.out_layers(h)
      # Add skip connection
      return self.skip_connection(x) + h
  
imports: import math
  from typing import List
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from labml_nn.diffusion.stable_diffusion.model.unet_attention import SpatialTransformer
label_desc: Use image node_id 2 for calling the ResBlock obj's underlying member method code with example usage: obj.forward(x, t_emb) and returns: unknown