75c67150d0
build / build (3.13) (push) Waiting to run
release-please / release-please (push) Waiting to run
release-please / build wheels (macos-aarch64) (push) Blocked by required conditions
release-please / build wheels (macos-x86_64) (push) Blocked by required conditions
release-please / build wheels (windows-x86_64) (push) Blocked by required conditions
release-please / build wheels (linux-aarch64) (push) Blocked by required conditions
release-please / build wheels (linux-x86_64) (push) Blocked by required conditions
release-please / build sdist (push) Blocked by required conditions
release-please / publish release artifacts (push) Blocked by required conditions
29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import UTC, datetime
|
|
|
|
from memu.database.inmemory.vector import cosine_topk, cosine_topk_salience
|
|
|
|
|
|
def _corpus() -> list[tuple[str, list[float]]]:
|
|
return [("a", [1.0, 0.0]), ("b", [0.0, 1.0]), ("c", [0.7, 0.7])]
|
|
|
|
|
|
def test_cosine_topk_nonpositive_k_returns_empty() -> None:
|
|
# top_k <= 0 must return nothing, not the entire corpus (which is what the
|
|
# argpartition path did for k == 0).
|
|
assert cosine_topk([1.0, 0.0], _corpus(), k=0) == []
|
|
assert cosine_topk([1.0, 0.0], _corpus(), k=-1) == []
|
|
|
|
|
|
def test_cosine_topk_orders_by_similarity() -> None:
|
|
results = cosine_topk([1.0, 0.0], _corpus(), k=2)
|
|
assert [memory_id for memory_id, _ in results] == ["a", "c"]
|
|
|
|
|
|
def test_cosine_topk_salience_nonpositive_k_returns_empty() -> None:
|
|
now = datetime.now(UTC)
|
|
corpus = [("a", [1.0, 0.0], 1, now), ("b", [0.0, 1.0], 1, now)]
|
|
assert cosine_topk_salience([1.0, 0.0], corpus, k=0) == []
|
|
assert cosine_topk_salience([1.0, 0.0], corpus, k=-1) == []
|