#15536: Implement symplectic and orthogonal bases of Sym
-------------------------------------+-------------------------------------
       Reporter:  tscrim             |        Owner:  sage-combinat
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.10
      Component:  combinatorics      |   Resolution:
       Keywords:  days54, sym        |    Merged in:
        Authors:  Travis Scrimshaw   |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  public/combinat/sf/sp_orth         |  57f92dd1a206bb5af2ed00e4135ded0c586e99db
   Dependencies:  #17096             |     Stopgaps:
-------------------------------------+-------------------------------------

Comment (by zabrocki):

 I'm sorry, but I can't compile anything new right now so I am afraid to
 push anything.  I can write functions on a working version of sage and I
 am pretty sure the following is right (following the model of
 `_s_to_o_on_basis`):
 {{{
     def _o_to_s_on_basis(self, lam):
         import sage.libs.lrcalc.lrcalc as lrcalc
         from sage.combinat.partition import Partitions
         R = self.base_ring()
         return self._from_dict({ mu: R.sum(
             (-1)**j*lrcalc.lrcoef_unsafe(lam, mu, nu)
             for nu in Partitions(2*j)
               if all(nu.arm_length(i,i)==nu.leg_length(i,i)+1
                 for i in range(nu.frobenius_rank())) )
             for j in range(sum(lam)//2+1)
             for mu in Partitions(sum(lam)-2*j) })
 }}}
 Moreover, if you switch `arm` and `leg` then that is the
 `_sp_to_s_on_basis`.

 Your `_s_to_o_on_basis` has lots of extra looping going on that is not
 necessary.  Because `|lam|==|mu|+|nu|` you can remove one sum.  Because
 `nu` has to be an even partition, you don't need to run over `j` odd.
 Here is a suggested modification:

 {{{
 def _s_to_o_on_basis(self, lam):
     import sage.libs.lrcalc.lrcalc as lrcalc
     from sage.combinat.partition import Partitions
     R = self.base_ring()
     return self._from_dict({ mu: R.sum( lrcalc.lrcoef_unsafe(lam, mu, nu)
                                  for nu in Partitions(2*j)
                                      if all(x % 2 == 0 for x in nu))
                                  for j in range(sum(lam)//2+1)
                                  for mu in Partitions(sum(lam)-2*j) })
 }}}

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

Reply via email to