code: def forward(
      ctx, x, G, weight, bias, eps, act="", algo=group_norm_cuda.OnePass
  ):
      # sanity check
      act = act.lower()
      assert x.is_contiguous(
          memory_format=torch.channels_last
      ), "Only support NHWC layout."
      assert weight.numel() == x.shape[1], "Unexpected parameter count."
      assert bias.numel() == x.shape[1], "Unexpected parameter count."
      assert x.shape[1] % G == 0, "C % G != 0."
      assert act in ["", "silu", "swish"], "Unsupported activation."
  
      with_swish = act in ["silu", "swish"]
  
      # enqueue fprop kernel
      y, sums = group_norm_cuda.forward(
          x, G, weight, bias, eps, algo, with_swish
      )
  
      # save for backward
      ctx.save_for_backward(x, weight, bias, sums)
      ctx.G = G
      ctx.eps = eps
      ctx.algo = algo
      ctx.with_swish = with_swish
      return y
  
imports: import torch
  import torch.nn.functional
  import torch.nn.init
  import group_norm_cuda
  from torch import Tensor
  from torch.nn.parameter import Parameter
  from torch._dynamo import disable
  from functools import partial
label_desc: Use image node_id 1 for calling the GroupNormNHWC obj's underlying member method code with example usage: obj.forward(ctx, x, G, weight, bias, eps, act, algo) and returns: y