|  | import os, sys
import time
import multiprocessing as mp
import numpy as np
import lib
import time
def perm_ryser(a):
    ''' the permanent calculated using the ryser formula. much faster than the naive approach '''
    n,n2=a.shape
    z=np.arange(n)
    irange=xrange(2**n)
    get_index=lambda i: (i & (1 << z)) != 0 
    get_term=lambda index: ((-1)**np.sum(index))*np.prod(np.sum(a[index,:], 0))
    indeces=map(get_index, irange)
    terms=map(get_term, indeces) 
    return np.sum(terms)*((-1)**n)
dimension=9
real=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
imag=np.random.uniform(-1, 1, dimension*dimension).reshape((dimension, dimension))
submatrix=real+1j*imag
#print lib.permanent(submatrix), perm_ryser(submatrix)
#sys.exit(0)
#t=time.clock()
#for i in range(1000):
    #perm_ryser(submatrix)
#t1=time.clock()-t
t=time.clock()
for i in range(1000):
    lib.permanent(submatrix)
t2=time.clock()-t
print t2
#print t1/t2
 |