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,1207 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Free module automorphisms
4
+
5
+ Given a free module `M` of finite rank over a commutative ring `R`, an
6
+ *automorphism* of `M` is a map
7
+
8
+ .. MATH::
9
+
10
+ \phi:\ M \longrightarrow M
11
+
12
+ that is linear (i.e. is a module homomorphism) and bijective.
13
+
14
+ Automorphisms of a free module of finite rank are implemented via the class
15
+ :class:`FreeModuleAutomorphism`.
16
+
17
+ AUTHORS:
18
+
19
+ - Eric Gourgoulhon (2015): initial version
20
+ - Michael Jung (2019): improve treatment of the identity element
21
+
22
+ REFERENCES:
23
+
24
+ - Chaps. 15, 24 of R. Godement: *Algebra* [God1968]_
25
+ """
26
+ # *****************************************************************************
27
+ # Copyright (C) 2015 Eric Gourgoulhon <eric.gourgoulhon@obspm.fr>
28
+ #
29
+ # Distributed under the terms of the GNU General Public License (GPL)
30
+ # as published by the Free Software Foundation; either version 2 of
31
+ # the License, or (at your option) any later version.
32
+ # https://www.gnu.org/licenses/
33
+ # *****************************************************************************
34
+
35
+ from sage.misc.lazy_attribute import lazy_attribute
36
+ from sage.structure.element import MultiplicativeGroupElement
37
+ from sage.tensor.modules.free_module_tensor import FreeModuleTensor
38
+
39
+
40
+ class FreeModuleAutomorphism(FreeModuleTensor, MultiplicativeGroupElement):
41
+ r"""
42
+ Automorphism of a free module of finite rank over a commutative ring.
43
+
44
+ This is a Sage *element* class, the corresponding *parent* class being
45
+ :class:`~sage.tensor.modules.free_module_linear_group.FreeModuleLinearGroup`.
46
+
47
+ This class inherits from the classes
48
+ :class:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor`
49
+ and
50
+ :class:`~sage.structure.element.MultiplicativeGroupElement`.
51
+
52
+ INPUT:
53
+
54
+ - ``fmodule`` -- free module `M` of finite rank over a commutative ring
55
+ `R`, as an instance of
56
+ :class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule`
57
+ - ``name`` -- (default: ``None``) name given to the automorphism
58
+ - ``latex_name`` -- (default: ``None``) LaTeX symbol to denote the
59
+ automorphism; if none is provided, the LaTeX symbol is set to ``name``
60
+ - ``is_identity`` -- boolean (default: ``False``); determines whether the
61
+ constructed object is the identity automorphism, i.e. the identity map
62
+ of `M` considered as an automorphism (the identity element of the
63
+ general linear group)
64
+
65
+ EXAMPLES:
66
+
67
+ Automorphism of a rank-2 free module over `\ZZ`::
68
+
69
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M', start_index=1)
70
+ sage: a = M.automorphism(name='a', latex_name=r'\alpha') ; a
71
+ Automorphism a of the Rank-2 free module M over the Integer Ring
72
+ sage: a.parent()
73
+ General linear group of the Rank-2 free module M over the Integer Ring
74
+ sage: a.parent() is M.general_linear_group()
75
+ True
76
+ sage: latex(a)
77
+ \alpha
78
+
79
+ Setting the components of ``a`` w.r.t. a basis of module ``M``::
80
+
81
+ sage: e = M.basis('e') ; e
82
+ Basis (e_1,e_2) on the Rank-2 free module M over the Integer Ring
83
+ sage: a[:] = [[1,2],[1,3]]
84
+ sage: a.matrix(e)
85
+ [1 2]
86
+ [1 3]
87
+ sage: a(e[1]).display()
88
+ a(e_1) = e_1 + e_2
89
+ sage: a(e[2]).display()
90
+ a(e_2) = 2 e_1 + 3 e_2
91
+
92
+ Actually, the components w.r.t. a given basis can be specified at the
93
+ construction of the object::
94
+
95
+ sage: a = M.automorphism(matrix=[[1,2],[1,3]], basis=e, name='a',
96
+ ....: latex_name=r'\alpha') ; a
97
+ Automorphism a of the Rank-2 free module M over the Integer Ring
98
+ sage: a.matrix(e)
99
+ [1 2]
100
+ [1 3]
101
+
102
+ Since e is the module's default basis, it can be omitted in the argument
103
+ list::
104
+
105
+ sage: a == M.automorphism(matrix=[[1,2],[1,3]], name='a',
106
+ ....: latex_name=r'\alpha')
107
+ True
108
+
109
+ The matrix of the automorphism can be obtained in any basis::
110
+
111
+ sage: f = M.basis('f', from_family=(3*e[1]+4*e[2], 5*e[1]+7*e[2])) ; f
112
+ Basis (f_1,f_2) on the Rank-2 free module M over the Integer Ring
113
+ sage: a.matrix(f)
114
+ [2 3]
115
+ [1 2]
116
+
117
+ Automorphisms are tensors of type `(1,1)`::
118
+
119
+ sage: a.tensor_type()
120
+ (1, 1)
121
+ sage: a.tensor_rank()
122
+ 2
123
+
124
+ In particular, they can be displayed as such::
125
+
126
+ sage: a.display(e)
127
+ a = e_1⊗e^1 + 2 e_1⊗e^2 + e_2⊗e^1 + 3 e_2⊗e^2
128
+ sage: a.display(f)
129
+ a = 2 f_1⊗f^1 + 3 f_1⊗f^2 + f_2⊗f^1 + 2 f_2⊗f^2
130
+
131
+ The automorphism acting on a module element::
132
+
133
+ sage: v = M([-2,3], name='v') ; v
134
+ Element v of the Rank-2 free module M over the Integer Ring
135
+ sage: a(v)
136
+ Element a(v) of the Rank-2 free module M over the Integer Ring
137
+ sage: a(v).display()
138
+ a(v) = 4 e_1 + 7 e_2
139
+
140
+ A second automorphism of the module ``M``::
141
+
142
+ sage: b = M.automorphism([[0,1],[-1,0]], name='b') ; b
143
+ Automorphism b of the Rank-2 free module M over the Integer Ring
144
+ sage: b.matrix(e)
145
+ [ 0 1]
146
+ [-1 0]
147
+ sage: b(e[1]).display()
148
+ b(e_1) = -e_2
149
+ sage: b(e[2]).display()
150
+ b(e_2) = e_1
151
+
152
+ The composition of automorphisms is performed via the multiplication
153
+ operator::
154
+
155
+ sage: s = a*b ; s
156
+ Automorphism of the Rank-2 free module M over the Integer Ring
157
+ sage: s(v) == a(b(v))
158
+ True
159
+ sage: s.matrix(f)
160
+ [ 11 19]
161
+ [ -7 -12]
162
+ sage: s.matrix(f) == a.matrix(f) * b.matrix(f)
163
+ True
164
+
165
+ It is not commutative::
166
+
167
+ sage: a*b != b*a
168
+ True
169
+
170
+ In other words, the parent of ``a`` and ``b``, i.e. the group
171
+ `\mathrm{GL}(M)`, is not abelian::
172
+
173
+ sage: M.general_linear_group() in CommutativeAdditiveGroups()
174
+ False
175
+
176
+ The neutral element for the composition law is the module identity map::
177
+
178
+ sage: id = M.identity_map() ; id
179
+ Identity map of the Rank-2 free module M over the Integer Ring
180
+ sage: id.parent()
181
+ General linear group of the Rank-2 free module M over the Integer Ring
182
+ sage: id(v) == v
183
+ True
184
+ sage: id.matrix(f)
185
+ [1 0]
186
+ [0 1]
187
+ sage: id*a == a
188
+ True
189
+ sage: a*id == a
190
+ True
191
+
192
+ The inverse of an automorphism is obtained via the method :meth:`inverse`,
193
+ or the operator ~, or the exponent -1::
194
+
195
+ sage: a.inverse()
196
+ Automorphism a^(-1) of the Rank-2 free module M over the Integer Ring
197
+ sage: a.inverse() is ~a
198
+ True
199
+ sage: a.inverse() is a^(-1)
200
+ True
201
+ sage: (a^(-1)).matrix(e)
202
+ [ 3 -2]
203
+ [-1 1]
204
+ sage: a*a^(-1) == id
205
+ True
206
+ sage: a^(-1)*a == id
207
+ True
208
+ sage: a^(-1)*s == b
209
+ True
210
+ sage: (a^(-1))(a(v)) == v
211
+ True
212
+
213
+ The module's changes of basis are stored as automorphisms::
214
+
215
+ sage: M.change_of_basis(e,f)
216
+ Automorphism of the Rank-2 free module M over the Integer Ring
217
+ sage: M.change_of_basis(e,f).parent()
218
+ General linear group of the Rank-2 free module M over the Integer Ring
219
+ sage: M.change_of_basis(e,f).matrix(e)
220
+ [3 5]
221
+ [4 7]
222
+ sage: M.change_of_basis(f,e) == M.change_of_basis(e,f).inverse()
223
+ True
224
+
225
+ The opposite of an automorphism is still an automorphism::
226
+
227
+ sage: -a
228
+ Automorphism -a of the Rank-2 free module M over the Integer Ring
229
+ sage: (-a).parent()
230
+ General linear group of the Rank-2 free module M over the Integer Ring
231
+ sage: (-a).matrix(e) == - (a.matrix(e))
232
+ True
233
+
234
+ Adding two automorphisms results in a generic type-`(1,1)` tensor::
235
+
236
+ sage: s = a + b ; s
237
+ Type-(1,1) tensor a+b on the Rank-2 free module M over the Integer Ring
238
+ sage: s.parent()
239
+ Free module of type-(1,1) tensors on the Rank-2 free module M over the
240
+ Integer Ring
241
+ sage: a[:], b[:], s[:]
242
+ (
243
+ [1 2] [ 0 1] [1 3]
244
+ [1 3], [-1 0], [0 3]
245
+ )
246
+
247
+ To get the result as an endomorphism, one has to explicitly convert it via
248
+ the parent of endomorphisms, `\mathrm{End}(M)`::
249
+
250
+ sage: s = End(M)(a+b) ; s
251
+ Generic endomorphism of Rank-2 free module M over the Integer Ring
252
+ sage: s(v) == a(v) + b(v)
253
+ True
254
+ sage: s.matrix(e) == a.matrix(e) + b.matrix(e)
255
+ True
256
+ sage: s.matrix(f) == a.matrix(f) + b.matrix(f)
257
+ True
258
+ """
259
+ def __init__(self, fmodule, name=None, latex_name=None):
260
+ r"""
261
+ TESTS::
262
+
263
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
264
+ sage: e = M.basis('e')
265
+ sage: from sage.tensor.modules.free_module_automorphism import FreeModuleAutomorphism
266
+ sage: a = FreeModuleAutomorphism(M, name='a')
267
+ sage: a[e,:] = [[-1,0,0],[0,1,2],[0,1,3]]
268
+ sage: TestSuite(a).run(skip='_test_category') # see below
269
+
270
+ In the above test suite, _test_category fails because a is not an
271
+ instance of a.parent().category().element_class. Actually automorphism
272
+ must be constructed via FreeModuleLinearGroup.element_class and
273
+ not by a direct call to FreeModuleAutomorphism::
274
+
275
+ sage: a = M.general_linear_group().element_class(M, name='a')
276
+ sage: a[e,:] = [[-1,0,0],[0,1,2],[0,1,3]]
277
+ sage: TestSuite(a).run()
278
+
279
+ Test suite on the identity map::
280
+
281
+ sage: id = M.general_linear_group().one()
282
+ sage: TestSuite(id).run()
283
+
284
+ Test suite on the automorphism obtained as GL.an_element()::
285
+
286
+ sage: b = M.general_linear_group().an_element()
287
+ sage: TestSuite(b).run()
288
+ """
289
+ FreeModuleTensor.__init__(self, fmodule, (1,1), name=name,
290
+ latex_name=latex_name,
291
+ parent=fmodule.general_linear_group())
292
+ # MultiplicativeGroupElement attributes:
293
+ # - none
294
+ # Local attributes:
295
+ self._is_identity = False # a priori
296
+ self._inverse = None # inverse automorphism not set yet
297
+ self._matrices = {}
298
+
299
+ #### SageObject methods ####
300
+
301
+ def _repr_(self):
302
+ r"""
303
+ Return a string representation of ``self``.
304
+
305
+ EXAMPLES::
306
+
307
+ sage: M = FiniteRankFreeModule(QQ, 3, name='M')
308
+ sage: M.automorphism()
309
+ Automorphism of the 3-dimensional vector space M over the Rational Field
310
+ sage: M.automorphism(name='a')
311
+ Automorphism a of the 3-dimensional vector space M over the Rational Field
312
+ sage: M.identity_map()
313
+ Identity map of the 3-dimensional vector space M over the Rational Field
314
+ """
315
+ if self._is_identity:
316
+ description = "Identity map "
317
+ else:
318
+ description = "Automorphism "
319
+ if self._name is not None:
320
+ description += self._name + " "
321
+ description += "of the {}".format(self._fmodule)
322
+ return description
323
+
324
+ #### End of SageObject methods ####
325
+
326
+ #### FreeModuleTensor methods ####
327
+
328
+ def _new_instance(self):
329
+ r"""
330
+ Create an instance of the same class as ``self``.
331
+
332
+ EXAMPLES::
333
+
334
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
335
+ sage: a = M.automorphism(name='a')
336
+ sage: a._new_instance()
337
+ Automorphism of the Rank-3 free module M over the Integer Ring
338
+ sage: Id = M.identity_map()
339
+ sage: Id._new_instance()
340
+ Automorphism of the Rank-3 free module M over the Integer Ring
341
+ """
342
+ return self.__class__(self._fmodule)
343
+
344
+ def _del_derived(self):
345
+ r"""
346
+ Delete the derived quantities.
347
+
348
+ EXAMPLES::
349
+
350
+ sage: M = FiniteRankFreeModule(QQ, 3, name='M')
351
+ sage: e = M.basis('e')
352
+ sage: a = M.automorphism(name='a')
353
+ sage: a[e,:] = [[1,0,-1], [0,3,0], [0,0,2]]
354
+ sage: b = a.inverse()
355
+ sage: a._inverse
356
+ Automorphism a^(-1) of the 3-dimensional vector space M over the
357
+ Rational Field
358
+ sage: a._del_derived()
359
+ sage: a._inverse # has been reset to None
360
+ """
361
+ # First delete the derived quantities pertaining to FreeModuleTensor:
362
+ FreeModuleTensor._del_derived(self)
363
+ # Then reset the inverse automorphism to None:
364
+ if self._inverse is not None:
365
+ self._inverse._inverse = None # (it was set to self)
366
+ self._inverse = None
367
+ # and delete the matrices:
368
+ self._matrices.clear()
369
+
370
+ def set_comp(self, basis=None):
371
+ r"""
372
+ Return the components of ``self`` w.r.t. a given module basis for
373
+ assignment.
374
+
375
+ The components with respect to other bases are deleted, in order to
376
+ avoid any inconsistency. To keep them, use the method :meth:`add_comp`
377
+ instead.
378
+
379
+ INPUT:
380
+
381
+ - ``basis`` -- (default: ``None``) basis in which the components are
382
+ defined; if none is provided, the components are assumed to refer to
383
+ the module's default basis
384
+
385
+ OUTPUT:
386
+
387
+ - components in the given basis, as an instance of the
388
+ class :class:`~sage.tensor.modules.comp.Components`; if such
389
+ components did not exist previously, they are created.
390
+
391
+ EXAMPLES:
392
+
393
+ Setting the components of an automorphism of a rank-3 free
394
+ `\ZZ`-module::
395
+
396
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
397
+ sage: e = M.basis('e')
398
+ sage: a = M.automorphism(name='a')
399
+ sage: a.set_comp(e)
400
+ 2-indices components w.r.t. Basis (e_0,e_1,e_2) on the Rank-3 free
401
+ module M over the Integer Ring
402
+ sage: a.set_comp(e)[:] = [[1,0,0],[0,1,2],[0,1,3]]
403
+ sage: a.matrix(e)
404
+ [1 0 0]
405
+ [0 1 2]
406
+ [0 1 3]
407
+
408
+ Since ``e`` is the module's default basis, one has::
409
+
410
+ sage: a.set_comp() is a.set_comp(e)
411
+ True
412
+
413
+ The method :meth:`set_comp` can be used to modify a single component::
414
+
415
+ sage: a.set_comp(e)[0,0] = -1
416
+ sage: a.matrix(e)
417
+ [-1 0 0]
418
+ [ 0 1 2]
419
+ [ 0 1 3]
420
+
421
+ A short cut to :meth:`set_comp` is the bracket operator, with the basis
422
+ as first argument::
423
+
424
+ sage: a[e,:] = [[1,0,0],[0,-1,2],[0,1,-3]]
425
+ sage: a.matrix(e)
426
+ [ 1 0 0]
427
+ [ 0 -1 2]
428
+ [ 0 1 -3]
429
+ sage: a[e,0,0] = -1
430
+ sage: a.matrix(e)
431
+ [-1 0 0]
432
+ [ 0 -1 2]
433
+ [ 0 1 -3]
434
+
435
+ The call to :meth:`set_comp` erases the components previously defined
436
+ in other bases; to keep them, use the method :meth:`add_comp` instead::
437
+
438
+ sage: f = M.basis('f', from_family=(-e[0], 3*e[1]+4*e[2],
439
+ ....: 5*e[1]+7*e[2])) ; f
440
+ Basis (f_0,f_1,f_2) on the Rank-3 free module M over the Integer
441
+ Ring
442
+ sage: a._components
443
+ {Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer
444
+ Ring: 2-indices components w.r.t. Basis (e_0,e_1,e_2) on the
445
+ Rank-3 free module M over the Integer Ring}
446
+ sage: a.set_comp(f)[:] = [[-1,0,0], [0,1,0], [0,0,-1]]
447
+
448
+ The components w.r.t. basis ``e`` have been erased::
449
+
450
+ sage: a._components
451
+ {Basis (f_0,f_1,f_2) on the Rank-3 free module M over the Integer
452
+ Ring: 2-indices components w.r.t. Basis (f_0,f_1,f_2) on the
453
+ Rank-3 free module M over the Integer Ring}
454
+
455
+ Of course, they can be computed from those in basis ``f`` by means of
456
+ a change-of-basis formula, via the method :meth:`comp` or
457
+ :meth:`matrix`::
458
+
459
+ sage: a.matrix(e)
460
+ [ -1 0 0]
461
+ [ 0 41 -30]
462
+ [ 0 56 -41]
463
+
464
+ For the identity map, it is not permitted to set components::
465
+
466
+ sage: id = M.identity_map()
467
+ sage: id.set_comp(e)
468
+ Traceback (most recent call last):
469
+ ...
470
+ ValueError: the components of the identity map cannot be changed
471
+
472
+ Indeed, the components are set automatically::
473
+
474
+ sage: id.comp(e)
475
+ Kronecker delta of size 3x3
476
+ sage: id.comp(f)
477
+ Kronecker delta of size 3x3
478
+ """
479
+ if self._is_identity:
480
+ raise ValueError("the components of the identity map cannot be "
481
+ "changed")
482
+ return FreeModuleTensor._set_comp_unsafe(self, basis=basis)
483
+
484
+ def add_comp(self, basis=None):
485
+ r"""
486
+ Return the components of ``self`` w.r.t. a given module basis for
487
+ assignment, keeping the components w.r.t. other bases.
488
+
489
+ To delete the components w.r.t. other bases, use the method
490
+ :meth:`set_comp` instead.
491
+
492
+ INPUT:
493
+
494
+ - ``basis`` -- (default: ``None``) basis in which the components are
495
+ defined; if none is provided, the components are assumed to refer to
496
+ the module's default basis
497
+
498
+ .. WARNING::
499
+
500
+ If the automorphism has already components in other bases, it
501
+ is the user's responsibility to make sure that the components
502
+ to be added are consistent with them.
503
+
504
+ OUTPUT:
505
+
506
+ - components in the given basis, as an instance of the
507
+ class :class:`~sage.tensor.modules.comp.Components`;
508
+ if such components did not exist previously, they are created
509
+
510
+ EXAMPLES:
511
+
512
+ Adding components to an automorphism of a rank-3 free
513
+ `\ZZ`-module::
514
+
515
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
516
+ sage: e = M.basis('e')
517
+ sage: a = M.automorphism(name='a')
518
+ sage: a[e,:] = [[1,0,0],[0,-1,2],[0,1,-3]]
519
+ sage: f = M.basis('f', from_family=(-e[0], 3*e[1]+4*e[2],
520
+ ....: 5*e[1]+7*e[2])) ; f
521
+ Basis (f_0,f_1,f_2) on the Rank-3 free module M over the Integer
522
+ Ring
523
+ sage: a.add_comp(f)[:] = [[1,0,0], [0, 80, 143], [0, -47, -84]]
524
+
525
+ The components in basis ``e`` have been kept::
526
+
527
+ sage: a._components # random (dictionary output)
528
+ {Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer
529
+ Ring: 2-indices components w.r.t. Basis (e_0,e_1,e_2) on the
530
+ Rank-3 free module M over the Integer Ring,
531
+ Basis (f_0,f_1,f_2) on the Rank-3 free module M over the Integer
532
+ Ring: 2-indices components w.r.t. Basis (f_0,f_1,f_2) on the
533
+ Rank-3 free module M over the Integer Ring}
534
+
535
+ For the identity map, it is not permitted to invoke :meth:`add_comp`::
536
+
537
+ sage: id = M.identity_map()
538
+ sage: id.add_comp(e)
539
+ Traceback (most recent call last):
540
+ ...
541
+ ValueError: the components of the identity map cannot be changed
542
+
543
+ Indeed, the components are set automatically::
544
+
545
+ sage: id.comp(e)
546
+ Kronecker delta of size 3x3
547
+ sage: id.comp(f)
548
+ Kronecker delta of size 3x3
549
+ """
550
+ if self._is_identity:
551
+ raise ValueError("the components of the identity map cannot be "
552
+ "changed")
553
+ return FreeModuleTensor._add_comp_unsafe(self, basis=basis)
554
+
555
+ def __call__(self, *arg):
556
+ r"""
557
+ Redefinition of :meth:`FreeModuleTensor.__call__` to allow for a single
558
+ argument (module element).
559
+
560
+ EXAMPLES:
561
+
562
+ Call with a single argument: return a module element::
563
+
564
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M', start_index=1)
565
+ sage: e = M.basis('e')
566
+ sage: a = M.automorphism([[-1,0,0],[0,1,2],[0,1,3]], name='a')
567
+ sage: v = M([2,1,4], name='v')
568
+ sage: s = a.__call__(v) ; s
569
+ Element a(v) of the Rank-3 free module M over the Integer Ring
570
+ sage: s.display()
571
+ a(v) = -2 e_1 + 9 e_2 + 13 e_3
572
+ sage: s == a(v)
573
+ True
574
+ sage: s == a.contract(v)
575
+ True
576
+
577
+ Call with two arguments (:class:`FreeModuleTensor` behaviour): return a
578
+ scalar::
579
+
580
+ sage: b = M.linear_form(name='b')
581
+ sage: b[:] = 7, 0, 2
582
+ sage: a.__call__(b,v)
583
+ 12
584
+ sage: a(b,v) == a.__call__(b,v)
585
+ True
586
+ sage: a(b,v) == s(b)
587
+ True
588
+
589
+ Identity map with a single argument: return a module element::
590
+
591
+ sage: id = M.identity_map()
592
+ sage: s = id.__call__(v) ; s
593
+ Element v of the Rank-3 free module M over the Integer Ring
594
+ sage: s == v
595
+ True
596
+ sage: s == id(v)
597
+ True
598
+ sage: s == id.contract(v)
599
+ True
600
+
601
+ Identity map with two arguments (:class:`FreeModuleTensor` behaviour):
602
+ return a scalar::
603
+
604
+ sage: id.__call__(b,v)
605
+ 22
606
+ sage: id(b,v) == id.__call__(b,v)
607
+ True
608
+ sage: id(b,v) == b(v)
609
+ True
610
+ """
611
+ from .free_module_element import FiniteRankFreeModuleElement
612
+ if len(arg) > 1:
613
+ # The automorphism acting as a type-(1,1) tensor on a pair
614
+ # (linear form, module element), returning a scalar:
615
+ if self._is_identity:
616
+ if len(arg) != 2:
617
+ raise TypeError("wrong number of arguments")
618
+ linform = arg[0]
619
+ if linform._tensor_type != (0,1):
620
+ raise TypeError("the first argument must be a linear form")
621
+ vector = arg[1]
622
+ if not isinstance(vector, FiniteRankFreeModuleElement):
623
+ raise TypeError("the second argument must be a module" +
624
+ " element")
625
+ return linform(vector)
626
+ else: # self is not the identity automorphism:
627
+ return FreeModuleTensor.__call__(self, *arg)
628
+ # The automorphism acting as such, on a module element, returning a
629
+ # module element:
630
+ vector = arg[0]
631
+ if not isinstance(vector, FiniteRankFreeModuleElement):
632
+ raise TypeError("the argument must be an element of a free module")
633
+ if self._is_identity:
634
+ return vector
635
+ basis = self.common_basis(vector)
636
+ t = self._components[basis]
637
+ v = vector._components[basis]
638
+ fmodule = self._fmodule
639
+ result = vector._new_instance()
640
+ for i in fmodule.irange():
641
+ res = 0
642
+ for j in fmodule.irange():
643
+ res += t[[i,j]]*v[[j]]
644
+ result.set_comp(basis)[i] = res
645
+ # Name of the output:
646
+ result._name = None
647
+ if self._name is not None and vector._name is not None:
648
+ result._name = self._name + "(" + vector._name + ")"
649
+ # LaTeX symbol for the output:
650
+ result._latex_name = None
651
+ if self._latex_name is not None and vector._latex_name is not None:
652
+ result._latex_name = self._latex_name + r"\left(" + \
653
+ vector._latex_name + r"\right)"
654
+ return result
655
+
656
+ #### End of FreeModuleTensor methods ####
657
+
658
+ #### MultiplicativeGroupElement methods ####
659
+
660
+ def __invert__(self):
661
+ r"""
662
+ Return the inverse automorphism.
663
+
664
+ OUTPUT:
665
+
666
+ - instance of :class:`FreeModuleAutomorphism` representing the
667
+ automorphism that is the inverse of ``self``.
668
+
669
+ EXAMPLES:
670
+
671
+ Inverse of an automorphism of a rank-3 free module::
672
+
673
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
674
+ sage: e = M.basis('e')
675
+ sage: a = M.automorphism(name='a')
676
+ sage: a[e,:] = [[1,0,0],[0,-1,2],[0,1,-3]]
677
+ sage: a.inverse()
678
+ Automorphism a^(-1) of the Rank-3 free module M over the Integer
679
+ Ring
680
+ sage: a.inverse().parent()
681
+ General linear group of the Rank-3 free module M over the Integer
682
+ Ring
683
+
684
+ Check that ``a.inverse()`` is indeed the inverse automorphism::
685
+
686
+ sage: a.inverse() * a
687
+ Identity map of the Rank-3 free module M over the Integer Ring
688
+ sage: a * a.inverse()
689
+ Identity map of the Rank-3 free module M over the Integer Ring
690
+ sage: a.inverse().inverse() == a
691
+ True
692
+
693
+ Another check is::
694
+
695
+ sage: a.inverse().matrix(e)
696
+ [ 1 0 0]
697
+ [ 0 -3 -2]
698
+ [ 0 -1 -1]
699
+ sage: a.inverse().matrix(e) == (a.matrix(e))^(-1)
700
+ True
701
+
702
+ The inverse is cached (as long as ``a`` is not modified)::
703
+
704
+ sage: a.inverse() is a.inverse()
705
+ True
706
+
707
+ If ``a`` is modified, the inverse is automatically recomputed::
708
+
709
+ sage: a[0,0] = -1
710
+ sage: a.matrix(e)
711
+ [-1 0 0]
712
+ [ 0 -1 2]
713
+ [ 0 1 -3]
714
+ sage: a.inverse().matrix(e) # compare with above
715
+ [-1 0 0]
716
+ [ 0 -3 -2]
717
+ [ 0 -1 -1]
718
+
719
+ Shortcuts for :meth:`inverse` are the operator ``~`` and the exponent
720
+ ``-1``::
721
+
722
+ sage: ~a is a.inverse()
723
+ True
724
+ sage: (a)^(-1) is a.inverse()
725
+ True
726
+
727
+ The inverse of the identity map is of course itself::
728
+
729
+ sage: id = M.identity_map()
730
+ sage: id.inverse() is id
731
+ True
732
+
733
+ and we have::
734
+
735
+ sage: a*(a)^(-1) == id
736
+ True
737
+ sage: (a)^(-1)*a == id
738
+ True
739
+
740
+ If the name could cause some confusion, a bracket is added around the
741
+ element before taking the inverse::
742
+
743
+ sage: c = M.automorphism(name='a^(-1)*b')
744
+ sage: c[e,:] = [[1,0,0],[0,-1,1],[0,2,-1]]
745
+ sage: c.inverse()
746
+ Automorphism (a^(-1)*b)^(-1) of the Rank-3 free module M over the
747
+ Integer Ring
748
+ """
749
+ from .comp import Components
750
+ if self._is_identity:
751
+ return self
752
+ if self._inverse is None:
753
+ from sage.tensor.modules.format_utilities import is_atomic
754
+ if self._name is None:
755
+ inv_name = None
756
+ else:
757
+ if is_atomic(self._name, ['*']):
758
+ inv_name = self._name + '^(-1)'
759
+ else:
760
+ inv_name = '(' + self._name + ')^(-1)'
761
+ if self._latex_name is None:
762
+ inv_latex_name = None
763
+ else:
764
+ if is_atomic(self._latex_name, ['\\circ', '\\otimes']):
765
+ inv_latex_name = self._latex_name + r'^{-1}'
766
+ else:
767
+ inv_latex_name = r'\left(' + self._latex_name + \
768
+ r'\right)^{-1}'
769
+ fmodule = self._fmodule
770
+ si = fmodule._sindex
771
+ nsi = fmodule._rank + si
772
+ self._inverse = self.__class__(fmodule, inv_name, inv_latex_name)
773
+ for basis in self._components:
774
+ try:
775
+ mat = self.matrix(basis)
776
+ except (KeyError, ValueError):
777
+ continue
778
+ mat_inv = mat.inverse()
779
+ cinv = Components(fmodule._ring, basis, 2, start_index=si,
780
+ output_formatter=fmodule._output_formatter)
781
+ for i in range(si, nsi):
782
+ for j in range(si, nsi):
783
+ cinv[i, j] = mat_inv[i-si,j-si]
784
+ self._inverse._components[basis] = cinv
785
+ self._inverse._inverse = self
786
+ return self._inverse
787
+
788
+ inverse = __invert__
789
+
790
+ def _mul_(self, other):
791
+ r"""
792
+ Automorphism composition.
793
+
794
+ This implements the group law of GL(M), M being the module of ``self``.
795
+
796
+ INPUT:
797
+
798
+ - ``other`` -- an automorphism of the same module as ``self``
799
+
800
+ OUTPUT:
801
+
802
+ - the automorphism resulting from the composition of ``other`` and
803
+ ``self``.
804
+
805
+ EXAMPLES::
806
+
807
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M')
808
+ sage: e = M.basis('e')
809
+ sage: a = M.automorphism([[1,2],[1,3]])
810
+ sage: b = M.automorphism([[3,4],[5,7]])
811
+ sage: c = a._mul_(b) ; c
812
+ Automorphism of the Rank-2 free module M over the Integer Ring
813
+ sage: c.matrix()
814
+ [13 18]
815
+ [18 25]
816
+
817
+ TESTS::
818
+
819
+ sage: c.parent() is a.parent()
820
+ True
821
+ sage: c.matrix() == a.matrix() * b.matrix()
822
+ True
823
+ sage: c(e[0]) == a(b(e[0]))
824
+ True
825
+ sage: c(e[1]) == a(b(e[1]))
826
+ True
827
+ sage: a.inverse()._mul_(c) == b
828
+ True
829
+ sage: c._mul_(b.inverse()) == a
830
+ True
831
+ sage: id = M.identity_map()
832
+ sage: id._mul_(a) == a
833
+ True
834
+ sage: a._mul_(id) == a
835
+ True
836
+ sage: a._mul_(a.inverse()) == id
837
+ True
838
+ sage: a.inverse()._mul_(a) == id
839
+ True
840
+ """
841
+ # No need for consistency check since self and other are guaranteed
842
+ # to have the same parent. In particular, they are defined on the same
843
+ # free module.
844
+ #
845
+ # Special cases:
846
+ if self._is_identity:
847
+ return other
848
+ if other._is_identity:
849
+ return self
850
+ if other is self._inverse or self is other._inverse:
851
+ return self._fmodule.identity_map()
852
+ # General case:
853
+ fmodule = self._fmodule
854
+ resu = self.__class__(fmodule)
855
+ basis = self.common_basis(other)
856
+ if basis is None:
857
+ raise ValueError("no common basis for the composition")
858
+ # The composition is performed as a tensor contraction of the last
859
+ # index of self (position=1) and the first index of other (position=0):
860
+ resu._components[basis] = self._components[basis].contract(1,
861
+ other._components[basis],0)
862
+ return resu
863
+
864
+ #### End of MultiplicativeGroupElement methods ####
865
+
866
+ def __mul__(self, other):
867
+ r"""
868
+ Redefinition of
869
+ :meth:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor.__mul__`
870
+ so that * dispatches either to automorphism composition or to the
871
+ tensor product.
872
+
873
+ EXAMPLES:
874
+
875
+ Automorphism composition::
876
+
877
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M')
878
+ sage: e = M.basis('e')
879
+ sage: a = M.automorphism([[1,2],[1,3]])
880
+ sage: b = M.automorphism([[3,4],[5,7]])
881
+ sage: s = a*b ; s
882
+ Automorphism of the Rank-2 free module M over the Integer Ring
883
+ sage: s.matrix()
884
+ [13 18]
885
+ [18 25]
886
+ sage: s.matrix() == a.matrix() * b.matrix()
887
+ True
888
+ sage: s(e[0]) == a(b(e[0]))
889
+ True
890
+ sage: s(e[1]) == a(b(e[1]))
891
+ True
892
+ sage: s.display()
893
+ 13 e_0⊗e^0 + 18 e_0⊗e^1 + 18 e_1⊗e^0 + 25 e_1⊗e^1
894
+
895
+ Tensor product::
896
+
897
+ sage: c = M.tensor((1,1)) ; c
898
+ Type-(1,1) tensor on the Rank-2 free module M over the Integer Ring
899
+ sage: c[:] = [[3,4],[5,7]]
900
+ sage: c[:] == b[:] # c and b have the same components
901
+ True
902
+ sage: s = a*c ; s
903
+ Type-(2,2) tensor on the Rank-2 free module M over the Integer Ring
904
+ sage: s.display()
905
+ 3 e_0⊗e_0⊗e^0⊗e^0 + 4 e_0⊗e_0⊗e^0⊗e^1 + 6 e_0⊗e_0⊗e^1⊗e^0
906
+ + 8 e_0⊗e_0⊗e^1⊗e^1 + 5 e_0⊗e_1⊗e^0⊗e^0 + 7 e_0⊗e_1⊗e^0⊗e^1
907
+ + 10 e_0⊗e_1⊗e^1⊗e^0 + 14 e_0⊗e_1⊗e^1⊗e^1 + 3 e_1⊗e_0⊗e^0⊗e^0
908
+ + 4 e_1⊗e_0⊗e^0⊗e^1 + 9 e_1⊗e_0⊗e^1⊗e^0 + 12 e_1⊗e_0⊗e^1⊗e^1
909
+ + 5 e_1⊗e_1⊗e^0⊗e^0 + 7 e_1⊗e_1⊗e^0⊗e^1 + 15 e_1⊗e_1⊗e^1⊗e^0
910
+ + 21 e_1⊗e_1⊗e^1⊗e^1
911
+
912
+ TESTS::
913
+
914
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M', start_index=1)
915
+ sage: e = M.basis('e')
916
+ sage: a = M.automorphism([[1,2],[1,3]], name='a')
917
+ sage: b = M.automorphism([[0,1],[-1,0]], name='b')
918
+ sage: mat_a0 = a.matrix(e)
919
+ sage: a *= b
920
+ sage: a.matrix(e) == mat_a0 * b.matrix(e)
921
+ True
922
+ """
923
+ if isinstance(other, FreeModuleAutomorphism):
924
+ return self._mul_(other) # general linear group law
925
+ else:
926
+ return FreeModuleTensor.__mul__(self, other) # tensor product
927
+
928
+ def matrix(self, basis1=None, basis2=None):
929
+ r"""
930
+ Return the matrix of ``self`` w.r.t to a pair of bases.
931
+
932
+ If the matrix is not known already, it is computed from the matrix in
933
+ another pair of bases by means of the change-of-basis formula.
934
+
935
+ INPUT:
936
+
937
+ - ``basis1`` -- (default: ``None``) basis of the free module on which
938
+ ``self`` is defined; if none is provided, the module's default basis
939
+ is assumed
940
+ - ``basis2`` -- (default: ``None``) basis of the free module on which
941
+ ``self`` is defined; if none is provided, ``basis2`` is set to
942
+ ``basis1``
943
+
944
+ OUTPUT:
945
+
946
+ - the matrix representing the automorphism ``self`` w.r.t
947
+ to bases ``basis1`` and ``basis2``; more precisely, the columns of
948
+ this matrix are formed by the components w.r.t. ``basis2`` of
949
+ the images of the elements of ``basis1``.
950
+
951
+ EXAMPLES:
952
+
953
+ Matrices of an automorphism of a rank-3 free `\ZZ`-module::
954
+
955
+ sage: M = FiniteRankFreeModule(ZZ, 3, name='M', start_index=1)
956
+ sage: e = M.basis('e')
957
+ sage: a = M.automorphism([[-1,0,0],[0,1,2],[0,1,3]], name='a')
958
+ sage: a.matrix(e)
959
+ [-1 0 0]
960
+ [ 0 1 2]
961
+ [ 0 1 3]
962
+ sage: a.matrix()
963
+ [-1 0 0]
964
+ [ 0 1 2]
965
+ [ 0 1 3]
966
+ sage: f = M.basis('f', from_family=(-e[2], 4*e[1]+3*e[3], 7*e[1]+5*e[3])) ; f
967
+ Basis (f_1,f_2,f_3) on the Rank-3 free module M over the Integer Ring
968
+ sage: a.matrix(f)
969
+ [ 1 -6 -10]
970
+ [ -7 83 140]
971
+ [ 4 -48 -81]
972
+
973
+ Check of the above matrix::
974
+
975
+ sage: a(f[1]).display(f)
976
+ a(f_1) = f_1 - 7 f_2 + 4 f_3
977
+ sage: a(f[2]).display(f)
978
+ a(f_2) = -6 f_1 + 83 f_2 - 48 f_3
979
+ sage: a(f[3]).display(f)
980
+ a(f_3) = -10 f_1 + 140 f_2 - 81 f_3
981
+
982
+ Check of the change-of-basis formula::
983
+
984
+ sage: P = M.change_of_basis(e,f).matrix(e)
985
+ sage: a.matrix(f) == P^(-1) * a.matrix(e) * P
986
+ True
987
+
988
+ Check that the matrix of the product of two automorphisms is the
989
+ product of their matrices::
990
+
991
+ sage: b = M.change_of_basis(e,f) ; b
992
+ Automorphism of the Rank-3 free module M over the Integer Ring
993
+ sage: b.matrix(e)
994
+ [ 0 4 7]
995
+ [-1 0 0]
996
+ [ 0 3 5]
997
+ sage: (a*b).matrix(e) == a.matrix(e) * b.matrix(e)
998
+ True
999
+
1000
+ Check that the matrix of the inverse automorphism is the inverse of the
1001
+ automorphism's matrix::
1002
+
1003
+ sage: (~a).matrix(e)
1004
+ [-1 0 0]
1005
+ [ 0 3 -2]
1006
+ [ 0 -1 1]
1007
+ sage: (~a).matrix(e) == ~(a.matrix(e))
1008
+ True
1009
+
1010
+ Matrices of the identity map::
1011
+
1012
+ sage: id = M.identity_map()
1013
+ sage: id.matrix(e)
1014
+ [1 0 0]
1015
+ [0 1 0]
1016
+ [0 0 1]
1017
+ sage: id.matrix(f)
1018
+ [1 0 0]
1019
+ [0 1 0]
1020
+ [0 0 1]
1021
+ """
1022
+ from sage.matrix.constructor import matrix
1023
+ fmodule = self._fmodule
1024
+ if basis1 is None:
1025
+ basis1 = fmodule.default_basis()
1026
+ elif basis1 not in fmodule.bases():
1027
+ raise TypeError("{} is not a basis on the {}".format(basis1,
1028
+ fmodule))
1029
+ if basis2 is None:
1030
+ basis2 = basis1
1031
+ elif basis2 not in fmodule.bases():
1032
+ raise TypeError("{} is not a basis on the {}".format(basis2,
1033
+ fmodule))
1034
+ if (basis1, basis2) not in self._matrices:
1035
+ if basis2 == basis1:
1036
+ comp = self.components(basis1)
1037
+ mat = [[comp[[i,j]] for j in fmodule.irange()]
1038
+ for i in fmodule.irange()]
1039
+ self._matrices[(basis1, basis1)] = matrix(mat)
1040
+ else:
1041
+ # 1/ determine the matrix w.r.t. basis1:
1042
+ self.matrix(basis1)
1043
+ # 2/ perform the change (basis1, basis1) --> (basis1, basis2):
1044
+ raise NotImplementedError("basis1 != basis2 not implemented yet")
1045
+ return self._matrices[(basis1, basis2)]
1046
+
1047
+ def _some_matrix(self):
1048
+ r"""
1049
+ Return the matrix of ``self`` w.r.t. some basis.
1050
+
1051
+ EXAMPLES::
1052
+
1053
+ sage: M = FiniteRankFreeModule(QQ, 2, name='M')
1054
+ sage: e = M.basis('e')
1055
+ sage: a = M.automorphism([[1,1],[0,2]], name='a')
1056
+ sage: a._some_matrix()
1057
+ [1 1]
1058
+ [0 2]
1059
+ """
1060
+ self.matrix() # forces the update of the matrix in the module's default
1061
+ # basis, to make sure that the dictionary self._matrices
1062
+ # is not empty
1063
+ return next(iter(self._matrices.values()))
1064
+
1065
+ @lazy_attribute
1066
+ def characteristic_polynomial(self):
1067
+ r"""
1068
+ Return the characteristic polynomial of ``self``.
1069
+
1070
+ :meth:`characteristic_polynomial` and :meth:`charpoly` are the same method.
1071
+
1072
+ INPUT:
1073
+
1074
+ - ``var`` -- string (default: ``'x'``); a variable name
1075
+
1076
+ EXAMPLES::
1077
+
1078
+ sage: # needs sage.libs.pari
1079
+ sage: M = FiniteRankFreeModule(QQ, 2, name='M')
1080
+ sage: e = M.basis('e')
1081
+ sage: a = M.automorphism([[1,1],[0,2]], name='a')
1082
+ sage: a.matrix(e)
1083
+ [1 1]
1084
+ [0 2]
1085
+ sage: a.characteristic_polynomial()
1086
+ x^2 - 3*x + 2
1087
+ sage: a.charpoly()
1088
+ x^2 - 3*x + 2
1089
+ sage: a.charpoly('T')
1090
+ T^2 - 3*T + 2
1091
+ """
1092
+ return self._some_matrix().characteristic_polynomial
1093
+
1094
+ charpoly = characteristic_polynomial
1095
+
1096
+ @lazy_attribute
1097
+ def det(self):
1098
+ r"""
1099
+ Return the determinant of ``self``.
1100
+
1101
+ OUTPUT:
1102
+
1103
+ - element of the base ring of the module on which ``self`` is defined,
1104
+ equal to the determinant of ``self``.
1105
+
1106
+ EXAMPLES:
1107
+
1108
+ Determinant of an automorphism on a `\ZZ`-module of rank 2::
1109
+
1110
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M')
1111
+ sage: e = M.basis('e')
1112
+ sage: a = M.automorphism([[4,7],[3,5]], name='a')
1113
+ sage: a.matrix(e)
1114
+ [4 7]
1115
+ [3 5]
1116
+ sage: a.det()
1117
+ -1
1118
+ sage: det(a)
1119
+ -1
1120
+ sage: ~a.det() # determinant of the inverse automorphism
1121
+ -1
1122
+ sage: id = M.identity_map()
1123
+ sage: id.det()
1124
+ 1
1125
+ """
1126
+ return self._some_matrix().det
1127
+
1128
+ determinant = det
1129
+
1130
+ @lazy_attribute
1131
+ def fcp(self):
1132
+ r"""
1133
+ Return the factorization of the characteristic polynomial of ``self``.
1134
+
1135
+ INPUT:
1136
+
1137
+ - ``var`` -- string (default: ``'x'``); a variable name
1138
+
1139
+ EXAMPLES::
1140
+
1141
+ sage: M = FiniteRankFreeModule(QQ, 2, name='M')
1142
+ sage: e = M.basis('e')
1143
+ sage: a = M.automorphism([[1,1],[0,2]], name='a')
1144
+ sage: a.matrix(e)
1145
+ [1 1]
1146
+ [0 2]
1147
+ sage: a.fcp() # needs sage.libs.pari
1148
+ (x - 2) * (x - 1)
1149
+ sage: a.fcp('T') # needs sage.libs.pari
1150
+ (T - 2) * (T - 1)
1151
+ """
1152
+ return self._some_matrix().fcp
1153
+
1154
+ @lazy_attribute
1155
+ def minimal_polynomial(self):
1156
+ r"""
1157
+ Return the minimal polynomial of ``self``.
1158
+
1159
+ :meth:`minimal_polynomial` and :meth:`minpoly` are the same method.
1160
+
1161
+ INPUT:
1162
+
1163
+ - ``var`` -- string (default: ``'x'``); a variable name
1164
+
1165
+ EXAMPLES::
1166
+
1167
+ sage: M = FiniteRankFreeModule(GF(7), 3, name='M')
1168
+ sage: e = M.basis('e')
1169
+ sage: a = M.automorphism([[0,1,2], [-1,0,3], [2,4,1]], name='a')
1170
+ sage: a.minpoly() # needs sage.libs.pari
1171
+ x^3 + 6*x^2 + 6*x + 1
1172
+ sage: a.minimal_polynomial() # needs sage.libs.pari
1173
+ x^3 + 6*x^2 + 6*x + 1
1174
+ sage: a.minimal_polynomial('T') # needs sage.libs.pari
1175
+ T^3 + 6*T^2 + 6*T + 1
1176
+ """
1177
+ return self._some_matrix().minimal_polynomial
1178
+
1179
+ minpoly = minimal_polynomial
1180
+
1181
+ @lazy_attribute
1182
+ def trace(self):
1183
+ r"""
1184
+ Return the trace of ``self``.
1185
+
1186
+ OUTPUT:
1187
+
1188
+ - element of the base ring of the module on which ``self`` is defined,
1189
+ equal to the trace of ``self``.
1190
+
1191
+ EXAMPLES:
1192
+
1193
+ Trace of an automorphism on a `\ZZ`-module of rank 2::
1194
+
1195
+ sage: M = FiniteRankFreeModule(ZZ, 2, name='M')
1196
+ sage: e = M.basis('e')
1197
+ sage: a = M.automorphism([[4,7],[3,5]], name='a')
1198
+ sage: a.matrix(e)
1199
+ [4 7]
1200
+ [3 5]
1201
+ sage: a.trace()
1202
+ 9
1203
+ sage: id = M.identity_map()
1204
+ sage: id.trace()
1205
+ 2
1206
+ """
1207
+ return self._some_matrix().trace