#!/usr/bin/env python3 """Test rapide pour valider Phase A (tests) + Phase B (GraphBuilder/NodeMatcher).""" import sys sys.path.insert(0, '.') print("=" * 70) print("TEST PHASE A + B - RPA Vision V3") print("=" * 70) # Test 1: FusionEngine print("\n[1/5] Test FusionEngine...") try: from core.embedding.fusion_engine import FusionEngine import numpy as np engine = FusionEngine() embeddings = { 'image': np.random.randn(512), 'text': np.random.randn(512) } fused = engine.fuse(embeddings) norm = np.linalg.norm(fused) assert abs(norm - 1.0) < 1e-5, f"Norm should be 1.0, got {norm}" assert sum(engine.config.weights.values()) >= 0.99, "Weights should sum to ~1.0" print("✓ FusionEngine OK - Property 17 validated") except Exception as e: print(f"✗ FusionEngine FAILED: {e}") sys.exit(1) # Test 2: FAISSManager print("\n[2/5] Test FAISSManager...") try: from core.embedding.faiss_manager import FAISSManager manager = FAISSManager(dimensions=512) # Ajouter des embeddings for i in range(10): vec = np.random.randn(512).astype(np.float32) vec = vec / np.linalg.norm(vec) manager.add_embedding(f'emb_{i}', vec, {'id': i}) assert manager.index.ntotal == 10, "Should have 10 embeddings" assert len(manager.metadata_store) == 10, "Should have 10 metadata entries" print("✓ FAISSManager OK - Property 11 validated") except Exception as e: print(f"✗ FAISSManager FAILED: {e}") sys.exit(1) # Test 3: GraphBuilder print("\n[3/5] Test GraphBuilder...") try: from core.graph.graph_builder import GraphBuilder builder = GraphBuilder(min_pattern_repetitions=2) # Test simple d'initialisation assert builder.min_pattern_repetitions == 2 assert builder.clustering_eps == 0.15 print("✓ GraphBuilder OK - Phase 5 started") except Exception as e: print(f"✗ GraphBuilder FAILED: {e}") sys.exit(1) # Test 4: NodeMatcher print("\n[4/5] Test NodeMatcher...") try: from core.graph.node_matcher import NodeMatcher matcher = NodeMatcher(similarity_threshold=0.85) # Test simple d'initialisation assert matcher.similarity_threshold == 0.85 print("✓ NodeMatcher OK - Phase 5 started") except Exception as e: print(f"✗ NodeMatcher FAILED: {e}") sys.exit(1) # Test 5: Intégration print("\n[5/5] Test Intégration...") try: # Test que tous les composants peuvent travailler ensemble from core.embedding.state_embedding_builder import StateEmbeddingBuilder builder_emb = StateEmbeddingBuilder() # Vérifier que le builder est initialisé avec CLIP assert builder_emb.clip_embedder is not None print("✓ Intégration OK - CLIP embedder disponible") except Exception as e: print(f"✗ Intégration FAILED: {e}") sys.exit(1) print("\n" + "=" * 70) print("✓ TOUS LES TESTS PASSENT") print("=" * 70) print("\nRésumé:") print(" ✓ Phase 2: Tests property-based (FusionEngine, FAISSManager)") print(" ✓ Phase 5: GraphBuilder et NodeMatcher implémentés") print("\nProchaines étapes:") print(" - Compléter tests unitaires avec pytest") print(" - Intégrer CLIP réel dans StateEmbeddingBuilder") print(" - Implémenter construction d'edges dans GraphBuilder")