#19821: Increase speed for Coxeter groups, Weyl groups, and quantum Bruhat graph
-------------------------------------+-------------------------------------
       Reporter:  tscrim             |        Owner:  sage-combinat
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-7.0
      Component:  combinatorics      |   Resolution:
       Keywords:  quantum bruhat     |    Merged in:
  graph                              |    Reviewers:
        Authors:  Travis Scrimshaw   |  Work issues:
Report Upstream:  N/A                |       Commit:
         Branch:                     |  0b5fcec3ea079b5240414f4981bd860d7768b3c7
  public/combinat/speedup_coxeter_weyl_matrix_groups-19821|     Stopgaps:
   Dependencies:                     |
-------------------------------------+-------------------------------------
Changes (by tscrim):

 * cc: darij, chapoton, stumpc5 (added)


Old description:

> The primary goal of this ticket is to improve the creation speed for the
> quantum Bruhat graph. We do this in a number of ways:
>
> - Better management of data associated to
> `lattice.nonparabolic_positive_roots`.
> - Implement a (temporary) cache of the lengths of elements.
>
> In addition, we also provide some general speedups to all matrix groups
> and Coxeter groups that came from looking into the above improvements.
> The net result is over 12x speedup of the creation of the quantum Bruhat
> graph:
> {{{
> sage: W = WeylGroup(['D',5], prefix='s')
> sage: %time G = W.quantum_bruhat_graph()
> CPU times: user 14 s, sys: 60.6 ms, total: 14 s
> Wall time: 14 s
> }}}
> whereas previously this took over 3 minutes to compute. The downside is
> this has a larger memory footprint because of the temporary cache, but
> repeatedly computing the lengths of the elements was far too expensive.

New description:

 The primary goal of this ticket is to improve the creation speed for the
 quantum Bruhat graph. We do this in a number of ways:

 - Better management of data associated to
 `lattice.nonparabolic_positive_roots`.
 - Implement a (temporary) cache of the lengths of elements.

 In addition, we also provide some general speedups to all matrix groups
 and Coxeter groups that came from looking into the above improvements. The
 net result is over 12x speedup of the creation of the quantum Bruhat
 graph:
 {{{
 sage: W = WeylGroup(['D',5], prefix='s')
 sage: %time G = W.quantum_bruhat_graph()
 CPU times: user 14 s, sys: 60.6 ms, total: 14 s
 Wall time: 14 s
 }}}
 whereas previously this took over 3 minutes to compute. The downside is
 this has a larger memory footprint because of the temporary cache, but
 repeatedly computing the lengths of the elements was far too expensive.

 This also includes a speedup of iterating over the entire Coxeter/Weyl
 group.

--

Comment:

 Also, `_finite_recognition` was no longer needed since we now have Coxeter
 types. One question I have for `CoxeterGroup` is should the default ring
 for simply-laced types be `ZZ`? The code which compares elements in the
 universal cyclotomic field to 0 is horribly slow and is the main reason
 why iteration over an instance of `CoxeterGroup` (over the UCF) takes so
 long. Compare:
 {{{
 sage: WC = CoxeterGroup(['D',4], base_ring=ZZ)
 sage: %timeit L = [x for x in WC]
 100 loops, best of 3: 12.1 ms per loop
 sage: WC = CoxeterGroup(['D',4]) # base_ring=UniversalCyclotomicField()
 sage: %timeit L = [x for x in WC]
 1 loops, best of 3: 224 ms per loop

 sage: WC = CoxeterGroup(['D',5], base_ring=ZZ)
 sage: %timeit L = [x for x in WC]
 10 loops, best of 3: 152 ms per loop
 sage: WC = CoxeterGroup(['D',5]) # base_ring=UniversalCyclotomicField()
 sage: %timeit L = [x for x in WC]
 1 loops, best of 3: 3.97 s per loop
 }}}

--
Ticket URL: <http://trac.sagemath.org/ticket/19821#comment:2>
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