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,908 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat
3
+ r"""
4
+ Univariate skew polynomial rings
5
+
6
+ This module provides the
7
+ :class:`~sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing`.
8
+ In the class hierarchy in Sage, the locution *Skew Polynomial* is used
9
+ for a Ore polynomial without twisting derivation.
10
+
11
+ This module also provides:
12
+
13
+ - the class :class:`~sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing_finite_order`,
14
+ which is a specialized class for skew polynomial rings over fields
15
+ equipped with an automorphism of finite order. It inherits from
16
+ :class:`~sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing`
17
+ but contains more methods and provides better algorithms.
18
+
19
+ - the class :class:`~sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing_finite_field`,
20
+ which is a specialized class for skew polynomial rings over finite fields.
21
+
22
+ .. SEEALSO::
23
+
24
+ :class:`~sage.rings.polynomial.ore_polynomial_ring.OrePolynomialRing`
25
+
26
+ AUTHOR:
27
+
28
+ - Xavier Caruso (2012-06-29): initial version
29
+
30
+ - Arpit Merchant (2016-08-04): improved docstrings, fixed doctests
31
+ and refactored classes and methods
32
+
33
+ - Johan Rosenkilde (2016-08-03): changes for bug fixes, docstring and
34
+ doctest errors
35
+ """
36
+
37
+ # ***************************************************************************
38
+ # Copyright (C) 2012 Xavier Caruso <xavier.caruso@normalesup.org>
39
+ #
40
+ # This program is free software: you can redistribute it and/or modify
41
+ # it under the terms of the GNU General Public License as published by
42
+ # the Free Software Foundation, either version 2 of the License, or
43
+ # (at your option) any later version.
44
+ # https://www.gnu.org/licenses/
45
+ # ***************************************************************************
46
+
47
+ from sage.structure.richcmp import op_EQ, op_NE
48
+ from sage.structure.category_object import normalize_names
49
+
50
+ from sage.categories.fields import Fields
51
+ from sage.matrix.matrix_space import MatrixSpace
52
+
53
+ from sage.rings.morphism import RingHomomorphism
54
+ from sage.categories.homset import Hom
55
+ from sage.categories.map import Section
56
+
57
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
58
+ from sage.rings.polynomial.ore_polynomial_ring import OrePolynomialRing
59
+
60
+ WORKING_CENTER_MAX_TRIES = 1000
61
+
62
+
63
+ # Helper functions
64
+
65
+ def _base_ring_to_fraction_field(S):
66
+ r"""
67
+ Return the unique skew polynomial ring over the fraction field of
68
+ ``S.base_ring()`` which has ``S`` a sub-ring (internal method).
69
+
70
+ INPUT:
71
+
72
+ - ``S`` -- a skew polynomial ring
73
+
74
+ OUTPUT:
75
+
76
+ - ``Q`` -- the skew polynomial ring over the fraction field
77
+ of ``S.base_ring``
78
+
79
+ EXAMPLES::
80
+
81
+ sage: from sage.rings.polynomial.skew_polynomial_ring import _base_ring_to_fraction_field
82
+ sage: R.<t> = ZZ[]
83
+ sage: sigma = R.hom([t + 1])
84
+ sage: S.<x> = R['x', sigma]
85
+ sage: _base_ring_to_fraction_field(S)
86
+ Ore Polynomial Ring in x over Fraction Field of Univariate Polynomial Ring in t over Integer Ring twisted by t |--> t + 1
87
+ """
88
+ R = S.base_ring()
89
+ if R in Fields():
90
+ return S
91
+
92
+ Q = R.fraction_field()
93
+ gens = R.gens()
94
+ sigmaS = S.twisting_morphism()
95
+ sigmaQ = Q.hom([Q(sigmaS(g)) for g in gens])
96
+ return Q[S.variable_name(), sigmaQ]
97
+
98
+
99
+ def _minimal_vanishing_polynomial(R, eval_pts):
100
+ r"""
101
+ Return the minimal vanishing polynomial (internal function).
102
+
103
+ See the documentation for
104
+ :meth:`SkewPolynomialRing.minimal_vanishing_polynomial` for a description.
105
+
106
+ INPUT:
107
+
108
+ - ``R`` -- a skew polynomial ring over a field
109
+
110
+ - ``eval_pts`` -- list of evaluation points
111
+
112
+ OUTPUT: the minimal vanishing polynomial
113
+
114
+ EXAMPLES::
115
+
116
+ sage: # needs sage.rings.finite_rings
117
+ sage: from sage.rings.polynomial.skew_polynomial_ring import _minimal_vanishing_polynomial
118
+ sage: k.<t> = GF(5^3)
119
+ sage: Frob = k.frobenius_endomorphism()
120
+ sage: S.<x> = k['x',Frob]
121
+ sage: eval_pts = [1, t, t^2]
122
+ sage: b = _minimal_vanishing_polynomial(S, eval_pts); b
123
+ doctest:...: FutureWarning: This class/method/function is marked as experimental.
124
+ It, its functionality or its interface might change without a formal deprecation.
125
+ See https://github.com/sagemath/sage/issues/13215 for details.
126
+ x^3 + 4
127
+ """
128
+ l = len(eval_pts)
129
+ if l == 0:
130
+ return R.one()
131
+ elif l == 1:
132
+ e = eval_pts[0]
133
+ if e.is_zero():
134
+ return R.one()
135
+ else:
136
+ return R.gen() - R.twisting_morphism()(e) / e
137
+ else:
138
+ t = l // 2
139
+ A = eval_pts[:t]
140
+ B = eval_pts[t:]
141
+ M_A = _minimal_vanishing_polynomial(R, A)
142
+ B_moved = M_A.multi_point_evaluation(B)
143
+ M_at_B_moved = _minimal_vanishing_polynomial(R, B_moved)
144
+ return M_at_B_moved * M_A
145
+
146
+
147
+ def _lagrange_polynomial(R, eval_pts, values):
148
+ r"""
149
+ Return the Lagrange polynomial of the given points if it exists.
150
+
151
+ Otherwise return an unspecified polynomial (internal method).
152
+
153
+ See the documentation for
154
+ :meth:`SkewPolynomialRing.lagrange_polynomial` for a description
155
+ of Lagrange polynomial.
156
+
157
+ INPUT:
158
+
159
+ - ``R`` -- a skew polynomial ring over a field
160
+
161
+ - ``eval_pts`` -- list of evaluation points
162
+
163
+ - ``values`` -- list of values that the Lagrange polynomial takes
164
+ at the respective ``eval_pts``
165
+
166
+ OUTPUT: the Lagrange polynomial
167
+
168
+ EXAMPLES::
169
+
170
+ sage: # needs sage.rings.finite_rings
171
+ sage: from sage.rings.polynomial.skew_polynomial_ring import _lagrange_polynomial
172
+ sage: k.<t> = GF(5^3)
173
+ sage: Frob = k.frobenius_endomorphism()
174
+ sage: S.<x> = k['x', Frob]
175
+ sage: eval_pts = [t , t^2]
176
+ sage: values = [3*t^2 + 4*t + 4, 4*t]
177
+ sage: d = _lagrange_polynomial(S, eval_pts, values); d
178
+ x + t
179
+ sage: d.multi_point_evaluation(eval_pts) == values
180
+ True
181
+
182
+ The following restrictions are impossible to satisfy because the evaluation
183
+ points are linearly dependent over the fixed field of the twisting morphism, and the
184
+ corresponding values do not match::
185
+
186
+ sage: eval_pts = [t, 2*t] # needs sage.rings.finite_rings
187
+ sage: values = [1, 3]
188
+ sage: _lagrange_polynomial(S, eval_pts, values) # needs sage.rings.finite_rings
189
+ Traceback (most recent call last):
190
+ ...
191
+ ValueError: the given evaluation points are linearly dependent over the fixed field of the twisting morphism,
192
+ so a Lagrange polynomial could not be determined (and might not exist)
193
+ """
194
+ l = len(eval_pts)
195
+ if l == 1:
196
+ if eval_pts[0].is_zero():
197
+ # This is due to linear dependence among the eval_pts.
198
+ raise ValueError("the given evaluation points are linearly dependent"
199
+ " over the fixed field of the twisting morphism,"
200
+ " so a Lagrange polynomial could not be determined"
201
+ " (and might not exist)")
202
+ return (values[0] / eval_pts[0]) * R.one()
203
+ else:
204
+ t = l // 2
205
+ A = eval_pts[:t]
206
+ B = eval_pts[t:]
207
+ M_A = _minimal_vanishing_polynomial(R, A)
208
+ M_B = _minimal_vanishing_polynomial(R, B)
209
+ A_ = M_B.multi_point_evaluation(A)
210
+ B_ = M_A.multi_point_evaluation(B)
211
+ I_1 = _lagrange_polynomial(R, A_, values[:t])
212
+ I_2 = _lagrange_polynomial(R, B_, values[t:])
213
+ return I_1 * M_B + I_2 * M_A
214
+
215
+
216
+ # Generic implementation of skew polynomial rings
217
+ #################################################
218
+
219
+ class SkewPolynomialRing(OrePolynomialRing):
220
+ def __init__(self, base_ring, morphism, derivation, name, sparse, category=None):
221
+ r"""
222
+ Initialize ``self``.
223
+
224
+ INPUT:
225
+
226
+ - ``base_ring`` -- a commutative ring
227
+
228
+ - ``twisting_morphism`` -- an automorphism of the base ring
229
+
230
+ - ``name`` -- string or list of strings representing the name of
231
+ the variables of ring
232
+
233
+ - ``sparse`` -- boolean (default: ``False``)
234
+
235
+ - ``category`` -- a category
236
+
237
+ EXAMPLES::
238
+
239
+ sage: R.<t> = ZZ[]
240
+ sage: sigma = R.hom([t + 1])
241
+ sage: S.<x> = SkewPolynomialRing(R,sigma)
242
+ sage: S.category()
243
+ Category of algebras over Univariate Polynomial Ring in t over Integer Ring
244
+ sage: S([1]) + S([-1])
245
+ 0
246
+ sage: TestSuite(S).run()
247
+ """
248
+ if derivation is not None:
249
+ raise NotImplementedError
250
+ if self.Element is None:
251
+ import sage.rings.polynomial.skew_polynomial_element
252
+ self.Element = sage.rings.polynomial.skew_polynomial_element.SkewPolynomial_generic_dense
253
+ OrePolynomialRing.__init__(self, base_ring, morphism, None, name, sparse, category)
254
+
255
+ def minimal_vanishing_polynomial(self, eval_pts):
256
+ r"""
257
+ Return the minimal-degree, monic skew polynomial which vanishes at all
258
+ the given evaluation points.
259
+
260
+ The degree of the vanishing polynomial is at most the length of
261
+ ``eval_pts``. Equality holds if and only if the elements of
262
+ ``eval_pts`` are linearly independent over the fixed field of
263
+ ``self.twisting_morphism()``.
264
+
265
+ - ``eval_pts`` -- list of evaluation points which are linearly
266
+ independent over the fixed field of the twisting morphism of
267
+ the associated skew polynomial ring
268
+
269
+ OUTPUT: the minimal vanishing polynomial
270
+
271
+ EXAMPLES::
272
+
273
+ sage: # needs sage.rings.finite_rings
274
+ sage: k.<t> = GF(5^3)
275
+ sage: Frob = k.frobenius_endomorphism()
276
+ sage: S.<x> = k['x', Frob]
277
+ sage: eval_pts = [1, t, t^2]
278
+ sage: b = S.minimal_vanishing_polynomial(eval_pts); b
279
+ x^3 + 4
280
+
281
+ The minimal vanishing polynomial evaluates to 0 at each of
282
+ the evaluation points::
283
+
284
+ sage: eval = b.multi_point_evaluation(eval_pts); eval # needs sage.rings.finite_rings
285
+ [0, 0, 0]
286
+
287
+ If the evaluation points are linearly dependent over the fixed
288
+ field of the twisting morphism, then the returned polynomial has
289
+ lower degree than the number of evaluation points::
290
+
291
+ sage: S.minimal_vanishing_polynomial([t]) # needs sage.rings.finite_rings
292
+ x + 3*t^2 + 3*t
293
+ sage: S.minimal_vanishing_polynomial([t, 3*t]) # needs sage.rings.finite_rings
294
+ x + 3*t^2 + 3*t
295
+ """
296
+ return _minimal_vanishing_polynomial(_base_ring_to_fraction_field(self), eval_pts)
297
+
298
+ def lagrange_polynomial(self, points):
299
+ r"""
300
+ Return the minimal-degree polynomial which interpolates the given
301
+ points.
302
+
303
+ More precisely, given `n` pairs `(x_1, y_1), \ldots, (x_n, y_n) \in R^2`,
304
+ where `R` is ``self.base_ring()``, compute a skew polynomial `p(x)`
305
+ such that `p(x_i) = y_i` for each `i`, under the condition that
306
+ the `x_i` are linearly independent over the fixed field of
307
+ ``self.twisting_morphism()``.
308
+
309
+ If the `x_i` are linearly independent over the fixed field of
310
+ ``self.twisting_morphism()`` then such a polynomial is guaranteed
311
+ to exist. Otherwise, it might exist depending on the `y_i`, but
312
+ the algorithm used in this implementation does not support that,
313
+ and so an error is always raised.
314
+
315
+ INPUT:
316
+
317
+ - ``points`` -- list of pairs `(x_1, y_1), \ldots, (x_n, y_n)` of
318
+ elements of the base ring of ``self``; the `x_i` should be linearly
319
+ independent over the fixed field of ``self.twisting_morphism()``
320
+
321
+ OUTPUT: the Lagrange polynomial
322
+
323
+ EXAMPLES::
324
+
325
+ sage: # needs sage.rings.finite_rings
326
+ sage: k.<t> = GF(5^3)
327
+ sage: Frob = k.frobenius_endomorphism()
328
+ sage: S.<x> = k['x', Frob]
329
+ sage: points = [(t, 3*t^2 + 4*t + 4), (t^2, 4*t)]
330
+ sage: d = S.lagrange_polynomial(points); d
331
+ x + t
332
+
333
+ sage: R.<t> = ZZ[]
334
+ sage: sigma = R.hom([t + 1])
335
+ sage: T.<x> = R['x', sigma]
336
+ sage: points = [(1, t^2 + 3*t + 4), (t, 2*t^2 + 3*t + 1), (t^2, t^2 + 3*t + 4)]
337
+ sage: p = T.lagrange_polynomial(points); p
338
+ ((-t^4 - 2*t - 3)/-2)*x^2 + (-t^4 - t^3 - t^2 - 3*t - 2)*x
339
+ + (-t^4 - 2*t^3 - 4*t^2 - 10*t - 9)/-2
340
+ sage: p.multi_point_evaluation([1, t, t^2]) == [t^2 + 3*t + 4, 2*t^2 + 3*t + 1, t^2 + 3*t + 4]
341
+ True
342
+
343
+ If the `x_i` are linearly dependent over the fixed field of
344
+ ``self.twisting_morphism()``, then an error is raised::
345
+
346
+ sage: T.lagrange_polynomial([(t, 1), (2*t, 3)])
347
+ Traceback (most recent call last):
348
+ ...
349
+ ValueError: the given evaluation points are linearly dependent over the fixed field of the twisting morphism,
350
+ so a Lagrange polynomial could not be determined (and might not exist)
351
+ """
352
+ l = len(points)
353
+ if not all(len(pair) == 2 for pair in points):
354
+ raise TypeError("supplied points must be pairs of elements of base ring")
355
+ eval_pts = [x for (x, _) in points]
356
+ values = [y for (_, y) in points]
357
+
358
+ if l > len(set(eval_pts)):
359
+ raise TypeError("the evaluation points must be distinct")
360
+ zero_i = [i for i in range(l) if eval_pts[i].is_zero()]
361
+ if zero_i and not values[zero_i[0]].is_zero():
362
+ raise TypeError("a skew polynomial always evaluates to 0 at 0, but a nonzero value was requested")
363
+
364
+ return _lagrange_polynomial(_base_ring_to_fraction_field(self), eval_pts, values)
365
+
366
+
367
+ # Special classes for twisting morphisms with finite order
368
+ ##########################################################
369
+
370
+ class SectionSkewPolynomialCenterInjection(Section):
371
+ r"""
372
+ Section of the canonical injection of the center of a skew
373
+ polynomial ring into this ring.
374
+
375
+ TESTS::
376
+
377
+ sage: # needs sage.rings.finite_rings
378
+ sage: k.<a> = GF(5^3)
379
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
380
+ sage: Z = S.center()
381
+ sage: iota = S.convert_map_from(Z)
382
+ sage: sigma = iota.section()
383
+ sage: TestSuite(sigma).run(skip=['_test_category'])
384
+ """
385
+ def _call_(self, x):
386
+ r"""
387
+ Return `x` viewed as an element of the center.
388
+
389
+ EXAMPLES::
390
+
391
+ sage: # needs sage.rings.finite_rings
392
+ sage: k.<a> = GF(5^3)
393
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
394
+ sage: Z = S.center()
395
+ sage: iota = S.convert_map_from(Z)
396
+ sage: sigma = iota.section()
397
+ sage: sigma(x^3)
398
+ z
399
+ sage: sigma(x^2)
400
+ Traceback (most recent call last):
401
+ ...
402
+ ValueError: x^2 is not in the center
403
+ """
404
+ order = self.inverse()._order
405
+ section = self.inverse()._embed.section()
406
+ lx = x.list()
407
+ l = []
408
+ mod = 0
409
+ for c in lx:
410
+ if mod == 0:
411
+ l.append(section(c))
412
+ else:
413
+ if not c.is_zero():
414
+ raise ValueError("%s is not in the center" % x)
415
+ mod += 1
416
+ if mod == order:
417
+ mod = 0
418
+ return self.codomain()(l)
419
+
420
+ def _richcmp_(self, right, op):
421
+ r"""
422
+ Compare this morphism with ``right``.
423
+
424
+ TESTS::
425
+
426
+ sage: # needs sage.rings.finite_rings
427
+ sage: k.<a> = GF(5^3)
428
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
429
+ sage: Z = S.center()
430
+ sage: iota = S.convert_map_from(Z)
431
+ sage: sigma = iota.section()
432
+ sage: s = loads(dumps(sigma))
433
+ sage: s == sigma
434
+ True
435
+ sage: s != sigma
436
+ False
437
+ sage: s is sigma
438
+ False
439
+ """
440
+ if op == op_EQ:
441
+ return (self.domain() is right.domain()) and (self.codomain() is right.codomain())
442
+ if op == op_NE:
443
+ return (self.domain() is not right.domain()) or (self.codomain() is not right.codomain())
444
+ return NotImplemented
445
+
446
+
447
+ class SkewPolynomialCenterInjection(RingHomomorphism):
448
+ r"""
449
+ Canonical injection of the center of a skew polynomial ring
450
+ into this ring.
451
+
452
+ TESTS::
453
+
454
+ sage: # needs sage.rings.finite_rings
455
+ sage: k.<a> = GF(5^3)
456
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
457
+ sage: Z = S.center()
458
+ sage: iota = S.convert_map_from(Z)
459
+ sage: TestSuite(iota).run(skip=['_test_category'])
460
+ """
461
+ def __init__(self, domain, codomain, embed, order):
462
+ r"""
463
+ Initialize this morphism.
464
+
465
+ EXAMPLES::
466
+
467
+ sage: # needs sage.rings.finite_rings
468
+ sage: k.<a> = GF(5^3)
469
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
470
+ sage: Z = S.center()
471
+ sage: S.convert_map_from(Z) # indirect doctest
472
+ Embedding of the center of Ore Polynomial Ring in x over Finite Field in a of size 5^3 twisted by a |--> a^5 into this ring
473
+ """
474
+ RingHomomorphism.__init__(self, Hom(domain, codomain))
475
+ self._embed = embed
476
+ self._order = order
477
+ self._codomain = codomain
478
+ self._section = SectionSkewPolynomialCenterInjection(self)
479
+
480
+ def _repr_(self):
481
+ r"""
482
+ Return a string representation of this morphism.
483
+
484
+ EXAMPLES::
485
+
486
+ sage: # needs sage.rings.finite_rings
487
+ sage: k.<a> = GF(5^3)
488
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
489
+ sage: Z = S.center()
490
+ sage: iota = S.convert_map_from(Z)
491
+ sage: iota
492
+ Embedding of the center of Ore Polynomial Ring in x over Finite Field in a of size 5^3 twisted by a |--> a^5 into this ring
493
+ sage: iota._repr_()
494
+ 'Embedding of the center of Ore Polynomial Ring in x over Finite Field in a of size 5^3 twisted by a |--> a^5 into this ring'
495
+ """
496
+ return "Embedding of the center of %s into this ring" % self._codomain
497
+
498
+ def _call_(self, x):
499
+ r"""
500
+ Return the image of `x` by this morphism.
501
+
502
+ TESTS::
503
+
504
+ sage: # needs sage.rings.finite_rings
505
+ sage: k.<a> = GF(5^3)
506
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
507
+ sage: Z.<z> = S.center()
508
+ sage: iota = S.convert_map_from(Z)
509
+ sage: iota(z)
510
+ x^3
511
+ """
512
+ k = self._codomain.base_ring()
513
+ l = []
514
+ lz = [k(0)] * (self._order - 1)
515
+ for c in x.list():
516
+ l += [self._embed(c)] + lz
517
+ return self._codomain(l)
518
+
519
+ def _richcmp_(self, right, op):
520
+ r"""
521
+ Compare this morphism with ``right``.
522
+
523
+ TESTS::
524
+
525
+ sage: # needs sage.rings.finite_rings
526
+ sage: k.<a> = GF(5^3)
527
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
528
+ sage: Z = S.center()
529
+ sage: iota = S.convert_map_from(Z)
530
+ sage: i = loads(dumps(iota))
531
+ sage: i == iota
532
+ True
533
+ sage: i != iota
534
+ False
535
+ sage: i is iota
536
+ False
537
+ """
538
+ if op == op_EQ:
539
+ return (self.domain() is right.domain()) and (self.codomain() is right.codomain())
540
+ if op == op_NE:
541
+ return (self.domain() is not right.domain()) or (self.codomain() is not right.codomain())
542
+ return NotImplemented
543
+
544
+ def section(self):
545
+ r"""
546
+ Return a section of this morphism.
547
+
548
+ EXAMPLES::
549
+
550
+ sage: # needs sage.rings.finite_rings
551
+ sage: k.<a> = GF(5^3)
552
+ sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
553
+ sage: Z = S.center()
554
+ sage: iota = S.convert_map_from(Z)
555
+ sage: sigma = iota.section()
556
+ sage: sigma(x^3)
557
+ z
558
+ """
559
+ return self._section
560
+
561
+
562
+ class SkewPolynomialRing_finite_order(SkewPolynomialRing):
563
+ """
564
+ A specialized class for skew polynomial rings whose twising morphism
565
+ has finite order.
566
+
567
+ .. SEEALSO::
568
+
569
+ - :class:`sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing`
570
+ - :mod:`sage.rings.polynomial.skew_polynomial_finite_order`
571
+ """
572
+ def __init__(self, base_ring, morphism, derivation, name, sparse, category=None):
573
+ r"""
574
+ Initialize this skew polynomial ring.
575
+
576
+ TESTS::
577
+
578
+ sage: # needs sage.rings.finite_rings
579
+ sage: k.<t> = GF(5^3)
580
+ sage: Frob = k.frobenius_endomorphism()
581
+ sage: S.<x> = k['x', Frob]; S
582
+ Ore Polynomial Ring in x over Finite Field in t of size 5^3 twisted by t |--> t^5
583
+ sage: S.category()
584
+ Category of algebras over Finite Field in t of size 5^3
585
+ sage: TestSuite(S).run()
586
+
587
+ We check that a call to the method
588
+ :meth:`sage.rings.polynomial.skew_polynomial_finite_order.SkewPolynomial_finite_order.is_central`
589
+ does not affect the behaviour of default central variable names::
590
+
591
+ sage: # needs sage.rings.finite_rings
592
+ sage: k.<a> = GF(7^4)
593
+ sage: phi = k.frobenius_endomorphism()
594
+ sage: S.<x> = k['x', phi]
595
+ sage: (x^4).is_central()
596
+ True
597
+ sage: Z.<u> = S.center()
598
+ sage: S.center() is Z
599
+ True
600
+ """
601
+ if self.Element is None:
602
+ import sage.rings.polynomial.skew_polynomial_finite_order
603
+ self.Element = sage.rings.polynomial.skew_polynomial_finite_order.SkewPolynomial_finite_order_dense
604
+ if self._fraction_field_class is None:
605
+ from sage.rings.polynomial.ore_function_field import OreFunctionField_with_large_center
606
+ self._fraction_field_class = OreFunctionField_with_large_center
607
+ SkewPolynomialRing.__init__(self, base_ring, morphism, derivation, name, sparse, category)
608
+ self._order = morphism.order()
609
+ (self._constants, self._embed_constants) = morphism.fixed_field()
610
+
611
+ # Configure and create center
612
+ self._center = {}
613
+ self._center_variable_name = 'z'
614
+ for i in range(WORKING_CENTER_MAX_TRIES):
615
+ try:
616
+ self._working_center = self.center()
617
+ self._center_variable_name = None
618
+ break
619
+ except ValueError:
620
+ self._center_variable_name = "z%s_" % i
621
+ if self._center_variable_name is not None:
622
+ raise NotImplementedError("unable to create the center")
623
+
624
+ def center(self, name=None, names=None, default=False):
625
+ r"""
626
+ Return the center of this skew polynomial ring.
627
+
628
+ .. NOTE::
629
+
630
+ If `F` denotes the subring of `R` fixed by `\sigma` and `\sigma`
631
+ has order `r`, the center of `K[x,\sigma]` is `F[x^r]`, that
632
+ is a univariate polynomial ring over `F`.
633
+
634
+ INPUT:
635
+
636
+ - ``name`` -- string or ``None`` (default: ``None``);
637
+ the name for the central variable (namely `x^r`)
638
+
639
+ - ``default`` -- boolean (default: ``False``); if ``True``,
640
+ set the default variable name for the center to ``name``
641
+
642
+ EXAMPLES::
643
+
644
+ sage: # needs sage.rings.finite_rings
645
+ sage: k.<t> = GF(5^3)
646
+ sage: Frob = k.frobenius_endomorphism()
647
+ sage: S.<x> = k['x',Frob]; S
648
+ Ore Polynomial Ring in x over Finite Field in t of size 5^3
649
+ twisted by t |--> t^5
650
+ sage: Z = S.center(); Z
651
+ Univariate Polynomial Ring in z over Finite Field of size 5
652
+ sage: Z.gen()
653
+ z
654
+
655
+ We can pass in another variable name::
656
+
657
+ sage: S.center(name='y') # needs sage.rings.finite_rings
658
+ Univariate Polynomial Ring in y over Finite Field of size 5
659
+
660
+ or use the bracket notation::
661
+
662
+ sage: Zy.<y> = S.center(); Zy # needs sage.rings.finite_rings
663
+ Univariate Polynomial Ring in y over Finite Field of size 5
664
+ sage: y.parent() is Zy # needs sage.rings.finite_rings
665
+ True
666
+
667
+ A coercion map from the center to the skew polynomial ring is set::
668
+
669
+ sage: # needs sage.rings.finite_rings
670
+ sage: S.has_coerce_map_from(Zy)
671
+ True
672
+ sage: P = y + x; P
673
+ x^3 + x
674
+ sage: P.parent()
675
+ Ore Polynomial Ring in x over Finite Field in t of size 5^3
676
+ twisted by t |--> t^5
677
+ sage: P.parent() is S
678
+ True
679
+
680
+ together with a conversion map in the reverse direction::
681
+
682
+ sage: Zy(x^6 + 2*x^3 + 3) # needs sage.rings.finite_rings
683
+ y^2 + 2*y + 3
684
+
685
+ sage: Zy(x^2) # needs sage.rings.finite_rings
686
+ Traceback (most recent call last):
687
+ ...
688
+ ValueError: x^2 is not in the center
689
+
690
+ Two different skew polynomial rings can share the same center::
691
+
692
+ sage: S1.<x1> = k['x1', Frob] # needs sage.rings.finite_rings
693
+ sage: S2.<x2> = k['x2', Frob] # needs sage.rings.finite_rings
694
+ sage: S1.center() is S2.center() # needs sage.rings.finite_rings
695
+ True
696
+
697
+ .. RUBRIC:: About the default name of the central variable
698
+
699
+ A priori, the default is ``z``.
700
+
701
+ However, a variable name is given the first time this method is
702
+ called, the given name become the default for the next calls::
703
+
704
+ sage: # needs sage.rings.finite_rings
705
+ sage: K.<t> = GF(11^3)
706
+ sage: phi = K.frobenius_endomorphism()
707
+ sage: A.<X> = K['X', phi]
708
+ sage: C.<u> = A.center() # first call
709
+ sage: C
710
+ Univariate Polynomial Ring in u over Finite Field of size 11
711
+ sage: A.center() # second call: the variable name is still u
712
+ Univariate Polynomial Ring in u over Finite Field of size 11
713
+ sage: A.center() is C
714
+ True
715
+
716
+ We can update the default variable name by passing in the argument
717
+ ``default=True``::
718
+
719
+ sage: # needs sage.rings.finite_rings
720
+ sage: D.<v> = A.center(default=True)
721
+ sage: D
722
+ Univariate Polynomial Ring in v over Finite Field of size 11
723
+ sage: A.center()
724
+ Univariate Polynomial Ring in v over Finite Field of size 11
725
+ sage: A.center() is D
726
+ True
727
+
728
+ TESTS::
729
+
730
+ sage: C.<a,b> = S.center() # needs sage.rings.finite_rings
731
+ Traceback (most recent call last):
732
+ ...
733
+ IndexError: the number of names must equal the number of generators
734
+ """
735
+ if name is not None and names is not None:
736
+ raise ValueError("you must specify the name of the variable")
737
+ if names is None:
738
+ if name is None:
739
+ name = self._center_variable_name
740
+ if name is None:
741
+ name = 'z'
742
+ names = (name,)
743
+ names = normalize_names(1, names)
744
+ name = names[0]
745
+ if name in self._center:
746
+ center = self._center[name]
747
+ else:
748
+ center = PolynomialRing(self._constants, names)
749
+ embed = SkewPolynomialCenterInjection(center, self, self._embed_constants, self._order)
750
+ try:
751
+ assert not self.has_coerce_map_from(center)
752
+ self.register_coercion(embed)
753
+ center.register_conversion(embed.section())
754
+ except AssertionError:
755
+ raise ValueError("creation of coercion map fails; consider using another variable name")
756
+ self._center[name] = center
757
+ if default or (self._center_variable_name is None):
758
+ self._center_variable_name = name
759
+ return center
760
+
761
+
762
+ # Special class for skew polynomial over finite fields
763
+ ######################################################
764
+
765
+ class SkewPolynomialRing_finite_field(SkewPolynomialRing_finite_order):
766
+ r"""
767
+ A specialized class for skew polynomial rings over finite fields.
768
+
769
+ .. SEEALSO::
770
+
771
+ - :class:`sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing`
772
+ - :mod:`sage.rings.polynomial.skew_polynomial_finite_field`
773
+
774
+ .. TODO::
775
+
776
+ Add methods related to center of skew polynomial ring, irreducibility, karatsuba
777
+ multiplication and factorization.
778
+ """
779
+ def __init__(self, base_ring, morphism, derivation, names, sparse, category=None):
780
+ r"""
781
+ This method is a constructor for a general, dense univariate skew polynomial ring
782
+ over a finite field.
783
+
784
+ INPUT:
785
+
786
+ - ``base_ring`` -- a commutative ring
787
+
788
+ - ``map`` -- an automorphism of the base ring
789
+
790
+ - ``name`` -- string or list of strings representing the name of the variables of ring
791
+
792
+ - ``sparse`` -- boolean (default: ``False``)
793
+
794
+ - ``element_class`` -- class representing the type of element to be used in ring
795
+
796
+ ..NOTE::
797
+
798
+ Multivariate and Sparse rings are not implemented.
799
+
800
+ EXAMPLES::
801
+
802
+ sage: k.<t> = GF(5^3) # needs sage.rings.finite_rings
803
+ sage: Frob = k.frobenius_endomorphism() # needs sage.rings.finite_rings
804
+ sage: T.<x> = k['x', Frob]; T # needs sage.rings.finite_rings
805
+ Ore Polynomial Ring in x over Finite Field in t of size 5^3 twisted by t |--> t^5
806
+ """
807
+ if self.Element is None:
808
+ import sage.rings.polynomial.skew_polynomial_finite_field
809
+ self.Element = sage.rings.polynomial.skew_polynomial_finite_field.SkewPolynomial_finite_field_dense
810
+ SkewPolynomialRing_finite_order.__init__(self, base_ring, morphism, derivation, names, sparse, category)
811
+ self._matrix_retraction = None
812
+
813
+ def _new_retraction_map(self, seed=None):
814
+ r"""
815
+ Create a retraction map from the ring of coefficient
816
+ of this skew polynomial ring to its fixed subfield under
817
+ the twisting morphism
818
+
819
+ This is an internal function used in factorization.
820
+
821
+ INPUT:
822
+
823
+ - ``seed`` -- an element of the base ring or ``None``
824
+ (default: ``None``); it ``None``, a random element
825
+ is picked
826
+
827
+ TESTS::
828
+
829
+ sage: # needs sage.rings.finite_rings
830
+ sage: k.<a> = GF(11^4)
831
+ sage: Frob = k.frobenius_endomorphism()
832
+ sage: S.<x> = k['x', Frob]
833
+ sage: S._new_retraction_map()
834
+ sage: S._matrix_retraction # random
835
+ [ 9 4 10 4]
836
+
837
+ We can specify a seed::
838
+
839
+ sage: # needs sage.rings.finite_rings
840
+ sage: S._new_retraction_map(seed=a)
841
+ sage: S._matrix_retraction
842
+ [ 0 6 3 10]
843
+ sage: S._new_retraction_map(seed=a)
844
+ sage: S._matrix_retraction
845
+ [ 0 6 3 10]
846
+ """
847
+ k = self.base_ring()
848
+ section = self._embed_constants.section()
849
+ if seed is None:
850
+ seed = k.random_element()
851
+ self._seed_retraction = seed
852
+ trace = [ ]
853
+ elt = seed
854
+ for _ in range(k.degree()):
855
+ x = elt
856
+ tr = elt
857
+ for _ in range(1, self._order):
858
+ x = self._morphism(x)
859
+ tr += x
860
+ elt *= k.gen()
861
+ trace.append(section(tr))
862
+ self._matrix_retraction = MatrixSpace(self._constants, 1, k.degree())(trace)
863
+
864
+ def _retraction(self, x, newmap=False, seed=None):
865
+ r"""
866
+ Return the image of `x` under the retraction map
867
+ (see also :meth:`_new_retraction_map`)
868
+
869
+ This is an internal function used in factorization.
870
+
871
+ INPUT:
872
+
873
+ - ``newmap`` -- boolean (default: ``False``); whether we
874
+ first create and use a new retraction map
875
+
876
+ - ``seed`` -- an element of the base ring or ``None`` (default:
877
+ ``None``); if given, first create a new random retraction map
878
+ with given seed
879
+
880
+ TESTS::
881
+
882
+ sage: # needs sage.rings.finite_rings
883
+ sage: k.<a> = GF(11^4)
884
+ sage: Frob = k.frobenius_endomorphism()
885
+ sage: S.<x> = k['x', Frob]
886
+ sage: S._retraction(a) # random
887
+ 6
888
+
889
+ Note that a retraction map has been automatically created::
890
+
891
+ sage: S._matrix_retraction # random # needs sage.rings.finite_rings
892
+ [ 0 6 3 10]
893
+
894
+ If we call again the method :meth:`_retraction`,
895
+ the same retraction map is used::
896
+
897
+ sage: S._retraction(a) # random # needs sage.rings.finite_rings
898
+ 6
899
+
900
+ We can specify a seed::
901
+
902
+ sage: S._retraction(a^2, seed=a) # random # needs sage.rings.finite_rings
903
+ 10
904
+ """
905
+ # Better to return the retraction map but more difficult
906
+ if newmap or seed is not None or self._matrix_retraction is None:
907
+ self._new_retraction_map()
908
+ return (self._matrix_retraction*self.base_ring()(x)._vector_())[0]