# Revision history [back]

This is only a partial answer. Applying Cauchy's residue theorem gives the result you expected:

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: g0 = f.residue(z0==t) + f.residue(z0==0)
sage: g10 = g0.residue(z1==t)
sage: g10 = (g10 * (2*pi*I)^2). simplify_full()
sage: g10
-4*pi^2/(t^2 - 1)


This is only a partial answer. Applying Cauchy's residue theorem gives (the opposite of) the result you expected:

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: fi = f/(z0*z1)
sage: g0 = f.residue(z0==t) fi.residue(z0==t) + f.residue(z0==0)
fi.residue(z0==0)
sage: g10 = g0.residue(z1==t)
g0.residue(z1==t) + g0.residue(z1==0)
sage: g10 = (g10 * (2*pi*I)^2). simplify_full()
(2*pi*I)^2).simplify_full()
sage: g10
-4*pi^2/(t^2 4*pi^2/(t^2 - 1)


do you think is wrong the sign?

This is only a partial answer. Applying Cauchy's residue theorem gives (the opposite of) the result you expected:

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: fi = f/(z0*z1)
sage: g0 = fi.residue(z0==t) + fi.residue(z0==0)
sage: g10 = g0.residue(z1==t) + g0.residue(z1==0)
sage: g10 = (g10 * (2*pi*I)^2).simplify_full()
sage: g10
4*pi^2/(t^2 - 1)


do you think is wrong the sign?

This is only a partial answer. Applying Cauchy's residue theorem gives the result you expected:expected (modulo a sign):

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: fi = f/(z0*z1)
sage: g0 = fi.residue(z0==t) + fi.residue(z0==0)
sage: g10 = g0.residue(z1==t) + g0.residue(z1==0)
sage: g10 = (g10 * (2*pi*I)^2).simplify_full()
sage: g10
4*pi^2/(t^2 - 1)


do you i think is wrong the sign?

the sign is the good one, because the change of variables is rather $\frac{dz_j}{i z_j}$ for $j=0, 1$, isn't it?

moreover, for the integrals in $\theta$ i'm getting $-4\pi^2/t^2$. this is clearly contradictory with the result above and also with the symbolic integrals but evaluated at $t=0$:

sage: (theta0, theta1) = var('theta0, theta1', domain='real')
sage: g = -f.subs({t:0, z0: exp(I*theta0), z1: exp(I*theta1)})
sage: g.integrate(theta0, 0, 2*pi).integrate(theta1, 0, 2*pi).simplify_full()
-4*pi^2


for this, i would suspect some bug is going on with the trigonometric integrals, although i cannot confirm the issue.. maybe try with other interfaces? (algorithm keyword).

Applying Cauchy's residue theorem gives the result you expected (modulo a sign):

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: fi = f/(z0*z1)
sage: g0 = fi.residue(z0==t) + fi.residue(z0==0)
sage: g10 = g0.residue(z1==t) + g0.residue(z1==0)
sage: g10 = (g10 * (2*pi*I)^2).simplify_full()
sage: g10
4*pi^2/(t^2 - 1)


i think the sign is the good one, because the change of variables is rather $\frac{dz_j}{i z_j}$ for $j=0, 1$, isn't it?

moreover, for the integrals in $\theta$ i'm getting $-4\pi^2/t^2$. $-4\pi^2/t^2$, irrespective of the order of integration. but this is clearly contradictory with the result above and also with the symbolic integrals but evaluated at $t=0$:

sage: (theta0, theta1) = var('theta0, theta1', domain='real')
sage: g = -f.subs({t:0, z0: exp(I*theta0), z1: exp(I*theta1)})
sage: g.integrate(theta0, 0, 2*pi).integrate(theta1, 0, 2*pi).simplify_full()
-4*pi^2


for this, i would suspect some bug is going on with the trigonometric integrals, although i cannot confirm the issue.. maybe try with other interfaces? (algorithm keyword).

Applying Cauchy's residue theorem gives the result you expected (modulo a sign):

sage: t = var('t', domain='real'); assume(0<t); assume(t<1)
sage: (z0, z1) = var('z0, z1', domain='complex')
sage: f(t, z0, z1) = (z0*z1 - 1)*(z0 - z1)/((t*z0 - 1)*(t*z1 - 1)*(t - z0)*(t - z1)*z0)
sage: fi = f/(z0*z1)
sage: g0 = fi.residue(z0==t) + fi.residue(z0==0)
sage: g10 = g0.residue(z1==t) + g0.residue(z1==0)
sage: g10 = (g10 * (2*pi*I)^2).simplify_full()
sage: g10
4*pi^2/(t^2 - 1)


i think the sign is the good one, because the change of variables is rather $\frac{dz_j}{i z_j}$ for $j=0, 1$, isn't it?

moreover, for the integrals in $\theta$ i'm getting $-4\pi^2/t^2$, irrespective of the order of integration. but this is clearly contradictory with the result above and also with the symbolic integrals but evaluated pre-evaluated at $t=0$:

sage: (theta0, theta1) = var('theta0, theta1', domain='real')
sage: g = -f.subs({t:0, z0: exp(I*theta0), z1: exp(I*theta1)})
sage: g.integrate(theta0, 0, 2*pi).integrate(theta1, 0, 2*pi).simplify_full()
-4*pi^2


for this, i would suspect some bug is going on with the trigonometric integrals, although i cannot confirm the issue.. maybe try with other interfaces? (algorithm keyword).