Changes between Version 3 and Version 9 of Ticket #28716

11/11/19 22:17:03 (14 months ago)

In the latest version (cf. comment:8 commits)

  • vector_frame() accepts a tuple/list of vector fields as a positional argument, the keyword argument from_family being suppressed, following the suggestion made in comment:4.
  • The ZeroDivisionError that occurs if the vector fields are not linearly independent (the exception is raised when computing the inverse of the automorphism relating the new frame to a previous one) is cached with a proper error message.
  • The documentation of the module sage.manifolds.differentiable.vectorframe has been updated to take into account the new functionality.
  • TensorBundle.local_frame() has been updated to offer the same functionality, following comment:5.
  • A TODO section has been added to TopologicalVectorBundle.local_frame() for implementing a similar functionality with local sections in the future.

I propose to stay here for this ticket, i.e. to let the modification of TopologicalVectorBundle.local_frame() to a future ticket (#28718 ?). This is mostly to avoid code duplication with DifferentiableManifold.vector_frame(), waiting for a clearer view of #28718. Besides, I will be extremely busy in the coming weeks and I would like very much the vector_frame() functionality introduced in the current ticket to make its way in Sage 9.0.


  • Ticket #28716

    • Property Commit changed from 013fb8b665adaf1339372c457fca851246d30a3c to d0ef4d77e44422e25fbdfbc90e9c852387a15033
  • Ticket #28716 – Description

    v3 v9  
    1 This ticket introduces the keyword argument `from_family` to `DifferentiableManifold.vector_frame()` to allow for constructing a vector frame from a spanning family of linearly independent vector fields:
     1This ticket modifies `DifferentiableManifold.vector_frame()` to allow for constructing a vector frame from a spanning family of linearly independent vector fields:
    33sage: M = Manifold(2, 'M')
    55sage: e0 = M.vector_field(1+x^2, 1+y^2)
    66sage: e1 = M.vector_field(2, -x*y)
    7 sage: e = M.vector_frame('e', from_family=(e0, e1)); e
     7sage: e = M.vector_frame('e', (e0, e1)); e
    88Vector frame (M, (e_0,e_1))
    99sage: e[0].display()
    2020sage: e = X.frame().new_frame(aut, 'e')
    22 The introduction of `from_family` in `vector_frame()` simplifies this process.
    2424'''Implementation details:''' such functionality already existed for bases of finite rank free modules; the relevant code is extracted from the method `FiniteRankFreeModule.basis()` and put into the new method `FreeModuleBasis._init_from_family()`, in order to be used in `DifferentiableManifold.vector_frame()` as well.