"""
MATH3476 Example 3.1
Illustration of Brauer's theorem
"""
import scipy as sp
from scipy import linalg
import matplotlib.pyplot as plt

def gen_circle(x0,y0,radius):   # generate data for circles
    t = sp.linspace(0,2.*sp.pi,500)
    x = x0 + radius*sp.cos(t)
    y = y0 + radius*sp.sin(t)
    return x,y

A = sp.array([[-4., 3., 3.],[1., -2., 1.],[0., 1., -5.]])

P_row = sp.sum(abs(A),1) - sp.diag(abs(A))   # radius of row discs
print(P_row)

P_column = sp.sum(abs(A),0) - sp.diag(abs(A))   # radius of column discs
print(P_column)

lam = linalg.eigvals(A)   # eigenvalues
print(lam)

#--- Plotting
plt.figure(1); plt.clf()
plt.subplot(1,2,1)   # plot row disks
plt.plot(sp.real(lam),sp.imag(lam),'o')

for i in range(0,3):
    x,y = gen_circle(A[i,i],0,P_row[i])
    plt.plot(x,y)

plt.axhline(linewidth=1,color='k')
plt.axvline(linewidth=1,color='k')
plt.axis('equal')
plt.title('row disks')

plt.subplot(1,2,2)   # plot column disks
plt.plot(sp.real(lam),sp.imag(lam),'o')

for i in range(0,3):
    x,y = gen_circle(A[i,i],0,P_column[i])
    plt.plot(x,y)

plt.axhline(linewidth=1,color='k')
plt.axvline(linewidth=1,color='k')
plt.axis('equal')
plt.title('column disks')

plt.show()
