passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,926 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.libs.pari (for charpoly, minimal_polynomial in __init__)
3
+ r"""
4
+ `J`-ideals of matrices
5
+
6
+ Let `B` be an `n\times n`-matrix over a principal ideal domain `D`.
7
+
8
+ For an ideal `J`, the `J`-ideal of `B` is defined to be
9
+ `N_J(B) = \{ f\in D[X] \mid f(B) \in M_n(J) \}`.
10
+
11
+ For a prime element `p` of `D` and `t\ge 0`, a `(p^t)`-minimal polynomial of `B`
12
+ is a monic polynomial `f\in N_{(p^t)}(B)` of minimal degree.
13
+
14
+ This module computes these minimal polynomials.
15
+
16
+ Let `p` be a prime element of `D`. Then there is a finite set `\mathcal{S}_p` of
17
+ positive integers and monic polynomials `\nu_{ps}` for `s\in\mathcal{S}_p` such
18
+ that for `t\ge 1`,
19
+
20
+ .. MATH::
21
+
22
+ N_{(p^t)}(B) = \mu_BD[X] + p^tD[X]
23
+ + \sum_{\substack{s\in\mathcal{S}_p \\ s \le b(t) }}
24
+ p^{\max\{0,t-s\}}\nu_{ps}D[X]
25
+
26
+ holds where `b(t) = \min\{r\in \mathcal{S}_p \mid r \ge s\}`. The
27
+ degree of `\nu_{ps}` is strictly increasing in `s\in \mathcal{S}_p` and
28
+ `\nu_{ps}` is a `(p^s)`-minimal polynomial. If `t\le \max\mathcal{S}_p`,
29
+ then the summand `\mu_BD[X]` can be omitted.
30
+
31
+ All computations are done by the class
32
+ :class:`ComputeMinimalPolynomials` where various intermediate results
33
+ are cached. It provides the following methods:
34
+
35
+ * :meth:`~ComputeMinimalPolynomials.p_minimal_polynomials`
36
+ computes `\mathcal{S}_p` and the monic polynomials `\nu_{ps}`.
37
+
38
+ * :meth:`~ComputeMinimalPolynomials.null_ideal` determines `N_{(p^t)}(B)`.
39
+
40
+ * :meth:`~ComputeMinimalPolynomials.prime_candidates` determines all primes `p`
41
+ where `\mathcal{S}_p` might be non-empty.
42
+
43
+ * :meth:`~ComputeMinimalPolynomials.integer_valued_polynomials_generators`
44
+ determines the generators of the ring `\{f \in K[X] \mid f(B) \in M_n(D)\}`
45
+ of integer valued polynomials on `B`.
46
+
47
+ EXAMPLES::
48
+
49
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
50
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
51
+ sage: C = ComputeMinimalPolynomials(B)
52
+ sage: C.prime_candidates()
53
+ [2, 3, 5]
54
+ sage: for t in range(4):
55
+ ....: print(C.null_ideal(2^t))
56
+ Principal ideal (1) of
57
+ Univariate Polynomial Ring in x over Integer Ring
58
+ Ideal (2, x^2 + x) of
59
+ Univariate Polynomial Ring in x over Integer Ring
60
+ Ideal (4, x^2 + 3*x + 2) of
61
+ Univariate Polynomial Ring in x over Integer Ring
62
+ Ideal (8, x^3 + x^2 - 12*x - 20, 2*x^2 + 6*x + 4) of
63
+ Univariate Polynomial Ring in x over Integer Ring
64
+ sage: C.p_minimal_polynomials(2)
65
+ {2: x^2 + 3*x + 2}
66
+ sage: C.integer_valued_polynomials_generators()
67
+ (x^3 + x^2 - 12*x - 20, [1, 1/4*x^2 + 3/4*x + 1/2])
68
+
69
+ The last output means that
70
+
71
+ .. MATH::
72
+
73
+ \{f \in \QQ[X] \mid f(B) \in M_3(\ZZ)\} =
74
+ (x^3 + x^2 - 12x - 20)\QQ[X] + \ZZ[X]
75
+ + \frac{1}{4}(x^2 + 3x + 2) \ZZ[X].
76
+
77
+ .. TODO::
78
+
79
+ Test code over PIDs other than ZZ.
80
+
81
+ This requires implementation of
82
+ :meth:`~sage.matrix.matrix_integer_dense.Matrix_integer_dense.frobenius`
83
+ over more general domains than ZZ.
84
+
85
+ Additionally, :func:`lifting` requires modification or a bug
86
+ needs fixing, see
87
+ `AskSage Question 35555 <https://ask.sagemath.org/question/35555/lifting-a-matrix-from-mathbbqyy-1/>`_.
88
+
89
+ REFERENCES:
90
+
91
+ [Ris2016]_, [HR2016]_
92
+
93
+ AUTHORS:
94
+
95
+ - Clemens Heuberger (2016)
96
+ - Roswitha Rissner (2016)
97
+
98
+ ACKNOWLEDGEMENT:
99
+
100
+ - Clemens Heuberger is supported by the Austrian Science Fund (FWF):
101
+ P 24644-N26.
102
+
103
+ - Roswitha Rissner is supported by the Austrian Science Fund (FWF):
104
+ P 27816-N26.
105
+
106
+
107
+ Classes and Methods
108
+ ===================
109
+ """
110
+
111
+ # *****************************************************************************
112
+ # Copyright (C) 2016 Clemens Heuberger <clemens.heuberger@aau.at>
113
+ # 2016 Roswitha Rissner <roswitha.rissner@tugraz.at>
114
+ #
115
+ # This program is free software: you can redistribute it and/or modify
116
+ # it under the terms of the GNU General Public License as published by
117
+ # the Free Software Foundation, either version 2 of the License, or
118
+ # (at your option) any later version.
119
+ # https://www.gnu.org/licenses/
120
+ # *****************************************************************************
121
+
122
+ from sage.matrix.constructor import matrix
123
+ from sage.structure.sage_object import SageObject
124
+
125
+
126
+ def lifting(p, t, A, G):
127
+ r"""
128
+ Compute generators of `\{f \in D[X]^d \mid Af \equiv 0 \pmod{p^{t}}\}` given
129
+ generators of `\{f\in D[X]^d \mid Af \equiv 0\pmod{p^{t-1}}\}`.
130
+
131
+ INPUT:
132
+
133
+ - ``p`` -- a prime element of some principal ideal domain `D`
134
+
135
+ - ``t`` -- nonnegative integer
136
+
137
+ - ``A`` -- a `c\times d` matrix over `D[X]`
138
+
139
+ - ``G`` -- a matrix over `D[X]`. The columns of
140
+ `\begin{pmatrix}p^{t-1}I& G\end{pmatrix}` are generators
141
+ of `\{ f\in D[X]^d \mid Af \equiv 0\pmod{p^{t-1}}\}`;
142
+ can be set to ``None`` if ``t`` is zero
143
+
144
+ OUTPUT:
145
+
146
+ A matrix `F` over `D[X]` such that the columns of
147
+ `\begin{pmatrix}p^tI&F&pG\end{pmatrix}` are generators of
148
+ `\{ f\in D[X]^d \mid Af \equiv 0\pmod{p^t}\}`.
149
+
150
+ EXAMPLES::
151
+
152
+ sage: from sage.matrix.compute_J_ideal import lifting
153
+ sage: X = polygen(ZZ, 'X')
154
+ sage: A = matrix([[1, X], [2*X, X^2]])
155
+ sage: G0 = lifting(5, 0, A, None)
156
+ sage: G1 = lifting(5, 1, A, G0); G1
157
+ []
158
+ sage: (A*G1 % 5).is_zero()
159
+ True
160
+ sage: A = matrix([[1, X, X^2], [2*X, X^2, 3*X^3]])
161
+ sage: G0 = lifting(5, 0, A, None)
162
+ sage: G1 = lifting(5, 1, A, G0); G1
163
+ [3*X^2]
164
+ [ X]
165
+ [ 1]
166
+ sage: (A*G1 % 5).is_zero()
167
+ True
168
+ sage: G2 = lifting(5, 2, A, G1); G2
169
+ [15*X^2 23*X^2]
170
+ [ 5*X X]
171
+ [ 5 1]
172
+ sage: (A*G2 % 25).is_zero()
173
+ True
174
+ sage: lifting(5, 10, A, G1)
175
+ Traceback (most recent call last):
176
+ ...
177
+ ValueError: A*G not zero mod 5^9
178
+
179
+ ALGORITHM:
180
+
181
+ [HR2016]_, Algorithm 1.
182
+
183
+ TESTS::
184
+
185
+ sage: A = matrix([[1, X], [X, X^2]])
186
+ sage: G0 = lifting(5, 0, A, None)
187
+ sage: G1 = lifting(5, 1, A, G0); G1
188
+ Traceback (most recent call last):
189
+ ...
190
+ ValueError: [ 1 X|]
191
+ [ X X^2|] does not have full rank.
192
+ """
193
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
194
+
195
+ DX = A.parent().base()
196
+ (X,) = DX.variable_names()
197
+ D = DX.base_ring()
198
+ d = A.ncols()
199
+ c = A.nrows()
200
+
201
+ if t == 0:
202
+ return matrix(DX, d, 0)
203
+
204
+ if not (A*G % p**(t-1)).is_zero():
205
+ raise ValueError("A*G not zero mod %s^%s" % (p, t-1))
206
+
207
+ R = A*G/p**(t-1)
208
+ R.change_ring(DX)
209
+
210
+ AR = matrix.block([[A, R]])
211
+ Fp = D.quotient(p*D)
212
+ FpX = PolynomialRing(Fp, name=X)
213
+
214
+ ARb = AR.change_ring(FpX)
215
+ (Db, Sb, Tb) = ARb.smith_form()
216
+ #assert Sb * ARb * Tb == Db
217
+ #assert all(i == j or Db[i, j].is_zero()
218
+ # for i in range(Db.nrows())
219
+ # for j in range(Db.ncols()))
220
+
221
+ r = Db.rank()
222
+ if r != c:
223
+ raise ValueError("{} does not have full rank.".format(ARb))
224
+
225
+ T = Tb.change_ring(DX)
226
+
227
+ F1 = matrix.block([[p**(t-1) * matrix.identity(d), G]])*T
228
+ F = F1.matrix_from_columns(range(r, F1.ncols()))
229
+ assert (A*F % (p**t)).is_zero(), "A*F=%s" % (A*F)
230
+
231
+ return F
232
+
233
+
234
+ def p_part(f, p):
235
+ r"""
236
+ Compute the `p`-part of a polynomial.
237
+
238
+ INPUT:
239
+
240
+ - ``f`` -- a polynomial over `D`
241
+
242
+ - ``p`` -- a prime in `D`
243
+
244
+ OUTPUT:
245
+
246
+ A polynomial `g` such that `\deg g \le \deg f` and
247
+ all nonzero coefficients of `f - p g` are not divisible by `p`.
248
+
249
+ EXAMPLES::
250
+
251
+ sage: from sage.matrix.compute_J_ideal import p_part
252
+ sage: X = polygen(ZZ, 'X')
253
+ sage: f = X^3 + 5*X + 25
254
+ sage: g = p_part(f, 5); g
255
+ X + 5
256
+ sage: f - 5*g
257
+ X^3
258
+
259
+ TESTS:
260
+
261
+ Return value is supposed to be a polynomial, see :issue:`22402`
262
+
263
+ sage: g = p_part(X+1, 2)
264
+ sage: g.parent()
265
+ Univariate Polynomial Ring in X over Integer Ring
266
+ """
267
+ DX = f.parent()
268
+ (X,) = DX.gens()
269
+ return DX(sum(c//p * X**i for i, c in enumerate(f.list())
270
+ if c % p == 0))
271
+
272
+
273
+ class ComputeMinimalPolynomials(SageObject):
274
+ r"""
275
+ Create an object for computing `(p^t)`-minimal polynomials and `J`-ideals.
276
+
277
+ For an ideal `J` and a square matrix `B` over a principal ideal
278
+ domain `D`, the `J`-ideal of `B` is defined to be
279
+ `N_J(B) = \{ f\in D[X] \mid f(B) \in M_n(J) \}`.
280
+
281
+ For a prime element `p` of `D` and `t\ge 0`, a `(p^t)`-minimal
282
+ polynomial of `B` is a monic polynomial `f\in N_{(p^t)}(B)` of
283
+ minimal degree.
284
+
285
+ The characteristic polynomial of `B` is denoted by `\chi_B`; `n`
286
+ is the size of `B`.
287
+
288
+ INPUT:
289
+
290
+ - ``B`` -- a square matrix over a principal ideal domain `D`
291
+
292
+ OUTPUT:
293
+
294
+ An object which allows to call :meth:`p_minimal_polynomials`,
295
+ :meth:`null_ideal` and :meth:`integer_valued_polynomials_generators`.
296
+
297
+ EXAMPLES::
298
+
299
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
300
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
301
+ sage: C = ComputeMinimalPolynomials(B)
302
+ sage: C.prime_candidates()
303
+ [2, 3, 5]
304
+ sage: for t in range(4):
305
+ ....: print(C.null_ideal(2^t))
306
+ Principal ideal (1) of
307
+ Univariate Polynomial Ring in x over Integer Ring
308
+ Ideal (2, x^2 + x) of
309
+ Univariate Polynomial Ring in x over Integer Ring
310
+ Ideal (4, x^2 + 3*x + 2) of
311
+ Univariate Polynomial Ring in x over Integer Ring
312
+ Ideal (8, x^3 + x^2 - 12*x - 20, 2*x^2 + 6*x + 4) of
313
+ Univariate Polynomial Ring in x over Integer Ring
314
+ sage: C.p_minimal_polynomials(2)
315
+ {2: x^2 + 3*x + 2}
316
+ sage: C.integer_valued_polynomials_generators()
317
+ (x^3 + x^2 - 12*x - 20, [1, 1/4*x^2 + 3/4*x + 1/2])
318
+ """
319
+ def __init__(self, B):
320
+ r"""
321
+ Initialize the ComputeMinimalPolynomials class.
322
+
323
+ INPUT:
324
+
325
+ - ``B`` -- a square matrix
326
+
327
+ TESTS::
328
+
329
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
330
+ sage: ComputeMinimalPolynomials(matrix([[1, 2]]))
331
+ Traceback (most recent call last):
332
+ ...
333
+ TypeError: square matrix required
334
+ """
335
+ from sage.rings.polynomial.polynomial_ring import polygen
336
+
337
+ super().__init__()
338
+ if not B.is_square():
339
+ raise TypeError("square matrix required")
340
+
341
+ self._B = B
342
+ self._D = B.base_ring()
343
+ X = polygen(self._D)
344
+ adjugate = (X - B).adjugate()
345
+ d = B.nrows()**2
346
+ b = matrix(d, 1, adjugate.list())
347
+ self.chi_B = B.charpoly(X)
348
+ self.mu_B = B.minimal_polynomial()
349
+ self._A = matrix.block([[b , -self.chi_B*matrix.identity(d)]])
350
+ self._DX = X.parent()
351
+ self._cache = {}
352
+
353
+ def find_monic_replacements(self, p, t, pt_generators, prev_nu):
354
+ r"""
355
+ Replace possibly non-monic generators of `N_{(p^t)}(B)` by monic
356
+ generators.
357
+
358
+ INPUT:
359
+
360
+ - ``p`` -- a prime element of `D`
361
+
362
+ - ``t`` -- nonnegative integer
363
+
364
+ - ``pt_generators`` -- list `(g_1, \ldots, g_s)` of polynomials in
365
+ `D[X]` such that `N_{(p^t)}(B) = (g_1, \ldots, g_s) + pN_{(p^{t-1})}(B)`
366
+
367
+ - ``prev_nu`` -- a `(p^{t-1})`-minimal polynomial of `B`
368
+
369
+ OUTPUT:
370
+
371
+ A list `(h_1, \ldots, h_r)` of monic polynomials such that
372
+ `N_{(p^t)}(B) = (h_1, \ldots, h_r) + pN_{(p^{t-1})}(B)`.
373
+
374
+ EXAMPLES::
375
+
376
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
377
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
378
+ sage: C = ComputeMinimalPolynomials(B)
379
+ sage: x = polygen(ZZ, 'x')
380
+ sage: nu_1 = x^2 + x
381
+ sage: generators_4 = [2*x^2 + 2*x, x^2 + 3*x + 2]
382
+ sage: C.find_monic_replacements(2, 2, generators_4, nu_1)
383
+ [x^2 + 3*x + 2]
384
+
385
+ TESTS::
386
+
387
+ sage: C.find_monic_replacements(2, 3, generators_4, nu_1)
388
+ Traceback (most recent call last):
389
+ ...
390
+ ValueError: [2*x^2 + 2*x, x^2 + 3*x + 2] not in N_{(2^3)}(B)
391
+ sage: C.find_monic_replacements(2, 2, generators_4, x^2)
392
+ Traceback (most recent call last):
393
+ ...
394
+ ValueError: x^2 not in N_{(2^1)}(B)
395
+
396
+ ALGORITHM:
397
+
398
+ [HR2016]_, Algorithms 2 and 3.
399
+ """
400
+ from sage.arith.misc import xgcd
401
+
402
+ if not all((g(self._B) % p**t).is_zero()
403
+ for g in pt_generators):
404
+ raise ValueError("%s not in N_{(%s^%s)}(B)" %
405
+ (pt_generators, p, t))
406
+
407
+ if not (prev_nu(self._B) % p**(t-1)).is_zero():
408
+ raise ValueError("%s not in N_{(%s^%s)}(B)" % (prev_nu, p, t-1))
409
+
410
+ (X,) = self._DX.gens()
411
+
412
+ replacements = []
413
+ for f in pt_generators:
414
+ g = f
415
+ p_prt = p_part(g, p)
416
+
417
+ while g != p*p_prt:
418
+ r = p_prt.quo_rem(prev_nu)[1]
419
+ g1 = g - p*p_prt
420
+ d, u, v = xgcd(g1.leading_coefficient(), p)
421
+ h = u*(p*r + g1) + v*p*prev_nu*X**(g1.degree()-prev_nu.degree())
422
+ replacements.append(h % p**t)
423
+ #reduce coefficients mod p^t to keep coefficients small
424
+ g = g.quo_rem(h)[1]
425
+ p_prt = p_part(g, p)
426
+
427
+ replacements = list(set(replacements))
428
+ assert all(g.is_monic() for g in replacements),\
429
+ "Something went wrong in find_monic_replacements"
430
+
431
+ return replacements
432
+
433
+ def current_nu(self, p, t, pt_generators, prev_nu):
434
+ r"""
435
+ Compute `(p^t)`-minimal polynomial of `B`.
436
+
437
+ INPUT:
438
+
439
+ - ``p`` -- a prime element of `D`
440
+
441
+ - ``t`` -- positive integer
442
+
443
+ - ``pt_generators`` -- list `(g_1, \ldots, g_s)` of polynomials in
444
+ `D[X]` such that `N_{(p^t)}(B) = (g_1, \ldots, g_s) + pN_{(p^{t-1})}(B)`
445
+
446
+ - ``prev_nu`` -- a `(p^{t-1})`-minimal polynomial of `B`
447
+
448
+ OUTPUT:
449
+
450
+ A `(p^t)`-minimal polynomial of `B`.
451
+
452
+ EXAMPLES::
453
+
454
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
455
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
456
+ sage: C = ComputeMinimalPolynomials(B)
457
+ sage: x = polygen(ZZ, 'x')
458
+ sage: nu_1 = x^2 + x
459
+ sage: generators_4 = [2*x^2 + 2*x, x^2 + 3*x + 2]
460
+ sage: C.current_nu(2, 2, generators_4, nu_1)
461
+ x^2 + 3*x + 2
462
+
463
+ ALGORITHM:
464
+
465
+ [HR2016]_, Algorithm 4.
466
+
467
+ TESTS::
468
+
469
+ sage: C.current_nu(2, 3, generators_4, nu_1)
470
+ Traceback (most recent call last):
471
+ ...
472
+ ValueError: [2*x^2 + 2*x, x^2 + 3*x + 2] not in N_{(2^3)}(B)
473
+ sage: C.current_nu(2, 2, generators_4, x^2)
474
+ Traceback (most recent call last):
475
+ ...
476
+ ValueError: x^2 not in N_{(2^1)}(B)
477
+ """
478
+ import heapq
479
+
480
+ from sage.misc.verbose import verbose
481
+
482
+ if not all((g(self._B) % p**t).is_zero()
483
+ for g in pt_generators):
484
+ raise ValueError("%s not in N_{(%s^%s)}(B)" %
485
+ (pt_generators, p, t))
486
+
487
+ if not (prev_nu(self._B) % p**(t-1)).is_zero():
488
+ raise ValueError("%s not in N_{(%s^%s)}(B)" % (prev_nu, p, t-1))
489
+
490
+ generators = self.find_monic_replacements(p, t, pt_generators, prev_nu)
491
+
492
+ verbose("------------------------------------------")
493
+ verbose(pt_generators)
494
+ verbose("Generators with (p^t)-generating property:")
495
+ verbose(generators)
496
+
497
+ heap = [(f.degree(), f) for f in generators]
498
+ heapq.heapify(heap)
499
+
500
+ # find poly of minimal degree
501
+ deg_g, g = heapq.heappop(heap)
502
+
503
+ # find nu
504
+ while heap:
505
+ deg_f, f = heapq.heappop(heap)
506
+ #take first element in generators not equal g
507
+ r = (f.quo_rem(g)[1]) % p**t
508
+ if r != 0:
509
+ for h in self.find_monic_replacements(p, t, [r], prev_nu):
510
+ heapq.heappush(heap, (h.degree(), h))
511
+ if heap and heap[0][0] < deg_g:
512
+ deg_g, g = heapq.heappushpop(heap, (deg_g, g))
513
+
514
+ verbose([g] + [h for (deg_h, h) in heap])
515
+
516
+ return g
517
+
518
+ def mccoy_column(self, p, t, nu):
519
+ r"""
520
+ Compute matrix for McCoy's criterion.
521
+
522
+ INPUT:
523
+
524
+ - ``p`` -- a prime element in `D`
525
+
526
+ - ``t`` -- positive integer
527
+
528
+ - ``nu`` -- a `(p^t)`-minimal polynomial of `B`
529
+
530
+ OUTPUT:
531
+
532
+ An `(n^2 + 1) \times 1` matrix `g` with first entry ``nu`` such that
533
+ `\begin{pmatrix}b& -\chi_B I\end{pmatrix}g \equiv 0\pmod{p^t}` where `b`
534
+ consists of the entries of `\operatorname{adj}(X-B)`.
535
+
536
+ EXAMPLES::
537
+
538
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
539
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
540
+ sage: C = ComputeMinimalPolynomials(B)
541
+ sage: x = polygen(ZZ, 'x')
542
+ sage: nu_4 = x^2 + 3*x + 2
543
+ sage: g = C.mccoy_column(2, 2, nu_4)
544
+ sage: b = matrix(9, 1, (x - B).adjugate().list())
545
+ sage: M = matrix.block([[b, -B.charpoly(x)*matrix.identity(9)]])
546
+ sage: (M*g % 4).is_zero()
547
+ True
548
+
549
+ ALGORITHM:
550
+
551
+ [HR2016]_, Algorithm 5.
552
+
553
+ TESTS::
554
+
555
+ sage: nu_2 = x^2 + x
556
+ sage: C.mccoy_column(2, 2, nu_2)
557
+ Traceback (most recent call last):
558
+ ...
559
+ ValueError: x^2 + x not in (2^2)-ideal
560
+ """
561
+ if not (nu(self._B) % p**t).is_zero():
562
+ raise ValueError(
563
+ "%s not in (%s^%s)-ideal" % (nu, p, t))
564
+
565
+ column = matrix(self._DX, self._A.ncols(), 1,
566
+ [nu] + [(nu*b).quo_rem(self.chi_B)[0]
567
+ for b in self._A[:, 0].list()])
568
+
569
+ assert (self._A * column % p**t).is_zero(),\
570
+ "McCoy column incorrect"
571
+
572
+ return column
573
+
574
+ def p_minimal_polynomials(self, p, s_max=None):
575
+ r"""
576
+ Compute `(p^s)`-minimal polynomials `\nu_s` of `B`.
577
+
578
+ Compute a finite subset `\mathcal{S}` of the positive
579
+ integers and `(p^s)`-minimal polynomials
580
+ `\nu_s` for `s \in \mathcal{S}`.
581
+
582
+ For `0 < t \le \max \mathcal{S}`, a `(p^t)`-minimal polynomial is
583
+ given by `\nu_s` where
584
+ `s = \min\{ r \in \mathcal{S} \mid r\ge t \}`.
585
+ For `t > \max \mathcal{S}`, the minimal polynomial of `B` is
586
+ also a `(p^t)`-minimal polynomial.
587
+
588
+ INPUT:
589
+
590
+ - ``p`` -- a prime in `D`
591
+
592
+ - ``s_max`` -- positive integer (default: ``None``); if set, only
593
+ `(p^s)`-minimal polynomials for ``s <= s_max`` are computed
594
+ (see below for details)
595
+
596
+ OUTPUT:
597
+
598
+ A dictionary. Keys are the finite set `\mathcal{S}`, the values
599
+ are the associated `(p^s)`-minimal polynomials `\nu_s`,
600
+ `s \in \mathcal{S}`.
601
+
602
+ Setting ``s_max`` only affects the output if ``s_max`` is at
603
+ most `\max\mathcal{S}` where `\mathcal{S}` denotes the full
604
+ set. In that case, only those `\nu_s` with ``s <= s_max`` are
605
+ returned where ``s_max`` is always included even if it is not
606
+ included in the full set `\mathcal{S}`.
607
+
608
+ EXAMPLES::
609
+
610
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
611
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
612
+ sage: C = ComputeMinimalPolynomials(B)
613
+ sage: C.p_minimal_polynomials(2)
614
+ {2: x^2 + 3*x + 2}
615
+ sage: set_verbose(1)
616
+ sage: C = ComputeMinimalPolynomials(B)
617
+ sage: C.p_minimal_polynomials(2)
618
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
619
+ ------------------------------------------
620
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
621
+ p = 2, t = 1:
622
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
623
+ Result of lifting:
624
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
625
+ F =
626
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
627
+ [x^2 + x]
628
+ [ x]
629
+ [ 0]
630
+ [ 1]
631
+ [ 1]
632
+ [ x + 1]
633
+ [ 1]
634
+ [ 0]
635
+ [ 0]
636
+ [ x + 1]
637
+ verbose 1 (...: compute_J_ideal.py, current_nu)
638
+ ------------------------------------------
639
+ verbose 1 (...: compute_J_ideal.py, current_nu)
640
+ (x^2 + x)
641
+ verbose 1 (...: compute_J_ideal.py, current_nu)
642
+ Generators with (p^t)-generating property:
643
+ verbose 1 (...: compute_J_ideal.py, current_nu)
644
+ [x^2 + x]
645
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
646
+ nu = x^2 + x
647
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
648
+ corresponding columns for G
649
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
650
+ [x^2 + x]
651
+ [ x + 2]
652
+ [ 0]
653
+ [ 1]
654
+ [ 1]
655
+ [ x - 1]
656
+ [ -1]
657
+ [ 10]
658
+ [ 0]
659
+ [ x + 1]
660
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
661
+ ------------------------------------------
662
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
663
+ p = 2, t = 2:
664
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
665
+ Result of lifting:
666
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
667
+ F =
668
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
669
+ [ 2*x^2 + 2*x x^2 + 3*x + 2]
670
+ [ 2*x x + 4]
671
+ [ 0 0]
672
+ [ 2 1]
673
+ [ 2 1]
674
+ [ 2*x + 2 x + 1]
675
+ [ 2 -1]
676
+ [ 0 10]
677
+ [ 0 0]
678
+ [ 2*x + 2 x + 3]
679
+ verbose 1 (...: compute_J_ideal.py, current_nu)
680
+ ------------------------------------------
681
+ verbose 1 (...: compute_J_ideal.py, current_nu)
682
+ (2*x^2 + 2*x, x^2 + 3*x + 2)
683
+ verbose 1 (...: compute_J_ideal.py, current_nu)
684
+ Generators with (p^t)-generating property:
685
+ verbose 1 (...: compute_J_ideal.py, current_nu)
686
+ [x^2 + 3*x + 2]
687
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
688
+ nu = x^2 + 3*x + 2
689
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
690
+ corresponding columns for G
691
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
692
+ [x^2 + 3*x + 2]
693
+ [ x + 4]
694
+ [ 0]
695
+ [ 1]
696
+ [ 1]
697
+ [ x + 1]
698
+ [ -1]
699
+ [ 10]
700
+ [ 0]
701
+ [ x + 3]
702
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
703
+ ------------------------------------------
704
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
705
+ p = 2, t = 3:
706
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
707
+ Result of lifting:
708
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
709
+ F =
710
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
711
+ [x^3 + 7*x^2 + 6*x x^3 + 3*x^2 + 2*x]
712
+ [ x^2 + 8*x x^2 + 4*x]
713
+ [ 0 0]
714
+ [ x x + 4]
715
+ [ x + 4 x]
716
+ [ x^2 + 5*x + 4 x^2 + x]
717
+ [ -x + 4 -x]
718
+ [ 10*x 10*x]
719
+ [ 0 0]
720
+ [ x^2 + 7*x x^2 + 3*x + 4]
721
+ verbose 1 (...: compute_J_ideal.py, current_nu)
722
+ ------------------------------------------
723
+ verbose 1 (...: compute_J_ideal.py, current_nu)
724
+ (x^3 + 7*x^2 + 6*x, x^3 + 3*x^2 + 2*x)
725
+ verbose 1 (...: compute_J_ideal.py, current_nu)
726
+ Generators with (p^t)-generating property:
727
+ verbose 1 (...: compute_J_ideal.py, current_nu)
728
+ ...
729
+ verbose 1 (...: compute_J_ideal.py, current_nu)
730
+ [x^3 + 3*x^2 + 2*x]
731
+ verbose 1 (...: compute_J_ideal.py, p_minimal_polynomials)
732
+ nu = x^3 + 3*x^2 + 2*x
733
+ {2: x^2 + 3*x + 2}
734
+ sage: set_verbose(0)
735
+ sage: C.p_minimal_polynomials(2, s_max=1)
736
+ {1: x^2 + x}
737
+ sage: C.p_minimal_polynomials(2, s_max=2)
738
+ {2: x^2 + 3*x + 2}
739
+ sage: C.p_minimal_polynomials(2, s_max=3)
740
+ {2: x^2 + 3*x + 2}
741
+
742
+ ALGORITHM:
743
+
744
+ [HR2016]_, Algorithm 5.
745
+ """
746
+ from sage.misc.verbose import verbose
747
+ from sage.rings.infinity import Infinity
748
+
749
+ deg_mu = self.mu_B.degree()
750
+ if s_max is None:
751
+ s_max = Infinity
752
+
753
+ if p in self._cache:
754
+ (t, G, p_min_polys) = self._cache[p]
755
+ if t < Infinity:
756
+ nu = G[0][0]
757
+ else:
758
+ t = 0
759
+ p_min_polys = {}
760
+ nu = self._DX(1)
761
+ d = self._A.ncols()
762
+ G = matrix(self._DX, d, 0)
763
+
764
+ while t < s_max:
765
+ deg_prev_nu = nu.degree()
766
+ t += 1
767
+ verbose("------------------------------------------")
768
+ verbose("p = %s, t = %s:" % (p, t))
769
+
770
+ verbose("Result of lifting:")
771
+ verbose("F =")
772
+ F = lifting(p, t, self._A, G)
773
+ verbose(F)
774
+
775
+ nu = self.current_nu(p, t, F[0], nu)
776
+
777
+ verbose("nu = %s" % nu)
778
+ if nu.degree() >= deg_mu:
779
+ t = Infinity
780
+ break
781
+
782
+ if nu.degree() == deg_prev_nu:
783
+ G = G.delete_columns([G.ncols() - 1])
784
+ del p_min_polys[t-1]
785
+
786
+ column = self.mccoy_column(p, t, nu)
787
+ verbose("corresponding columns for G")
788
+ verbose(column)
789
+
790
+ G = matrix.block([[p * G, column]])
791
+ p_min_polys[t] = nu
792
+
793
+ self._cache[p] = (t, G, p_min_polys)
794
+
795
+ if s_max < t:
796
+ result = {r: polynomial
797
+ for r, polynomial in p_min_polys.items() if r < s_max}
798
+ next_t_candidates = [r for r in p_min_polys if r >= s_max]
799
+ if next_t_candidates:
800
+ next_t = min(next_t_candidates)
801
+ result.update({s_max: p_min_polys[next_t] % p**s_max})
802
+
803
+ return result
804
+
805
+ return p_min_polys
806
+
807
+ def null_ideal(self, b=0):
808
+ r"""
809
+ Return the `(b)`-ideal `N_{(b)}(B)=\{f\in D[X] \mid f(B)\in M_n(bD)\}`.
810
+
811
+ INPUT:
812
+
813
+ - ``b`` -- an element of `D` (default: 0)
814
+
815
+ OUTPUT: an ideal in `D[X]`
816
+
817
+ EXAMPLES::
818
+
819
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
820
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
821
+ sage: C = ComputeMinimalPolynomials(B)
822
+ sage: C.null_ideal()
823
+ Principal ideal (x^3 + x^2 - 12*x - 20) of
824
+ Univariate Polynomial Ring in x over Integer Ring
825
+ sage: C.null_ideal(2)
826
+ Ideal (2, x^2 + x) of
827
+ Univariate Polynomial Ring in x over Integer Ring
828
+ sage: C.null_ideal(4)
829
+ Ideal (4, x^2 + 3*x + 2) of
830
+ Univariate Polynomial Ring in x over Integer Ring
831
+ sage: C.null_ideal(8)
832
+ Ideal (8, x^3 + x^2 - 12*x - 20, 2*x^2 + 6*x + 4) of
833
+ Univariate Polynomial Ring in x over Integer Ring
834
+ sage: C.null_ideal(3)
835
+ Ideal (3, x^3 + x^2 - 12*x - 20) of
836
+ Univariate Polynomial Ring in x over Integer Ring
837
+ sage: C.null_ideal(6)
838
+ Ideal (6, 2*x^3 + 2*x^2 - 24*x - 40, 3*x^2 + 3*x) of
839
+ Univariate Polynomial Ring in x over Integer Ring
840
+ """
841
+ from sage.arith.misc import factor
842
+
843
+ mu_B_coefficients = []
844
+ generators = []
845
+
846
+ if b == 0:
847
+ mu_B_coefficients = [1]
848
+ else:
849
+ for (p, t) in factor(b):
850
+ cofactor = b // p**t
851
+ p_polynomials = self.p_minimal_polynomials(p, t)
852
+ generators += [cofactor*p**(t-s)*nu
853
+ for s, nu in p_polynomials.items()]
854
+ if not p_polynomials or max(p_polynomials) < t:
855
+ mu_B_coefficients.append(cofactor)
856
+
857
+ assert all((g(self._B) % b).is_zero() for g in generators), \
858
+ "Polynomials not in %s-ideal" % (b,)
859
+
860
+ if mu_B_coefficients:
861
+ (mu_B_coefficient,) = self._D.ideal(mu_B_coefficients).gens()
862
+ generators = [mu_B_coefficient * self.mu_B] + generators
863
+
864
+ if b != 0:
865
+ generators = [self._DX(b)] + generators
866
+
867
+ return self._DX.ideal(generators)
868
+
869
+ def prime_candidates(self):
870
+ r"""
871
+ Determine those primes `p` where `\mu_B` might not be a
872
+ `(p)`-minimal polynomial.
873
+
874
+ OUTPUT: list of primes
875
+
876
+ EXAMPLES::
877
+
878
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
879
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
880
+ sage: C = ComputeMinimalPolynomials(B)
881
+ sage: C.prime_candidates()
882
+ [2, 3, 5]
883
+ sage: C.p_minimal_polynomials(2)
884
+ {2: x^2 + 3*x + 2}
885
+ sage: C.p_minimal_polynomials(3)
886
+ {}
887
+ sage: C.p_minimal_polynomials(5)
888
+ {}
889
+
890
+ This means that `3` and `5` were candidates, but actually, `\mu_B` turns
891
+ out to be a `(3)`-minimal polynomial and a `(5)`-minimal polynomial.
892
+ """
893
+ from sage.arith.misc import factor
894
+
895
+ _, T = self._B.frobenius_form(2)
896
+
897
+ return [p for p, _ in factor(T.det())]
898
+
899
+ def integer_valued_polynomials_generators(self):
900
+ r"""
901
+ Determine the generators of the ring of integer valued polynomials on `B`.
902
+
903
+ OUTPUT:
904
+
905
+ A pair ``(mu_B, P)`` where ``P`` is a list of polynomials in `K[X]`
906
+ such that
907
+
908
+ .. MATH::
909
+
910
+ \{f \in K[X] \mid f(B) \in M_n(D)\} = \mu_B K[X]
911
+ + \sum_{g\in P} g D[X]
912
+
913
+ where `K` denotes the fraction field of `D`.
914
+
915
+ EXAMPLES::
916
+
917
+ sage: from sage.matrix.compute_J_ideal import ComputeMinimalPolynomials
918
+ sage: B = matrix(ZZ, [[1, 0, 1], [1, -2, -1], [10, 0, 0]])
919
+ sage: C = ComputeMinimalPolynomials(B)
920
+ sage: C.integer_valued_polynomials_generators()
921
+ (x^3 + x^2 - 12*x - 20, [1, 1/4*x^2 + 3/4*x + 1/2])
922
+ """
923
+ return (self.mu_B, [self._DX(1)] +
924
+ [nu / p**s
925
+ for p in self.prime_candidates()
926
+ for s, nu in self.p_minimal_polynomials(p).items()])