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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -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-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1029 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Finite-Dimensional Algebras
4
+ """
5
+ # ***************************************************************************
6
+ # Copyright (C) 2011 Johan Bosman <johan.g.bosman@gmail.com>
7
+ # Copyright (C) 2011, 2013 Peter Bruin <peter.bruin@math.uzh.ch>
8
+ # Copyright (C) 2011 Michiel Kosters <kosters@gmail.com>
9
+ #
10
+ # Distributed under the terms of the GNU General Public License (GPL)
11
+ # as published by the Free Software Foundation; either version 2 of
12
+ # the License, or (at your option) any later version.
13
+ # https://www.gnu.org/licenses/
14
+ # ***************************************************************************
15
+
16
+ from .finite_dimensional_algebra_element import FiniteDimensionalAlgebraElement
17
+ from .finite_dimensional_algebra_ideal import FiniteDimensionalAlgebraIdeal
18
+
19
+ from sage.rings.integer_ring import ZZ
20
+
21
+ from sage.categories.magmatic_algebras import MagmaticAlgebras
22
+ from sage.categories.algebras import Algebras
23
+ from sage.matrix.constructor import matrix
24
+ from sage.structure.element import Matrix
25
+ from sage.structure.category_object import normalize_names
26
+ from sage.structure.parent import Parent
27
+ from sage.structure.unique_representation import UniqueRepresentation
28
+
29
+ from sage.misc.cachefunc import cached_method
30
+ from functools import reduce
31
+
32
+
33
+ class FiniteDimensionalAlgebra(UniqueRepresentation, Parent):
34
+ r"""
35
+ Create a finite-dimensional `k`-algebra from a multiplication table.
36
+
37
+ This is a magmatic `k`-algebra, i.e., not necessarily
38
+ associative or unital.
39
+
40
+ INPUT:
41
+
42
+ - ``k`` -- a field
43
+
44
+ - ``table`` -- list of matrices
45
+
46
+ - ``names`` -- string (default: ``'e'``); names for the basis
47
+ elements
48
+
49
+ - ``assume_associative`` -- boolean (default: ``False``); if
50
+ ``True``, then the category is set to ``category.Associative()``
51
+ and methods requiring associativity assume this
52
+
53
+ - ``assume_unital`` -- boolean (default: ``False``); if
54
+ ``True``, then the category is set to ``category.Unital()``
55
+ and methods requiring unitality assume this
56
+
57
+ - ``category`` -- (default:
58
+ ``MagmaticAlgebras(k).FiniteDimensional().WithBasis()``)
59
+ the category to which this algebra belongs
60
+
61
+ The list ``table`` must have the following form: there exists a
62
+ finite-dimensional `k`-algebra of degree `n` with basis
63
+ `(e_1, \ldots, e_n)` such that the `i`-th element of ``table`` is the
64
+ matrix of right multiplication by `e_i` with respect to the basis
65
+ `(e_1, \ldots, e_n)`.
66
+
67
+ EXAMPLES::
68
+
69
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
70
+ ....: Matrix([[0, 1], [0, 0]])]); A
71
+ Finite-dimensional algebra of degree 2 over Finite Field of size 3
72
+ sage: TestSuite(A).run()
73
+
74
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
75
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
76
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])])
77
+ sage: B
78
+ Finite-dimensional algebra of degree 3 over Rational Field
79
+ sage: B.one()
80
+ e0 + e2
81
+ sage: B.is_associative()
82
+ True
83
+
84
+ A more complicated example (the descent algebra of `S_3` in
85
+ a slightly rescaled I-basis, see :class:`DescentAlgebra`)::
86
+
87
+ sage: Ma = Matrix([[6,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]])
88
+ sage: Mb = Matrix([[0,0,0,0], [0,1,0,0], [0,1,0,0], [0,0,0,0]])
89
+ sage: Mc = Matrix([[0,0,0,0], [0,0,1,0], [0,0,1,0], [0,0,0,0]])
90
+ sage: Md = Matrix([[0,0,0,0], [0,1,-1,0], [0,-1,1,0], [0,0,0,2]])
91
+ sage: C = FiniteDimensionalAlgebra(QQ, [Ma, Mb, Mc, Md])
92
+ sage: C.one()
93
+ 1/6*e0 + 1/2*e1 + 1/2*e2 + 1/2*e3
94
+ sage: C.is_associative()
95
+ True
96
+ sage: C.is_commutative()
97
+ False
98
+
99
+ If we set both ``is_associative`` and ``is_unital`` to
100
+ ``True``, then this is an associative unital algebra and
101
+ belongs to the category of
102
+ :class:`sage.categories.finite_dimensional_algebras_with_basis.FiniteDimensionalAlgebrasWithBasis`::
103
+
104
+ sage: C = FiniteDimensionalAlgebra(QQ, [Ma, Mb, Mc, Md],
105
+ ....: assume_associative=True,
106
+ ....: assume_unital=True)
107
+ sage: C.radical_basis()
108
+ (e1 - e2,)
109
+ sage: C.radical()
110
+ Radical of Finite-dimensional algebra of degree 4 over Rational Field
111
+ sage: C.center_basis()
112
+ (e0, e1 + e2 + e3)
113
+ sage: C.center()
114
+ Center of Finite-dimensional algebra of degree 4 over Rational Field
115
+ sage: C.center().is_commutative()
116
+ True
117
+ sage: e = C.basis()
118
+ sage: C.annihilator_basis([e[1]])
119
+ (e0, e1 - e2, e3)
120
+ sage: C.annihilator_basis([e[1]], side='left')
121
+ (e0, e1 - e2 - e3)
122
+
123
+ TESTS::
124
+
125
+ sage: A.category()
126
+ Category of finite dimensional magmatic algebras with basis
127
+ over Finite Field of size 3
128
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
129
+ ....: Matrix([[0, 1], [0, 0]])],
130
+ ....: assume_associative=True)
131
+ sage: A.category()
132
+ Category of finite dimensional associative algebras with basis
133
+ over Finite Field of size 3
134
+ """
135
+ @staticmethod
136
+ def __classcall_private__(cls, k, table, names='e', assume_associative=False,
137
+ assume_unital=False, category=None):
138
+ """
139
+ Normalize input.
140
+
141
+ TESTS::
142
+
143
+ sage: table = [Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 0]])]
144
+ sage: A1 = FiniteDimensionalAlgebra(GF(3), table)
145
+ sage: A2 = FiniteDimensionalAlgebra(GF(3), table, names='e')
146
+ sage: A3 = FiniteDimensionalAlgebra(GF(3), table, names=['e0', 'e1'])
147
+ sage: A1 is A2 and A2 is A3
148
+ True
149
+
150
+ The ``assume_associative`` keyword is built into the category::
151
+
152
+ sage: from sage.categories.magmatic_algebras import MagmaticAlgebras
153
+ sage: cat = MagmaticAlgebras(GF(3)).FiniteDimensional().WithBasis()
154
+ sage: A1 = FiniteDimensionalAlgebra(GF(3), table,
155
+ ....: category=cat.Associative())
156
+ sage: A2 = FiniteDimensionalAlgebra(GF(3), table, assume_associative=True)
157
+ sage: A1 is A2
158
+ True
159
+
160
+ Likewise for the ``assume_associative`` keyword::
161
+
162
+ sage: A3 = FiniteDimensionalAlgebra(GF(3), table,
163
+ ....: category=cat.Unital())
164
+ sage: A4 = FiniteDimensionalAlgebra(GF(3), table, assume_unital=True)
165
+ sage: A3 is A4
166
+ True
167
+
168
+ With both keywords on, the
169
+ :class:`sage.categories.algebras.Algebras` category
170
+ is used::
171
+
172
+ sage: cat_a = Algebras(GF(3)).FiniteDimensional().WithBasis()
173
+ sage: A5 = FiniteDimensionalAlgebra(GF(3), table,
174
+ ....: category=cat_a)
175
+ sage: A6 = FiniteDimensionalAlgebra(GF(3), table, assume_associative=True,
176
+ ....: assume_unital=True)
177
+ sage: A5 is A6
178
+ True
179
+
180
+ Uniqueness depends on the category::
181
+
182
+ sage: cat = Algebras(GF(3)).FiniteDimensional().WithBasis()
183
+ sage: A1 = FiniteDimensionalAlgebra(GF(3), table)
184
+ sage: A2 = FiniteDimensionalAlgebra(GF(3), table, category=cat)
185
+ sage: A1 == A2
186
+ False
187
+ sage: A1 is A2
188
+ False
189
+
190
+ Checking that equality is still as expected::
191
+
192
+ sage: A = FiniteDimensionalAlgebra(GF(3), table)
193
+ sage: B = FiniteDimensionalAlgebra(GF(5), [Matrix([0])])
194
+ sage: A == A
195
+ True
196
+ sage: B == B
197
+ True
198
+ sage: A == B
199
+ False
200
+ sage: A != A
201
+ False
202
+ sage: B != B
203
+ False
204
+ sage: A != B
205
+ True
206
+ """
207
+ n = len(table)
208
+ table = [b.base_extend(k) for b in table]
209
+ for b in table:
210
+ b.set_immutable()
211
+ if not (isinstance(b, Matrix) and b.dimensions() == (n, n)):
212
+ raise ValueError("input is not a multiplication table")
213
+ table = tuple(table)
214
+
215
+ cat = MagmaticAlgebras(k).FiniteDimensional().WithBasis()
216
+ cat = cat.or_subcategory(category)
217
+ if assume_associative:
218
+ cat = cat.Associative()
219
+ if assume_unital:
220
+ # both unital and associative, so algebra in modern sense
221
+ cat = Algebras(k).FiniteDimensional().WithBasis()
222
+ cat = cat.or_subcategory(category)
223
+ elif assume_unital:
224
+ cat = cat.Unital()
225
+
226
+ names = normalize_names(n, names)
227
+
228
+ return super().__classcall__(cls, k, table,
229
+ names, category=cat)
230
+
231
+ def __init__(self, k, table, names='e', category=None):
232
+ """
233
+ TESTS::
234
+
235
+ sage: A = FiniteDimensionalAlgebra(QQ, [])
236
+ sage: A
237
+ Finite-dimensional algebra of degree 0 over Rational Field
238
+ sage: type(A)
239
+ <class 'sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra.FiniteDimensionalAlgebra_with_category'>
240
+ sage: TestSuite(A).run()
241
+
242
+ sage: B = FiniteDimensionalAlgebra(GF(7), [Matrix([1])])
243
+ sage: B
244
+ Finite-dimensional algebra of degree 1 over Finite Field of size 7
245
+ sage: TestSuite(B).run()
246
+
247
+ sage: C = FiniteDimensionalAlgebra(CC, [Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 0]])])
248
+ sage: C
249
+ Finite-dimensional algebra of degree 2 over Complex Field with 53 bits of precision
250
+ sage: TestSuite(C).run()
251
+
252
+ sage: FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]])])
253
+ Traceback (most recent call last):
254
+ ...
255
+ ValueError: input is not a multiplication table
256
+
257
+ sage: D.<a,b> = FiniteDimensionalAlgebra(RR, [Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [-1, 0]])])
258
+ sage: D.gens()
259
+ (a, b)
260
+
261
+ sage: E = FiniteDimensionalAlgebra(QQ, [Matrix([0])])
262
+ sage: E.gens()
263
+ (e,)
264
+ """
265
+ self._table = table
266
+ self._assume_associative = "Associative" in category.axioms()
267
+ # No further validity checks necessary!
268
+ Parent.__init__(self, base=k, names=names, category=category)
269
+
270
+ def _repr_(self):
271
+ """
272
+ Return a string representation of ``self``.
273
+
274
+ TESTS::
275
+
276
+ sage: FiniteDimensionalAlgebra(RR, [Matrix([1])])._repr_()
277
+ 'Finite-dimensional algebra of degree 1 over Real Field with 53 bits of precision'
278
+ """
279
+ return "Finite-dimensional algebra of degree {} over {}".format(self.degree(), self.base_ring())
280
+
281
+ def _coerce_map_from_(self, S):
282
+ """
283
+ TESTS::
284
+
285
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
286
+ ....: Matrix([[0, 1], [0, 0]])])
287
+ sage: A.has_coerce_map_from(ZZ)
288
+ True
289
+ sage: A.has_coerce_map_from(GF(3))
290
+ True
291
+ sage: A.has_coerce_map_from(GF(5))
292
+ False
293
+ sage: A.has_coerce_map_from(QQ)
294
+ False
295
+ """
296
+ return S == self or (self.base_ring().has_coerce_map_from(S) and self.is_unitary())
297
+
298
+ Element = FiniteDimensionalAlgebraElement
299
+
300
+ def _element_constructor_(self, x):
301
+ """
302
+ TESTS::
303
+
304
+ sage: A = FiniteDimensionalAlgebra(QQ, [Matrix([0])])
305
+ sage: a = A(0)
306
+ sage: a.parent()
307
+ Finite-dimensional algebra of degree 1 over Rational Field
308
+ sage: A(1)
309
+ Traceback (most recent call last):
310
+ ...
311
+ TypeError: algebra is not unitary
312
+
313
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
314
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
315
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])])
316
+ sage: B(17)
317
+ 17*e0 + 17*e2
318
+ """
319
+ return self.element_class(self, x)
320
+
321
+ # This is needed because the default implementation
322
+ # assumes that the algebra is unitary.
323
+ from_base_ring = _element_constructor_
324
+
325
+ def _Hom_(self, B, category):
326
+ """
327
+ Construct a homset of ``self`` and ``B``.
328
+
329
+ EXAMPLES::
330
+
331
+ sage: A = FiniteDimensionalAlgebra(QQ, [Matrix([1])])
332
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1, 0], [0, 1]]), Matrix([[0, 1], [0, 0]])])
333
+ sage: A._Hom_(B, A.category())
334
+ Set of Homomorphisms
335
+ from Finite-dimensional algebra of degree 1 over Rational Field
336
+ to Finite-dimensional algebra of degree 2 over Rational Field
337
+ """
338
+ cat = MagmaticAlgebras(self.base_ring()).FiniteDimensional().WithBasis()
339
+ if category.is_subcategory(cat):
340
+ from sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra_morphism import FiniteDimensionalAlgebraHomset
341
+ return FiniteDimensionalAlgebraHomset(self, B, category=category)
342
+ return super()._Hom_(B, category)
343
+
344
+ def ngens(self):
345
+ """
346
+ Return the number of generators of ``self``, i.e., the degree
347
+ of ``self`` over its base field.
348
+
349
+ EXAMPLES::
350
+
351
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
352
+ ....: Matrix([[0, 1], [0, 0]])])
353
+ sage: A.ngens()
354
+ 2
355
+ """
356
+ return len(self._table)
357
+
358
+ degree = ngens
359
+
360
+ @cached_method
361
+ def gen(self, i):
362
+ """
363
+ Return the `i`-th basis element of ``self``.
364
+
365
+ EXAMPLES::
366
+
367
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
368
+ ....: Matrix([[0, 1], [0, 0]])])
369
+ sage: A.gen(0)
370
+ e0
371
+ """
372
+ return self.element_class(self, [j == i for j in range(self.ngens())])
373
+
374
+ @cached_method
375
+ def basis(self):
376
+ """
377
+ Return a list of the basis elements of ``self``.
378
+
379
+ EXAMPLES::
380
+
381
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
382
+ ....: Matrix([[0, 1], [0, 0]])])
383
+ sage: A.basis()
384
+ Finite family {0: e0, 1: e1}
385
+ """
386
+ from sage.sets.family import Family
387
+ return Family({i: self.gen(i) for i in range(self.ngens())})
388
+
389
+ def __iter__(self):
390
+ """
391
+ Iterate over the elements of ``self``.
392
+
393
+ EXAMPLES::
394
+
395
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
396
+ ....: Matrix([[0, 1], [0, 0]])])
397
+ sage: list(A)
398
+ [0, e0, 2*e0, e1, e0 + e1, 2*e0 + e1, 2*e1, e0 + 2*e1, 2*e0 + 2*e1]
399
+
400
+ This is used in the :class:`Testsuite`'s when ``self`` is
401
+ finite.
402
+ """
403
+ if not self.is_finite():
404
+ raise NotImplementedError("object does not support iteration")
405
+ V = self.zero().vector().parent()
406
+ for v in V:
407
+ yield self(v)
408
+
409
+ def _ideal_class_(self, n=0):
410
+ """
411
+ Return the ideal class of ``self`` (that is, the class that
412
+ all ideals of ``self`` inherit from).
413
+
414
+ EXAMPLES::
415
+
416
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
417
+ ....: Matrix([[0, 1], [0, 0]])])
418
+ sage: A._ideal_class_()
419
+ <class 'sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra_ideal.FiniteDimensionalAlgebraIdeal'>
420
+ """
421
+ return FiniteDimensionalAlgebraIdeal
422
+
423
+ def table(self):
424
+ """
425
+ Return the multiplication table of ``self``, as a list of
426
+ matrices for right multiplication by the basis elements.
427
+
428
+ EXAMPLES::
429
+
430
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
431
+ ....: Matrix([[0, 1], [0, 0]])])
432
+ sage: A.table()
433
+ (
434
+ [1 0] [0 1]
435
+ [0 1], [0 0]
436
+ )
437
+ """
438
+ return self._table
439
+
440
+ @cached_method
441
+ def left_table(self):
442
+ """
443
+ Return the list of matrices for left multiplication by the
444
+ basis elements.
445
+
446
+ EXAMPLES::
447
+
448
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0], [0,1]]),
449
+ ....: Matrix([[0,1], [-1,0]])])
450
+ sage: T = B.left_table(); T
451
+ (
452
+ [1 0] [ 0 1]
453
+ [0 1], [-1 0]
454
+ )
455
+
456
+ We check immutability::
457
+
458
+ sage: T[0] = "vandalized by h4xx0r"
459
+ Traceback (most recent call last):
460
+ ...
461
+ TypeError: 'tuple' object does not support item assignment
462
+ sage: T[1][0] = [13, 37]
463
+ Traceback (most recent call last):
464
+ ...
465
+ ValueError: matrix is immutable; please change a copy instead
466
+ (i.e., use copy(M) to change a copy of M).
467
+ """
468
+ B = self.table()
469
+ n = self.degree()
470
+ table = [matrix([B[j][i] for j in range(n)]) for i in range(n)]
471
+ for b in table:
472
+ b.set_immutable()
473
+ return tuple(table)
474
+
475
+ def base_extend(self, F):
476
+ """
477
+ Return ``self`` base changed to the field ``F``.
478
+
479
+ EXAMPLES::
480
+
481
+ sage: C = FiniteDimensionalAlgebra(GF(2), [Matrix([1])])
482
+ sage: k.<y> = GF(4) # needs sage.rings.finite_rings
483
+ sage: C.base_extend(k) # needs sage.rings.finite_rings
484
+ Finite-dimensional algebra of degree 1 over Finite Field in y of size 2^2
485
+ """
486
+ # Base extension of the multiplication table is done by __classcall_private__.
487
+ return FiniteDimensionalAlgebra(F, self.table())
488
+
489
+ def cardinality(self):
490
+ """
491
+ Return the cardinality of ``self``.
492
+
493
+ EXAMPLES::
494
+
495
+ sage: A = FiniteDimensionalAlgebra(GF(7), [Matrix([[1, 0], [0, 1]]),
496
+ ....: Matrix([[0, 1], [2, 3]])])
497
+ sage: A.cardinality()
498
+ 49
499
+
500
+ sage: B = FiniteDimensionalAlgebra(RR, [Matrix([[1, 0], [0, 1]]),
501
+ ....: Matrix([[0, 1], [2, 3]])])
502
+ sage: B.cardinality()
503
+ +Infinity
504
+
505
+ sage: C = FiniteDimensionalAlgebra(RR, [])
506
+ sage: C.cardinality()
507
+ 1
508
+ """
509
+ n = self.degree()
510
+ return ZZ.one() if not n else self.base_ring().cardinality() ** n
511
+
512
+ def ideal(self, gens=None, given_by_matrix=False, side=None):
513
+ """
514
+ Return the right ideal of ``self`` generated by ``gens``.
515
+
516
+ INPUT:
517
+
518
+ - ``A`` -- a :class:`FiniteDimensionalAlgebra`
519
+
520
+ - ``gens`` -- (default: ``None``) either an element of `A` or a
521
+ list of elements of `A`, given as vectors, matrices, or
522
+ FiniteDimensionalAlgebraElements. If ``given_by_matrix`` is
523
+ ``True``, then ``gens`` should instead be a matrix whose rows
524
+ form a basis of an ideal of `A`.
525
+
526
+ - ``given_by_matrix`` -- boolean (default: ``False``); if
527
+ ``True``, no checking is done
528
+
529
+ - ``side`` -- ignored but necessary for coercions
530
+
531
+ The algebra ``A`` has to be in the category of associative algebras.
532
+
533
+ EXAMPLES::
534
+
535
+ sage: cat = Algebras(GF(3)).FiniteDimensional().WithBasis()
536
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
537
+ ....: Matrix([[0, 1], [0, 0]])],
538
+ ....: category=cat)
539
+ sage: A.ideal(A([1,1]))
540
+ Ideal (e0 + e1) of
541
+ Finite-dimensional algebra of degree 2 over Finite Field of size 3
542
+ """
543
+ return self._ideal_class_()(self, gens=gens,
544
+ given_by_matrix=given_by_matrix)
545
+
546
+ @cached_method
547
+ def is_associative(self):
548
+ """
549
+ Return ``True`` if ``self`` is associative.
550
+
551
+ EXAMPLES::
552
+
553
+ sage: A = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0], [0,1]]),
554
+ ....: Matrix([[0,1], [-1,0]])])
555
+ sage: A.is_associative()
556
+ True
557
+
558
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,1]]),
559
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
560
+ ....: Matrix([[0,0,1], [0,0,0], [1,0,0]])])
561
+ sage: B.is_associative()
562
+ False
563
+
564
+ sage: e = B.basis()
565
+ sage: (e[1]*e[2])*e[2]==e[1]*(e[2]*e[2])
566
+ False
567
+ """
568
+ B = self.table()
569
+ n = self.degree()
570
+ for i in range(n):
571
+ for j in range(n):
572
+ eiej = B[j][i]
573
+ if B[i]*B[j] != sum(eiej[k] * B[k] for k in range(n)):
574
+ return False
575
+ return True
576
+
577
+ @cached_method
578
+ def is_commutative(self) -> bool:
579
+ """
580
+ Return ``True`` if ``self`` is commutative.
581
+
582
+ EXAMPLES::
583
+
584
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
585
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
586
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])])
587
+ sage: B.is_commutative()
588
+ True
589
+
590
+ sage: C = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,0,0], [0,0,0]]),
591
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
592
+ ....: Matrix([[0,0,0], [0,1,0], [0,0,1]])])
593
+ sage: C.is_commutative()
594
+ False
595
+ """
596
+ # Equivalent to self.table() == self.left_table()
597
+ B = self.table()
598
+ for i in range(self.degree()):
599
+ for j in range(i):
600
+ if B[j][i] != B[i][j]:
601
+ return False
602
+ return True
603
+
604
+ def is_finite(self):
605
+ """
606
+ Return ``True`` if the cardinality of ``self`` is finite.
607
+
608
+ EXAMPLES::
609
+
610
+ sage: A = FiniteDimensionalAlgebra(GF(7), [Matrix([[1, 0], [0, 1]]),
611
+ ....: Matrix([[0, 1], [2, 3]])])
612
+ sage: A.is_finite()
613
+ True
614
+
615
+ sage: B = FiniteDimensionalAlgebra(RR, [Matrix([[1, 0], [0, 1]]),
616
+ ....: Matrix([[0, 1], [2, 3]])])
617
+ sage: B.is_finite()
618
+ False
619
+
620
+ sage: C = FiniteDimensionalAlgebra(RR, [])
621
+ sage: C.is_finite()
622
+ True
623
+ """
624
+ return self.degree() == 0 or self.base_ring().is_finite()
625
+
626
+ @cached_method
627
+ def is_unitary(self):
628
+ """
629
+ Return ``True`` if ``self`` has a two-sided multiplicative
630
+ identity element.
631
+
632
+ .. WARNING::
633
+
634
+ This uses linear algebra; thus expect wrong results when
635
+ the base ring is not a field.
636
+
637
+ EXAMPLES::
638
+
639
+ sage: A = FiniteDimensionalAlgebra(QQ, [])
640
+ sage: A.is_unitary()
641
+ True
642
+
643
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0], [0,1]]),
644
+ ....: Matrix([[0,1], [-1,0]])])
645
+ sage: B.is_unitary()
646
+ True
647
+
648
+ sage: C = FiniteDimensionalAlgebra(QQ, [Matrix([[0,0], [0,0]]),
649
+ ....: Matrix([[0,0], [0,0]])])
650
+ sage: C.is_unitary()
651
+ False
652
+
653
+ sage: D = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0], [0,1]]),
654
+ ....: Matrix([[1,0], [0,1]])])
655
+ sage: D.is_unitary()
656
+ False
657
+
658
+ sage: E = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0],[1,0]]),
659
+ ....: Matrix([[0,1],[0,1]])])
660
+ sage: E.is_unitary()
661
+ False
662
+
663
+ sage: F = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,1]]),
664
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
665
+ ....: Matrix([[0,0,1], [0,0,0], [1,0,0]])])
666
+ sage: F.is_unitary()
667
+ True
668
+
669
+ sage: G = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,1]]),
670
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
671
+ ....: Matrix([[0,1,0], [0,0,0], [1,0,0]])])
672
+ sage: G.is_unitary() # Unique right identity, but no left identity.
673
+ False
674
+ """
675
+ n = self.degree()
676
+ k = self.base_ring()
677
+ if n == 0:
678
+ self._one = matrix(k, 1, n)
679
+ return True
680
+ B1 = reduce(lambda x, y: x.augment(y),
681
+ self._table, matrix(k, n, 0))
682
+ B2 = reduce(lambda x, y: x.augment(y),
683
+ self.left_table(), matrix(k, n, 0))
684
+ # This is the vector obtained by concatenating the rows of the
685
+ # n times n identity matrix:
686
+ kone = k.one()
687
+ kzero = k.zero()
688
+ v = matrix(k, 1, n**2, (n - 1) * ([kone] + n * [kzero]) + [kone])
689
+ try:
690
+ sol1 = B1.solve_left(v)
691
+ except ValueError:
692
+ return False
693
+ if sol1 * B2 != v:
694
+ return False
695
+ self._one = sol1
696
+ return True
697
+
698
+ def is_zero(self):
699
+ """
700
+ Return ``True`` if ``self`` is the zero ring.
701
+
702
+ EXAMPLES::
703
+
704
+ sage: A = FiniteDimensionalAlgebra(QQ, [])
705
+ sage: A.is_zero()
706
+ True
707
+
708
+ sage: B = FiniteDimensionalAlgebra(GF(7), [Matrix([0])])
709
+ sage: B.is_zero()
710
+ False
711
+ """
712
+ return self.degree() == 0
713
+
714
+ def one(self):
715
+ """
716
+ Return the multiplicative identity element of ``self``, if it
717
+ exists.
718
+
719
+ EXAMPLES::
720
+
721
+ sage: A = FiniteDimensionalAlgebra(QQ, [])
722
+ sage: A.one()
723
+ 0
724
+
725
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0], [0,1]]),
726
+ ....: Matrix([[0,1], [-1,0]])])
727
+ sage: B.one()
728
+ e0
729
+
730
+ sage: C = FiniteDimensionalAlgebra(QQ, [Matrix([[0,0], [0,0]]),
731
+ ....: Matrix([[0,0], [0,0]])])
732
+ sage: C.one()
733
+ Traceback (most recent call last):
734
+ ...
735
+ TypeError: algebra is not unitary
736
+
737
+ sage: D = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,1]]),
738
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
739
+ ....: Matrix([[0,0,1], [0,0,0], [1,0,0]])])
740
+ sage: D.one()
741
+ e0
742
+
743
+ sage: E = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,1]]),
744
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
745
+ ....: Matrix([[0,1,0], [0,0,0], [1,0,0]])])
746
+ sage: E.one()
747
+ Traceback (most recent call last):
748
+ ...
749
+ TypeError: algebra is not unitary
750
+ """
751
+ if not self.is_unitary():
752
+ raise TypeError("algebra is not unitary")
753
+ else:
754
+ return self(self._one)
755
+
756
+ def random_element(self, *args, **kwargs):
757
+ """
758
+ Return a random element of ``self``.
759
+
760
+ Optional input parameters are propagated to the ``random_element``
761
+ method of the underlying :class:`VectorSpace`.
762
+
763
+ EXAMPLES::
764
+
765
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
766
+ ....: Matrix([[0, 1], [0, 0]])])
767
+ sage: A.random_element() # random
768
+ e0 + 2*e1
769
+
770
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
771
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
772
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])])
773
+ sage: B.random_element(num_bound=1000) # random
774
+ 215/981*e0 + 709/953*e1 + 931/264*e2
775
+ """
776
+ return self(self.zero().vector().parent().random_element(*args, **kwargs))
777
+
778
+ def _is_valid_homomorphism_(self, other, im_gens, base_map=None):
779
+ """
780
+ TESTS::
781
+
782
+ sage: A = FiniteDimensionalAlgebra(QQ, [Matrix([[1, 0], [0, 1]]),
783
+ ....: Matrix([[0, 1], [0, 0]])])
784
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([1])])
785
+ sage: Hom(A, B)(Matrix([[1], [0]]))
786
+ Morphism from Finite-dimensional algebra of degree 2 over Rational Field
787
+ to Finite-dimensional algebra of degree 1 over Rational Field given by matrix
788
+ [1]
789
+ [0]
790
+ sage: Hom(B, A)(Matrix([[1, 0]]))
791
+ Morphism from Finite-dimensional algebra of degree 1 over Rational Field
792
+ to Finite-dimensional algebra of degree 2 over Rational Field given by matrix
793
+ [1 0]
794
+ sage: H = Hom(A, A)
795
+ sage: H(Matrix.identity(QQ, 2))
796
+ Morphism from Finite-dimensional algebra of degree 2 over Rational Field
797
+ to Finite-dimensional algebra of degree 2 over Rational Field given by matrix
798
+ [1 0]
799
+ [0 1]
800
+ sage: H(Matrix([[1, 0], [0, 0]]))
801
+ Morphism from Finite-dimensional algebra of degree 2 over Rational Field
802
+ to Finite-dimensional algebra of degree 2 over Rational Field given by matrix
803
+ [1 0]
804
+ [0 0]
805
+ sage: H(Matrix([[1, 0], [1, 1]]))
806
+ Traceback (most recent call last):
807
+ ...
808
+ ValueError: relations do not all (canonically) map to 0
809
+ under map determined by images of generators
810
+ sage: Hom(B, B)(Matrix([[2]]))
811
+ Traceback (most recent call last):
812
+ ...
813
+ ValueError: relations do not all (canonically) map to 0
814
+ under map determined by images of generators
815
+ """
816
+ assert len(im_gens) == self.degree()
817
+
818
+ if base_map is None:
819
+ base_map = lambda x: x
820
+ B = self.table()
821
+ for i,gi in enumerate(im_gens):
822
+ for j,gj in enumerate(im_gens):
823
+ eiej = B[j][i]
824
+ if (sum([other(im_gens[k]) * base_map(v) for k,v in enumerate(eiej)])
825
+ != other(gi) * other(gj)):
826
+ return False
827
+ return True
828
+
829
+ def quotient_map(self, ideal):
830
+ """
831
+ Return the quotient of ``self`` by ``ideal``.
832
+
833
+ ``self`` has to be in the category of associative and unital algebras.
834
+
835
+ INPUT:
836
+
837
+ - ``ideal`` -- a :class:`FiniteDimensionalAlgebraIdeal`
838
+
839
+ OUTPUT:
840
+
841
+ - :class:`~sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra_morphism.FiniteDimensionalAlgebraMorphism`;
842
+ the quotient homomorphism
843
+
844
+ EXAMPLES::
845
+
846
+ sage: cat = Algebras(GF(3)).FiniteDimensional().WithBasis()
847
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
848
+ ....: Matrix([[0, 1], [0, 0]])],
849
+ ....: category=cat)
850
+ sage: q0 = A.quotient_map(A.zero_ideal()); q0
851
+ Morphism
852
+ from Finite-dimensional algebra of degree 2 over Finite Field of size 3
853
+ to Finite-dimensional algebra of degree 2 over Finite Field of size 3
854
+ given by matrix
855
+ [1 0]
856
+ [0 1]
857
+ sage: q1 = A.quotient_map(A.ideal(A.gen(1))); q1
858
+ Morphism
859
+ from Finite-dimensional algebra of degree 2 over Finite Field of size 3
860
+ to Finite-dimensional algebra of degree 1 over Finite Field of size 3
861
+ given by matrix
862
+ [1]
863
+ [0]
864
+ """
865
+ k = self.base_ring()
866
+ f = ideal.basis_matrix().transpose().kernel().basis_matrix().echelon_form().transpose()
867
+ pivots = f.pivot_rows()
868
+ table = []
869
+ for p in pivots:
870
+ v = matrix(k, 1, self.degree())
871
+ v[0,p] = 1
872
+ v = self.element_class(self, v)
873
+ table.append(f.solve_right(v.matrix() * f))
874
+ cat = self.category()
875
+ B = FiniteDimensionalAlgebra(k, table, category=cat)
876
+ return self.hom(f, codomain=B, check=False)
877
+
878
+ def maximal_ideal(self):
879
+ """
880
+ Compute the maximal ideal of the local algebra ``self``.
881
+
882
+ .. NOTE::
883
+
884
+ ``self`` has to be in the category of unitary, commutative
885
+ and associative algebras as in the examples below. It must
886
+ moreover be local (have a unique maximal ideal).
887
+
888
+ OUTPUT:
889
+
890
+ - :class:`~sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra_ideal.FiniteDimensionalAlgebraIdeal`;
891
+ the unique maximal ideal of ``self``. If ``self`` is not a local
892
+ algebra, a :exc:`ValueError` is raised.
893
+
894
+ EXAMPLES::
895
+
896
+ sage: cat = CommutativeAlgebras(GF(3)).FiniteDimensional().WithBasis()
897
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
898
+ ....: Matrix([[0, 1], [0, 0]])],
899
+ ....: category=cat)
900
+ sage: A.maximal_ideal() # needs sage.rings.finite_rings
901
+ Ideal (0, e1) of
902
+ Finite-dimensional algebra of degree 2 over Finite Field of size 3
903
+
904
+ sage: cat = CommutativeAlgebras(QQ).FiniteDimensional().WithBasis()
905
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
906
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
907
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])],
908
+ ....: category=cat)
909
+ sage: B.maximal_ideal() # needs sage.libs.pari
910
+ Traceback (most recent call last):
911
+ ...
912
+ ValueError: algebra is not local
913
+ """
914
+ if self.degree() == 0:
915
+ raise ValueError("the zero algebra is not local")
916
+ if not (self.is_unitary() and self.is_commutative()
917
+ and (self._assume_associative or self.is_associative())):
918
+ raise TypeError("algebra must be unitary, commutative and associative")
919
+ gens = []
920
+ for x in self.gens():
921
+ f = x.characteristic_polynomial().factor()
922
+ if len(f) != 1:
923
+ raise ValueError("algebra is not local")
924
+ if f[0][1] > 1:
925
+ gens.append(f[0][0](x))
926
+ return FiniteDimensionalAlgebraIdeal(self, gens)
927
+
928
+ def primary_decomposition(self):
929
+ """
930
+ Return the primary decomposition of ``self``.
931
+
932
+ .. NOTE::
933
+
934
+ ``self`` has to be in the category of unitary, commutative
935
+ and associative algebras as in the examples below.
936
+
937
+ OUTPUT:
938
+
939
+ - a list consisting of the quotient maps ``self`` -> `A`,
940
+ with `A` running through the primary factors of ``self``
941
+
942
+ EXAMPLES::
943
+
944
+ sage: cat = CommutativeAlgebras(GF(3)).FiniteDimensional().WithBasis()
945
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
946
+ ....: Matrix([[0, 1], [0, 0]])], category=cat)
947
+ sage: A.primary_decomposition() # needs sage.rings.finite_rings
948
+ [Morphism
949
+ from Finite-dimensional algebra of degree 2 over Finite Field of size 3
950
+ to Finite-dimensional algebra of degree 2 over Finite Field of size 3
951
+ given by matrix [1 0]
952
+ [0 1]]
953
+
954
+ sage: cat = CommutativeAlgebras(QQ).FiniteDimensional().WithBasis()
955
+ sage: B = FiniteDimensionalAlgebra(QQ, [Matrix([[1,0,0], [0,1,0], [0,0,0]]),
956
+ ....: Matrix([[0,1,0], [0,0,0], [0,0,0]]),
957
+ ....: Matrix([[0,0,0], [0,0,0], [0,0,1]])], category=cat)
958
+ sage: B.primary_decomposition() # needs sage.libs.pari
959
+ [Morphism
960
+ from Finite-dimensional algebra of degree 3 over Rational Field
961
+ to Finite-dimensional algebra of degree 1 over Rational Field
962
+ given by matrix [0]
963
+ [0]
964
+ [1],
965
+ Morphism
966
+ from Finite-dimensional algebra of degree 3 over Rational Field
967
+ to Finite-dimensional algebra of degree 2 over Rational Field
968
+ given by matrix [1 0]
969
+ [0 1]
970
+ [0 0]]
971
+ """
972
+ k = self.base_ring()
973
+ n = self.degree()
974
+ if n == 0:
975
+ return []
976
+ if not (self.is_unitary() and self.is_commutative()
977
+ and (self._assume_associative or self.is_associative())):
978
+ raise TypeError("algebra must be unitary, commutative and associative")
979
+ # Start with the trivial decomposition of self.
980
+ components = [matrix.identity(k, n)]
981
+ for b in self.table():
982
+ # Use the action of the basis element b to refine our
983
+ # decomposition of self.
984
+ components_new = []
985
+ for c in components:
986
+ # Compute the matrix of b on the component c, find its
987
+ # characteristic polynomial, and factor it.
988
+ b_c = c.solve_left(c * b)
989
+ fact = b_c.characteristic_polynomial().factor()
990
+ if len(fact) == 1:
991
+ components_new.append(c)
992
+ else:
993
+ for f in fact:
994
+ h, a = f
995
+ e = h(b_c) ** a
996
+ ker_e = e.kernel().basis_matrix()
997
+ components_new.append(ker_e * c)
998
+ components = components_new
999
+ quotients = []
1000
+ for i in range(len(components)):
1001
+ I = matrix(k, 0, n)
1002
+ for j,c in enumerate(components):
1003
+ if j != i:
1004
+ I = I.stack(c)
1005
+ quotients.append(self.quotient_map(self.ideal(I, given_by_matrix=True)))
1006
+ return quotients
1007
+
1008
+ def maximal_ideals(self):
1009
+ """
1010
+ Return a list consisting of all maximal ideals of ``self``.
1011
+
1012
+ The algebra ``self`` has to be in the category of
1013
+ commutative, associative algebras.
1014
+
1015
+ EXAMPLES::
1016
+
1017
+ sage: cat = Algebras(GF(3)).FiniteDimensional().WithBasis()
1018
+ sage: A = FiniteDimensionalAlgebra(GF(3), [Matrix([[1, 0], [0, 1]]),
1019
+ ....: Matrix([[0, 1], [0, 0]])], category=cat)
1020
+ sage: A.maximal_ideals() # needs sage.rings.finite_rings
1021
+ [Ideal (e1) of Finite-dimensional algebra of degree 2 over Finite Field of size 3]
1022
+
1023
+ sage: cat = Algebras(QQ).FiniteDimensional().WithBasis()
1024
+ sage: B = FiniteDimensionalAlgebra(QQ, [], category=cat)
1025
+ sage: B.maximal_ideals()
1026
+ []
1027
+ """
1028
+ P = self.primary_decomposition()
1029
+ return [f.inverse_image(f.codomain().maximal_ideal()) for f in P]