import pytest

from vllm_omni.diffusion.models.z_image.z_image_transformer import validate_zimage_tp_constraints

pytestmark = [pytest.mark.core_model, pytest.mark.cpu]


def test_validate_zimage_tp_constraints_tp2_ok():
    ffn_hidden_dim, final_out_dims, supported_tp = validate_zimage_tp_constraints(
        dim=3840,
        n_heads=30,
        n_kv_heads=30,
        in_channels=16,
        all_patch_size=(2,),
        all_f_patch_size=(1,),
        tensor_parallel_size=2,
    )
    assert ffn_hidden_dim == 10240
    assert final_out_dims == [64]
    assert supported_tp == [1, 2]


def test_validate_zimage_tp_constraints_tp4_fails_on_heads():
    with pytest.raises(ValueError, match=r"n_heads % tensor_parallel_size"):
        validate_zimage_tp_constraints(
            dim=3840,
            n_heads=30,
            n_kv_heads=30,
            in_channels=16,
            all_patch_size=(2,),
            all_f_patch_size=(1,),
            tensor_parallel_size=4,
        )


def test_validate_zimage_tp_constraints_tp3_fails_on_ffn_hidden_dim():
    with pytest.raises(ValueError, match=r"ffn_hidden_dim % tensor_parallel_size"):
        validate_zimage_tp_constraints(
            dim=3840,
            n_heads=30,
            n_kv_heads=30,
            in_channels=16,
            all_patch_size=(2,),
            all_f_patch_size=(1,),
            tensor_parallel_size=3,
        )
