#18555: Pickling and otherwise enhancing global options
-------------------------------------+-------------------------------------
       Reporter:  andrew.mathas      |        Owner:
           Type:  enhancement        |       Status:  new
       Priority:  major              |    Milestone:  sage-6.8
      Component:  interfaces         |   Resolution:
       Keywords:  options            |    Merged in:
        Authors:  Andrew Mathas      |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/andrew.mathas/pickling_global_options|  
12cb84666d10cab49c8d8b21aad73485c2fedaef
   Dependencies:                     |     Stopgaps:
-------------------------------------+-------------------------------------
Description changed by andrew.mathas:

Old description:

> Instances of the
> [http://doc.sagemath.org/html/en/reference/structure/sage/structure/global_options.html
> GlobalOptions] class in `sage.structure.global_options` do not pickle,
> which is annoying and causes various problems. (This is a defect.)
>
> In addition, when the `GlobalOptions` class was introduced it was
> suggested in [https://groups.google.com/forum/#!searchin/sage-
> devel/globabloptions/sage-devel/7ApZgwBTU4U/Qe6QoeuYgvAJ sage-dev] that
> it "would be nice" if we could implement the syntax used in the IPython
> configuration:
> {{{
>
>     A.options.foobar = 1
>
> in addition to
>
>     A.options(foobar=1)
> }}}
> Implementing this is an enhancement, and most of the work, which is why
> this ticket is listed as an enhancement!
>
> The attached patch implements both of these features. There are a few
> failing doc-tests that I need to fix but is seems basically OK.

New description:

 Instances of the
 
[http://doc.sagemath.org/html/en/reference/structure/sage/structure/global_options.html
 GlobalOptions] class in `sage.structure.global_options` do not pickle,
 which is annoying and causes various problems. (This is a defect.)

 In addition, when the `GlobalOptions` class was introduced it was
 suggested in [https://groups.google.com/forum/#!searchin/sage-
 devel/globabloptions/sage-devel/7ApZgwBTU4U/Qe6QoeuYgvAJ sage-dev] that it
 "would be nice" if we could implement the syntax used in the IPython
 configuration:
 {{{

     A.options.foobar = 1

 in addition to

     A.options(foobar=1)
 }}}
  This ticket implements both of these features and, in addition, makes it
 possible to construct options classes dynamically.

 The pickling is done by adding an extra `module` argument to the
 `GlobalOptions` that specifies the module which contains the class that
 the options are attached -- `name` of of the class defaults to the name of
 the options class but this can be explicitly set using the `options_class`
 argument. The options class is assumed to have an `options` method, and
 this is used to unpickle a pickle for an options class. `GlobalOptions`
 that do not arise as options methods for standard sage classes cannot be
 unpickled. The reason why the name of the module and class are passed, as
 strings, to `GlobalOptions` rather than the actual class is that this
 approach allows the options to be constructed during the initialisation of
 the (instance of the) class and, in turn, this allows the class to
 dynamically construct their options classes.

 As suggested on sage-dev I have also renamed all of the global_options
 methods simply as options, with the global_options variants being
 deprecated. The "stand-alone" options classes such as `PartitionOoptions`,
 `TableauxOptions`, ... have also been deprecated and, instead, put inside
 their "parent" classes. This is cleaned up the code a little and it seems
 to speed up the sage start-up time.

--

--
Ticket URL: <https://trac.sagemath.org/ticket/18555#comment:10>
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 https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to