passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.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.

Potentially problematic release.


This version of passagemath-modules might be problematic. Click here for more details.

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,927 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs
3
+ """
4
+ Coxeter Groups As Matrix Groups
5
+
6
+ This implements a general Coxeter group as a matrix group by using the
7
+ reflection representation.
8
+
9
+ AUTHORS:
10
+
11
+ - Travis Scrimshaw (2013-08-28): Initial version
12
+ """
13
+
14
+ ##############################################################################
15
+ # Copyright (C) 2013 Travis Scrimshaw <tscrim at ucdavis.edu>
16
+ #
17
+ # Distributed under the terms of the GNU General Public License (GPL)
18
+ #
19
+ # The full text of the GPL is available at:
20
+ #
21
+ # http://www.gnu.org/licenses/
22
+ ##############################################################################
23
+
24
+ import sage.rings.abc
25
+
26
+ from sage.categories.coxeter_groups import CoxeterGroups
27
+ from sage.combinat.root_system.coxeter_matrix import CoxeterMatrix
28
+ from sage.groups.matrix_gps.finitely_generated import FinitelyGeneratedMatrixGroup_generic
29
+ from sage.groups.matrix_gps.group_element import MatrixGroupElement_generic
30
+ from sage.matrix.args import SparseEntry
31
+ from sage.matrix.matrix_space import MatrixSpace
32
+ from sage.misc.cachefunc import cached_method
33
+ from sage.rings.integer_ring import ZZ
34
+ from sage.rings.infinity import infinity
35
+ from sage.sets.family import Family
36
+ from sage.structure.unique_representation import UniqueRepresentation
37
+
38
+
39
+ class CoxeterMatrixGroup(UniqueRepresentation, FinitelyGeneratedMatrixGroup_generic):
40
+ r"""
41
+ A Coxeter group represented as a matrix group.
42
+
43
+ Let `(W, S)` be a Coxeter system. We construct a vector space `V`
44
+ over `\RR` with a basis of `\{ \alpha_s \}_{s \in S}` and inner product
45
+
46
+ .. MATH::
47
+
48
+ B(\alpha_s, \alpha_t) = -\cos\left( \frac{\pi}{m_{st}} \right)
49
+
50
+ where we have `B(\alpha_s, \alpha_t) = -1` if `m_{st} = \infty`. Next we
51
+ define a representation `\sigma_s : V \to V` by
52
+
53
+ .. MATH::
54
+
55
+ \sigma_s \lambda = \lambda - 2 B(\alpha_s, \lambda) \alpha_s.
56
+
57
+ This representation is faithful so we can represent the Coxeter group `W`
58
+ by the set of matrices `\sigma_s` acting on `V`.
59
+
60
+ INPUT:
61
+
62
+ - ``data`` -- a Coxeter matrix or graph or a Cartan type
63
+ - ``base_ring`` -- (default: the universal cyclotomic field or
64
+ a number field) the base ring which contains all values
65
+ `\cos(\pi/m_{ij})` where `(m_{ij})_{ij}` is the Coxeter matrix
66
+ - ``index_set`` -- (optional) an indexing set for the generators
67
+
68
+ For finite Coxeter groups, the default base ring is taken to be `\QQ` or
69
+ a quadratic number field when possible.
70
+
71
+ For more on creating Coxeter groups, see
72
+ :meth:`~sage.combinat.root_system.coxeter_group.CoxeterGroup`.
73
+
74
+ .. TODO::
75
+
76
+ Currently the label `\infty` is implemented as `-1` in the Coxeter
77
+ matrix.
78
+
79
+ EXAMPLES:
80
+
81
+ We can create Coxeter groups from Coxeter matrices::
82
+
83
+ sage: # needs sage.libs.gap sage.rings.number_field
84
+ sage: W = CoxeterGroup([[1, 6, 3], [6, 1, 10], [3, 10, 1]]); W
85
+ Coxeter group over Universal Cyclotomic Field with Coxeter matrix:
86
+ [ 1 6 3]
87
+ [ 6 1 10]
88
+ [ 3 10 1]
89
+ sage: W.gens()
90
+ (
91
+ [ -1 -E(12)^7 + E(12)^11 1]
92
+ [ 0 1 0]
93
+ [ 0 0 1],
94
+ <BLANKLINE>
95
+ [ 1 0 0]
96
+ [-E(12)^7 + E(12)^11 -1 E(20) - E(20)^9]
97
+ [ 0 0 1],
98
+ <BLANKLINE>
99
+ [ 1 0 0]
100
+ [ 0 1 0]
101
+ [ 1 E(20) - E(20)^9 -1]
102
+ )
103
+
104
+ sage: m = matrix([[1,3,3,3], [3,1,3,2], [3,3,1,2], [3,2,2,1]])
105
+ sage: W = CoxeterGroup(m)
106
+ sage: W.gens()
107
+ (
108
+ [-1 1 1 1] [ 1 0 0 0] [ 1 0 0 0] [ 1 0 0 0]
109
+ [ 0 1 0 0] [ 1 -1 1 0] [ 0 1 0 0] [ 0 1 0 0]
110
+ [ 0 0 1 0] [ 0 0 1 0] [ 1 1 -1 0] [ 0 0 1 0]
111
+ [ 0 0 0 1], [ 0 0 0 1], [ 0 0 0 1], [ 1 0 0 -1]
112
+ )
113
+ sage: a,b,c,d = W.gens()
114
+ sage: (a*b*c)^3
115
+ [ 5 1 -5 7]
116
+ [ 5 0 -4 5]
117
+ [ 4 1 -4 4]
118
+ [ 0 0 0 1]
119
+ sage: (a*b)^3
120
+ [1 0 0 0]
121
+ [0 1 0 0]
122
+ [0 0 1 0]
123
+ [0 0 0 1]
124
+ sage: b*d == d*b
125
+ True
126
+ sage: a*c*a == c*a*c
127
+ True
128
+
129
+ We can create the matrix representation over different base rings and with
130
+ different index sets. Note that the base ring must contain all
131
+ `2*\cos(\pi/m_{ij})` where `(m_{ij})_{ij}` is the Coxeter matrix::
132
+
133
+ sage: W = CoxeterGroup(m, base_ring=RR, index_set=['a','b','c','d'])
134
+ sage: W.base_ring()
135
+ Real Field with 53 bits of precision
136
+ sage: W.index_set()
137
+ ('a', 'b', 'c', 'd')
138
+
139
+ sage: CoxeterGroup(m, base_ring=ZZ)
140
+ Coxeter group over Integer Ring with Coxeter matrix:
141
+ [1 3 3 3]
142
+ [3 1 3 2]
143
+ [3 3 1 2]
144
+ [3 2 2 1]
145
+ sage: CoxeterGroup([[1,4],[4,1]], base_ring=QQ) # needs sage.symbolic
146
+ Traceback (most recent call last):
147
+ ...
148
+ TypeError: unable to convert sqrt(2) to a rational
149
+
150
+ Using the well-known conversion between Coxeter matrices and Coxeter
151
+ graphs, we can input a Coxeter graph. Following the standard convention,
152
+ edges with no label (i.e. labelled by ``None``) are treated as 3::
153
+
154
+ sage: # needs sage.libs.gap sage.rings.number_field
155
+ sage: G = Graph([(0,3,None), (1,3,15), (2,3,7), (0,1,3)])
156
+ sage: W = CoxeterGroup(G); W
157
+ Coxeter group over Universal Cyclotomic Field with Coxeter matrix:
158
+ [ 1 3 2 3]
159
+ [ 3 1 2 15]
160
+ [ 2 2 1 7]
161
+ [ 3 15 7 1]
162
+ sage: G2 = W.coxeter_diagram()
163
+ sage: CoxeterGroup(G2) is W
164
+ True
165
+
166
+ Because there currently is no class for `\ZZ \cup \{ \infty \}`, labels
167
+ of `\infty` are given by `-1` in the Coxeter matrix::
168
+
169
+ sage: # needs sage.libs.gap sage.rings.number_field
170
+ sage: G = Graph([(0,1,None), (1,2,4), (0,2,oo)])
171
+ sage: W = CoxeterGroup(G)
172
+ sage: W.coxeter_matrix()
173
+ [ 1 3 -1]
174
+ [ 3 1 4]
175
+ [-1 4 1]
176
+
177
+ We can also create Coxeter groups from Cartan types using the
178
+ ``implementation`` keyword::
179
+
180
+ sage: W = CoxeterGroup(['D',5], implementation='reflection'); W
181
+ Finite Coxeter group over Integer Ring with Coxeter matrix:
182
+ [1 3 2 2 2]
183
+ [3 1 3 2 2]
184
+ [2 3 1 3 3]
185
+ [2 2 3 1 2]
186
+ [2 2 3 2 1]
187
+ sage: W = CoxeterGroup(['H',3], implementation='reflection'); W # needs sage.libs.gap sage.rings.number_field
188
+ Finite Coxeter group over
189
+ Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790?
190
+ with Coxeter matrix:
191
+ [1 3 2]
192
+ [3 1 5]
193
+ [2 5 1]
194
+ """
195
+ @staticmethod
196
+ def __classcall_private__(cls, data, base_ring=None, index_set=None):
197
+ """
198
+ Normalize arguments to ensure a unique representation.
199
+
200
+ EXAMPLES::
201
+
202
+ sage: W1 = CoxeterGroup(['A',2], implementation='reflection', base_ring=ZZ)
203
+ sage: W2 = CoxeterGroup([[1,3],[3,1]], index_set=(1,2))
204
+ sage: W1 is W2
205
+ True
206
+ sage: G1 = Graph([(1,2)])
207
+ sage: W3 = CoxeterGroup(G1)
208
+ sage: W1 is W3
209
+ True
210
+ sage: G2 = Graph([(1,2,3)])
211
+ sage: W4 = CoxeterGroup(G2)
212
+ sage: W1 is W4
213
+ True
214
+ """
215
+ data = CoxeterMatrix(data, index_set=index_set)
216
+
217
+ if base_ring is None:
218
+ if data.is_simply_laced():
219
+ base_ring = ZZ
220
+ elif data.is_finite():
221
+ from sage.rings.number_field.number_field import QuadraticField
222
+ letter = data.coxeter_type().cartan_type().type()
223
+ if letter in ['B', 'C', 'F']:
224
+ base_ring = QuadraticField(2)
225
+ elif letter == 'G':
226
+ base_ring = QuadraticField(3)
227
+ elif letter == 'H':
228
+ base_ring = QuadraticField(5)
229
+ else:
230
+ from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
231
+ base_ring = UniversalCyclotomicField()
232
+ else:
233
+ from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
234
+ base_ring = UniversalCyclotomicField()
235
+ return super().__classcall__(cls, data, base_ring, data.index_set())
236
+
237
+ def __init__(self, coxeter_matrix, base_ring, index_set):
238
+ """
239
+ Initialize ``self``.
240
+
241
+ EXAMPLES::
242
+
243
+ sage: W = CoxeterGroup([[1,3,2],[3,1,3],[2,3,1]])
244
+ sage: TestSuite(W).run() # long time
245
+
246
+ sage: # long time, needs sage.rings.number_field sage.symbolic
247
+ sage: W = CoxeterGroup([[1,3,2],[3,1,4],[2,4,1]], base_ring=QQbar)
248
+ sage: TestSuite(W).run()
249
+ sage: W = CoxeterGroup([[1,3,2],[3,1,6],[2,6,1]])
250
+ sage: TestSuite(W).run(max_runs=30)
251
+ sage: W = CoxeterGroup([[1,3,2],[3,1,-1],[2,-1,1]])
252
+ sage: TestSuite(W).run(max_runs=30)
253
+
254
+ We check that :issue:`16630` is fixed::
255
+
256
+ sage: CoxeterGroup(['D',4], base_ring=QQ).category()
257
+ Category of finite irreducible Coxeter groups
258
+
259
+ sage: # needs sage.rings.number_field sage.symbolic
260
+ sage: CoxeterGroup(['H',4], base_ring=QQbar).category()
261
+ Category of finite irreducible Coxeter groups
262
+ sage: F = CoxeterGroups().Finite()
263
+ sage: all(CoxeterGroup([letter,i]) in F
264
+ ....: for i in range(2,5) for letter in ['A','B','D'])
265
+ True
266
+ sage: all(CoxeterGroup(['E',i]) in F for i in range(6,9))
267
+ True
268
+ sage: CoxeterGroup(['F',4]).category()
269
+ Category of finite irreducible Coxeter groups
270
+ sage: CoxeterGroup(['G',2]).category()
271
+ Category of finite irreducible Coxeter groups
272
+ sage: all(CoxeterGroup(['H',i]) in F for i in range(3,5))
273
+ True
274
+ sage: all(CoxeterGroup(['I',i]) in F for i in range(2,5))
275
+ True
276
+ """
277
+ self._matrix = coxeter_matrix
278
+ n = coxeter_matrix.rank()
279
+ # Compute the matrix with entries `2 \cos( \pi / m_{ij} )`.
280
+ MS = MatrixSpace(base_ring, n, sparse=True)
281
+ one = MS.one()
282
+ # FIXME: Hack because there is no ZZ \cup \{ \infty \}: -1 represents \infty
283
+ if isinstance(base_ring, sage.rings.abc.UniversalCyclotomicField):
284
+ E = base_ring.gen
285
+
286
+ def val(x):
287
+ if x == -1:
288
+ return 2
289
+ else:
290
+ return E(2 * x) + ~E(2 * x)
291
+ elif isinstance(base_ring, sage.rings.abc.NumberField_quadratic):
292
+ from sage.rings.universal_cyclotomic_field import UniversalCyclotomicField
293
+
294
+ E = UniversalCyclotomicField().gen
295
+
296
+ def val(x):
297
+ if x == -1:
298
+ return 2
299
+ else:
300
+ return base_ring((E(2 * x) + ~E(2 * x)).to_cyclotomic_field())
301
+ else:
302
+ def val(x):
303
+ if x == -1:
304
+ return 2
305
+ elif x == 1:
306
+ return -2
307
+ elif x == 2:
308
+ return 0
309
+ elif x == 3:
310
+ return 1
311
+ else:
312
+ from sage.functions.trig import cos
313
+ from sage.symbolic.constants import pi
314
+ return base_ring(2 * cos(pi / x))
315
+ gens = [one + MS([SparseEntry(i, j, val(coxeter_matrix[index_set[i], index_set[j]]))
316
+ for j in range(n)])
317
+ for i in range(n)]
318
+ # Make the generators dense matrices for consistency and speed
319
+ gens = [g.dense_matrix() for g in gens]
320
+ category = CoxeterGroups()
321
+ # Now we shall see if the group is finite, and, if so, refine
322
+ # the category to ``category.Finite()``. Otherwise the group is
323
+ # infinite and we refine the category to ``category.Infinite()``.
324
+ if self._matrix.is_finite():
325
+ category = category.Finite()
326
+ else:
327
+ category = category.Infinite()
328
+ if all(self._matrix._matrix[i, j] == 2
329
+ for i in range(n) for j in range(i)):
330
+ category = category.Commutative()
331
+ if self._matrix.is_irreducible():
332
+ category = category.Irreducible()
333
+ self._index_set_inverse = {i: ii
334
+ for ii, i in enumerate(self._matrix.index_set())}
335
+ FinitelyGeneratedMatrixGroup_generic.__init__(self, ZZ(n), base_ring,
336
+ gens, category=category)
337
+
338
+ def _repr_(self):
339
+ """
340
+ Return a string representation of ``self``.
341
+
342
+ EXAMPLES::
343
+
344
+ sage: CoxeterGroup([[1,3,2],[3,1,4],[2,4,1]]) # needs sage.libs.gap sage.rings.number_field
345
+ Finite Coxeter group over Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? with Coxeter matrix:
346
+ [1 3 2]
347
+ [3 1 4]
348
+ [2 4 1]
349
+ """
350
+ rep = "Finite " if self.is_finite() else ""
351
+ rep += "Coxeter group over {} with Coxeter matrix:\n{}".format(self.base_ring(), self._matrix)
352
+ return rep
353
+
354
+ def _coerce_map_from_(self, P):
355
+ """
356
+ Return ``True`` if ``P`` is a Coxeter group of the same
357
+ Coxeter type and ``False`` otherwise.
358
+
359
+ EXAMPLES::
360
+
361
+ sage: # needs sage.combinat
362
+ sage: W = CoxeterGroup(["A",4])
363
+ sage: W2 = WeylGroup(["A",4])
364
+ sage: W._coerce_map_from_(W2)
365
+ True
366
+ sage: W3 = WeylGroup(["A",4], implementation='permutation')
367
+ sage: W._coerce_map_from_(W3)
368
+ True
369
+ sage: W4 = WeylGroup(["A",3])
370
+ sage: W.has_coerce_map_from(W4)
371
+ False
372
+ """
373
+ if P in CoxeterGroups() and P.coxeter_type() is self.coxeter_type():
374
+ return True
375
+ return super()._coerce_map_from_(P)
376
+
377
+ def coxeter_matrix(self):
378
+ """
379
+ Return the Coxeter matrix of ``self``.
380
+
381
+ EXAMPLES::
382
+
383
+ sage: W = CoxeterGroup([[1,3],[3,1]])
384
+ sage: W.coxeter_matrix()
385
+ [1 3]
386
+ [3 1]
387
+ sage: W = CoxeterGroup(['H',3]) # needs sage.libs.gap sage.rings.number_field
388
+ sage: W.coxeter_matrix() # needs sage.libs.gap sage.rings.number_field
389
+ [1 3 2]
390
+ [3 1 5]
391
+ [2 5 1]
392
+ """
393
+ return self._matrix
394
+
395
+ def bilinear_form(self):
396
+ r"""
397
+ Return the bilinear form associated to ``self``.
398
+
399
+ Given a Coxeter group `G` with Coxeter matrix `M = (m_{ij})_{ij}`,
400
+ the associated bilinear form `A = (a_{ij})_{ij}` is given by
401
+
402
+ .. MATH::
403
+
404
+ a_{ij} = -\cos\left( \frac{\pi}{m_{ij}} \right).
405
+
406
+ If `A` is positive definite, then `G` is of finite type (and so
407
+ the associated Coxeter group is a finite group). If `A` is
408
+ positive semidefinite, then `G` is affine type.
409
+
410
+ EXAMPLES::
411
+
412
+ sage: W = CoxeterGroup(['D',4])
413
+ sage: W.bilinear_form() # needs sage.symbolic
414
+ [ 1 -1/2 0 0]
415
+ [-1/2 1 -1/2 -1/2]
416
+ [ 0 -1/2 1 0]
417
+ [ 0 -1/2 0 1]
418
+ """
419
+ return self._matrix.bilinear_form(self.base_ring().fraction_field())
420
+
421
+ def is_finite(self):
422
+ """
423
+ Return ``True`` if this group is finite.
424
+
425
+ EXAMPLES::
426
+
427
+ sage: # needs sage.libs.gap sage.rings.number_field
428
+ sage: [l for l in range(2, 9) if
429
+ ....: CoxeterGroup([[1,3,2],[3,1,l],[2,l,1]]).is_finite()]
430
+ [2, 3, 4, 5]
431
+ sage: [l for l in range(2, 9) if
432
+ ....: CoxeterGroup([[1,3,2,2],[3,1,l,2],[2,l,1,3],[2,2,3,1]]).is_finite()]
433
+ [2, 3, 4]
434
+ sage: [l for l in range(2, 9) if
435
+ ....: CoxeterGroup([[1,3,2,2,2], [3,1,3,3,2], [2,3,1,2,2],
436
+ ....: [2,3,2,1,l], [2,2,2,l,1]]).is_finite()]
437
+ [2, 3]
438
+ sage: [l for l in range(2, 9) if
439
+ ....: CoxeterGroup([[1,3,2,2,2], [3,1,2,3,3], [2,2,1,l,2],
440
+ ....: [2,3,l,1,2], [2,3,2,2,1]]).is_finite()]
441
+ [2, 3]
442
+ sage: [l for l in range(2, 9) if
443
+ ....: CoxeterGroup([[1,3,2,2,2,2], [3,1,l,2,2,2], [2,l,1,3,l,2],
444
+ ....: [2,2,3,1,2,2], [2,2,l,2,1,3], [2,2,2,2,3,1]]).is_finite()]
445
+ [2, 3]
446
+ """
447
+ # Finite Coxeter groups are marked as finite in
448
+ # their ``__init__`` method, so we can just check
449
+ # the category of ``self``.
450
+ return "Finite" in self.category().axioms()
451
+
452
+ def is_commutative(self):
453
+ """
454
+ Return whether ``self`` is commutative.
455
+
456
+ EXAMPLES::
457
+
458
+ sage: CoxeterGroup(['A', 2]).is_commutative()
459
+ False
460
+ sage: W = CoxeterGroup(['I',2])
461
+ sage: W.is_commutative()
462
+ True
463
+
464
+ TESTS::
465
+
466
+ sage: CoxeterGroup([['A', 2], ['A', 1]]).is_commutative()
467
+ False
468
+ sage: CoxeterGroup([['A', 1]] * 3).is_commutative()
469
+ True
470
+ """
471
+ return "Commutative" in self.category().axioms()
472
+
473
+ @cached_method
474
+ def order(self):
475
+ """
476
+ Return the order of ``self``.
477
+
478
+ If the Coxeter group is finite, this uses an iterator.
479
+
480
+ EXAMPLES::
481
+
482
+ sage: # needs sage.rings.number_field
483
+ sage: W = CoxeterGroup([[1,3],[3,1]])
484
+ sage: W.order()
485
+ 6
486
+ sage: W = CoxeterGroup([[1,-1],[-1,1]]) # needs sage.libs.gap
487
+ sage: W.order() # needs sage.libs.gap
488
+ +Infinity
489
+ """
490
+ if self.is_finite():
491
+ return len(self)
492
+ return infinity
493
+
494
+ def canonical_representation(self):
495
+ r"""
496
+ Return the canonical faithful representation of ``self``, which
497
+ is ``self``.
498
+
499
+ EXAMPLES::
500
+
501
+ sage: W = CoxeterGroup([[1,3],[3,1]])
502
+ sage: W.canonical_representation() is W
503
+ True
504
+ """
505
+ return self
506
+
507
+ def simple_reflection(self, i):
508
+ """
509
+ Return the simple reflection `s_i`.
510
+
511
+ INPUT:
512
+
513
+ - ``i`` -- an element from the index set
514
+
515
+ EXAMPLES::
516
+
517
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
518
+ sage: W.simple_reflection(1)
519
+ [-1 1 0]
520
+ [ 0 1 0]
521
+ [ 0 0 1]
522
+ sage: W.simple_reflection(2)
523
+ [ 1 0 0]
524
+ [ 1 -1 1]
525
+ [ 0 0 1]
526
+ sage: W.simple_reflection(3)
527
+ [ 1 0 0]
528
+ [ 0 1 0]
529
+ [ 0 1 -1]
530
+ """
531
+ return self.gen(self._index_set_inverse[i])
532
+
533
+ @cached_method
534
+ def _positive_roots_reflections(self):
535
+ """
536
+ Return a family whose keys are the positive roots
537
+ and values are the reflections.
538
+
539
+ EXAMPLES::
540
+
541
+ sage: W = CoxeterGroup(['A', 2])
542
+ sage: F = W._positive_roots_reflections()
543
+ sage: F.keys()
544
+ [(1, 0), (1, 1), (0, 1)]
545
+ sage: list(F)
546
+ [
547
+ [-1 1] [ 0 -1] [ 1 0]
548
+ [ 0 1], [-1 0], [ 1 -1]
549
+ ]
550
+
551
+ TESTS::
552
+
553
+ sage: W = CoxeterGroup(CoxeterType(['A', 2]).relabel({1: 'r', 2: 's'}))
554
+ sage: F = W._positive_roots_reflections()
555
+ sage: F.keys()
556
+ [(1, 0), (1, 1), (0, 1)]
557
+ sage: list(F)
558
+ [
559
+ [-1 1] [ 0 -1] [ 1 0]
560
+ [ 0 1], [-1 0], [ 1 -1]
561
+ ]
562
+ """
563
+ if not self.is_finite():
564
+ raise NotImplementedError('not available for infinite groups')
565
+
566
+ word = self.long_element(as_word=True)
567
+ N = len(word)
568
+
569
+ from sage.modules.free_module import FreeModule
570
+ simple_roots = FreeModule(self.base_ring(), self.ngens()).gens()
571
+
572
+ refls = self.simple_reflections()
573
+ refls_index = {refl_i[1]: refl_i[0] for refl_i in enumerate(refls.keys())}
574
+ resu = []
575
+ d = {}
576
+ for i in range(1, N + 1):
577
+ segment = word[:i]
578
+ last = segment.pop()
579
+ ref = refls[last]
580
+ rt = simple_roots[refls_index[last]]
581
+ while segment:
582
+ last = segment.pop()
583
+ cr = refls[last]
584
+ ref = cr * ref * cr
585
+ rt = refls[last] * rt
586
+ rt.set_immutable()
587
+ resu += [rt]
588
+ d[rt] = ref
589
+ return Family(resu, lambda rt: d[rt])
590
+
591
+ def positive_roots(self):
592
+ """
593
+ Return the positive roots.
594
+
595
+ These are roots in the Coxeter sense, that all have the
596
+ same norm. They are given by their coefficients in the
597
+ base of simple roots, also taken to have all the same
598
+ norm.
599
+
600
+ .. SEEALSO::
601
+
602
+ :meth:`reflections`
603
+
604
+ EXAMPLES::
605
+
606
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
607
+ sage: W.positive_roots()
608
+ ((1, 0, 0), (1, 1, 0), (0, 1, 0), (1, 1, 1), (0, 1, 1), (0, 0, 1))
609
+
610
+ sage: # needs sage.libs.gap sage.rings.number_field
611
+ sage: W = CoxeterGroup(['I',5], implementation='reflection')
612
+ sage: W.positive_roots()
613
+ ((1, 0),
614
+ (-E(5)^2 - E(5)^3, 1),
615
+ (-E(5)^2 - E(5)^3, -E(5)^2 - E(5)^3),
616
+ (1, -E(5)^2 - E(5)^3),
617
+ (0, 1))
618
+ """
619
+ return tuple(self._positive_roots_reflections().keys())
620
+
621
+ def reflections(self):
622
+ """
623
+ Return the set of reflections.
624
+
625
+ The order is the one given by :meth:`positive_roots`.
626
+
627
+ EXAMPLES::
628
+
629
+ sage: W = CoxeterGroup(['A',2], implementation='reflection')
630
+ sage: list(W.reflections())
631
+ [
632
+ [-1 1] [ 0 -1] [ 1 0]
633
+ [ 0 1], [-1 0], [ 1 -1]
634
+ ]
635
+ """
636
+ return self._positive_roots_reflections()
637
+
638
+ @cached_method
639
+ def roots(self):
640
+ """
641
+ Return the roots.
642
+
643
+ These are roots in the Coxeter sense, that all have the
644
+ same norm. They are given by their coefficients in the
645
+ base of simple roots, also taken to have all the same
646
+ norm.
647
+
648
+ The positive roots are listed first, then the negative roots
649
+ in the same order. The order is the one given by :meth:`roots`.
650
+
651
+ EXAMPLES::
652
+
653
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
654
+ sage: W.roots()
655
+ ((1, 0, 0),
656
+ (1, 1, 0),
657
+ (0, 1, 0),
658
+ (1, 1, 1),
659
+ (0, 1, 1),
660
+ (0, 0, 1),
661
+ (-1, 0, 0),
662
+ (-1, -1, 0),
663
+ (0, -1, 0),
664
+ (-1, -1, -1),
665
+ (0, -1, -1),
666
+ (0, 0, -1))
667
+
668
+ sage: # needs sage.libs.gap sage.rings.number_field
669
+ sage: W = CoxeterGroup(['I',5], implementation='reflection')
670
+ sage: len(W.roots())
671
+ 10
672
+ """
673
+ if not self.is_finite():
674
+ raise NotImplementedError('not available for infinite groups')
675
+ positive = self.positive_roots()
676
+ return positive + tuple([-v for v in positive])
677
+
678
+ def simple_root_index(self, i):
679
+ r"""
680
+ Return the index of the simple root `\alpha_i`.
681
+
682
+ This is the position of `\alpha_i` in the list of all roots
683
+ as given be :meth:`roots`.
684
+
685
+ EXAMPLES::
686
+
687
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
688
+ sage: [W.simple_root_index(i) for i in W.index_set()]
689
+ [0, 2, 5]
690
+ """
691
+ roots = self.roots()
692
+ rt = roots[0].parent().gen(self._index_set_inverse[i])
693
+ return roots.index(rt)
694
+
695
+ @cached_method
696
+ def fundamental_weights(self):
697
+ """
698
+ Return the fundamental weights for ``self``.
699
+
700
+ This is the dual basis to the basis of simple roots.
701
+
702
+ The base ring must be a field.
703
+
704
+ .. SEEALSO:: :meth:`fundamental_weight`
705
+
706
+ EXAMPLES::
707
+
708
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
709
+ sage: W.fundamental_weights() # needs sage.symbolic
710
+ Finite family {1: (3/2, 1, 1/2), 2: (1, 2, 1), 3: (1/2, 1, 3/2)}
711
+ """
712
+ simple_weights = self.bilinear_form().inverse()
713
+ I = self.index_set()
714
+ D = {i: simple_weights[k] for k, i in enumerate(I)}
715
+ return Family(I, D.__getitem__)
716
+
717
+ def fundamental_weight(self, i):
718
+ r"""
719
+ Return the fundamental weight with index ``i``.
720
+
721
+ .. SEEALSO:: :meth:`fundamental_weights`
722
+
723
+ EXAMPLES::
724
+
725
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
726
+ sage: W.fundamental_weight(1) # needs sage.symbolic
727
+ (3/2, 1, 1/2)
728
+ """
729
+ return self.fundamental_weights()[i]
730
+
731
+ class Element(MatrixGroupElement_generic):
732
+ """
733
+ A Coxeter group element.
734
+ """
735
+ def first_descent(self, side='right', index_set=None, positive=False):
736
+ """
737
+ Return the first left (resp. right) descent of ``self``, as
738
+ an element of ``index_set``, or ``None`` if there is none.
739
+
740
+ See :meth:`descents` for a description of the options.
741
+
742
+ EXAMPLES::
743
+
744
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
745
+ sage: a,b,c = W.gens()
746
+ sage: elt = b*a*c
747
+ sage: elt.first_descent()
748
+ 1
749
+ sage: elt.first_descent(side='left')
750
+ 2
751
+ """
752
+ M = self.matrix()
753
+ if side != 'right':
754
+ M = ~M
755
+ I = self.parent().index_set()
756
+ n = len(I)
757
+ zero = M.base_ring().zero()
758
+ if index_set is None:
759
+ index_set = range(n)
760
+ else:
761
+ I_inv = self.parent()._index_set_inverse
762
+ index_set = [I_inv[i] for i in index_set]
763
+ if positive:
764
+ for i in index_set:
765
+ if not _matrix_test_right_descent(M, i, n, zero):
766
+ return I[i]
767
+ else:
768
+ for i in index_set:
769
+ if _matrix_test_right_descent(M, i, n, zero):
770
+ return I[i]
771
+ return None
772
+
773
+ def descents(self, side='right', index_set=None, positive=False):
774
+ """
775
+ Return the descents of ``self``, as a list of elements of the
776
+ ``index_set``.
777
+
778
+ INPUT:
779
+
780
+ - ``index_set`` -- (default: all of them) a subset (as a list
781
+ or iterable) of the nodes of the Dynkin diagram
782
+ - ``side`` -- (default: ``'right'``) ``'left'`` or ``'right'``
783
+ - ``positive`` -- boolean (default: ``False``)
784
+
785
+ EXAMPLES::
786
+
787
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
788
+ sage: a,b,c = W.gens()
789
+ sage: elt = b*a*c
790
+ sage: elt.descents()
791
+ [1, 3]
792
+ sage: elt.descents(positive=True)
793
+ [2]
794
+ sage: elt.descents(index_set=[1,2])
795
+ [1]
796
+ sage: elt.descents(side='left')
797
+ [2]
798
+ """
799
+ M = self.matrix()
800
+ if side != 'right':
801
+ M = ~M
802
+ I = self.parent().index_set()
803
+ n = len(I)
804
+ zero = M.base_ring().zero()
805
+ if index_set is None:
806
+ index_set = range(n)
807
+ else:
808
+ I_inv = self.parent()._index_set_inverse
809
+ index_set = [I_inv[i] for i in index_set]
810
+ if positive:
811
+ return [I[i] for i in index_set if not _matrix_test_right_descent(M, i, n, zero)]
812
+ return [I[i] for i in index_set if _matrix_test_right_descent(M, i, n, zero)]
813
+
814
+ def has_right_descent(self, i) -> bool:
815
+ r"""
816
+ Return whether ``i`` is a right descent of ``self``.
817
+
818
+ A Coxeter system `(W, S)` has a root system defined as
819
+ `\{ w(\alpha_s) \}_{w \in W}` and we define the positive
820
+ (resp. negative) roots `\alpha = \sum_{s \in S} c_s \alpha_s`
821
+ by all `c_s \geq 0` (resp. `c_s \leq 0`). In particular, we note
822
+ that if `\ell(w s) > \ell(w)` then `w(\alpha_s) > 0` and if
823
+ `\ell(ws) < \ell(w)` then `w(\alpha_s) < 0`.
824
+ Thus `i \in I` is a right descent if `w(\alpha_{s_i}) < 0`
825
+ or equivalently if the matrix representing `w` has all entries
826
+ of the `i`-th column being nonpositive.
827
+
828
+ INPUT:
829
+
830
+ - ``i`` -- an element in the index set
831
+
832
+ EXAMPLES::
833
+
834
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
835
+ sage: a,b,c = W.gens()
836
+ sage: elt = b*a*c
837
+ sage: [elt.has_right_descent(i) for i in [1, 2, 3]]
838
+ [True, False, True]
839
+ """
840
+ i = self.parent()._index_set_inverse[i]
841
+ n = len(self.parent().index_set())
842
+ M = self.matrix()
843
+ zero = M.base_ring().zero()
844
+ return _matrix_test_right_descent(M, i, n, zero)
845
+
846
+ def canonical_matrix(self):
847
+ r"""
848
+ Return the matrix of ``self`` in the canonical faithful
849
+ representation, which is ``self`` as a matrix.
850
+
851
+ EXAMPLES::
852
+
853
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
854
+ sage: a,b,c = W.gens()
855
+ sage: elt = a*b*c
856
+ sage: elt.canonical_matrix()
857
+ [ 0 0 -1]
858
+ [ 1 0 -1]
859
+ [ 0 1 -1]
860
+ """
861
+ return self.matrix()
862
+
863
+ @cached_method
864
+ def action_on_root_indices(self, i, side='left'):
865
+ """
866
+ Return the action on the set of roots.
867
+
868
+ The roots are ordered as in the output of the method :meth:`roots`.
869
+
870
+ EXAMPLES::
871
+
872
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
873
+ sage: w = W.w0
874
+ sage: w.action_on_root_indices(0)
875
+ 11
876
+ """
877
+ if side == "left":
878
+ w = self
879
+ elif side == "right":
880
+ w = ~self
881
+ else:
882
+ raise ValueError('side must be "left" or "right"')
883
+ roots = self.parent().roots()
884
+ rt = w * roots[i]
885
+ return roots.index(rt)
886
+
887
+
888
+ def _matrix_test_right_descent(M, i, n, zero):
889
+ """
890
+ Test if the matrix ``M`` has a right ``i``-descent.
891
+
892
+ INPUT:
893
+
894
+ - ``M`` -- the matrix
895
+ - ``i`` -- the index
896
+ - ``n`` -- the size of the matrix
897
+ - ``zero`` -- the zero element in the base ring of ``M``
898
+
899
+ .. NOTE::
900
+
901
+ This is a helper function for :class:`CoxeterMatrixGroup.Element`
902
+ and optimized for speed. Specifically, it is called often and
903
+ there is no need to recompute ``n`` (and ``zero``) each time this
904
+ function is called.
905
+
906
+ .. TODO::
907
+
908
+ Cythonize this function.
909
+
910
+ EXAMPLES::
911
+
912
+ sage: from sage.groups.matrix_gps.coxeter_group import _matrix_test_right_descent
913
+ sage: W = CoxeterGroup(['A',3], implementation='reflection')
914
+ sage: a,b,c = W.gens()
915
+ sage: elt = b*a*c
916
+ sage: zero = W.base_ring().zero()
917
+ sage: [_matrix_test_right_descent(elt.matrix(), i, 3, zero)
918
+ ....: for i in range(3)]
919
+ [True, False, True]
920
+ """
921
+ for j in range(n):
922
+ c = M[j, i]
923
+ if c < zero:
924
+ return True
925
+ elif c > zero:
926
+ return False
927
+ raise AssertionError('a zero column, so there must be a bug')