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,989 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Morphisms of vector spaces (linear transformations)
4
+
5
+ AUTHOR:
6
+
7
+ - Rob Beezer: (2011-06-29)
8
+
9
+ A vector space morphism is a homomorphism between vector spaces, better known
10
+ as a linear transformation. These are a specialization of Sage's free module
11
+ homomorphisms. (A free module is like a vector space, but with scalars from a
12
+ ring that may not be a field.) So references to free modules in the
13
+ documentation or error messages should be understood as simply reflecting a
14
+ more general situation.
15
+
16
+ Creation
17
+ --------
18
+
19
+ The constructor :func:`linear_transformation` is designed to accept a
20
+ variety of inputs that can define a linear transformation. See the
21
+ documentation of the function for all the possibilities. Here we give two.
22
+
23
+ First a matrix representation. By default input matrices are understood
24
+ to act on vectors placed to left of the matrix. Optionally, an input
25
+ matrix can be described as acting on vectors placed to the right. ::
26
+
27
+ sage: A = matrix(QQ, [[-1, 2, 3], [4, 2, 0]])
28
+ sage: phi = linear_transformation(A)
29
+ sage: phi
30
+ Vector space morphism represented by the matrix:
31
+ [-1 2 3]
32
+ [ 4 2 0]
33
+ Domain: Vector space of dimension 2 over Rational Field
34
+ Codomain: Vector space of dimension 3 over Rational Field
35
+ sage: phi([2, -3])
36
+ (-14, -2, 6)
37
+
38
+ A symbolic function can be used to specify the "rule" for a
39
+ linear transformation, along with explicit descriptions of the
40
+ domain and codomain. ::
41
+
42
+ sage: # needs sage.symbolic
43
+ sage: F = Integers(13)
44
+ sage: D = F^3
45
+ sage: C = F^2
46
+ sage: x, y, z = var('x y z')
47
+ sage: f(x, y, z) = [2*x + 3*y + 5*z, x + z]
48
+ sage: rho = linear_transformation(D, C, f)
49
+ sage: f(1, 2, 3)
50
+ (23, 4)
51
+ sage: rho([1, 2, 3])
52
+ (10, 4)
53
+
54
+ A "vector space homspace" is the set of all linear transformations
55
+ between two vector spaces. Various input can be coerced into a
56
+ homspace to create a linear transformation. See
57
+ :mod:`sage.modules.vector_space_homspace` for more. ::
58
+
59
+ sage: D = QQ^4
60
+ sage: C = QQ^2
61
+ sage: hom_space = Hom(D, C)
62
+ sage: images = [[1, 3], [2, -1], [4, 0], [3, 7]]
63
+ sage: zeta = hom_space(images)
64
+ sage: zeta
65
+ Vector space morphism represented by the matrix:
66
+ [ 1 3]
67
+ [ 2 -1]
68
+ [ 4 0]
69
+ [ 3 7]
70
+ Domain: Vector space of dimension 4 over Rational Field
71
+ Codomain: Vector space of dimension 2 over Rational Field
72
+
73
+ A homomorphism may also be created via a method on the domain. ::
74
+
75
+ sage: # needs fpylll sage.rings.number_field sage.symbolic
76
+ sage: F = QQ[sqrt(3)]
77
+ sage: a = F.gen(0)
78
+ sage: D = F^2
79
+ sage: C = F^2
80
+ sage: A = matrix(F, [[a, 1], [2*a, 2]])
81
+ sage: psi = D.hom(A, C)
82
+ sage: psi
83
+ Vector space morphism represented by the matrix:
84
+ [ sqrt3 1]
85
+ [2*sqrt3 2]
86
+ Domain: Vector space of dimension 2 over Number Field in sqrt3
87
+ with defining polynomial x^2 - 3 with sqrt3 = 1.732050807568878?
88
+ Codomain: Vector space of dimension 2 over Number Field in sqrt3
89
+ with defining polynomial x^2 - 3 with sqrt3 = 1.732050807568878?
90
+ sage: psi([1, 4])
91
+ (9*sqrt3, 9)
92
+
93
+ Properties
94
+ ----------
95
+
96
+ Many natural properties of a linear transformation can be computed.
97
+ Some of these are more general methods of objects in the classes
98
+ :class:`sage.modules.free_module_morphism.FreeModuleMorphism` and
99
+ :class:`sage.modules.matrix_morphism.MatrixMorphism`.
100
+
101
+ Values are computed in a natural way, an inverse image of an
102
+ element can be computed with the ``lift()`` method, when the inverse
103
+ image actually exists. ::
104
+
105
+ sage: A = matrix(QQ, [[1,2], [2,4], [3,6]])
106
+ sage: phi = linear_transformation(A)
107
+ sage: phi([1,2,0])
108
+ (5, 10)
109
+ sage: phi.lift([10, 20])
110
+ (10, 0, 0)
111
+ sage: phi.lift([100, 100])
112
+ Traceback (most recent call last):
113
+ ...
114
+ ValueError: element is not in the image
115
+
116
+ Images and pre-images can be computed as vector spaces. ::
117
+
118
+ sage: A = matrix(QQ, [[1,2], [2,4], [3,6]])
119
+ sage: phi = linear_transformation(A)
120
+ sage: phi.image()
121
+ Vector space of degree 2 and dimension 1 over Rational Field
122
+ Basis matrix:
123
+ [1 2]
124
+
125
+ sage: phi.inverse_image( (QQ^2).span([[1,2]]) )
126
+ Vector space of degree 3 and dimension 3 over Rational Field
127
+ Basis matrix:
128
+ [1 0 0]
129
+ [0 1 0]
130
+ [0 0 1]
131
+
132
+ sage: phi.inverse_image( (QQ^2).span([[1,1]]) )
133
+ Vector space of degree 3 and dimension 2 over Rational Field
134
+ Basis matrix:
135
+ [ 1 0 -1/3]
136
+ [ 0 1 -2/3]
137
+
138
+ Injectivity and surjectivity can be checked. ::
139
+
140
+ sage: A = matrix(QQ, [[1,2], [2,4], [3,6]])
141
+ sage: phi = linear_transformation(A)
142
+ sage: phi.is_injective()
143
+ False
144
+ sage: phi.is_surjective()
145
+ False
146
+
147
+ Restrictions and representations
148
+ --------------------------------
149
+
150
+ It is possible to restrict the domain and codomain of a linear
151
+ transformation to make a new linear transformation. We will use
152
+ those commands to replace the domain and codomain by equal vector
153
+ spaces, but with alternate bases. The point here is that the
154
+ matrix representation used to represent linear transformations are
155
+ relative to the bases of both the domain and codomain. ::
156
+
157
+ sage: A = graphs.PetersenGraph().adjacency_matrix() # needs sage.graphs
158
+ sage: V = QQ^10
159
+ sage: phi = linear_transformation(V, V, A) # needs sage.graphs
160
+ sage: phi # needs sage.graphs
161
+ Vector space morphism represented by the matrix:
162
+ [0 1 0 0 1 1 0 0 0 0]
163
+ [1 0 1 0 0 0 1 0 0 0]
164
+ [0 1 0 1 0 0 0 1 0 0]
165
+ [0 0 1 0 1 0 0 0 1 0]
166
+ [1 0 0 1 0 0 0 0 0 1]
167
+ [1 0 0 0 0 0 0 1 1 0]
168
+ [0 1 0 0 0 0 0 0 1 1]
169
+ [0 0 1 0 0 1 0 0 0 1]
170
+ [0 0 0 1 0 1 1 0 0 0]
171
+ [0 0 0 0 1 0 1 1 0 0]
172
+ Domain: Vector space of dimension 10 over Rational Field
173
+ Codomain: Vector space of dimension 10 over Rational Field
174
+
175
+ sage: # needs sage.graphs
176
+ sage: B1 = [V.gen(i) + V.gen(i+1) for i in range(9)] + [V.gen(9)]
177
+ sage: B2 = [V.gen(0)] + [-V.gen(i-1) + V.gen(i) for i in range(1,10)]
178
+ sage: D = V.subspace_with_basis(B1)
179
+ sage: C = V.subspace_with_basis(B2)
180
+ sage: rho = phi.restrict_codomain(C)
181
+ sage: zeta = rho.restrict_domain(D)
182
+ sage: zeta
183
+ Vector space morphism represented by the matrix:
184
+ [6 5 4 3 3 2 1 0 0 0]
185
+ [6 5 4 3 2 2 2 1 0 0]
186
+ [6 6 5 4 3 2 2 2 1 0]
187
+ [6 5 5 4 3 2 2 2 2 1]
188
+ [6 4 4 4 3 3 3 3 2 1]
189
+ [6 5 4 4 4 4 4 4 3 1]
190
+ [6 6 5 4 4 4 3 3 3 2]
191
+ [6 6 6 5 4 4 2 1 1 1]
192
+ [6 6 6 6 5 4 3 1 0 0]
193
+ [3 3 3 3 3 2 2 1 0 0]
194
+ Domain: Vector space of degree 10 and dimension 10 over Rational Field
195
+ User basis matrix:
196
+ [1 1 0 0 0 0 0 0 0 0]
197
+ [0 1 1 0 0 0 0 0 0 0]
198
+ [0 0 1 1 0 0 0 0 0 0]
199
+ [0 0 0 1 1 0 0 0 0 0]
200
+ [0 0 0 0 1 1 0 0 0 0]
201
+ [0 0 0 0 0 1 1 0 0 0]
202
+ [0 0 0 0 0 0 1 1 0 0]
203
+ [0 0 0 0 0 0 0 1 1 0]
204
+ [0 0 0 0 0 0 0 0 1 1]
205
+ [0 0 0 0 0 0 0 0 0 1]
206
+ Codomain: Vector space of degree 10 and dimension 10 over Rational Field
207
+ User basis matrix:
208
+ [ 1 0 0 0 0 0 0 0 0 0]
209
+ [-1 1 0 0 0 0 0 0 0 0]
210
+ [ 0 -1 1 0 0 0 0 0 0 0]
211
+ [ 0 0 -1 1 0 0 0 0 0 0]
212
+ [ 0 0 0 -1 1 0 0 0 0 0]
213
+ [ 0 0 0 0 -1 1 0 0 0 0]
214
+ [ 0 0 0 0 0 -1 1 0 0 0]
215
+ [ 0 0 0 0 0 0 -1 1 0 0]
216
+ [ 0 0 0 0 0 0 0 -1 1 0]
217
+ [ 0 0 0 0 0 0 0 0 -1 1]
218
+
219
+ An endomorphism is a linear transformation with an equal domain and codomain,
220
+ and here each needs to have the same basis. We are using a
221
+ matrix that has well-behaved eigenvalues, as part of showing that these
222
+ do not change as the representation changes. ::
223
+
224
+ sage: # needs sage.graphs
225
+ sage: A = graphs.PetersenGraph().adjacency_matrix()
226
+ sage: V = QQ^10
227
+ sage: phi = linear_transformation(V, V, A)
228
+ sage: phi.eigenvalues() # needs sage.rings.number_field
229
+ [3, -2, -2, -2, -2, 1, 1, 1, 1, 1]
230
+ sage: B1 = [V.gen(i) + V.gen(i+1) for i in range(9)] + [V.gen(9)]
231
+ sage: C = V.subspace_with_basis(B1)
232
+ sage: zeta = phi.restrict(C)
233
+ sage: zeta
234
+ Vector space morphism represented by the matrix:
235
+ [ 1 0 1 -1 2 -1 2 -2 2 -2]
236
+ [ 1 0 1 0 0 0 1 0 0 0]
237
+ [ 0 1 0 1 0 0 0 1 0 0]
238
+ [ 1 -1 2 -1 2 -2 2 -2 3 -2]
239
+ [ 2 -2 2 -1 1 -1 1 0 1 0]
240
+ [ 1 0 0 0 0 0 0 1 1 0]
241
+ [ 0 1 0 0 0 1 -1 1 0 2]
242
+ [ 0 0 1 0 0 2 -1 1 -1 2]
243
+ [ 0 0 0 1 0 1 1 0 0 0]
244
+ [ 0 0 0 0 1 -1 2 -1 1 -1]
245
+ Domain: Vector space of degree 10 and dimension 10 over Rational Field
246
+ User basis matrix:
247
+ [1 1 0 0 0 0 0 0 0 0]
248
+ [0 1 1 0 0 0 0 0 0 0]
249
+ [0 0 1 1 0 0 0 0 0 0]
250
+ [0 0 0 1 1 0 0 0 0 0]
251
+ [0 0 0 0 1 1 0 0 0 0]
252
+ [0 0 0 0 0 1 1 0 0 0]
253
+ [0 0 0 0 0 0 1 1 0 0]
254
+ [0 0 0 0 0 0 0 1 1 0]
255
+ [0 0 0 0 0 0 0 0 1 1]
256
+ [0 0 0 0 0 0 0 0 0 1]
257
+ Codomain: Vector space of degree 10 and dimension 10 over Rational Field
258
+ User basis matrix:
259
+ [1 1 0 0 0 0 0 0 0 0]
260
+ [0 1 1 0 0 0 0 0 0 0]
261
+ [0 0 1 1 0 0 0 0 0 0]
262
+ [0 0 0 1 1 0 0 0 0 0]
263
+ [0 0 0 0 1 1 0 0 0 0]
264
+ [0 0 0 0 0 1 1 0 0 0]
265
+ [0 0 0 0 0 0 1 1 0 0]
266
+ [0 0 0 0 0 0 0 1 1 0]
267
+ [0 0 0 0 0 0 0 0 1 1]
268
+ [0 0 0 0 0 0 0 0 0 1]
269
+ sage: zeta.eigenvalues() # needs sage.rings.number_field
270
+ [3, -2, -2, -2, -2, 1, 1, 1, 1, 1]
271
+
272
+ Equality
273
+ --------
274
+
275
+ Equality of linear transformations is a bit nuanced. The equality operator
276
+ ``==`` tests if two linear transformations have equal matrix representations,
277
+ while we determine if two linear transformations are the same function with the
278
+ ``.is_equal_function()`` method. Notice in this example that the function
279
+ never changes, just the representations. ::
280
+
281
+ sage: f = lambda x: vector(QQ, [x[1], x[0]+x[1], x[0]])
282
+ sage: H = Hom(QQ^2, QQ^3)
283
+ sage: phi = H(f)
284
+
285
+ sage: rho = linear_transformation(QQ^2, QQ^3, matrix(QQ,2, 3, [[0,1,1], [1,1,0]]))
286
+
287
+ sage: phi == rho
288
+ True
289
+
290
+ sage: U = (QQ^2).subspace_with_basis([[1, 2], [-3, 1]])
291
+ sage: V = (QQ^3).subspace_with_basis([[0, 1, 0], [2, 3, 1], [-1, 1, 6]])
292
+ sage: K = Hom(U, V)
293
+ sage: zeta = K(f)
294
+
295
+ sage: zeta == phi
296
+ False
297
+ sage: zeta.is_equal_function(phi)
298
+ True
299
+ sage: zeta.is_equal_function(rho)
300
+ True
301
+
302
+ TESTS::
303
+
304
+ sage: V = QQ^2
305
+ sage: H = Hom(V, V)
306
+ sage: f = H([V.1,-2*V.0])
307
+ sage: loads(dumps(f))
308
+ Vector space morphism represented by the matrix:
309
+ [ 0 1]
310
+ [-2 0]
311
+ Domain: Vector space of dimension 2 over Rational Field
312
+ Codomain: Vector space of dimension 2 over Rational Field
313
+ sage: loads(dumps(f)) == f
314
+ True
315
+ """
316
+
317
+ ####################################################################################
318
+ # Copyright (C) 2011 Rob Beezer <beezer@ups.edu>
319
+ #
320
+ # Distributed under the terms of the GNU General Public License (GPL)
321
+ #
322
+ # This code is distributed in the hope that it will be useful,
323
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
324
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
325
+ # General Public License for more details.
326
+ #
327
+ # The full text of the GPL is available at:
328
+ #
329
+ # http://www.gnu.org/licenses/
330
+ ####################################################################################
331
+
332
+
333
+ import sage.modules.free_module_morphism as free_module_morphism
334
+ import sage.modules.matrix_morphism as matrix_morphism
335
+ from sage.modules import vector_space_homspace
336
+ from sage.structure.element import Matrix
337
+
338
+
339
+ def linear_transformation(arg0, arg1=None, arg2=None, side='left'):
340
+ r"""
341
+ Create a linear transformation from a variety of possible inputs.
342
+
343
+ FORMATS:
344
+
345
+ In the following, ``D`` and ``C`` are vector spaces over
346
+ the same field that are the domain and codomain
347
+ (respectively) of the linear transformation.
348
+
349
+ ``side`` is a keyword that is either ``'left'`` or ``'right'``.
350
+ When a matrix is used to specify a linear transformation,
351
+ as in the first two call formats below, you may specify
352
+ if the function is given by matrix multiplication with
353
+ the vector on the left, or the vector on the right.
354
+ The default is 'left'. The matrix
355
+ representation may be obtained as either version, no matter
356
+ how it is created.
357
+
358
+ - ``linear_transformation(A, side='left')``
359
+
360
+ Where ``A`` is a matrix. The domain and codomain are inferred
361
+ from the dimension of the matrix and the base ring of the matrix.
362
+ The base ring must be a field, or have its fraction field implemented
363
+ in Sage.
364
+
365
+ - ``linear_transformation(D, C, A, side='left')``
366
+
367
+ ``A`` is a matrix that behaves as above. However, now the domain
368
+ and codomain are given explicitly. The matrix is checked for
369
+ compatibility with the domain and codomain. Additionally, the
370
+ domain and codomain may be supplied with alternate ("user") bases
371
+ and the matrix is interpreted as being a representation relative
372
+ to those bases.
373
+
374
+ - ``linear_transformation(D, C, f)``
375
+
376
+ ``f`` is any function that can be applied to the basis elements of the
377
+ domain and that produces elements of the codomain. The linear
378
+ transformation returned is the unique linear transformation that
379
+ extends this mapping on the basis elements. ``f`` may come from a
380
+ function defined by a Python ``def`` statement, or may be defined as a
381
+ ``lambda`` function.
382
+
383
+ Alternatively, ``f`` may be specified by a callable symbolic function,
384
+ see the examples below for a demonstration.
385
+
386
+ - ``linear_transformation(D, C, images)``
387
+
388
+ ``images`` is a list, or tuple, of codomain elements, equal in number
389
+ to the size of the basis of the domain. Each basis element of the domain
390
+ is mapped to the corresponding element of the ``images`` list, and the
391
+ linear transformation returned is the unique linear transformation that
392
+ extends this mapping.
393
+
394
+ OUTPUT:
395
+
396
+ A linear transformation described by the input. This is a
397
+ "vector space morphism", an object of the class
398
+ :class:`sage.modules.vector_space_morphism`.
399
+
400
+ EXAMPLES:
401
+
402
+ We can define a linear transformation with just a matrix, understood to
403
+ act on a vector placed on one side or the other. The field for the
404
+ vector spaces used as domain and codomain is obtained from the base
405
+ ring of the matrix, possibly promoting to a fraction field. ::
406
+
407
+ sage: A = matrix(ZZ, [[1, -1, 4], [2, 0, 5]])
408
+ sage: phi = linear_transformation(A)
409
+ sage: phi
410
+ Vector space morphism represented by the matrix:
411
+ [ 1 -1 4]
412
+ [ 2 0 5]
413
+ Domain: Vector space of dimension 2 over Rational Field
414
+ Codomain: Vector space of dimension 3 over Rational Field
415
+ sage: phi([1/2, 5])
416
+ (21/2, -1/2, 27)
417
+
418
+ sage: B = matrix(Integers(7), [[1, 2, 1], [3, 5, 6]])
419
+ sage: rho = linear_transformation(B, side='right')
420
+ sage: rho
421
+ Vector space morphism represented by the matrix:
422
+ [1 3]
423
+ [2 5]
424
+ [1 6]
425
+ Domain: Vector space of dimension 3 over Ring of integers modulo 7
426
+ Codomain: Vector space of dimension 2 over Ring of integers modulo 7
427
+ sage: rho([2, 4, 6])
428
+ (2, 6)
429
+
430
+ We can define a linear transformation with a matrix, while explicitly
431
+ giving the domain and codomain. Matrix entries will be coerced into the
432
+ common field of scalars for the vector spaces. ::
433
+
434
+ sage: D = QQ^3
435
+ sage: C = QQ^2
436
+ sage: A = matrix([[1, 7], [2, -1], [0, 5]])
437
+ sage: A.parent()
438
+ Full MatrixSpace of 3 by 2 dense matrices over Integer Ring
439
+ sage: zeta = linear_transformation(D, C, A)
440
+ sage: zeta.matrix().parent()
441
+ Full MatrixSpace of 3 by 2 dense matrices over Rational Field
442
+ sage: zeta
443
+ Vector space morphism represented by the matrix:
444
+ [ 1 7]
445
+ [ 2 -1]
446
+ [ 0 5]
447
+ Domain: Vector space of dimension 3 over Rational Field
448
+ Codomain: Vector space of dimension 2 over Rational Field
449
+
450
+ Matrix representations are relative to the bases for the domain
451
+ and codomain. ::
452
+
453
+ sage: u = vector(QQ, [1, -1])
454
+ sage: v = vector(QQ, [2, 3])
455
+ sage: D = (QQ^2).subspace_with_basis([u, v])
456
+ sage: x = vector(QQ, [2, 1])
457
+ sage: y = vector(QQ, [-1, 4])
458
+ sage: C = (QQ^2).subspace_with_basis([x, y])
459
+ sage: A = matrix(QQ, [[2, 5], [3, 7]])
460
+ sage: psi = linear_transformation(D, C, A)
461
+ sage: psi
462
+ Vector space morphism represented by the matrix:
463
+ [2 5]
464
+ [3 7]
465
+ Domain: Vector space of degree 2 and dimension 2 over Rational Field
466
+ User basis matrix:
467
+ [ 1 -1]
468
+ [ 2 3]
469
+ Codomain: Vector space of degree 2 and dimension 2 over Rational Field
470
+ User basis matrix:
471
+ [ 2 1]
472
+ [-1 4]
473
+ sage: psi(u) == 2*x + 5*y
474
+ True
475
+ sage: psi(v) == 3*x + 7*y
476
+ True
477
+
478
+ Functions that act on the domain may be used to compute images of
479
+ the domain's basis elements, and this mapping can be extended to
480
+ a unique linear transformation. The function may be a Python
481
+ function (via ``def`` or ``lambda``) or a Sage symbolic function. ::
482
+
483
+ sage: def g(x):
484
+ ....: return vector(QQ, [2*x[0]+x[2], 5*x[1]])
485
+ sage: phi = linear_transformation(QQ^3, QQ^2, g)
486
+ sage: phi
487
+ Vector space morphism represented by the matrix:
488
+ [2 0]
489
+ [0 5]
490
+ [1 0]
491
+ Domain: Vector space of dimension 3 over Rational Field
492
+ Codomain: Vector space of dimension 2 over Rational Field
493
+
494
+ sage: f = lambda x: vector(QQ, [2*x[0]+x[2], 5*x[1]])
495
+ sage: rho = linear_transformation(QQ^3, QQ^2, f)
496
+ sage: rho
497
+ Vector space morphism represented by the matrix:
498
+ [2 0]
499
+ [0 5]
500
+ [1 0]
501
+ Domain: Vector space of dimension 3 over Rational Field
502
+ Codomain: Vector space of dimension 2 over Rational Field
503
+
504
+ sage: # needs sage.symbolic
505
+ sage: x, y, z = var('x y z')
506
+ sage: h(x, y, z) = [2*x + z, 5*y]
507
+ sage: zeta = linear_transformation(QQ^3, QQ^2, h)
508
+ sage: zeta
509
+ Vector space morphism represented by the matrix:
510
+ [2 0]
511
+ [0 5]
512
+ [1 0]
513
+ Domain: Vector space of dimension 3 over Rational Field
514
+ Codomain: Vector space of dimension 2 over Rational Field
515
+
516
+ sage: phi == rho
517
+ True
518
+ sage: rho == zeta # needs sage.symbolic
519
+ True
520
+
521
+
522
+ We create a linear transformation relative to non-standard bases,
523
+ and capture its representation relative to standard bases. With this, we
524
+ can build functions that create the same linear transformation relative
525
+ to the nonstandard bases. ::
526
+
527
+ sage: u = vector(QQ, [1, -1])
528
+ sage: v = vector(QQ, [2, 3])
529
+ sage: D = (QQ^2).subspace_with_basis([u, v])
530
+ sage: x = vector(QQ, [2, 1])
531
+ sage: y = vector(QQ, [-1, 4])
532
+ sage: C = (QQ^2).subspace_with_basis([x, y])
533
+ sage: A = matrix(QQ, [[2, 5], [3, 7]])
534
+ sage: psi = linear_transformation(D, C, A)
535
+ sage: rho = psi.restrict_codomain(QQ^2).restrict_domain(QQ^2)
536
+ sage: rho.matrix()
537
+ [ -4/5 97/5]
538
+ [ 1/5 -13/5]
539
+
540
+ sage: f = lambda x: vector(QQ, [(-4/5)*x[0] + (1/5)*x[1], (97/5)*x[0] + (-13/5)*x[1]])
541
+ sage: psi = linear_transformation(D, C, f)
542
+ sage: psi.matrix()
543
+ [2 5]
544
+ [3 7]
545
+
546
+ sage: # needs sage.symbolic
547
+ sage: s, t = var('s t')
548
+ sage: h(s, t) = [(-4/5)*s + (1/5)*t, (97/5)*s + (-13/5)*t]
549
+ sage: zeta = linear_transformation(D, C, h)
550
+ sage: zeta.matrix()
551
+ [2 5]
552
+ [3 7]
553
+
554
+ Finally, we can give an explicit list of images for the basis
555
+ elements of the domain. ::
556
+
557
+ sage: # needs sage.rings.number_field
558
+ sage: x = polygen(QQ)
559
+ sage: F.<a> = NumberField(x^3 + x + 1)
560
+ sage: u = vector(F, [1, a, a^2])
561
+ sage: v = vector(F, [a, a^2, 2])
562
+ sage: w = u + v
563
+ sage: D = F^3
564
+ sage: C = F^3
565
+ sage: rho = linear_transformation(D, C, [u, v, w])
566
+ sage: rho.matrix()
567
+ [ 1 a a^2]
568
+ [ a a^2 2]
569
+ [ a + 1 a^2 + a a^2 + 2]
570
+ sage: C = (F^3).subspace_with_basis([u, v])
571
+ sage: D = (F^3).subspace_with_basis([u, v])
572
+ sage: psi = linear_transformation(C, D, [u+v, u-v])
573
+ sage: psi.matrix()
574
+ [ 1 1]
575
+ [ 1 -1]
576
+
577
+ TESTS:
578
+
579
+ We test some bad inputs. First, the wrong things in the wrong places. ::
580
+
581
+ sage: linear_transformation('junk')
582
+ Traceback (most recent call last):
583
+ ...
584
+ TypeError: first argument must be a matrix or a vector space, not junk
585
+
586
+ sage: linear_transformation(QQ^2, QQ^3, 'stuff')
587
+ Traceback (most recent call last):
588
+ ...
589
+ TypeError: third argument must be a matrix, function, or list of images, not stuff
590
+
591
+ sage: linear_transformation(QQ^2, 'garbage')
592
+ Traceback (most recent call last):
593
+ ...
594
+ TypeError: if first argument is a vector space, then second argument must be a vector space, not garbage
595
+
596
+ sage: linear_transformation(QQ^2, Integers(7)^2)
597
+ Traceback (most recent call last):
598
+ ...
599
+ TypeError: vector spaces must have the same field of scalars, not Rational Field and Ring of integers modulo 7
600
+
601
+ Matrices must be over a field (or a ring that can be promoted to a field),
602
+ and of the right size. ::
603
+
604
+ sage: linear_transformation(matrix(Integers(6), [[2, 3],[4, 5]]))
605
+ Traceback (most recent call last):
606
+ ...
607
+ TypeError: matrix must have entries from a field, or a ring with a fraction field, not Ring of integers modulo 6
608
+
609
+ sage: A = matrix(QQ, 3, 4, range(12))
610
+ sage: linear_transformation(QQ^4, QQ^4, A)
611
+ Traceback (most recent call last):
612
+ ...
613
+ TypeError: domain dimension is incompatible with matrix size
614
+
615
+ sage: linear_transformation(QQ^3, QQ^3, A, side='right')
616
+ Traceback (most recent call last):
617
+ ...
618
+ TypeError: domain dimension is incompatible with matrix size
619
+
620
+ sage: linear_transformation(QQ^3, QQ^3, A)
621
+ Traceback (most recent call last):
622
+ ...
623
+ TypeError: codomain dimension is incompatible with matrix size
624
+
625
+ sage: linear_transformation(QQ^4, QQ^4, A, side='right')
626
+ Traceback (most recent call last):
627
+ ...
628
+ TypeError: codomain dimension is incompatible with matrix size
629
+
630
+ Lists of images can be of the wrong number, or not really
631
+ elements of the codomain. ::
632
+
633
+ sage: linear_transformation(QQ^3, QQ^2, [vector(QQ, [1,2])])
634
+ Traceback (most recent call last):
635
+ ...
636
+ ValueError: number of images should equal the size of the domain's basis (=3), not 1
637
+
638
+ sage: C = (QQ^2).subspace_with_basis([vector(QQ, [1,1])])
639
+ sage: linear_transformation(QQ^1, C, [vector(QQ, [1,2])])
640
+ Traceback (most recent call last):
641
+ ...
642
+ ArithmeticError: some proposed image is not in the codomain, because
643
+ element [1, 2] is not in free module
644
+
645
+
646
+ Functions may not apply properly to domain elements,
647
+ or return values outside the codomain. ::
648
+
649
+ sage: f = lambda x: vector(QQ, [x[0], x[4]])
650
+ sage: linear_transformation(QQ^3, QQ^2, f)
651
+ Traceback (most recent call last):
652
+ ...
653
+ ValueError: function cannot be applied properly to some basis element because
654
+ vector index out of range
655
+
656
+ sage: f = lambda x: vector(QQ, [x[0], x[1]])
657
+ sage: C = (QQ^2).span([vector(QQ, [1, 1])])
658
+ sage: linear_transformation(QQ^2, C, f)
659
+ Traceback (most recent call last):
660
+ ...
661
+ ArithmeticError: some image of the function is not in the codomain, because
662
+ element [1, 0] is not in free module
663
+
664
+ A Sage symbolic function can come in a variety of forms that are
665
+ not representative of a linear transformation. ::
666
+
667
+ sage: x, y = var('x, y') # needs sage.symbolic
668
+ sage: f(x, y) = [y, x, y] # needs sage.symbolic
669
+ sage: linear_transformation(QQ^3, QQ^3, f) # needs sage.symbolic
670
+ Traceback (most recent call last):
671
+ ...
672
+ ValueError: symbolic function has the wrong number of inputs for domain
673
+
674
+ sage: linear_transformation(QQ^2, QQ^2, f) # needs sage.symbolic
675
+ Traceback (most recent call last):
676
+ ...
677
+ ValueError: symbolic function has the wrong number of outputs for codomain
678
+
679
+ sage: x, y = var('x y') # needs sage.symbolic
680
+ sage: f(x, y) = [y, x*y] # needs sage.symbolic
681
+ sage: linear_transformation(QQ^2, QQ^2, f) # needs sage.symbolic
682
+ Traceback (most recent call last):
683
+ ...
684
+ ValueError: symbolic function must be linear in all the inputs:
685
+ unable to convert y to a rational
686
+
687
+ sage: # needs sage.symbolic
688
+ sage: x, y = var('x y')
689
+ sage: f(x, y) = [x, 2*y]
690
+ sage: C = (QQ^2).span([vector(QQ, [1, 1])])
691
+ sage: linear_transformation(QQ^2, C, f)
692
+ Traceback (most recent call last):
693
+ ...
694
+ ArithmeticError: some image of the function is not in the codomain, because
695
+ element [1, 0] is not in free module
696
+ """
697
+ from sage.categories.homset import Hom
698
+ from sage.matrix.constructor import matrix
699
+ from sage.modules.free_module import VectorSpace
700
+ from sage.modules.module import Module
701
+ try:
702
+ from sage.modules.vector_callable_symbolic_dense import (
703
+ Vector_callable_symbolic_dense,
704
+ )
705
+ except ImportError:
706
+ Vector_callable_symbolic_dense = ()
707
+
708
+ if side not in ['left', 'right']:
709
+ raise ValueError("side must be 'left' or 'right', not {}".format(side))
710
+ if isinstance(arg0, Matrix):
711
+ R = arg0.base_ring()
712
+ if not R.is_field():
713
+ try:
714
+ R = R.fraction_field()
715
+ except (NotImplementedError, TypeError):
716
+ msg = 'matrix must have entries from a field, or a ring with a fraction field, not {0}'
717
+ raise TypeError(msg.format(R))
718
+ if side == 'right':
719
+ arg0 = arg0.transpose()
720
+ side = 'left'
721
+ arg2 = arg0
722
+ arg0 = VectorSpace(R, arg2.nrows())
723
+ arg1 = VectorSpace(R, arg2.ncols())
724
+ elif isinstance(arg0, Module) and arg0.base_ring().is_field():
725
+ if not (isinstance(arg1, Module) and arg1.base_ring().is_field()):
726
+ msg = 'if first argument is a vector space, then second argument must be a vector space, not {0}'
727
+ raise TypeError(msg.format(arg1))
728
+ if arg0.base_ring() != arg1.base_ring():
729
+ msg = 'vector spaces must have the same field of scalars, not {0} and {1}'
730
+ raise TypeError(msg.format(arg0.base_ring(), arg1.base_ring()))
731
+ else:
732
+ raise TypeError('first argument must be a matrix or a vector space, not {}'.format(arg0))
733
+ # Now arg0 = domain D, arg1 = codomain C, and
734
+ # both are vector spaces with common field of scalars
735
+ # use these to make a VectorSpaceHomSpace
736
+ # arg2 might be a matrix that began in arg0
737
+ D = arg0
738
+ C = arg1
739
+ H = Hom(D, C, category=None)
740
+
741
+ # Examine arg2 as the "rule" for the linear transformation
742
+ # Pass on matrices, Python functions and lists to homspace call
743
+ # Convert symbolic function here, to a matrix
744
+ if isinstance(arg2, Matrix):
745
+ if side == 'right':
746
+ arg2 = arg2.transpose()
747
+ elif isinstance(arg2, (list, tuple)):
748
+ pass
749
+ elif isinstance(arg2, Vector_callable_symbolic_dense):
750
+ from sage.symbolic.ring import SR
751
+ args = arg2.parent().base_ring()._arguments
752
+ exprs = arg2.change_ring(SR)
753
+ m = len(args)
754
+ n = len(exprs)
755
+ if m != D.degree():
756
+ raise ValueError('symbolic function has the wrong number of inputs for domain')
757
+ if n != C.degree():
758
+ raise ValueError('symbolic function has the wrong number of outputs for codomain')
759
+ arg2 = [[e.coefficient(a) for e in exprs] for a in args]
760
+ try:
761
+ arg2 = matrix(D.base_ring(), m, n, arg2)
762
+ except TypeError as e:
763
+ msg = 'symbolic function must be linear in all the inputs:\n' + e.args[0]
764
+ raise ValueError(msg)
765
+ # have matrix with respect to standard bases, now consider user bases
766
+ images = [v * arg2 for v in D.basis()]
767
+ try:
768
+ arg2 = matrix([C.coordinates(C(a)) for a in images])
769
+ except (ArithmeticError, TypeError) as e:
770
+ msg = 'some image of the function is not in the codomain, because\n' + e.args[0]
771
+ raise ArithmeticError(msg)
772
+ elif callable(arg2):
773
+ pass
774
+ else:
775
+ msg = 'third argument must be a matrix, function, or list of images, not {0}'
776
+ raise TypeError(msg.format(arg2))
777
+
778
+ # arg2 now compatible with homspace H call method
779
+ # __init__ will check matrix sizes versus domain/codomain dimensions
780
+ return H(arg2)
781
+
782
+
783
+ def is_VectorSpaceMorphism(x) -> bool:
784
+ r"""
785
+ Return ``True`` if ``x`` is a vector space morphism (a linear transformation).
786
+
787
+ This function is deprecated.
788
+
789
+ INPUT:
790
+
791
+ - ``x`` -- anything
792
+
793
+ OUTPUT:
794
+
795
+ ``True`` only if ``x`` is an instance of a vector space morphism,
796
+ which are also known as linear transformations.
797
+
798
+ EXAMPLES::
799
+
800
+ sage: V = QQ^2; f = V.hom([V.1,-2*V.0])
801
+ sage: sage.modules.vector_space_morphism.is_VectorSpaceMorphism(f)
802
+ doctest:warning...
803
+ DeprecationWarning: is_VectorSpaceMorphism is deprecated;
804
+ use isinstance(..., VectorSpaceMorphism) or categories instead
805
+ See https://github.com/sagemath/sage/issues/37731 for details.
806
+ True
807
+ sage: sage.modules.vector_space_morphism.is_VectorSpaceMorphism('junk')
808
+ False
809
+ """
810
+ from sage.misc.superseded import deprecation
811
+ deprecation(37731,
812
+ "is_VectorSpaceMorphism is deprecated; "
813
+ "use isinstance(..., VectorSpaceMorphism) or categories instead")
814
+ return isinstance(x, VectorSpaceMorphism)
815
+
816
+
817
+ class VectorSpaceMorphism(free_module_morphism.FreeModuleMorphism):
818
+
819
+ def __init__(self, homspace, A, side='left'):
820
+ r"""
821
+ Create a linear transformation, a morphism between vector spaces.
822
+
823
+ INPUT:
824
+
825
+ - ``homspace`` -- a homspace (of vector spaces) to serve
826
+ as a parent for the linear transformation and a home for
827
+ the domain and codomain of the morphism
828
+ - ``A`` -- a matrix representing the linear transformation,
829
+ which will act on vectors placed to the left of the matrix
830
+
831
+ EXAMPLES:
832
+
833
+ Nominally, we require a homspace to hold the domain
834
+ and codomain and a matrix representation of the morphism
835
+ (linear transformation). ::
836
+
837
+ sage: from sage.modules.vector_space_homspace import VectorSpaceHomspace
838
+ sage: from sage.modules.vector_space_morphism import VectorSpaceMorphism
839
+ sage: H = VectorSpaceHomspace(QQ^3, QQ^2)
840
+ sage: A = matrix(QQ, 3, 2, range(6))
841
+ sage: zeta = VectorSpaceMorphism(H, A)
842
+ sage: zeta
843
+ Vector space morphism represented by the matrix:
844
+ [0 1]
845
+ [2 3]
846
+ [4 5]
847
+ Domain: Vector space of dimension 3 over Rational Field
848
+ Codomain: Vector space of dimension 2 over Rational Field
849
+
850
+ See the constructor,
851
+ :func:`sage.modules.vector_space_morphism.linear_transformation`
852
+ for another way to create linear transformations.
853
+
854
+ The ``.hom()`` method of a vector space will create a vector
855
+ space morphism. ::
856
+
857
+ sage: V = QQ^3; W = V.subspace_with_basis([[1,2,3], [-1,2,5/3], [0,1,-1]])
858
+ sage: phi = V.hom(matrix(QQ, 3, range(9)), codomain=W) # indirect doctest
859
+ sage: type(phi)
860
+ <class 'sage.modules.vector_space_morphism.VectorSpaceMorphism'>
861
+
862
+ A matrix may be coerced into a vector space homspace to
863
+ create a vector space morphism. ::
864
+
865
+ sage: from sage.modules.vector_space_homspace import VectorSpaceHomspace
866
+ sage: H = VectorSpaceHomspace(QQ^3, QQ^2)
867
+ sage: A = matrix(QQ, 3, 2, range(6))
868
+ sage: rho = H(A) # indirect doctest
869
+ sage: type(rho)
870
+ <class 'sage.modules.vector_space_morphism.VectorSpaceMorphism'>
871
+ """
872
+ if not isinstance(homspace, vector_space_homspace.VectorSpaceHomspace):
873
+ raise TypeError('homspace must be a vector space hom space, not {}'.format(homspace))
874
+ if isinstance(A, matrix_morphism.MatrixMorphism):
875
+ A = A.matrix()
876
+ if not isinstance(A, Matrix):
877
+ msg = 'input must be a matrix representation or another matrix morphism, not {0}'
878
+ raise TypeError(msg.format(A))
879
+ # now have a vector space homspace, and a matrix, check compatibility
880
+ if side == "left":
881
+ if homspace.domain().dimension() != A.nrows():
882
+ raise TypeError('domain dimension is incompatible with matrix size')
883
+ if homspace.codomain().dimension() != A.ncols():
884
+ raise TypeError('codomain dimension is incompatible with matrix size')
885
+ if side == "right":
886
+ if homspace.codomain().dimension() != A.nrows():
887
+ raise TypeError('Domain dimension is incompatible with matrix size')
888
+ if homspace.domain().dimension() != A.ncols():
889
+ raise TypeError('codomain dimension is incompatible with matrix size')
890
+
891
+ A = homspace._matrix_space(side)(A)
892
+ free_module_morphism.FreeModuleMorphism.__init__(self, homspace, A, side)
893
+
894
+ def is_invertible(self) -> bool:
895
+ r"""
896
+ Determine if the vector space morphism has an inverse.
897
+
898
+ OUTPUT:
899
+
900
+ ``True`` if the vector space morphism is invertible, otherwise
901
+ ``False``.
902
+
903
+ EXAMPLES:
904
+
905
+ If the dimension of the domain does not match the dimension
906
+ of the codomain, then the morphism cannot be invertible. ::
907
+
908
+ sage: V = QQ^3
909
+ sage: U = V.subspace_with_basis([V.0 + V.1, 2*V.1 + 3*V.2])
910
+ sage: phi = V.hom([U.0, U.0 + U.1, U.0 - U.1], U)
911
+ sage: phi.is_invertible()
912
+ False
913
+
914
+ An invertible linear transformation. ::
915
+
916
+ sage: A = matrix(QQ, 3, [[-3, 5, -5], [4, -7, 7], [6, -8, 10]])
917
+ sage: A.determinant()
918
+ 2
919
+ sage: H = Hom(QQ^3, QQ^3)
920
+ sage: rho = H(A)
921
+ sage: rho.is_invertible()
922
+ True
923
+
924
+ A non-invertible linear transformation, an endomorphism of
925
+ a vector space over a finite field. ::
926
+
927
+ sage: # needs sage.rings.finite_rings
928
+ sage: F.<a> = GF(11^2)
929
+ sage: A = matrix(F, [[6*a + 3, 8*a + 2, 10*a + 3],
930
+ ....: [2*a + 7, 4*a + 3, 2*a + 3],
931
+ ....: [9*a + 2, 10*a + 10, 3*a + 3]])
932
+ sage: A.nullity()
933
+ 1
934
+ sage: E = End(F^3)
935
+ sage: zeta = E(A)
936
+ sage: zeta.is_invertible()
937
+ False
938
+ """
939
+ # endomorphism or not, this is equivalent to invertibility of
940
+ # the matrix representation, so any test of this will suffice
941
+ m = self.matrix()
942
+ if not m.is_square():
943
+ return False
944
+ return m.rank() == m.ncols()
945
+
946
+ def _latex_(self):
947
+ r"""
948
+ A LaTeX representation of this vector space morphism.
949
+
950
+ EXAMPLES::
951
+
952
+ sage: H = Hom(QQ^3, QQ^2)
953
+ sage: f = H(matrix(3, 2, range(6)))
954
+ sage: f._latex_().split(' ')
955
+ ['\\text{vector', 'space', 'morphism', 'from',
956
+ '}\n\\Bold{Q}^{3}\\text{', 'to', '}\n\\Bold{Q}^{2}\\text{',
957
+ 'represented', 'by', 'the', 'matrix',
958
+ '}\n\\left(\\begin{array}{rr}\n0', '&', '1',
959
+ '\\\\\n2', '&', '3', '\\\\\n4', '&', '5\n\\end{array}\\right)']
960
+ """
961
+ s = ('\\text{vector space morphism from }\n', self.domain()._latex_(),
962
+ '\\text{ to }\n', self.codomain()._latex_(),
963
+ '\\text{ represented by the matrix }\n', self.matrix()._latex_())
964
+ return ''.join(s)
965
+
966
+ def _repr_(self):
967
+ r"""
968
+ A text representation of this vector space morphism.
969
+
970
+ EXAMPLES::
971
+
972
+ sage: H = Hom(QQ^3, QQ^2)
973
+ sage: f = H(matrix(3, 2, range(6)))
974
+ sage: f._repr_().split(' ')
975
+ ['Vector', 'space', 'morphism', 'represented', 'by',
976
+ 'the', 'matrix:\n[0', '1]\n[2', '3]\n[4', '5]\nDomain:',
977
+ 'Vector', 'space', 'of', 'dimension', '3', 'over',
978
+ 'Rational', 'Field\nCodomain:', 'Vector', 'space', 'of',
979
+ 'dimension', '2', 'over', 'Rational', 'Field']
980
+ """
981
+ m = self.matrix()
982
+ act = ""
983
+ if self.side() == "right":
984
+ act = "as left-multiplication "
985
+ msg = ("Vector space morphism represented {}by the matrix:\n",
986
+ "{!r}\n",
987
+ "Domain: {}\n",
988
+ "Codomain: {}")
989
+ return ''.join(msg).format(act, m, self.domain(), self.codomain())