Aplicación de escritorio en PySide6 con dos pestañas principales: conversor PDF→Markdown (con modo asistido por OpenAI) y cuaderno de cálculo tipo SMath basado en SymPy.
- PySide6 / PySide6-Addons (GUI y QWebEngineView para MathJax).
- pymupdf, pymupdf4llm (lectura y extracción de PDFs).
- openai (modo asistido por LLM al convertir PDFs).
- sympy (parsing y evaluación de expresiones numéricas).
main.pyiniciaQApplication, aplica estilos y abregui/MainWindowcon pestañas.- Pestaña PDF→MD:
converter/engine.pygestiona la conversión. Si hay API key, usaconverter/ai_agent.py(modelos OpenAI) para transcribir páginas como imágenes; si no, cae a pymupdf4llm.- El progreso se reporta por QThread (
ConversionWorker) y la UI muestra barra/estado.
- Calculation Notebook:
- Modelo:
notebook/document.pydefineDocument,TextBlock,FormulaBlocky unEvaluationContext. - Evaluación:
notebook/units.pyexpone funciones matemáticas numéricas; todas las operaciones trabajan con valores float/int. - Render:
notebook/renderer.pygenera HTML con bloques + tabla de variables y carga MathJax enQWebEngineView. - UI:
gui/notebook_tab.pylista bloques, editor, previsualización y barra de atajos (operadores matemáticos, símbolos griegos y plantillas lógicas básicas).
- Modelo:
sqrt,sin,cos,tan,log,exp,pisum,min,max,abs,rangelinspace(start, stop, num),arange(start, stop, step)sweep(func, xs)para mapear funciones escalares sobre listas/iterables- Booleanas:
And(*args),Or(*args),Not(arg)
test_full_app.jsoncubre todo el flujo:- Fase 1: definición de funciones (
f,area_rectangulo, composiciones). - Fase 2: generación de arrays con
linspace/arange, casos con variables y pasos decimales/negativos. - 3.1–3.7: combinaciones de funciones con arrays, barridos con
sweep, condicionales y expresiones lógicas. - 3.8 Mezclas lógicas y arrays: usa
es_positivo,es_no_cero,sweep,And/Or/Not,maxyarangedescendente para validar lógica + números.
- Fase 1: definición de funciones (
test_full_app_preview.htmlmuestra el render esperado.- Validación rápida:
python verify_test_document.pycarga el cuaderno, evalúa, lista funciones/arrays/variables y regenera el preview.
- Instala dependencias en tu venv:
pip install -r requirements.txt. - Ejecuta:
python main.py. - PDF→MD: arrastra PDFs; opcional marca “Use AI Agent” y configura API key/modelo en Settings.
- Notebook: agrega bloques; ejemplos simples:
L = 3.5B = 4.0P = B * L→ se mostrará14.00con la tabla de variables debajo.
- Conversión de PDFs a Markdown con o sin OpenAI.
- Split de PDFs en partes por número de páginas.
- Cuaderno con bloques ordenados de texto/fórmula, evaluación incremental.
- Cálculos numéricos puros con SymPy (sin manejo de unidades físicas).
- Previsualización HTML con MathJax y tabla de variables evaluadas.
- Barra de atajos para insertar operadores matemáticos, símbolos griegos y plantillas lógicas básicas apoyadas en las funciones booleanas ya soportadas.
- MathJax soporta inline (
$...$) y bloque ($$...$$); exporta con CDN o bundle local (configurable en Settings) y formato A4 claro. - Todas las fórmulas se evalúan de arriba hacia abajo en un contexto compartido (SymPy). Los valores se obtienen mediante evaluación numérica pura.
- Las multiplicaciones se muestran con
·entre números y símbolos (mul_symbol="\\cdot"). - Los errores de evaluación/parseo se muestran en el panel de errores, pero el resto de los bloques sigue evaluando.
- Punto de verdad para QA:
INSTRUCCIONES_PRUEBA.mddescribe el flujo ytest_full_app.jsones el cuaderno maestro (funciones, arrays, casos mixtos y extra de matemáticas). El preview esperado queda entest_full_app_preview.html. - Validación rápida:
python verify_test_document.py. - Al agregar una nueva función/feature: suma un bloque representativo al final de
test_full_app.json, ejecuta el script y comprueba que siga sin errores. Si cambia el comportamiento esperado, actualiza tambiénINSTRUCCIONES_PRUEBA.md. - Para futuros agentes: mantener sincronizados estos artefactos (instrucciones, cuaderno JSON y preview HTML) antes de dar por buena cualquier mejora.
- Undo/redo y mover bloques (drag & drop) en el notebook.
- Validaciones y mensajes de error más claros en fórmulas.
- Tests automatizados adicionales para casos complejos (potencias, divisiones, funciones trigonométricas).
- Integración futura con SymPy para funciones avanzadas (linspace, sweep, evaluación simbólica).