I wrote some codes for a computation which involves complex numbers. There is an error when I run
RZagier(2, -N(y[1,3]^(-1)))
The error is: 'numpy.float64' object is not callable
Do you know how to fix it? Thank you very much.
The codes are
from scipy.special import bernoulli, zeta
def RZagier(n,z): # polylogarithm, Clean Single-Valued Polylogarithms paper
w=0
for k in [0..n-1]:
t1=2^k*bernoulli(k)[k]/factorial(k)*polylog( n-k , z )*log(abs(z))^k
w=w+t1
if n%2==0:
r=w.imag()
else:
r=w.real()
r=N(r)
return r
L=[[[[1, 3]], [[[1, 4]], [[2, 3]]], [[[2, 4]], [[1, 3]]]],
[[[2, 4]], [[[2, 5]], [[3, 4]]], [[[3, 5]], [[2, 4]]]],
[[[3, 5]], [[[1, 3]], [[4, 5]]], [[[1, 4]], [[3, 5]]]],
[[[1, 4]], [[[1, 5]], [[2, 4]]], [[[2, 5]], [[1, 4]]]],
[[[2, 5]], [[[1, 2]], [[3, 5]]], [[[2, 5]], [[1, 3]]]]]
k,n=2,5
t0=random.randint(2, 5)
t1= random.randint(3, 9)
x1=complex(t0,t1)
t0=random.randint(2, 5)
t1= random.randint(3, 9)
x2=complex(t0,t1)
r2=Matrix([[1,0,-1,-x1-1,-x1*x2-x1-1],[0,1,1,1,1]])
u=np.zeros((n+1,n+1), dtype=complex)
y=np.zeros((n+1,n+1), dtype=complex)
for i in range(n+1):
for j in range(n+1):
u[i,j]=0
y[i,j]=0
for i in L:
t1=1
#print(i[0])
for j in i[1]:
#print(j)
t1=t1*PluckerToMinors(r2, [1, j])
t2=1
for j in i[2]:
t2=t2*PluckerToMinors(r2, [1, j])
u[i[0][0][0],i[0][0][1]]=t1/t2
y[i[0][0][0],i[0][0][1]]=u[i[0][0][0],i[0][0][1]]/(1-u[i[0][0][0],i[0][0][1]])
#print(t1/t2)
def PluckerToMinors(A,l):
r=l[0]
#print('l[1]',l[1])
for i in l[1]:
#print(i,r)
r=r*Minor(A, ListAToN(1, len(i)), i)
r=r.expand().factor()
return r
def Minor(M, rows, cols):
#r=np.linalg.det(subMatrix(M,rows, cols))
#r=det(subMatrix(M,rows, cols))
r=det(sub_matrix_general(M,rows, cols))
#r=detSelfDefined(subMatrix(M,rows, cols))
return r
def sub_matrix_general(M, c1, c2):
m,n=len(c1),len(c2)
r=Matrix(SR, m, n)
for i in range(m):
for j in range(n):
r[i,j]=M[c1[i]-1, c2[j]-1]
return r