Opened 2 years ago

# More functionalities for bases of free modules and vector frames — at Version 3

Reported by: Owned by: egourgoulhon major sage-8.2 geometry basis, vector frame, manifold, free moduie tscrim Eric Gourgoulhon N/A public/manifolds/more_basis_flexibility (Commits) 01681b8f3f739e56962f1ae215a098e706a67ee7

This ticket provides more flexibility in the choice of symbols and indices for bases of free modules of finite rank and, consequently, for vector frames on manifolds. In particular, the labels of the basis elements are no longer necessarily integers and can be customized, for instance:

```sage: M = Manifold(3, 'M')
sage: e = M.vector_frame('e', indices=('x', 'y', 'z')); e
Vector frame (M, (e_x,e_y,e_z))
```

The symbol of each element of the basis can also be freely chosen, by providing a tuple of symbols instead of a single string; it is then mandatory to specify as well some symbols for the dual coframe:

```sage: e = M.vector_frame(('a', 'b', 'c'), symbol_dual=('A', 'B', 'C')); e
Vector frame (M, (a,b,c))
sage: e[0]
Vector field a on the 3-dimensional differentiable manifold M
sage: e.coframe()
Coframe (M, (A,B,C))
sage: e.coframe()[0]
1-form A on the 3-dimensional differentiable manifold M
```

Besides, the slice operator is introduced for bases; it is now possible to write

```sage: e[:]
(Vector field a on the 3-dimensional differentiable manifold M,
Vector field b on the 3-dimensional differentiable manifold M,
Vector field c on the 3-dimensional differentiable manifold M)
```

Internally, some refactoring of code has been performed. In particular, by renaming the `FreeModuleCoBasis`'s attribute `_form` (the tuple containing the cobasis elements) to `_vec`, so that it matches the name of the `FreeModuleBasis`'s attribute storing the basis elements, it has been possible to factor the method ` __getitem__` to the ABC `Basis_abstract`. Another improvement is getting rid of all methods `_init_dual_basis` in classes `FreeModuleBasis`, `VectorFrame` and `CoordFrame` thanks to the introduction of the class attribute `_cobasis_class`.

The functionalities introduced here provide a better user interface for #24623.

This work is part of the SageManifolds project, see #18528 for an overview.

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

• Branch set to public/manifolds/more_basis_flexibility
• Commit set to 01681b8f3f739e56962f1ae215a098e706a67ee7

New commits:

 ​a527e8e `First draft adding more flexibility in symbols of free module bases and vector frames` ​2d43a23 `More refactoring in vector frames` ​0840d54 `More work on vector frames` ​01681b8 `Add documentation for new options of vector frames`