from siop_ai.embeddings import DIMENSIONS, EmbeddeurDeterministe


def test_dimensions_et_normalisation():
    [vecteur] = EmbeddeurDeterministe().encoder(["couple de serrage des guides"])
    assert len(vecteur) == DIMENSIONS
    assert abs(sum(v * v for v in vecteur) - 1.0) < 1e-6


def test_stable_et_discriminant():
    embeddeur = EmbeddeurDeterministe()
    a1 = embeddeur.encoder(["couple de serrage des coulisseaux de guides"])[0]
    a2 = embeddeur.encoder(["couple de serrage des coulisseaux de guides"])[0]
    b = embeddeur.encoder(["planning des congés du personnel administratif"])[0]
    cosinus = lambda x, y: sum(p * q for p, q in zip(x, y))  # noqa: E731 — vecteurs normés
    assert a1 == a2
    assert cosinus(a1, b) < 0.35 < cosinus(a1, a1)


def test_textes_proches_plus_similaires_que_textes_eloignes():
    embeddeur = EmbeddeurDeterministe()
    question = embeddeur.encoder(["quel couple de serrage pour les guides ?"])[0]
    notice = embeddeur.encoder(["serrer les coulisseaux de guides au couple de 25 N·m"])[0]
    horsujet = embeddeur.encoder(["le syndic organise une assemblée générale annuelle"])[0]
    cosinus = lambda x, y: sum(p * q for p, q in zip(x, y))  # noqa: E731
    assert cosinus(question, notice) > cosinus(question, horsujet)
