#!/usr/bin/env python3

from scipy import linalg
import numpy as np

#square matrix
squareMatrix = np.array([ [5,4], [1,2] ])
print()
print("original / transposed matrix")
print(squareMatrix)
print(squareMatrix.T)
print()

#pass values to det() function
print("determinant    ", linalg.det(squareMatrix))
print()

# inverse 
print("inverse / inverse*matrix")
print(linalg.inv(squareMatrix))
print(squareMatrix.dot(linalg.inv(squareMatrix)))     # matrix multiplication
print()

#eigenvalues and vectors (as complex numbers)
print("eigenvalues | vectors")
eigenValues, eigenVectors = linalg.eig(squareMatrix)  # returning both
for ii in range(N:=len(eigenValues)):
  print(f'{ii:3d}  {np.real(eigenValues[ii]):7.4f} | ', end="")
  for jj in range(N):
    print(f'  {np.real(eigenVectors[ii][jj]):7.4f}', end="")
  print()

