Ask Your Question

Pullback from a transition_map

asked 2018-02-21 18:11:59 -0500

danielvolinski gravatar image

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?



edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2018-02-22 18:01:58 -0500

eric_g gravatar image

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?

edit flag offensive delete link 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)

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



danielvolinski gravatar imagedanielvolinski ( 2018-02-23 08:06:22 -0500 )edit

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.

eric_g gravatar imageeric_g ( 2018-02-23 11:04:41 -0500 )edit

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
eric_g gravatar imageeric_g ( 2018-02-23 11:09:11 -0500 )edit

I understand, thanks!


danielvolinski gravatar imagedanielvolinski ( 2018-02-23 11:34:20 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2018-02-21 18:11:59 -0500

Seen: 74 times

Last updated: Feb 22