#18529: Topological manifolds: basics
-------------------------------------+-------------------------------------
       Reporter:  egourgoulhon       |        Owner:  egourgoulhon
           Type:  enhancement        |       Status:  needs_info
       Priority:  major              |    Milestone:  sage-6.10
      Component:  geometry           |   Resolution:
       Keywords:  topological        |    Merged in:
  manifolds                          |    Reviewers:  Travis Scrimshaw
        Authors:  Eric Gourgoulhon,  |  Work issues:
  Travis Scrimshaw                   |       Commit:
Report Upstream:  N/A                |  0fb39df7fafe7f0a765bf73b3f34a6cb41e65c40
         Branch:                     |     Stopgaps:
  u/tscrim/top_manifolds_refactor    |
   Dependencies:  #18175             |
-------------------------------------+-------------------------------------
Changes (by egourgoulhon):

 * cc: mmancini (added)


Comment:

 Replying to [comment:75 tscrim]:
 > I think what we will have to do is one (or more) of the following:
 >
 > - implement custom multiprocessing,
 > - move the parallelization code into the scalar fields algebra,
 > - implement a custom coercion scheme by overriding `__add__`, etc., or
 > - improve coercion support for non-`UniqueRepresentation` objects.
 >
 > I think the first or second option will be the best possibility for this
 to work.

 The first looks to me much better than the second one: the nice feature of
 the parallelization framework as implemented in #18100 is that it is
 implemented at the `Components` level, i.e. for any indexed set of ring
 elements, whatever the ring. It sounds bad to redefine this for the
 special case where the ring is an algebra of scalar fields. I shall
 discuss with Marco about implementing some multiprocessing that does not
 rely on pickling.

 Another solution would be to revert to `UniqueRepresentation` for
 manifolds (once again!). Since now the user creates manifolds via the
 front-end function `Manifold` and not by a direct call to the manifold
 class constructor, the main issue raised at the end of comment:31 could be
 overcome by the handling of the cache in `Manifold`. In this way
 {{{
 sage: M1 = Manifold(2, 'M')
 sage: M2 = Manifold(2, 'M')
 }}}
 would result in two different objects, as desired, but
 {{{
 sage: M1 == loads(dumps(M1))
 }}}
 would still work, because the unpickling does not go through the function
 `Manifold`.
 There remains the issue with `UniqueRepresentation` raised by Nils Bruin
 in the [https://groups.google.com/d/msg/sage-
 devel/Vzfj1haZHho/sLfOJ3ujBQAJ sage-devel thread]: ''Avoid
 !UniqueRepresentation if you can. It requires expensive processing of
 construction parameters and hence introduces bad overhead and it
 introduces "global variables" in a way that is much worse than global
 variables.''
 However, in a typical work session, one should not create so many
 manifolds, so the "expensive processing of construction parameters" is not
 a too severe issue.

--
Ticket URL: <http://trac.sagemath.org/ticket/18529#comment:76>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to