Ticket #14686: trac_14686-crystals_speedup_functions-ts.patch
File trac_14686-crystals_speedup_functions-ts.patch, 112.0 KB (added by , 8 years ago) |
---|
-
sage/categories/crystals.py
# HG changeset patch # User Travis Scrimshaw <tscrim@ucdavis.edur> # Date 1370443831 25200 # Node ID 0892d08a377cc97ef61c6db7ef99a45ba2a600d7 # Parent 675a8a107501d4753ef414bca4feb2d217305872 #14686: More crystals speedups by changing basic crystal functions. diff --git a/sage/categories/crystals.py b/sage/categories/crystals.py
a b class Crystals(Category_singleton): 42 42 43 43 Furthermore, their elements should implement the following methods: 44 44 45 - ``x. e(i)`` (returning `e_i(x)`)45 - ``x._e(i)`` (returning `e_i(x)`) 46 46 47 - ``x. f(i)`` (returning `f_i(x)`)47 - ``x._f(i)`` (returning `f_i(x)`) 48 48 49 - ``x. epsilon(i)`` (returning `\varepsilon_i(x)`)49 - ``x._epsilon(i)`` (returning `\varepsilon_i(x)`) 50 50 51 - ``x.phi(i)`` (returning `\varphi_i(x)`) 51 - ``x._phi(i)`` (returning `\varphi_i(x)`) 52 53 Each of these methods can assume that `i` is in the index set. 52 54 53 55 EXAMPLES:: 54 56 55 57 sage: from sage.misc.abstract_method import abstract_methods_of_class 56 58 sage: abstract_methods_of_class(Crystals().element_class) 57 {'required': [' e', 'epsilon', 'f', 'phi', 'weight'], 'optional': []}59 {'required': ['_e', '_epsilon', '_f', '_phi', 'weight'], 'optional': []} 58 60 59 61 TESTS:: 60 62 … … class Crystals(Category_singleton): 256 258 index_set = self.index_set() 257 259 if max_depth < float('inf'): 258 260 from sage.combinat.backtrack import TransitiveIdealGraded 259 return TransitiveIdealGraded(lambda x: [x. f(i) for i in index_set]260 + [x. e(i) for i in index_set],261 return TransitiveIdealGraded(lambda x: [x._f(i) for i in index_set] 262 + [x._e(i) for i in index_set], 261 263 self.module_generators, max_depth).__iter__() 262 264 from sage.combinat.backtrack import TransitiveIdeal 263 return TransitiveIdeal(lambda x: [x. f(i) for i in index_set]264 + [x. e(i) for i in index_set],265 return TransitiveIdeal(lambda x: [x._f(i) for i in index_set] 266 + [x._e(i) for i in index_set], 265 267 self.module_generators).__iter__() 266 268 267 269 def subcrystal(self, index_set=None, generators=None, max_depth=float("inf"), … … class Crystals(Category_singleton): 312 314 from sage.combinat.backtrack import TransitiveIdealGraded 313 315 314 316 if direction == 'both': 315 return TransitiveIdealGraded(lambda x: [x. f(i) for i in index_set]316 + [x. e(i) for i in index_set],317 return TransitiveIdealGraded(lambda x: [x._f(i) for i in index_set] 318 + [x._e(i) for i in index_set], 317 319 generators, max_depth) 318 320 if direction == 'upper': 319 return TransitiveIdealGraded(lambda x: [x. e(i) for i in index_set],321 return TransitiveIdealGraded(lambda x: [x._e(i) for i in index_set], 320 322 generators, max_depth) 321 323 if direction == 'lower': 322 return TransitiveIdealGraded(lambda x: [x. f(i) for i in index_set],324 return TransitiveIdealGraded(lambda x: [x._f(i) for i in index_set], 323 325 generators, max_depth) 324 326 raise ValueError("direction must be either 'both', 'upper', or 'lower'") 325 327 … … class Crystals(Category_singleton): 562 564 for x in subset: 563 565 d[x] = {} 564 566 for i in index_set: 565 child = x. f(i)567 child = x._f(i) 566 568 if child is None or child not in subset: 567 569 continue 568 570 d[x][child]=i … … class Crystals(Category_singleton): 797 799 result += " " + vertex_key(x) + " [ label = \" \", texlbl = \"$"+quoted_latex(x)+"$\" ];\n" 798 800 for x in self: 799 801 for i in self.index_set(): 800 child = x. f(i)802 child = x._f(i) 801 803 if child is None: 802 804 continue 803 805 # result += " " + vertex_key(x) + " -> "+vertex_key(child)+ " [ label = \" \", texlbl = \""+quoted_latex(i)+"\" ];\n" … … class Crystals(Category_singleton): 863 865 """ 864 866 return self.parent().cartan_type() 865 867 866 @abstract_method867 868 def e(self, i): 868 869 r""" 869 Returns `e_i(x)` if it exists or ``None`` otherwise. 870 Return `e_i(x)` if it exists or ``None`` otherwise. 871 872 EXAMPLES:: 873 874 sage: C = Crystals().example(5) 875 sage: x = C[2]; x 876 3 877 sage: x.e(1), x.e(2), x.e(3) 878 (None, 2, None) 879 """ 880 if i not in self.index_set(): 881 raise ValueError("%s is not in the index set"%i) 882 return self._e(i) 883 884 def f(self, i): 885 r""" 886 Return `f_i(x)` if it exists or ``None`` otherwise. 887 888 EXAMPLES:: 889 890 sage: C = Crystals().example(5) 891 sage: x = C[1]; x 892 2 893 sage: x.f(1), x.f(2), x.f(3) 894 (None, 3, None) 895 """ 896 if i not in self.index_set(): 897 raise ValueError("%s is not in the index set"%i) 898 return self._f(i) 899 900 def epsilon(self, i): 901 r""" 902 Return `\varepsilon_i` of ``self``. 903 904 EXAMPLES:: 905 906 sage: C = CrystalOfLetters(['A',5]) 907 sage: C(1).epsilon(1) 908 0 909 sage: C(2).epsilon(1) 910 1 911 """ 912 if i not in self.index_set(): 913 raise ValueError("%s is not in the index set"%i) 914 return self._epsilon(i) 915 916 def phi(self, i): 917 r""" 918 Return `\varphi_i` of ``self``. 919 920 EXAMPLES:: 921 922 sage: C = CrystalOfLetters(['A',5]) 923 sage: C(1).phi(1) 924 1 925 sage: C(2).phi(1) 926 0 927 """ 928 if i not in self.index_set(): 929 raise ValueError("%s is not in the index set"%i) 930 return self._phi(i) 931 932 @abstract_method 933 def _e(self, i): 934 r""" 935 Return `e_i` of ``self`` if it exists or ``None`` otherwise with 936 no safety check that ``i`` is in the index set. 870 937 871 938 This method should be implemented by the element class of 872 939 the crystal. … … class Crystals(Category_singleton): 876 943 sage: C = Crystals().example(5) 877 944 sage: x = C[2]; x 878 945 3 879 sage: x. e(1), x.e(2), x.e(3)946 sage: x._e(1), x._e(2), x._e(3) 880 947 (None, 2, None) 881 948 """ 882 949 883 950 @abstract_method 884 def f(self, i):951 def _f(self, i): 885 952 r""" 886 Returns `f_i(x)` if it exists or ``None`` otherwise. 953 Return `f_i` of ``self`` if it exists or ``None`` otherwise with 954 no safety check that ``i`` is in the index set. 887 955 888 956 This method should be implemented by the element class of 889 957 the crystal. … … class Crystals(Category_singleton): 893 961 sage: C = Crystals().example(5) 894 962 sage: x = C[1]; x 895 963 2 896 sage: x. f(1), x.f(2), x.f(3)964 sage: x._f(1), x._f(2), x._f(3) 897 965 (None, 3, None) 898 966 """ 899 967 900 968 @abstract_method 901 def epsilon(self, i):969 def _epsilon(self, i): 902 970 r""" 971 Return `\varepsilon_i` of ``self`` otherwise with no safety check 972 that ``i`` is in the index set. 973 974 This method should be implemented by the element class of 975 the crystal. 976 903 977 EXAMPLES:: 904 978 905 979 sage: C = CrystalOfLetters(['A',5]) 906 sage: C(1). epsilon(1)980 sage: C(1)._epsilon(1) 907 981 0 908 sage: C(2). epsilon(1)982 sage: C(2)._epsilon(1) 909 983 1 910 984 """ 911 985 912 986 @abstract_method 913 def phi(self, i):987 def _phi(self, i): 914 988 r""" 989 Return `\varphi_i` of ``self`` otherwise with no safety check 990 that ``i`` is in the index set. 991 992 This method should be implemented by the element class of 993 the crystal. 994 915 995 EXAMPLES:: 916 996 917 997 sage: C = CrystalOfLetters(['A',5]) 918 sage: C(1). phi(1)998 sage: C(1)._phi(1) 919 999 1 920 sage: C(2). phi(1)1000 sage: C(2)._phi(1) 921 1001 0 922 1002 """ 923 1003 … … class Crystals(Category_singleton): 963 1043 (1, 0, 0, 0, 0, 0) 964 1044 """ 965 1045 Lambda = self.parent().Lambda() 966 return sum(self. epsilon(i) * Lambda[i] for i in self.index_set())1046 return sum(self._epsilon(i) * Lambda[i] for i in self.index_set()) 967 1047 968 1048 def Phi(self): 969 1049 """ … … class Crystals(Category_singleton): 978 1058 (1, 1, 0, 0, 0, 0) 979 1059 """ 980 1060 Lambda = self.parent().Lambda() 981 return sum(self. phi(i) * Lambda[i] for i in self.index_set())1061 return sum(self._phi(i) * Lambda[i] for i in self.index_set()) 982 1062 983 1063 def f_string(self, list): 984 1064 r""" 985 Applies `f_{i_r} ... f_{i_1}` to self for `list = [i_1, ..., i_r]` 1065 Apply `f_{i_r} \cdots f_{i_1}` to ``self`` for 1066 ``lst`` as `[i_1, \ldots, i_r]`. 986 1067 987 1068 EXAMPLES:: 988 1069 … … class Crystals(Category_singleton): 1001 1082 1002 1083 def e_string(self, list): 1003 1084 r""" 1004 Applies `e_{i_r} ... e_{i_1}` to self for `list = [i_1, ..., i_r]` 1085 Applies `e_{i_r} \cdots e_{i_1}` to ``self`` for 1086 ``lst`` as `[i_1, \ldots, i_r]`. 1005 1087 1006 1088 EXAMPLES:: 1007 1089 … … class Crystals(Category_singleton): 1018 1100 return None 1019 1101 return b 1020 1102 1103 def _f_string(self, lst): 1104 r""" 1105 Apply `f_{i_r} \cdots f_{i_1}` to ``self`` for 1106 ``lst`` as `[i_1, \ldots, i_r]`. Assumes that all indices are in 1107 the index set. 1108 1109 EXAMPLES:: 1110 1111 sage: C = CrystalOfLetters(['A',3]) 1112 sage: b = C(1) 1113 sage: b._f_string([1,2]) 1114 3 1115 sage: b._f_string([2,1]) 1116 """ 1117 b = self 1118 for i in lst: 1119 b = b._f(i) 1120 if b is None: 1121 return None 1122 return b 1123 1124 def _e_string(self, lst): 1125 r""" 1126 Apply `e_{i_r} \cdots e_{i_1}` to ``self`` for 1127 ``lst`` as `[i_1, \ldots, i_r]`. Assumes that all indices are in 1128 the index set. 1129 1130 EXAMPLES:: 1131 1132 sage: C = CrystalOfLetters(['A',3]) 1133 sage: b = C(3) 1134 sage: b._e_string([2,1]) 1135 1 1136 sage: b._e_string([1,2]) 1137 """ 1138 b = self 1139 for i in lst: 1140 b = b._e(i) 1141 if b is None: 1142 return None 1143 return b 1144 1021 1145 def s(self, i): 1022 1146 r""" 1023 1147 Returns the reflection of ``self`` along its `i`-string … … class Crystals(Category_singleton): 1040 1164 b = self 1041 1165 if d > 0: 1042 1166 for j in range(d): 1043 b = b. f(i)1167 b = b._f(i) 1044 1168 else: 1045 1169 for j in range(-d): 1046 b = b. e(i)1170 b = b._e(i) 1047 1171 return b 1048 1172 1049 1173 def is_highest_weight(self, index_set = None): … … class Crystals(Category_singleton): 1065 1189 """ 1066 1190 if index_set is None: 1067 1191 index_set = self.index_set() 1068 return all(self. e(i) is None for i in index_set)1192 return all(self._e(i) is None for i in index_set) 1069 1193 1070 1194 def is_lowest_weight(self, index_set = None): 1071 1195 r""" … … class Crystals(Category_singleton): 1086 1210 """ 1087 1211 if index_set is None: 1088 1212 index_set = self.index_set() 1089 return all(self. f(i) is None for i in index_set)1213 return all(self._f(i) is None for i in index_set) 1090 1214 1091 1215 def to_highest_weight(self, index_set = None): 1092 1216 r""" -
sage/categories/examples/crystals.py
diff --git a/sage/categories/examples/crystals.py b/sage/categories/examples/crystals.py
a b class HighestWeightCrystalOfTypeA(Unique 81 81 Only the following basic operations are implemented: 82 82 - :meth:`~sage.categories.crystals.Crystals.cartan_type` or an attribute _cartan_type 83 83 - an attribute module_generators 84 - :meth:`.Element. e`85 - :meth:`.Element. f`84 - :meth:`.Element._e` 85 - :meth:`.Element._f` 86 86 87 87 All the other usual crystal operations are inherited from the 88 88 categories; for example:: … … class HighestWeightCrystalOfTypeA(Unique 118 118 119 119 class Element(ElementWrapper): 120 120 121 def e(self, i):121 def _e(self, i): 122 122 r""" 123 Return sthe action of `e_i` on ``self``.123 Return the action of `e_i` on ``self``. 124 124 125 125 EXAMPLES:: 126 126 127 127 sage: C = Crystals().example(4) 128 sage: [[c,i,c. e(i)] for i in C.index_set() for c in C if c.e(i) is not None]128 sage: [[c,i,c._e(i)] for i in C.index_set() for c in C if c._e(i) is not None] 129 129 [[2, 1, 1], [3, 2, 2], [4, 3, 3], [5, 4, 4]] 130 130 """ 131 assert i in self.index_set()132 131 if self.value == i+1: 133 132 return self.parent()(self.value-1) 134 133 else: 135 134 return None 136 135 137 def f(self, i):136 def _f(self, i): 138 137 r""" 139 Return sthe action of `f_i` on ``self``.138 Return the action of `f_i` on ``self``. 140 139 141 140 EXAMPLES:: 142 141 143 142 sage: C = Crystals().example(4) 144 sage: [[c,i,c. f(i)] for i in C.index_set() for c in C if c.f(i) is not None]143 sage: [[c,i,c._f(i)] for i in C.index_set() for c in C if c._f(i) is not None] 145 144 [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5]] 146 145 """ 147 assert i in self.index_set()148 146 if self.value == i: 149 147 return self.parent()(self.value+1) 150 148 else: … … class NaiveCrystal(UniqueRepresentation, 195 193 return "A broken crystal, defined by digraph, of dimension five." 196 194 197 195 class Element(ElementWrapper): 198 def e(self, i):196 def _e(self, i): 199 197 r""" 200 Return sthe action of `e_i` on ``self``.198 Return the action of `e_i` on ``self``. 201 199 202 200 EXAMPLES:: 203 201 204 202 sage: C = Crystals().example(choice='naive') 205 sage: [[c,i,c. e(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c.e(i) is not None]203 sage: [[c,i,c._e(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c._e(i) is not None] 206 204 [[1, 1, 0], [2, 1, 1], [3, 1, 2], [5, 1, 3], [4, 2, 0], [5, 2, 4]] 207 205 """ 208 assert i in self.index_set()209 206 for edge in self.parent().G.edges(): 210 207 if edge[1]==int(str(self)) and edge[2]==i: 211 208 return self.parent()(edge[0]) 212 209 return None 213 210 214 def f(self, i):211 def _f(self, i): 215 212 r""" 216 Return sthe action of `f_i` on ``self``.213 Return the action of `f_i` on ``self``. 217 214 218 215 EXAMPLES:: 219 216 220 217 sage: C = Crystals().example(choice='naive') 221 sage: [[c,i,c. f(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c.f(i) is not None]218 sage: [[c,i,c._f(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c._f(i) is not None] 222 219 [[0, 1, 1], [1, 1, 2], [2, 1, 3], [3, 1, 5], [0, 2, 4], [4, 2, 5]] 223 220 """ 224 assert i in self.index_set()225 221 for edge in self.parent().G.edges_incident(int(str(self))): 226 222 if edge[2] == i: 227 223 return self.parent()(edge[1]) -
sage/categories/regular_crystals.py
diff --git a/sage/categories/regular_crystals.py b/sage/categories/regular_crystals.py
a b class RegularCrystals(Category_singleton 208 208 209 209 class ElementMethods: 210 210 211 def epsilon(self, i):211 def _epsilon(self, i): 212 212 r""" 213 213 Return `\varepsilon_i` of ``self``. 214 214 215 215 EXAMPLES:: 216 216 217 217 sage: C = CrystalOfLetters(['A',5]) 218 sage: C(1). epsilon(1)218 sage: C(1)._epsilon(1) 219 219 0 220 sage: C(2). epsilon(1)220 sage: C(2)._epsilon(1) 221 221 1 222 222 """ 223 assert i in self.index_set() 224 x = self.e(i) 223 x = self._e(i) 225 224 eps = 0 226 225 while x is not None: 227 x = x. e(i)226 x = x._e(i) 228 227 eps = eps + 1 229 228 return eps 230 229 231 def phi(self, i):230 def _phi(self, i): 232 231 r""" 233 232 Return `\varphi_i` of ``self``. 234 233 235 234 EXAMPLES:: 236 235 237 236 sage: C = CrystalOfLetters(['A',5]) 238 sage: C(1). phi(1)237 sage: C(1)._phi(1) 239 238 1 240 sage: C(2). phi(1)239 sage: C(2)._phi(1) 241 240 0 242 241 """ 243 assert i in self.index_set() 244 x = self.f(i) 242 x = self._f(i) 245 243 phi = 0 246 244 while x is not None: 247 x = x. f(i)245 x = x._f(i) 248 246 phi = phi + 1 249 247 return phi 250 248 … … class RegularCrystals(Category_singleton 318 316 sage: x.demazure_operator_simple(0, ring = QQ).parent() 319 317 Free module generated by Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1) over Rational Field 320 318 """ 319 if i not in self.index_set(): 320 raise ValueError("%s is not in the index set"%i) 321 321 from sage.rings.integer_ring import ZZ 322 322 if ring is None: 323 323 ring = ZZ 324 324 C = self.parent().algebra(ring) 325 r = self. phi(i) - self.epsilon(i)325 r = self._phi(i) - self._epsilon(i) 326 326 if r >= 0: 327 327 l = [self] 328 328 element = self 329 329 for k in range(r): 330 element = element. f(i)330 element = element._f(i) 331 331 l.append(element) 332 332 return C.sum_of_monomials(l) 333 333 else: 334 334 l = [] 335 335 element = self 336 336 for k in range(-r-1): 337 element = element. e(i)337 element = element._e(i) 338 338 l.append(element) 339 339 return - C.sum_of_monomials(l) 340 340 … … class RegularCrystals(Category_singleton 357 357 sage: s.stembridgeDelta_depth(1,2) 358 358 -1 359 359 """ 360 if self.e(i) is None: return 0 360 if self.e(i) is None: 361 return 0 361 362 return -self.e(i).epsilon(j) + self.epsilon(j) 362 363 363 364 def stembridgeDelta_rise(self,i,j): … … class RegularCrystals(Category_singleton 379 380 sage: s.stembridgeDelta_rise(1,2) 380 381 0 381 382 """ 382 if self.e(i) is None: return 0 383 if self.e(i) is None: 384 return 0 383 385 return self.e(i).phi(j) - self.phi(j) 384 386 385 387 def stembridgeDel_depth(self,i,j): … … class RegularCrystals(Category_singleton 401 403 sage: s.stembridgeDel_depth(1,2) 402 404 -1 403 405 """ 404 if self.f(i) is None: return 0 406 if self.f(i) is None: 407 return 0 405 408 return -self.epsilon(j) + self.f(i).epsilon(j) 406 409 407 410 def stembridgeDel_rise(self,i,j): … … class RegularCrystals(Category_singleton 423 426 sage: s.stembridgeDel_rise(1,2) 424 427 0 425 428 """ 426 if self.f(i) is None: return 0 429 if self.f(i) is None: 430 return 0 427 431 return self.phi(j)-self.f(i).phi(j) 428 432 429 433 def stembridgeTriple(self,i,j): … … class RegularCrystals(Category_singleton 458 462 sage: u.stembridgeTriple(1,2) 459 463 (-2, -1, -1) 460 464 """ 461 if self.e(i) is None: return None 465 if self.e(i) is None: 466 return None 462 467 b=self.stembridgeDelta_depth(i,j) 463 468 c=self.stembridgeDelta_rise(i,j) 464 469 dd=self.cartan_type().dynkin_diagram() … … class RegularCrystals(Category_singleton 500 505 """ 501 506 tester = self._tester(**options) 502 507 goodness=True 503 if index_set is None: index_set=self.index_set() 508 if index_set is None: 509 index_set=self.index_set() 504 510 505 511 for (i,j) in Subsets(index_set, 2): 506 if self. e(i) is not None and self.e(j) is not None:512 if self._e(i) is not None and self._e(j) is not None: 507 513 triple=self.stembridgeTriple(i,j) 508 514 #Test axioms P3 and P4. 509 515 if not triple[0]==triple[1]+triple[2] or triple[1]>0 or triple[2]>0: … … class RegularCrystals(Category_singleton 514 520 tester.fail() 515 521 if self.stembridgeDelta_depth(i,j)==0: 516 522 #check E_i E_j(x)= E_j E_i(x) 517 if self. e(i).e(j)!=self.e(j).e(i) or self.e(i).e(j).stembridgeDel_rise(j, i)!=0:523 if self._e(i)._e(j)!=self._e(j)._e(i) or self._e(i)._e(j).stembridgeDel_rise(j, i)!=0: 518 524 if verbose: 519 525 print 'Warning: Failed axiom P5 at: vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i,j) 520 526 goodness=False … … class RegularCrystals(Category_singleton 522 528 tester.fail() 523 529 if self.stembridgeDelta_depth(i,j)==-1 and self.stembridgeDelta_depth(j,i)==-1: 524 530 #check E_i E_j^2 E_i (x)= E_j E_i^2 E_j (x) 525 y1=self. e(j).e(i).e(i).e(j)526 y2=self. e(j).e(i).e(i).e(j)531 y1=self._e(j)._e(i)._e(i)._e(j) 532 y2=self._e(j)._e(i)._e(i)._e(j) 527 533 a=y1.stembridgeDel_rise(j, i) 528 534 b=y2.stembridgeDel_rise(i, j) 529 535 if y1!=y2 or a!=-1 or b!=-1: -
sage/combinat/crystals/affine.py
diff --git a/sage/combinat/crystals/affine.py b/sage/combinat/crystals/affine.py
a b class AffineCrystalFromClassicalElement( 325 325 Assumes that `f_0` is implemented separately. 326 326 """ 327 327 328 def e(self, i):328 def _e(self, i): 329 329 r""" 330 Return s the action of `e_i` on self.330 Return the action of `e_i` on ``self``. 331 331 332 332 EXAMPLES:: 333 333 … … class AffineCrystalFromClassicalElement( 337 337 sage: pr_inverse = attrcall("promotion_inverse") 338 338 sage: A=AffineCrystalFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) 339 339 sage: b=A(rows=[[1]]) 340 sage: b. e(0)340 sage: b._e(0) 341 341 [[3]] 342 sage: b. e(1)342 sage: b._e(1) 343 343 """ 344 344 if i == 0: 345 345 return self.e0() 346 346 else: 347 x = self.lift(). e(i)347 x = self.lift()._e(i) 348 348 if (x == None): 349 349 return None 350 350 else: 351 351 return self.parent().retract(x) 352 352 353 def f(self, i):353 def _f(self, i): 354 354 r""" 355 Return s the action of `f_i` on self.355 Return the action of `f_i` on ``self``. 356 356 357 357 EXAMPLES:: 358 358 … … class AffineCrystalFromClassicalElement( 362 362 sage: pr_inverse = attrcall("promotion_inverse") 363 363 sage: A=AffineCrystalFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) 364 364 sage: b=A(rows=[[3]]) 365 sage: b. f(0)365 sage: b._f(0) 366 366 [[1]] 367 sage: b. f(2)367 sage: b._f(2) 368 368 """ 369 369 if i == 0: 370 370 return self.f0() 371 371 else: 372 x = self.lift(). f(i)372 x = self.lift()._f(i) 373 373 if (x == None): 374 374 return None 375 375 else: … … class AffineCrystalFromClassicalElement( 381 381 """ 382 382 return super(AffineCrystalFromClassicalElement, self).epsilon(0) 383 383 384 def epsilon(self, i):385 """386 Return s the maximal time the crystal operator `e_i` can be applied to self.384 def _epsilon(self, i): 385 r""" 386 Return `\varepsilon_i` of ``self``. 387 387 388 388 EXAMPLES:: 389 389 … … class AffineCrystalFromClassicalElement( 392 392 sage: pr = attrcall("promotion") 393 393 sage: pr_inverse = attrcall("promotion_inverse") 394 394 sage: A=AffineCrystalFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) 395 sage: [x. epsilon(0) for x in A.list()]395 sage: [x._epsilon(0) for x in A.list()] 396 396 [1, 0, 0] 397 sage: [x. epsilon(1) for x in A.list()]397 sage: [x._epsilon(1) for x in A.list()] 398 398 [0, 1, 0] 399 399 """ 400 400 if i == 0: 401 401 return self.epsilon0() 402 402 else: 403 return self.lift(). epsilon(i)403 return self.lift()._epsilon(i) 404 404 405 405 def phi0(self): 406 406 r""" 407 Uses `phi_0` from the super class, but should be implemented if a faster implementation exists. 407 Uses `phi_0` from the super class, but should be implemented if a 408 faster implementation exists. 408 409 """ 409 410 return super(AffineCrystalFromClassicalElement, self).phi(0) 410 411 411 def phi(self, i):412 def _phi(self, i): 412 413 r""" 413 Return s the maximal time the crystal operator `f_i` can be applied to self.414 Return `\varphi_i` of ``self``. 414 415 415 416 EXAMPLES:: 416 417 … … class AffineCrystalFromClassicalElement( 419 420 sage: pr = attrcall("promotion") 420 421 sage: pr_inverse = attrcall("promotion_inverse") 421 422 sage: A=AffineCrystalFromClassicalAndPromotion(['A',n,1],C,pr,pr_inverse,1) 422 sage: [x. phi(0) for x in A.list()]423 sage: [x._phi(0) for x in A.list()] 423 424 [0, 0, 1] 424 sage: [x. phi(1) for x in A.list()]425 sage: [x._phi(1) for x in A.list()] 425 426 [1, 0, 0] 426 427 """ 427 428 if i == 0: 428 429 return self.phi0() 429 430 else: 430 return self.lift(). phi(i)431 return self.lift()._phi(i) 431 432 432 433 def __lt__(self, other): 433 434 """ … … class AffineCrystalFromClassicalAndPromo 603 604 sage: b.e0() 604 605 [[3]] 605 606 """ 606 x = self.parent().automorphism(self). e(self.parent().dynkin_node)607 x = self.parent().automorphism(self)._e(self.parent().dynkin_node) 607 608 if (x == None): 608 609 return None 609 610 else: … … class AffineCrystalFromClassicalAndPromo 625 626 sage: b.f0() 626 627 [[1]] 627 628 """ 628 x = self.parent().automorphism(self). f(self.parent().dynkin_node)629 x = self.parent().automorphism(self)._f(self.parent().dynkin_node) 629 630 if (x == None): 630 631 return None 631 632 else: … … class AffineCrystalFromClassicalAndPromo 646 647 [1, 0, 0] 647 648 """ 648 649 x = self.parent().automorphism(self) 649 return x.lift(). epsilon(self.parent().dynkin_node)650 return x.lift()._epsilon(self.parent().dynkin_node) 650 651 651 652 def phi0(self): 652 653 r""" … … class AffineCrystalFromClassicalAndPromo 663 664 [0, 0, 1] 664 665 """ 665 666 x = self.parent().automorphism(self) 666 return x.lift(). phi(self.parent().dynkin_node)667 return x.lift()._phi(self.parent().dynkin_node) 667 668 668 669 AffineCrystalFromClassicalAndPromotion.Element = AffineCrystalFromClassicalAndPromotionElement -
sage/combinat/crystals/alcove_path.py
diff --git a/sage/combinat/crystals/alcove_path.py b/sage/combinat/crystals/alcove_path.py
a b class CrystalOfAlcovePathsElement(Elemen 620 620 lambda_chain = self.parent()._R.lambda_chain() 621 621 return [lambda_chain.index(j) for j in self.value] 622 622 623 def phi(self, i):623 def _phi(self, i): 624 624 r""" 625 625 Return the distance to the end of the `i`-string. 626 626 … … class CrystalOfAlcovePathsElement(Elemen 630 630 EXAMPLES:: 631 631 632 632 sage: C = CrystalOfAlcovePaths(['A',2],[1,1]) 633 sage: [c. phi(1) for c in C]633 sage: [c._phi(1) for c in C] 634 634 [1, 2, 0, 1, 0, 0, 1, 0] 635 sage: [c. phi(2) for c in C]635 sage: [c._phi(2) for c in C] 636 636 [1, 0, 2, 0, 1, 1, 0, 0] 637 637 """ 638 638 highest_weight_crystal = self.parent()._highest_weight_crystal … … class CrystalOfAlcovePathsElement(Elemen 647 647 M = Integer(m)/2 - Integer(1)/2 648 648 return M 649 649 650 def epsilon(self, i):650 def _epsilon(self, i): 651 651 r""" 652 652 Return the distance to the start of the `i`-string. 653 653 654 654 EXAMPLES:: 655 655 656 656 sage: C = CrystalOfAlcovePaths(['A',2],[1,1]) 657 sage: [c. epsilon(1) for c in C]657 sage: [c._epsilon(1) for c in C] 658 658 [0, 0, 1, 1, 0, 2, 0, 1] 659 sage: [c. epsilon(2) for c in C]659 sage: [c._epsilon(2) for c in C] 660 660 [0, 1, 0, 0, 1, 0, 2, 1] 661 661 """ 662 662 #crude but functional … … class CrystalOfAlcovePathsElement(Elemen 872 872 873 873 return signs 874 874 875 def e(self, i):875 def _e(self, i): 876 876 r""" 877 877 Return the `i`-th crystal raising operator on ``self``. 878 878 … … class CrystalOfAlcovePathsElement(Elemen 885 885 sage: C = CrystalOfAlcovePaths(['A',2],[2,0]); C 886 886 Highest weight crystal of alcove paths of type ['A', 2] and weight 2*Lambda[1] 887 887 sage: x = C( () ) 888 sage: x. e(1)889 sage: x. f(1) == x.f(1).f(2).e(2)888 sage: x._e(1) 889 sage: x._f(1) == x._f(1)._f(2)._e(2) 890 890 True 891 891 """ 892 892 Parent = self.parent() … … class CrystalOfAlcovePathsElement(Elemen 995 995 996 996 return (positions, gi) 997 997 998 def f(self, i):998 def _f(self, i): 999 999 r""" 1000 1000 Returns the `i`-th crystal lowering operator on ``self``. 1001 1001 … … class CrystalOfAlcovePathsElement(Elemen 1007 1007 1008 1008 sage: C=CrystalOfAlcovePaths(['B',2],[1,1]) 1009 1009 sage: x=C( () ) 1010 sage: x. f(1)1010 sage: x._f(1) 1011 1011 ((alpha[1], 0),) 1012 sage: x. f(1).f(2)1012 sage: x._f(1)._f(2) 1013 1013 ((alpha[1], 0), (alpha[1] + alpha[2], 2)) 1014 1014 1015 1015 """ -
sage/combinat/crystals/direct_sum.py
diff --git a/sage/combinat/crystals/direct_sum.py b/sage/combinat/crystals/direct_sum.py
a b class DirectSumOfCrystals(DisjointUnionE 128 128 A class for elements of direct sums of crystals 129 129 """ 130 130 131 def e(self, i):131 def _e(self, i): 132 132 r""" 133 Return s the action of `e_i` on self.133 Return the action of `e_i` on ``self``. 134 134 135 135 EXAMPLES:: 136 136 137 137 sage: C = CrystalOfLetters(['A',2]) 138 138 sage: B = DirectSumOfCrystals([C,C], keepkey=True) 139 sage: [[b, b. e(2)] for b in B]139 sage: [[b, b._e(2)] for b in B] 140 140 [[(0, 1), None], [(0, 2), None], [(0, 3), (0, 2)], [(1, 1), None], [(1, 2), None], [(1, 3), (1, 2)]] 141 141 """ 142 142 v = self.value 143 vn = v[1]. e(i)143 vn = v[1]._e(i) 144 144 if vn is None: 145 145 return None 146 146 else: 147 147 return self.parent()(tuple([v[0],vn])) 148 148 149 def f(self, i):149 def _f(self, i): 150 150 r""" 151 Return s the action of `f_i` on self.151 Return the action of `f_i` on ``self``. 152 152 153 153 EXAMPLES:: 154 154 155 155 sage: C = CrystalOfLetters(['A',2]) 156 156 sage: B = DirectSumOfCrystals([C,C], keepkey=True) 157 sage: [[b,b. f(1)] for b in B]157 sage: [[b,b._f(1)] for b in B] 158 158 [[(0, 1), (0, 2)], [(0, 2), None], [(0, 3), None], [(1, 1), (1, 2)], [(1, 2), None], [(1, 3), None]] 159 159 """ 160 160 v = self.value 161 vn = v[1]. f(i)161 vn = v[1]._f(i) 162 162 if vn is None: 163 163 return None 164 164 else: … … class DirectSumOfCrystals(DisjointUnionE 180 180 """ 181 181 return self.value[1].weight() 182 182 183 def phi(self, i):183 def _phi(self, i): 184 184 r""" 185 185 EXAMPLES:: 186 186 187 187 sage: C = CrystalOfLetters(['A',2]) 188 188 sage: B = DirectSumOfCrystals([C,C], keepkey=True) 189 189 sage: b = B( tuple([0,C(2)]) ) 190 sage: b. phi(2)190 sage: b._phi(2) 191 191 1 192 192 """ 193 return self.value[1]. phi(i)193 return self.value[1]._phi(i) 194 194 195 def epsilon(self, i):195 def _epsilon(self, i): 196 196 r""" 197 197 EXAMPLES:: 198 198 199 199 sage: C = CrystalOfLetters(['A',2]) 200 200 sage: B = DirectSumOfCrystals([C,C], keepkey=True) 201 201 sage: b = B( tuple([0,C(2)]) ) 202 sage: b. epsilon(2)202 sage: b._epsilon(2) 203 203 0 204 204 """ 205 return self.value[1]. epsilon(i)205 return self.value[1]._epsilon(i) 206 206 -
sage/combinat/crystals/elementary_crystals.py
diff --git a/sage/combinat/crystals/elementary_crystals.py b/sage/combinat/crystals/elementary_crystals.py
a b class AbstractSingleCrystalElement(Eleme 142 142 """ 143 143 return not self.__eq__(other) 144 144 145 def e(self,i):145 def _e(self,i): 146 146 r""" 147 147 Return `e_i` of ``self``, which is ``None`` for all `i`. 148 148 … … class AbstractSingleCrystalElement(Eleme 156 156 sage: la = RootSystem(ct).weight_lattice().fundamental_weights() 157 157 sage: T = TCrystal(ct,la[1]) 158 158 sage: t = T.highest_weight_vector() 159 sage: t. e(1)160 sage: t. e(2)159 sage: t._e(1) 160 sage: t._e(2) 161 161 """ 162 162 return None 163 163 164 def f(self,i):164 def _f(self,i): 165 165 r""" 166 166 Return `f_i` of ``self``, which is ``None`` for all `i`. 167 167 … … class AbstractSingleCrystalElement(Eleme 175 175 sage: la = RootSystem(ct).weight_lattice().fundamental_weights() 176 176 sage: T = TCrystal(ct,la[1]) 177 177 sage: t = T.highest_weight_vector() 178 sage: t. f(1)179 sage: t. f(2)178 sage: t._f(1) 179 sage: t._f(2) 180 180 """ 181 181 return None 182 182 … … class TCrystal(Parent, UniqueRepresentat 337 337 """ 338 338 return "{t_{"+self.parent()._weight._latex_()+"}}" 339 339 340 def epsilon(self,i):340 def _epsilon(self,i): 341 341 r""" 342 342 Return `\varepsilon_i` of ``self``, which is `-\infty` for all `i`. 343 343 … … class TCrystal(Parent, UniqueRepresentat 351 351 sage: la = RootSystem(ct).weight_lattice().fundamental_weights() 352 352 sage: T = TCrystal(ct,la[4]+la[5]-la[1]-la[2]) 353 353 sage: t = T.highest_weight_vector() 354 sage: [t. epsilon(i) for i in T.index_set()]354 sage: [t._epsilon(i) for i in T.index_set()] 355 355 [-inf, -inf, -inf, -inf, -inf] 356 356 """ 357 357 return float("-inf") 358 358 359 def phi(self,i):359 def _phi(self,i): 360 360 r""" 361 361 Return `\varphi_i` of ``self``, which is `-\infty` for all `i`. 362 362 … … class TCrystal(Parent, UniqueRepresentat 370 370 sage: la = RootSystem(ct).weight_lattice().fundamental_weights() 371 371 sage: T = TCrystal(ct,la[4]+la[5]-la[1]-la[2]) 372 372 sage: t = T.highest_weight_vector() 373 sage: [t. phi(i) for i in T.index_set()]373 sage: [t._phi(i) for i in T.index_set()] 374 374 [-inf, -inf, -inf, -inf, -inf] 375 375 """ 376 376 return float("-inf") … … class RCrystal(Parent, UniqueRepresentat 565 565 """ 566 566 return "{r_{"+self.parent()._weight._latex_()+"}}" 567 567 568 def epsilon(self, i):568 def _epsilon(self, i): 569 569 r""" 570 570 Return `\varepsilon_i` of ``self``. 571 571 … … class RCrystal(Parent, UniqueRepresentat 581 581 sage: la = RootSystem(['A',2]).weight_lattice().fundamental_weights() 582 582 sage: R = RCrystal("A2",la[1]) 583 583 sage: r = R.highest_weight_vector() 584 sage: [r. epsilon(i) for i in R.index_set()]584 sage: [r._epsilon(i) for i in R.index_set()] 585 585 [-1, 0] 586 586 """ 587 587 P = self.cartan_type().root_system().ambient_space() 588 588 h = P.simple_coroots() 589 return - 1*P(self.weight()).scalar(h[i])589 return -P(self.weight()).scalar(h[i]) 590 590 591 def phi(self,i):591 def _phi(self,i): 592 592 r""" 593 593 Return `\varphi_i` of ``self``, which is `0` for all `i`. 594 594 … … class RCrystal(Parent, UniqueRepresentat 601 601 sage: la = RootSystem("C5").weight_lattice().fundamental_weights() 602 602 sage: R = RCrystal("C5",la[4]+la[5]) 603 603 sage: r = R.highest_weight_vector() 604 sage: [r. phi(i) for i in R.index_set()]604 sage: [r._phi(i) for i in R.index_set()] 605 605 [0, 0, 0, 0, 0] 606 606 """ 607 607 return 0 … … class ElementaryCrystal(Parent, UniqueRe 823 823 """ 824 824 return "{b_{%s}(%s)}"%(self.parent()._i, self._m) 825 825 826 def e(self,i):826 def _e(self,i): 827 827 r""" 828 828 Return the action of `e_i` on ``self``. 829 829 … … class ElementaryCrystal(Parent, UniqueRe 834 834 EXAMPLES:: 835 835 836 836 sage: B = ElementaryCrystal(['E',7],1) 837 sage: B(3). e(1)837 sage: B(3)._e(1) 838 838 4 839 839 sage: B(172).e_string([1]*171) 840 840 343 841 sage: B(0). e(2)841 sage: B(0)._e(2) 842 842 """ 843 843 if i == self.parent()._i: 844 844 return self.__class__(self.parent(), self._m+1) 845 845 else: 846 846 return None 847 847 848 def f(self, i):848 def _f(self, i): 849 849 r""" 850 850 Return the action of `f_i` on ``self``. 851 851 … … class ElementaryCrystal(Parent, UniqueRe 856 856 EXAMPLES:: 857 857 858 858 sage: B = ElementaryCrystal(['E',7],1) 859 sage: B(3). f(1)859 sage: B(3)._f(1) 860 860 2 861 861 sage: B(172).f_string([1]*171) 862 862 1 863 sage: B(0). e(2)863 sage: B(0)._f(2) 864 864 """ 865 865 if i == self.parent()._i: 866 866 return self.__class__(self.parent(), self._m-1) 867 867 else: 868 868 return None 869 869 870 def epsilon(self, i):870 def _epsilon(self, i): 871 871 r""" 872 872 Return `\varepsilon_i` of ``self``. 873 873 … … class ElementaryCrystal(Parent, UniqueRe 878 878 EXAMPLES:: 879 879 880 880 sage: B = ElementaryCrystal(['F',4],3) 881 sage: [[B(j). epsilon(i) for i in B.index_set()] for j in range(5)]881 sage: [[B(j)._epsilon(i) for i in B.index_set()] for j in range(5)] 882 882 [[-inf, -inf, 0, -inf], 883 883 [-inf, -inf, -1, -inf], 884 884 [-inf, -inf, -2, -inf], … … class ElementaryCrystal(Parent, UniqueRe 890 890 else: 891 891 return float("-inf") 892 892 893 def phi(self, i):893 def _phi(self, i): 894 894 r""" 895 895 Return `\varphi_i` of ``self``. 896 896 … … class ElementaryCrystal(Parent, UniqueRe 901 901 EXAMPLES:: 902 902 903 903 sage: B = ElementaryCrystal(['E',8,1],4) 904 sage: [[B(m). phi(j) for j in B.index_set()] for m in range(44,49)]904 sage: [[B(m)._phi(j) for j in B.index_set()] for m in range(44,49)] 905 905 [[-inf, -inf, -inf, -inf, 44, -inf, -inf, -inf, -inf], 906 906 [-inf, -inf, -inf, -inf, 45, -inf, -inf, -inf, -inf], 907 907 [-inf, -inf, -inf, -inf, 46, -inf, -inf, -inf, -inf], … … class ComponentCrystal(Parent,UniqueRepr 1043 1043 """ 1044 1044 return "{c}" 1045 1045 1046 def epsilon(self,i):1046 def _epsilon(self,i): 1047 1047 r""" 1048 1048 Return `\varepsilon_i` of ``self``, which is `0` for all `i`. 1049 1049 … … class ComponentCrystal(Parent,UniqueRepr 1055 1055 1056 1056 sage: C = ComponentCrystal("C5") 1057 1057 sage: c = C.highest_weight_vector() 1058 sage: [c. epsilon(i) for i in C.index_set()]1058 sage: [c._epsilon(i) for i in C.index_set()] 1059 1059 [0, 0, 0, 0, 0] 1060 1060 """ 1061 1061 return 0 1062 1062 1063 def phi(self,i):1063 def _phi(self,i): 1064 1064 r""" 1065 1065 Return `\varphi_i` of ``self``, which is `0` for all `i`. 1066 1066 … … class ComponentCrystal(Parent,UniqueRepr 1072 1072 1073 1073 sage: C = ComponentCrystal("C5") 1074 1074 sage: c = C.highest_weight_vector() 1075 sage: [c. phi(i) for i in C.index_set()]1075 sage: [c._phi(i) for i in C.index_set()] 1076 1076 [0, 0, 0, 0, 0] 1077 1077 """ 1078 1078 return 0 -
sage/combinat/crystals/fast_crystals.py
diff --git a/sage/combinat/crystals/fast_crystals.py b/sage/combinat/crystals/fast_crystals.py
a b class FastCrystal(UniqueRepresentation, 413 413 return cmp(self.parent(), other.parent()) 414 414 return self.parent().cmp_elements(self, other) 415 415 416 def e(self, i):416 def _e(self, i): 417 417 """ 418 Return s the action of `e_i` on self.418 Return the action of `e_i` on ``self``. 419 419 420 420 EXAMPLES:: 421 421 422 422 sage: C = FastCrystal(['A',2],shape=[2,1]) 423 sage: C(1). e(1)423 sage: C(1)._e(1) 424 424 [0, 0, 0] 425 sage: C(0). e(1) is None425 sage: C(0)._e(1) is None 426 426 True 427 427 """ 428 assert i in self.index_set()429 428 if i == 1: 430 429 r = self.parent()._rootoperators[self.value][0] 431 430 else: 432 431 r = self.parent()._rootoperators[self.value][2] 433 432 return self.parent()(r) if r is not None else None 434 433 435 436 def f(self, i): 434 def _f(self, i): 437 435 """ 438 Return s the action of `f_i` on self.436 Return the action of `f_i` on ``self``. 439 437 440 438 EXAMPLES:: 441 439 442 440 sage: C = FastCrystal(['A',2],shape=[2,1]) 443 sage: C(6). f(1)441 sage: C(6)._f(1) 444 442 [1, 2, 1] 445 sage: C(7). f(1) is None443 sage: C(7)._f(1) is None 446 444 True 447 445 """ 448 assert i in self.index_set()449 446 if i == 1: 450 447 r = self.parent()._rootoperators[self.value][1] 451 448 else: -
sage/combinat/crystals/generalized_young_walls.py
diff --git a/sage/combinat/crystals/generalized_young_walls.py b/sage/combinat/crystals/generalized_young_walls.py
a b class GeneralizedYoungWall(Combinatorial 248 248 """ 249 249 return sum(len(r) for r in self.data) 250 250 251 def e(self,i):251 def _e(self, i): 252 252 r""" 253 253 Return the application of the Kashiwara raising operator 254 254 `\widetilde{e}_i` on ``self``. … … class GeneralizedYoungWall(Combinatorial 259 259 EXAMPLES:: 260 260 261 261 sage: x=CrystalOfGeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]]) 262 sage: x. e(2)262 sage: x._e(2) 263 263 [[], [1, 0, 3, 2], [2, 1], [3, 2, 1, 0, 3, 2]] 264 sage: _. e(2)264 sage: _._e(2) 265 265 [[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3, 2]] 266 sage: _. e(2)266 sage: _._e(2) 267 267 [[], [1, 0, 3], [2, 1], [3, 2, 1, 0, 3]] 268 sage: _. e(2)268 sage: _._e(2) 269 269 """ 270 270 signature = self.generate_signature(i) 271 271 raw_signature = signature[0] … … class GeneralizedYoungWall(Combinatorial 282 282 else: 283 283 return None 284 284 285 def f(self,i):285 def _f(self,i): 286 286 r""" 287 287 Return the application of the Kashiwara lowering operator 288 288 `\widetilde{f}_i` on ``self``. … … class GeneralizedYoungWall(Combinatorial 293 293 EXAMPLES:: 294 294 295 295 sage: hw = CrystalOfGeneralizedYoungWalls(2)([]) 296 sage: hw. f(1)296 sage: hw._f(1) 297 297 [[], [1]] 298 sage: _. f(2)298 sage: _._f(2) 299 299 [[], [1], [2]] 300 sage: _. f(0)300 sage: _._f(0) 301 301 [[], [1, 0], [2]] 302 sage: _. f(0)302 sage: _._f(0) 303 303 [[0], [1, 0], [2]] 304 304 """ 305 305 signature = self.generate_signature(i) … … class GeneralizedYoungWall(Combinatorial 347 347 """ 348 348 s = "" 349 349 if self.data == []: 350 350 s += "\\emptyset" 351 351 else: 352 352 s += "\\begin{tikzpicture}[baseline=5,scale=.25] \\foreach \\x [count=\\s from 0] in \n" 353 353 s += "{" + ','.join("{" + ','.join( str(i) for i in r ) + "}" for r in self.data ) + "} \n" … … class GeneralizedYoungWall(Combinatorial 373 373 W.append(-1*alpha[i]) 374 374 return L(sum(w for w in W)) 375 375 376 def epsilon(self, i):376 def _epsilon(self, i): 377 377 r""" 378 378 Return the number of `i`-colored arrows in the `i`-string above 379 379 ``self`` in the crystal graph. … … class GeneralizedYoungWall(Combinatorial 381 381 EXAMPLES:: 382 382 383 383 sage: y=CrystalOfGeneralizedYoungWalls(3)([[],[1,0,3,2],[2,1],[3,2,1,0,3,2],[],[],[2]]) 384 sage: y. epsilon(1)384 sage: y._epsilon(1) 385 385 0 386 sage: y. epsilon(2)386 sage: y._epsilon(2) 387 387 3 388 sage: y. epsilon(0)388 sage: y._epsilon(0) 389 389 0 390 390 """ 391 if i not in self.index_set():392 raise ValueError("i must in in the index set")393 391 eps = 0 394 392 while True: 395 self = self. e(i)393 self = self._e(i) 396 394 if self is None: 397 395 break 398 396 eps = eps+1 … … class GeneralizedYoungWall(Combinatorial 409 407 Lambda[0] + 3*Lambda[2] 410 408 """ 411 409 La = self.cartan_type().root_system().weight_lattice().fundamental_weights() 412 return sum(self. epsilon(i)*La[i] for i in self.index_set())410 return sum(self._epsilon(i)*La[i] for i in self.index_set()) 413 411 414 def phi(self,i):412 def _phi(self,i): 415 413 r""" 416 414 Return the value `\varepsilon_i(Y) + \langle h_i, 417 415 \mathrm{wt}(Y)\rangle`, where `h_i` is the `i`-th simple … … class GeneralizedYoungWall(Combinatorial 420 418 EXAMPLES:: 421 419 422 420 sage: y = CrystalOfGeneralizedYoungWalls(3)([[0],[1,0,3,2],[2,1],[3,2,1,0,3,2],[0],[],[2]]) 423 sage: y. phi(1)421 sage: y._phi(1) 424 422 3 425 sage: y. phi(2)423 sage: y._phi(2) 426 424 -1 427 425 """ 428 426 h = self.parent().weight_lattice_realization().simple_coroots() 429 return self. epsilon(i) + self.weight().scalar(h[i])427 return self._epsilon(i) + self.weight().scalar(h[i]) 430 428 431 429 def Phi(self): 432 430 r""" … … class GeneralizedYoungWall(Combinatorial 443 441 2*Lambda[0] + Lambda[1] - Lambda[2] + Lambda[3] 444 442 """ 445 443 La = self.cartan_type().root_system().weight_lattice().fundamental_weights() 446 return sum(self. phi(i)*La[i] for i in self.index_set())444 return sum(self._phi(i)*La[i] for i in self.index_set()) 447 445 448 446 def column(self, k): 449 447 r""" … … class HighestWeightCrystalofGYWElement(G 711 709 Element of the highest weight crystal of generalized Young walls. 712 710 """ 713 711 714 def e(self,i):712 def _e(self,i): 715 713 r""" 716 714 Compute the action of `\widetilde{e}_i` restricted to the highest weight crystal. 717 715 … … class HighestWeightCrystalofGYWElement(G 719 717 720 718 sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()[1] 721 719 sage: hwy = HighestWeightCrystalOfGYW(2,La)([[],[1,0],[2,1]]) 722 sage: hwy. e(1)720 sage: hwy._e(1) 723 721 [[], [1, 0], [2]] 724 sage: hwy. e(2)725 sage: hwy. e(3)722 sage: hwy._e(2) 723 sage: hwy._e(3) 726 724 """ 727 ret = GeneralizedYoungWall. e(self, i)725 ret = GeneralizedYoungWall._e(self, i) 728 726 if ret is None: 729 727 return None 730 728 if ret.in_highest_weight_crystal(self.parent().hw): 731 729 return self.__class__(self.parent(),ret.data) 732 730 return None 733 731 734 def f(self,i):732 def _f(self,i): 735 733 r""" 736 734 Compute the action of `\widetilde{f}_i` restricted to the highest weight crystal. 737 735 … … class HighestWeightCrystalofGYWElement(G 740 738 sage: La = RootSystem(['A',2,1]).weight_lattice().fundamental_weights()[1] 741 739 sage: GYW = CrystalOfGeneralizedYoungWalls(2) 742 740 sage: y = GYW([[],[1,0],[2,1]]) 743 sage: y. f(1)741 sage: y._f(1) 744 742 [[], [1, 0], [2, 1], [], [1]] 745 743 sage: hwy = HighestWeightCrystalOfGYW(2,La)([[],[1,0],[2,1]]) 746 sage: hwy. f(1)744 sage: hwy._f(1) 747 745 """ 748 ret = GeneralizedYoungWall. f(self, i)746 ret = GeneralizedYoungWall._f(self, i) 749 747 if ret.in_highest_weight_crystal(self.parent().hw): 750 748 return self.__class__(self.parent(),ret.data) 751 749 return None -
sage/combinat/crystals/infinity_crystals.py
diff --git a/sage/combinat/crystals/infinity_crystals.py b/sage/combinat/crystals/infinity_crystals.py
a b class InfinityCrystalOfTableaux(CrystalO 50 50 types `A_n`, `B_n`, `C_n`, and `D_n`, and by Kang and Misra [KM94]_ in 51 51 type `G_2`. 52 52 53 NOTE: We are using the English convention for our tableaux. 53 .. NOTE:: 54 55 We are using the English convention for our tableaux. 54 56 55 57 We say a tableau `T` is *marginally large* if: 56 58 … … class InfinityCrystalOfTableaux(CrystalO 137 139 Crystal bases and tensor product decompositions of `U_q(G_2)`-modules. 138 140 J. Algebra 163, pp. 675--691, 1994. 139 141 140 .. [KN94] M. Kashiwara and T. Nakashima.141 Crystal Graphs for Representations of the `q`-Analogue of Classical Lie142 Algebras.143 J. Algebra 165, pp. 295--345, 1994.144 145 142 INPUT: 146 143 147 144 - ``cartan_type`` -- One of ``['A',n]``, ``['B',n]``, ``['C',n]``, … … class InfinityCrystalOfTableaux(CrystalO 282 279 Elements in `\mathcal{B}(\infty)` crystal of tableaux. 283 280 """ 284 281 285 def e(self,i):282 def _e(self,i): 286 283 r""" 287 284 Return the action of `\widetilde{e}_i` on ``self``. 288 285 … … class InfinityCrystalOfTableaux(CrystalO 294 291 295 292 sage: B = InfinityCrystalOfTableaux(['B',3]) 296 293 sage: b = B(rows=[[1,1,1,1,1,1,1,2,0,-3,-1,-1,-1,-1],[2,2,2,2,-2,-2],[3,-3,-3]]) 297 sage: b. e(3).pp()294 sage: b._e(3).pp() 298 295 1 1 1 1 1 1 1 2 0 -3 -1 -1 -1 -1 299 296 2 2 2 2 -2 -2 300 297 3 0 -3 301 sage: b. e(1).pp()298 sage: b._e(1).pp() 302 299 1 1 1 1 1 1 1 0 -3 -1 -1 -1 -1 303 300 2 2 2 2 -2 -2 304 301 3 -3 -3 305 302 """ 306 if i not in self.index_set():307 raise ValueError('i is not in the index set.')308 303 position = self.positions_of_unmatched_plus(i) 309 304 if position == []: 310 305 return None 311 306 k = position[0] 312 ret = self.set_index(k, self[k]. e(i))307 ret = self.set_index(k, self[k]._e(i)) 313 308 if k+i > len(self): 314 309 return ret 315 310 for j in reversed(range(1, i+1)): … … class InfinityCrystalOfTableaux(CrystalO 320 315 ret._list.pop(k) 321 316 return ret 322 317 323 def f(self, i):318 def _f(self, i): 324 319 r""" 325 320 Return the action of `\widetilde{f}_i` on ``self``. 326 321 … … class InfinityCrystalOfTableaux(CrystalO 332 327 333 328 sage: B = InfinityCrystalOfTableaux(['C',4]) 334 329 sage: b = B.highest_weight_vector() 335 sage: b. f(1).pp()330 sage: b._f(1).pp() 336 331 1 1 1 1 2 337 332 2 2 2 338 333 3 3 339 334 4 340 sage: b. f(3).pp()335 sage: b._f(3).pp() 341 336 1 1 1 1 1 342 337 2 2 2 2 343 338 3 3 4 344 339 4 345 sage: b. f(3).f(4).pp()340 sage: b._f(3)._f(4).pp() 346 341 1 1 1 1 1 347 342 2 2 2 2 348 343 3 3 -4 349 344 4 350 345 """ 351 if i not in self.index_set():352 raise ValueError('i is not in the index set.')353 346 position = self.positions_of_unmatched_minus(i) 354 347 if position == []: 355 348 return None 356 349 k = position[len(position)-1] 357 ret = self.set_index(k, self[k]. f(i))350 ret = self.set_index(k, self[k]._f(i)) 358 351 if k+i > len(self): 359 352 return ret 360 353 for j in reversed(range(1,i+1)): … … class InfinityCrystalOfTableaux(CrystalO 365 358 ret._list.insert(k,self.parent().letters(j+1)) 366 359 return ret 367 360 368 def phi(self,i):361 def _phi(self,i): 369 362 r""" 370 363 Return `\varphi_i` of ``self``. 371 364 … … class InfinityCrystalOfTableaux(CrystalO 381 374 EXAMPLES:: 382 375 383 376 sage: B = InfinityCrystalOfTableaux("A3") 384 sage: [B.highest_weight_vector().f_string([1,3,2,3,1,3,2,1]). phi(i) for i in B.index_set()]377 sage: [B.highest_weight_vector().f_string([1,3,2,3,1,3,2,1])._phi(i) for i in B.index_set()] 385 378 [-3, 4, -3] 386 379 387 380 sage: B = InfinityCrystalOfTableaux("G2") 388 sage: [B.highest_weight_vector().f_string([2,2,1,2,1,1,1,2]). phi(i) for i in B.index_set()]381 sage: [B.highest_weight_vector().f_string([2,2,1,2,1,1,1,2])._phi(i) for i in B.index_set()] 389 382 [5, -3] 390 383 """ 391 384 P = self.parent().weight_lattice_realization() … … class InfinityCrystalOfTableaux(CrystalO 607 600 for i in word: 608 601 a = 0 609 602 while self.e(i) != None: 610 self = self. e(i)603 self = self._e(i) 611 604 a += 1 612 605 ret.append(a) 613 606 return ret … … class InfinityCrystalOfTableauxTypeD(Inf 678 671 r""" 679 672 Elements in `\mathcal{B}(\infty)` crystal of tableaux for type `D_n`. 680 673 """ 681 def e(self, i):674 def _e(self, i): 682 675 r""" 683 676 Return the action of `\widetilde{e}_i` on ``self``. 684 677 … … class InfinityCrystalOfTableauxTypeD(Inf 693 686 1 1 1 1 2 3 694 687 2 2 2 695 688 3 -3 696 sage: b. e(2).pp()689 sage: b._e(2).pp() 697 690 1 1 1 1 2 2 698 691 2 2 2 699 692 3 -3 700 693 """ 701 if i not in self.index_set():702 raise ValueError('i is not in the index set.')703 694 position = self.positions_of_unmatched_plus(i) 704 695 if position == []: 705 696 return None 706 697 k = position[0] 707 ret = self.set_index(k, self[k]. e(i))698 ret = self.set_index(k, self[k]._e(i)) 708 699 if i == self.cartan_type().rank(): 709 700 i -= 1 710 701 if k+i > len(self): … … class InfinityCrystalOfTableauxTypeD(Inf 717 708 ret._list.pop(k) 718 709 return ret 719 710 720 def f(self, i):711 def _f(self, i): 721 712 r""" 722 713 Return the action of `\widetilde{f}_i` on ``self``. 723 714 … … class InfinityCrystalOfTableauxTypeD(Inf 733 724 2 2 2 2 2 734 725 3 3 3 -5 735 726 4 5 736 sage: b. f(1).pp()727 sage: b._f(1).pp() 737 728 1 1 1 1 1 1 2 2 2 738 729 2 2 2 2 2 739 730 3 3 3 -5 740 731 4 5 741 sage: b. f(5).pp()732 sage: b._f(5).pp() 742 733 1 1 1 1 1 1 2 2 743 734 2 2 2 2 2 744 735 3 3 3 -5 745 736 4 -4 746 737 """ 747 ret = InfinityCrystalOfTableaux.Element. f(self, i)738 ret = InfinityCrystalOfTableaux.Element._f(self, i) 748 739 if ret._list[0].value == -self.cartan_type().rank(): 749 740 # Exceptional case for f_n where we need to add a new column 750 741 for j in range(i-1): -
sage/combinat/crystals/kirillov_reshetikhin.py
diff --git a/sage/combinat/crystals/kirillov_reshetikhin.py b/sage/combinat/crystals/kirillov_reshetikhin.py
a b class KR_type_E6(KirillovReshetikhinCrys 1091 1091 [[(1, -3), (-1, 3)]], 1092 1092 [[(-1,), (-1, 3)]]] 1093 1093 """ 1094 return [x for x in self.classical_decomposition() if all(x. epsilon(i) == 0 for i in [2,3,4,5])]1094 return [x for x in self.classical_decomposition() if all(x._epsilon(i) == 0 for i in [2,3,4,5])] 1095 1095 1096 1096 @cached_method 1097 1097 def highest_weight_dict(self): … … class KR_type_E6(KirillovReshetikhinCrys 1108 1108 [[(2, -1), (1,)]]: ((-2, 0, 1, 0, 0, 0, 0), 1), 1109 1109 []: ((0, 0, 0, 0, 0, 0, 0), 0)} 1110 1110 """ 1111 hw = [x for x in self.hw_auxiliary() if x. epsilon(1) == 0]1111 hw = [x for x in self.hw_auxiliary() if x._epsilon(1) == 0] 1112 1112 dic = dict( ( x, tuple( [self.affine_weight(x), len(x)] ) ) for x in hw ) 1113 1113 assert len(hw) == len(dic) 1114 1114 return dic … … class KR_type_E6(KirillovReshetikhinCrys 1129 1129 ((0, -2, 0, 1, 0, 0, 0), 1): [[(-1,), (-1, 3)]], 1130 1130 ((-2, 0, 1, 0, 0, 0, 0), 1): [[(2, -1), (1,)]]} 1131 1131 """ 1132 hw = [x for x in self.hw_auxiliary() if x. epsilon(6) == 0]1132 hw = [x for x in self.hw_auxiliary() if x._epsilon(6) == 0] 1133 1133 dic = dict( ( tuple( [self.affine_weight(x), len(x)] ), x ) for x in hw ) 1134 1134 assert len(hw) == len(dic) 1135 1135 return dic … … class KR_type_CElement(KirillovReshetikh 1438 1438 2 1439 1439 """ 1440 1440 b = self.parent().to_ambient_crystal()(self) 1441 return b. epsilon(1)1441 return b._epsilon(1) 1442 1442 1443 1443 def phi0(self): 1444 1444 r""" … … class KR_type_CElement(KirillovReshetikh 1453 1453 2 1454 1454 """ 1455 1455 b = self.parent().to_ambient_crystal()(self) 1456 return b. phi(1)1456 return b._phi(1) 1457 1457 1458 1458 KR_type_C.Element = KR_type_CElement 1459 1459 … … class KR_type_A2Element(AffineCrystalFro 1699 1699 1 1700 1700 """ 1701 1701 b = self.parent().to_ambient_crystal()(self) 1702 return b. epsilon(1)1702 return b._epsilon(1) 1703 1703 1704 1704 def phi0(self): 1705 1705 r""" … … class KR_type_A2Element(AffineCrystalFro 1715 1715 1 1716 1716 """ 1717 1717 b = self.parent().to_ambient_crystal()(self) 1718 return b. phi(1)1718 return b._phi(1) 1719 1719 1720 1720 KR_type_A2.Element = KR_type_A2Element 1721 1721 … … class KR_type_boxElement(KirillovResheti 1906 1906 sage: b.e(0) # indirect doctest 1907 1907 [[-1]] 1908 1908 """ 1909 b = self.parent().to_ambient_crystal()(self). e(0)1909 b = self.parent().to_ambient_crystal()(self)._e(0) 1910 1910 if b is None: 1911 1911 return None 1912 1912 return self.parent().from_ambient_crystal()(b) … … class KR_type_boxElement(KirillovResheti 1923 1923 sage: b.f(0) # indirect doctest 1924 1924 [[1]] 1925 1925 """ 1926 b = self.parent().to_ambient_crystal()(self). f(0)1926 b = self.parent().to_ambient_crystal()(self)._f(0) 1927 1927 if b is None: 1928 1928 return None 1929 1929 return self.parent().from_ambient_crystal()(b) … … class KR_type_boxElement(KirillovResheti 1941 1941 2 1942 1942 """ 1943 1943 b = self.parent().to_ambient_crystal()(self) 1944 return b. epsilon(0)1944 return b._epsilon(0) 1945 1945 1946 1946 def phi0(self): 1947 1947 r""" … … class KR_type_boxElement(KirillovResheti 1956 1956 2 1957 1957 """ 1958 1958 b = self.parent().to_ambient_crystal()(self) 1959 return b. phi(0)1959 return b._phi(0) 1960 1960 1961 1961 KR_type_box.Element = KR_type_boxElement 1962 1962 … … class KR_type_BnElement(KirillovReshetik 2136 2136 sage: b.e(0) # indirect doctest 2137 2137 [--+, []] 2138 2138 """ 2139 b = self.parent().to_ambient_crystal()(self). e_string([0,0])2139 b = self.parent().to_ambient_crystal()(self)._e_string([0,0]) 2140 2140 if b is None: 2141 2141 return None 2142 2142 return self.parent().from_ambient_crystal()(b) … … class KR_type_BnElement(KirillovReshetik 2153 2153 sage: b.f(0) # indirect doctest 2154 2154 2155 2155 """ 2156 b = self.parent().to_ambient_crystal()(self). f_string([0,0])2156 b = self.parent().to_ambient_crystal()(self)._f_string([0,0]) 2157 2157 if b is None: 2158 2158 return None 2159 2159 return self.parent().from_ambient_crystal()(b) … … class KR_type_BnElement(KirillovReshetik 2171 2171 1 2172 2172 """ 2173 2173 b = self.parent().to_ambient_crystal()(self) 2174 return b. epsilon(0)/22174 return b._epsilon(0)/2 2175 2175 2176 2176 def phi0(self): 2177 2177 r""" … … class KR_type_BnElement(KirillovReshetik 2186 2186 0 2187 2187 """ 2188 2188 b = self.parent().to_ambient_crystal()(self) 2189 return b. phi(0)/22189 return b._phi(0)/2 2190 2190 2191 2191 KR_type_Bn.Element = KR_type_BnElement 2192 2192 -
sage/combinat/crystals/kyoto_path_model.py
diff --git a/sage/combinat/crystals/kyoto_path_model.py b/sage/combinat/crystals/kyoto_path_model.py
a b class KyotoPathModel(TensorProductOfCrys 220 220 """ 221 221 An element in the path realization model. 222 222 """ 223 def e(self, i):223 def _e(self, i): 224 224 """ 225 225 Return the action of `e_i` on ``self``. 226 226 … … class KyotoPathModel(TensorProductOfCrys 230 230 sage: L = RootSystem(['A',2,1]).weight_space() 231 231 sage: C = KyotoPathModel(B, L.fundamental_weight(0)) 232 232 sage: mg = C.module_generators[0] 233 sage: all(mg. e(i) is None for i in C.index_set())233 sage: all(mg._e(i) is None for i in C.index_set()) 234 234 True 235 sage: mg. f(0).e(0) == mg235 sage: mg._f(0)._e(0) == mg 236 236 True 237 237 """ 238 238 position = self.positions_of_unmatched_plus(i) … … class KyotoPathModel(TensorProductOfCrys 241 241 k = position[0] 242 242 if k == len(self)-1: 243 243 return None 244 crystal = self[k]. e(i)244 crystal = self[k]._e(i) 245 245 if k == len(self)-2 and crystal.Epsilon() == self._list[-1].Phi(): 246 246 l = self._list[:-1] 247 247 l[-1] = crystal 248 248 return self.__class__(self.parent(), l) 249 249 return self.set_index(k, crystal) 250 250 251 def f(self, i):251 def _f(self, i): 252 252 """ 253 253 Return the action of `f_i` on ``self``. 254 254 … … class KyotoPathModel(TensorProductOfCrys 258 258 sage: L = RootSystem(['A',2,1]).weight_space() 259 259 sage: C = KyotoPathModel(B, L.fundamental_weight(0)) 260 260 sage: mg = C.module_generators[0] 261 sage: mg. f(2)262 sage: mg. f(0)261 sage: mg._f(2) 262 sage: mg._f(0) 263 263 [[[1]], [[2]]] 264 264 sage: mg.f_string([0,1,2]) 265 265 [[[2]], [[3]], [[1]]] … … class KyotoPathModel(TensorProductOfCrys 272 272 l = self._list[:] 273 273 k = len(l) % len(self.parent()._crystals) 274 274 l.append(self.parent()._phi_dicts[k][ l[-1].Epsilon() ]) 275 l[-2] = l[-2]. f(i)275 l[-2] = l[-2]._f(i) 276 276 return self.__class__(self.parent(), l) 277 return self.set_index(k, self[k]. f(i))277 return self.set_index(k, self[k]._f(i)) 278 278 -
sage/combinat/crystals/letters.pyx
diff --git a/sage/combinat/crystals/letters.pyx b/sage/combinat/crystals/letters.pyx
a b cdef class EmptyLetter(Element): 489 489 """ 490 490 return self.parent().weight_lattice_realization().zero() 491 491 492 cpdef e(self, int i):492 cpdef _e(self, int i): 493 493 """ 494 494 Return `e_i` of ``self`` which is ``None``. 495 495 496 496 EXAMPLES:: 497 497 498 498 sage: C = CrystalOfLetters(['C', 3]) 499 sage: C('E'). e(1)499 sage: C('E')._e(1) 500 500 """ 501 501 return None 502 502 503 f =e503 _f = _e 504 504 505 cpdef int epsilon(self, int i):505 cpdef int _epsilon(self, int i): 506 506 r""" 507 507 Return `\varepsilon_i` of ``self``. 508 508 509 509 EXAMPLES:: 510 510 511 511 sage: C = CrystalOfLetters(['C', 3]) 512 sage: C('E'). epsilon(1)512 sage: C('E')._epsilon(1) 513 513 0 514 514 """ 515 515 return 0 516 516 517 phi =epsilon517 _phi = _epsilon 518 518 519 519 ######################### 520 520 # Type A … … cdef class Crystal_of_letters_type_A_ele 556 556 """ 557 557 return self._parent.weight_lattice_realization().monomial(self.value-1) 558 558 559 cpdef Letter e(self, int i):559 cpdef Letter _e(self, int i): 560 560 r""" 561 561 Return the action of `e_i` on ``self``. 562 562 563 563 EXAMPLES:: 564 564 565 565 sage: C = CrystalOfLetters(['A',4]) 566 sage: [(c,i,c. e(i)) for i in C.index_set() for c in C if c.e(i) is not None]566 sage: [(c,i,c._e(i)) for i in C.index_set() for c in C if c._e(i) is not None] 567 567 [(2, 1, 1), (3, 2, 2), (4, 3, 3), (5, 4, 4)] 568 568 """ 569 569 if self.value == i+1: … … cdef class Crystal_of_letters_type_A_ele 571 571 else: 572 572 return None 573 573 574 cpdef Letter f(self, int i):574 cpdef Letter _f(self, int i): 575 575 r""" 576 576 Return the action of `f_i` on ``self``. 577 577 578 578 EXAMPLES:: 579 579 580 580 sage: C = CrystalOfLetters(['A',4]) 581 sage: [(c,i,c. f(i)) for i in C.index_set() for c in C if c.f(i) is not None]581 sage: [(c,i,c._f(i)) for i in C.index_set() for c in C if c._f(i) is not None] 582 582 [(1, 1, 2), (2, 2, 3), (3, 3, 4), (4, 4, 5)] 583 583 """ 584 584 if self.value == i: … … cdef class Crystal_of_letters_type_A_ele 586 586 else: 587 587 return None 588 588 589 cpdef int epsilon(self, int i):589 cpdef int _epsilon(self, int i): 590 590 r""" 591 591 Return `\varepsilon_i` of ``self``. 592 592 593 593 EXAMPLES:: 594 594 595 595 sage: C = CrystalOfLetters(['A',4]) 596 sage: [(c,i) for i in C.index_set() for c in C if c. epsilon(i) != 0]596 sage: [(c,i) for i in C.index_set() for c in C if c._epsilon(i) != 0] 597 597 [(2, 1), (3, 2), (4, 3), (5, 4)] 598 598 """ 599 599 if self.value == i+1: 600 600 return 1 601 601 return 0 602 602 603 cpdef int phi(self, int i):603 cpdef int _phi(self, int i): 604 604 r""" 605 605 Return `\varphi_i` of ``self``. 606 606 607 607 EXAMPLES:: 608 608 609 609 sage: C = CrystalOfLetters(['A',4]) 610 sage: [(c,i) for i in C.index_set() for c in C if c. phi(i) != 0]610 sage: [(c,i) for i in C.index_set() for c in C if c._phi(i) != 0] 611 611 [(1, 1), (2, 2), (3, 3), (4, 4)] 612 612 """ 613 613 if self.value == i: … … cdef class Crystal_of_letters_type_B_ele 649 649 else: 650 650 return self._parent.weight_lattice_realization()(0) 651 651 652 cpdef Letter e(self, int i):652 cpdef Letter _e(self, int i): 653 653 r""" 654 654 Return the action of `e_i` on ``self``. 655 655 656 656 EXAMPLES:: 657 657 658 658 sage: C = CrystalOfLetters(['B',4]) 659 sage: [(c,i,c. e(i)) for i in C.index_set() for c in C if c.e(i) is not None]659 sage: [(c,i,c._e(i)) for i in C.index_set() for c in C if c._e(i) is not None] 660 660 [(2, 1, 1), 661 661 (-1, 1, -2), 662 662 (3, 2, 2), … … cdef class Crystal_of_letters_type_B_ele 678 678 else: 679 679 return None 680 680 681 cpdef Letter f(self, int i):681 cpdef Letter _f(self, int i): 682 682 r""" 683 683 Return the actions of `f_i` on ``self``. 684 684 685 685 EXAMPLES:: 686 686 687 687 sage: C = CrystalOfLetters(['B',4]) 688 sage: [(c,i,c. f(i)) for i in C.index_set() for c in C if c.f(i) is not None]688 sage: [(c,i,c._f(i)) for i in C.index_set() for c in C if c._f(i) is not None] 689 689 [(1, 1, 2), 690 690 (-2, 1, -1), 691 691 (2, 2, 3), … … cdef class Crystal_of_letters_type_B_ele 707 707 else: 708 708 return None 709 709 710 cpdef int epsilon(self, int i):710 cpdef int _epsilon(self, int i): 711 711 r""" 712 712 Return `\varepsilon_i` of ``self``. 713 713 714 714 EXAMPLES:: 715 715 716 716 sage: C = CrystalOfLetters(['B',3]) 717 sage: [(c,i) for i in C.index_set() for c in C if c. epsilon(i) != 0]717 sage: [(c,i) for i in C.index_set() for c in C if c._epsilon(i) != 0] 718 718 [(2, 1), (-1, 1), (3, 2), (-2, 2), (0, 3), (-3, 3)] 719 719 """ 720 720 cdef int n = self._parent._cartan_type.n … … cdef class Crystal_of_letters_type_B_ele 728 728 return 1 729 729 return 0 730 730 731 cpdef int phi(self, int i):731 cpdef int _phi(self, int i): 732 732 r""" 733 733 Return `\varphi_i` of ``self``. 734 734 … … cdef class Crystal_of_letters_type_C_ele 787 787 else: 788 788 return self._parent.weight_lattice_realization()(0) 789 789 790 cpdef Letter e(self, int i):790 cpdef Letter _e(self, int i): 791 791 r""" 792 792 Return the action of `e_i` on ``self``. 793 793 794 794 EXAMPLES:: 795 795 796 796 sage: C = CrystalOfLetters(['C',4]) 797 sage: [(c,i,c. e(i)) for i in C.index_set() for c in C if c.e(i) is not None]797 sage: [(c,i,c._e(i)) for i in C.index_set() for c in C if c._e(i) is not None] 798 798 [(2, 1, 1), 799 799 (-1, 1, -2), 800 800 (3, 2, 2), … … cdef class Crystal_of_letters_type_C_ele 810 810 else: 811 811 return None 812 812 813 cpdef Letter f(self, int i):813 cpdef Letter _f(self, int i): 814 814 r""" 815 815 Return the action of `f_i` on ``self``. 816 816 817 817 EXAMPLES:: 818 818 819 819 sage: C = CrystalOfLetters(['C',4]) 820 sage: [(c,i,c. f(i)) for i in C.index_set() for c in C if c.f(i) is not None]820 sage: [(c,i,c._f(i)) for i in C.index_set() for c in C if c._f(i) is not None] 821 821 [(1, 1, 2), (-2, 1, -1), (2, 2, 3), 822 822 (-3, 2, -2), (3, 3, 4), (-4, 3, -3), (4, 4, -4)] 823 823 """ … … cdef class Crystal_of_letters_type_C_ele 828 828 else: 829 829 return None 830 830 831 cpdef int epsilon(self, int i):831 cpdef int _epsilon(self, int i): 832 832 r""" 833 833 Return `\varepsilon_i` of ``self``. 834 834 835 835 EXAMPLES:: 836 836 837 837 sage: C = CrystalOfLetters(['C',3]) 838 sage: [(c,i) for i in C.index_set() for c in C if c. epsilon(i) != 0]838 sage: [(c,i) for i in C.index_set() for c in C if c._epsilon(i) != 0] 839 839 [(2, 1), (-1, 1), (3, 2), (-2, 2), (-3, 3)] 840 840 """ 841 841 if self.value == i+1 or self.value == -i: 842 842 return 1 843 843 return 0 844 844 845 cpdef int phi(self, int i):845 cpdef int _phi(self, int i): 846 846 r""" 847 847 Return `\varphi_i` of ``self``. 848 848 849 849 EXAMPLES:: 850 850 851 851 sage: C = CrystalOfLetters(['C',3]) 852 sage: [(c,i) for i in C.index_set() for c in C if c. phi(i) != 0]852 sage: [(c,i) for i in C.index_set() for c in C if c._phi(i) != 0] 853 853 [(1, 1), (-2, 1), (2, 2), (-3, 2), (3, 3)] 854 854 """ 855 855 if self.value == i or self.value == -i-1: … … cdef class Crystal_of_letters_type_D_ele 894 894 else: 895 895 return self._parent.weight_lattice_realization()(0) 896 896 897 cpdef Letter e(self, int i):897 cpdef Letter _e(self, int i): 898 898 r""" 899 899 Return the action of `e_i` on ``self``. 900 900 901 901 EXAMPLES:: 902 902 903 903 sage: C = CrystalOfLetters(['D',5]) 904 sage: [(c,i,c. e(i)) for i in C.index_set() for c in C if c.e(i) is not None]904 sage: [(c,i,c._e(i)) for i in C.index_set() for c in C if c._e(i) is not None] 905 905 [(2, 1, 1), 906 906 (-1, 1, -2), 907 907 (3, 2, 2), … … cdef class Crystal_of_letters_type_D_ele 927 927 else: 928 928 return None 929 929 930 cpdef Letter f(self, int i):930 cpdef Letter _f(self, int i): 931 931 r""" 932 932 Return the action of `f_i` on ``self``. 933 933 934 934 EXAMPLES:: 935 935 936 936 sage: C = CrystalOfLetters(['D',5]) 937 sage: [(c,i,c. f(i)) for i in C.index_set() for c in C if c.f(i) is not None]937 sage: [(c,i,c._f(i)) for i in C.index_set() for c in C if c._f(i) is not None] 938 938 [(1, 1, 2), 939 939 (-2, 1, -1), 940 940 (2, 2, 3), … … cdef class Crystal_of_letters_type_D_ele 958 958 else: 959 959 return None 960 960 961 cpdef int epsilon(self, int i):961 cpdef int _epsilon(self, int i): 962 962 r""" 963 963 Return `\varepsilon_i` of ``self``. 964 964 965 965 EXAMPLES:: 966 966 967 967 sage: C = CrystalOfLetters(['D',4]) 968 sage: [(c,i) for i in C.index_set() for c in C if c. epsilon(i) != 0]968 sage: [(c,i) for i in C.index_set() for c in C if c._epsilon(i) != 0] 969 969 [(2, 1), (-1, 1), (3, 2), (-2, 2), (4, 3), (-3, 3), (-4, 4), (-3, 4)] 970 970 """ 971 971 if self.value == i+1 or self.value == -i: … … cdef class Crystal_of_letters_type_D_ele 975 975 return 1 976 976 return 0 977 977 978 cpdef int phi(self, int i):978 cpdef int _phi(self, int i): 979 979 r""" 980 980 Return `\varphi_i` of ``self``. 981 981 982 982 EXAMPLES:: 983 983 984 984 sage: C = CrystalOfLetters(['D',4]) 985 sage: [(c,i) for i in C.index_set() for c in C if c. phi(i) != 0]985 sage: [(c,i) for i in C.index_set() for c in C if c._phi(i) != 0] 986 986 [(1, 1), (-2, 1), (2, 2), (-3, 2), (3, 3), (-4, 3), (3, 4), (4, 4)] 987 987 """ 988 988 if self.value == i or self.value == -i-1: … … cdef class Crystal_of_letters_type_G_ele 1033 1033 else: 1034 1034 raise RuntimeError("G2 crystal of letters element %d not valid"%self.value) 1035 1035 1036 cpdef Letter e(self, int i):1036 cpdef Letter _e(self, int i): 1037 1037 r""" 1038 1038 Return the action of `e_i` on ``self``. 1039 1039 1040 1040 EXAMPLES:: 1041 1041 1042 1042 sage: C = CrystalOfLetters(['G',2]) 1043 sage: [(c,i,c. e(i)) for i in C.index_set() for c in C if c.e(i) is not None]1043 sage: [(c,i,c._e(i)) for i in C.index_set() for c in C if c._e(i) is not None] 1044 1044 [(2, 1, 1), 1045 1045 (0, 1, 3), 1046 1046 (-3, 1, 0), … … cdef class Crystal_of_letters_type_G_ele 1067 1067 else: 1068 1068 return None 1069 1069 1070 cpdef Letter f(self, int i):1070 cpdef Letter _f(self, int i): 1071 1071 r""" 1072 1072 Return the action of `f_i` on ``self``. 1073 1073 1074 1074 EXAMPLES:: 1075 1075 1076 1076 sage: C = CrystalOfLetters(['G',2]) 1077 sage: [(c,i,c. f(i)) for i in C.index_set() for c in C if c.f(i) is not None]1077 sage: [(c,i,c._f(i)) for i in C.index_set() for c in C if c._f(i) is not None] 1078 1078 [(1, 1, 2), 1079 1079 (3, 1, 0), 1080 1080 (0, 1, -3), … … cdef class Crystal_of_letters_type_G_ele 1101 1101 else: 1102 1102 return None 1103 1103 1104 cpdef int epsilon(self, int i):1104 cpdef int _epsilon(self, int i): 1105 1105 r""" 1106 1106 Return `\varepsilon_i` of ``self``. 1107 1107 1108 1108 EXAMPLES:: 1109 1109 1110 1110 sage: C = CrystalOfLetters(['G',2]) 1111 sage: [(c,i) for i in C.index_set() for c in C if c. epsilon(i) != 0]1111 sage: [(c,i) for i in C.index_set() for c in C if c._epsilon(i) != 0] 1112 1112 [(2, 1), (0, 1), (-3, 1), (-1, 1), (3, 2), (-2, 2)] 1113 1113 """ 1114 1114 if i == 1: … … cdef class Crystal_of_letters_type_G_ele 1119 1119 return 1 1120 1120 return 0 1121 1121 1122 cpdef int phi(self, int i):1122 cpdef int _phi(self, int i): 1123 1123 r""" 1124 1124 Return `\varphi_i` of ``self``. 1125 1125 1126 1126 EXAMPLES:: 1127 1127 1128 1128 sage: C = CrystalOfLetters(['G',2]) 1129 sage: [(c,i) for i in C.index_set() for c in C if c. phi(i) != 0]1129 sage: [(c,i) for i in C.index_set() for c in C if c._phi(i) != 0] 1130 1130 [(1, 1), (3, 1), (0, 1), (-2, 1), (2, 2), (-3, 2)] 1131 1131 """ 1132 1132 if i == 1: … … cdef class LetterTuple(Element): 1264 1264 ret+= repr(v) 1265 1265 return ret + "\\right)" 1266 1266 1267 cpdef int epsilon(self, int i):1267 cpdef int _epsilon(self, int i): 1268 1268 r""" 1269 1269 Return `\varepsilon_i` of ``self``. 1270 1270 1271 1271 EXAMPLES:: 1272 1272 1273 1273 sage: C = CrystalOfLetters(['E',6]) 1274 sage: C((-6,)). epsilon(1)1274 sage: C((-6,))._epsilon(1) 1275 1275 0 1276 sage: C((-6,)). epsilon(6)1276 sage: C((-6,))._epsilon(6) 1277 1277 1 1278 1278 """ 1279 1279 if -i in self.value: 1280 1280 return 1 1281 1281 return 0 1282 1282 1283 cpdef int phi(self, int i):1283 cpdef int _phi(self, int i): 1284 1284 r""" 1285 1285 Return `\varphi_i` of ``self``. 1286 1286 1287 1287 EXAMPLES:: 1288 1288 1289 1289 sage: C = CrystalOfLetters(['E',6]) 1290 sage: C((1,)). phi(1)1290 sage: C((1,))._phi(1) 1291 1291 1 1292 sage: C((1,)). phi(6)1292 sage: C((1,))._phi(6) 1293 1293 0 1294 1294 """ 1295 1295 if i in self.value: … … cdef class Crystal_of_letters_type_E6_el 1381 1381 R=self._parent.weight_lattice_realization().fundamental_weights() 1382 1382 return sum(cmp(i,0)*R[abs(i)] for i in self.value) 1383 1383 1384 cpdef LetterTuple e(self, int i):1384 cpdef LetterTuple _e(self, int i): 1385 1385 r""" 1386 1386 Return the action of `e_i` on ``self``. 1387 1387 1388 1388 EXAMPLES:: 1389 1389 1390 1390 sage: C = CrystalOfLetters(['E',6]) 1391 sage: C((-1,3)). e(1)1391 sage: C((-1,3))._e(1) 1392 1392 (1,) 1393 sage: C((-2,-3,4)). e(2)1393 sage: C((-2,-3,4))._e(2) 1394 1394 (-3, 2) 1395 sage: C((1,)). e(1)1395 sage: C((1,))._e(1) 1396 1396 """ 1397 1397 if self.value == (-1, 3) and i == 1: 1398 1398 return self._parent._element_constructor_((1,)) … … cdef class Crystal_of_letters_type_E6_el 1469 1469 else: 1470 1470 return None 1471 1471 1472 cpdef LetterTuple f(self, int i):1472 cpdef LetterTuple _f(self, int i): 1473 1473 r""" 1474 1474 Return the action of `f_i` on ``self``. 1475 1475 1476 1476 EXAMPLES:: 1477 1477 1478 1478 sage: C = CrystalOfLetters(['E',6]) 1479 sage: C((1,)). f(1)1479 sage: C((1,))._f(1) 1480 1480 (-1, 3) 1481 sage: C((-6,)). f(1)1481 sage: C((-6,))._f(1) 1482 1482 """ 1483 1483 if self.value == (1,) and i == 1: 1484 1484 return self._parent._element_constructor_((-1, 3)) … … cdef class Crystal_of_letters_type_E6_el 1640 1640 # tuple from a list 1641 1641 return self._parent._element_constructor_(tuple([-i for i in p.value])) 1642 1642 1643 cpdef LetterTuple e(self, int i):1643 cpdef LetterTuple _e(self, int i): 1644 1644 r""" 1645 1645 Return the action of `e_i` on ``self``. 1646 1646 1647 1647 EXAMPLES:: 1648 1648 1649 1649 sage: C = CrystalOfLetters(['E',6], dual = True) 1650 sage: C((-1,)). e(1)1650 sage: C((-1,))._e(1) 1651 1651 (1, -3) 1652 1652 """ 1653 return self.retract(self.lift(). f(i))1653 return self.retract(self.lift()._f(i)) 1654 1654 1655 cpdef LetterTuple f(self, int i):1655 cpdef LetterTuple _f(self, int i): 1656 1656 r""" 1657 1657 Return the action of `f_i` on ``self``. 1658 1658 1659 1659 EXAMPLES:: 1660 1660 1661 1661 sage: C = CrystalOfLetters(['E',6], dual = True) 1662 sage: C((6,)). f(6)1662 sage: C((6,))._f(6) 1663 1663 (5, -6) 1664 sage: C((6,)). f(1)1664 sage: C((6,))._f(1) 1665 1665 """ 1666 return self.retract(self.lift(). e(i))1666 return self.retract(self.lift()._e(i)) 1667 1667 1668 1668 def weight(self): 1669 1669 """ … … cdef class Crystal_of_letters_type_E7_el 1782 1782 R=self._parent.weight_lattice_realization().fundamental_weights() 1783 1783 return sum(cmp(i,0)*R[abs(i)] for i in self.value) 1784 1784 1785 cpdef LetterTuple e(self, int i):1785 cpdef LetterTuple _e(self, int i): 1786 1786 r""" 1787 1787 Return the action of `e_i` on ``self``. 1788 1788 1789 1789 EXAMPLES:: 1790 1790 1791 1791 sage: C = CrystalOfLetters(['E',7]) 1792 sage: C((7,)). e(7)1793 sage: C((-7,6)). e(7)1792 sage: C((7,))._e(7) 1793 sage: C((-7,6))._e(7) 1794 1794 (7,) 1795 1795 """ 1796 1796 if self.value == (-7, 6) and i == 7 : … … cdef class Crystal_of_letters_type_E7_el 1964 1964 else: 1965 1965 return None 1966 1966 1967 cpdef LetterTuple f(self, int i):1967 cpdef LetterTuple _f(self, int i): 1968 1968 r""" 1969 1969 Return the action of `f_i` on ``self``. 1970 1970 1971 1971 EXAMPLES:: 1972 1972 1973 1973 sage: C = CrystalOfLetters(['E',7]) 1974 sage: C((-7,)). f(7)1975 sage: C((7,)). f(7)1974 sage: C((-7,))._f(7) 1975 sage: C((7,))._f(7) 1976 1976 (-7, 6) 1977 1977 """ 1978 1978 if self.value == (7,) and i == 7 : -
sage/combinat/crystals/littelmann_path.py
diff --git a/sage/combinat/crystals/littelmann_path.py b/sage/combinat/crystals/littelmann_path.py
a b class CrystalOfLSPaths(UniqueRepresentat 355 355 psmin = ps 356 356 return tuple(minima_pos) 357 357 358 def epsilon(self, i):358 def _epsilon(self, i): 359 359 r""" 360 Return sthe distance to the beginning of the `i`-string.360 Return the distance to the beginning of the `i`-string. 361 361 362 362 This method overrides the generic implementation in the category of crystals 363 363 since this computation is more efficient. … … class CrystalOfLSPaths(UniqueRepresentat 365 365 EXAMPLES:: 366 366 367 367 sage: C = CrystalOfLSPaths(['A',2],[1,1]) 368 sage: [c. epsilon(1) for c in C]368 sage: [c._epsilon(1) for c in C] 369 369 [0, 1, 0, 0, 1, 0, 1, 2] 370 sage: [c. epsilon(2) for c in C]370 sage: [c._epsilon(2) for c in C] 371 371 [0, 0, 1, 2, 1, 1, 0, 0] 372 372 """ 373 return self. e(i,length_only=True)373 return self._e(i,length_only=True) 374 374 375 def phi(self, i):375 def _phi(self, i): 376 376 r""" 377 Return sthe distance to the end of the `i`-string.377 Return the distance to the end of the `i`-string. 378 378 379 379 This method overrides the generic implementation in the category of crystals 380 380 since this computation is more efficient. … … class CrystalOfLSPaths(UniqueRepresentat 382 382 EXAMPLES:: 383 383 384 384 sage: C = CrystalOfLSPaths(['A',2],[1,1]) 385 sage: [c. phi(1) for c in C]385 sage: [c._phi(1) for c in C] 386 386 [1, 0, 0, 1, 0, 2, 1, 0] 387 sage: [c. phi(2) for c in C]387 sage: [c._phi(2) for c in C] 388 388 [1, 2, 1, 0, 0, 0, 0, 1] 389 389 """ 390 return self. f(i,length_only=True)390 return self._f(i,length_only=True) 391 391 392 def e(self, i, power=1, to_string_end=False, length_only=False):392 def _e(self, i, power=1, to_string_end=False, length_only=False): 393 393 r""" 394 Return sthe `i`-th crystal raising operator on ``self``.394 Return the `i`-th crystal raising operator on ``self``. 395 395 396 396 INPUT: 397 397 … … class CrystalOfLSPaths(UniqueRepresentat 408 408 sage: C = CrystalOfLSPaths(['A',2],[1,1]) 409 409 sage: c = C[2]; c 410 410 (1/2*Lambda[1] - Lambda[2], -1/2*Lambda[1] + Lambda[2]) 411 sage: c. e(1)412 sage: c. e(2)411 sage: c._e(1) 412 sage: c._e(2) 413 413 (-Lambda[1] + 2*Lambda[2],) 414 sage: c. e(2,to_string_end=True)414 sage: c._e(2,to_string_end=True) 415 415 (-Lambda[1] + 2*Lambda[2],) 416 sage: c. e(1,to_string_end=True)416 sage: c._e(1,to_string_end=True) 417 417 (1/2*Lambda[1] - Lambda[2], -1/2*Lambda[1] + Lambda[2]) 418 sage: c. e(1,length_only=True)418 sage: c._e(1,length_only=True) 419 419 0 420 420 """ 421 assert i in self.index_set()422 421 data = self._string_data(i) 423 422 # compute the minimum i-height M on the path 424 423 if len(data) == 0: … … class CrystalOfLSPaths(UniqueRepresentat 486 485 dual_path.reverse() 487 486 return self.parent()(tuple(dual_path)) 488 487 489 def f(self, i, power=1, to_string_end=False, length_only=False):488 def _f(self, i, power=1, to_string_end=False, length_only=False): 490 489 r""" 491 Return sthe `i`-th crystal lowering operator on ``self``.490 Return the `i`-th crystal lowering operator on ``self``. 492 491 493 492 INPUT: 494 493 … … class CrystalOfLSPaths(UniqueRepresentat 504 503 505 504 sage: C = CrystalOfLSPaths(['A',2],[1,1]) 506 505 sage: c = C.module_generators[0] 507 sage: c. f(1)506 sage: c._f(1) 508 507 (-Lambda[1] + 2*Lambda[2],) 509 sage: c. f(1,power=2)510 sage: c. f(2)508 sage: c._f(1,power=2) 509 sage: c._f(2) 511 510 (2*Lambda[1] - Lambda[2],) 512 sage: c. f(2,to_string_end=True)511 sage: c._f(2,to_string_end=True) 513 512 (2*Lambda[1] - Lambda[2],) 514 sage: c. f(2,length_only=True)513 sage: c._f(2,length_only=True) 515 514 1 516 515 517 516 sage: C = CrystalOfLSPaths(['A',2,1],[-1,-1,2]) 518 517 sage: c = C.module_generators[0] 519 sage: c. f(2,power=2)518 sage: c._f(2,power=2) 520 519 (Lambda[0] + Lambda[1] - 2*Lambda[2],) 521 520 """ 522 521 dual_path = self.dualize() 523 dual_path = dual_path. e(i, power, to_string_end, length_only)522 dual_path = dual_path._e(i, power, to_string_end, length_only) 524 523 if length_only: 525 524 return dual_path 526 525 if dual_path == None: … … class CrystalOfLSPaths(UniqueRepresentat 553 552 sage: c.f(2).s(1) 554 553 (Lambda[0] - Lambda[1],) 555 554 """ 556 ph = self.phi(i) 557 ep = self.epsilon(i) 555 if i not in self.index_set(): 556 raise ValueError("%s is not in the index set"%i) 557 ph = self._phi(i) 558 ep = self._epsilon(i) 558 559 diff = ph - ep 559 560 if diff >= 0: 560 return self. f(i, power=diff)561 return self._f(i, power=diff) 561 562 else: 562 return self. e(i, power=-diff)563 return self._e(i, power=-diff) 563 564 564 565 def _latex_(self): 565 566 r""" -
sage/combinat/crystals/spins.py
diff --git a/sage/combinat/crystals/spins.py b/sage/combinat/crystals/spins.py
a b class Spin(LetterTuple): 345 345 """ 346 346 return Tableau([[i] for i in reversed(self.signature())])._latex_() 347 347 348 def _epsilon(self, i): 349 r""" 350 Return `\varepsilon_i` of ``self``. 351 352 EXAMPLES:: 353 354 sage: C = CrystalOfSpins(['B',3]) 355 sage: [[C[m]._epsilon(i) for i in range(1,4)] for m in range(8)] 356 [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], 357 [0, 0, 1], [1, 0, 1], [0, 1, 0], [0, 0, 1]] 358 """ 359 if self._e(i) is None: 360 return 0 361 return 1 362 363 def _phi(self, i): 364 r""" 365 Return `\varphi_i` of ``self``. 366 367 EXAMPLES:: 368 369 sage: C = CrystalOfSpins(['B',3]) 370 sage: [[C[m]._phi(i) for i in range(1,4)] for m in range(8)] 371 [[0, 0, 1], [0, 1, 0], [1, 0, 1], [0, 0, 1], 372 [1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]] 373 """ 374 if self._f(i) is None: 375 return 0 376 return 1 348 377 349 378 class Spin_crystal_type_B_element(Spin): 350 379 r""" 351 Type B spin representation crystal element380 Type `B` spin representation crystal element. 352 381 """ 353 def e(self, i):382 def _e(self, i): 354 383 r""" 355 Return s the action of `e_i` on self.356 384 Return the action of `e_i` on ``self``. 385 357 386 EXAMPLES:: 358 387 359 388 sage: C = CrystalOfSpins(['B',3]) 360 sage: [[C[m]. e(i) for i in range(1,4)] for m in range(8)]389 sage: [[C[m]._e(i) for i in range(1,4)] for m in range(8)] 361 390 [[None, None, None], [None, None, +++], [None, ++-, None], [+-+, None, None], 362 391 [None, None, +-+], [+--, None, -++], [None, -+-, None], [None, None, --+]] 363 392 """ 364 assert i in self.index_set()365 393 rank = self.parent().cartan_type().n 366 394 if i < rank: 367 395 if self.value[i-1] == -1 and self.value[i] == 1: … … class Spin_crystal_type_B_element(Spin): 375 403 ret[i-1] = 1 376 404 return self.parent()(ret) 377 405 else: 378 return None 406 return None 379 407 380 def f(self, i):408 def _f(self, i): 381 409 r""" 382 Return s the action of `f_i` on self.383 410 Return the action of `f_i` on ``self``. 411 384 412 EXAMPLES:: 385 413 386 414 sage: C = CrystalOfSpins(['B',3]) 387 sage: [[C[m]. f(i) for i in range(1,4)] for m in range(8)]415 sage: [[C[m]._f(i) for i in range(1,4)] for m in range(8)] 388 416 [[None, None, ++-], [None, +-+, None], [-++, None, +--], [None, None, -+-], 389 417 [-+-, None, None], [None, --+, None], [None, None, ---], [None, None, None]] 390 418 """ 391 assert i in self.index_set()392 419 rank = self.parent().cartan_type().n 393 420 if i < rank: 394 421 if self.value[i-1] == 1 and self.value[i] == -1: … … class Spin_crystal_type_B_element(Spin): 406 433 407 434 class Spin_crystal_type_D_element(Spin): 408 435 r""" 409 Type D spin representation crystal element436 Type `D` spin representation crystal element. 410 437 """ 411 def e(self, i):438 def _e(self, i): 412 439 r""" 413 Return s the action of `e_i` on self.414 440 Return the action of `e_i` on ``self``. 441 415 442 EXAMPLES:: 416 443 417 444 sage: D = CrystalOfSpinsPlus(['D',4]) 418 sage: [[D.list()[m]. e(i) for i in range(1,4)] for m in range(8)]445 sage: [[D.list()[m]._e(i) for i in range(1,4)] for m in range(8)] 419 446 [[None, None, None], [None, None, None], [None, ++--, None], [+-+-, None, None], 420 447 [None, None, +-+-], [+--+, None, -++-], [None, -+-+, None], [None, None, None]] 421 448 422 449 :: 423 450 424 451 sage: E = CrystalOfSpinsMinus(['D',4]) 425 sage: [[E[m]. e(i) for i in range(1,4)] for m in range(8)]452 sage: [[E[m]._e(i) for i in range(1,4)] for m in range(8)] 426 453 [[None, None, None], [None, None, +++-], [None, ++-+, None], [+-++, None, None], 427 454 [None, None, None], [+---, None, None], [None, -+--, None], [None, None, --+-]] 428 455 """ 429 assert i in self.index_set()430 456 rank = self.parent().cartan_type().n 431 457 if i < rank: 432 458 if self.value[i-1] == -1 and self.value[i] == 1: … … class Spin_crystal_type_D_element(Spin): 443 469 else: 444 470 return None 445 471 446 def f(self, i):472 def _f(self, i): 447 473 r""" 448 Return s the action of `f_i` on self.449 474 Return the action of `f_i` on ``self``. 475 450 476 EXAMPLES:: 451 477 452 478 sage: D = CrystalOfSpinsPlus(['D',4]) 453 sage: [[D.list()[m]. f(i) for i in range(1,4)] for m in range(8)]479 sage: [[D.list()[m]._f(i) for i in range(1,4)] for m in range(8)] 454 480 [[None, None, None], [None, +-+-, None], [-++-, None, +--+], [None, None, -+-+], 455 481 [-+-+, None, None], [None, --++, None], [None, None, None], [None, None, None]] 456 482 457 483 :: 458 484 459 485 sage: E = CrystalOfSpinsMinus(['D',4]) 460 sage: [[E[m]. f(i) for i in range(1,4)] for m in range(8)]486 sage: [[E[m]._f(i) for i in range(1,4)] for m in range(8)] 461 487 [[None, None, ++-+], [None, +-++, None], [-+++, None, None], [None, None, None], 462 488 [-+--, None, None], [None, --+-, None], [None, None, ---+], [None, None, None]] 463 489 """ 464 assert i in self.index_set()465 490 rank = self.parent().cartan_type().n 466 491 if i < rank: 467 492 if self.value[i-1] == 1 and self.value[i] == -1: -
sage/combinat/crystals/tensor_product.py
diff --git a/sage/combinat/crystals/tensor_product.py b/sage/combinat/crystals/tensor_product.py
a b class TensorProductOfCrystalsElement(Imm 817 817 """ 818 818 return sum(self[i].weight() for i in range(len(self))) 819 819 820 def epsilon(self, i):820 def _epsilon(self, i): 821 821 r""" 822 822 Return `\varepsilon_i` of ``self``. 823 823 … … class TensorProductOfCrystalsElement(Imm 832 832 sage: b1 = B.highest_weight_vector().f(2) 833 833 sage: b2 = B.highest_weight_vector().f_string([2,2,1]) 834 834 sage: t = T(b2, b1) 835 sage: [t. epsilon(i) for i in B.index_set()]835 sage: [t._epsilon(i) for i in B.index_set()] 836 836 [0, 3] 837 837 """ 838 838 return max(self._sig(i, k) for k in range(1, len(self)+1)) 839 839 840 def phi(self, i):840 def _phi(self, i): 841 841 r""" 842 842 Return `\varphi_i` of ``self``. 843 843 … … class TensorProductOfCrystalsElement(Imm 853 853 sage: b1 = B.highest_weight_vector().f_string([1,0]) 854 854 sage: b2 = B.highest_weight_vector().f_string([0,1]) 855 855 sage: t = T(b2, b1) 856 sage: [t. phi(i) for i in B.index_set()]856 sage: [t._phi(i) for i in B.index_set()] 857 857 [1, 1, 4] 858 858 """ 859 859 P = self[-1].parent().weight_lattice_realization() … … class TensorProductOfCrystalsElement(Imm 893 893 [[0, -1], [0, 0], [0, 1], [1, 2]] 894 894 """ 895 895 if k == 1: 896 return self[-1]. epsilon(i)897 return self._sig(i, k-1) + self[-k]. epsilon(i) - self[-k+1].phi(i)896 return self[-1]._epsilon(i) 897 return self._sig(i, k-1) + self[-k]._epsilon(i) - self[-k+1]._phi(i) 898 898 899 def e(self,i):899 def _e(self,i): 900 900 r""" 901 901 Return the action of `e_i` on ``self``. 902 902 … … class TensorProductOfCrystalsElement(Imm 911 911 sage: b1 = B.highest_weight_vector().f_string([1,4,3]) 912 912 sage: b2 = B.highest_weight_vector().f_string([2,2,3,1,4]) 913 913 sage: t = T(b2, b1) 914 sage: t. e(1)914 sage: t._e(1) 915 915 [[[1, 1, 1, 1, 1], [2, 2, 3, -3], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] 916 sage: t. e(2)917 sage: t. e(3)916 sage: t._e(2) 917 sage: t._e(3) 918 918 [[[1, 1, 1, 1, 1, 2], [2, 2, 3, -4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] 919 sage: t. e(4)919 sage: t._e(4) 920 920 [[[1, 1, 1, 1, 1, 2], [2, 2, 3, 4], [3]], [[1, 1, 1, 1, 2], [2, 2, 2], [3, -3]]] 921 921 """ 922 922 N = len(self) + 1 923 923 for k in range(1, N): 924 924 if all(self._sig(i,k) > self._sig(i,j) for j in range(1, k)) and \ 925 925 all(self._sig(i,k) >= self._sig(i,j) for j in range(k+1, N)): 926 crystal = self[-k]. e(i)926 crystal = self[-k]._e(i) 927 927 if crystal is None: 928 928 return None 929 929 return self.set_index(-k, crystal) 930 930 return None 931 931 932 def f(self,i):932 def _f(self,i): 933 933 r""" 934 934 Return the action of `f_i` on ``self``. 935 935 … … class TensorProductOfCrystalsElement(Imm 946 946 sage: b2 = B.highest_weight_vector().f_string([0]) 947 947 sage: b3 = B.highest_weight_vector() 948 948 sage: t = T(b3, b2, b1) 949 sage: t. f(0)949 sage: t._f(0) 950 950 [[[0]], [[0]], [[0, 3]]] 951 sage: t. f(1)951 sage: t._f(1) 952 952 [[], [[0]], [[0, 3], [1]]] 953 sage: t. f(2)953 sage: t._f(2) 954 954 [[], [[0]], [[0, 3, 2]]] 955 sage: t. f(3)955 sage: t._f(3) 956 956 [[], [[0, 3]], [[0, 3]]] 957 957 """ 958 958 N = len(self) + 1 959 959 for k in range(1, N): 960 960 if all(self._sig(i,k) >= self._sig(i,j) for j in range(1, k)) and \ 961 961 all(self._sig(i,k) > self._sig(i,j) for j in range(k+1, N)): 962 crystal = self[-k]. f(i)962 crystal = self[-k]._f(i) 963 963 if crystal is None: 964 964 return None 965 965 return self.set_index(-k, crystal) … … class TensorProductOfRegularCrystalsElem 978 978 sage: isinstance(elt, TensorProductOfRegularCrystalsElement) 979 979 True 980 980 """ 981 def e(self, i):981 def _e(self, i): 982 982 """ 983 983 Return the action of `e_i` on ``self``. 984 984 … … class TensorProductOfRegularCrystalsElem 986 986 987 987 sage: C = CrystalOfLetters(['A',5]) 988 988 sage: T = TensorProductOfCrystals(C,C) 989 sage: T(C(1),C(2)). e(1) == T(C(1),C(1))989 sage: T(C(1),C(2))._e(1) == T(C(1),C(1)) 990 990 True 991 sage: T(C(2),C(1)). e(1) == None991 sage: T(C(2),C(1))._e(1) == None 992 992 True 993 sage: T(C(2),C(2)). e(1) == T(C(1),C(2))993 sage: T(C(2),C(2))._e(1) == T(C(1),C(2)) 994 994 True 995 995 """ 996 if i not in self.index_set():997 raise ValueError("i must be in the index set")998 996 position = self.positions_of_unmatched_plus(i) 999 997 if position == []: 1000 998 return None 1001 999 k = position[0] 1002 return self.set_index(k, self[k]. e(i))1000 return self.set_index(k, self[k]._e(i)) 1003 1001 1004 1002 def weight(self): 1005 1003 """ … … class TensorProductOfRegularCrystalsElem 1017 1015 """ 1018 1016 return sum((self[j].weight() for j in range(len(self))), self.parent().weight_lattice_realization().zero()) 1019 1017 1020 def f(self, i):1018 def _f(self, i): 1021 1019 """ 1022 1020 Return the action of `f_i` on ``self``. 1023 1021 … … class TensorProductOfRegularCrystalsElem 1025 1023 1026 1024 sage: C = CrystalOfLetters(['A',5]) 1027 1025 sage: T = TensorProductOfCrystals(C,C) 1028 sage: T(C(1),C(1)). f(1)1026 sage: T(C(1),C(1))._f(1) 1029 1027 [1, 2] 1030 sage: T(C(1),C(2)). f(1)1028 sage: T(C(1),C(2))._f(1) 1031 1029 [2, 2] 1032 sage: T(C(2),C(1)). f(1) is None1030 sage: T(C(2),C(1))._f(1) is None 1033 1031 True 1034 1032 """ 1035 if i not in self.index_set():1036 raise ValueError("i must be in the index set")1037 1033 position = self.positions_of_unmatched_minus(i) 1038 1034 if position == []: 1039 1035 return None 1040 1036 k = position[len(position)-1] 1041 return self.set_index(k, self[k]. f(i))1037 return self.set_index(k, self[k]._f(i)) 1042 1038 1043 def phi(self, i):1039 def _phi(self, i): 1044 1040 r""" 1045 1041 Return `\varphi_i` of ``self``. 1046 1042 … … class TensorProductOfRegularCrystalsElem 1048 1044 1049 1045 sage: C = CrystalOfLetters(['A',5]) 1050 1046 sage: T = TensorProductOfCrystals(C,C) 1051 sage: T(C(1),C(1)). phi(1)1047 sage: T(C(1),C(1))._phi(1) 1052 1048 2 1053 sage: T(C(1),C(2)). phi(1)1049 sage: T(C(1),C(2))._phi(1) 1054 1050 1 1055 sage: T(C(2),C(1)). phi(1)1051 sage: T(C(2),C(1))._phi(1) 1056 1052 0 1057 1053 """ 1058 1054 self = self.reversed() 1059 1055 height = 0 1060 1056 for j in range(len(self)): 1061 plus = self[j]. epsilon(i)1062 minus = self[j]. phi(i)1057 plus = self[j]._epsilon(i) 1058 minus = self[j]._phi(i) 1063 1059 if height-plus < 0: 1064 1060 height = minus 1065 1061 else: 1066 1062 height = height - plus + minus 1067 1063 return height 1068 1064 1069 def epsilon(self, i):1065 def _epsilon(self, i): 1070 1066 r""" 1071 1067 Return `\varepsilon_i` of ``self``. 1072 1068 … … class TensorProductOfRegularCrystalsElem 1074 1070 1075 1071 sage: C = CrystalOfLetters(['A',5]) 1076 1072 sage: T = TensorProductOfCrystals(C,C) 1077 sage: T(C(1),C(1)). epsilon(1)1073 sage: T(C(1),C(1))._epsilon(1) 1078 1074 0 1079 sage: T(C(1),C(2)). epsilon(1)1075 sage: T(C(1),C(2))._epsilon(1) 1080 1076 1 1081 sage: T(C(2),C(1)). epsilon(1)1077 sage: T(C(2),C(1))._epsilon(1) 1082 1078 0 1083 1079 """ 1084 1080 height = 0 1085 1081 for j in range(len(self)): 1086 minus = self[j]. phi(i)1087 plus = self[j]. epsilon(i)1082 minus = self[j]._phi(i) 1083 plus = self[j]._epsilon(i) 1088 1084 if height-minus < 0: 1089 1085 height = plus 1090 1086 else: … … class TensorProductOfRegularCrystalsElem 1108 1104 self = self.reversed() 1109 1105 if dual == False: 1110 1106 for j in range(len(self)): 1111 minus = self[j]. phi(i)1112 plus = self[j]. epsilon(i)1107 minus = self[j]._phi(i) 1108 plus = self[j]._epsilon(i) 1113 1109 if height-minus < 0: 1114 1110 unmatched_plus.append(j) 1115 1111 height = plus … … class TensorProductOfRegularCrystalsElem 1117 1113 height = height - minus + plus 1118 1114 else: 1119 1115 for j in range(len(self)): 1120 plus = self[j]. epsilon(i)1121 minus = self[j]. phi(i)1116 plus = self[j]._epsilon(i) 1117 minus = self[j]._phi(i) 1122 1118 if height-plus < 0: 1123 1119 unmatched_plus.append(j) 1124 1120 height = minus … … class TensorProductOfRegularCrystalsElem 1298 1294 I = self.cartan_type().classical().index_set() 1299 1295 ell = max(ceil(K.s()/K.cartan_type().c()[K.r()]) for K in self.parent().crystals) 1300 1296 for i in I: 1301 if self. epsilon(i) > 0:1302 return (i,) + (self. e(i)).e_string_to_ground_state()1303 if self. epsilon(0) > ell:1304 return (0,) + (self. e(0)).e_string_to_ground_state()1297 if self._epsilon(i) > 0: 1298 return (i,) + (self._e(i)).e_string_to_ground_state() 1299 if self._epsilon(0) > ell: 1300 return (0,) + (self._e(0)).e_string_to_ground_state() 1305 1301 return () 1306 1302 1307 1303 CrystalOfWords.Element = TensorProductOfCrystalsElement -
sage/combinat/rigged_configurations/kr_tableaux.py
diff --git a/sage/combinat/rigged_configurations/kr_tableaux.py b/sage/combinat/rigged_configurations/kr_tableaux.py
a b class KirillovReshetikhinTableauxElement 651 651 if index_set is None: 652 652 index_set = self.index_set() 653 653 for i in index_set: 654 if self. epsilon(i) != 0:655 self = self. e(i)654 if self._epsilon(i) != 0: 655 self = self._e(i) 656 656 hw = self.to_classical_highest_weight(index_set=index_set) 657 657 return [hw[0], [i] + hw[1]] 658 658 return [self, []] … … class KirillovReshetikhinTableauxElement 671 671 """ 672 672 return self.Phi() - self.Epsilon() 673 673 674 def e(self, i):674 def _e(self, i): 675 675 """ 676 676 Perform the action of `e_i` on ``self``. 677 677 … … class KirillovReshetikhinTableauxElement 682 682 EXAMPLES:: 683 683 684 684 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 2,2) 685 sage: KRT.module_generators[0]. e(0)685 sage: KRT.module_generators[0]._e(0) 686 686 [[-2, 1], [-1, -1]] 687 687 """ 688 688 if i == 0: … … class KirillovReshetikhinTableauxElement 690 690 if ret is None: 691 691 return None 692 692 return ret.to_Kirillov_Reshetikhin_tableau() 693 return TensorProductOfRegularCrystalsElement. e(self, i)693 return TensorProductOfRegularCrystalsElement._e(self, i) 694 694 695 def f(self, i):695 def _f(self, i): 696 696 """ 697 697 Perform the action of `f_i` on ``self``. 698 698 … … class KirillovReshetikhinTableauxElement 703 703 EXAMPLES:: 704 704 705 705 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 2,2) 706 sage: KRT.module_generators[0]. f(0)706 sage: KRT.module_generators[0]._f(0) 707 707 [[1, 1], [2, -1]] 708 708 """ 709 709 if i == 0: … … class KirillovReshetikhinTableauxElement 711 711 if ret is None: 712 712 return None 713 713 return ret.to_Kirillov_Reshetikhin_tableau() 714 return TensorProductOfRegularCrystalsElement. f(self, i)714 return TensorProductOfRegularCrystalsElement._f(self, i) 715 715 716 716 KirillovReshetikhinTableaux.Element = KirillovReshetikhinTableauxElement 717 717 … … class KRTableauxSpinElement(KirillovResh 722 722 Here we are in the embedding `B(\Lambda_n) \to B(2 \Lambda_n)`, so `e_i` 723 723 and `f_i` act by `e_i^2` and `f_i^2` respectively. 724 724 """ 725 def e(self, i):725 def _e(self, i): 726 726 r""" 727 727 Calculate the action of `e_i` on ``self``. 728 728 729 729 EXAMPLES:: 730 730 731 731 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 4, 1) 732 sage: KRT([-1, -4, 3, 2]). e(1)732 sage: KRT([-1, -4, 3, 2])._e(1) 733 733 [[1], [3], [-4], [-2]] 734 sage: KRT([-1, -4, 3, 2]). e(3)734 sage: KRT([-1, -4, 3, 2])._e(3) 735 735 """ 736 half = TensorProductOfRegularCrystalsElement. e(self, i)736 half = TensorProductOfRegularCrystalsElement._e(self, i) 737 737 if half is None: 738 738 return None 739 return TensorProductOfRegularCrystalsElement. e(half, i)739 return TensorProductOfRegularCrystalsElement._e(half, i) 740 740 741 def f(self, i):741 def _f(self, i): 742 742 r""" 743 743 Calculate the action of `f_i` on ``self``. 744 744 745 745 EXAMPLES:: 746 746 747 747 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 4, 1) 748 sage: KRT([-1, -4, 3, 2]). f(1)749 sage: KRT([-1, -4, 3, 2]). f(3)748 sage: KRT([-1, -4, 3, 2])._f(1) 749 sage: KRT([-1, -4, 3, 2])._f(3) 750 750 [[2], [4], [-3], [-1]] 751 751 """ 752 half = TensorProductOfRegularCrystalsElement. f(self, i)752 half = TensorProductOfRegularCrystalsElement._f(self, i) 753 753 if half is None: 754 754 return None 755 755 756 return TensorProductOfRegularCrystalsElement. f(half, i)756 return TensorProductOfRegularCrystalsElement._f(half, i) 757 757 758 def epsilon(self, i):758 def _epsilon(self, i): 759 759 r""" 760 760 Compute `\epsilon_i` of ``self``. 761 761 762 762 EXAMPLES:: 763 763 764 764 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 4, 1) 765 sage: KRT([-1, -4, 3, 2]). epsilon(1)765 sage: KRT([-1, -4, 3, 2])._epsilon(1) 766 766 1 767 767 sage: KRT([-1, -4, 3, 2]).epsilon(3) 768 768 0 769 769 """ 770 return TensorProductOfRegularCrystalsElement. epsilon(self, i) / 2770 return TensorProductOfRegularCrystalsElement._epsilon(self, i) / 2 771 771 772 def phi(self, i):772 def _phi(self, i): 773 773 r""" 774 774 Compute `\phi_i` of ``self``. 775 775 776 776 EXAMPLES:: 777 777 778 778 sage: KRT = KirillovReshetikhinTableaux(['D',4,1], 4, 1) 779 sage: KRT([-1, -4, 3, 2]). phi(1)779 sage: KRT([-1, -4, 3, 2])._phi(1) 780 780 0 781 sage: KRT([-1, -4, 3, 2]). phi(3)781 sage: KRT([-1, -4, 3, 2])._phi(3) 782 782 1 783 783 """ 784 return TensorProductOfRegularCrystalsElement. phi(self, i) / 2784 return TensorProductOfRegularCrystalsElement._phi(self, i) / 2 785 785 786 786 @cached_method 787 787 def to_array(self, rows=True): -
sage/combinat/rigged_configurations/rigged_configuration_element.py
diff --git a/sage/combinat/rigged_configurations/rigged_configuration_element.py b/sage/combinat/rigged_configurations/rigged_configuration_element.py
a b class RiggedConfigurationElement(Clonabl 561 561 """ 562 562 return list(self) 563 563 564 def e(self, a):564 def _e(self, a): 565 565 r""" 566 566 Action of the crystal operator `e_a` on this rigged configuration element. 567 567 … … class RiggedConfigurationElement(Clonabl 584 584 585 585 sage: RC = RiggedConfigurations(['A', 4, 1], [[2,1]]) 586 586 sage: elt = RC(partition_list=[[1], [1], [1], [1]]) 587 sage: elt. e(3)588 sage: elt. e(1)587 sage: elt._e(3) 588 sage: elt._e(1) 589 589 <BLANKLINE> 590 590 (/) 591 591 <BLANKLINE> … … class RiggedConfigurationElement(Clonabl 596 596 -1[ ]-1 597 597 <BLANKLINE> 598 598 """ 599 assert a in self.parent()._cartan_type.index_set()600 599 if a == 0: 601 600 raise NotImplementedError("Only classical crystal operators implemented") 602 601 … … class RiggedConfigurationElement(Clonabl 709 708 710 709 return(RiggedPartition(new_list, new_rigging, new_vac_nums)) 711 710 712 def f(self, a):711 def _f(self, a): 713 712 r""" 714 713 Action of crystal operator `f_a` on this rigged configuration element. 715 714 … … class RiggedConfigurationElement(Clonabl 734 733 735 734 sage: RC = RiggedConfigurations(['A', 4, 1], [[2,1]]) 736 735 sage: elt = RC(partition_list=[[1], [1], [1], [1]]) 737 sage: elt. f(1)738 sage: elt. f(2)736 sage: elt._f(1) 737 sage: elt._f(2) 739 738 <BLANKLINE> 740 739 0[ ]0 741 740 <BLANKLINE> … … class RiggedConfigurationElement(Clonabl 747 746 -1[ ]-1 748 747 <BLANKLINE> 749 748 """ 750 assert a in self.parent()._cartan_type.index_set()751 749 if a == 0: 752 750 raise NotImplementedError("Only classical crystal operators implemented") 753 751 -
sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py
diff --git a/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py b/sage/combinat/rigged_configurations/tensor_product_kr_tableaux_element.py
a b class TensorProductOfKirillovReshetikhin 157 157 retStr += " (X) " + repr(self[i]) 158 158 return(retStr) 159 159 160 def e(self, i):160 def _e(self, i): 161 161 r""" 162 162 Return the action of `e_i` on ``self``. 163 163 … … class TensorProductOfKirillovReshetikhin 165 165 166 166 sage: KRT = TensorProductOfKirillovReshetikhinTableaux(['D', 4, 1], [[2,1]]) 167 167 sage: T = KRT(pathlist=[[4,3]]) 168 sage: T. e(1)169 sage: T. e(2)168 sage: T._e(1) 169 sage: T._e(2) 170 170 [[2], [4]] 171 171 """ 172 172 if i != 0: 173 return TensorProductOfRegularCrystalsElement. e(self, i)173 return TensorProductOfRegularCrystalsElement._e(self, i) 174 174 175 175 return None 176 176 177 def f(self, i):177 def _f(self, i): 178 178 r""" 179 179 Return the action of `f_i` on ``self``. 180 180 … … class TensorProductOfKirillovReshetikhin 182 182 183 183 sage: KRT = TensorProductOfKirillovReshetikhinTableaux(['D', 4, 1], [[2,1]]) 184 184 sage: T = KRT(pathlist=[[4,3]]) 185 sage: T. f(1)186 sage: T. f(4)185 sage: T._f(1) 186 sage: T._f(4) 187 187 [[-4], [4]] 188 188 """ 189 189 if i != 0: 190 return TensorProductOfRegularCrystalsElement. f(self, i)190 return TensorProductOfRegularCrystalsElement._f(self, i) 191 191 192 192 return None 193 193