Ticket #11412: trac_11412-partition_creation_from_core_quotient_big-pod.patch

File trac_11412-partition_creation_from_core_quotient_big-pod.patch, 2.4 KB (added by pdehaye, 4 years ago)

to be applied after #11165 (affects the doctests)

  • sage/combinat/partition.py

    # HG changeset patch
    # User Paul-Olivier Dehaye <paulolivier@gmail.com>
    # Date 1306853886 -7200
    # Node ID aabc13e9ba456cb947723555485971bbd535d9ed
    # Parent  45daebca2840fd49d3271697a57aa05e92c5dc35
    #11412: fixed creation of partition from core and quotient
    
    diff -r 45daebca2840 -r aabc13e9ba45 sage/combinat/partition.py
    a b  
    306306 
    307307        sage: Partition(core=[2,1], quotient=[[2,1],[3],[1,1,1]]) 
    308308        [11, 5, 5, 3, 2, 2, 2] 
     309        sage: test = lambda x, k: x == Partition(core=x.core(k),quotient=x.quotient(k)) 
     310        sage: all(test(mu,k) for k in range(1,5) for n in range(10) for mu in Partitions(n)) 
     311        True 
     312        sage: test2 = lambda core, mus: \  
     313        Partition(core=core, quotient=mus).core(len(mus)) == core and \ 
     314        Partition(core=core, quotient=mus).quotient(len(mus)) == mus 
     315        sage: all(test2(core,tuple(mus)) for k in range(1,10) for n_core in range(10-k) for core in Partitions(n_core) if core.core(k) == core for n_mus in range(10-k) for mus in PartitionTuples(n_mus,k)) 
     316        True 
    309317    """ 
    310318    length = len(quotient) 
    311     k = length*max( [ceil(len(core)/length),len(core)] + [len(q) for q in quotient] ) + length 
    312     v = [ core[i]-(i+1)+1 for i in range(len(core))] + [ -i + 1 for i in range(len(core)+1,k+1) ] 
     319    k = length*max(len(q) for q in quotient) + len(core) 
     320    # k needs to be large enough. this seems to me like the smallest it can be 
     321    v = [core[i]-i for i in range(len(core))] + [ -i for i in range(len(core),k) ] 
    313322    w = [ filter(lambda x: (x-i) % length == 0, v) for i in range(1, length+1) ] 
    314323    new_w = [] 
    315324    for i in range(length): 
    316         new_w += [ w[i][j] + length*quotient[i][j] for j in range(len(quotient[i]))] 
    317         new_w += [ w[i][j] for j in range(len(quotient[i]), len(w[i])) ] 
    318     new_w.sort() 
    319     new_w.reverse() 
    320     return Partition([new_w[i-1]+i-1 for i in range(1, len(new_w)+1)]) 
    321  
     325        lw = len(w[i]) 
     326        lq = len(quotient[i]) 
     327        # k needs to be chosen so lw >= lq 
     328        new_w += [ w[i][j] + length*quotient[i][j] for j in range(lq)] 
     329        new_w += [ w[i][j] for j in range(lq,lw)] 
     330    new_w.sort(reverse=True) 
     331    return Partition([new_w[i]+i for i in range(len(new_w))]) 
     332    
    322333class Partition_class(CombinatorialObject): 
    323334    def ferrers_diagram(self): 
    324335        """