Skip to content
This repository has been archived by the owner on Jan 30, 2023. It is now read-only.

Commit

Permalink
Unicode symbol 2202 (partial) for the text display of coordinate frames
Browse files Browse the repository at this point in the history
  • Loading branch information
egourgoulhon committed Jun 29, 2021
1 parent da8893f commit 2a23cb5
Show file tree
Hide file tree
Showing 36 changed files with 613 additions and 604 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ while there are five vector frames defined on `\mathbb{E}^3`::

sage: E.frames()
[Coordinate frame (E^3, (e_x,e_y,e_z)),
Coordinate frame (E^3, (d/dr,d/dth,d/dph)),
Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph)),
Vector frame (E^3, (e_r,e_th,e_ph)),
Coordinate frame (E^3, (d/drh,d/dph,d/dz)),
Coordinate frame (E^3, (∂/∂rh,∂/∂ph,∂/∂z)),
Vector frame (E^3, (e_rh,e_ph,e_z))]

Indeed, there are two frames associated with each of the three coordinate
Expand All @@ -85,9 +85,9 @@ On the other side, the coordinate frames `\left(\frac{\partial}{\partial r},
coordinate charts::

sage: spherical.frame()
Coordinate frame (E^3, (d/dr,d/dth,d/dph))
Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph))
sage: cylindrical.frame()
Coordinate frame (E^3, (d/drh,d/dph,d/dz))
Coordinate frame (E^3, (∂/∂rh,∂/∂ph,∂/∂z))


Charts as maps `\mathbb{E}^3 \rightarrow \mathbb{R}^3`
Expand Down Expand Up @@ -346,9 +346,9 @@ vector frames defined on `\mathbb{E}^3`::

sage: XE.bases()
[Coordinate frame (E^3, (e_x,e_y,e_z)),
Coordinate frame (E^3, (d/dr,d/dth,d/dph)),
Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph)),
Vector frame (E^3, (e_r,e_th,e_ph)),
Coordinate frame (E^3, (d/drh,d/dph,d/dz)),
Coordinate frame (E^3, (∂/∂rh,∂/∂ph,∂/∂z)),
Vector frame (E^3, (e_rh,e_ph,e_z))]


Expand Down Expand Up @@ -385,9 +385,9 @@ The bases on `T_p\mathbb{E}^3` are inherited from the vector frames of

sage: Tp.bases()
[Basis (e_x,e_y,e_z) on the Tangent space at Point p on the Euclidean space E^3,
Basis (d/dr,d/dth,d/dph) on the Tangent space at Point p on the Euclidean space E^3,
Basis (∂/∂r,∂/∂th,∂/∂ph) on the Tangent space at Point p on the Euclidean space E^3,
Basis (e_r,e_th,e_ph) on the Tangent space at Point p on the Euclidean space E^3,
Basis (d/drh,d/dph,d/dz) on the Tangent space at Point p on the Euclidean space E^3,
Basis (∂/∂rh,∂/∂ph,∂/∂z) on the Tangent space at Point p on the Euclidean space E^3,
Basis (e_rh,e_ph,e_z) on the Tangent space at Point p on the Euclidean space E^3]

For instance, we have::
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ At this stage, `\mathbb{E}^3` is endowed with three vector frames::

sage: E.frames()
[Coordinate frame (E^3, (e_x,e_y,e_z)),
Coordinate frame (E^3, (d/dr,d/dth,d/dph)),
Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph)),
Vector frame (E^3, (e_r,e_th,e_ph))]

The second one is the *coordinate* frame `\left(\frac{\partial}{\partial r},
Expand Down Expand Up @@ -254,9 +254,9 @@ chart ``spherical``)::

sage: for vec in spherical_frame:
....: vec.display(spherical.frame(), spherical)
e_r = d/dr
e_th = 1/r d/dth
e_ph = 1/(r*sin(th)) d/dph
e_r = ∂/∂r
e_th = 1/r ∂/∂th
e_ph = 1/(r*sin(th)) ∂/∂ph


Introducing cylindrical coordinates
Expand Down Expand Up @@ -299,9 +299,9 @@ There are now five vector frames defined on `\mathbb{E}^3`::

sage: E.frames()
[Coordinate frame (E^3, (e_x,e_y,e_z)),
Coordinate frame (E^3, (d/dr,d/dth,d/dph)),
Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph)),
Vector frame (E^3, (e_r,e_th,e_ph)),
Coordinate frame (E^3, (d/drh,d/dph,d/dz)),
Coordinate frame (E^3, (∂/∂rh,∂/∂ph,∂/∂z)),
Vector frame (E^3, (e_rh,e_ph,e_z))]

The orthonormal frame associated with cylindrical coordinates is
Expand Down Expand Up @@ -359,9 +359,9 @@ chart ``cylindrical``)::

sage: for vec in cylindrical_frame:
....: vec.display(cylindrical.frame(), cylindrical)
e_rh = d/drh
e_ph = 1/rh d/dph
e_z = d/dz
e_rh = ∂/∂rh
e_ph = 1/rh ∂/∂ph
e_z = ∂/∂z


How to evaluate the coordinates of a point in various systems
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ The coordinate ranges are::
`(e_r, e_\theta, e_\phi)` associated with spherical coordinates::

sage: E.frames()
[Coordinate frame (E^3, (d/dr,d/dth,d/dph)),
[Coordinate frame (E^3, (∂/∂r,∂/∂th,∂/∂ph)),
Vector frame (E^3, (e_r,e_th,e_ph))]

In the above output, ``(d/dr,d/dth,d/dph)`` =
In the above output, ``(∂/∂r,∂/∂th,∂/∂ph)`` =
`\left(\frac{\partial}{\partial r}, \frac{\partial}{\partial\theta}, \frac{\partial}{\partial \phi}\right)`
is the *coordinate* frame associated with `(r,\theta,\phi)`; it is
not an orthonormal frame and will not be used below. The default frame is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ while there are three vector frames defined on `\mathbb{E}^2`::

sage: E.frames()
[Coordinate frame (E^2, (e_x,e_y)),
Coordinate frame (E^2, (d/dr,d/dph)),
Coordinate frame (E^2, (∂/∂r,∂/∂ph)),
Vector frame (E^2, (e_r,e_ph))]

Indeed, there are two frames associated with polar coordinates: the coordinate
Expand Down Expand Up @@ -621,7 +621,7 @@ vector frames defined on `\mathbb{E}^2`::

sage: XE.bases()
[Coordinate frame (E^2, (e_x,e_y)),
Coordinate frame (E^2, (d/dr,d/dph)),
Coordinate frame (E^2, (∂/∂r,∂/∂ph)),
Vector frame (E^2, (e_r,e_ph))]


Expand Down
90 changes: 45 additions & 45 deletions src/sage/manifolds/differentiable/affine_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,17 +135,17 @@ class AffineConnection(SageObject):
sage: nab[1,1,2], nab[3,2,3] = x^2, y*z # Gamma^1_{12} = x^2, Gamma^3_{23} = yz
sage: nab._coefficients
{Coordinate frame (M, (d/dx,d/dy,d/dz)): 3-indices components w.r.t.
Coordinate frame (M, (d/dx,d/dy,d/dz))}
{Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z)): 3-indices components w.r.t.
Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z))}
If not the default one, the vector frame w.r.t. which the connection
coefficients are defined can be specified as the first argument inside the
square brackets; hence the above definition is equivalent to::
sage: nab[c_xyz.frame(), 1,1,2], nab[c_xyz.frame(),3,2,3] = x^2, y*z
sage: nab._coefficients
{Coordinate frame (M, (d/dx,d/dy,d/dz)): 3-indices components w.r.t.
Coordinate frame (M, (d/dx,d/dy,d/dz))}
{Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z)): 3-indices components w.r.t.
Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z))}
Unset components are initialized to zero::
Expand Down Expand Up @@ -267,19 +267,19 @@ class AffineConnection(SageObject):
sage: a = M.vector_field({eU: [-y,x]}, name='a')
sage: a.add_comp_by_continuation(eV, W, c_uv)
sage: a.display(eU)
a = -y d/dx + x d/dy
a = -y ∂/∂x + x ∂/∂y
sage: a.display(eV)
a = v d/du - u d/dv
a = v ∂/∂u - u ∂/∂v
sage: da = nab(a) ; da
Tensor field nabla(a) of type (1,1) on the 2-dimensional differentiable
manifold M
sage: da.display(eU)
nabla(a) = -x*y d/dx⊗dx - d/dx⊗dy + d/dy⊗dx - x*y^2 d/dy⊗dy
nabla(a) = -x*y ∂/∂x⊗dx - ∂/∂x⊗dy + ∂/∂y⊗dx - x*y^2 ∂/∂y⊗dy
sage: da.display(eV)
nabla(a) = (-1/16*u^3 + 1/16*u^2*v + 1/16*(u + 2)*v^2 - 1/16*v^3 - 1/8*u^2) d/du⊗du
+ (1/16*u^3 - 1/16*u^2*v - 1/16*(u - 2)*v^2 + 1/16*v^3 - 1/8*u^2 + 1) d/du⊗dv
+ (1/16*u^3 - 1/16*u^2*v - 1/16*(u - 2)*v^2 + 1/16*v^3 - 1/8*u^2 - 1) d/dv⊗du
+ (-1/16*u^3 + 1/16*u^2*v + 1/16*(u + 2)*v^2 - 1/16*v^3 - 1/8*u^2) d/dv⊗dv
nabla(a) = (-1/16*u^3 + 1/16*u^2*v + 1/16*(u + 2)*v^2 - 1/16*v^3 - 1/8*u^2) ∂/∂u⊗du
+ (1/16*u^3 - 1/16*u^2*v - 1/16*(u - 2)*v^2 + 1/16*v^3 - 1/8*u^2 + 1) ∂/∂u⊗dv
+ (1/16*u^3 - 1/16*u^2*v - 1/16*(u - 2)*v^2 + 1/16*v^3 - 1/8*u^2 - 1) ∂/∂v⊗du
+ (-1/16*u^3 + 1/16*u^2*v + 1/16*(u + 2)*v^2 - 1/16*v^3 - 1/8*u^2) ∂/∂v⊗dv
A few tests::
Expand Down Expand Up @@ -317,19 +317,19 @@ class AffineConnection(SageObject):
sage: a = M.vector_field({eU: [-y,x]}, name='a')
sage: a.add_comp_by_continuation(eV, W, c_uv)
sage: a.display(eU)
a = -y d/dx + x d/dy
a = -y ∂/∂x + x ∂/∂y
sage: a.display(eV)
a = v d/du - u d/dv
a = v ∂/∂u - u ∂/∂v
sage: da = nab(a) ; da
Tensor field nabla(a) of type (1,1) on the 2-dimensional differentiable
manifold M
sage: da.display(eU)
nabla(a) = -x*y d/dx⊗dx - d/dx⊗dy + d/dy⊗dx - x*y**2 d/dy⊗dy
nabla(a) = -x*y ∂/∂x⊗dx - ∂/∂x⊗dy + ∂/∂y⊗dx - x*y**2 ∂/∂y⊗dy
sage: da.display(eV)
nabla(a) = (-u**3/16 + u**2*v/16 - u**2/8 + u*v**2/16 - v**3/16 + v**2/8) d/du⊗du
+ (u**3/16 - u**2*v/16 - u**2/8 - u*v**2/16 + v**3/16 + v**2/8 + 1) d/du⊗dv
+ (u**3/16 - u**2*v/16 - u**2/8 - u*v**2/16 + v**3/16 + v**2/8 - 1) d/dv⊗du
+ (-u**3/16 + u**2*v/16 - u**2/8 + u*v**2/16 - v**3/16 + v**2/8) d/dv⊗dv
nabla(a) = (-u**3/16 + u**2*v/16 - u**2/8 + u*v**2/16 - v**3/16 + v**2/8) ∂/∂u⊗du
+ (u**3/16 - u**2*v/16 - u**2/8 - u*v**2/16 + v**3/16 + v**2/8 + 1) ∂/∂u⊗dv
+ (u**3/16 - u**2*v/16 - u**2/8 - u*v**2/16 + v**3/16 + v**2/8 - 1) ∂/∂v⊗du
+ (-u**3/16 + u**2*v/16 - u**2/8 + u*v**2/16 - v**3/16 + v**2/8) ∂/∂v⊗dv
To make affine connections hashable, they have to be set immutable before::
Expand Down Expand Up @@ -612,7 +612,7 @@ def _new_coef(self, frame):
sage: X.<x,y> = M.chart()
sage: nab = M.affine_connection('nabla', latex_name=r'\nabla')
sage: nab._new_coef(X.frame())
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y))
"""
from sage.tensor.modules.comp import Components
Expand Down Expand Up @@ -659,11 +659,11 @@ def coef(self, frame=None):
sage: nab = M.affine_connection('nabla', r'\nabla')
sage: nab[1,1,2], nab[3,2,3] = x^2, y*z # Gamma^1_{12} = x^2, Gamma^3_{23} = yz
sage: nab.coef()
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy,d/dz))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z))
sage: type(nab.coef())
<class 'sage.tensor.modules.comp.Components'>
sage: M.default_frame()
Coordinate frame (M, (d/dx,d/dy,d/dz))
Coordinate frame (M, (∂/∂x,∂/∂y,∂/∂z))
sage: nab.coef() is nab.coef(c_xyz.frame())
True
sage: nab.coef()[:] # full list of coefficients:
Expand Down Expand Up @@ -735,9 +735,9 @@ class :class:`~sage.tensor.modules.comp.Components`; if such
sage: X.<x,y> = M.chart()
sage: nab = M.affine_connection('nabla', latex_name=r'\nabla')
sage: eX = X.frame(); eX
Coordinate frame (M, (d/dx,d/dy))
Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.set_coef(eX)
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.set_coef(eX)[1,2,1] = x*y
sage: nab.display(eX)
Gam^x_yx = x*y
Expand All @@ -747,7 +747,7 @@ class :class:`~sage.tensor.modules.comp.Components`; if such
sage: nab.set_coef()[1,2,1] = x*y
sage: nab.set_coef()
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.set_coef()[1,2,1] = x*y
sage: nab.display()
Gam^x_yx = x*y
Expand Down Expand Up @@ -836,9 +836,9 @@ class :class:`~sage.tensor.modules.comp.Components`; if such
sage: X.<x,y> = M.chart()
sage: nab = M.affine_connection('nabla', latex_name=r'\nabla')
sage: eX = X.frame(); eX
Coordinate frame (M, (d/dx,d/dy))
Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.add_coef(eX)
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.add_coef(eX)[1,2,1] = x*y
sage: nab.display(eX)
Gam^x_yx = x*y
Expand All @@ -848,7 +848,7 @@ class :class:`~sage.tensor.modules.comp.Components`; if such
sage: nab.add_coef()[1,2,1] = x*y
sage: nab.add_coef()
3-indices components w.r.t. Coordinate frame (M, (d/dx,d/dy))
3-indices components w.r.t. Coordinate frame (M, (∂/∂x,∂/∂y))
sage: nab.add_coef()[1,2,1] = x*y
sage: nab.display()
Gam^x_yx = x*y
Expand Down Expand Up @@ -1457,7 +1457,7 @@ def _common_frame(self, other):
sage: v = M.vector_field()
sage: v[:] = [-y, x]
sage: nab._common_frame(v)
Coordinate frame (M, (d/dx,d/dy))
Coordinate frame (M, (∂/∂x,∂/∂y))
sage: e = M.vector_frame('e')
sage: u = M.vector_field()
sage: u[e,:] = [-3, 2]
Expand Down Expand Up @@ -1773,7 +1773,7 @@ def torsion(self):
sage: nab.torsion() is t # a new computation of the torsion has been made
False
sage: (nab.torsion() - t).display()
(-x - 1) d/dy⊗dx⊗dz + (x + 1) d/dy⊗dz⊗dx
(-x - 1) ∂/∂y⊗dx⊗dz + (x + 1) ∂/∂y⊗dz⊗dx
Another example: torsion of some connection on a non-parallelizable
2-dimensional manifold::
Expand Down Expand Up @@ -1925,18 +1925,18 @@ def riemann(self):
Module T^(1,3)(M) of type-(1,3) tensors fields on the 2-dimensional
differentiable manifold M
sage: r.display(eU)
(x^2*y - x*y^2) d/dx⊗dx⊗dx⊗dy + (-x^2*y + x*y^2) d/dx⊗dx⊗dy⊗dx + d/dx⊗dy⊗dx⊗dy
- d/dx⊗dy⊗dy⊗dx - (x^2 - 1)*y d/dy⊗dx⊗dx⊗dy + (x^2 - 1)*y d/dy⊗dx⊗dy⊗dx
+ (-x^2*y + x*y^2) d/dy⊗dy⊗dx⊗dy + (x^2*y - x*y^2) d/dy⊗dy⊗dy⊗dx
(x^2*y - x*y^2) ∂/∂x⊗dx⊗dx⊗dy + (-x^2*y + x*y^2) ∂/∂x⊗dx⊗dy⊗dx + ∂/∂x⊗dy⊗dx⊗dy
- ∂/∂x⊗dy⊗dy⊗dx - (x^2 - 1)*y ∂/∂y⊗dx⊗dx⊗dy + (x^2 - 1)*y ∂/∂y⊗dx⊗dy⊗dx
+ (-x^2*y + x*y^2) ∂/∂y⊗dy⊗dx⊗dy + (x^2*y - x*y^2) ∂/∂y⊗dy⊗dy⊗dx
sage: r.display(eV)
(1/32*u^3 - 1/32*u*v^2 - 1/32*v^3 + 1/32*(u^2 + 4)*v - 1/8*u - 1/4) d/du⊗du⊗du⊗dv
+ (-1/32*u^3 + 1/32*u*v^2 + 1/32*v^3 - 1/32*(u^2 + 4)*v + 1/8*u + 1/4) d/du⊗du⊗dv⊗du
+ (1/32*u^3 - 1/32*u*v^2 + 3/32*v^3 - 1/32*(3*u^2 - 4)*v - 1/8*u + 1/4) d/du⊗dv⊗du⊗dv
+ (-1/32*u^3 + 1/32*u*v^2 - 3/32*v^3 + 1/32*(3*u^2 - 4)*v + 1/8*u - 1/4) d/du⊗dv⊗dv⊗du
+ (-1/32*u^3 + 1/32*u*v^2 + 5/32*v^3 - 1/32*(5*u^2 + 4)*v + 1/8*u - 1/4) d/dv⊗du⊗du⊗dv
+ (1/32*u^3 - 1/32*u*v^2 - 5/32*v^3 + 1/32*(5*u^2 + 4)*v - 1/8*u + 1/4) d/dv⊗du⊗dv⊗du
+ (-1/32*u^3 + 1/32*u*v^2 + 1/32*v^3 - 1/32*(u^2 + 4)*v + 1/8*u + 1/4) d/dv⊗dv⊗du⊗dv
+ (1/32*u^3 - 1/32*u*v^2 - 1/32*v^3 + 1/32*(u^2 + 4)*v - 1/8*u - 1/4) d/dv⊗dv⊗dv⊗du
(1/32*u^3 - 1/32*u*v^2 - 1/32*v^3 + 1/32*(u^2 + 4)*v - 1/8*u - 1/4) ∂/∂u⊗du⊗du⊗dv
+ (-1/32*u^3 + 1/32*u*v^2 + 1/32*v^3 - 1/32*(u^2 + 4)*v + 1/8*u + 1/4) ∂/∂u⊗du⊗dv⊗du
+ (1/32*u^3 - 1/32*u*v^2 + 3/32*v^3 - 1/32*(3*u^2 - 4)*v - 1/8*u + 1/4) ∂/∂u⊗dv⊗du⊗dv
+ (-1/32*u^3 + 1/32*u*v^2 - 3/32*v^3 + 1/32*(3*u^2 - 4)*v + 1/8*u - 1/4) ∂/∂u⊗dv⊗dv⊗du
+ (-1/32*u^3 + 1/32*u*v^2 + 5/32*v^3 - 1/32*(5*u^2 + 4)*v + 1/8*u - 1/4) ∂/∂v⊗du⊗du⊗dv
+ (1/32*u^3 - 1/32*u*v^2 - 5/32*v^3 + 1/32*(5*u^2 + 4)*v - 1/8*u + 1/4) ∂/∂v⊗du⊗dv⊗du
+ (-1/32*u^3 + 1/32*u*v^2 + 1/32*v^3 - 1/32*(u^2 + 4)*v + 1/8*u + 1/4) ∂/∂v⊗dv⊗du⊗dv
+ (1/32*u^3 - 1/32*u*v^2 - 1/32*v^3 + 1/32*(u^2 + 4)*v - 1/8*u - 1/4) ∂/∂v⊗dv⊗dv⊗du
The same computation parallelized on 2 cores::
Expand Down Expand Up @@ -2150,7 +2150,7 @@ def connection_form(self, i, j, frame=None):
Check of the formula `\omega^i_{\ \, j} = \Gamma^i_{\ \, jk} e^k`:
First on the manifold's default frame (d/dx, d/dy, d:dz)::
First on the manifold's default frame (∂/∂x, ∂/∂y, d:dz)::
sage: dx = M.default_frame().coframe() ; dx
Coordinate coframe (M, (dx,dy,dz))
Expand Down Expand Up @@ -2257,7 +2257,7 @@ def torsion_form(self, i, frame=None):
sage: nab[3,2,1], nab[3,2,2], nab[3,3,3] = x*y+z, z^3 -y^2, x*z^2 - z*y^2
sage: nab.torsion_form(1)
2-form torsion (1) of connection nabla w.r.t. Coordinate frame
(M, (d/dx,d/dy,d/dz)) on the 3-dimensional differentiable manifold M
(M, (∂/∂x,∂/∂y,∂/∂z)) on the 3-dimensional differentiable manifold M
sage: nab.torsion_form(1)[:]
[ 0 -x^2 (y^2 + y)*z]
[ x^2 0 x^3 - x^2 + y^2]
Expand Down Expand Up @@ -2359,10 +2359,10 @@ def curvature_form(self, i, j, frame=None):
sage: nab[3,2,1], nab[3,2,2], nab[3,3,3] = x*y+z, z^3 -y^2, x*z^2 - z*y^2
sage: nab.curvature_form(1,1) # long time
2-form curvature (1,1) of connection nabla w.r.t. Coordinate frame
(M, (d/dx,d/dy,d/dz)) on the 3-dimensional differentiable manifold M
(M, (∂/∂x,∂/∂y,∂/∂z)) on the 3-dimensional differentiable manifold M
sage: nab.curvature_form(1,1).display() # long time (if above is skipped)
curvature (1,1) of connection nabla w.r.t. Coordinate frame
(M, (d/dx,d/dy,d/dz)) = (y^2*z^3 + (x*y^3 - x)*z + 2*x) dx∧dy
(M, (∂/∂x,∂/∂y,∂/∂z)) = (y^2*z^3 + (x*y^3 - x)*z + 2*x) dx∧dy
+ (x^3*z^2 - x*y) dx∧dz + (x^4*y*z^2 - z) dy∧dz
Curvature 2-forms w.r.t. a non-holonomic frame::
Expand All @@ -2371,7 +2371,7 @@ def curvature_form(self, i, j, frame=None):
sage: ch_basis[1,1], ch_basis[2,2], ch_basis[3,3] = y, z, x
sage: e = M.default_frame().new_frame(ch_basis, 'e')
sage: e[1].display(), e[2].display(), e[3].display()
(e_1 = y d/dx, e_2 = z d/dy, e_3 = x d/dz)
(e_1 = y ∂/∂x, e_2 = z ∂/∂y, e_3 = x ∂/∂z)
sage: ef = e.coframe()
sage: ef[1].display(), ef[2].display(), ef[3].display()
(e^1 = 1/y dx, e^2 = 1/z dy, e^3 = 1/x dz)
Expand Down
Loading

0 comments on commit 2a23cb5

Please sign in to comment.