Module neuralops.tests.test_model_family_compat
Functions
def cfg(model_type, hidden_size=896, heads=14, head_dim=64, layers=24)-
Expand source code
def cfg(model_type, hidden_size=896, heads=14, head_dim=64, layers=24): return types.SimpleNamespace(model_type=model_type, hidden_size=hidden_size, num_attention_heads=heads, head_dim=head_dim, num_hidden_layers=layers) def test_adapter_metadata()-
Expand source code
def test_adapter_metadata(): q = ModelAdapter(cfg("qwen2", 768, 12, 64, 6), "qwen") assert (q.hidden_size, q.num_heads, q.head_dim, q.num_hidden_layers) == (768, 12, 64, 6) assert q.causal is True and q.position_embedding == "rotary" b = ModelAdapter(cfg("bert", 768, 12, 64, 6), "bert") assert b.causal is False and b.position_embedding == "absolute" def test_family_detection(model_type, expected)-
Expand source code
@pytest.mark.parametrize("model_type,expected", [ ("distilbert", "bert"), ("bert", "bert"), ("roberta", "roberta"), ("gpt2", "gpt"), ("qwen2", "qwen"), ("t5", "t5"), ("mamba", "ssm"), ("madeup", "unknown"), ]) def test_family_detection(model_type, expected): assert detect_family(cfg(model_type)) == expected def test_fp32_linalg()-
Expand source code
def test_fp32_linalg(): u, s, vt = fp32_linalg(torch.linalg.svd, torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float16)) assert u.dtype == s.dtype == vt.dtype == torch.float16 assert u.shape == (2, 2) and s.shape == (2,) and vt.shape == (2, 2) assert torch.allclose((u.float() @ torch.diag(s.float()) @ vt.float()), torch.tensor([[1., 2.], [3., 4.]]), atol=2e-2) def test_mask_conversion()-
Expand source code
def test_mask_conversion(): adapter = ModelAdapter(cfg("qwen2"), "qwen") mask = torch.tensor([[[[0.0, float("-inf")], [0.0, 0.0]]]]) converted = convert_mask(mask, adapter, expects_bidirectional=True) assert converted.dtype == torch.bool and converted.shape == mask.shape assert torch.equal(converted, mask >= 0) assert convert_mask(mask, adapter, expects_bidirectional=False) is mask def test_projection_aliases()-
Expand source code
def test_projection_aliases(): class Projections(nn.Module): def __init__(self): super().__init__() self.q_proj = nn.Linear(4, 4) self.k_proj = nn.Linear(4, 4) self.v_proj = nn.Linear(4, 4) self.o_proj = nn.Linear(4, 4) m = Projections() install_projection_aliases(m) assert m.q_lin is m.q_proj and m.k_lin is m.k_proj assert m.v_lin is m.v_proj and m.out_lin is m.o_proj plain = nn.Linear(4, 4) install_projection_aliases(plain) assert not hasattr(plain, "q_lin") def test_support_registry()-
Expand source code
def test_support_registry(): assert module_family_support("mamba")["qwen"] == "incompatible" assert module_family_support("mamba")["bert"] == "encoder_compatible" assert module_family_support("faq")["qwen"] == "adapted" def test_wrap_for_family()-
Expand source code
def test_wrap_for_family(): class DummyAttention(nn.Module): def __init__(self): super().__init__() self.q_proj = nn.Linear(4, 4) self.k_proj = nn.Linear(4, 4) self.v_proj = nn.Linear(4, 4) self.o_proj = nn.Linear(4, 4) def forward(self, x, **kwargs): return self.o_proj(self.v_proj(x)) bert = DummyAttention() assert wrap_for_family(bert, "bert") is bert qwen = DummyAttention() wrapped = wrap_for_family(qwen, "qwen") assert isinstance(wrapped, FamilyModuleWrapper) assert wrapped(torch.randn(2, 3, 4)).shape == (2, 3, 4)