passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_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 (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,820 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Drinfeld module morphisms
5
+
6
+ This module provides the class
7
+ :class:`sage.rings.function_fields.drinfeld_module.morphism.DrinfeldModuleMorphism`.
8
+
9
+ AUTHORS:
10
+ - Antoine Leudière (2022-04)
11
+ """
12
+
13
+ # *****************************************************************************
14
+ # Copyright (C) 2022 Antoine Leudière <antoine.leudiere@inria.fr>
15
+ #
16
+ # This program is free software: you can redistribute it and/or modify
17
+ # it under the terms of the GNU General Public License as published by
18
+ # the Free Software Foundation, either version 2 of the License, or
19
+ # (at your option) any later version.
20
+ # http://www.gnu.org/licenses/
21
+ # *****************************************************************************
22
+
23
+ from sage.misc.inherit_comparison import InheritComparisonClasscallMetaclass
24
+ from sage.misc.latex import latex
25
+ from sage.categories.morphism import Morphism
26
+ from sage.structure.unique_representation import UniqueRepresentation
27
+ from sage.structure.element import coerce_binop
28
+
29
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
30
+ from sage.matrix.constructor import matrix
31
+
32
+
33
+ class DrinfeldModuleMorphism(Morphism, UniqueRepresentation,
34
+ metaclass=InheritComparisonClasscallMetaclass):
35
+ r"""
36
+ This class represents Drinfeld `\mathbb{F}_q[T]`-module morphisms.
37
+
38
+ Let `\phi` and `\psi` be two Drinfeld `\mathbb{F}_q[T]`-modules over
39
+ a field `K`. A *morphism of Drinfeld modules* `\phi \to \psi` is an
40
+ Ore polynomial `f \in K\{\tau\}` such that `f \phi_a = \psi_a f` for
41
+ every `a \in \mathbb{F}_q[T]`. In our case, this is equivalent to `f
42
+ \phi_T = \psi_T f`. An *isogeny* is a nonzero morphism.
43
+
44
+ To create a morphism object, the user should never explicitly
45
+ instantiate :class:`DrinfeldModuleMorphism`, but rather call the
46
+ parent homset with the defining Ore polynomial::
47
+
48
+ sage: Fq = GF(4)
49
+ sage: A.<T> = Fq[]
50
+ sage: K.<z> = Fq.extension(3)
51
+ sage: phi = DrinfeldModule(A, [z, z^2 + z, z^2 + z])
52
+ sage: t = phi.ore_polring().gen()
53
+ sage: ore_pol = t + z^5 + z^3 + z + 1
54
+ sage: psi = phi.velu(ore_pol)
55
+ sage: morphism = Hom(phi, psi)(ore_pol)
56
+ sage: morphism
57
+ Drinfeld Module morphism:
58
+ From: Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
59
+ To: Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
60
+ Defn: t + z^5 + z^3 + z + 1
61
+
62
+
63
+ The given Ore polynomial must indeed define a morphism::
64
+
65
+ sage: morphism = Hom(phi, psi)(1)
66
+ Traceback (most recent call last):
67
+ ...
68
+ ValueError: Ore polynomial does not define a morphism
69
+
70
+ One can get basic data on the morphism::
71
+
72
+ sage: morphism.domain()
73
+ Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
74
+ sage: morphism.domain() is phi
75
+ True
76
+
77
+ sage: morphism.codomain()
78
+ Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
79
+ sage: morphism.codomain() is psi
80
+ True
81
+
82
+ ::
83
+
84
+ sage: morphism.ore_polynomial()
85
+ t + z^5 + z^3 + z + 1
86
+ sage: morphism.ore_polynomial() is ore_pol
87
+ True
88
+
89
+ One can check various properties::
90
+
91
+ sage: morphism.is_zero()
92
+ False
93
+ sage: morphism.is_isogeny()
94
+ True
95
+ sage: morphism.is_endomorphism()
96
+ False
97
+ sage: morphism.is_isomorphism()
98
+ False
99
+
100
+ TESTS::
101
+
102
+ sage: morphism.parent() is Hom(phi, psi)
103
+ True
104
+ sage: Hom(phi, psi)(morphism) == morphism
105
+ True
106
+
107
+ ::
108
+
109
+ sage: phi.frobenius_endomorphism().parent() == End(phi)
110
+ True
111
+ sage: End(phi)(0).parent() == End(phi)
112
+ True
113
+
114
+ For the sake of completeness, we explain how the user can directly
115
+ instantiate the class, even though this should never be explicitly
116
+ done::
117
+
118
+ sage: from sage.rings.function_field.drinfeld_modules.morphism import DrinfeldModuleMorphism
119
+ sage: DrinfeldModuleMorphism(Hom(phi, psi), ore_pol)
120
+ Drinfeld Module morphism:
121
+ From: Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
122
+ To: Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
123
+ Defn: t + z^5 + z^3 + z + 1
124
+ sage: DrinfeldModuleMorphism(Hom(phi, psi), ore_pol) is morphism
125
+ True
126
+ """
127
+ @staticmethod
128
+ def __classcall_private__(cls, parent, x):
129
+ """
130
+ Create the morphism.
131
+
132
+ INPUT:
133
+
134
+ - ``cls`` -- the class ``DrinfeldModuleMorphism``
135
+
136
+ - ``parent`` -- the Drinfeld module homset
137
+
138
+ - ``x`` -- a morphism of Drinfeld modules or an element
139
+ (either an Ore polynomial or an element in the base
140
+ ring) defining it
141
+
142
+ TESTS::
143
+
144
+ sage: Fq = GF(2)
145
+ sage: A.<T> = Fq[]
146
+ sage: K.<z6> = Fq.extension(6)
147
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
148
+ sage: End(phi)(T + 1)
149
+ Endomorphism of Drinfeld module defined by T |--> t^2 + t + z6
150
+ Defn: t^2 + t + z6 + 1
151
+
152
+ ::
153
+
154
+ sage: t = phi.ore_polring().gen()
155
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
156
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
157
+ sage: morphism is Hom(phi, psi)(morphism)
158
+ True
159
+
160
+ ::
161
+
162
+ sage: from sage.rings.function_field.drinfeld_modules.morphism import DrinfeldModuleMorphism
163
+ sage: morphism = DrinfeldModuleMorphism(Sets(), t + 1)
164
+ Traceback (most recent call last):
165
+ ...
166
+ TypeError: parent should be a DrinfeldModuleHomset
167
+ """
168
+ from sage.rings.function_field.drinfeld_modules.homset import DrinfeldModuleHomset
169
+ if not isinstance(parent, DrinfeldModuleHomset):
170
+ raise TypeError('parent should be a DrinfeldModuleHomset')
171
+ domain = parent.domain()
172
+ codomain = parent.codomain()
173
+ A = domain.category().function_ring()
174
+ # NOTE: it used to be x.parent() is parent, but this was False.
175
+ # DrinfeldModuleHomset inherits Homset, which does NOT inherit
176
+ # UniqueRepresentation
177
+ if x.parent() == parent:
178
+ # x is a DrinfeldModuleMorphism
179
+ ore_pol = x.ore_polynomial()
180
+ elif domain is codomain and A.has_coerce_map_from(x.parent()):
181
+ # x is in the function field; we return the endomorphism phi_x
182
+ ore_pol = domain(A(x))
183
+ else:
184
+ # x is an Ore polynomial
185
+ ore_pol = domain.ore_polring()(x)
186
+ if ore_pol * domain.gen() != codomain.gen() * ore_pol:
187
+ raise ValueError('Ore polynomial does not define a morphism')
188
+ return cls.__classcall__(cls, parent, ore_pol)
189
+
190
+ def __init__(self, parent, ore_pol):
191
+ r"""
192
+ Initialize ``self``.
193
+
194
+ INPUT:
195
+
196
+ - ``parent`` -- the Drinfeld module homset
197
+
198
+ - ``ore_pol`` -- the Ore polynomial that defines the morphism
199
+
200
+ TESTS::
201
+
202
+ sage: Fq = GF(2)
203
+ sage: A.<T> = Fq[]
204
+ sage: K.<z6> = Fq.extension(6)
205
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
206
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
207
+ sage: t = phi.ore_polring().gen()
208
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
209
+ sage: morphism._domain is phi
210
+ True
211
+ sage: morphism._codomain is psi
212
+ True
213
+ sage: morphism._ore_polynomial == t + z6^5 + z6^2 + 1
214
+ True
215
+ """
216
+ super().__init__(parent)
217
+ self._domain = parent.domain()
218
+ self._codomain = parent.codomain()
219
+ self._ore_polynomial = ore_pol
220
+
221
+ def _latex_(self):
222
+ r"""
223
+ Return a LaTeX representation of the morphism.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: Fq = GF(2)
228
+ sage: A.<T> = Fq[]
229
+ sage: K.<z6> = Fq.extension(6)
230
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
231
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
232
+ sage: t = phi.ore_polring().gen()
233
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
234
+ sage: latex(morphism)
235
+ t + z_{6}^{5} + z_{6}^{2} + 1
236
+ """
237
+ return f'{latex(self._ore_polynomial)}'
238
+
239
+ def _repr_(self):
240
+ r"""
241
+ Return a string representation of the morphism.
242
+
243
+ EXAMPLES::
244
+
245
+ sage: Fq = GF(2)
246
+ sage: A.<T> = Fq[]
247
+ sage: K.<z6> = Fq.extension(6)
248
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
249
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
250
+ sage: t = phi.ore_polring().gen()
251
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
252
+ sage: morphism
253
+ Drinfeld Module morphism:
254
+ From: Drinfeld module defined by T |--> t^2 + t + z6
255
+ To: Drinfeld module defined by T |--> t^2 + (z6^4 + z6^2 + 1)*t + z6
256
+ Defn: t + z6^5 + z6^2 + 1
257
+ """
258
+ if self.is_identity():
259
+ return f'Identity morphism of {self._domain}'
260
+ elif self.is_endomorphism():
261
+ return f'Endomorphism of {self._domain}\n' \
262
+ f' Defn: {self._ore_polynomial}'
263
+ else:
264
+ return f'Drinfeld Module morphism:\n' \
265
+ f' From: {self._domain}\n' \
266
+ f' To: {self._codomain}\n' \
267
+ f' Defn: {self._ore_polynomial}'
268
+
269
+ def __hash__(self):
270
+ r"""
271
+ Return a hash of ``self``.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: Fq = GF(2)
276
+ sage: A.<T> = Fq[]
277
+ sage: K.<z6> = Fq.extension(6)
278
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
279
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
280
+ sage: t = phi.ore_polring().gen()
281
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
282
+ sage: hash(morphism) # random
283
+ -4214883752078138009
284
+ """
285
+ return hash((self._domain, self._codomain, self._ore_polynomial))
286
+
287
+ def is_zero(self):
288
+ r"""
289
+ Return ``True`` whether the morphism is the zero morphism.
290
+
291
+ EXAMPLES::
292
+
293
+ sage: Fq = GF(2)
294
+ sage: A.<T> = Fq[]
295
+ sage: K.<z6> = Fq.extension(6)
296
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
297
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
298
+ sage: t = phi.ore_polring().gen()
299
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
300
+ sage: morphism.is_zero()
301
+ False
302
+
303
+ ::
304
+
305
+ sage: zero_morphism = End(phi)(0)
306
+ sage: zero_morphism.is_zero()
307
+ True
308
+ """
309
+ return self._ore_polynomial.is_zero()
310
+
311
+ def is_identity(self):
312
+ r"""
313
+ Return ``True`` whether the morphism is the identity morphism.
314
+
315
+ EXAMPLES::
316
+
317
+ sage: Fq = GF(2)
318
+ sage: A.<T> = Fq[]
319
+ sage: K.<z6> = Fq.extension(6)
320
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
321
+ sage: morphism = End(phi)(1)
322
+ sage: morphism.is_identity()
323
+ True
324
+
325
+ ::
326
+
327
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
328
+ sage: t = phi.ore_polring().gen()
329
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
330
+ sage: morphism.is_identity()
331
+ False
332
+ """
333
+ return self._ore_polynomial == 1
334
+
335
+ def is_isogeny(self):
336
+ r"""
337
+ Return ``True`` whether the morphism is an isogeny.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: Fq = GF(2)
342
+ sage: A.<T> = Fq[]
343
+ sage: K.<z6> = Fq.extension(6)
344
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
345
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
346
+ sage: t = phi.ore_polring().gen()
347
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
348
+ sage: morphism.is_isogeny()
349
+ True
350
+
351
+ ::
352
+
353
+ sage: zero_morphism = End(phi)(0)
354
+ sage: zero_morphism.is_isogeny()
355
+ False
356
+
357
+ ::
358
+
359
+ sage: identity_morphism = End(phi)(1)
360
+ sage: identity_morphism.is_isogeny()
361
+ True
362
+
363
+ ::
364
+
365
+ sage: frobenius_endomorphism = phi.frobenius_endomorphism()
366
+ sage: frobenius_endomorphism.is_isogeny()
367
+ True
368
+ """
369
+ return not self.is_zero()
370
+
371
+ def is_isomorphism(self):
372
+ r"""
373
+ Return ``True`` whether the morphism is an isomorphism.
374
+
375
+ EXAMPLES::
376
+
377
+ sage: Fq = GF(2)
378
+ sage: A.<T> = Fq[]
379
+ sage: K.<z6> = Fq.extension(6)
380
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
381
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
382
+ sage: t = phi.ore_polring().gen()
383
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
384
+ sage: morphism.is_isomorphism()
385
+ False
386
+
387
+ ::
388
+
389
+ sage: zero_morphism = End(phi)(0)
390
+ sage: zero_morphism.is_isomorphism()
391
+ False
392
+
393
+ ::
394
+
395
+ sage: identity_morphism = End(phi)(1)
396
+ sage: identity_morphism.is_isomorphism()
397
+ True
398
+
399
+ ::
400
+
401
+ sage: frobenius_endomorphism = phi.frobenius_endomorphism()
402
+ sage: frobenius_endomorphism.is_isomorphism()
403
+ False
404
+ """
405
+ return self.is_isogeny() and self._ore_polynomial.degree() == 0
406
+
407
+ def ore_polynomial(self):
408
+ r"""
409
+ Return the Ore polynomial that defines the morphism.
410
+
411
+ EXAMPLES::
412
+
413
+ sage: Fq = GF(2)
414
+ sage: A.<T> = Fq[]
415
+ sage: K.<z6> = Fq.extension(6)
416
+ sage: phi = DrinfeldModule(A, [z6, 1, 1])
417
+ sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
418
+ sage: t = phi.ore_polring().gen()
419
+ sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
420
+ sage: ore_pol = morphism.ore_polynomial()
421
+ sage: ore_pol
422
+ t + z6^5 + z6^2 + 1
423
+
424
+ ::
425
+
426
+ sage: ore_pol * phi(T) == psi(T) * ore_pol
427
+ True
428
+ """
429
+ return self._ore_polynomial
430
+
431
+ @coerce_binop
432
+ def __add__(self, other):
433
+ r"""
434
+ Return the sum of this morphism and ``other``.
435
+
436
+ INPUT:
437
+
438
+ - ``other`` -- a morphism of Drinfeld modules in the
439
+ same category
440
+
441
+ TESTS::
442
+
443
+ sage: Fq = GF(5)
444
+ sage: A.<T> = Fq[]
445
+ sage: K.<z> = Fq.extension(3)
446
+ sage: phi = DrinfeldModule(A, [z, 0, 1, z])
447
+ sage: t = phi.ore_variable()
448
+ sage: f = phi.hom(t + 1)
449
+ sage: g = T * f
450
+ sage: f + g # indirect doctest
451
+ Drinfeld Module morphism:
452
+ From: Drinfeld module defined by T |--> z*t^3 + t^2 + z
453
+ To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
454
+ Defn: (2*z^2 + 4*z + 4)*t^4 + (z + 1)*t^3 + t^2 + (2*z^2 + 4*z)*t + z + 1
455
+
456
+ We check that coercion from the function ring works::
457
+
458
+ sage: F = phi.frobenius_endomorphism()
459
+ sage: F + T
460
+ Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z
461
+ Defn: (z + 1)*t^3 + t^2 + z
462
+ """
463
+ return self.parent()(self.ore_polynomial() + other.ore_polynomial())
464
+
465
+ def _composition_(self, other, H):
466
+ r"""
467
+ Return the composite of this morphism and ``other``.
468
+
469
+ EXAMPLES::
470
+
471
+ sage: Fq = GF(2)
472
+ sage: A.<T> = Fq[]
473
+ sage: K.<z> = Fq.extension(3)
474
+ sage: phi = DrinfeldModule(A, [z, 1, z, z^2])
475
+ sage: f = phi.frobenius_endomorphism()
476
+ sage: f
477
+ Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
478
+ Defn: t^3
479
+ sage: f * f # indirect doctest
480
+ Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
481
+ Defn: t^6
482
+ """
483
+ return H(self.ore_polynomial() * other.ore_polynomial())
484
+
485
+ def inverse(self):
486
+ r"""
487
+ Return the inverse of this morphism.
488
+
489
+ Only morphisms defined by constant nonzero Ore
490
+ polynomials are invertible.
491
+
492
+ EXAMPLES::
493
+
494
+ sage: Fq = GF(5)
495
+ sage: A.<T> = Fq[]
496
+ sage: K.<z> = Fq.extension(3)
497
+ sage: phi = DrinfeldModule(A, [z, 1, z, z^2])
498
+ sage: f = phi.hom(2); f
499
+ Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
500
+ Defn: 2
501
+ sage: f.inverse()
502
+ Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
503
+ Defn: 3
504
+
505
+ Inversion of general isomorphisms between different Drinfeld modules
506
+ also works::
507
+
508
+ sage: g = phi.hom(z); g
509
+ Drinfeld Module morphism:
510
+ From: Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
511
+ To: Drinfeld module defined by T |--> z^2*t^3 + (z^2 + 2*z + 3)*t^2 + (z^2 + 3*z)*t + z
512
+ Defn: z
513
+ sage: g.inverse()
514
+ Drinfeld Module morphism:
515
+ From: Drinfeld module defined by T |--> z^2*t^3 + (z^2 + 2*z + 3)*t^2 + (z^2 + 3*z)*t + z
516
+ To: Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
517
+ Defn: 3*z^2 + 4
518
+
519
+ When the morphism is not invertible, an error is raised::
520
+
521
+ sage: F = phi.frobenius_endomorphism()
522
+ sage: F.inverse()
523
+ Traceback (most recent call last):
524
+ ...
525
+ ZeroDivisionError: this morphism is not invertible
526
+ """
527
+ return self.__invert__()
528
+
529
+ def __invert__(self):
530
+ r"""
531
+ Return the inverse of this morphism.
532
+
533
+ TESTS::
534
+
535
+ sage: Fq = GF(5)
536
+ sage: A.<T> = Fq[]
537
+ sage: K.<z> = Fq.extension(3)
538
+ sage: coeffs = [z] + [K.random_element() for _ in range(10)]
539
+ sage: phi = DrinfeldModule(A, coeffs)
540
+ sage: a = K.random_element()
541
+ sage: while a.is_zero():
542
+ ....: a = K.random_element()
543
+ sage: f = phi.hom(a)
544
+ sage: g = ~f
545
+ sage: (f*g).is_identity()
546
+ True
547
+ sage: (g*f).is_identity()
548
+ True
549
+ """
550
+ if not self.is_isomorphism():
551
+ raise ZeroDivisionError("this morphism is not invertible")
552
+ H = self.codomain().Hom(self.domain())
553
+ return H(~(self.ore_polynomial()[0]))
554
+
555
+ def _motive_matrix(self):
556
+ r"""
557
+ Return the matrix giving the action of this morphism
558
+ on the motives of the underlying Drinfeld modules.
559
+
560
+ For internal use. Do not call this method directly.
561
+
562
+ EXAMPLES::
563
+
564
+ sage: Fq = GF(5)
565
+ sage: A.<T> = Fq[]
566
+ sage: K.<z> = Fq.extension(3)
567
+ sage: phi = DrinfeldModule(A, [z, 0, 1])
568
+ sage: t = phi.ore_variable()
569
+ sage: u = t^2 + (2*z^2 + 3*z + 3)*t + (2*z + 3)
570
+ sage: f = phi.hom(u)
571
+ sage: f._motive_matrix()
572
+ [ T + 3 + z 3 + 3*z + 2*z^2]
573
+ [(1 + z + z^2)*T + 3 + 2*z - z^2 T + 2 - z + 2*z^2]
574
+ """
575
+ phi = self.domain()
576
+ phiT = phi.gen()
577
+ r = phiT.degree()
578
+ K = phi.base_over_constants_field()
579
+ S = phi.ore_polring()
580
+ Frob = S.twisting_morphism()
581
+ KT = PolynomialRing(K, name='T')
582
+
583
+ # The first row:
584
+ # we write u = u0 + u1*phiT + u2*phiT^2 + ...
585
+ u = self.ore_polynomial()
586
+ us = [ ]
587
+ while not u.is_zero():
588
+ u, ui = u.right_quo_rem(phiT)
589
+ us.append(ui)
590
+ l = len(us)
591
+ row = [KT([us[i][j] for i in range(l)]) for j in range(r)]
592
+ rows = [row]
593
+
594
+ # The next rows:
595
+ # each row is obtained from the previous one by
596
+ # applying the semi-linear transformation f |-> t*f
597
+ inv = K(phiT[r]).inverse()
598
+ B = inv * phiT
599
+ T = KT.gen()
600
+ for i in range(1, r):
601
+ twist = [c.map_coefficients(Frob) for c in row]
602
+ row = [(inv*T - B[0]) * twist[-1]]
603
+ row += [twist[j-1] - B[j]*twist[-1] for j in range(1, r)]
604
+ rows.append(row)
605
+
606
+ return matrix(KT, rows)
607
+
608
+ def norm(self, ideal=True):
609
+ r"""
610
+ Return the norm of this isogeny.
611
+
612
+ INPUT:
613
+
614
+ - ``ideal`` -- boolean (default: ``True``); if ``True``, return the
615
+ norm as an ideal in the function ring of the Drinfeld modules; if
616
+ ``False``, return the norm as an element in this function ring (only
617
+ relevant for endomorphisms)
618
+
619
+ EXAMPLES::
620
+
621
+ sage: Fq = GF(5)
622
+ sage: A.<T> = Fq[]
623
+ sage: K.<z> = Fq.extension(3)
624
+ sage: phi = DrinfeldModule(A, [z, 0, 1, z])
625
+ sage: t = phi.ore_variable()
626
+ sage: f = phi.hom(t + 1)
627
+ sage: f.norm()
628
+ Principal ideal (T + 4) of Univariate Polynomial Ring in T over Finite Field of size 5
629
+
630
+ The norm of the Frobenius endomorphism is equal to the characteristic::
631
+
632
+ sage: F = phi.frobenius_endomorphism()
633
+ sage: F.norm()
634
+ Principal ideal (T^3 + 3*T + 3) of Univariate Polynomial Ring in T over Finite Field of size 5
635
+ sage: phi.characteristic()
636
+ T^3 + 3*T + 3
637
+
638
+ For `a` in the underlying function ring, the norm of the
639
+ endomorphism given by `\phi_a` is `a^r` where `r` is the rank::
640
+
641
+ sage: g = phi.hom(T)
642
+ sage: g.norm()
643
+ Principal ideal (T^3) of Univariate Polynomial Ring in T over Finite Field of size 5
644
+
645
+ sage: h = phi.hom(T+1)
646
+ sage: h.norm()
647
+ Principal ideal (T^3 + 3*T^2 + 3*T + 1) of Univariate Polynomial Ring in T over Finite Field of size 5
648
+
649
+ For endomorphisms, the norm is not an ideal of `A` but it makes
650
+ sense as an actual element of `A`. We can get this element by passing
651
+ in the argument ``ideal=False``::
652
+
653
+ sage: phi.hom(2*T).norm(ideal=False)
654
+ 3*T^3
655
+
656
+ sage: f.norm(ideal=False)
657
+ Traceback (most recent call last):
658
+ ...
659
+ ValueError: norm is defined as an actual element only for endomorphisms
660
+ """
661
+ nu = self._motive_matrix().det()
662
+ # We cast to A
663
+ A = self.domain().function_ring()
664
+ if ideal:
665
+ nu = A([c.in_base() for c in nu.monic().list()])
666
+ return A.ideal(nu)
667
+ elif self.domain() is self.codomain():
668
+ return A([c.in_base() for c in nu.list()])
669
+ else:
670
+ raise ValueError("norm is defined as an actual element only for endomorphisms")
671
+
672
+ def dual_isogeny(self):
673
+ r"""
674
+ Return a dual isogeny to this morphism.
675
+
676
+ By definition, a dual isogeny of `f : \phi \to \psi` is an
677
+ isogeny `g : \psi \to \phi` such that the composite `g \circ f`
678
+ is the multiplication by a generator of the norm of `f`.
679
+
680
+ EXAMPLES::
681
+
682
+ sage: Fq = GF(5)
683
+ sage: A.<T> = Fq[]
684
+ sage: K.<z> = Fq.extension(3)
685
+ sage: phi = DrinfeldModule(A, [z, 0, 1, z])
686
+ sage: t = phi.ore_variable()
687
+ sage: f = phi.hom(t + 1)
688
+ sage: f
689
+ Drinfeld Module morphism:
690
+ From: Drinfeld module defined by T |--> z*t^3 + t^2 + z
691
+ To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
692
+ Defn: t + 1
693
+ sage: g = f.dual_isogeny()
694
+ sage: g
695
+ Drinfeld Module morphism:
696
+ From: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
697
+ To: Drinfeld module defined by T |--> z*t^3 + t^2 + z
698
+ Defn: z*t^2 + (4*z + 1)*t + z + 4
699
+
700
+ We check that `f \circ g` (resp. `g \circ f`) is the multiplication
701
+ by the norm of `f`::
702
+
703
+ sage: a = f.norm().gen(); a
704
+ T + 4
705
+ sage: g * f == phi.hom(a)
706
+ True
707
+
708
+ sage: psi = f.codomain()
709
+ sage: f * g == psi.hom(a)
710
+ True
711
+
712
+ TESTS::
713
+
714
+ sage: zero = phi.hom(0)
715
+ sage: zero.dual_isogeny()
716
+ Traceback (most recent call last):
717
+ ...
718
+ ValueError: the dual isogeny of the zero morphism is not defined
719
+ """
720
+ if not self.is_isogeny():
721
+ raise ValueError("the dual isogeny of the zero morphism is not defined")
722
+ nu = self._motive_matrix().det().monic()
723
+ A = self.domain().function_ring()
724
+ nu = A([c.in_base() for c in nu.list()])
725
+ dual = self.domain()(nu) // self.ore_polynomial()
726
+ return self.codomain().hom(dual, codomain=self.domain())
727
+
728
+ def characteristic_polynomial(self, var='X'):
729
+ r"""
730
+ Return the characteristic polynomial of this endomorphism.
731
+
732
+ INPUT:
733
+
734
+ - ``var`` -- string (default: ``X``), the name of the
735
+ variable of the characteristic polynomial
736
+
737
+ EXAMPLES::
738
+
739
+ sage: Fq = GF(5)
740
+ sage: A.<T> = Fq[]
741
+ sage: K.<z> = Fq.extension(3)
742
+ sage: phi = DrinfeldModule(A, [z, 0, 1, z])
743
+
744
+ sage: f = phi.frobenius_endomorphism()
745
+ sage: f.characteristic_polynomial()
746
+ X^3 + (T + 1)*X^2 + (2*T + 3)*X + 2*T^3 + T + 1
747
+
748
+ We verify, on an example, that the characteristic polynomial
749
+ of a morphism corresponding to `\phi_a` is `(X-a)^r` where `r`
750
+ is the rank::
751
+
752
+ sage: g = phi.hom(T^2 + 1)
753
+ sage: chi = g.characteristic_polynomial()
754
+ sage: chi.factor() # needs sage.libs.singular
755
+ (X + 4*T^2 + 4)^3
756
+
757
+ An example with another variable name::
758
+
759
+ sage: f.characteristic_polynomial(var='Y')
760
+ Y^3 + (T + 1)*Y^2 + (2*T + 3)*Y + 2*T^3 + T + 1
761
+
762
+ TESTS::
763
+
764
+ sage: t = phi.ore_variable()
765
+ sage: isog = phi.hom(t + 1)
766
+ sage: isog.characteristic_polynomial()
767
+ Traceback (most recent call last):
768
+ ...
769
+ ValueError: characteristic polynomial is only defined for endomorphisms
770
+ """
771
+ if self.domain() is not self.codomain():
772
+ raise ValueError("characteristic polynomial is only defined for endomorphisms")
773
+ P = self._motive_matrix().charpoly()
774
+ # We cast to the correct parent
775
+ A = self.domain().function_ring()
776
+ parent = PolynomialRing(A, name=var)
777
+ return parent([A([c.in_base() for c in co.list()]) for co in P.list()])
778
+
779
+ def charpoly(self, var='X'):
780
+ r"""
781
+ Return the characteristic polynomial of this endomorphism.
782
+
783
+ INPUT:
784
+
785
+ - ``var`` -- string (default: ``'X'``); the name of the
786
+ variable of the characteristic polynomial
787
+
788
+ EXAMPLES::
789
+
790
+ sage: Fq = GF(5)
791
+ sage: A.<T> = Fq[]
792
+ sage: K.<z> = Fq.extension(3)
793
+ sage: phi = DrinfeldModule(A, [z, 0, 1, z])
794
+
795
+ sage: f = phi.frobenius_endomorphism()
796
+ sage: chi = f.charpoly()
797
+ sage: chi
798
+ X^3 + (T + 1)*X^2 + (2*T + 3)*X + 2*T^3 + T + 1
799
+
800
+ We check that the characteristic polynomial annihilates the
801
+ morphism (Cayley-Hamilton's theorem)::
802
+
803
+ sage: chi(f)
804
+ Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z
805
+ Defn: 0
806
+
807
+ We verify, on an example, that the characteristic polynomial
808
+ of the morphism corresponding to `\phi_a` is `(X-a)^r` where `r`
809
+ is the rank::
810
+
811
+ sage: g = phi.hom(T^2 + 1)
812
+ sage: g.charpoly().factor() # needs sage.libs.singular
813
+ (X + 4*T^2 + 4)^3
814
+
815
+ An example with another variable name::
816
+
817
+ sage: f.charpoly(var='Y')
818
+ Y^3 + (T + 1)*Y^2 + (2*T + 3)*Y + 2*T^3 + T + 1
819
+ """
820
+ return self.characteristic_polynomial(var)