Changes between Version 8 and Version 10 of Ticket #18555

06/26/16 11:13:43 (5 years ago)


  • Ticket #18555

    • Property Commit changed from 2ba392f42e9ee4b362cf61e8ddd2a9d419f0787e to 12cb84666d10cab49c8d8b21aad73485c2fedaef
  • Ticket #18555 – Description

    v8 v10  
    1010    A.options(foobar=1)
    12 Implementing this is an enhancement, and most of the work, which is why this ticket is listed as an enhancement!
     12 This ticket implements both of these features and, in addition, makes it possible to construct options classes dynamically.
    14 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.
     14The 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.
     16As 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.