def compare_eigen_methods():
    """ timing of different eigensolver methods"""
    import scipy.linalg as linalg 
    print '\n *** diagonalize a real symmetric band matrix by different methods ***\n'
    mt=mytimer.create(10)    
    try:
        N=float(sys.argv[1])
        S=float(sys.argv[2])
    except:
        sys.exit('supply N S (command line arguments): matrix dimension N and and number of super-diagonals S ')

    np.random.seed(1)
    a=np.random.random((N,N))

    ab=GMatrix(np.random.random((S+1,N)),storage='upper_banded')
    mt[0].start('lapack symmetric upper banded')
    print ab.store+'\n',ab.eigvals()[:5]
    mt[0].stop()

    a=ab.restore('full')
    mt[1].start('lapack symmetric full')
    print a.store+'\n',a.eigvals()[:5]
    mt[1].stop()

    print 'lingalg'
    mt[2].start('linalg general')
    print np.sort(linalg.eigvals(a.m).real)[:5]
    mt[2].stop()

    mytimer.table()
#! /usr/bin/env python

# inverse iteration 

import sys
import numpy as np
from math import * 
import scipy.linalg as la
import mytimer as mt

# get timer
t=mt.create(10)

eps_machine=1.e-14 # just guessing... 

# numpy print style
np.set_printoptions(precision=12,suppress=True,linewidth=132)

# parameters
M=1
Klu=20
Kpower=1

# input 
try: N=int(sys.argv[1])
except: N=100
try: eguess=float(sys.argv[2])
except: eguess=5.

if M>N: exit('M>N')