"""Tests for Global Place Recognition (F08).""" import numpy as np import pytest from gps_denied.core.gpr import GlobalPlaceRecognition from gps_denied.core.models import ModelManager from gps_denied.schemas.gpr import TileCandidate @pytest.fixture def gpr(): manager = ModelManager() gpr = GlobalPlaceRecognition(manager) gpr.load_index("flight_123", "dummy_path.faiss") return gpr def test_compute_location_descriptor(gpr): img = np.zeros((200, 200, 3), dtype=np.uint8) desc = gpr.compute_location_descriptor(img) assert desc.shape == (4096,) # Should be L2 normalized assert np.isclose(np.linalg.norm(desc), 1.0) def test_retrieve_candidate_tiles(gpr): img = np.zeros((200, 200, 3), dtype=np.uint8) candidates = gpr.retrieve_candidate_tiles(img, top_k=5) assert len(candidates) == 5 for c in candidates: assert isinstance(c, TileCandidate) assert c.similarity_score >= 0.0 def test_retrieve_candidate_tiles_for_chunk(gpr): imgs = [np.zeros((200, 200, 3), dtype=np.uint8) for _ in range(5)] candidates = gpr.retrieve_candidate_tiles_for_chunk(imgs, top_k=3) assert len(candidates) == 3 # Ensure they are sorted assert candidates[0].similarity_score >= candidates[1].similarity_score