Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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/62686/computing-with-the-residue-in-sagemath/ ``` var('b,z1,z2,z3');

def y(z): return 2arcsinh( 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) ) ) return E.residue(w03 == 0).canonicalize_radical()

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

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) ) ) return E.residue(w12 == 0).canonicalize_radical() ```

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 2arcsinh( 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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

```

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/62686/computing-with-the-residue-in-sagemath/ https://ask.sagemath.org/question/62686/computing-with-the-residue-in-sagemath/

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

def y(z): return 2arcsinh( 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) ) ) return E.residue(w03 == 0).canonicalize_radical()

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

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) ) ) return E.residue(w12 == 0).canonicalize_radical() ```

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 2arcsinh( 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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

```

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/62686/computing-with-the-residue-in-sagemath/

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

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

2*b^2) def K(z): return 1 / z / (y(z) - y(-z))

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

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) ) ) return E.residue(w03 == 0).canonicalize_radical()

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

0).canonicalize_radical() 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) ) ) return E.residue(w12 == 0).canonicalize_radical() ```

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 2arcsinh( 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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

```

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/62686/computing-with-the-residue-in-sagemath/

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

def y(z): return 2arcsinh( z / (sqrt(2)b) ) / sqrt(z^2 + 2*b^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) ) ) return E.residue(w03 == 0).canonicalize_radical() def W11(z1): var('w11') # use w11 only locally inside this function E = K(w11) / (w11 - z1) * W02(w11, -w11) return E.residue(w11 == 0).canonicalize_radical() 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) ) ) return E.residue(w12 == 0).canonicalize_radical() ```

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 2arcsinh( 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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

```

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/62686/computing-with-the-residue-in-sagemath/

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

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

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

def W02(z1, z2): return 1 / (z1 - z2)^2 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) ) ) return E.residue(w03 == 0).canonicalize_radical() 0).canonicalize_radical()

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

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) ) ) return E.residue(w12 == 0).canonicalize_radical() ```0).canonicalize_radical()

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 2arcsinh( 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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

```

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/62686/computing-with-the-residue-in-sagemath/

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

def y(z): return 2arcsinh( y(z):

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

def K(z): 2*b^2)

def K(z):

return 1 / z / (y(z) - y(-z))

y(-z))

def W02(z1, z2): z2):

return 1 / (z1 - z2)^2

z2)^2

def W03(z1, z2, z3): 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) )
      )
  return E.residue(w03 == 0).canonicalize_radical()

def W11(z1): 0).canonicalize_radical()

def W11(z1):

var('w11')    # use w11 only locally inside this function
  E = K(w11) / (w11 - z1) * W02(w11, -w11)
  return E.residue(w11 == 0).canonicalize_radical()

0).canonicalize_radical()

def W12(z1, z2): var('w12') # use w only locally inside this function function

E = ( K(w12) / (w12 - z1) \
        * ( W03(w12, -w12, z2)
            + W02( w12, z2) * W11(-w12)
            + W02(-w12, z2) * W11( w12) )
      )
  return E.residue(w12 == 0).canonicalize_radical()

0).canonicalize_radical()

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 2arcsinh( 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[0]-L[1])^2

def W(g,n,L): 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[0],par.append(z))W(0,par[1].append(-z))


              E = E + W(g,par[0],par.append(z))W(0,par[1].append(-z))


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

 return (K(z)*E).residue(z == 0).canonicalize_radical()

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/62686/computing-with-the-residue-in-sagemath/

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) )
     )

return E.residue(w03 == 0).canonicalize_radical()

def W11(z1):

var('w11')    # use w11 only locally inside this function

E = K(w11) / (w11 - z1) * W02(w11, -w11)

return E.residue(w11 == 0).canonicalize_radical()

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) )
     )

return E.residue(w12 == 0).canonicalize_radical()

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 2arcsinh( y(z):

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

def K(z): 2*b^2)

def K(z):

return 1 / z / (y(z) - y(-z))

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

y(-z))

def W02(0,2,L):

return 1/(L[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))


   if g > 0: 

    E = E + W(g-1,n+,L.append(z,-z))

 return (K(z)*E).residue(z == 0).canonicalize_radical()

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/62686/computing-with-the-residue-in-sagemath/

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

def y(z):

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

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

def K(z):


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

def W02(z1, z2):

z2):
    return 1 / (z1 - z2)^2

def W03(z1, z2, z3):

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) )
      )
  return E.residue(w03 == 0).canonicalize_radical()

def W11(z1):


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

def W12(z1, z2): var('w12') # use w only locally inside this function

function
    E = ( K(w12) / (w12 - z1) \
        * ( W03(w12, -w12, z2)
            + W02( w12, z2) * W11(-w12)
            + W02(-w12, z2) * W11( w12) )
      )
  return E.residue(w12 == 0).canonicalize_radical()

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):

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

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

def K(z):


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

def W02(0,2,L):


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

def W(g,n,L):


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[0],par.append(z))W(0,par[1].append(-z))

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

  return (K(z)*E).residue(z == 0).canonicalize_radical()

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/62686/computing-with-the-residue-in-sagemath/

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) )
         )
    return E.residue(w03 == 0).canonicalize_radical()

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

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) )
         )
    return E.residue(w12 == 0).canonicalize_radical()

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[0]-L[1])^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[0],par.append(z))W(0,par[1].append(-z))

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

     return (K(z)*E).residue(z == 0).canonicalize_radical()
click to hide/show revision 10
None

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/62686/computing-with-the-residue-in-sagemath/

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) )
         )
    return E.residue(w03 == 0).canonicalize_radical()

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

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) )
         )
    return E.residue(w12 == 0).canonicalize_radical()

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');
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[0]-L[1])^2
1/(L[0]-L[1])**2

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

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

     return (K(z)*E).residue(z == 0).canonicalize_radical()