# Templates de Debug - Simple Debug API Esta carpeta contiene templates predefinidos para debuggear diferentes aspectos de la Calculadora MAV CAS. ## Uso Básico ```bash # Ejecutar un template python simple_debug.py debug_templates/basic_test.json # Con archivo de salida personalizado python simple_debug.py debug_templates/basic_test.json --output mi_debug.json # Con información detallada python simple_debug.py debug_templates/basic_test.json --verbose ``` ## Templates Disponibles ### `basic_test.json` **Propósito**: Pruebas básicas de funcionalidad - Operaciones con FourBytes (IPs) - Operaciones con IntBase (números en diferentes bases) - Variables y tabla de símbolos - Funciones de SymPy ### `tokenization_test.json` **Propósito**: Debug del sistema de tokenización - Análisis de expresiones complejas - Información de reglas de tokenización - Procesamiento de expressions mixtas (IP + hex) ### `regression_test.json` **Propósito**: Testing de regresión para casos específicos - Verificación de tipos: FourBytes, IntBase, IP4Mask - Operaciones simbólicas - Substitución de variables ### `error_debug.json` **Propósito**: Debug de manejo de errores - Máscaras IP inválidas - IPs fuera de rango - Números hexadecimales malformados - División por cero - Variables indefinidas ### `context_debug.json` **Propósito**: Debug del contexto y estado del motor - Tabla de símbolos - Tipos registrados - Contexto base - Sistema de ecuaciones ### `display_format_test.json` **Propósito**: Demostración de formatos de display y output_raw - Diferentes tipos de resultados (IP, hex, símbolos, matrices) - Comentarios y errores - Comparación entre `output` y `output_raw` ## Formato de Template Cada template es un archivo JSON con esta estructura: ```json { "queries": [ { "index": 0, "type": "input", "content": "10.1.1.1 + 1" }, { "index": 1, "type": "exec", "content": "type(engine.last_result).__name__" } ] } ``` ### Tipos de Query - **`input`**: Evalúa expresiones como si las escribieras en la calculadora - **`exec`**: Ejecuta código Python para inspeccionar el estado interno del motor ## Casos de Uso Comunes ### Debug de un Bug Específico 1. Copia `basic_test.json` a `mi_bug_debug.json` 2. Modifica las queries para reproducir el bug 3. Añade queries `exec` para inspeccionar el estado 4. Ejecuta: `python simple_debug.py mi_bug_debug.json` ### Verificar una Nueva Funcionalidad 1. Crea un template con queries `input` que usen la nueva funcionalidad 2. Añade queries `exec` para verificar el estado interno 3. Compara resultados antes y después de los cambios ### Testing de Regresión 1. Usa `regression_test.json` como base 2. Añade casos específicos que deben mantenerse funcionando 3. Ejecuta regularmente para detectar regresiones ## Funciones Útiles para Queries `exec` ### Estado del Motor ```python "engine.symbol_table" # Variables actuales "engine.last_result" # Último resultado "engine.symbolic_mode" # ¿Modo simbólico? "len(engine.equations)" # Cantidad de ecuaciones ``` ### Información de Tipos ```python "type(engine.last_result).__name__" # Tipo del resultado "engine.get_available_types()" # Tipos disponibles "list(engine.registered_types_info['registered_classes'].keys())" ``` ### Tokenización ```python "engine.parser.get_tokenization_info()" # Info de tokenización "engine.parser.process_expression('test')" # Procesar expresión ``` ### Análisis de Objetos ```python "engine.last_result.original" # String original (FourBytes) "engine.last_result.base" # Base numérica (IntBase) "engine.last_result.has_symbols" # ¿Tiene símbolos? ``` ## Formato de Resultado ### Resultado Individual para Query `input` ```json { "index": 0, "input": "10.1.1.1 + 1", "output": "10.1.1.2", "result_type": "FourBytes", "success": true, "error": null, "display_class": "[FourBytes]", "output_raw": { "parts": [ ["custom_type", "10.1.1.2"], ["class_hint", "[FourBytes]"] ], "formatted_text": "[custom_type]10.1.1.2[class_hint][FourBytes]", "tag_info": { "custom_type": {"fg": "#f9a825"}, "class_hint": {"fg": "#888888"} } } } ``` ### Campos del Resultado - **`output`**: Resultado básico (antes del post-procesamiento) - **`output_raw`**: Resultado exacto como se muestra en la aplicación - **`parts`**: Lista de tuplas `[tag, contenido]` con información de color/formato - **`formatted_text`**: Texto formateado como se vería en la aplicación - **`tag_info`**: Información de colores y estilos para cada tag - **`result_type`**: Tipo del objeto resultado - **`display_class`**: Nombre de clase para mostrar ### Tags de Color Disponibles - **`error`**: `#ff6b6b` (rojo) - Errores - **`result`**: `#abdbe3` (azul claro) - Resultados generales - **`symbolic`**: `#82aaff` (azul) - Expresiones simbólicas - **`numeric`**: `#c3e88d` (verde) - Aproximaciones numéricas - **`custom_type`**: `#f9a825` (naranja) - Tipos personalizados - **`ip`**: `#fff176` (amarillo) - Direcciones IP - **`hex`**: `#f9a825` (naranja) - Números hexadecimales - **`class_hint`**: `#888888` (gris) - Pistas de clase ## Tips - Usa `index` secuencial para facilitar la lectura de resultados - Combina queries `input` y `exec` para verificar comportamiento y estado - El archivo de resultados contiene información detallada de éxito/error - **Usa `output_raw` para entender exactamente cómo se mostraría el resultado en la aplicación** - Puedes copiar y modificar templates existentes para casos específicos