docstr: Args:
      source: source image of shape (batch_size, C, H, W)
      reference: reference image of shape (batch_size, C, H, W)
  
  Returns:
      SSIM loss of shape (batch_size,)
code: def forward(
      self, source: torch.Tensor, reference: torch.Tensor
  ) -> torch.Tensor:
      """
      Args:
          source: source image of shape (batch_size, C, H, W)
          reference: reference image of shape (batch_size, C, H, W)
  
      Returns:
          SSIM loss of shape (batch_size,)
      """
      return _ssim_loss_fn(
          source,
          reference,
          kernel=self.gaussian_kernel,
          c1=self.c1,
          c2=self.c2,
          use_padding=self.use_padding,
          eps=self.eps,
      )
  
imports: from typing import List, Optional
  import torch
  from torch import nn, Tensor
  from torch.nn import functional
  from torchvision.prototype.models.depth.stereo.raft_stereo import grid_sample, make_coords_grid
label_desc: Use image node_id 2 for calling the SSIM obj's underlying member method code with example usage: obj.forward(source, reference) and returns: _ssim_loss_fn