Initial commit
This commit is contained in:
186
archive/old_tests/test_ui_change_detector.py
Normal file
186
archive/old_tests/test_ui_change_detector.py
Normal file
@@ -0,0 +1,186 @@
|
||||
"""
|
||||
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()
|
||||
Reference in New Issue
Block a user