Calc/debug_templates
Miguel 60401010a6 Creada API de Debug 2025-06-05 18:18:48 +02:00
..
README.md Creada API de Debug 2025-06-05 18:18:48 +02:00
basic_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
context_debug.json Creada API de Debug 2025-06-05 18:18:48 +02:00
display_format_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
error_debug.json Creada API de Debug 2025-06-05 18:18:48 +02:00
regression_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00
tokenization_test.json Creada API de Debug 2025-06-05 18:18:48 +02:00

README.md

Templates de Debug - Simple Debug API

Esta carpeta contiene templates predefinidos para debuggear diferentes aspectos de la Calculadora MAV CAS.

Uso Básico

# 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:

{
  "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

"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

"type(engine.last_result).__name__"     # Tipo del resultado
"engine.get_available_types()"          # Tipos disponibles
"list(engine.registered_types_info['registered_classes'].keys())"

Tokenización

"engine.parser.get_tokenization_info()" # Info de tokenización
"engine.parser.process_expression('test')" # Procesar expresión

Análisis de Objetos

"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

{
  "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