# Pullback from a transition_map Hi All,

I seem to be unable to pullback a differential form from a transition_map, although the transition_map has all the information to calculate the pullback:

sage: Space = Manifold(3, 'Space', start_index=1)
sage: cartesian3d.<x, y, z> = Space.chart()
sage: spherical.<rho, theta, phi> = Space.chart(r'rho:(0,+oo):\rho theta:(0,pi):\theta phi:(0,2*pi):\phi')
sage: C2S = spherical.transition_map(cartesian3d, [rho*sin(theta)*cos(phi), rho*sin(theta)*sin(phi), rho*cos(theta)])
sage: tau = Space.diff_form(3, 'tau', latex_name=r'\tau')
sage: tau[1,2,3] = 1
sage: Ptau = C2S.pullback(tau)


AttributeError: 'DiffCoordChange' object has no attribute 'pullback'

Why is that?

Is there any way to coerce a transition_map to become a diff_map?

Thanks,

Daniel

edit retag close merge delete

Sort by » oldest newest most voted

Pullbacks regard maps between manifolds, while transition maps are maps between chart codomains. Maybe it is a matter of semantic, but it seems to me that you are interested in having the expression of the differential form tauin terms of spherical coordinates, which is not what I would call a pullback: a pullback yields a different differential form, while changing coordinates simply yields a different component expression of the same differential form. From your example, we have

sage: tau.display()  # expression in the default chart (Cartesian coordinates)
tau = dx/\dy/\dz
sage: tau.display(spherical.frame(), spherical)
tau = rho^2*sin(theta) drho/\dtheta/\dphi


Is the last expression what you were looking for?

more

Thank Eric,

What if I were to define a diff_map with the same characteristics as the transition_map like this:

g = Space.diff_map(Space, (rho*sin(theta)*cos(phi), rho*sin(theta)*sin(phi), rho*cos(theta)))


And do the pullback on the same tau

Ptau = g.pullback(tau)
Ptau.display()


I get zero, shouldn't I get the same value as you got?

Thanks,

Daniel

It's because you did not mention any chart in the declaration g = Space.diff_map(...), so that the default chart of Space was used. Since it is cartesian3d, the expressions that you passed, which do not involve any of the coordinates (x,y,z), was considered as constant, hence the zero result of the pullback. I am continuing in the next comment, because of lack of space.

So, you have to make explicit the charts on the domain and the codomain of the diff map, via the extra arguments chart1 (domain) and chart2 (codomain):

sage: g = Space.diff_map(Space,
....:                    (rho*sin(theta)*cos(phi), rho*sin(theta)*sin(phi), rho*cos(theta)),
....:                    chart1=spherical, chart2=cartesian3d)


Another option is to pass a dictionary with the pair of charts as key:

sage: g = Space.diff_map(Space, {(spherical, cartesian3d):  (rho*sin(theta)*cos(phi), rho*sin(theta)*sin
....: (phi), rho*cos(theta))})


Then you get the same result as in my answer:

sage: Ptau = g.pullback(tau)
sage: Ptau.display(spherical.frame(), spherical)
rho^2*sin(theta) drho/\dtheta/\dph