Opened 4 years ago

Closed 4 years ago

# Initializing the components of a tensor field while declaring it

Reported by: Owned by: Eric Gourgoulhon major sage-8.8 geometry tensor field, manifold Travis Scrimshaw Eric Gourgoulhon Travis Scrimshaw N/A 990a858 990a858f1ce18c6537f9c6de7603dcc58f4b9cc2

Currently (Sage 8.7), the definition of a tensor field on a differentiable manifold is a 2-step operation. For instance, for a vector field:

```sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: v = M.vector_field()  # step 1: declaration
sage: v[:] = -y, x          # step 2: initialization of components
sage: v.display()
-y d/dx + x d/dy
```

This ticket adds the possibility to perform the definition in a single step:

```sage: v = M.vector_field(-y, x)
sage: v.display()
-y d/dx + x d/dy
```

Moreover, some flexibility is introduced in passing the components: it can be a list:

```sage: M.vector_field([-y, x]).display()
-y d/dx + x d/dy
```

or more generally any iterable, like a vector of symbolic expressions:

```sage: M.vector_field(vector([-y, x])).display()
-y d/dx + x d/dy
```

The components can also be provided in a vector frame distinct from the default one:

```sage: f = M.vector_frame('f')
sage: M.vector_field(y^2, -1, frame=f).display(f)
y^2 f_0 - f_1
```

An alternative is passing a dictionary, the keys of which are the vector frames in which the components are defined:

```sage: M.vector_field({f: [y^2, -1]}).display(f)
y^2 f_0 - f_1
```

The dictionary is mandatory if the components are given in various frames at once:

```sage: M.vector_field({X.frame(): [-y, x], f: [y^2, -1]}).display(f)
y^2 f_0 - f_1
```

Note that the possibility of initializing the components while declaring a vector field was introduced on Euclidean spaces in #24623. This ticket extends this to any kind of differentiable manifold and any kind of tensor field. Accordingly, the redefinition of the method `vector_field` in the class `EuclideanSpace` has been suppressed: it falls back now to the method `vector_field` of the mother class `DifferentiableManifold`.

Basically the (optional) component initialization is performed by the method `TensorField._init_components`, which is invoked by all the end-user methods devoted to the creation of tensor fields on manifolds, i.e. the methods `automorphism_field`, `diff_form`, `multivector_field`, `one_form`, `sym_bilin_form_field`, `tensor_field` and `vector_field` of class `DifferentiableManifold`.

### comment:1 Changed 4 years ago by Eric Gourgoulhon

Branch: → public/manifolds/tensor_init_comp Travis Scrimshaw added → ce2b064f6be21e4e4b1f321d79fb15725dd8d53c new → needs_review

New commits:

 ​b2a0a7f `Add possibility to initialize the components while creating a vector field` ​96ea4e7 `Add possibility to initialize the components while creating a differential form` ​cc0ebfa `Add possibility to initialize the components while creating a tensor field` ​0b38c84 `Add possibility to initialize the components while creating a field of tangent-space automorphisms` ​22ad0ba `Add possibility to initialize the components while creating a multivector field` ​ce2b064 `Final clean up regarding the initialization of components at tensor field construction`

### comment:2 Changed 4 years ago by Eric Gourgoulhon

Status: needs_review → needs_work

Have to fix some merge conflict with Sage 8.8.beta0.

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

Commit: ce2b064f6be21e4e4b1f321d79fb15725dd8d53c → 990a858f1ce18c6537f9c6de7603dcc58f4b9cc2

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

 ​990a858 `Merge branch 'public/manifolds/tensor_init_comp' of git://trac.sagemath.org/sage into Sage 8.8.beta0`

### comment:4 Changed 4 years ago by Eric Gourgoulhon

Status: needs_work → needs_review

Merge conflict solved.

### comment:5 Changed 4 years ago by Eric Gourgoulhon

Description: modified (diff)

### comment:6 Changed 4 years ago by Travis Scrimshaw

Reviewers: → Travis Scrimshaw needs_review → positive_review

LGTM.

### comment:7 Changed 4 years ago by Eric Gourgoulhon

Thanks for the review!

### comment:8 Changed 4 years ago by Volker Braun

Branch: public/manifolds/tensor_init_comp → 990a858f1ce18c6537f9c6de7603dcc58f4b9cc2 → fixed positive_review → closed
Note: See TracTickets for help on using tickets.