# Automate the code for Topological recursion

Let me start by giving a brief idea of the recursion. This recursion generate bunch of meromorphic function, and the recursion depend on two variables. Let call the variable $g,n$. Let me state the recursion $$W_{g,n}(z_1, \ldots z_n) = Res_{z=0} \left( W_{g-1, n+1} (z,-z,z_2, \ldots ,z_n)\right) + \sum_{g_1 + g_2 = g} \sum_{n_1 +n_2 = n+1} W_{g_1 , n_1}(z, Part1) W_{g_2 , n_2}(-z, Part2)$$ where Part1 and Part2 are disjoint set whose unioun is ${z_2, \ldots , z_n }$ The recursion is on Euler characteristics, so Euler characteristics on the LHS is $2g -2 +n$ and on the RHS notice that for all the tuples $g^{'} , n^{'}$ , $2g^{'} -2 +n^{'}< 2g -2 +n$.

This is continuation of the post I made, we have few examples of computation here of the above definition. https://ask.sagemath.org/question/626...

var('b,z1,z2,z3');

def y(z):
return 2*arcsinh( z / (sqrt(2)*b) ) / sqrt(z^2 + 2*b^2)

def K(z):
return 1 / z / (y(z) - y(-z))

def W02(z1, z2):
return 1 / (z1 - z2)^2

def W03(z1, z2, z3):
var('w03')    # use w03 only locally inside this function
E = ( K(w03) / (w03 - z1) \
* ( W02(w03, z2) * W02(-w03, z3) +
W02(w03, z3) * W02(-w03, z2) )
)

def W11(z1):
var('w11')    # use w11 only locally inside this function
E = K(w11) / (w11 - z1) * W02(w11, -w11)

def W12(z1, z2):
var('w12')    # use w only locally inside this function
E = ( K(w12) / (w12 - z1) \
* ( W03(w12, -w12, z2)
+ W02( w12, z2) * W11(-w12)
+ W02(-w12, z2) * W11( w12) )
)


I want to automatise the above code, so I wrote a pseudo code, if someone can help me to complete it. My code goes as follows

var('b,z1,z2,z3');

def y(z):
return 2*arcsinh( z / (sqrt(2)*b) ) / sqrt(z^2 + 2*b^2)

def K(z):
return 1 / z / (y(z) - y(-z))

def W02(0,2,L):
return 1/(L-L)^2

def W(g,n,L):
var('z,z1')
P=list(var('z_%d' % i) for i in range(2,n+1)); # Set of variable for {z2, \ldots zn}
E = 0
for parts in Partition(n+1,2):
for par in SetPartitions(P,2).list():
E = E + W(g,par,par.append(z))W(0,par.append(-z))

if g > 0:
E = E + W(g-1,n+,L.append(z,-z))