Spaces:
Sleeping
Sleeping
import pytest | |
import numpy as np | |
from app.scorer import cosine_similarity, DimensionalityMismatchError, ZeroVectorError, EmptyInputError | |
def valid_input(): | |
query_vector = np.array([[1, 0]]) | |
corpus_vectors = np.array([[1, 0], [0, 1], [1, 1]]) | |
return query_vector, corpus_vectors | |
def zero_query_vector(): | |
query_vector = np.array([[0, 0]]) | |
corpus_vectors = np.array([[1, 0], [0, 1]]) | |
return query_vector, corpus_vectors | |
def corpus_with_zero_vector(): | |
query_vector = np.array([[1, 1]]) | |
corpus_vectors = np.array([[1, 0], [0, 1], [0, 0]]) | |
return query_vector, corpus_vectors | |
def dimensionality_mismatch(): | |
query_vector = np.array([[1, 0]]) | |
corpus_vectors = np.array([[1, 0, 0], [0, 1, 0]]) | |
return query_vector, corpus_vectors | |
def empty_input(): | |
query_vector = np.array([[]]) | |
corpus_vectors = np.array([[]]) | |
return query_vector, corpus_vectors | |
def test_cosine_similarity_valid_input(valid_input): | |
query_vector, corpus_vectors = valid_input | |
similarities = cosine_similarity(query_vector, corpus_vectors) | |
assert isinstance(similarities, np.ndarray) | |
assert similarities.shape == (3,) | |
assert similarities[0] == pytest.approx(1.0) # Same direction | |
assert similarities[1] == pytest.approx(0.0) # Orthogonal | |
assert similarities[2] == pytest.approx(1 / np.sqrt(2)) # Diagonal similarity | |
def test_cosine_similarity_zero_query_vector(zero_query_vector): | |
query_vector, corpus_vectors = zero_query_vector | |
with pytest.raises(ZeroVectorError): | |
cosine_similarity(query_vector, corpus_vectors) | |
def test_cosine_similarity_corpus_with_zero_vector(corpus_with_zero_vector): | |
query_vector, corpus_vectors = corpus_with_zero_vector | |
with pytest.raises(ZeroVectorError): | |
cosine_similarity(query_vector, corpus_vectors) | |
def test_cosine_similarity_dimensionality_mismatch(dimensionality_mismatch): | |
query_vector, corpus_vectors = dimensionality_mismatch | |
with pytest.raises(DimensionalityMismatchError): | |
cosine_similarity(query_vector, corpus_vectors) | |
def test_cosine_similarity_empty_inputs(empty_input): | |
query_vector, corpus_vectors = empty_input | |
with pytest.raises(EmptyInputError): | |
cosine_similarity(query_vector, corpus_vectors) | |
def test_cosine_similarity_output_range(valid_input): | |
query_vector, corpus_vectors = valid_input | |
similarities = cosine_similarity(query_vector, corpus_vectors) | |
assert np.all(similarities >= -1) | |
assert np.all(similarities <= 1) | |