Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce impact of immediate methods to calculations with groups #2387

Closed
wants to merge 1 commit into from

Commits on May 9, 2018

  1. ENHANCE: Reduce impact of immediate methods for groups etc.

    This commit changes routines that create groups, certain Submagmas aand
    vector spaces so that flags that set basic properties (being trivial, being
    empty, being cyclic) are set at the same time as the object was created.
    
    This functionality used to be provided through immediate methods, however
    this meant that the type of a just-created object was changed immediately
    multiple times (with some changes precipitating other changes), causing a
    notable performance hit.
    
    Notably, the following changes have been done:
    
    1) In a number of methods used to create groups (or submagmas, when called
    from `Subgroup` or cosets) from generating sets, a number of cheaply deduced
    properties (such as being cyclic) are set while creating the object. Thus
    the immediate methods do not apply for these objects any longer.
    
    2) Type caching in these methods is not worth the effort and has been
    removed.
    
    3) A new setter method for `Size` deals similarly with deductions done
    before by immediate methods for a known size.
    Caveat: The manual specifies (ill-advised one might say) that setting a
    different size if a size already is given will be ignored. This is tested in
    manual examples and test files. The new setter method therefore cannot be
    used to check for this property as an error -- it will do so only if
    assertion level is set >=3.
    
    4a) Immediate methods that have been made obsoleteby the changes in 1) and 3)
    have been changed to ordinary methods.
    
    4b) A number of immediate methods (e.g. a trivial group is solvable) have
    been replaced by `TrueMethods` that have the same effect but are chaper to
    run.
    
    4c) Also a number of immediate methods
    that need to run often, but apply only rarely (i.e. setting `IsFinite` to
    false if a size is set to `infinity`) have been removed.
    
    5) These changes have minor impact on test files and manual tests: A few objects
    will have slightly different knowledge about their properties  and thus
    print differently; respectivelty test code exists that checks explicitly for
    such properties having been set by immediate methods.
    These tests and examples have been changed.
    A few, very instable tests (e.g. checking explicitly for the values of
    random elements) have been commented out.
    
    6) Some tests explicitly relied on immediate methods enabling derived series
    calculations in special cases of finitely presented groups. These tests
    never would have worked if immedite methods were turned off, the respective
    finitely presented groups method has been changed accordingly to test
    explicitly for the particular situation, thus enabling the same examples to
    work.
    hulpke committed May 9, 2018
    Configuration menu
    Copy the full SHA
    e804843 View commit details
    Browse the repository at this point in the history