github.com/mjschust/cblocks@v0.2.0/bundle_test.go (about) 1 package cblocks 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/mjschust/cblocks/lie" 8 ) 9 10 func TestSymmetricL1Rank(t *testing.T) { 11 cases := []struct { 12 rtsys lie.RootSystem 13 wt lie.Weight 14 ell int 15 n int 16 want *big.Int 17 }{ 18 // n=3 19 {lie.NewTypeARootSystem(1), lie.Weight{0}, 1, 3, big.NewInt(1)}, 20 {lie.NewTypeARootSystem(1), lie.Weight{1}, 1, 3, big.NewInt(0)}, 21 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 1, 3, big.NewInt(1)}, 22 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 1, 3, big.NewInt(1)}, 23 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 1, 3, big.NewInt(1)}, 24 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 1, 3, big.NewInt(1)}, 25 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 1, 3, big.NewInt(0)}, 26 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 1, 3, big.NewInt(0)}, 27 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 1, 3, big.NewInt(0)}, 28 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 0}, 1, 3, big.NewInt(1)}, 29 {lie.NewTypeARootSystem(4), lie.Weight{1, 0, 0, 0}, 1, 3, big.NewInt(0)}, 30 {lie.NewTypeARootSystem(4), lie.Weight{0, 1, 0, 0}, 1, 3, big.NewInt(0)}, 31 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 1, 0}, 1, 3, big.NewInt(0)}, 32 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 1}, 1, 3, big.NewInt(0)}, 33 34 // n=4 35 {lie.NewTypeARootSystem(1), lie.Weight{0}, 1, 4, big.NewInt(1)}, 36 {lie.NewTypeARootSystem(1), lie.Weight{1}, 1, 4, big.NewInt(1)}, 37 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 1, 4, big.NewInt(1)}, 38 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 1, 4, big.NewInt(0)}, 39 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 1, 4, big.NewInt(0)}, 40 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 1, 4, big.NewInt(1)}, 41 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 1, 4, big.NewInt(1)}, 42 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 1, 4, big.NewInt(1)}, 43 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 1, 4, big.NewInt(1)}, 44 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 0}, 1, 4, big.NewInt(1)}, 45 {lie.NewTypeARootSystem(4), lie.Weight{1, 0, 0, 0}, 1, 4, big.NewInt(0)}, 46 {lie.NewTypeARootSystem(4), lie.Weight{0, 1, 0, 0}, 1, 4, big.NewInt(0)}, 47 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 1, 0}, 1, 4, big.NewInt(0)}, 48 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 1}, 1, 4, big.NewInt(0)}, 49 50 // n=5 51 {lie.NewTypeARootSystem(1), lie.Weight{0}, 1, 5, big.NewInt(1)}, 52 {lie.NewTypeARootSystem(1), lie.Weight{1}, 1, 5, big.NewInt(0)}, 53 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 1, 5, big.NewInt(1)}, 54 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 1, 5, big.NewInt(0)}, 55 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 1, 5, big.NewInt(0)}, 56 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 1, 5, big.NewInt(1)}, 57 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 1, 5, big.NewInt(0)}, 58 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 1, 5, big.NewInt(0)}, 59 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 1, 5, big.NewInt(0)}, 60 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 0}, 1, 5, big.NewInt(1)}, 61 {lie.NewTypeARootSystem(4), lie.Weight{1, 0, 0, 0}, 1, 5, big.NewInt(1)}, 62 {lie.NewTypeARootSystem(4), lie.Weight{0, 1, 0, 0}, 1, 5, big.NewInt(1)}, 63 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 1, 0}, 1, 5, big.NewInt(1)}, 64 {lie.NewTypeARootSystem(4), lie.Weight{0, 0, 0, 1}, 1, 5, big.NewInt(1)}, 65 } 66 67 for _, c := range cases { 68 alg := lie.NewAlgebra(c.rtsys) 69 bun := NewSymmetricCBBundle(alg, c.wt, c.ell, c.n) 70 got := bun.Rank() 71 if got.Cmp(c.want) != 0 { 72 t.Errorf("For type A CBBundle(wt: %v, ell: %v, n: %v): Rank() = %v, want %v", 73 c.wt, c.ell, c.n, got, c.want) 74 } 75 } 76 } 77 78 func TestSymmetricL2Rank(t *testing.T) { 79 cases := []struct { 80 rtsys lie.RootSystem 81 wt lie.Weight 82 ell int 83 n int 84 want *big.Int 85 }{ 86 // n=3 87 {lie.NewTypeARootSystem(1), lie.Weight{0}, 2, 3, big.NewInt(1)}, 88 {lie.NewTypeARootSystem(1), lie.Weight{1}, 2, 3, big.NewInt(0)}, 89 {lie.NewTypeARootSystem(1), lie.Weight{2}, 2, 3, big.NewInt(0)}, 90 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 2, 3, big.NewInt(1)}, 91 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 2, 3, big.NewInt(1)}, 92 {lie.NewTypeARootSystem(2), lie.Weight{0, 2}, 2, 3, big.NewInt(1)}, 93 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 2, 3, big.NewInt(1)}, 94 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 2, 3, big.NewInt(1)}, 95 {lie.NewTypeARootSystem(2), lie.Weight{2, 0}, 2, 3, big.NewInt(1)}, 96 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 2, 3, big.NewInt(1)}, 97 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 2, 3, big.NewInt(0)}, 98 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 2, 3, big.NewInt(0)}, 99 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 2, 3, big.NewInt(0)}, 100 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 1}, 2, 3, big.NewInt(0)}, 101 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 2, 3, big.NewInt(0)}, 102 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 2, 3, big.NewInt(0)}, 103 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 2, 3, big.NewInt(1)}, 104 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 0}, 2, 3, big.NewInt(0)}, 105 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 2, 3, big.NewInt(0)}, 106 107 // n=4 108 {lie.NewTypeARootSystem(1), lie.Weight{0}, 2, 4, big.NewInt(1)}, 109 {lie.NewTypeARootSystem(1), lie.Weight{1}, 2, 4, big.NewInt(2)}, 110 {lie.NewTypeARootSystem(1), lie.Weight{2}, 2, 4, big.NewInt(1)}, 111 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 2, 4, big.NewInt(1)}, 112 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 2, 4, big.NewInt(0)}, 113 {lie.NewTypeARootSystem(2), lie.Weight{0, 2}, 2, 4, big.NewInt(0)}, 114 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 2, 4, big.NewInt(0)}, 115 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 2, 4, big.NewInt(2)}, 116 {lie.NewTypeARootSystem(2), lie.Weight{2, 0}, 2, 4, big.NewInt(0)}, 117 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 2, 4, big.NewInt(1)}, 118 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 2, 4, big.NewInt(1)}, 119 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 2, 4, big.NewInt(1)}, 120 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 2, 4, big.NewInt(3)}, 121 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 1}, 2, 4, big.NewInt(1)}, 122 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 2, 4, big.NewInt(1)}, 123 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 2, 4, big.NewInt(1)}, 124 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 2, 4, big.NewInt(3)}, 125 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 0}, 2, 4, big.NewInt(1)}, 126 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 2, 4, big.NewInt(1)}, 127 128 // n=5 129 {lie.NewTypeARootSystem(1), lie.Weight{0}, 2, 5, big.NewInt(1)}, 130 {lie.NewTypeARootSystem(1), lie.Weight{1}, 2, 5, big.NewInt(0)}, 131 {lie.NewTypeARootSystem(1), lie.Weight{2}, 2, 5, big.NewInt(0)}, 132 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 2, 5, big.NewInt(1)}, 133 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 2, 5, big.NewInt(0)}, 134 {lie.NewTypeARootSystem(2), lie.Weight{0, 2}, 2, 5, big.NewInt(0)}, 135 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 2, 5, big.NewInt(0)}, 136 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 2, 5, big.NewInt(3)}, 137 {lie.NewTypeARootSystem(2), lie.Weight{2, 0}, 2, 5, big.NewInt(0)}, 138 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 2, 5, big.NewInt(1)}, 139 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 2, 5, big.NewInt(0)}, 140 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 2, 5, big.NewInt(0)}, 141 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 2, 5, big.NewInt(0)}, 142 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 1}, 2, 5, big.NewInt(0)}, 143 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 2, 5, big.NewInt(0)}, 144 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 2, 5, big.NewInt(0)}, 145 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 2, 5, big.NewInt(5)}, 146 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 0}, 2, 5, big.NewInt(0)}, 147 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 2, 5, big.NewInt(0)}, 148 } 149 150 for _, c := range cases { 151 alg := lie.NewAlgebra(c.rtsys) 152 bun := NewSymmetricCBBundle(alg, c.wt, c.ell, c.n) 153 got := bun.Rank() 154 if got.Cmp(c.want) != 0 { 155 t.Errorf("For type A CBBundle(wt: %v, ell: %v, n: %v): Rank() = %v, want %v", 156 c.wt, c.ell, c.n, got, c.want) 157 } 158 } 159 } 160 161 func TestSymmetricL3Rank(t *testing.T) { 162 cases := []struct { 163 rtsys lie.RootSystem 164 wt lie.Weight 165 ell int 166 n int 167 want *big.Int 168 }{ 169 // n=3 170 {lie.NewTypeARootSystem(1), lie.Weight{0}, 3, 3, big.NewInt(1)}, 171 {lie.NewTypeARootSystem(1), lie.Weight{1}, 3, 3, big.NewInt(0)}, 172 {lie.NewTypeARootSystem(1), lie.Weight{2}, 3, 3, big.NewInt(1)}, 173 {lie.NewTypeARootSystem(1), lie.Weight{3}, 3, 3, big.NewInt(0)}, 174 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 3, 3, big.NewInt(1)}, 175 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 3, 3, big.NewInt(1)}, 176 {lie.NewTypeARootSystem(2), lie.Weight{0, 2}, 3, 3, big.NewInt(1)}, 177 {lie.NewTypeARootSystem(2), lie.Weight{0, 3}, 3, 3, big.NewInt(1)}, 178 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 3, 3, big.NewInt(1)}, 179 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 3, 3, big.NewInt(2)}, 180 {lie.NewTypeARootSystem(2), lie.Weight{1, 2}, 3, 3, big.NewInt(1)}, 181 {lie.NewTypeARootSystem(2), lie.Weight{2, 0}, 3, 3, big.NewInt(1)}, 182 {lie.NewTypeARootSystem(2), lie.Weight{2, 1}, 3, 3, big.NewInt(1)}, 183 {lie.NewTypeARootSystem(2), lie.Weight{3, 0}, 3, 3, big.NewInt(1)}, 184 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 3, 3, big.NewInt(1)}, 185 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 3, 3, big.NewInt(0)}, 186 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 3, 3, big.NewInt(0)}, 187 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 3}, 3, 3, big.NewInt(0)}, 188 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 3, 3, big.NewInt(0)}, 189 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 1}, 3, 3, big.NewInt(0)}, 190 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 2}, 3, 3, big.NewInt(1)}, 191 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 3, 3, big.NewInt(1)}, 192 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 1}, 3, 3, big.NewInt(0)}, 193 {lie.NewTypeARootSystem(3), lie.Weight{0, 3, 0}, 3, 3, big.NewInt(0)}, 194 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 3, 3, big.NewInt(0)}, 195 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 3, 3, big.NewInt(2)}, 196 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 2}, 3, 3, big.NewInt(0)}, 197 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 0}, 3, 3, big.NewInt(0)}, 198 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 1}, 3, 3, big.NewInt(0)}, 199 {lie.NewTypeARootSystem(3), lie.Weight{1, 2, 0}, 3, 3, big.NewInt(0)}, 200 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 3, 3, big.NewInt(0)}, 201 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 1}, 3, 3, big.NewInt(0)}, 202 {lie.NewTypeARootSystem(3), lie.Weight{2, 1, 0}, 3, 3, big.NewInt(1)}, 203 {lie.NewTypeARootSystem(3), lie.Weight{3, 0, 0}, 3, 3, big.NewInt(0)}, 204 } 205 206 for _, c := range cases { 207 alg := lie.NewAlgebra(c.rtsys) 208 bun := NewSymmetricCBBundle(alg, c.wt, c.ell, c.n) 209 got := bun.Rank() 210 if got.Cmp(c.want) != 0 { 211 t.Errorf("For type A CBBundle(wt: %v, ell: %v, n: %v): Rank() = %v, want %v", 212 c.wt, c.ell, c.n, got, c.want) 213 } 214 } 215 } 216 217 func TestL3RandomRank(t *testing.T) { 218 cases := []struct { 219 rtsys lie.RootSystem 220 wts []lie.Weight 221 ell int 222 want *big.Int 223 }{ 224 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{0}, lie.Weight{1}, lie.Weight{1}}, 3, big.NewInt(1)}, 225 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{2}, lie.Weight{1}, lie.Weight{2}}, 3, big.NewInt(0)}, 226 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{3}, lie.Weight{1}, lie.Weight{3}}, 3, big.NewInt(0)}, 227 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{0}, lie.Weight{0}, lie.Weight{0}}, 3, big.NewInt(1)}, 228 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{3}, lie.Weight{0}, lie.Weight{0}}, 3, big.NewInt(0)}, 229 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{2}, lie.Weight{0}, lie.Weight{2}}, 3, big.NewInt(1)}, 230 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{3}, lie.Weight{0}, lie.Weight{1}}, 3, big.NewInt(0)}, 231 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{2}, lie.Weight{3}, lie.Weight{0}}, 3, big.NewInt(0)}, 232 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{3}, lie.Weight{3}}, 3, big.NewInt(0)}, 233 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{3}, lie.Weight{3}, lie.Weight{1}}, 3, big.NewInt(0)}, 234 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 2}, lie.Weight{2, 1}, lie.Weight{2, 0}}, 3, big.NewInt(0)}, 235 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 0}, lie.Weight{2, 1}, lie.Weight{0, 2}}, 3, big.NewInt(0)}, 236 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{0, 3}, lie.Weight{0, 3}, lie.Weight{0, 1}}, 3, big.NewInt(0)}, 237 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{3, 0}, lie.Weight{2, 0}, lie.Weight{2, 1}}, 3, big.NewInt(1)}, 238 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 1}, lie.Weight{1, 1}, lie.Weight{3, 0}}, 3, big.NewInt(1)}, 239 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 2}, lie.Weight{1, 1}, lie.Weight{0, 1}}, 3, big.NewInt(0)}, 240 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 2}, lie.Weight{2, 1}, lie.Weight{1, 1}}, 3, big.NewInt(1)}, 241 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 1}, lie.Weight{1, 2}, lie.Weight{1, 2}}, 3, big.NewInt(0)}, 242 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{0, 2}, lie.Weight{0, 0}, lie.Weight{0, 2}}, 3, big.NewInt(0)}, 243 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 1}, lie.Weight{1, 1}, lie.Weight{2, 1}}, 3, big.NewInt(0)}, 244 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 0, 2}, lie.Weight{0, 1, 2}, lie.Weight{0, 2, 1}}, 3, big.NewInt(0)}, 245 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{2, 0, 0}, lie.Weight{0, 0, 3}, lie.Weight{3, 0, 0}}, 3, big.NewInt(0)}, 246 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{2, 1, 0}, lie.Weight{0, 0, 1}, lie.Weight{0, 1, 2}}, 3, big.NewInt(0)}, 247 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 1, 1}, lie.Weight{1, 1, 1}, lie.Weight{3, 0, 0}}, 3, big.NewInt(0)}, 248 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 0, 1}, lie.Weight{2, 1, 0}, lie.Weight{0, 0, 3}}, 3, big.NewInt(1)}, 249 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{1, 0, 2}, lie.Weight{1, 1, 0}, lie.Weight{1, 2, 0}}, 3, big.NewInt(0)}, 250 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{2, 0, 1}, lie.Weight{1, 0, 2}, lie.Weight{2, 1, 0}}, 3, big.NewInt(0)}, 251 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{2, 0, 1}, lie.Weight{1, 0, 2}, lie.Weight{1, 0, 1}}, 3, big.NewInt(1)}, 252 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 0, 2}, lie.Weight{1, 1, 1}, lie.Weight{1, 0, 1}}, 3, big.NewInt(1)}, 253 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 1, 1}, lie.Weight{0, 0, 1}, lie.Weight{0, 2, 0}}, 3, big.NewInt(1)}, 254 255 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{1}, lie.Weight{0}, lie.Weight{1}}, 3, big.NewInt(0)}, 256 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{2}, lie.Weight{0}, lie.Weight{3}, lie.Weight{3}}, 3, big.NewInt(0)}, 257 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{3}, lie.Weight{3}, lie.Weight{0}, lie.Weight{0}}, 3, big.NewInt(1)}, 258 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{2}, lie.Weight{0}, lie.Weight{0}}, 3, big.NewInt(0)}, 259 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{1}, lie.Weight{2}, lie.Weight{3}}, 3, big.NewInt(0)}, 260 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{1}, lie.Weight{2}, lie.Weight{3}}, 3, big.NewInt(0)}, 261 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{0}, lie.Weight{1}, lie.Weight{2}, lie.Weight{0}}, 3, big.NewInt(0)}, 262 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{0}, lie.Weight{3}, lie.Weight{1}, lie.Weight{2}}, 3, big.NewInt(1)}, 263 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{1}, lie.Weight{2}, lie.Weight{0}, lie.Weight{1}}, 3, big.NewInt(1)}, 264 {lie.NewTypeARootSystem(1), []lie.Weight{lie.Weight{2}, lie.Weight{0}, lie.Weight{0}, lie.Weight{1}}, 3, big.NewInt(0)}, 265 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 0}, lie.Weight{2, 0}, lie.Weight{2, 1}, lie.Weight{0, 2}}, 3, big.NewInt(0)}, 266 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{0, 0}, lie.Weight{0, 1}, lie.Weight{0, 0}, lie.Weight{1, 1}}, 3, big.NewInt(0)}, 267 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 1}, lie.Weight{0, 2}, lie.Weight{1, 0}, lie.Weight{0, 0}}, 3, big.NewInt(1)}, 268 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 0}, lie.Weight{0, 3}, lie.Weight{0, 0}, lie.Weight{2, 0}}, 3, big.NewInt(1)}, 269 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 0}, lie.Weight{2, 1}, lie.Weight{3, 0}, lie.Weight{0, 2}}, 3, big.NewInt(0)}, 270 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 0}, lie.Weight{2, 0}, lie.Weight{1, 0}, lie.Weight{0, 2}}, 3, big.NewInt(1)}, 271 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{0, 2}, lie.Weight{2, 0}, lie.Weight{1, 1}, lie.Weight{0, 1}}, 3, big.NewInt(0)}, 272 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{1, 0}, lie.Weight{2, 1}, lie.Weight{0, 1}, lie.Weight{0, 2}}, 3, big.NewInt(0)}, 273 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 1}, lie.Weight{2, 1}, lie.Weight{1, 0}, lie.Weight{2, 0}}, 3, big.NewInt(0)}, 274 {lie.NewTypeARootSystem(2), []lie.Weight{lie.Weight{2, 1}, lie.Weight{1, 1}, lie.Weight{2, 1}, lie.Weight{1, 0}}, 3, big.NewInt(2)}, 275 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{1, 1, 0}, lie.Weight{2, 0, 1}, lie.Weight{0, 0, 2}, lie.Weight{2, 0, 1}}, 3, big.NewInt(0)}, 276 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 1, 1}, lie.Weight{0, 2, 1}, lie.Weight{0, 3, 0}, lie.Weight{0, 0, 2}}, 3, big.NewInt(0)}, 277 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 2, 1}, lie.Weight{0, 1, 1}, lie.Weight{2, 0, 1}, lie.Weight{1, 1, 0}}, 3, big.NewInt(3)}, 278 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 1, 1}, lie.Weight{0, 1, 0}, lie.Weight{0, 1, 1}, lie.Weight{0, 1, 1}}, 3, big.NewInt(0)}, 279 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{1, 0, 0}, lie.Weight{0, 0, 3}, lie.Weight{0, 0, 0}, lie.Weight{2, 0, 0}}, 3, big.NewInt(1)}, 280 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 2, 0}, lie.Weight{2, 0, 0}, lie.Weight{1, 1, 1}, lie.Weight{2, 1, 0}}, 3, big.NewInt(1)}, 281 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{1, 2, 0}, lie.Weight{0, 1, 2}, lie.Weight{0, 0, 2}, lie.Weight{0, 0, 1}}, 3, big.NewInt(0)}, 282 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{0, 3, 0}, lie.Weight{0, 0, 3}, lie.Weight{1, 1, 1}, lie.Weight{1, 0, 2}}, 3, big.NewInt(0)}, 283 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{1, 1, 1}, lie.Weight{0, 1, 0}, lie.Weight{2, 0, 1}, lie.Weight{1, 1, 1}}, 3, big.NewInt(0)}, 284 {lie.NewTypeARootSystem(3), []lie.Weight{lie.Weight{2, 0, 0}, lie.Weight{0, 0, 2}, lie.Weight{2, 0, 0}, lie.Weight{0, 0, 2}}, 3, big.NewInt(2)}, 285 } 286 287 for _, c := range cases { 288 alg := lie.NewAlgebra(c.rtsys) 289 bun := NewCBBundle(alg, c.wts, c.ell) 290 got := bun.Rank() 291 if got.Cmp(c.want) != 0 { 292 t.Errorf("For type A CBBundle(wts: %v, ell: %v): Rank() = %v, want %v", 293 c.wts, c.ell, got, c.want) 294 } 295 } 296 } 297 298 func TestDivisor(t *testing.T) { 299 cases := []struct { 300 rtsys lie.RootSystem 301 wt lie.Weight 302 ell int 303 n int 304 want []*big.Rat 305 }{ 306 // n=4, l=1 307 {lie.NewTypeARootSystem(1), lie.Weight{0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 308 {lie.NewTypeARootSystem(1), lie.Weight{1}, 1, 4, []*big.Rat{big.NewRat(1, 3)}}, 309 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 310 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 311 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 312 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 1, 4, []*big.Rat{big.NewRat(2, 3)}}, 313 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 314 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 315 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 316 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 1, 4, []*big.Rat{big.NewRat(2, 3)}}, 317 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 1, 4, []*big.Rat{big.NewRat(0, 1)}}, 318 319 // n=4, l=2 320 {lie.NewTypeARootSystem(1), lie.Weight{0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 321 {lie.NewTypeARootSystem(1), lie.Weight{1}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 322 {lie.NewTypeARootSystem(1), lie.Weight{2}, 2, 4, []*big.Rat{big.NewRat(2, 3)}}, 323 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 324 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 2, 4, []*big.Rat{big.NewRat(1, 1)}}, 325 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 326 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 1}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 327 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 328 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 329 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 1}, 2, 4, []*big.Rat{big.NewRat(2, 3)}}, 330 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 2, 4, []*big.Rat{big.NewRat(4, 3)}}, 331 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 332 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 2, 4, []*big.Rat{big.NewRat(1, 1)}}, 333 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 0}, 2, 4, []*big.Rat{big.NewRat(2, 3)}}, 334 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 335 336 // n=6 337 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 2, 6, []*big.Rat{big.NewRat(0, 1), big.NewRat(0, 1)}}, 338 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 2, 6, []*big.Rat{big.NewRat(1, 1), big.NewRat(3, 1)}}, 339 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 2, 6, []*big.Rat{big.NewRat(8, 5), big.NewRat(4, 5)}}, 340 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 2, 6, []*big.Rat{big.NewRat(27, 5), big.NewRat(31, 5)}}, 341 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 0}, 3, 6, []*big.Rat{big.NewRat(0, 1), big.NewRat(0, 1)}}, 342 {lie.NewTypeARootSystem(3), lie.Weight{0, 0, 2}, 3, 6, []*big.Rat{big.NewRat(0, 1), big.NewRat(0, 1)}}, 343 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 0}, 3, 6, []*big.Rat{big.NewRat(0, 1), big.NewRat(0, 1)}}, 344 {lie.NewTypeARootSystem(3), lie.Weight{0, 1, 2}, 3, 6, []*big.Rat{big.NewRat(4, 1), big.NewRat(8, 1)}}, 345 {lie.NewTypeARootSystem(3), lie.Weight{0, 2, 0}, 3, 6, []*big.Rat{big.NewRat(64, 5), big.NewRat(62, 5)}}, 346 {lie.NewTypeARootSystem(3), lie.Weight{0, 3, 0}, 3, 6, []*big.Rat{big.NewRat(12, 5), big.NewRat(6, 5)}}, 347 {lie.NewTypeARootSystem(3), lie.Weight{1, 0, 1}, 3, 6, []*big.Rat{big.NewRat(22, 1), big.NewRat(34, 1)}}, 348 {lie.NewTypeARootSystem(3), lie.Weight{1, 1, 1}, 3, 6, []*big.Rat{big.NewRat(122, 1), big.NewRat(137, 1)}}, 349 {lie.NewTypeARootSystem(3), lie.Weight{2, 0, 0}, 3, 6, []*big.Rat{big.NewRat(0, 1), big.NewRat(0, 1)}}, 350 {lie.NewTypeARootSystem(3), lie.Weight{2, 1, 0}, 3, 6, []*big.Rat{big.NewRat(4, 1), big.NewRat(8, 1)}}, 351 352 // Allowing zero rank 353 {lie.NewTypeARootSystem(2), lie.Weight{0, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 354 {lie.NewTypeARootSystem(2), lie.Weight{0, 1}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 355 {lie.NewTypeARootSystem(2), lie.Weight{0, 2}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 356 {lie.NewTypeARootSystem(2), lie.Weight{1, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 357 {lie.NewTypeARootSystem(2), lie.Weight{1, 1}, 2, 4, []*big.Rat{big.NewRat(1, 1)}}, 358 {lie.NewTypeARootSystem(2), lie.Weight{2, 0}, 2, 4, []*big.Rat{big.NewRat(0, 1)}}, 359 } 360 361 for _, c := range cases { 362 alg := lie.NewAlgebra(c.rtsys) 363 bun := NewSymmetricCBBundle(alg, c.wt, c.ell, c.n) 364 got := bun.SymmetrizedDivisor() 365 if len(got) != len(c.want) { 366 t.Errorf("For type A CBBundle(wt: %v, ell: %v, n: %v): wrong divisor dimension %v, want %v", 367 c.wt, c.ell, c.n, len(got), len(c.want)) 368 } 369 for i := range got { 370 if got[i].Cmp(c.want[i]) != 0 { 371 t.Errorf("For type A CBBundle(wt: %v, ell: %v, n: %v): Divisor() = %v, want %v", 372 c.wt, c.ell, c.n, got, c.want) 373 } 374 } 375 } 376 } 377 378 func BenchmarkSymmetricCBRank(b *testing.B) { 379 rank := 5 380 level := 4 381 n := 10 382 alg := lie.NewAlgebra(lie.NewTypeARootSystem(rank)) 383 wts := alg.Weights(level) 384 b.ReportAllocs() 385 for i := 0; i < 1; i++ { 386 for j := 0; j < len(wts); j++ { 387 bun := NewSymmetricCBBundle(alg, wts[j], level, n) 388 bun.Rank() 389 // if rk.Cmp(big.NewInt(0)) == 0 { 390 // continue 391 // } 392 // fmt.Printf("%v: %v\n", wts[j], rk) 393 } 394 } 395 } 396 397 func BenchmarkSymmetricDivisor(b *testing.B) { 398 rank := 5 399 level := 4 400 n := 100 401 alg := lie.NewAlgebra(lie.NewTypeARootSystem(rank)) 402 wts := alg.Weights(level) 403 404 b.ReportAllocs() 405 for i := 0; i < 1; i++ { 406 for j := 0; j < len(wts); j++ { 407 bun := NewSymmetricCBBundle(alg, wts[j], level, n) 408 // rk := bun.Rank() 409 bun.SymmetrizedDivisor() 410 // if rk.Cmp(big.NewInt(0)) == 0 { 411 // continue 412 // } 413 // fmt.Printf("%v: %v %v\n", wts[j], rk, div) 414 } 415 } 416 }