class_docstr: Coupling block that follows the GLOW design but is applied to all the scales in parallel.
  
  Args:
      dims_in (list[tuple[int]]): list of dimensions of the input tensors
      subnet_args (dict): arguments of the subnet
      clamp (float): clamp value for the output of the subnet
code: def __init__(
      self,
      dims_in: list[tuple[int]],
      subnet_args: dict,
      clamp: float = 5.0,
  ) -> None:
      super().__init__(dims_in)
      channels = dims_in[0][0]
      self.ndims = len(dims_in[0])
  
      self.split_len1 = channels // 2
      self.split_len2 = channels - channels // 2
  
      self.clamp = clamp
  
      self.max_s = exp(clamp)
      self.min_s = exp(-clamp)
  
      self.cross_convolution1 = CrossConvolutions(
          self.split_len1, self.split_len2 * 2, **subnet_args
      )
      self.cross_convolution2 = CrossConvolutions(
          self.split_len2, self.split_len1 * 2, **subnet_args
      )
  
imports: from __future__ import annotations
  from math import exp
  import numpy
  import torch
  import torch.nn.functional
  from FrEIA.framework import GraphINN, InputNode, Node, OutputNode
  from FrEIA.modules import InvertibleModule
  from torch import Tensor, nn
  from torchvision.models.efficientnet import EfficientNet_B5_Weights
  from anomalib.models.components.feature_extractors import TorchFXFeatureExtractor
  from .anomaly_map import AnomalyMapGenerator, AnomalyMapMode
label_desc: Use image node_id 1 to create a new ParallelGlowCouplingLayer object from inherited base classes: InvertibleModule with example: obj = ParallelGlowCouplingLayer(dims_in, subnet_args, clamp)