passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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 (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1230 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Integer-valued polynomial rings
4
+
5
+ AUTHORS:
6
+
7
+ - Frédéric Chapoton (2023-03): Initial version
8
+ """
9
+ # ***************************************************************************
10
+ # Copyright (C) 2013 Frédéric Chapoton
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ # https://www.gnu.org/licenses/
14
+ # ***************************************************************************
15
+ from sage.arith.misc import binomial, factorial
16
+ from sage.categories.algebras import Algebras
17
+ from sage.categories.realizations import Category_realization_of_parent
18
+ from sage.categories.rings import Rings
19
+ from sage.combinat.free_module import CombinatorialFreeModule
20
+ from sage.data_structures.blas_dict import linear_combination
21
+ from sage.matrix.constructor import matrix
22
+ from sage.misc.bindable_class import BindableClass
23
+ from sage.misc.cachefunc import cached_method
24
+ from sage.modules.free_module_element import vector
25
+ from sage.rings.integer_ring import ZZ
26
+ from sage.rings.polynomial.polynomial_ring import polygen
27
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
28
+ from sage.rings.rational_field import QQ
29
+ from sage.sets.family import Family
30
+ from sage.sets.non_negative_integers import NonNegativeIntegers
31
+ from sage.structure.parent import Parent
32
+ from sage.structure.unique_representation import UniqueRepresentation
33
+
34
+
35
+ class IntegerValuedPolynomialRing(UniqueRepresentation, Parent):
36
+ r"""
37
+ The integer-valued polynomial ring over a base ring `R`.
38
+
39
+ Integer-valued polynomial rings are commutative and associative
40
+ algebras, with a basis indexed by nonnegative integers.
41
+
42
+ There are two natural bases, made of the sequence
43
+ `\binom{x}{n}` for `n \geq 0` (the *binomial basis*) and of
44
+ the other sequence `\binom{x+n}{n}` for `n \geq 0` (the *shifted basis*).
45
+
46
+ These two bases are available as follows::
47
+
48
+ sage: B = IntegerValuedPolynomialRing(QQ).Binomial()
49
+ sage: S = IntegerValuedPolynomialRing(QQ).Shifted()
50
+
51
+ or by using the shortcuts::
52
+
53
+ sage: B = IntegerValuedPolynomialRing(QQ).B()
54
+ sage: S = IntegerValuedPolynomialRing(QQ).S()
55
+
56
+ There is a conversion formula between the two bases:
57
+
58
+ .. MATH::
59
+
60
+ \binom{x}{i} = \sum_{k=0}^{i} (-1)^{i-k} \binom{i}{k} \binom{x+k}{k}
61
+
62
+ with inverse:
63
+
64
+ .. MATH::
65
+
66
+ \binom{x+i}{i} = \sum_{k=0}^{i} \binom{i}{k} \binom{x}{k}.
67
+
68
+ REFERENCES:
69
+
70
+ - :wikipedia:`Integer-valued polynomial`
71
+
72
+ TESTS::
73
+
74
+ sage: IntegerValuedPolynomialRing(24)
75
+ Traceback (most recent call last):
76
+ ...
77
+ TypeError: argument R must be a commutative ring
78
+ """
79
+ def __init__(self, R):
80
+ """
81
+ TESTS::
82
+
83
+ sage: IV = IntegerValuedPolynomialRing(ZZ)
84
+ sage: TestSuite(IV).run()
85
+ """
86
+ if R not in Rings().Commutative():
87
+ raise TypeError("argument R must be a commutative ring")
88
+ self._base = R
89
+ cat = Algebras(R).Commutative().WithBasis()
90
+ Parent.__init__(self, base=R, category=cat.WithRealizations())
91
+
92
+ _shorthands = ["B", "S"]
93
+
94
+ def _repr_(self) -> str:
95
+ r"""
96
+ Return the string representation.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: IntegerValuedPolynomialRing(QQ)
101
+ Integer-Valued Polynomial Ring over Rational Field
102
+ """
103
+ br = self.base_ring()
104
+ return f"Integer-Valued Polynomial Ring over {br}"
105
+
106
+ def a_realization(self):
107
+ """
108
+ Return a default realization.
109
+
110
+ The Binomial realization is chosen.
111
+
112
+ EXAMPLES::
113
+
114
+ sage: IntegerValuedPolynomialRing(QQ).a_realization()
115
+ Integer-Valued Polynomial Ring over Rational Field
116
+ in the binomial basis
117
+ """
118
+ return self.Binomial()
119
+
120
+ class Bases(Category_realization_of_parent):
121
+ def super_categories(self) -> list:
122
+ r"""
123
+ Return the super-categories of ``self``.
124
+
125
+ EXAMPLES::
126
+
127
+ sage: A = IntegerValuedPolynomialRing(QQ); A
128
+ Integer-Valued Polynomial Ring over Rational Field
129
+ sage: C = A.Bases(); C
130
+ Category of bases of Integer-Valued Polynomial Ring
131
+ over Rational Field
132
+ sage: C.super_categories()
133
+ [Category of realizations of Integer-Valued Polynomial Ring
134
+ over Rational Field,
135
+ Join of Category of algebras with basis over Rational Field and
136
+ Category of filtered algebras over Rational Field and
137
+ Category of commutative algebras over Rational Field and
138
+ Category of realizations of unital magmas]
139
+ """
140
+ A = self.base()
141
+ category = Algebras(A.base_ring()).Commutative().Filtered()
142
+ return [A.Realizations(),
143
+ category.Realizations().WithBasis()]
144
+
145
+ class ParentMethods:
146
+ def _repr_(self) -> str:
147
+ r"""
148
+ EXAMPLES::
149
+
150
+ sage: F = IntegerValuedPolynomialRing(QQ).S()
151
+ sage: F # indirect doctest
152
+ Integer-Valued Polynomial Ring over Rational Field
153
+ in the shifted basis
154
+ sage: F = IntegerValuedPolynomialRing(QQ).B()
155
+ sage: F # indirect doctest
156
+ Integer-Valued Polynomial Ring over Rational Field
157
+ in the binomial basis
158
+ """
159
+ real = self.realization_of()
160
+ return f"{real} in the {self._realization_name()} basis"
161
+
162
+ @cached_method
163
+ def one_basis(self):
164
+ r"""
165
+ Return the number 0, which index the unit of this algebra.
166
+
167
+ EXAMPLES::
168
+
169
+ sage: A = IntegerValuedPolynomialRing(QQ).S()
170
+ sage: A.one_basis()
171
+ 0
172
+ sage: A.one()
173
+ S[0]
174
+ """
175
+ return self.basis().keys()(0)
176
+
177
+ def degree_on_basis(self, m):
178
+ r"""
179
+ Return the degree of the basis element indexed by ``m``.
180
+
181
+ EXAMPLES::
182
+
183
+ sage: A = IntegerValuedPolynomialRing(QQ).S()
184
+ sage: A.degree_on_basis(4)
185
+ 4
186
+ """
187
+ return ZZ(m)
188
+
189
+ def from_polynomial(self, p):
190
+ """
191
+ Convert a polynomial into the ring of integer-valued polynomials.
192
+
193
+ This raises a :exc:`ValueError` if this is not possible.
194
+
195
+ INPUT:
196
+
197
+ - ``p`` -- a polynomial in one variable
198
+
199
+ EXAMPLES::
200
+
201
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
202
+ sage: S = A.basis()
203
+ sage: S[5].polynomial()
204
+ 1/120*x^5 + 1/8*x^4 + 17/24*x^3 + 15/8*x^2 + 137/60*x + 1
205
+ sage: A.from_polynomial(_)
206
+ S[5]
207
+ sage: x = polygen(QQ, 'x')
208
+ sage: A.from_polynomial(x)
209
+ -S[0] + S[1]
210
+
211
+ sage: A = IntegerValuedPolynomialRing(ZZ).B()
212
+ sage: B = A.basis()
213
+ sage: B[5].polynomial()
214
+ 1/120*x^5 - 1/12*x^4 + 7/24*x^3 - 5/12*x^2 + 1/5*x
215
+ sage: A.from_polynomial(_)
216
+ B[5]
217
+ sage: x = polygen(QQ, 'x')
218
+ sage: A.from_polynomial(x)
219
+ B[1]
220
+
221
+ TESTS::
222
+
223
+ sage: x = polygen(QQ,'x')
224
+ sage: A.from_polynomial(x+1/3)
225
+ Traceback (most recent call last):
226
+ ...
227
+ ValueError: not a polynomial with integer values: 1/3
228
+
229
+ sage: t = polygen(ZZ,'t')
230
+ sage: B = IntegerValuedPolynomialRing(QQ).B()
231
+ sage: B.from_polynomial(t+1)
232
+ B[0] + B[1]
233
+ """
234
+ B = self.basis()
235
+ poly = self._poly
236
+ remain = p.change_variable_name('x')
237
+ result = self.zero()
238
+ while remain:
239
+ N = remain.degree()
240
+ top_coeff = remain.leading_coefficient() * factorial(N)
241
+ try:
242
+ top_coeff = self.base_ring()(top_coeff)
243
+ except TypeError as exc:
244
+ msg = 'not a polynomial with integer'
245
+ msg += f' values: {top_coeff}'
246
+ raise ValueError(msg) from exc
247
+ remain += -top_coeff * poly(N)
248
+ result += top_coeff * B[N]
249
+ return result
250
+
251
+ def gen(self, i=0):
252
+ r"""
253
+ Return the generator of this algebra.
254
+
255
+ The optional argument is ignored.
256
+
257
+ EXAMPLES::
258
+
259
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
260
+ sage: F.gen()
261
+ B[1]
262
+ """
263
+ return self.algebra_generators()[0]
264
+
265
+ @cached_method
266
+ def algebra_generators(self):
267
+ r"""
268
+ Return the generators of this algebra.
269
+
270
+ EXAMPLES::
271
+
272
+ sage: A = IntegerValuedPolynomialRing(ZZ).S(); A
273
+ Integer-Valued Polynomial Ring over Integer Ring
274
+ in the shifted basis
275
+ sage: A.algebra_generators()
276
+ Family (S[1],)
277
+ """
278
+ NonNeg = self.basis().keys()
279
+ return Family([self.monomial(NonNeg(1))])
280
+
281
+ gens = algebra_generators
282
+
283
+ class ElementMethods:
284
+ def __call__(self, v):
285
+ """
286
+ Return the evaluation at some value ``v``.
287
+
288
+ EXAMPLES::
289
+
290
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
291
+ sage: B = F.gen()
292
+ sage: f = B**2+4*B+6
293
+ sage: f(1/3)
294
+ 118/9
295
+
296
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
297
+ sage: B = F.gen()
298
+ sage: f = B**2+4*B+6
299
+ sage: f(1/3)
300
+ 67/9
301
+ """
302
+ return self.polynomial()(v)
303
+
304
+ def polynomial(self):
305
+ """
306
+ Convert to a polynomial in `x`.
307
+
308
+ EXAMPLES::
309
+
310
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
311
+ sage: B = F.gen()
312
+ sage: (B+1).polynomial()
313
+ x + 2
314
+
315
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
316
+ sage: B = F.gen()
317
+ sage: (B+1).polynomial()
318
+ x + 1
319
+
320
+ TESTS::
321
+
322
+ sage: F.zero().polynomial().parent()
323
+ Univariate Polynomial Ring in x over Rational Field
324
+ """
325
+ R = PolynomialRing(QQ, 'x')
326
+ p = self.parent()._poly
327
+ return R.sum(c * p(i) for i, c in self)
328
+
329
+ def shift(self, j=1):
330
+ """
331
+ Shift all indices by `j`.
332
+
333
+ INPUT:
334
+
335
+ - ``j`` -- integer (default: 1)
336
+
337
+ In the binomial basis, the shift by 1 corresponds to
338
+ a summation operator from `0` to `x`.
339
+
340
+ EXAMPLES::
341
+
342
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
343
+ sage: B = F.gen()
344
+ sage: (B+1).shift()
345
+ B[1] + B[2]
346
+ sage: (B+1).shift(3)
347
+ B[3] + B[4]
348
+ """
349
+ A = self.parent()
350
+ return A._from_dict({A._indices(i + j): c for i, c in self})
351
+
352
+ def sum_of_coefficients(self):
353
+ """
354
+ Return the sum of coefficients.
355
+
356
+ In the shifted basis, this is the evaluation at `x=0`.
357
+
358
+ EXAMPLES::
359
+
360
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
361
+ sage: B = F.basis()
362
+ sage: (B[2]*B[4]).sum_of_coefficients()
363
+ 1
364
+
365
+ TESTS::
366
+
367
+ sage: (0*B[2]).sum_of_coefficients().parent()
368
+ Integer Ring
369
+ """
370
+ R = self.parent().base_ring()
371
+ return R.sum(self._monomial_coefficients.values())
372
+
373
+ def content(self):
374
+ """
375
+ Return the content of ``self``.
376
+
377
+ This is the gcd of the coefficients.
378
+
379
+ EXAMPLES::
380
+
381
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
382
+ sage: B = F.basis()
383
+ sage: (3*B[4]+6*B[7]).content()
384
+ 3
385
+
386
+ TESTS::
387
+
388
+ sage: (0*B[2]).content()
389
+ 0
390
+ """
391
+ from sage.arith.misc import gcd
392
+ return gcd(self._monomial_coefficients.values())
393
+
394
+ class Shifted(CombinatorialFreeModule, BindableClass):
395
+ r"""
396
+ The integer-valued polynomial ring in the shifted basis.
397
+
398
+ The basis used here is given by `S[i] = \binom{i+x}{i}` for `i \in \NN`.
399
+
400
+ Assuming `n_1 \leq n_2`, the product of two monomials `S[n_1] \cdot S[n_2]`
401
+ is given by the sum
402
+
403
+ .. MATH::
404
+
405
+ \sum_{k=0}^{n_1} (-1)^k \binom{n_1}{k}\binom{n_1+n_2-k}{n_1} S[n_1 + n_2 - k].
406
+
407
+ EXAMPLES::
408
+
409
+ sage: F = IntegerValuedPolynomialRing(QQ).S(); F
410
+ Integer-Valued Polynomial Ring over Rational Field
411
+ in the shifted basis
412
+
413
+ sage: F.gen()
414
+ S[1]
415
+
416
+ sage: S = IntegerValuedPolynomialRing(ZZ).S(); S
417
+ Integer-Valued Polynomial Ring over Integer Ring
418
+ in the shifted basis
419
+ sage: S.base_ring()
420
+ Integer Ring
421
+
422
+ sage: G = IntegerValuedPolynomialRing(S).S(); G
423
+ Integer-Valued Polynomial Ring over Integer-Valued Polynomial
424
+ Ring over Integer Ring in the shifted basis in the shifted basis
425
+ sage: G.base_ring()
426
+ Integer-Valued Polynomial Ring over Integer Ring
427
+ in the shifted basis
428
+
429
+ Integer-valued polynomial rings commute with their base ring::
430
+
431
+ sage: K = IntegerValuedPolynomialRing(QQ).S()
432
+ sage: a = K.gen()
433
+ sage: K.is_commutative()
434
+ True
435
+ sage: L = IntegerValuedPolynomialRing(K).S()
436
+ sage: c = L.gen()
437
+ sage: L.is_commutative()
438
+ True
439
+ sage: s = a * c^3; s
440
+ S[1]*S[1] + (-6*S[1])*S[2] + 6*S[1]*S[3]
441
+ sage: parent(s)
442
+ Integer-Valued Polynomial Ring over Integer-Valued Polynomial
443
+ Ring over Rational Field in the shifted basis in the shifted basis
444
+
445
+ Integer-valued polynomial rings are commutative::
446
+
447
+ sage: c^3 * a == c * a * c * c
448
+ True
449
+
450
+ We can also manipulate elements in the basis and
451
+ coerce elements from our base field::
452
+
453
+ sage: F = IntegerValuedPolynomialRing(QQ).S()
454
+ sage: S = F.basis()
455
+ sage: S[2] * S[3]
456
+ 3*S[3] - 12*S[4] + 10*S[5]
457
+ sage: 1 - S[2] * S[2] / 2
458
+ S[0] - 1/2*S[2] + 3*S[3] - 3*S[4]
459
+ """
460
+ def __init__(self, A):
461
+ r"""
462
+ Initialize ``self``.
463
+
464
+ EXAMPLES::
465
+
466
+ sage: F = IntegerValuedPolynomialRing(QQ).S(); F
467
+ Integer-Valued Polynomial Ring over Rational Field
468
+ in the shifted basis
469
+ sage: TestSuite(F).run()
470
+ """
471
+ CombinatorialFreeModule.__init__(self, A.base_ring(),
472
+ NonNegativeIntegers(),
473
+ category=A.Bases(),
474
+ prefix='S',
475
+ latex_prefix=r"\mathbb{S}")
476
+
477
+ def _realization_name(self) -> str:
478
+ r"""
479
+ TESTS::
480
+
481
+ sage: F = IntegerValuedPolynomialRing(QQ).S()
482
+ sage: F._realization_name()
483
+ 'shifted'
484
+ """
485
+ return "shifted"
486
+
487
+ def product_on_basis(self, n1, n2):
488
+ r"""
489
+ Return the product of basis elements ``n1`` and ``n2``.
490
+
491
+ INPUT:
492
+
493
+ - ``n1``, ``n2`` -- integers
494
+
495
+ EXAMPLES::
496
+
497
+ sage: A = IntegerValuedPolynomialRing(QQ).S()
498
+ sage: A.product_on_basis(0, 1)
499
+ S[1]
500
+ sage: A.product_on_basis(1, 2)
501
+ -2*S[2] + 3*S[3]
502
+ """
503
+ i = ZZ(n1)
504
+ j = ZZ(n2)
505
+ if j < i:
506
+ j, i = i, j
507
+
508
+ R = self.base_ring()
509
+ return self._from_dict({i + j - k: R((-1)**k * i.binomial(k) * (i + j - k).binomial(i))
510
+ for k in range(i + 1)})
511
+
512
+ def _from_binomial_basis(self, i):
513
+ """
514
+ Convert from the ``binomial(x,k)`` basis.
515
+
516
+ INPUT:
517
+
518
+ - ``i`` -- integer
519
+
520
+ EXAMPLES::
521
+
522
+ sage: S = IntegerValuedPolynomialRing(ZZ).S()
523
+ sage: B = IntegerValuedPolynomialRing(ZZ).B()
524
+ sage: b = B.basis()
525
+ sage: S(b[3]+1) # indirect doctest
526
+ 3*S[1] - 3*S[2] + S[3]
527
+ sage: B(_)
528
+ B[0] + B[3]
529
+ """
530
+ i = ZZ(i)
531
+ R = self.base_ring()
532
+ return self._from_dict({k: R((-1)**(i - k) * i.binomial(k))
533
+ for k in range(i + 1)})
534
+
535
+ def from_h_vector(self, h):
536
+ """
537
+ Convert from some `h`-vector.
538
+
539
+ INPUT:
540
+
541
+ - ``h`` -- tuple or vector
542
+
543
+ .. SEEALSO:: :meth:`Element.h_vector`
544
+
545
+ EXAMPLES::
546
+
547
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
548
+ sage: S = A.basis()
549
+ sage: ex = S[2]+S[4]
550
+ sage: A.from_h_vector(ex.h_vector())
551
+ S[2] + S[4]
552
+ """
553
+ d = len(h) - 1
554
+ m = matrix(QQ, d + 1, d + 1,
555
+ lambda j, i: (-1)**(d - j) * binomial(d - i, d - j))
556
+ v = vector(QQ, [h[i] for i in range(d + 1)])
557
+ R = self.base_ring()
558
+ return self._from_dict({i: R(c)
559
+ for i, c in enumerate(m * v)})
560
+
561
+ def _element_constructor_(self, x):
562
+ r"""
563
+ Convert ``x`` into ``self``.
564
+
565
+ INPUT:
566
+
567
+ - ``x`` -- an element of the base ring or something convertible
568
+
569
+ EXAMPLES::
570
+
571
+ sage: R = IntegerValuedPolynomialRing(QQ).S()
572
+ sage: x = R.gen()
573
+ sage: R(3)
574
+ 3*S[0]
575
+ sage: R(x)
576
+ S[1]
577
+ """
578
+ P = x.parent()
579
+ if isinstance(P, IntegerValuedPolynomialRing.Shifted):
580
+ if P is self:
581
+ return x
582
+ if P is not self.base_ring():
583
+ return self.element_class(self, x.monomial_coefficients())
584
+
585
+ # ok, not a integer-valued polynomial ring element
586
+ R = self.base_ring()
587
+ # coercion via base ring
588
+ x = R(x)
589
+ if x == 0:
590
+ return self.element_class(self, {})
591
+ return self.from_base_ring_from_one_basis(x)
592
+
593
+ def _coerce_map_from_(self, R):
594
+ r"""
595
+ Return whether there is a coercion from ``R`` into ``self``.
596
+
597
+ INPUT:
598
+
599
+ - ``R`` -- a commutative ring
600
+
601
+ The things that coerce into ``self`` are
602
+
603
+ - Integer-Valued Polynomial Rings over a base
604
+ with a coercion map into ``self.base_ring()``.
605
+
606
+ - Anything with a coercion into ``self.base_ring()``.
607
+
608
+ EXAMPLES::
609
+
610
+ sage: F = IntegerValuedPolynomialRing(GF(7)).S(); F
611
+ Integer-Valued Polynomial Ring over Finite Field of size 7
612
+ in the shifted basis
613
+
614
+ Elements of the integer-valued polynomial ring canonically
615
+ coerce in::
616
+
617
+ sage: x = F.gen()
618
+ sage: F.coerce(x*x) # indirect doctest
619
+ 6*S[1] + 2*S[2]
620
+
621
+ Elements of the integers coerce in, since there is a coerce map
622
+ from `\ZZ` to `\GF(7)`::
623
+
624
+ sage: F.coerce(1) # indirect doctest
625
+ S[0]
626
+
627
+ There is no coerce map from `\QQ` to `\GF{7}`::
628
+
629
+ sage: F.coerce(2/3) # indirect doctest
630
+ Traceback (most recent call last):
631
+ ...
632
+ TypeError: no canonical coercion from Rational Field to
633
+ Integer-Valued Polynomial Ring over Finite Field of size 7
634
+ in the shifted basis
635
+
636
+ Elements of the base ring coerce in::
637
+
638
+ sage: F.coerce(GF(7)(5))
639
+ 5*S[0]
640
+
641
+ The integer-valued polynomial ring over `\ZZ` on `x` coerces in,
642
+ since `\ZZ` coerces to `\GF{7}`::
643
+
644
+ sage: G = IntegerValuedPolynomialRing(ZZ).S()
645
+ sage: Gx = G.gen()
646
+ sage: z = F.coerce(Gx**2); z
647
+ -S[1] + 2*S[2]
648
+ sage: z.parent() is F
649
+ True
650
+
651
+ However, `\GF{7}` does not coerce to `\ZZ`, so the
652
+ integer-valued polynomial algebra over `\GF{7}` does not
653
+ coerce to the one over `\ZZ`::
654
+
655
+ sage: G.coerce(x^3+x)
656
+ Traceback (most recent call last):
657
+ ...
658
+ TypeError: no canonical coercion from Integer-Valued Polynomial
659
+ Ring over Finite Field of size 7 in the shifted basis
660
+ to Integer-Valued Polynomial
661
+ Ring over Integer Ring in the shifted basis
662
+
663
+ TESTS::
664
+
665
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
666
+ sage: G = IntegerValuedPolynomialRing(QQ).S()
667
+ sage: H = IntegerValuedPolynomialRing(ZZ).S()
668
+ sage: F._coerce_map_from_(G)
669
+ False
670
+ sage: G._coerce_map_from_(F)
671
+ True
672
+ sage: F._coerce_map_from_(H)
673
+ True
674
+ sage: F._coerce_map_from_(QQ)
675
+ False
676
+ sage: G._coerce_map_from_(QQ)
677
+ True
678
+ sage: F.has_coerce_map_from(PolynomialRing(ZZ,'x'))
679
+ False
680
+ """
681
+ # integer-valued polynomial rings over any base
682
+ # that coerces in:
683
+ if isinstance(R, IntegerValuedPolynomialRing.Shifted):
684
+ return self.base_ring().has_coerce_map_from(R.base_ring())
685
+ if isinstance(R, IntegerValuedPolynomialRing.Binomial):
686
+ return R.module_morphism(self._from_binomial_basis,
687
+ codomain=self)
688
+ return self.base_ring().has_coerce_map_from(R)
689
+
690
+ def _poly(self, i):
691
+ """
692
+ Convert the basis element `S[i]` to a polynomial.
693
+
694
+ INPUT:
695
+
696
+ - ``i`` -- integer
697
+
698
+ EXAMPLES::
699
+
700
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
701
+ sage: F._poly(4)
702
+ 1/24*x^4 + 5/12*x^3 + 35/24*x^2 + 25/12*x + 1
703
+ """
704
+ x = polygen(QQ, 'x')
705
+ return binomial(x + i, i)
706
+
707
+ class Element(CombinatorialFreeModule.Element):
708
+
709
+ def umbra(self):
710
+ """
711
+ Return the Bernoulli umbra.
712
+
713
+ This is the derivative at `-1` of the shift by one.
714
+
715
+ This is related to Bernoulli numbers.
716
+
717
+ .. SEEALSO:: :meth:`derivative_at_minus_one`
718
+
719
+ EXAMPLES::
720
+
721
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
722
+ sage: B = F.gen()
723
+ sage: (B+1).umbra()
724
+ 3/2
725
+
726
+ TESTS::
727
+
728
+ sage: [(B**n).umbra() for n in range(1, 11)]
729
+ [1/2, 1/6, 0, -1/30, 0, 1/42, 0, -1/30, 0, 5/66]
730
+ """
731
+ return self.shift().derivative_at_minus_one()
732
+
733
+ def delta(self):
734
+ r"""
735
+ Return the image by the difference operator `\Delta`.
736
+
737
+ The operator `\Delta` is defined on polynomials by
738
+
739
+ .. MATH::
740
+
741
+ f \mapsto f(x+1)-f(x).
742
+
743
+ EXAMPLES::
744
+
745
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
746
+ sage: S = F.basis()
747
+ sage: S[5].delta()
748
+ S[0] + S[1] + S[2] + S[3] + S[4]
749
+ """
750
+ return self.variable_shift() - self
751
+
752
+ def variable_shift(self, k=1):
753
+ r"""
754
+ Return the image by the shift of variables.
755
+
756
+ On polynomials, the action is the shift
757
+ on variables `x \mapsto x + k`.
758
+
759
+ INPUT:
760
+
761
+ - ``k`` -- integer (default: 1)
762
+
763
+ EXAMPLES::
764
+
765
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
766
+ sage: S = A.basis()
767
+ sage: S[5].variable_shift()
768
+ S[0] + S[1] + S[2] + S[3] + S[4] + S[5]
769
+
770
+ sage: S[5].variable_shift(-1)
771
+ -S[4] + S[5]
772
+
773
+ TESTS::
774
+
775
+ sage: S[5].variable_shift(0)
776
+ S[5]
777
+ sage: S[5].variable_shift().variable_shift(-1)
778
+ S[5]
779
+ sage: S[5].variable_shift(2).variable_shift(-2)
780
+ S[5]
781
+ """
782
+ if k == 0:
783
+ return self
784
+
785
+ A = self.parent()
786
+
787
+ def on_basis(n):
788
+ return {A._indices(j): binomial(k + n - 1 - j, n - j)
789
+ for j in range(n + 1)}
790
+
791
+ mc = self._monomial_coefficients
792
+ ret = linear_combination((on_basis(index), coeff)
793
+ for index, coeff in mc.items())
794
+ return A.element_class(A, ret)
795
+
796
+ def derivative_at_minus_one(self):
797
+ """
798
+ Return the derivative at `-1`.
799
+
800
+ This is sometimes useful when `-1` is a root.
801
+
802
+ .. SEEALSO:: :meth:`umbra`
803
+
804
+ EXAMPLES::
805
+
806
+ sage: F = IntegerValuedPolynomialRing(ZZ).S()
807
+ sage: B = F.gen()
808
+ sage: (B+1).derivative_at_minus_one()
809
+ 1
810
+ """
811
+ return QQ.sum(c / QQ(i) for i, c in self if i)
812
+
813
+ def h_vector(self):
814
+ """
815
+ Return the numerator of the generating series of values.
816
+
817
+ If ``self`` is an Ehrhart polynomial, this is the `h`-vector.
818
+
819
+ .. SEEALSO:: :meth:`h_polynomial`, :meth:`fraction`
820
+
821
+ EXAMPLES::
822
+
823
+ sage: x = polygen(QQ,'x')
824
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
825
+ sage: ex = A.from_polynomial((1+x)**3)
826
+ sage: ex.h_vector()
827
+ (0, 1, 4, 1)
828
+ """
829
+ d = max(self.support(), default=-1)
830
+ m = matrix(QQ, d + 1, d + 1,
831
+ lambda j, i: (-1)**(d - j) * (d - i).binomial(d - j))
832
+ v = vector(QQ, [self.coefficient(i) for i in range(d + 1)])
833
+ return m * v
834
+
835
+ def h_polynomial(self):
836
+ """
837
+ Return the `h`-vector as a polynomial.
838
+
839
+ .. SEEALSO:: :meth:`h_vector`, :meth:`fraction`
840
+
841
+ EXAMPLES::
842
+
843
+ sage: x = polygen(QQ,'x')
844
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
845
+ sage: ex = A.from_polynomial((1+x)**3)
846
+ sage: ex.h_polynomial()
847
+ z^2 + 4*z + 1
848
+ """
849
+ anneau = PolynomialRing(self.parent().base_ring(), 'z')
850
+ return anneau(list(reversed(self.h_vector())))
851
+
852
+ def fraction(self):
853
+ """
854
+ Return the generating series of values as a fraction.
855
+
856
+ In the case of Ehrhart polynomials, this is known as
857
+ the Ehrhart series.
858
+
859
+ .. SEEALSO:: :meth:`h_vector`, :meth:`h_polynomial`
860
+
861
+ EXAMPLES::
862
+
863
+ sage: A = IntegerValuedPolynomialRing(ZZ).S()
864
+ sage: ex = A.monomial(4)
865
+ sage: f = ex.fraction();f
866
+ 1/(-t^5 + 5*t^4 - 10*t^3 + 10*t^2 - 5*t + 1)
867
+
868
+ sage: F = LazyPowerSeriesRing(QQ, 't') # needs sage.combinat
869
+ sage: F(f) # needs sage.combinat
870
+ 1 + 5*t + 15*t^2 + 35*t^3 + 70*t^4 + 126*t^5 + 210*t^6 + O(t^7)
871
+
872
+ sage: poly = ex.polynomial()
873
+ sage: [poly(i) for i in range(6)]
874
+ [1, 5, 15, 35, 70, 126]
875
+
876
+ sage: y = polygen(QQ, 'y')
877
+ sage: penta = A.from_polynomial(7/2*y^2 + 7/2*y + 1)
878
+ sage: penta.fraction()
879
+ (t^2 + 5*t + 1)/(-t^3 + 3*t^2 - 3*t + 1)
880
+
881
+ TESTS::
882
+
883
+ sage: A.zero().fraction()
884
+ 0
885
+ sage: A.zero().fraction().parent()
886
+ Fraction Field of Univariate Polynomial Ring in t over Integer Ring
887
+ """
888
+ v = self.h_vector()
889
+ d = len(v)
890
+ ring_t = PolynomialRing(self.parent().base_ring(), 't')
891
+ t = ring_t.gen()
892
+ numer = ring_t({d - 1 - i: v[i] for i in range(d)})
893
+ return numer / (1 - t)**d
894
+
895
+ S = Shifted
896
+
897
+ # ===== Another basis for the same algebra =====
898
+
899
+ class Binomial(CombinatorialFreeModule, BindableClass):
900
+ r"""
901
+ The integer-valued polynomial ring in the binomial basis.
902
+
903
+ The basis used here is given by `B[i] = \binom{x}{i}` for `i \in \NN`.
904
+
905
+ Assuming `n_1 \leq n_2`, the product of two monomials `B[n_1] \cdot B[n_2]`
906
+ is given by the sum
907
+
908
+ .. MATH::
909
+
910
+ \sum_{k=0}^{n_1} \binom{n_1}{k}\binom{n_1+n_2-k}{n_1} B[n_1 + n_2 - k].
911
+
912
+ The product of two monomials is therefore a positive linear combination
913
+ of monomials.
914
+
915
+ EXAMPLES::
916
+
917
+ sage: F = IntegerValuedPolynomialRing(QQ).B(); F
918
+ Integer-Valued Polynomial Ring over Rational Field
919
+ in the binomial basis
920
+
921
+ sage: F.gen()
922
+ B[1]
923
+
924
+ sage: S = IntegerValuedPolynomialRing(ZZ).B(); S
925
+ Integer-Valued Polynomial Ring over Integer Ring
926
+ in the binomial basis
927
+ sage: S.base_ring()
928
+ Integer Ring
929
+
930
+ sage: G = IntegerValuedPolynomialRing(S).B(); G
931
+ Integer-Valued Polynomial Ring over Integer-Valued Polynomial Ring
932
+ over Integer Ring in the binomial basis in the binomial basis
933
+ sage: G.base_ring()
934
+ Integer-Valued Polynomial Ring over Integer Ring
935
+ in the binomial basis
936
+
937
+ Integer-valued polynomial rings commute with their base ring::
938
+
939
+ sage: K = IntegerValuedPolynomialRing(QQ).B()
940
+ sage: a = K.gen()
941
+ sage: K.is_commutative()
942
+ True
943
+ sage: L = IntegerValuedPolynomialRing(K).B()
944
+ sage: c = L.gen()
945
+ sage: L.is_commutative()
946
+ True
947
+ sage: s = a * c^3; s
948
+ B[1]*B[1] + 6*B[1]*B[2] + 6*B[1]*B[3]
949
+ sage: parent(s)
950
+ Integer-Valued Polynomial Ring over Integer-Valued Polynomial
951
+ Ring over Rational Field in the binomial basis in the binomial basis
952
+
953
+ Integer-valued polynomial rings are commutative::
954
+
955
+ sage: c^3 * a == c * a * c * c
956
+ True
957
+
958
+ We can also manipulate elements in the basis::
959
+
960
+ sage: F = IntegerValuedPolynomialRing(QQ).B()
961
+ sage: B = F.basis()
962
+ sage: B[2] * B[3]
963
+ 3*B[3] + 12*B[4] + 10*B[5]
964
+ sage: 1 - B[2] * B[2] / 2
965
+ B[0] - 1/2*B[2] - 3*B[3] - 3*B[4]
966
+
967
+ and coerce elements from our base field::
968
+
969
+ sage: F(4/3)
970
+ 4/3*B[0]
971
+ """
972
+ def __init__(self, A) -> None:
973
+ r"""
974
+ Initialize ``self``.
975
+
976
+ EXAMPLES::
977
+
978
+ sage: F = IntegerValuedPolynomialRing(QQ).B(); F
979
+ Integer-Valued Polynomial Ring over Rational Field
980
+ in the binomial basis
981
+ sage: TestSuite(F).run()
982
+ """
983
+ CombinatorialFreeModule.__init__(self, A.base_ring(),
984
+ NonNegativeIntegers(),
985
+ latex_prefix='',
986
+ category=A.Bases())
987
+
988
+ def _realization_name(self) -> str:
989
+ r"""
990
+ TESTS::
991
+
992
+ sage: F = IntegerValuedPolynomialRing(QQ).B()
993
+ sage: F._realization_name()
994
+ 'binomial'
995
+ """
996
+ return "binomial"
997
+
998
+ def product_on_basis(self, n1, n2):
999
+ r"""
1000
+ Return the product of basis elements ``n1`` and ``n2``.
1001
+
1002
+ INPUT:
1003
+
1004
+ - ``n1``, ``n2`` -- integers
1005
+
1006
+ EXAMPLES::
1007
+
1008
+ sage: A = IntegerValuedPolynomialRing(QQ).B()
1009
+ sage: A.product_on_basis(0, 1)
1010
+ B[1]
1011
+ sage: A.product_on_basis(1, 2)
1012
+ 2*B[2] + 3*B[3]
1013
+ """
1014
+ i = ZZ(n1)
1015
+ j = ZZ(n2)
1016
+ if j < i:
1017
+ j, i = i, j
1018
+
1019
+ R = self.base_ring()
1020
+ return self._from_dict({i + j - k:
1021
+ R(binomial(i, k) * binomial(i + j - k, i))
1022
+ for k in range(i + 1)})
1023
+
1024
+ def _from_shifted_basis(self, i):
1025
+ """
1026
+ Convert from the shifted binomial(x+k,k) basis.
1027
+
1028
+ INPUT:
1029
+
1030
+ - ``i`` -- integer
1031
+
1032
+ EXAMPLES::
1033
+
1034
+ sage: S = IntegerValuedPolynomialRing(ZZ).S()
1035
+ sage: B = IntegerValuedPolynomialRing(ZZ).B()
1036
+ sage: s = S.basis()
1037
+ sage: B(s[3]+1) # indirect doctest
1038
+ 2*B[0] + 3*B[1] + 3*B[2] + B[3]
1039
+ sage: S(_)
1040
+ S[0] + S[3]
1041
+ """
1042
+ i = ZZ(i)
1043
+ R = self.base_ring()
1044
+ return self._from_dict({k: R(i.binomial(k))
1045
+ for k in range(i + 1)})
1046
+
1047
+ def _element_constructor_(self, x):
1048
+ r"""
1049
+ Convert ``x`` into ``self``.
1050
+
1051
+ EXAMPLES::
1052
+
1053
+ sage: R = IntegerValuedPolynomialRing(QQ).B()
1054
+ sage: x = R.gen()
1055
+ sage: R(3)
1056
+ 3*B[0]
1057
+ sage: R(x)
1058
+ B[1]
1059
+ """
1060
+ P = x.parent()
1061
+ if isinstance(P, IntegerValuedPolynomialRing.Binomial):
1062
+ if P is self:
1063
+ return x
1064
+ if P is not self.base_ring():
1065
+ return self.element_class(self, x.monomial_coefficients())
1066
+
1067
+ # ok, not a integer-valued polynomial ring element
1068
+ R = self.base_ring()
1069
+ # coercion via base ring
1070
+ x = R(x)
1071
+ if x == 0:
1072
+ return self.element_class(self, {})
1073
+ return self.from_base_ring_from_one_basis(x)
1074
+
1075
+ def _coerce_map_from_(self, R):
1076
+ r"""
1077
+ Return whether there is a coercion from ``R`` into ``self``.
1078
+
1079
+ INPUT:
1080
+
1081
+ - ``R`` -- a commutative ring
1082
+
1083
+ The things that coerce into ``self`` are
1084
+
1085
+ - Integer-Valued Polynomial Rings over a base
1086
+ with a coercion map into ``self.base_ring()``.
1087
+
1088
+ - Anything with a coercion into ``self.base_ring()``.
1089
+
1090
+ EXAMPLES::
1091
+
1092
+ sage: F = IntegerValuedPolynomialRing(GF(7)).B(); F
1093
+ Integer-Valued Polynomial Ring over Finite Field of size 7
1094
+ in the binomial basis
1095
+
1096
+ Elements of the integer-valued polynomial ring canonically coerce
1097
+ in::
1098
+
1099
+ sage: x = F.gen()
1100
+ sage: F.coerce(x*x) # indirect doctest
1101
+ B[1] + 2*B[2]
1102
+
1103
+ Elements of the integers coerce in, since there is a coerce map
1104
+ from `\ZZ` to `\GF(7)`::
1105
+
1106
+ sage: F.coerce(1) # indirect doctest
1107
+ B[0]
1108
+
1109
+ There is no coerce map from `\QQ` to `\GF{7}`::
1110
+
1111
+ sage: F.coerce(2/3) # indirect doctest
1112
+ Traceback (most recent call last):
1113
+ ...
1114
+ TypeError: no canonical coercion from Rational Field to
1115
+ Integer-Valued Polynomial Ring over Finite Field of size 7
1116
+ in the binomial basis
1117
+
1118
+ Elements of the base ring coerce in::
1119
+
1120
+ sage: F.coerce(GF(7)(5))
1121
+ 5*B[0]
1122
+
1123
+ The integer-valued polynomial ring over `\ZZ` on `x` coerces in,
1124
+ since `\ZZ` coerces to `\GF{7}`::
1125
+
1126
+ sage: G = IntegerValuedPolynomialRing(ZZ).B()
1127
+ sage: Gx = G.gen()
1128
+ sage: z = F.coerce(Gx**2); z
1129
+ B[1] + 2*B[2]
1130
+ sage: z.parent() is F
1131
+ True
1132
+
1133
+ However, `\GF{7}` does not coerce to `\ZZ`, so the
1134
+ integer-valued polynomial algebra over `\GF{7}` does not
1135
+ coerce to the one over `\ZZ`::
1136
+
1137
+ sage: G.coerce(x^3+x)
1138
+ Traceback (most recent call last):
1139
+ ...
1140
+ TypeError: no canonical coercion from Integer-Valued Polynomial
1141
+ Ring over Finite Field of size 7 in the binomial basis to
1142
+ Integer-Valued Polynomial Ring over Integer Ring
1143
+ in the binomial basis
1144
+
1145
+ TESTS::
1146
+
1147
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
1148
+ sage: G = IntegerValuedPolynomialRing(QQ).B()
1149
+ sage: H = IntegerValuedPolynomialRing(ZZ).B()
1150
+ sage: F._coerce_map_from_(G)
1151
+ False
1152
+ sage: G._coerce_map_from_(F)
1153
+ True
1154
+ sage: F._coerce_map_from_(H)
1155
+ True
1156
+ sage: F._coerce_map_from_(QQ)
1157
+ False
1158
+ sage: G._coerce_map_from_(QQ)
1159
+ True
1160
+ sage: F.has_coerce_map_from(PolynomialRing(ZZ,'x'))
1161
+ False
1162
+ """
1163
+ # integer-valued polynomial rings over any base
1164
+ # that coerces in:
1165
+ if isinstance(R, IntegerValuedPolynomialRing.Binomial):
1166
+ return self.base_ring().has_coerce_map_from(R.base_ring())
1167
+ if isinstance(R, IntegerValuedPolynomialRing.Shifted):
1168
+ return R.module_morphism(self._from_shifted_basis,
1169
+ codomain=self)
1170
+ return self.base_ring().has_coerce_map_from(R)
1171
+
1172
+ def _poly(self, i):
1173
+ """
1174
+ Convert the basis element `B[i]` to a polynomial.
1175
+
1176
+ INPUT:
1177
+
1178
+ - ``i`` -- integer
1179
+
1180
+ EXAMPLES::
1181
+
1182
+ sage: F = IntegerValuedPolynomialRing(ZZ).B()
1183
+ sage: F._poly(4)
1184
+ 1/24*x^4 - 1/4*x^3 + 11/24*x^2 - 1/4*x
1185
+ """
1186
+ x = polygen(QQ, 'x')
1187
+ return binomial(x, i)
1188
+
1189
+ class Element(CombinatorialFreeModule.Element):
1190
+ def variable_shift(self, k=1):
1191
+ r"""
1192
+ Return the image by the shift of variables.
1193
+
1194
+ On polynomials, the action is the shift
1195
+ on variables `x \mapsto x + k`.
1196
+
1197
+ INPUT:
1198
+
1199
+ - ``k`` -- integer (default: 1)
1200
+
1201
+ EXAMPLES::
1202
+
1203
+ sage: A = IntegerValuedPolynomialRing(ZZ).B()
1204
+ sage: B = A.basis()
1205
+ sage: B[5].variable_shift()
1206
+ B[4] + B[5]
1207
+ sage: B[5].variable_shift(-1)
1208
+ -B[0] + B[1] - B[2] + B[3] - B[4] + B[5]
1209
+
1210
+ TESTS::
1211
+
1212
+ sage: B[5].variable_shift(0)
1213
+ B[5]
1214
+ sage: B[5].variable_shift().variable_shift(-1)
1215
+ B[5]
1216
+ """
1217
+ if k == 0:
1218
+ return self
1219
+ A = self.parent()
1220
+
1221
+ def on_basis(n):
1222
+ return {A._indices(j): binomial(k, n - j)
1223
+ for j in range(n + 1)}
1224
+
1225
+ mc = self._monomial_coefficients
1226
+ ret = linear_combination((on_basis(index), coeff)
1227
+ for index, coeff in mc.items())
1228
+ return A.element_class(A, ret)
1229
+
1230
+ B = Binomial