#!/usr/bin/env python3 """ Diagnóstico de problemas específicos del usuario: 1. IP4Mask(mask) no funciona 2. 10.1.1.1 + 1 devuelve Integer en lugar de FourBytes """ if __name__ == "__main__": print("🔍 DIAGNOSTICANDO PROBLEMAS ESPECÍFICOS DEL USUARIO") print("=" * 60) try: from main_evaluation import HybridEvaluationEngine # Crear motor con debug engine = HybridEvaluationEngine() engine.debug = True print("📋 Reproduciendo secuencia del usuario:") # 1. Crear mask print(f"\n1. Creando mask:") result1 = engine.evaluate_line("mask=255.240.0.3") print(f" mask asignada: {result1.result} (tipo: {type(result1.result)})") # Ver qué hay en mask mask_value = engine.get_variable('mask') print(f" mask en symbol_table: {mask_value} (tipo: {type(mask_value)})") print(f"\n2. Problema 1: IP4Mask(mask) no funciona") print(f" Intentando: IP4Mask(mask)") # Probar directamente try: result2 = engine.evaluate_line("IP4Mask(mask)") print(f" Resultado: {result2.result} (tipo: {type(result2.result)})") if result2.is_error: print(f" Error: {result2.error}") except Exception as e: print(f" Excepción: {e}") # Ver qué pasa cuando llamamos IP4Mask directamente con el valor print(f"\n Probando IP4Mask directamente con el valor de mask:") try: # Obtener IP4Mask del contexto IP4Mask = engine.base_context.get('IP4Mask') if IP4Mask: print(f" IP4Mask disponible: {IP4Mask}") direct_result = IP4Mask(mask_value) print(f" Resultado directo: {direct_result} (tipo: {type(direct_result)})") else: print(f" IP4Mask no encontrada en contexto") except Exception as e: print(f" Error en llamada directa: {e}") import traceback traceback.print_exc() print(f"\n3. Problema 2: 10.1.1.1 + 1 devuelve Integer") print(f" Intentando: 10.1.1.1 + 1") result3 = engine.evaluate_line("10.1.1.1 + 1") print(f" Resultado: {result3.result} (tipo: {type(result3.result)})") # Analizar paso a paso print(f"\n Análisis paso a paso:") # Crear FourBytes manualmente para probar try: FourBytes = engine.base_context.get('FourBytes') if FourBytes: print(f" FourBytes disponible: {FourBytes}") fb = FourBytes("10.1.1.1") print(f" FourBytes creado: {fb} (tipo: {type(fb)})") print(f" fb._numeric_value: {fb._numeric_value}") # Probar suma manual sum_result = fb + 1 print(f" fb + 1 = {sum_result} (tipo: {type(sum_result)})") # Ver el método __add__ print(f" Método __add__ de FourBytes: {fb.__add__}") except Exception as e: print(f" Error en análisis: {e}") import traceback traceback.print_exc() print(f"\n4. Verificando contexto:") relevant_classes = ['FourBytes', 'IP4Mask', 'IP4'] for cls_name in relevant_classes: cls_obj = engine.base_context.get(cls_name) if cls_obj: print(f" ✅ {cls_name}: {cls_obj}") else: print(f" ❌ {cls_name}: No encontrada") except Exception as e: print(f"Error general: {e}") import traceback traceback.print_exc()