Shared2018-09-20-074703.ipynbOpen in CoCalc
from lie_algebra_multiplicity import *
def WeightsWithMultiplicity1InG2(l):
    tot = 3 * l - 1
    if tot < 0:
        return []
    else:
        m1 = 0
        m2 = 0
        solns = []
        if tot % 3 == 0:
            m2 = tot / 3
        elif tot % 3 == 1:
            m1 = 2
            m2 = (tot - 4) / 3
        elif tot % 3 == 2:
            m1 = 1
            m2 = (tot - 2) / 3
        
        while m1 >= 0 and m2 >= 0:
            solns.append([m1,m2])
            m1 += 3
            m2 -= 2
            
        return solns
    
def getAltSetsG(l):
    weights = WeightsWithMultiplicity1InG2(l)
    altsets = [findAltSet("G2", lamb = [0, l], mu = weight, simple = False) for weight in weights]
    return altsets

def multCheckG(l):
    weights = WeightsWithMultiplicity1InG2(l)
    mults = [calculateMultiplicity("G2", lamb = [0,l], mu = weight, q_analog = True, simple=False) for weight in weights]
    return mults
    
    
test = 1
print WeightsWithMultiplicity1InG2(test)
print getAltSetsG(test)
print multCheckG(test)
#getAltSetsG(1000)
from lie_algebra_multiplicity import *
def noElementsGreaterThan(arr, maxVal):
    for i in arr:
        if i > maxVal:
            return False
        
    return True

def countIndices(partition, r):
    ret = [0 for i in range(0,r)]
    for i in partition:
        ret[i-1] += 1
        
    return ret

def WeightsWithMultiplicity1InA(r, l):
    mod = r+1
    multiple = l / mod
    distance = l % mod
    all_weights = []
    
    while multiple >= 0:
        partitions = [partition for partition in Partitions(distance).list() if noElementsGreaterThan(partition, r)]
        weights = [countIndices(partition, r) for partition in partitions]
        all_weights = all_weights + weights  # this is not the best way, but I'll fix it later
        multiple -= 1
        distance += mod
        
    return all_weights

def getAltSetsA(r, l):
    weights = WeightsWithMultiplicity1InA(r, l)
    altsets = [findAltSet("A" + str(r), lamb = [l], mu = weight, simple = False) for weight in weights]
    return altsets

def multCheckA(r, l):
    weights = WeightsWithMultiplicity1InA(r, l)
    mults = [calculateMultiplicity("A" + str(r), lamb = [l], mu = weight, q_analog = False, simple=False) for weight in weights]
    return mults
        
test_l = 10
test_r = 2
print WeightsWithMultiplicity1InA(test_r, test_l)
print [changeFundToSimple("A" + str(test_r), weight) for weight in WeightsWithMultiplicity1InA(test_r, test_l)]
print multCheckA(test_r, test_l)
#print getAltSetsA(test_r, test_l)
[[1, 0], [0, 2], [2, 1], [4, 0], [1, 3], [3, 2], [5, 1], [7, 0], [0, 5], [2, 4], [4, 3], [6, 2], [8, 1], [10, 0]] [(0.6666666666666666, 0.3333333333333333, 0.0), (4.666666666666667, 1.3333333333333335, 0.0), (3.666666666666667, 1.3333333333333335, 0.0), (2.6666666666666665, 1.3333333333333333, 0.0), (7.666666666666667, 2.3333333333333335, 0.0), (6.666666666666667, 2.3333333333333335, 0.0), (5.666666666666666, 2.333333333333333, 0.0), (4.666666666666666, 2.333333333333333, 0.0), (11.666666666666668, 3.333333333333334, 0.0), (10.666666666666668, 3.3333333333333335, 0.0), (9.666666666666666, 3.333333333333333, 0.0), (8.666666666666668, 3.3333333333333335, 0.0), (7.666666666666666, 3.333333333333333, 0.0), (6.666666666666666, 3.333333333333333, 0.0)] alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (2/3, -1/3, -1/3) identity results in (6, 3, 0) s1 results in (-9, 3, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) s2 results in (6, 4, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) s2*s1 results in (-9, -11, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (14/3, -10/3, -4/3) identity results in (2, 2, 0) s1 results in (-13, 2, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (7.666666666666667, 2.333333333333334, 0.0) s2 results in (2, 3, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (7.666666666666667, 2.333333333333334, 0.0) s2*s1 results in (-13, -12, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (7.666666666666667, 2.333333333333334, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (2359028376241695/643371375338644, -7/3, -4/3) identity results in (3, 2, 0) s1 results in (-12, 2, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (6.666666666666667, 2.333333333333334, 0.0) s2 results in (3, 3, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (6.666666666666667, 2.333333333333334, 0.0) s2*s1 results in (-12, -12, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (6.666666666666667, 2.333333333333334, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (8/3, -4/3, -4/3) identity results in (4, 2, 0) s1 results in (-11, 2, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (5.666666666666667, 2.3333333333333335, 0.0) s2 results in (4, 3, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (5.666666666666667, 2.3333333333333335, 0.0) s2*s1 results in (-11, -12, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (5.666666666666667, 2.3333333333333335, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (23/3, -16/3, -7/3) identity results in (-1, 1, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (20/3, -1393971313233729/321685687669322, -1501199875790169/643371375338644) identity results in (0, 1, 0) s1 results in (-15, 1, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (9.666666666666666, 3.333333333333332, 0.0) s2 results in (0, 2, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (9.666666666666666, 3.333333333333332, 0.0) s2*s1 results in (-15, -13, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (9.666666666666666, 3.333333333333332, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (1822885563459491/321685687669322, -2144571251128813/643371375338644, -1501199875790169/643371375338644) identity results in (1, 1, 0) s1 results in (-14, 1, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (8.666666666666666, 3.333333333333333, 0.0) s2 results in (1, 2, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (8.666666666666666, 3.333333333333333, 0.0) s2*s1 results in (-14, -13, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (8.666666666666666, 3.333333333333333, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (1501199875790169/321685687669322, -1501199875790169/643371375338644, -1501199875790169/643371375338644) identity results in (2, 1, 0) s1 results in (-13, 1, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (7.666666666666666, 3.333333333333333, 0.0) s2 results in (2, 2, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (7.666666666666666, 3.333333333333333, 0.0) s2*s1 results in (-13, -13, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (7.666666666666666, 3.333333333333333, 0.0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (1876499844737712/160842843834661, -25/3, -2144571251128813/643371375338644) identity results in (-5, 0, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (1715657000903051/160842843834661, -2359028376241695/321685687669322, -2144571251128813/643371375338644) identity results in (-4, 0, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (29/3, -19/3, -2144571251128813/643371375338644) identity results in (-3, 0, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (1393971313233729/160842843834661, -1715657000903051/321685687669322, -2144571251128813/643371375338644) identity results in (-2, 0, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (2466256938798135/321685687669322, -13/3, -2144571251128813/643371375338644) identity results in (-1, 0, 0) alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) identity results in (0, 0, 0) s1 results in (-15, 0, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (9.666666666666666, 4.333333333333333, 0.0) s2 results in (0, 1, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (9.666666666666666, 4.333333333333333, 0.0) s2*s1 results in (-15, -14, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (9.666666666666666, 4.333333333333333, 0.0) [-1, 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0]
changeFundToSimple("A2", [0,1])
print "mult is", calculateMultiplicity("A2", lamb = [10], mu = [1], q_analog = False, simple=False)
print calculateMultiplicity("A2", lamb = [20.0/3.0, 10.0/3.0], mu = [2.0/3.0,1.0/3.0], q_analog = False, simple=True)
lie_algebra = RootSystem("A2").ambient_space()
print getFundamentalToStandard("A2") * vector([1,1,0])
print getStandardToSimple("A2").inverse() * vector([3,1,0])
print lie_algebra.rho()
print getRho("A2")
print getFundamentalToStandard("A2").inverse() * vector(lie_algebra.rho())
mult is alt set of (2144571251128813/321685687669322, -2144571251128813/643371375338644, -2144571251128813/643371375338644) (2/3, -1/3, -1/3) identity results in (6, 3, 0) s1 results in (-9, 3, 0) s(lamb + rho) = (-5.333333333333333, 4.333333333333333, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) s2 results in (6, 4, 0) s(lamb + rho) = (9.666666666666666, 5.333333333333333, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) s2*s1 results in (-9, -11, 0) s(lamb + rho) = (-5.333333333333333, -9.666666666666666, 0.0) (rho + mu) = (3.6666666666666665, 1.333333333333333, 0.0) -1 alt set of (652695598169647/97904339725447, -306367321589833/91910196476950, -306367321589833/91910196476950) (632084158227439/948126237341158, -292917048934667/878751146804002, -292917048934667/878751146804002) identity results in (6, 3, 0) s1 results in (-9, 3, 0) s(lamb + rho) = (-5.3333333333333295, 4.33333333333334, 0.0) (rho + mu) = (3.666666666666667, 1.333333333333334, 0.0) s2 results in (6, 4, 0) s(lamb + rho) = (9.66666666666667, 5.33333333333334, 0.0) (rho + mu) = (3.666666666666667, 1.333333333333334, 0.0) s2*s1 results in (-9, -11, 0) s(lamb + rho) = (-5.3333333333333295, -9.666666666666659, 0.0) (rho + mu) = (3.666666666666667, 1.333333333333334, 0.0) -1 (3.0, -2.0, -1.0) (3, -2, -1) (2, 1, 0) (3, -2, -1) (17.0, -4.0, 3.0)
def allEvenElements(arr):
    for i in arr:
        if i % 2 == 1:
            return False
        
    return True

def WeightsWithMultiplicity1InB(r, l):
    if r < 2:
        return []
    tot = l - 1
    m_r = int((tot * 2) / r)
    m_r = m_r if m_r % 2 == 0 else m_r - 1
    all_weights = []
    
    while m_r >= 0:
        sub_tot = int(tot - ((r * m_r)/2)) # this is always an integer, but sage automatically casts some things and causes issues with partitioning
        partitions = [partition for partition in Partitions(sub_tot).list() if noElementsGreaterThan(partition, r-1)]
        weights = [countIndices(partition, r-1) for partition in partitions]
        weights = [weight + [m_r] for weight in weights if allEvenElements(weight)]
        all_weights = all_weights + weights  # this is not the best way, but I'll fix it later
        m_r -= 2
        
    return all_weights

def getAltSetsB(r, l):
    weights = WeightsWithMultiplicity1InB(r, l)
    altsets = [findAltSet("B" + str(r), lamb = [l], mu = weight, simple = False) for weight in weights]
    return altsets

def multCheckB(r, l):
    weights = WeightsWithMultiplicity1InB(r, l)
    mults = [calculateMultiplicity("B" + str(r), lamb = [l], mu = weight, q_analog = False, simple=False) for weight in weights]
    return mults

test_r = 7
test_l = 8
print WeightsWithMultiplicity1InB(test_r, test_l)
print multCheckB(test_r, test_l)
print getAltSetsB(test_r, test_l)


calculateMultiplicity()
from lie_algebra_multiplicity import *
    
b = getFundamentalToSimple("A2")
print b * vector([9, 0, 0])
print getFundamentalWeights("A2")

x = matrix([[2/3, -1/3, -1/3], [7/3, -5/3, -2/3], [0,0,1]])
print x.transpose() * vector([4,0,0])
print list(convertWeightParameters("A2", [8/3.0,4/3.0,0], simple = True))
def roundIfAppropriate(vec):
    ret = []
    for i in vec:
        if abs(i - int(i)) <= 1e-5:
            ret.append(int(i))
        elif 1 - abs(i -int(i)) <= 1e-5:
            if i < 0:
                ret.append(int(i)-1)
            else:
                ret.append(int(i)+1)
        else:
            ret.append(i)
          
    if vec != ret:
        print vec, "rounded to", ret
    return ret

print roundIfAppropriate([2.333, -1.9999999, 2.9999999, 1.93])
float(328373874/294273472)