passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,898 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.combinat sage.graphs sage.modules
3
+ r"""
4
+ Regular Crystals
5
+ """
6
+ #*****************************************************************************
7
+ # Copyright (C) 2013 Anne Schilling <anne at math.ucdavis.edu>
8
+ # Travis Scrimshaw <tscrim at ucdavis.edu>
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ #
12
+ # This code is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ # General Public License for more details.
16
+ #
17
+ # The full text of the GPL is available at:
18
+ #
19
+ # http://www.gnu.org/licenses/
20
+ #****************************************************************************
21
+
22
+ from sage.misc.cachefunc import cached_method
23
+ from sage.categories.category_singleton import Category_singleton
24
+ from sage.categories.crystals import Crystals
25
+ from sage.categories.tensor import TensorProductsCategory
26
+
27
+
28
+ class RegularCrystals(Category_singleton):
29
+ r"""
30
+ The category of regular crystals.
31
+
32
+ A crystal is called *regular* if every vertex `b` satisfies
33
+
34
+ .. MATH::
35
+
36
+ \varepsilon_i(b) = \max\{ k \mid e_i^k(b) \neq 0 \} \quad \text{and}
37
+ \quad \varphi_i(b) = \max\{ k \mid f_i^k(b) \neq 0 \}.
38
+
39
+ .. NOTE::
40
+
41
+ Regular crystals are sometimes referred to as *normal*. When only one
42
+ of the conditions (on either `\varphi_i` or `\varepsilon_i`) holds,
43
+ these crystals are sometimes called *seminormal* or *semiregular*.
44
+
45
+ EXAMPLES::
46
+
47
+ sage: C = RegularCrystals()
48
+ sage: C
49
+ Category of regular crystals
50
+ sage: C.super_categories()
51
+ [Category of crystals]
52
+ sage: C.example()
53
+ Highest weight crystal of type A_3 of highest weight omega_1
54
+
55
+ TESTS::
56
+
57
+ sage: TestSuite(C).run()
58
+ sage: B = RegularCrystals().example()
59
+ sage: TestSuite(B).run(verbose = True)
60
+ running ._test_an_element() . . . pass
61
+ running ._test_cardinality() . . . pass
62
+ running ._test_category() . . . pass
63
+ running ._test_construction() . . . pass
64
+ running ._test_elements() . . .
65
+ Running the test suite of self.an_element()
66
+ running ._test_category() . . . pass
67
+ running ._test_eq() . . . pass
68
+ running ._test_new() . . . pass
69
+ running ._test_not_implemented_methods() . . . pass
70
+ running ._test_pickling() . . . pass
71
+ running ._test_stembridge_local_axioms() . . . pass
72
+ pass
73
+ running ._test_elements_eq_reflexive() . . . pass
74
+ running ._test_elements_eq_symmetric() . . . pass
75
+ running ._test_elements_eq_transitive() . . . pass
76
+ running ._test_elements_neq() . . . pass
77
+ running ._test_enumerated_set_contains() . . . pass
78
+ running ._test_enumerated_set_iter_cardinality() . . . pass
79
+ running ._test_enumerated_set_iter_list() . . . pass
80
+ running ._test_eq() . . . pass
81
+ running ._test_fast_iter() . . . pass
82
+ running ._test_new() . . . pass
83
+ running ._test_not_implemented_methods() . . . pass
84
+ running ._test_pickling() . . . pass
85
+ running ._test_some_elements() . . . pass
86
+ running ._test_stembridge_local_axioms() . . . pass
87
+ """
88
+
89
+ @cached_method
90
+ def super_categories(self):
91
+ r"""
92
+ EXAMPLES::
93
+
94
+ sage: RegularCrystals().super_categories()
95
+ [Category of crystals]
96
+ """
97
+ return [Crystals()]
98
+
99
+ def example(self, n=3):
100
+ """
101
+ Return an example of highest weight crystals, as per
102
+ :meth:`Category.example`.
103
+
104
+ EXAMPLES::
105
+
106
+ sage: B = RegularCrystals().example(); B
107
+ Highest weight crystal of type A_3 of highest weight omega_1
108
+ """
109
+ from sage.categories.crystals import Crystals
110
+ return Crystals().example(n)
111
+
112
+ def additional_structure(self):
113
+ r"""
114
+ Return ``None``.
115
+
116
+ Indeed, the category of regular crystals defines no new
117
+ structure: it only relates `\varepsilon_a` and `\varphi_a` to
118
+ `e_a` and `f_a` respectively.
119
+
120
+ .. SEEALSO:: :meth:`Category.additional_structure`
121
+
122
+ .. TODO:: Should this category be a :class:`CategoryWithAxiom`?
123
+
124
+ EXAMPLES::
125
+
126
+ sage: RegularCrystals().additional_structure()
127
+ """
128
+ return None
129
+
130
+ class MorphismMethods:
131
+ def is_isomorphism(self):
132
+ """
133
+ Check if ``self`` is a crystal isomorphism, which is true
134
+ if and only if this is a strict embedding with the same number
135
+ of connected components.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: A21 = RootSystem(['A',2,1])
140
+ sage: La = A21.weight_space(extended=True).fundamental_weights()
141
+ sage: B = crystals.LSPaths(La[0])
142
+ sage: La = A21.weight_lattice(extended=True).fundamental_weights()
143
+ sage: C = crystals.GeneralizedYoungWalls(2, La[0])
144
+ sage: H = Hom(B, C)
145
+ sage: from sage.categories.highest_weight_crystals import HighestWeightCrystalMorphism
146
+ sage: class Psi(HighestWeightCrystalMorphism):
147
+ ....: def is_strict(self):
148
+ ....: return True
149
+ sage: psi = Psi(H, C.module_generators); psi
150
+ ['A', 2, 1] Crystal morphism:
151
+ From: The crystal of LS paths of type ['A', 2, 1] and weight Lambda[0]
152
+ To: Highest weight crystal of generalized Young walls
153
+ of Cartan type ['A', 2, 1] and highest weight Lambda[0]
154
+ Defn: (Lambda[0],) |--> []
155
+ sage: psi.is_isomorphism()
156
+ True
157
+ """
158
+ return (self.is_strict()
159
+ and self.domain().number_of_connected_components() ==
160
+ self.codomain().number_of_connected_components())
161
+
162
+ class ParentMethods:
163
+
164
+ # TODO: this could be a method in Crystals.Algebras.ElementMethods, so that
165
+ # one could do:
166
+ #
167
+ # sage: C = crystals.Tableaux(['A',2], shape=[2,1])
168
+ # sage: M = C.algebra(QQ)
169
+ # sage: m = M.an_element()
170
+ # sage: m.demazure_operator([1,4,2])
171
+ def demazure_operator(self, element, reduced_word):
172
+ r"""
173
+ Return the application of Demazure operators `D_i` for `i` from
174
+ ``reduced_word`` on ``element``.
175
+
176
+ INPUT:
177
+
178
+ - ``element`` -- an element of a free module indexed by the
179
+ underlying crystal
180
+ - ``reduced_word`` -- a reduced word of the Weyl group of the
181
+ same type as the underlying crystal
182
+
183
+ OUTPUT: an element of the free module indexed by the underlying crystal
184
+
185
+ EXAMPLES::
186
+
187
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
188
+ sage: C = CombinatorialFreeModule(QQ, T) # needs sage.modules
189
+ sage: t = T.highest_weight_vector()
190
+ sage: b = 2*C(t) # needs sage.modules
191
+ sage: T.demazure_operator(b,[1,2,1]) # needs sage.modules
192
+ 2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]]
193
+ + 2*B[[[1, 1], [3]]] + 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]]
194
+ + 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]
195
+
196
+ The Demazure operator is idempotent::
197
+
198
+ sage: # needs sage.modules
199
+ sage: T = crystals.Tableaux("A1", shape=[4])
200
+ sage: C = CombinatorialFreeModule(QQ, T)
201
+ sage: b = C(T.module_generators[0]); b
202
+ B[[[1, 1, 1, 1]]]
203
+ sage: e = T.demazure_operator(b,[1]); e
204
+ B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]]
205
+ + B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]]
206
+ sage: e == T.demazure_operator(e,[1])
207
+ True
208
+ sage: all(T.demazure_operator(T.demazure_operator(C(t),[1]),[1])
209
+ ....: == T.demazure_operator(C(t),[1]) for t in T)
210
+ True
211
+ """
212
+ M = element.parent()
213
+ for i in reversed(reduced_word):
214
+ element = M.linear_combination((c.demazure_operator_simple(i), coeff)
215
+ for c, coeff in element)
216
+ return element
217
+
218
+ def demazure_subcrystal(self, element, reduced_word, only_support=True):
219
+ r"""
220
+ Return the subcrystal corresponding to the application of
221
+ Demazure operators `D_i` for `i` from ``reduced_word`` on
222
+ ``element``.
223
+
224
+ INPUT:
225
+
226
+ - ``element`` -- an element of a free module indexed by the
227
+ underlying crystal
228
+ - ``reduced_word`` -- a reduced word of the Weyl group of the
229
+ same type as the underlying crystal
230
+ - ``only_support`` -- boolean (default: ``True``); only include
231
+ arrows corresponding to the support of ``reduced_word``
232
+
233
+ OUTPUT: the Demazure subcrystal
234
+
235
+ EXAMPLES::
236
+
237
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
238
+ sage: t = T.highest_weight_vector()
239
+ sage: S = T.demazure_subcrystal(t, [1,2])
240
+ sage: list(S)
241
+ [[[1, 1], [2]], [[1, 2], [2]], [[1, 1], [3]],
242
+ [[1, 2], [3]], [[2, 2], [3]]]
243
+ sage: S = T.demazure_subcrystal(t, [2,1])
244
+ sage: list(S)
245
+ [[[1, 1], [2]], [[1, 2], [2]], [[1, 1], [3]],
246
+ [[1, 3], [2]], [[1, 3], [3]]]
247
+
248
+ We construct an example where we don't only want the arrows
249
+ indicated by the support of the reduced word::
250
+
251
+ sage: K = crystals.KirillovReshetikhin(['A',1,1], 1, 2)
252
+ sage: mg = K.module_generator()
253
+ sage: S = K.demazure_subcrystal(mg, [1])
254
+ sage: S.digraph().edges(sort=True)
255
+ [([[1, 1]], [[1, 2]], 1), ([[1, 2]], [[2, 2]], 1)]
256
+ sage: S = K.demazure_subcrystal(mg, [1], only_support=False)
257
+ sage: S.digraph().edges(sort=True)
258
+ [([[1, 1]], [[1, 2]], 1),
259
+ ([[1, 2]], [[1, 1]], 0),
260
+ ([[1, 2]], [[2, 2]], 1),
261
+ ([[2, 2]], [[1, 2]], 0)]
262
+ """
263
+ from sage.combinat.free_module import CombinatorialFreeModule
264
+ from sage.rings.rational_field import QQ
265
+ C = CombinatorialFreeModule(QQ, self)
266
+ D = self.demazure_operator(C(element), reduced_word)
267
+ if only_support:
268
+ index_set = tuple(frozenset(reduced_word))
269
+ else:
270
+ index_set = self.cartan_type().index_set()
271
+ return self.subcrystal(contained=D.support(), generators=[element],
272
+ index_set=index_set)
273
+
274
+ def _test_stembridge_local_axioms(self, index_set=None, verbose=False, complete=False, **options):
275
+ r"""
276
+ This implements tests for the Stembridge local characterization
277
+ on the finite crystal ``self``.
278
+
279
+ The current implementation only uses the rules for simply-laced
280
+ types. Crystals of other types should still pass the test, but
281
+ expansion of this test to non-simply laced type would be desirable.
282
+
283
+ One can specify an index set smaller than the full index set of
284
+ the crystal, using the option ``index_set``.
285
+
286
+ Running with ``verbose=True`` will print each node for which a
287
+ local axiom test applies.
288
+
289
+ Running with ``complete=True`` will continue to run the test past
290
+ the first failure of the local axioms. This is probably only
291
+ useful in conjunction with the verbose option, to see all places
292
+ where the local axioms fail.
293
+
294
+ EXAMPLES::
295
+
296
+ sage: T = crystals.Tableaux(['A',3], shape=[2,1])
297
+ sage: T._test_stembridge_local_axioms()
298
+ True
299
+ sage: T._test_stembridge_local_axioms(verbose=True)
300
+ True
301
+ sage: T._test_stembridge_local_axioms(index_set=[1,3])
302
+ True
303
+
304
+ sage: B = Crystals().example(choice='naive')
305
+ sage: B._test_stembridge_local_axioms()
306
+ Traceback (most recent call last):
307
+ ...
308
+ AssertionError: None
309
+ """
310
+ tester = self._tester(**options)
311
+ goodness = True
312
+ i = 0
313
+ for x in self:
314
+ goodness = x._test_stembridge_local_axioms(index_set, verbose)
315
+ if not goodness and not complete:
316
+ tester.fail()
317
+ i += 1
318
+ if i > tester._max_runs:
319
+ return
320
+ tester.assertTrue(goodness)
321
+ return goodness
322
+
323
+ def dual_equivalence_graph(self, X=None, index_set=None, directed=True):
324
+ r"""
325
+ Return the dual equivalence graph indexed by ``index_set``
326
+ on the subset ``X`` of ``self``.
327
+
328
+ Let `b \in B` be an element of weight `0`, so `\varepsilon_j(b)
329
+ = \varphi_j(b)` for all `j \in I`, where `I` is the indexing
330
+ set. We say `b'` is an `i`-elementary dual equivalence
331
+ transformation of `b` (where `i \in I`) if
332
+
333
+ * `\varepsilon_i(b) = 1` and `\varepsilon_{i-1}(b) = 0`, and
334
+ * `b' = f_{i-1} f_i e_{i-1} e_i b`.
335
+
336
+ We can do the inverse procedure by interchanging `i` and `i-1`
337
+ above.
338
+
339
+ .. NOTE::
340
+
341
+ If the index set is not an ordered interval, we let
342
+ `i - 1` mean the index appearing before `i` in `I`.
343
+
344
+ This definition comes from [As2008]_ Section 4 (where our
345
+ `\varphi_j(b)` and `\varepsilon_j(b)` are denoted by
346
+ `\epsilon(b, j)` and `-\delta(b, j)`, respectively).
347
+
348
+ The dual equivalence graph of `B` is defined to be the
349
+ colored graph whose vertices are the elements of `B` of
350
+ weight `0`, and whose edges of color `i` (for `i \in I`)
351
+ connect pairs `\{ b, b' \}` such that `b'` is an
352
+ `i`-elementary dual equivalence transformation of `b`.
353
+
354
+ .. NOTE::
355
+
356
+ This dual equivalence graph is a generalization of
357
+ `\mathcal{G}\left(\mathcal{X}\right)` in [As2008]_
358
+ Section 4 except we do not require
359
+ `\varepsilon_i(b) = 0, 1` for all `i`.
360
+
361
+ This definition can be generalized by choosing a subset `X`
362
+ of the set of all vertices of `B` of weight `0`, and
363
+ restricting the dual equivalence graph to the vertex set
364
+ `X`.
365
+
366
+ INPUT:
367
+
368
+ - ``X`` -- (optional) the vertex set `X` (default:
369
+ the whole set of vertices of ``self`` of weight `0`)
370
+ - ``index_set`` -- (optional) the index set `I`
371
+ (default: the whole index set of ``self``); this has
372
+ to be a subset of the index set of ``self`` (as a list
373
+ or tuple)
374
+ - ``directed`` -- boolean (default: ``True``); whether to have the
375
+ dual equivalence graph be directed, where the head of
376
+ an edge `b - b'` is `b` and the tail is
377
+ `b' = f_{i-1} f_i e_{i-1} e_i b`)
378
+
379
+ .. SEEALSO::
380
+
381
+ :meth:`sage.combinat.partition.Partition.dual_equivalence_graph`
382
+
383
+ EXAMPLES::
384
+
385
+ sage: T = crystals.Tableaux(['A',3], shape=[2,2])
386
+ sage: G = T.dual_equivalence_graph()
387
+ sage: G.edges(sort=True)
388
+ [([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2),
389
+ ([[1, 2], [3, 4]], [[1, 3], [2, 4]], 3)]
390
+ sage: T = crystals.Tableaux(['A',4], shape=[3,2])
391
+ sage: G = T.dual_equivalence_graph()
392
+ sage: G.edges(sort=True)
393
+ [([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4),
394
+ ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2),
395
+ ([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2),
396
+ ([[1, 2, 5], [3, 4]], [[1, 3, 5], [2, 4]], 3),
397
+ ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3),
398
+ ([[1, 2, 3], [4, 5]], [[1, 2, 4], [3, 5]], 4)]
399
+
400
+ sage: T = crystals.Tableaux(['A',4], shape=[3,1])
401
+ sage: G = T.dual_equivalence_graph(index_set=[1,2,3])
402
+ sage: G.vertices(sort=True)
403
+ [[[1, 3, 4], [2]], [[1, 2, 4], [3]], [[1, 2, 3], [4]]]
404
+ sage: G.edges(sort=True)
405
+ [([[1, 3, 4], [2]], [[1, 2, 4], [3]], 2),
406
+ ([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3)]
407
+
408
+ TESTS::
409
+
410
+ sage: T = crystals.Tableaux(['A',4], shape=[3,1])
411
+ sage: G = T.dual_equivalence_graph(index_set=[2,3])
412
+ sage: G.edges(sort=True)
413
+ [([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3),
414
+ ([[2, 4, 5], [3]], [[2, 3, 5], [4]], 3)]
415
+ sage: G.vertices(sort=True)
416
+ [[[1, 3, 4], [2]],
417
+ [[1, 2, 4], [3]],
418
+ [[2, 4, 5], [3]],
419
+ [[1, 2, 3], [4]],
420
+ [[2, 3, 5], [4]],
421
+ [[1, 1, 1], [5]],
422
+ [[1, 1, 5], [5]],
423
+ [[1, 5, 5], [5]],
424
+ [[2, 3, 4], [5]]]
425
+ """
426
+ if index_set is None:
427
+ index_set = self.index_set()
428
+
429
+ def wt_zero(x):
430
+ for i in index_set:
431
+ if x.epsilon(i) != x.phi(i):
432
+ return False
433
+ return True
434
+
435
+ if X is None:
436
+ X = [x for x in self if wt_zero(x)]
437
+ checker = lambda x: True
438
+ elif any(not wt_zero(x) for x in X):
439
+ raise ValueError("the elements are not all weight 0")
440
+ else:
441
+ checker = lambda x: x in X
442
+
443
+ edges = []
444
+ for x in X:
445
+ for k, i in enumerate(index_set[1:]):
446
+ im = index_set[k]
447
+ if x.epsilon(i) == 1 and x.epsilon(im) == 0:
448
+ y = x.e(i).e(im).f(i).f(im)
449
+ if checker(y):
450
+ edges.append([x, y, i])
451
+ from sage.graphs.digraph import DiGraph
452
+ G = DiGraph([X, edges], format='vertices_and_edges', immutable=True)
453
+ from sage.graphs.dot2tex_utils import have_dot2tex
454
+ if have_dot2tex():
455
+ G.set_latex_options(format='dot2tex', edge_labels=True,
456
+ color_by_label=self.cartan_type()._index_set_coloring)
457
+ return G
458
+
459
+ class ElementMethods:
460
+
461
+ def epsilon(self, i):
462
+ r"""
463
+ Return `\varepsilon_i` of ``self``.
464
+
465
+ EXAMPLES::
466
+
467
+ sage: C = crystals.Letters(['A',5])
468
+ sage: C(1).epsilon(1)
469
+ 0
470
+ sage: C(2).epsilon(1)
471
+ 1
472
+ """
473
+ assert i in self.index_set()
474
+ x = self.e(i)
475
+ eps = 0
476
+ while x is not None:
477
+ x = x.e(i)
478
+ eps = eps + 1
479
+ return eps
480
+
481
+ def phi(self, i):
482
+ r"""
483
+ Return `\varphi_i` of ``self``.
484
+
485
+ EXAMPLES::
486
+
487
+ sage: C = crystals.Letters(['A',5])
488
+ sage: C(1).phi(1)
489
+ 1
490
+ sage: C(2).phi(1)
491
+ 0
492
+ """
493
+ assert i in self.index_set()
494
+ x = self.f(i)
495
+ phi = 0
496
+ while x is not None:
497
+ x = x.f(i)
498
+ phi += 1
499
+ return phi
500
+
501
+ def weight(self):
502
+ """
503
+ Return the weight of this crystal element.
504
+
505
+ EXAMPLES::
506
+
507
+ sage: C = crystals.Letters(['A',5])
508
+ sage: C(1).weight()
509
+ (1, 0, 0, 0, 0, 0)
510
+ """
511
+ return self.Phi() - self.Epsilon()
512
+
513
+ def demazure_operator_simple(self, i, ring=None):
514
+ r"""
515
+ Return the Demazure operator `D_i` applied to ``self``.
516
+
517
+ INPUT:
518
+
519
+ - ``i`` -- an element of the index set of the underlying crystal
520
+ - ``ring`` -- (default: ``QQ``) a ring
521
+
522
+ OUTPUT:
523
+
524
+ An element of the ``ring``-free module indexed by the underlying
525
+ crystal.
526
+
527
+ Let `r = \langle \mathrm{wt}(b), \alpha^{\vee}_i \rangle`, then
528
+ `D_i(b)` is defined as follows:
529
+
530
+ - If `r \geq 0`, this returns the sum of the elements obtained
531
+ from ``self`` by application of `f_i^k` for `0 \leq k \leq r`.
532
+ - If `r < 0`, this returns the opposite of the sum of the
533
+ elements obtained by application of `e_i^k` for `0 < k < -r`.
534
+
535
+ REFERENCES:
536
+
537
+ - [Li1995]_
538
+
539
+ - [Ka1993]_
540
+
541
+ EXAMPLES::
542
+
543
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
544
+ sage: t = T(rows=[[1,2],[2]])
545
+ sage: t.demazure_operator_simple(2)
546
+ B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]]
547
+ sage: t.demazure_operator_simple(2).parent()
548
+ Algebra of The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]]
549
+ over Integer Ring
550
+
551
+ sage: t.demazure_operator_simple(1)
552
+ 0
553
+
554
+ sage: K = crystals.KirillovReshetikhin(['A',2,1],2,1)
555
+ sage: t = K(rows=[[3],[2]])
556
+ sage: t.demazure_operator_simple(0)
557
+ B[[[1, 2]]] + B[[[2, 3]]]
558
+
559
+ TESTS::
560
+
561
+ sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
562
+ sage: x = K.an_element(); x
563
+ [[1]]
564
+ sage: x.demazure_operator_simple(0)
565
+ 0
566
+ sage: x.demazure_operator_simple(0, ring = QQ).parent()
567
+ Algebra of Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1)
568
+ over Rational Field
569
+ """
570
+ from sage.rings.integer_ring import ZZ
571
+ if ring is None:
572
+ ring = ZZ
573
+ C = self.parent().algebra(ring)
574
+ r = self.phi(i) - self.epsilon(i)
575
+ if r >= 0:
576
+ l = [self]
577
+ element = self
578
+ for k in range(r):
579
+ element = element.f(i)
580
+ l.append(element)
581
+ return C.sum_of_monomials(l)
582
+ else:
583
+ l = []
584
+ element = self
585
+ for k in range(-r-1):
586
+ element = element.e(i)
587
+ l.append(element)
588
+ return - C.sum_of_monomials(l)
589
+
590
+ def stembridgeDelta_depth(self, i, j):
591
+ r"""
592
+ Return the difference in the `j`-depth of ``self`` and `e_i`
593
+ of ``self``, where `i` and `j` are in the index set of the
594
+ underlying crystal. This function is useful for checking the
595
+ Stembridge local axioms for crystal bases.
596
+
597
+ The `i`-depth of a crystal node `x` is `-\varepsilon_i(x)`.
598
+
599
+ EXAMPLES::
600
+
601
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
602
+ sage: t = T(rows=[[1,2],[2]])
603
+ sage: t.stembridgeDelta_depth(1,2)
604
+ 0
605
+ sage: s = T(rows=[[2,3],[3]])
606
+ sage: s.stembridgeDelta_depth(1,2)
607
+ -1
608
+ """
609
+ if self.e(i) is None:
610
+ return 0
611
+ return -self.e(i).epsilon(j) + self.epsilon(j)
612
+
613
+ def stembridgeDelta_rise(self, i, j):
614
+ r"""
615
+ Return the difference in the `j`-rise of ``self`` and `e_i` of
616
+ ``self``, where `i` and `j` are in the index set of the
617
+ underlying crystal. This function is useful for checking the
618
+ Stembridge local axioms for crystal bases.
619
+
620
+ The `i`-rise of a crystal node `x` is `\varphi_i(x)`.
621
+
622
+ EXAMPLES::
623
+
624
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
625
+ sage: t = T(rows=[[1,2],[2]])
626
+ sage: t.stembridgeDelta_rise(1,2)
627
+ -1
628
+ sage: s = T(rows=[[2,3],[3]])
629
+ sage: s.stembridgeDelta_rise(1,2)
630
+ 0
631
+ """
632
+ if self.e(i) is None:
633
+ return 0
634
+ return self.e(i).phi(j) - self.phi(j)
635
+
636
+ def stembridgeDel_depth(self, i, j):
637
+ r"""
638
+ Return the difference in the `j`-depth of ``self`` and `f_i` of
639
+ ``self``, where `i` and `j` are in the index set of the
640
+ underlying crystal. This function is useful for checking the
641
+ Stembridge local axioms for crystal bases.
642
+
643
+ The `i`-depth of a crystal node `x` is `\varepsilon_i(x)`.
644
+
645
+ EXAMPLES::
646
+
647
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
648
+ sage: t = T(rows=[[1,1],[2]])
649
+ sage: t.stembridgeDel_depth(1,2)
650
+ 0
651
+ sage: s = T(rows=[[1,3],[3]])
652
+ sage: s.stembridgeDel_depth(1,2)
653
+ -1
654
+ """
655
+ if self.f(i) is None:
656
+ return 0
657
+ return -self.epsilon(j) + self.f(i).epsilon(j)
658
+
659
+ def stembridgeDel_rise(self, i, j):
660
+ r"""
661
+ Return the difference in the `j`-rise of ``self`` and `f_i` of
662
+ ``self``, where `i` and `j` are in the index set of the
663
+ underlying crystal. This function is useful for checking the
664
+ Stembridge local axioms for crystal bases.
665
+
666
+ The `i`-rise of a crystal node `x` is `\varphi_i(x)`.
667
+
668
+ EXAMPLES::
669
+
670
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
671
+ sage: t = T(rows=[[1,1],[2]])
672
+ sage: t.stembridgeDel_rise(1,2)
673
+ -1
674
+ sage: s = T(rows=[[1,3],[3]])
675
+ sage: s.stembridgeDel_rise(1,2)
676
+ 0
677
+ """
678
+ if self.f(i) is None:
679
+ return 0
680
+ return self.phi(j)-self.f(i).phi(j)
681
+
682
+ def stembridgeTriple(self, i, j):
683
+ r"""
684
+ Let `A` be the Cartan matrix of the crystal, `x` a crystal element,
685
+ and let `i` and `j` be in the index set of the crystal.
686
+ Further, set
687
+ ``b=stembridgeDelta_depth(x,i,j)``, and
688
+ ``c=stembridgeDelta_rise(x,i,j))``.
689
+ If ``x.e(i)`` is non-empty, this function returns the triple
690
+ `( A_{ij}, b, c )`; otherwise it returns ``None``.
691
+ By the Stembridge local characterization of crystal bases,
692
+ one should have `A_{ij}=b+c`.
693
+
694
+ EXAMPLES::
695
+
696
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
697
+ sage: t = T(rows=[[1,1],[2]])
698
+ sage: t.stembridgeTriple(1,2)
699
+ sage: s = T(rows=[[1,2],[2]])
700
+ sage: s.stembridgeTriple(1,2)
701
+ (-1, 0, -1)
702
+
703
+ sage: T = crystals.Tableaux(['B',2], shape=[2,1])
704
+ sage: t = T(rows=[[1,2],[2]])
705
+ sage: t.stembridgeTriple(1,2)
706
+ (-2, 0, -2)
707
+ sage: s = T(rows=[[-1,-1],[0]])
708
+ sage: s.stembridgeTriple(1,2)
709
+ (-2, -2, 0)
710
+ sage: u = T(rows=[[0,2],[1]])
711
+ sage: u.stembridgeTriple(1,2)
712
+ (-2, -1, -1)
713
+ """
714
+ if self.e(i) is None:
715
+ return None
716
+ b = self.stembridgeDelta_depth(i,j)
717
+ c = self.stembridgeDelta_rise(i,j)
718
+ dd = self.cartan_type().dynkin_diagram()
719
+ a = dd[j,i]
720
+ return (a, b, c)
721
+
722
+ def _test_stembridge_local_axioms(self, index_set=None, verbose=False, **options):
723
+ r"""
724
+ This implements tests for the Stembridge local characterization
725
+ on the element of a crystal ``self``.
726
+
727
+ The current implementation only uses the axioms for simply-laced
728
+ types. Crystals of other types should still pass the test, but
729
+ in non-simply-laced types, passing is not a guarantee that the
730
+ crystal arises from a representation.
731
+
732
+ One can specify an index set smaller than the full index set of
733
+ the crystal, using the option ``index_set``.
734
+
735
+ Running with ``verbose=True`` will print warnings when a test fails.
736
+
737
+ REFERENCES:
738
+
739
+ - [Ste2003]_
740
+
741
+ EXAMPLES::
742
+
743
+ sage: T = crystals.Tableaux(['A',2], shape=[2,1])
744
+ sage: t = T(rows=[[1,1],[2]])
745
+ sage: t._test_stembridge_local_axioms()
746
+ True
747
+ sage: t._test_stembridge_local_axioms(index_set=[1,3])
748
+ True
749
+ sage: t._test_stembridge_local_axioms(verbose=True)
750
+ True
751
+ """
752
+ tester = self._tester(**options)
753
+ goodness = True
754
+ if index_set is None:
755
+ index_set = self.index_set()
756
+
757
+ from sage.combinat.subset import Subsets
758
+
759
+ for (i,j) in Subsets(index_set, 2):
760
+ if self.e(i) is not None and self.e(j) is not None:
761
+ triple = self.stembridgeTriple(i,j)
762
+ #Test axioms P3 and P4.
763
+ if not triple[0] == triple[1]+triple[2] or triple[1] > 0 or triple[2] > 0:
764
+ if verbose:
765
+ print('Warning: Failed axiom P3 or P4 at vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
766
+ goodness = False
767
+ else:
768
+ tester.fail()
769
+ if self.stembridgeDelta_depth(i,j) == 0:
770
+ #check E_i E_j(x)= E_j E_i(x)
771
+ if self.e(i).e(j) != self.e(j).e(i) or self.e(i).e(j).stembridgeDel_rise(j, i) != 0:
772
+ if verbose:
773
+ print('Warning: Failed axiom P5 at: vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
774
+ goodness = False
775
+ else:
776
+ tester.fail()
777
+ if self.stembridgeDelta_depth(i,j) == -1 and self.stembridgeDelta_depth(j,i) == -1:
778
+ #check E_i E_j^2 E_i (x)= E_j E_i^2 E_j (x)
779
+ y1 = self.e(j).e(i).e(i).e(j)
780
+ y2 = self.e(j).e(i).e(i).e(j)
781
+ a = y1.stembridgeDel_rise(j, i)
782
+ b = y2.stembridgeDel_rise(i, j)
783
+ if y1 != y2 or a != -1 or b != -1:
784
+ if verbose:
785
+ print('Warning: Failed axiom P6 at: vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
786
+ goodness = False
787
+ else:
788
+ tester.fail()
789
+ tester.assertTrue(goodness)
790
+ return goodness
791
+
792
+ def dual_equivalence_class(self, index_set=None):
793
+ r"""
794
+ Return the dual equivalence class indexed by ``index_set``
795
+ of ``self``.
796
+
797
+ The dual equivalence class of an element `b \in B`
798
+ is the set of all elements of `B` reachable from
799
+ `b` via sequences of `i`-elementary dual equivalence
800
+ relations (i.e., `i`-elementary dual equivalence
801
+ transformations and their inverses) for `i` in the index
802
+ set of `B`.
803
+
804
+ For this to be well-defined, the element `b` has to be
805
+ of weight `0` with respect to `I`; that is, we need to have
806
+ `\varepsilon_j(b) = \varphi_j(b)` for all `j \in I`.
807
+
808
+ See [As2008]_. See also :meth:`dual_equivalence_graph` for
809
+ a definition of `i`-elementary dual equivalence
810
+ transformations.
811
+
812
+ INPUT:
813
+
814
+ - ``index_set`` -- (optional) the index set `I`
815
+ (default: the whole index set of the crystal); this has
816
+ to be a subset of the index set of the crystal (as a list
817
+ or tuple)
818
+
819
+ OUTPUT:
820
+
821
+ The dual equivalence class of ``self`` indexed by the
822
+ subset ``index_set``. This class is returned as an
823
+ undirected edge-colored multigraph. The color of an edge
824
+ is the index `i` of the dual equivalence relation it
825
+ encodes.
826
+
827
+ .. SEEALSO::
828
+
829
+ - :meth:`~sage.categories.regular_crystals.RegularCrystals.ParentMethods.dual_equivalence_graph`
830
+ - :meth:`sage.combinat.partition.Partition.dual_equivalence_graph`
831
+
832
+ EXAMPLES::
833
+
834
+ sage: T = crystals.Tableaux(['A',3], shape=[2,2])
835
+ sage: G = T(2,1,4,3).dual_equivalence_class()
836
+ sage: G.edges(sort=True)
837
+ [([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2),
838
+ ([[1, 3], [2, 4]], [[1, 2], [3, 4]], 3)]
839
+ sage: T = crystals.Tableaux(['A',4], shape=[3,2])
840
+ sage: G = T(2,1,4,3,5).dual_equivalence_class()
841
+ sage: G.edges(sort=True)
842
+ [([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4),
843
+ ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2),
844
+ ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 3),
845
+ ([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2),
846
+ ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3),
847
+ ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 4)]
848
+ """
849
+ if index_set is None:
850
+ index_set = self.index_set()
851
+
852
+ for i in index_set:
853
+ if self.epsilon(i) != self.phi(i):
854
+ raise ValueError("the element is not weight 0")
855
+
856
+ visited = set()
857
+ todo = {self}
858
+ edges = []
859
+ while todo:
860
+ x = todo.pop()
861
+ visited.add(x)
862
+ for k, i in enumerate(index_set[1:]):
863
+ im = index_set[k]
864
+ if x.epsilon(i) == 1 and x.epsilon(im) == 0:
865
+ y = x.e(i).e(im).f(i).f(im)
866
+ if [y, x, i] not in edges:
867
+ edges.append([x, y, i])
868
+ if y not in visited:
869
+ todo.add(y)
870
+ if x.epsilon(i) == 0 and x.epsilon(im) == 1:
871
+ y = x.e(im).e(i).f(im).f(i)
872
+ if [y, x, i] not in edges:
873
+ edges.append([x, y, i])
874
+ if y not in visited:
875
+ todo.add(y)
876
+ from sage.graphs.graph import Graph
877
+ G = Graph([visited, edges], format='vertices_and_edges',
878
+ immutable=True, multiedges=True)
879
+ from sage.graphs.dot2tex_utils import have_dot2tex
880
+ if have_dot2tex():
881
+ G.set_latex_options(format='dot2tex', edge_labels=True,
882
+ color_by_label=self.cartan_type()._index_set_coloring)
883
+ return G
884
+
885
+ class TensorProducts(TensorProductsCategory):
886
+ """
887
+ The category of regular crystals constructed by tensor
888
+ product of regular crystals.
889
+ """
890
+ @cached_method
891
+ def extra_super_categories(self):
892
+ """
893
+ EXAMPLES::
894
+
895
+ sage: RegularCrystals().TensorProducts().extra_super_categories()
896
+ [Category of regular crystals]
897
+ """
898
+ return [self.base_category()]