from numarray import *
from matplotlib.matlab import *

## web = ((0,1,0,0,0), (0,0,1,0,0), (0,1,0,0,0), (0,1,0,0,0), (0,1,0,1,0))

def pageRank( web, p = 0.85, i = 100 ):
    ## global W, V, D, S
    n = len( web )
    W = array( web, Float )
    V = sum( transpose( W ) )           ## # of outlinks			
    D = (1-p)/n + p * W / V[:,NewAxis]  ## stochastic matrix: link matrix / # of outlinks, factor in damping
    S = ones( ( 1, n ), Float )	        ## start state	
    for i in range( i ):                ## converge!
        S = dot( S, D )
    return S[0]

def normalize( A ):
    return A/sum( A )

## playthings

def pageRanks( web, p = 0.85, n = 100 ):
    r = []
    for i in range( n ):
        r.append( normalize( pageRank( web, 0.85, i )).tolist() )
    return array( r )

def rawRanks( web, p = 0.85, n = 100 ):
    r = []
    for i in range( n ):
        r.append( pageRank( web, 0.85, i ).tolist() )
    return array( r )

def plotAll( A ):
    for i in range( rank( A ) ):
        plot( A[:,i] )

        