#6812: Enumerate integer vectors modulo to the action of a Permutation Group
------------------------------------------------------------------+---------
       Reporter:  nborie                                          |         
Owner:  nborie                                                  
           Type:  enhancement                                     |        
Status:  needs_review                                            
       Priority:  major                                           |     
Milestone:  sage-5.1                                                
      Component:  combinatorics                                   |    
Resolution:                                                          
       Keywords:  enumeration, integer, list, permutation, group  |   Work 
issues:  long time tests, information about listing infinite sets
Report Upstream:  N/A                                             |     
Reviewers:  Karl-Dieter Crisman, Simon King                         
        Authors:  Nicolas Borie                                   |     Merged 
in:                                                          
   Dependencies:                                                  |      
Stopgaps:                                                          
------------------------------------------------------------------+---------

Comment (by SimonKing):

 Replying to [comment:82 nborie]:
 > Yes, this piece of code is horribly ugly... The point is that the orbit
 method will work with any integer vector. v doesn't need to be canonical.
 I don't have a use case but I was thinking it would be more convenient to
 allow the user to use this method for any integer vector (canonical or
 not).

 Agreed. So, check=False should be fine.

 But I do think that the orbit method should try to convert the input
 vector from a different parent into self, and should certainly not return
 "None".

 > Anyway, the test is_canonical should be very very much faster than the
 full expansion of an orbit

 Of course. The algorithm for is_canonical looks almost the same as the
 full expansion of an orbit, but if it is in fact non-canonical then the
 function will return "False" before finishing the computation of the whole
 orbit.

 By the way, I made some further tweaks and am now down to
 {{{
 sage: TEST_generation_orbit_sum(TransitiveGroup(8,1), verbose=True)
 For G be the transitive group number 1 of degree 8
 Cardinality of G : 8

 Cardinality of secondary invariants : 5040
 Number of canonical monomials under staircase : 18297
 Total time : 1.43067121506
  -------------------------------------
 (1.430671215057373, 18297, 8)
 sage: TEST_generation_orbit_sum(TransitiveGroup(9,1), verbose=True)
 For G be the transitive group number 1 of degree 9
 Cardinality of G : 9

 Cardinality of secondary invariants : 40320
 Number of canonical monomials under staircase : 153974
 Total time : 12.9384939671
  -------------------------------------
 (12.938493967056274, 153974, 9)
 sage: TEST_generation_orbit_sum(TransitiveGroup(10,1), verbose=True)
 For G be the transitive group number 1 of degree 10
 Cardinality of G : 10

 Cardinality of secondary invariants : 362880
 Number of canonical monomials under staircase : 1452325
 Total time : 134.613152981
  -------------------------------------
 (134.61315298080444, 1452325, 10)
 sage: G = TransitiveGroup(15,28)
 sage: S = IntegerVectorsModPermutationGroup(G, max_part=1)
 sage: timeit('S._cardinality_from_iterator()')
 5 loops, best of 3: 408 ms per loop
 }}}

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/6812#comment:83>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to