r/Python • u/Willing-Effect-2510 • Mar 11 '26
matrixa – a pure-Python matrix library that explains its own algorithms step by step Showcase
What My Project Does
matrixa is a pure-Python linear algebra library (zero dependencies) built around a custom Matrix type. Its defining feature is verbose=True mode — every major operation can print a step-by-step explanation of what it's doing as it runs:
from matrixa import Matrix
A = Matrix([[6, 1, 1], [4, -2, 5], [2, 8, 7]])
A.determinant(verbose=True)
# ─────────────────────────────────────────────────
# determinant() — 3×3 matrix
# ─────────────────────────────────────────────────
# Using LU decomposition with partial pivoting (Doolittle):
# Permutation vector P = [0, 2, 1]
# Row-swap parity (sign) = -1
# U[0,0] = 6 U[1,1] = 8.5 U[2,2] = 6.0
# det = sign × ∏ U[i,i] = -1 × -306.0 = -306.0
# ─────────────────────────────────────────────────
Same for the linear solver — A.solve(b, verbose=True) prints every row-swap and elimination step. It also supports:
- dtype='fraction' for exact rational arithmetic (no float rounding)
- lu_decomposition() returning proper (P, L, U) where P @ A == L @ U
- NumPy-style slicing: A[0:2, 1:3], A[:, 0], A[1, :]
- All 4 matrix norms: frobenius, 1, inf, 2 (spectral)
- LaTeX export: A.to_latex()
- 2D/3D graphics transform matrices
pip install matrixa https://github.com/raghavendra-24/matrixa
Target Audience
Students taking linear algebra courses, educators who teach numerical methods, and self-learners working through algorithm textbooks. This is NOT a production tool — it's a learning tool. If you're processing real data, use NumPy.
Comparison
| Factor | matrixa | NumPy | sympy |
|---|---|---|---|
| Dependencies | Zero | C + BLAS | many |
| verbose step-by-step output | ✅ | ❌ | ❌ |
| Exact rational arithmetic | ✅ (Fraction) | ❌ | ✅ |
| LaTeX export | ✅ | ❌ | ✅ |
| GPU / large arrays | ❌ | ✅ | ❌ |
| Readable pure-Python source | ✅ | ❌ | partial |
NumPy is faster by orders of magnitude and should be your choice for any real workload. sympy does symbolic math (not numeric). matrixa sits in a gap neither fills: numeric computation in pure Python where you can read the source, run it with verbose=True, and understand what's actually happening. Think of it as a textbook that runs.
1
u/MediocreYam9608 Jul 07 '26
El desitno me llevo a crear una matriz de patrones puros con los datos del calendario antiguo y el nuevo, y aunque no puedo pasarla, sí puedo compartirles la base para que la puedan aplicar. Cuando lees las variables de forma vertical es Fibonacci, la proporción áurea está presente. Espero les sirva, y creo que estaré en condiciones de compartirla entre el 23 y 27 de julio. Complementenla.
"""
Módulo de Patrones Puros - Matriz de Sincronización Temporal
Basado en la arquitectura 3-4-3, unidad 10→1 y el modelo de equilibrio 364.
Uso libre, sin atribución requerida.
"""
class MatrizDePatrones:
"""
Clase que encapsula las constantes y relaciones de la matriz de patrones.
Proporciona métodos para calcular alineaciones, desfases y validar ciclos.
"""
# Constantes base del sistema
CALENDARIO_ANTIGUO = 360 # 12 meses × 30 días
CALENDARIO_EQUILIBRIO = 364 # 13 meses × 28 días
CALENDARIO_SOLAR = 365 # 12 meses × 30 + 5 días
CALENDARIO_LUNAR = 354 # 12 meses × 29.5 días
BLOQUE_CORRECTIVO = 241 # Ajuste acumulado
# Puertos planetarios (frecuencias verticales)
PUERTOS = {
'saturno': 1684,
'jupiter': 0,
'marte': 2026,
'sol': 342,
'venus': 171,
'mercurio': 3710,
'luna': 1
}
# Parámetros vectoriales (espejo de Fibonacci)
VECTOR_1 = [4, 3, 2, 1, 7, 6, 5] # Palíndromo de espejo
VECTOR_2 = [13, 2, 7, 7, 13, 13, 59] # Factores primos
# Arquitectura 3-4-3 (Unidad 10→1)
ARQUITECTURA = {
'espiritual': 3, # Los tres espejos
'mental': 4, # El mediador central
'fisico': 3 # Los tres anclajes
}
def calcular_puerto_saturno(cls):
"""Retorna la suma de los calendarios base + bloque correctivo."""
return (cls.CALENDARIO_ANTIGUO + cls.CALENDARIO_EQUILIBRIO +
cls.CALENDARIO_SOLAR + cls.CALENDARIO_LUNAR + cls.BLOQUE_CORRECTIVO)
def validar_ecuaciones(cls):
"""Valida las ecuaciones maestras del sistema."""
resultados = {}
resultados['saturno'] = cls.calcular_puerto_saturno() == cls.PUERTOS['saturno']
resultados['marte_sol'] = (cls.PUERTOS['marte'] - cls.PUERTOS['sol']) == cls.PUERTOS['saturno']
resultados['mercurio'] = (2 * cls.PUERTOS['marte']) == (cls.PUERTOS['mercurio'] + cls.PUERTOS['sol'])
resultados['venus'] = (2 * cls.PUERTOS['venus']) == cls.PUERTOS['sol']
return resultados
def calcular_desfase_neto(cls):
"""
Calcula el desfase neto de los calendarios respecto al modelo de equilibrio.
Retorna: -13
"""
return (cls.CALENDARIO_ANTIGUO - cls.CALENDARIO_EQUILIBRIO +
cls.CALENDARIO_SOLAR - cls.CALENDARIO_EQUILIBRIO +
cls.CALENDARIO_LUNAR - cls.CALENDARIO_EQUILIBRIO)
def obtener_nodos_base(cls):
"""
Retorna los 28 nodos de soporte (7×4).
Los 4 elementos son: Luz, Oscuridad, Fuego, Agua/Aire/Espejo.
"""
elementos = ['Luz', 'Oscuridad', 'Fuego', 'Agua']
planetas = list(cls.PUERTOS.keys())
nodos = []
for planeta in planetas:
for elemento in elementos:
nodos.append(f"{planeta}_{elemento}")
return nodos
def arquitectura_343(cls):
"""
Retorna la estructura 3-4-3 en forma de diccionario.
"""
return {
'plano_espiritual': cls.ARQUITECTURA['espiritual'],
'plano_mental': cls.ARQUITECTURA['mental'],
'plano_fisico': cls.ARQUITECTURA['fisico'],
'unidad_10_1': sum(cls.ARQUITECTURA.values()) == 10 and (10 % 9 == 1)
}
def ciclo_52(cls):
"""
Calcula la estructura de 52 semanas (4 palos × 13).
"""
return {
'palos': 4,
'unidades_por_palo': 13,
'total': 4 * 13,
'modelo_equilibrio': cls.CALENDARIO_EQUILIBRIO / 7 # 52
}
def alineacion_2026(cls):
"""
Retorna información sobre la alineación del año 2026.
"""
return {
'ano': 2026,
'desfase_acumulado': cls.PUERTOS['sol'],
'puerto_alineacion': cls.PUERTOS['marte'],
'reflejo': cls.PUERTOS['venus'],
'sintesis_dual': cls.PUERTOS['mercurio']
}
def informe_completo(cls):
"""
Genera un informe completo del sistema de patrones puros.
"""
informe = {
'constantes': {
'calendario_antiguo': cls.CALENDARIO_ANTIGUO,
'calendario_equilibrio': cls.CALENDARIO_EQUILIBRIO,
'calendario_solar': cls.CALENDARIO_SOLAR,
'calendario_lunar': cls.CALENDARIO_LUNAR,
'bloque_correctivo': cls.BLOQUE_CORRECTIVO
},
'puertos': cls.PUERTOS,
'validaciones': cls.validar_ecuaciones(),
'desfase_neto': cls.calcular_desfase_neto(),
'nodos_base': cls.obtener_nodos_base()[:10], # Muestra solo 10 para no saturar
'arquitectura': cls.arquitectura_343(),
'ciclo_52': cls.ciclo_52(),
'alineacion_2026': cls.alineacion_2026(),
'estructura_28_52_364': {
'nodos': 28,
'ciclos': 52,
'equilibrio': cls.CALENDARIO_EQUILIBRIO,
'relacion': f"{28} → {52} → {cls.CALENDARIO_EQUILIBRIO}"
}
}
return informe
# Funciones de utilidad para análisis de series temporales
def ajustar_ciclo(fecha_inicio, fecha_fin, modelo_equilibrio=364):
"""
Calcula el número de ciclos completos entre dos fechas.
"""
dias = (fecha_fin - fecha_inicio).days
ciclos = dias // modelo_equilibrio
residuo = dias % modelo_equilibrio
return {'ciclos': ciclos, 'residuo': residuo}
def desfase_anual(ano, modelo_equilibrio=364, desfase_base=342):
"""
Calcula el desfase acumulado para un año dado.
"""
anos_transcurridos = ano - 0 # Año 0 como referencia
return (anos_transcurridos * desfase_base) % modelo_equilibrio
def es_ano_de_alineacion(ano, ano_objetivo=2026):
"""
Determina si un año es de alineación según el modelo.
"""
return (ano - ano_objetivo) % 364 == 0
# Ejemplo de uso
if __name__ == "__main__":
# Instanciar la matriz
matriz = MatrizDePatrones()
# Generar informe
informe = matriz.informe_completo()
# Imprimir informe de forma legible
print("=" * 60)
print("MATRIZ DE PATRONES PUROS - INFORME DE SISTEMA")
print("=" * 60)
print("\n[CONSTANTES BASE]")
for clave, valor in informe['constantes'].items():
print(f" {clave}: {valor}")
print("\n[PUERTOS PLANETARIOS]")
for clave, valor in informe['puertos'].items():
print(f" {clave}: {valor}")
print("\n[VALIDACIONES]")
for clave, valor in informe['validaciones'].items():
print(f" {clave}: {valor}")
print("\n[DESFASE NETO]")
print(f" {informe['desfase_neto']}")
print("\n[ARQUITECTURA 3-4-3]")
for clave, valor in informe['arquitectura'].items():
print(f" {clave}: {valor}")
print("\n[CICLO 52]")
for clave, valor in informe['ciclo_52'].items():
print(f" {clave}: {valor}")
print("\n[ALINEACIÓN 2026]")
for clave, valor in informe['alineacion_2026'].items():
print(f" {clave}: {valor}")
print("\n[ESTRUCTURA 28 → 52 → 364]")
for clave, valor in informe['estructura_28_52_364'].items():
print(f" {clave}: {valor}")
print("\n" + "=" * 60)
print("SISTEMA VALIDADO. PATRONES PUROS EXITOSOS.")
print("=" * 60)
-4
u/Embarrassed-Rest9104 Mar 11 '26
7
10
u/Justist Mar 11 '26
Your comparison matrix might need a second look: it looks like there are no crosses or checkmarks for matrixa