Opened 7 years ago

Closed 6 years ago

# Differentiable manifolds: tangent spaces

Reported by: Owned by: egourgoulhon egourgoulhon major sage-7.5 geometry differentiable manifold, tangent vector, tangent space mbejger Eric Gourgoulhon, Michal Bejger, Marco Mancini Travis Scrimshaw N/A ff6eb09 ff6eb09b4b0bc582e57f6190f022b91ca1af8835 #15916, #18843

This ticket implements tangent vectors and tangent spaces on differentiable manifolds. This is a follow-up of #18843 within the SageManifolds project (see the metaticket #18528 for an overview). As in #18843, the non-discrete topological field K over which the differentiable manifold is defined is generic, although in most applications, K=R or K=C.

This ticket implements the following Python classes:

• the parent class `TangentSpace` for tangent spaces to a differentiable manifold
• the element class `TangentVector` for tangent vectors to a differentiable manifold

It also implements

• the method `at()` in tensor field classes (introduced in #18843) to take the value of a given tensor field (in particular a vector field) at a given point; the method `at()` is implemented for vector frames and coframes as well.
• the method `plot()` in class `VectorField`, to get some graphical representations of vector fields
• the methods `differential()`, `differential_functions()` and `jacobian_matrix()` to the class `DiffMap` introduced in #18783 (differential of a map between differentiable manifolds at a given point).

Documentation: The reference manual is produced by `sage -docbuild reference/manifolds html` It can also be accessed online at http://sagemanifolds.obspm.fr/doc/19092/reference/manifolds/ More documentation (e.g. example worksheets) can be found here.

### comment:1 Changed 7 years ago by egourgoulhon

• Type changed from PLEASE CHANGE to enhancement

### comment:2 Changed 7 years ago by git

• Commit changed from d5562a2bb8393824f5ec72b7e3a9c43990c8dbaf to 6a1fc978e26942ca6508ab74b79a5553f7f6b7e1

Branch pushed to git repo; I updated commit sha1. New commits:

 ​6a1fc97 `Add method differential() to class DiffMap`

### comment:3 Changed 7 years ago by git

• Commit changed from 6a1fc978e26942ca6508ab74b79a5553f7f6b7e1 to 31d6789687c3970dae930836f0709c44097fe1e5

Branch pushed to git repo; I updated commit sha1. New commits:

 ​31d6789 `Add method plot() to class VectorField; full doctest coverage.`

### comment:4 Changed 7 years ago by egourgoulhon

• Dependencies changed from #15916, #18100, #18843 to #15916, #18843

### comment:5 Changed 7 years ago by git

• Commit changed from 31d6789687c3970dae930836f0709c44097fe1e5 to 04360b0d35b30f1f574c6007c685fead4083871f

Branch pushed to git repo; I updated commit sha1. New commits:

 ​04360b0 `Major improvements in the documentation of diff. manifolds (tangent spaces part)`

### comment:6 Changed 7 years ago by git

• Commit changed from 04360b0d35b30f1f574c6007c685fead4083871f to 513f5ba4d111c59f4eec3ff0ca9832b9355a84ca

Branch pushed to git repo; I updated commit sha1. New commits:

 ​513f5ba `Improve TensorField.__eq__ (case with no open cover known)`

### comment:7 Changed 7 years ago by git

• Commit changed from 513f5ba4d111c59f4eec3ff0ca9832b9355a84ca to e43e03bbbf7c0d90e7df0b4dc3b8767b793d6ab1

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​00c327d `Slight reorganization of the reference manual of topological manifolds (morphisms part)` ​f8d3f27 `Merge #18725 into #18640` ​f2fef7b `Small improvements in the documentation of differentiable manifolds` ​8ab80d8 `Improvement in simplify_sqrt_real(); minor modif. in documentation` ​2f231b6 `Major improvements in the documentation of diff. manifolds (basic part)` ​f0ca2de `Merge #18783 into #18725` ​307e655 `Major improvements in the documentation of diff. manifolds (tensor field part)` ​dc7f7a1 `Improve TensorField.__eq__ (case with no open cover known)` ​4d6f21c `Merge #18843 into #18783` ​e43e03b `Merge #19092 into #18843`

### comment:8 Changed 7 years ago by egourgoulhon

• Description modified (diff)
• Milestone changed from sage-6.9 to sage-6.10
• Status changed from new to needs_review

### comment:9 Changed 7 years ago by git

• Commit changed from e43e03bbbf7c0d90e7df0b4dc3b8767b793d6ab1 to 22923ab262da20f80aaf7bbda21a9dffcb7a4016

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​041a5d1 `Adding p-adics to metric spaces and some cleanup.` ​bfa0cdf `One last doc tweak.` ​d13c368 `Fixing doc of metric spaces.` ​2605c0b `Merge #18529 (Topological manifolds: basics) into #18175 (Implement categories for topological...)` ​6dec6d5 `Implement topological manifolds (basics, #18529) on the new categories for manifolds (#18175)` ​3403978 `Implement top. manifolds (scalar fields, #18640) on the new manifold categories (#18175)` ​b0521ef `Implement top. manifolds (morphisms, #18725) on the new manifold categories (#18175)` ​f643097 `Implement diff. manifolds (basics, #18783) on the new manifold categories (#18175)` ​a527726 `Implement diff. manifolds (tensor fields, #18843) on the new manifold categories (#18175)` ​22923ab `Implement diff. manifolds (tangent spaces, #19092) on the new manifold categories (#18175).`

### comment:10 Changed 6 years ago by git

• Commit changed from 22923ab262da20f80aaf7bbda21a9dffcb7a4016 to 1bf77fddde974ea2faff88b84dad6707b71fcced

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​668bc26 `Remove UniqueRepresentation, leaving only WithEqualityById, for topological manifold homsets` ​6518699 `Introduce the attribute _field_type in class TopologicalManifold to check for real and complex manifolds.` ​22383e6 `Check for real/complex manifold performed on base_field_type() instead of RR/CC` ​66f2c5a `Change function('f', x) to function('f')(x) to accomodate the deprecation warning introduced in #17447` ​a28ed04 `Morphisms of topological manifolds with the use of base_field_type()` ​f31bed1 `Remove UniqueRepresentation from differentiable manifolds` ​0ee4c41 `Tensor fields on differentiable manifolds without unique representation` ​e8f11ff `Fix pickling test in tensor field modules.` ​a967787 `Suppress direct call to _element_constructor_ in tensor field parent classes` ​1bf77fd `Tangent spaces on differentiable manifolds without unique representation`

### comment:11 Changed 6 years ago by git

• Commit changed from 1bf77fddde974ea2faff88b84dad6707b71fcced to 98c603652a66489499acbe6734c19a395ec28b33

Branch pushed to git repo; I updated commit sha1. New commits:

 ​d8397c1 `Merge branch 'public/manifolds/top_manif_basics' of trac.sagemath.org:sage into public/manifolds/top_manif_basics` ​0b08b11 `Some small tweaks as part of the review.` ​d3e5d4d `Revert to UniqueRepresentation for topological manifolds` ​2481359 `Revert to UniqueRepresentation for ScalarFieldAlgebra; better ScalarField constructor` ​0cc06e8 `Revert to UniqueRepresentation for topological manifold homsets` ​322d5bd `Revert to UniqueRepresentation for differentiable manifolds` ​45beae5 `Revert to UniqueRepresentation for differentiable manifolds: tensor fields` ​98c6036 `Revert to UniqueRepresentation for differentiable manifolds: tangent spaces`

### comment:12 Changed 6 years ago by git

• Commit changed from 98c603652a66489499acbe6734c19a395ec28b33 to 347a9cc51c034f406b86af7f2af3ff69cd646de6

Branch pushed to git repo; I updated commit sha1. New commits:

 ​85d03dc `Change the argument type to structure in Manifold` ​5251ef0 `Remove method _test_pickling from class TopologicalManifoldPoint` ​f69c9ee `Fix doctest error in coord_func_symb.py due to #19312 (update to pynac-0.5.2)` ​7889a5d `Change in simplify_sqrt_real to cope with the change of != operator induced by #19312 (Sage 6.10.beta7)` ​e8d2ba6 `Differentiable manifolds: basics with the change in symbolic expression logic induced by #19312 (Sage 6.10.beta7)` ​0d68f86 `Diff. manifolds: tensor fields, with the change in symbolic expression logic induced by #19312 (Sage 6.10.beta7)` ​347a9cc `Diff. manifolds: tangent spaces, with the change in symbolic expression logic induced by #19312 (Sage 6.10.beta7)`

### comment:13 Changed 6 years ago by git

• Commit changed from 347a9cc51c034f406b86af7f2af3ff69cd646de6 to db99641f9960018d52749ce88f1b2f4ad406b03f

Branch pushed to git repo; I updated commit sha1. New commits:

 ​1c1fccc `Parallel plot for Manifold: only 2D. Flat parallelization.` ​9b87ff1 `Vectorfields : plot parallelization improvement and bug corrction.` ​db99641 `Parallel plotting vectorfield: added example`

### comment:14 Changed 6 years ago by git

• Commit changed from db99641f9960018d52749ce88f1b2f4ad406b03f to b07ffd9ef872b5e8a69b4364b5e0132e0b909fbf

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​ce03503 `Scalar fields on topological manifolds: slight improvements in the documentation` ​9d25aa0 `Scalar field algebras with AbstractNamedObject without argument full_name` ​ed4aa58 `ScalarFieldAlgebra does not longer inherit from AbstractNamedObject` ​bc77059 `Morphisms on the refactored topoological manifolds` ​f6c6a34 `Topological manifold morphisms with AbstractNamedObject without full_name` ​2df7af7 `Refactorization of differentiable manifolds, with the mixin class DifferentiableMixin` ​7204572 `Basics of diff. manifolds with AbstractNamedObject without full_name` ​ecfbf2c `Tensor fields on refactored differentiable manifolds` ​8b720a5 `Tensor fields with AbstractNamedObject without full_name` ​b07ffd9 `Tangent spaces on refactored differentiable manifolds`

### comment:15 Changed 6 years ago by git

• Commit changed from b07ffd9ef872b5e8a69b4364b5e0132e0b909fbf to 9fa77c4a7c8b9b1359e82611bae88f76d1e8d098

Branch pushed to git repo; I updated commit sha1. New commits:

 ​3cd03a4 `Add methods lift() and retract() to ManifoldSubset; add method __eq__() in CoordChange` ​984c3c2 `Revert to simple hierarchy for manifold classes` ​c01048f `Scalar fields with the simplified hierarchy for manifold classes` ​c866d6c `Morphisms of topological manifolds with the simplified hierarchy for manifold classes` ​0e04631 `Basics of diff. manifolds with the simplified hierarchy for manifold classes` ​1f226bd `Tensor fields with the simplified hierarchy for manifold classes` ​9fa77c4 `Tangent spaces with the simplified hierarchy for manifold classes`

### comment:16 Changed 6 years ago by egourgoulhon

• Milestone changed from sage-6.10 to sage-7.0

### comment:17 Changed 6 years ago by git

• Commit changed from 9fa77c4a7c8b9b1359e82611bae88f76d1e8d098 to b47f55f7217579acf266da0cad2892f06b329b6b

Branch pushed to git repo; I updated commit sha1. New commits:

 ​8e17d54 `Merge into the latest version of #18529; improve treatment of composite functions in ExpressionNice` ​f00be00 `Topological manifold morphisms: solved merge conflict with Sage 7.1.beta1` ​21b3968 `Basics of diff. manifolds: solve merge conflict with Sage 7.1.beta1` ​8ba4b91 `Tensor fields: solve merge conflict with Sage 7.1.beta1` ​2fad9db `Correct doctest in class DiffFormParal` ​b47f55f `Tangent spaces: solve merge conflict with Sage 7.1.beta1`

### comment:18 Changed 6 years ago by egourgoulhon

• Authors changed from Eric Gourgoulhon, Michal Bejger to Eric Gourgoulhon, Michal Bejger, Marco Mancini

### comment:19 Changed 6 years ago by git

• Commit changed from b47f55f7217579acf266da0cad2892f06b329b6b to 37521ae977dd99057c8a2ab358962c1e70c0dc0c

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​f11df50 `Set CoordFunctionSymbRing in the category of commutative algebras over SR; minor documentation changes` ​f3f5470 `Fixing a (essentially trivial) doctest failure.` ​7b3dab3 `Merge branch 'public/manifolds/top_manif_scalar_fields' of git://trac.sagemath.org/sage into Sage 7.2.rc0` ​9ec7d3e `Python 3 format for print in manifolds` ​d190b37 `Morphisms of topological manifolds with coordinate functions as algebra elements` ​2577fc5 `Fixing a (essentially trivial) doctest failure.` ​7125e29 `Python3 format for print in morphims of topological manifolds` ​bd2f35a `Diff. manifolds with coordinate functions as algebra elements` ​73b4a03 `Tensor fields with with coordinate functions as algebra elements` ​37521ae `Tangent spaces with coordinate functions as algebra elements`

### comment:20 Changed 6 years ago by egourgoulhon

• Milestone changed from sage-7.0 to sage-7.2

### comment:21 Changed 6 years ago by git

• Commit changed from 37521ae977dd99057c8a2ab358962c1e70c0dc0c to 159afb4152f0af6d3968b50fe497e92841e9c7fc

Branch pushed to git repo; I updated commit sha1. New commits:

 ​4fad094 `Merge branch 'public/manifolds/top_manif_morphisms' of trac.sagemath.org:sage into public/manifolds/top_manif_morphisms` ​cfecb18 `Reviewer changes and tweaks for continuous maps ticket.` ​efcb618 `Modify authorship for continuous maps.` ​84051b0 `Merge branch 'public/manifolds/diff_manif_basics' of trac.sagemath.org:sage into public/manifolds/diff_manif_basics` ​97172dd `Basics of differentiable manifolds with changes in morphisms of topological manifolds` ​29832ec `Use @cached_method for VectorFieldModule.identity_map() and AutomorphismFieldGroup.one()` ​159afb4 `Tangent spaces upon latest version of tensor fields`

### comment:22 Changed 6 years ago by git

• Commit changed from 159afb4152f0af6d3968b50fe497e92841e9c7fc to 3b1b794176683401df9d98541f2e0b14c339f228

Branch pushed to git repo; I updated commit sha1. New commits:

 ​2150a43 `Correct doctests in vector fields after the merge of #20770 in sage 7.3.beta3` ​3b1b794 `Fix doctests in tangent spaces after the merge of #20770 in sage 7.3.beta3`

### comment:23 Changed 6 years ago by git

• Commit changed from 3b1b794176683401df9d98541f2e0b14c339f228 to c70792e68e1adcd7451080a567babb1d7f2438d9

Branch pushed to git repo; I updated commit sha1. New commits:

 ​3ab0af0 `Initial reviewer changes.` ​d7ad8e1 `Merge branch 'public/manifolds/diff_manif_tensor_fields' of git://trac.sagemath.org/sage into sage 7.3.beta5` ​dcb08fc `Decrease doctest times in tensor fields; remove xder from the global namespace` ​c70792e `Update tangent spaces to the latest version of #18843 (vector fields)`

### comment:24 Changed 6 years ago by egourgoulhon

• Milestone changed from sage-7.2 to sage-7.4

### comment:25 Changed 6 years ago by git

• Commit changed from c70792e68e1adcd7451080a567babb1d7f2438d9 to 98efa6658daefb2e9d00c674a4d2315bfac608d7

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

 ​88295c6 `Merge branch 'develop' into public/manifolds/diff_manif_tensor_fields` ​58f7fb9 `Merge branch 'develop' into public/manifolds/diff_manif_tensor_fields` ​3e73095 `Merge branch 'develop' into public/manifolds/diff_manif_tensor_fields` ​4955c3c `Final review of everything.` ​7cf4ff4 `Merge branch 'public/manifolds/diff_manif_tensor_fields' of trac.sagemath.org:sage into public/manifolds/diff_manif_tensor_fields` ​58ae506 `Merge branch 'public/manifolds/diff_manif_tensor_fields' of git://trac.sagemath.org/sage into Sage 7.4.beta6` ​8219403 `Fix documentation error; change in TensorField comparison to zero` ​a841f79 `Python 3 compatible syntax in tensor fields` ​5a5f400 `Slight change in TensorField.__eq__ (comparison to zero)` ​98efa66 `Update tangent spaces to the final version of the dependency ticket #18843`

### comment:26 Changed 6 years ago by git

• Commit changed from 98efa6658daefb2e9d00c674a4d2315bfac608d7 to 8205dcac47cb6b3b9b8e3129503d34cea003292e

Branch pushed to git repo; I updated commit sha1. New commits:

 ​8860387 `Add missing reference Lee13` ​8205dca `Update tangent spaces to the last change (adding a missing reference) in the dependency ticket #18843`

### comment:27 Changed 6 years ago by git

• Commit changed from 8205dcac47cb6b3b9b8e3129503d34cea003292e to 785300bff1bdd0c738a53032c34ad0cc65a8f031

Branch pushed to git repo; I updated commit sha1. New commits:

 ​fb7f4dd `Bibliographic references for tensor fields moved to the master file` ​785300b `Bibliographic references for tangent spaces moved to the master file created by #21454`

### comment:28 Changed 6 years ago by git

• Commit changed from 785300bff1bdd0c738a53032c34ad0cc65a8f031 to 567b892cf756d4fafa2a123612f670158c929595

Branch pushed to git repo; I updated commit sha1. New commits:

 ​4ce1118 `Merge branch 'public/manifolds/diff_manif_tangent_spaces' of git://trac.sagemath.org/sage into public/manifolds/diff_manif_tangent_spaces` ​567b892 `Doing some reviewer changes for #19092.`

### comment:29 follow-up: ↓ 33 Changed 6 years ago by tscrim

• Milestone changed from sage-7.4 to sage-7.5
• Reviewers set to Travis Scrimshaw

Okay, I've made it through this one. Mostly it is documentation format changes, but the exception:

For plotting, I used the `@options` for `scale` and `max_range` as these seemed like something a user might want to not have to pass every single time (you change change their default with `v.plot.options`). From the user perspective, nothing really changes unless you explicitly set said default value.

So if you agree with my changes, then you can set a positive review.

### comment:30 Changed 6 years ago by tscrim

I'm handling rebasing #19124 as I'm starting my review of that now.

### comment:31 Changed 6 years ago by git

• Commit changed from 567b892cf756d4fafa2a123612f670158c929595 to 05f8cc7413cad8a9db04b925038f09e27a9e23f8

Branch pushed to git repo; I updated commit sha1. New commits:

 ​05f8cc7 `A little bit of extra cleanup.`

### comment:32 Changed 6 years ago by git

• Commit changed from 05f8cc7413cad8a9db04b925038f09e27a9e23f8 to b4a4530d2b5ca8b43053bffe2511ce7f059b7d62

Branch pushed to git repo; I updated commit sha1. New commits:

 ​23eb9d8 `Correct doctest and documentation in tangent spaces` ​b4a4530 `Use sphinx_plot for 3D plots in the documentation of charts and vector fields`

### comment:33 in reply to: ↑ 29 ; follow-up: ↓ 34 Changed 6 years ago by egourgoulhon

Thank you so much for the review!

In the first commit above (23eb9d8), I've corrected a doctest error and fixed some documentation issue revealed by the patchbot.

In the second commit (b4a4530), I've added sphinx directives to render the 3D plots in the documentation of `VectorField.plot` (as well as in `RealChart.plot`), on the same footing as what is now done in the "3D Graphics" section of the reference manual.

Thanks for the addition of `@options` to `VectorField.plot`; I've added `color` to these options, to be consistent with what is done in `RealChart.plot`. I've also added some documentation about the use of `v.plot.options`.

A question: in the keyword arguments of `VectorField.plot`, you have changed `nb_values` to `number_values`, but it is still `nb_values` in `RealChart.plot`. For consistency, both plot methods should use the same name. It seems that nb is not a standard English abbreviation for number, is it? (I find `number_values` a little bit long, especially that we don't have the TAB completion to type the options).

### comment:34 in reply to: ↑ 33 ; follow-up: ↓ 35 Changed 6 years ago by tscrim

Thank you so much for the review!

Not a problem; sorry it took so long.

A question: in the keyword arguments of `VectorField.plot`, you have changed `nb_values` to `number_values`, but it is still `nb_values` in `RealChart.plot`. For consistency, both plot methods should use the same name. It seems that nb is not a standard English abbreviation for number, is it? (I find `number_values` a little bit long, especially that we don't have the TAB completion to type the options).

Not to my knowledge. The standard abbreviation is "no." (with a period) but "num" has become standard (at least in the programming world), but IMO the verbosity is better. However, you can do tab completion for explicit arguments.

### comment:35 in reply to: ↑ 34 Changed 6 years ago by egourgoulhon

Not to my knowledge. The standard abbreviation is "no." (with a period) but "num" has become standard (at least in the programming world), but IMO the verbosity is better. However, you can do tab completion for explicit arguments.

OK, so let use `number_values` everywhere. I am going to change it in `RealChart.plot`.

Thanks.

### comment:37 Changed 6 years ago by git

• Commit changed from b4a4530d2b5ca8b43053bffe2511ce7f059b7d62 to ff6eb09b4b0bc582e57f6190f022b91ca1af8835

Branch pushed to git repo; I updated commit sha1. New commits:

 ​ff6eb09 `Name of argument 'nb_values' in RealChart.plot changed to 'number_values'.`

### comment:38 Changed 6 years ago by egourgoulhon

Change `nb_values` --> `number_values` done.

### comment:39 follow-up: ↓ 40 Changed 6 years ago by tscrim

• Status changed from needs_review to positive_review

I'm sorry I missed that on the previous ticket. LGTM. Thank you.

### comment:40 in reply to: ↑ 39 Changed 6 years ago by egourgoulhon

Thanks for the review!

### comment:41 Changed 6 years ago by vbraun

• Branch changed from public/manifolds/diff_manif_tangent_spaces to ff6eb09b4b0bc582e57f6190f022b91ca1af8835
• Resolution set to fixed
• Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.