Files
Geniusia_v2/archive/old_tests/test_ui_change_detector.py
2026-03-05 00:20:25 +01:00

187 lines
7.2 KiB
Python

"""
Test simple pour le UIChangeDetector
"""
import sys
import numpy as np
from datetime import datetime
# Ajouter le chemin du module
sys.path.insert(0, 'geniusia2')
from core.ui_change_detector import UIChangeDetector
from core.embeddings_manager import EmbeddingsManager
from core.logger import Logger
from core.config import CONFIG
def test_ui_change_detector():
"""Test basique du UIChangeDetector"""
print("=" * 60)
print("Test du UIChangeDetector")
print("=" * 60)
# Initialiser les dépendances
print("\n1. Initialisation des composants...")
logger = Logger(log_dir="data/logs", encryption_key=None)
# Créer un EmbeddingsManager mock (sans modèle réel)
class MockEmbeddingsManager:
def get_embedding_similarity(self, emb1, emb2):
"""Calcule la similarité cosinus"""
emb1_norm = emb1 / np.linalg.norm(emb1)
emb2_norm = emb2 / np.linalg.norm(emb2)
similarity = np.dot(emb1_norm, emb2_norm)
return (similarity + 1.0) / 2.0
embeddings_manager = MockEmbeddingsManager()
# Créer le détecteur
detector = UIChangeDetector(embeddings_manager, logger, CONFIG)
print(f" ✓ UIChangeDetector initialisé")
print(f" - Seuil de similarité UI: {detector.ui_change_threshold}")
print(f" - Seuil de delta bbox: {detector.bbox_delta_threshold} pixels")
# Test 1: Détection de changement UI (embeddings similaires)
print("\n2. Test: UI stable (embeddings similaires)...")
current_emb = np.random.rand(512)
stored_embs = [
current_emb + np.random.rand(512) * 0.1, # Très similaire
current_emb + np.random.rand(512) * 0.15,
]
change_detected, similarity = detector.detect_ui_change(
current_emb,
stored_embs,
"test_task_1"
)
print(f" - Changement détecté: {change_detected}")
print(f" - Similarité max: {similarity:.3f}")
print(f" ✓ Test réussi: {'Changement' if change_detected else 'Stable'}")
# Test 2: Détection de changement UI (embeddings différents)
print("\n3. Test: UI changée (embeddings différents)...")
current_emb = np.random.rand(512)
stored_embs = [
np.random.rand(512), # Complètement différent
np.random.rand(512),
]
change_detected, similarity = detector.detect_ui_change(
current_emb,
stored_embs,
"test_task_2"
)
print(f" - Changement détecté: {change_detected}")
print(f" - Similarité max: {similarity:.3f}")
print(f" ✓ Test réussi: {'Changement' if change_detected else 'Stable'}")
# Test 3: Calcul de delta bbox (petite différence)
print("\n4. Test: Delta bbox (petite différence)...")
predicted_bbox = (100, 200, 50, 30)
actual_bbox = (105, 203, 50, 30)
deltas = detector.calculate_delta(predicted_bbox, actual_bbox)
print(f" - Delta X: {deltas['delta_x']:.1f} pixels")
print(f" - Delta Y: {deltas['delta_y']:.1f} pixels")
print(f" - Delta centre: {deltas['delta_center']:.1f} pixels")
print(f" - Delta max: {deltas['max_delta']:.1f} pixels")
print(f" ✓ Test réussi")
# Test 4: Calcul de delta bbox (grande différence)
print("\n5. Test: Delta bbox (grande différence)...")
predicted_bbox = (100, 200, 50, 30)
actual_bbox = (150, 230, 50, 30)
deltas = detector.calculate_delta(predicted_bbox, actual_bbox)
print(f" - Delta X: {deltas['delta_x']:.1f} pixels")
print(f" - Delta Y: {deltas['delta_y']:.1f} pixels")
print(f" - Delta centre: {deltas['delta_center']:.1f} pixels")
print(f" - Delta max: {deltas['max_delta']:.1f} pixels")
print(f" ✓ Test réussi")
# Test 5: Décision de ré-entraînement (pas nécessaire)
print("\n6. Test: Décision de ré-entraînement (pas nécessaire)...")
deltas = {"max_delta": 5.0}
similarity = 0.85
should_retrain = detector.should_trigger_retraining(deltas, similarity)
print(f" - Delta max: {deltas['max_delta']} pixels")
print(f" - Similarité: {similarity:.2f}")
print(f" - Ré-entraînement nécessaire: {should_retrain}")
print(f" ✓ Test réussi: {'Oui' if should_retrain else 'Non'}")
# Test 6: Décision de ré-entraînement (nécessaire - position)
print("\n7. Test: Décision de ré-entraînement (nécessaire - position)...")
deltas = {"max_delta": 25.0}
similarity = 0.85
should_retrain = detector.should_trigger_retraining(deltas, similarity)
print(f" - Delta max: {deltas['max_delta']} pixels")
print(f" - Similarité: {similarity:.2f}")
print(f" - Ré-entraînement nécessaire: {should_retrain}")
print(f" ✓ Test réussi: {'Oui' if should_retrain else 'Non'}")
# Test 7: Décision de ré-entraînement (nécessaire - visuel)
print("\n8. Test: Décision de ré-entraînement (nécessaire - visuel)...")
deltas = {"max_delta": 5.0}
similarity = 0.60
should_retrain = detector.should_trigger_retraining(deltas, similarity)
print(f" - Delta max: {deltas['max_delta']} pixels")
print(f" - Similarité: {similarity:.2f}")
print(f" - Ré-entraînement nécessaire: {should_retrain}")
print(f" ✓ Test réussi: {'Oui' if should_retrain else 'Non'}")
# Test 8: Déclenchement de ré-entraînement
print("\n9. Test: Déclenchement de ré-entraînement...")
detector.trigger_retraining(
"test_task_3",
"position_drift",
{"delta": 25.0}
)
print(f" ✓ Ré-entraînement déclenché")
# Test 9: Vérification complète avec déclenchement
print("\n10. Test: Vérification complète...")
current_emb = np.random.rand(512)
stored_embs = [np.random.rand(512)]
predicted_bbox = (100, 200, 50, 30)
actual_bbox = (150, 230, 50, 30)
result = detector.check_and_trigger_retraining(
"test_task_4",
current_emb,
stored_embs,
predicted_bbox,
actual_bbox
)
print(f" - Changement UI détecté: {result['ui_change_detected']}")
print(f" - Dérive position détectée: {result['position_drift_detected']}")
print(f" - Ré-entraînement déclenché: {result['retraining_triggered']}")
print(f" - Similarité: {result['similarity']:.3f}")
if result['deltas']:
print(f" - Delta max: {result['deltas']['max_delta']:.1f} pixels")
print(f" ✓ Test réussi")
# Test 10: Statistiques
print("\n11. Test: Statistiques...")
stats = detector.get_stats()
print(f" - Changements détectés: {stats['total_changes_detected']}")
print(f" - Ré-entraînements déclenchés: {stats['retraining_triggered_count']}")
print(f" - Changements par tâche: {stats['changes_by_task']}")
print(f" ✓ Test réussi")
# Test 11: Historique
print("\n12. Test: Historique des changements...")
history = detector.get_change_history()
print(f" - Nombre d'entrées: {len(history)}")
if history:
print(f" - Dernière entrée: {history[-1]['task_id']}")
print(f" ✓ Test réussi")
print("\n" + "=" * 60)
print("✓ Tous les tests réussis!")
print("=" * 60)
if __name__ == "__main__":
test_ui_change_detector()