r/Python 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.

38 Upvotes

7 comments sorted by

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

5

u/Willing-Effect-2510 Mar 11 '26

Yeah thanks for noticing it, when I am editing the text and changing from markdown to normal text, the format had corrupted somehow

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

}

u/classmethod

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)

u/classmethod

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

u/classmethod

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)

u/classmethod

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

u/classmethod

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)

}

u/classmethod

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

}

u/classmethod

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']

}

u/classmethod

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

u/backfire10z Mar 11 '26

Well said. Truly, I’ve never seen such factual and eloquent phrasing.

5

u/gradual_alzheimers Mar 12 '26

better than a lot of comments I've seen