import torch
from torch import nn


def apply_group_norm_silu(
    x: torch.Tensor,
    norm: nn.Module,
    activation: nn.Module,
) -> torch.Tensor:
    if (
        x.is_cuda
        and not torch.is_grad_enabled()
        and not x.requires_grad
        and isinstance(norm, nn.GroupNorm)
        and isinstance(activation, nn.SiLU)
        and not activation.inplace
        and norm.affine
        and norm.weight is not None
        and norm.bias is not None
    ):
        from sglang.kernels.ops.diffusion.triton.group_norm_silu import (
            triton_group_norm_silu,
        )

        return triton_group_norm_silu(
            x,
            norm.weight,
            norm.bias,
            num_groups=norm.num_groups,
            eps=norm.eps,
        )
    return activation(norm(x))


__all__ = ["apply_group_norm_silu"]
