def METHOD_NAME(self, x: torch.Tensor) -> torch.Tensor:
    """Defines the computation performed at every call.
    Args:
        x (torch.Tensor): The input data.
    Returns:
        torch.Tensor: The output of the module.
    """
    # [n, c, h, w]
    n, c, h, w = x.size()
    num_segments = self.num_segments
    num_batches = n // num_segments
    assert c == self.in_channels
    # [num_batches, c, num_segments, h, w]
    x = x.view(num_batches, num_segments, c, h, w)
    x = x.permute(0, 2, 1, 3, 4).contiguous()
    # [num_batches * c, num_segments, 1, 1]
    theta_out = F.adaptive_avg_pool2d(
        x.view(-1, num_segments, h, w), (1, 1))
    # [num_batches * c, 1, adaptive_kernel_size, 1]
    conv_kernel = self.G(theta_out.view(-1, num_segments)).view(
        num_batches * c, 1, -1, 1)
    # [num_batches, c, num_segments, 1, 1]
    local_activation = self.L(theta_out.view(-1, c, num_segments)).view(
        num_batches, c, num_segments, 1, 1)
    # [num_batches, c, num_segments, h, w]
    new_x = x * local_activation
    # [1, num_batches * c, num_segments, h * w]
    y = F.conv2d(
        new_x.view(1, num_batches * c, num_segments, h * w),
        conv_kernel,
        bias=None,
        stride=(self.adaptive_convolution_stride, 1),
        padding=(self.adaptive_convolution_padding, 0),
        groups=num_batches * c)
    # [n, c, h, w]
    y = y.view(num_batches, c, num_segments, h, w)
    y = y.permute(0, 2, 1, 3, 4).contiguous().view(n, c, h, w)
    return y