Obsidean_VM/01-Documentation/Python/Scripts Python/Calc/Calc v0.1.md

236 lines
6.9 KiB
Markdown

# Calculadora Algebraica Híbrida
### Concepto Fundamental
La calculadora mantiene **forma simbólica como representación primaria** y proporciona **evaluación numérica como información complementaria** cuando es posible y útil.
**Principio de Evaluación Numérica**: El resultado siempre se intenta calcular numéricamente y se muestra cuando la representación string del resultado numérico difiere del resultado algebraico.
## Sistema de Asignaciones y Ecuaciones
### Principio: Separación clara entre asignaciones y ecuaciones
```python
# Asignación de variable
x = 5 # → Se guarda el valor simbólico (NO se agrega como ecuación)
y = x + a # → Se guarda la expresión simbólica
# Ecuación pura (detección automática)
x**2 + 2*x = 8 # → Se agrega como ecuación Eq(x**2 + 2*x, 8)
a + b = 10 # → Se agrega como ecuación Eq(a + b, 10)
a > b + 1 # → Se agrega como desigualdad
```
### Criterios de Detección de Ecuaciones
**Se considera ecuación si:**
- Contiene `=` Y NO es una asignación simple de variable
- Contiene operadores de comparación: `==`, `>`, `<`, `>=`, `<=`
- Tiene estructura algebraica en ambos lados del `=`
**NO se considera ecuación:**
- Asignaciones simples: `x = 5`, `y = expresión`
- Líneas con solo números o comentarios
---
## Uso de `solve()` y el Atajo `=?`
### Principio: `variable=?` es equivalente a `solve(variable)`
```python
# Ambas formas son idénticas:
solve(a) # Resuelve 'a' usando el sistema de ecuaciones
a=? # Atajo sintáctico para solve(a)
```
El comando intenta resolver algebraicamente y numéricamente en paralelo cuando es posible.
---
## Sistema de Tokenización con Prioridades
### Principio: Las prioridades son números arbitrarios que determinan el orden de aplicación
```
Prioridad 5: IntBase → Patrón: 16#FF (muy específico)
Prioridad 6: Hex/Bin → Patrón: 0xFF, 0b1010 (específico)
Prioridad 10: FourBytes → Patrón: x.x.x.x (general)
```
**Regla**: Menor número = se aplica primero
Esto garantiza que `16#10.10.10.10` se tokenice como IntBase antes de considerar FourBytes.
---
## Conversión Perezosa y Tipos Especializados
### Principio: Mantener el tipo especializado siempre que sea posible
**Se evita convertir a SymPy al máximo**. Los objetos especializados mantienen su tipo cuando pueden resolver la operación internamente.
```python
# Operaciones que mantienen el tipo especializado:
Hex(15) + 1 Hex(16) # Hex maneja la suma
16#15 + 1 → 16#16 # IntBase maneja la suma
10.1.1.1 + 1 10.1.1.2 # FourBytes maneja la suma
# Conversión a SymPy solo cuando es necesario:
sin(16#FF) → sin(255) # sin() requiere SymPy
solve(x + 16#10) → solve() # Álgebra compleja requiere SymPy
```
**Regla**: Solo se convierte a SymPy cuando el token no es atómico o la operación requiere capacidades algebraicas avanzadas.
---
## Contexto Limpio por Evaluación
### Principio: Cada evaluación comienza desde cero
**Contexto Limpio** significa:
- Se eliminan todas las ecuaciones previas
- Se eliminan todas las variables definidas
- Se re-evalúa todo el contenido línea por línea
- Comportamiento idéntico a iniciar una nueva sesión
Esto garantiza resultados predecibles y sin efectos secundarios acumulados.
---
## Resultados Interactivos
### Principio: Activación mediante clicks en elementos con binding
Los resultados interactivos se crean cuando el tipo de resultado requiere visualización expandida:
```python
plot(sin(x)) "📊 Ver Plot" # Click abre ventana matplotlib
Matrix([[1,2],[3,4]]) "📋 Ver Matriz" # Click muestra matriz formateada
[1,2,3,4,5,6,7,8] "📋 Ver Lista" # Click expande contenido
```
**Activación**: Click en el texto con binding dispara la ventana emergente correspondiente.
---
## Sistema de Autocompletado
### Principio: Sistema extensible con prioridades (por implementar)
Se propone usar un sistema de prioridades numéricas similar al de tokenización:
```
Prioridad 1: Métodos del objeto específico
Prioridad 2: Métodos de la clase base
Prioridad 3: Funciones SymPy relevantes
Prioridad 4: Helpers contextuales
```
---
## Integración con SymPy
### Principio: En casos de conflicto, siempre prevalece SymPy
Cuando hay ambigüedad o conflicto entre tipos personalizados y SymPy:
- Funciones SymPy tienen precedencia
- Símbolos SymPy (como `e`, `pi`) mantienen su significado matemático
- Las conversiones fallidas retornan a comportamiento SymPy estándar
---
## Arquitectura de Tipos Personalizados
### Clases Base Universales
**IntBase**: Números en cualquier base
- Aritmética nativa que preserva la base
- Conversión a SymPy solo cuando necesario
- Soporte para símbolos algebraicos
**FourBytes**: Patrones x.x.x.x
- Aritmética de 32-bit para IPs
- Soporte para elementos simbólicos
- Base para tipos como IP4
### Principio de Extensibilidad
Cada tipo en `custom_types/` define:
1. Su lógica de tokenización
2. Sus operaciones aritméticas
3. Sus métodos de conversión
4. Su ayuda contextual
5. Sus sugerencias de autocompletado
---
## Flujo de Evaluación Completo
```
Entrada Usuario
[Tokenización Universal]
¿Asignación o Ecuación?
├─ Asignación → Guardar valor simbólico
└─ Ecuación → Agregar al sistema
[Evaluación]
├─ Mantener tipo especializado si es posible
└─ Convertir a SymPy si es necesario
[Resultado]
├─ Forma simbólica (siempre)
└─ Evaluación numérica (si difiere como string)
```
---
## Ejemplos Integrales
```python
# Tokenización y tipos especializados
16#FF + 2#1010 → 16#109 # IntBase preservado
192.168.1.1 + 5 192.168.1.6 # FourBytes preservado
# Asignaciones vs ecuaciones
x = 10 # Asignación (solo guarda valor)
x + y = 15 # Ecuación (se agrega al sistema)
y=? # solve(y) → y = 5
# Evaluación numérica automática
4/5 4/5 0.8 # Difiere como string
sqrt(2) 2 1.414 # Difiere como string
2 + 3 5 # NO se muestra ≈ (igual string)
# Resultados interactivos
plot(sin(x)) "📊 Ver Plot" [clickeable]
Matrix([[1,2]]) "📋 Ver Matriz" [clickeable]
```
---
## Principios de Diseño Resumidos
1. **Álgebra primero**: Mantener forma simbólica siempre
2. **Evaluación numérica inteligente**: Mostrar solo cuando agrega valor
3. **Tipos especializados preservados**: Conversión a SymPy solo cuando necesario
4. **Tokenización ordenada**: Sistema de prioridades simple y predecible
5. **Contexto limpio**: Cada evaluación desde cero
6. **Extensibilidad**: Nuevos tipos se integran automáticamente
7. **SymPy prevalece**: En conflictos, el comportamiento matemático estándar gana
Este documento ahora refleja con precisión la arquitectura implementada y sirve como guía coherente para el desarrollo futuro.