233 lines
6.4 KiB
Markdown
233 lines
6.4 KiB
Markdown
# Calculadora MAV - CAS Híbrido
|
|
|
|
## Descripción
|
|
|
|
Sistema de Álgebra Computacional (CAS) que combina SymPy con clases especializadas para networking, programación y análisis numérico. Incluye sistema de tipos dinámico con auto-descubrimiento.
|
|
|
|
## Características Principales
|
|
|
|
- **Motor SymPy completo**: Cálculo simbólico y numérico integrado
|
|
- **Sistema de tipos dinámico**: Auto-descubrimiento desde `custom_types/`
|
|
- **Sintaxis simplificada**: `Tipo[args]` en lugar de `Tipo("args")`
|
|
- **Detección automática de ecuaciones**: Sin sintaxis especial
|
|
- **Resultados interactivos**: Elementos clickeables para plots, matrices y listas
|
|
- **Autocompletado inteligente**: Basado en tipos registrados dinámicamente
|
|
|
|
|
|
## Tipos Especializados
|
|
|
|
### Redes y Direcciones IP
|
|
```python
|
|
IP4[192.168.1.100/24]
|
|
IP4[10.0.0.1, 8]
|
|
IP4[172.16.0.5, 255.255.0.0]
|
|
IP4Mask[24]
|
|
IP4Mask[255.255.255.0]
|
|
```
|
|
|
|
### Sistemas Numéricos
|
|
```python
|
|
Hex[FF] # Hexadecimal
|
|
Bin[1010] # Binario
|
|
Dec[255] # Decimal
|
|
Chr[A] # Caracteres ASCII
|
|
```
|
|
|
|
### Métodos Disponibles
|
|
Los tipos incluyen métodos específicos accesibles con autocompletado:
|
|
```python
|
|
ip = IP4[192.168.1.100/24]
|
|
ip.NetworkAddress[] # Dirección de red
|
|
ip.Nodes() # Hosts disponibles
|
|
Hex[FF].toDecimal() # Conversiones
|
|
```
|
|
|
|
## Sistema de Ecuaciones
|
|
|
|
### Detección Automática
|
|
```python
|
|
x + 2 = 5 # Detectado automáticamente
|
|
y**2 - 4 = 0 # Agregado al sistema
|
|
sin(x) = 1/2 # Ecuaciones trigonométricas
|
|
```
|
|
|
|
### Resolución
|
|
```python
|
|
solve(x**2 + 2*x - 8, x) # Resolver ecuación específica
|
|
x=? # Atajo para solve(x)
|
|
```
|
|
|
|
## Funciones Matemáticas
|
|
|
|
### Cálculo
|
|
```python
|
|
diff(x**3, x) # Derivadas
|
|
integrate(sin(x), (x, 0, pi)) # Integrales
|
|
limit(sin(x)/x, x, 0) # Límites
|
|
series(exp(x), x, 0, 5) # Series
|
|
```
|
|
|
|
### Álgebra
|
|
```python
|
|
simplify(expr) # Simplificación
|
|
expand((x+1)**3) # Expansión
|
|
factor(x**2-1) # Factorización
|
|
solve([eq1, eq2], [x, y]) # Sistemas
|
|
```
|
|
|
|
### Matrices
|
|
```python
|
|
Matrix([[1, 2], [3, 4]]) # Crear matriz
|
|
det(M) # Determinante
|
|
inv(M) # Inversa
|
|
```
|
|
|
|
## Resultados Interactivos
|
|
|
|
Los siguientes resultados son clickeables en la interfaz:
|
|
- **📊 Ver Plot**: Abre matplotlib para gráficas
|
|
- **📋 Ver Matriz**: Vista expandida con operaciones
|
|
- **📋 Ver Lista**: Contenido completo de listas largas
|
|
- **🔍 Ver Detalles**: Información completa de objetos
|
|
|
|
## Plotting
|
|
|
|
```python
|
|
plot(sin(x), (x, -2*pi, 2*pi)) # Plot 2D
|
|
plot3d(x**2 + y**2, (x, -5, 5), (y, -5, 5)) # Plot 3D
|
|
```
|
|
|
|
## Variables y Símbolos
|
|
|
|
Todas las variables son símbolos SymPy automáticamente:
|
|
```python
|
|
x = 5 # x es Symbol('x') con valor 5
|
|
y = x + 2 # y es 7 (evaluado)
|
|
z = x + a # z es Symbol('x') + Symbol('a') (simbólico)
|
|
```
|
|
|
|
## Interfaz de Usuario
|
|
|
|
### Paneles
|
|
- **Izquierdo**: Entrada de código
|
|
- **Derecho**: Resultados con colores y elementos interactivos
|
|
|
|
### Autocompletado
|
|
- Escribir `.` después de cualquier objeto muestra métodos disponibles
|
|
- El sistema usa tipos registrados dinámicamente
|
|
- Funciona con objetos SymPy y tipos personalizados
|
|
|
|
### Menús
|
|
- **Archivo**: Nuevo, Cargar, Guardar
|
|
- **Editar**: Limpiar, operaciones CAS
|
|
- **CAS**: Variables, ecuaciones, resolver sistema
|
|
- **Tipos**: Información de tipos, recargar sistema
|
|
- **Ayuda**: Guías y referencia
|
|
|
|
## Sistema de Tipos Dinámico
|
|
|
|
### Auto-descubrimiento
|
|
Los tipos se cargan automáticamente desde `custom_types/`:
|
|
- Archivos `*_type.py` son detectados automáticamente
|
|
- Cada archivo define clases y función `register_classes_in_module()`
|
|
- Sistema modular y extensible sin modificar código central
|
|
|
|
### Información de Tipos
|
|
Use **Menú Tipos → Información de tipos** para ver:
|
|
- Clases registradas disponibles
|
|
- Sintaxis de corchetes soportada
|
|
- Métodos de cada tipo
|
|
|
|
### Recargar Tipos
|
|
**Menú Tipos → Recargar tipos** para desarrollo en tiempo real.
|
|
|
|
## Casos de Uso
|
|
|
|
### Análisis de Redes
|
|
```python
|
|
network = IP4[192.168.0.0/24]
|
|
host = IP4[192.168.0.100/24]
|
|
network.Nodes() # Hosts disponibles
|
|
host.NetworkAddress[] # Dirección de red
|
|
```
|
|
|
|
### Conversiones Numéricas
|
|
```python
|
|
Hex[FF].toDecimal() # 255
|
|
Dec[66].toChr() # Chr('B')
|
|
```
|
|
|
|
### Análisis Matemático
|
|
```python
|
|
f = sin(x) * exp(-x**2/2)
|
|
df_dx = diff(f, x) # Derivada
|
|
critical_points = solve(df_dx, x) # Puntos críticos
|
|
plot(f, df_dx, (x, -3, 3)) # Visualización
|
|
```
|
|
|
|
## Extensibilidad
|
|
|
|
### Crear Nuevos Tipos
|
|
1. Crear archivo en `custom_types/nuevo_type.py`
|
|
2. Definir clase heredando de `ClassBase` o `SympyClassBase`
|
|
3. Implementar función `register_classes_in_module()`
|
|
4. El sistema detecta automáticamente el nuevo tipo
|
|
|
|
### Ejemplo de Estructura
|
|
```python
|
|
# custom_types/ejemplo_type.py
|
|
from sympy_Base import SympyClassBase
|
|
|
|
class Class_Ejemplo(SympyClassBase):
|
|
def __init__(self, value):
|
|
super().__init__(processed_value, original_str)
|
|
|
|
@staticmethod
|
|
def Helper(input_str):
|
|
return "Ayuda para Ejemplo"
|
|
|
|
@staticmethod
|
|
def PopupFunctionList():
|
|
return [("metodo", "Descripción del método")]
|
|
|
|
def register_classes_in_module():
|
|
return [("Ejemplo", Class_Ejemplo, "SympyClassBase", {})]
|
|
```
|
|
|
|
## Resolución de Problemas
|
|
|
|
### Errores Comunes
|
|
- **Dependencias faltantes**: Ejecutar `pip install sympy matplotlib numpy`
|
|
- **tkinter en Linux**: `sudo apt-get install python3-tk`
|
|
- **Sintaxis**: Usar `Tipo[args]` no `Tipo("args")`
|
|
|
|
### Performance
|
|
- Expresiones complejas pueden ser lentas en SymPy
|
|
- Plots 3D requieren tiempo de renderizado
|
|
- Matrices grandes consumen memoria
|
|
|
|
### Debugging
|
|
- Los logs se guardan en `logs/`
|
|
- Usar **Menú Tipos → Información** para verificar tipos cargados
|
|
- Verificar `custom_types/` para tipos personalizados
|
|
|
|
## Arquitectura
|
|
|
|
### Componentes Principales
|
|
- **type_registry.py**: Sistema de auto-descubrimiento
|
|
- **main_evaluation.py**: Motor CAS híbrido
|
|
- **tl_bracket_parser.py**: Parser de sintaxis con corchetes
|
|
- **tl_popup.py**: Resultados interactivos
|
|
- **main_calc_app.py**: Aplicación principal
|
|
|
|
### Flujo de Ejecución
|
|
1. Auto-descubrimiento de tipos en `custom_types/`
|
|
2. Registro dinámico de clases y métodos
|
|
3. Parser convierte sintaxis con corchetes
|
|
4. Motor SymPy evalúa expresiones
|
|
5. Resultados se presentan interactivamente
|
|
|
|
---
|
|
|
|
**Calculadora MAV - CAS Híbrido**
|
|
*Sistema extensible para cálculo matemático y análisis especializado* |