passagemath-modules 10.6.31__cp314-cp314-macosx_13_0_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.31.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
  5. passagemath_modules.dylibs/libgfortran.5.dylib +0 -0
  6. passagemath_modules.dylibs/libgmp.10.dylib +0 -0
  7. passagemath_modules.dylibs/libgsl.28.dylib +0 -0
  8. passagemath_modules.dylibs/libmpc.3.dylib +0 -0
  9. passagemath_modules.dylibs/libmpfr.6.dylib +0 -0
  10. passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
  11. passagemath_modules.dylibs/libquadmath.0.dylib +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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-darwin.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-darwin.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-darwin.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-darwin.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-darwin.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-darwin.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-darwin.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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,1264 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Quantum-valued polynomial rings
4
+
5
+ This provides a `q`-analogue of the :class:`~sage.rings.polynomials.integer_valued_polynomials.IntegerValuedPolynomialRing`.
6
+
7
+ AUTHORS:
8
+
9
+ - Frédéric Chapoton (2024-03): Initial version
10
+ """
11
+ # ****************************************************************************
12
+ # Copyright (C) 2024 Frédéric Chapoton <chapoton-math-unistra-fr>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+ from sage.arith.misc import binomial
21
+ from sage.categories.algebras import Algebras
22
+ from sage.categories.realizations import Category_realization_of_parent
23
+ from sage.categories.rings import Rings
24
+ from sage.combinat.free_module import CombinatorialFreeModule
25
+ from sage.combinat.q_analogues import q_binomial, q_int
26
+ from sage.data_structures.blas_dict import linear_combination
27
+ from sage.matrix.constructor import matrix
28
+ from sage.misc.bindable_class import BindableClass
29
+ from sage.misc.cachefunc import cached_method
30
+ from sage.modules.free_module_element import vector
31
+ from sage.rings.integer_ring import ZZ
32
+ from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
33
+ from sage.rings.polynomial.polynomial_ring import polygen
34
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
35
+ from sage.rings.rational_field import QQ
36
+ from sage.sets.family import Family
37
+ from sage.sets.non_negative_integers import NonNegativeIntegers
38
+ from sage.structure.element import parent
39
+ from sage.structure.parent import Parent
40
+ from sage.structure.unique_representation import UniqueRepresentation
41
+
42
+
43
+ def q_int_x(n, q=None):
44
+ """
45
+ Return the interpolating polynomial of `q`-integers.
46
+
47
+ INPUT:
48
+
49
+ - ``n`` -- a positive integer
50
+
51
+ - ``q`` -- optional variable
52
+
53
+ EXAMPLES::
54
+
55
+ sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_int_x
56
+ sage: q_int_x(3)
57
+ q^2*x + q + 1
58
+
59
+ TESTS::
60
+
61
+ sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_int_x
62
+ sage: q_int_x(3, 1)
63
+ x + 2
64
+ """
65
+ if q is None:
66
+ ring_q = PolynomialRing(ZZ, 'q')
67
+ q = ring_q.gen()
68
+ else:
69
+ ring_q = q.parent()
70
+ x = polygen(ring_q, 'x')
71
+ return q_int(n - 1, q) + q**(n - 1) * x
72
+
73
+
74
+ def q_binomial_x(m, n, q=None):
75
+ r"""
76
+ Return a `q`-analogue of ``binomial(m + x, n)``.
77
+
78
+ When evaluated at the `q`-integer `[k]_q`, this gives
79
+ the usual `q`-binomial coefficient `[m + k, n]_q`.
80
+
81
+ INPUT:
82
+
83
+ - ``m`` and ``n`` -- positive integers
84
+
85
+ - ``q`` -- optional variable
86
+
87
+ EXAMPLES::
88
+
89
+ sage: from sage.combinat.q_analogues import q_int
90
+ sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_binomial_x, q_int_x
91
+ sage: q_binomial_x(4,2)(0) == q_binomial(4,2)
92
+ True
93
+ sage: q_binomial_x(3,2)(1) == q_binomial(4,2)
94
+ True
95
+ sage: q_binomial_x(3,1) == q_int_x(4)
96
+ True
97
+ sage: q_binomial_x(2,0).parent()
98
+ Univariate Polynomial Ring in x over Fraction Field of
99
+ Univariate Polynomial Ring in q over Integer Ring
100
+
101
+ TESTS::
102
+
103
+ sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_binomial_x
104
+ sage: q_binomial_x(4,2,1)
105
+ 1/2*x^2 + 7/2*x + 6
106
+ """
107
+ if q is None:
108
+ ring_q = PolynomialRing(ZZ, 'q')
109
+ else:
110
+ ring_q = q.parent()
111
+ ring = PolynomialRing(ring_q.fraction_field(), 'x')
112
+ if n == 0:
113
+ return ring.one()
114
+ return ring.prod(q_int_x(m + 2 - i, q) / q_int(i, q)
115
+ for i in range(1, n + 1))
116
+
117
+
118
+ class QuantumValuedPolynomialRing(UniqueRepresentation, Parent):
119
+ r"""
120
+ The quantum-valued polynomial ring over a base ring.
121
+
122
+ Quantum-valued polynomial rings are commutative and associative
123
+ algebras, with a basis indexed by nonnegative integers.
124
+
125
+ The elements are polynomials in one variable `x` with coefficients in
126
+ the field of rational functions in `q`, such that the value at
127
+ every nonegative `q`-integer is a polynomial in `q`.
128
+
129
+ This algebra is endowed with two bases, named ``B`` or ``Binomial``
130
+ and ``S`` or ``Shifted``.
131
+
132
+ INPUT:
133
+
134
+ - ``R`` -- commutative ring
135
+
136
+ - ``q`` -- optional variable
137
+
138
+ There are two possible input formats:
139
+
140
+ - If the argument ``q`` is not given, then the ring ``R`` is
141
+ taken as a base ring and the ring of Laurent polynomials in `q`
142
+ over ``R`` is built and used.
143
+
144
+ - If the argument ``q`` is given, then it should belong to the ring ``R``
145
+ and be invertible in this ring.
146
+
147
+ EXAMPLES::
148
+
149
+ sage: F = QuantumValuedPolynomialRing(QQ).S(); F
150
+ Quantum-Valued Polynomial Ring over Rational Field
151
+ in the shifted basis
152
+
153
+ sage: F.gen()
154
+ S[1]
155
+
156
+ sage: S = QuantumValuedPolynomialRing(ZZ); S
157
+ Quantum-Valued Polynomial Ring over Integer Ring
158
+ sage: S.base_ring()
159
+ Univariate Laurent Polynomial Ring in q over Integer Ring
160
+
161
+ Quantum-valued polynomial rings commute with their base ring::
162
+
163
+ sage: K = QuantumValuedPolynomialRing(QQ).S()
164
+ sage: a = K.gen()
165
+ sage: c = K.monomial(2)
166
+
167
+ Quantum-valued polynomial rings are commutative::
168
+
169
+ sage: c^3 * a == c * a * c * c
170
+ True
171
+
172
+ We can also manipulate elements in the basis and coerce elements from our
173
+ base field::
174
+
175
+ sage: F = QuantumValuedPolynomialRing(QQ).S()
176
+ sage: B = F.basis()
177
+ sage: B[2] * B[3]
178
+ (q^-5+q^-4+q^-3)*S[3] - (q^-6+2*q^-5+3*q^-4+3*q^-3+2*q^-2+q^-1)*S[4]
179
+ + (q^-6+q^-5+2*q^-4+2*q^-3+2*q^-2+q^-1+1)*S[5]
180
+ sage: 1 - B[2] * B[2] / 2
181
+ S[0] - (1/2*q^-3)*S[2] + (1/2*q^-4+q^-3+q^-2+1/2*q^-1)*S[3]
182
+ - (1/2*q^-4+1/2*q^-3+q^-2+1/2*q^-1+1/2)*S[4]
183
+ """
184
+ @staticmethod
185
+ def __classcall_private__(cls, R, q=None) -> None:
186
+ """
187
+ Normalize the input.
188
+
189
+ EXAMPLES::
190
+
191
+ sage: q = LaurentPolynomialRing(QQ, 'q').gen()
192
+ sage: F1 = QuantumValuedPolynomialRing(QQ)
193
+ sage: F2 = QuantumValuedPolynomialRing(q.parent(), q)
194
+ sage: F1 is F2
195
+ True
196
+ """
197
+ if R not in Rings().Commutative():
198
+ msg = "argument R must be a commutative ring"
199
+ raise TypeError(msg)
200
+
201
+ if q is None:
202
+ laurent = LaurentPolynomialRing(R, 'q')
203
+ q = laurent.gen()
204
+ else:
205
+ laurent = q.parent()
206
+ return super().__classcall__(cls, laurent, q)
207
+
208
+ def __init__(self, R, q) -> None:
209
+ r"""
210
+ Initialize ``self``.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: F = QuantumValuedPolynomialRing(QQ); F
215
+ Quantum-Valued Polynomial Ring over Rational Field
216
+ sage: TestSuite(F).run()
217
+
218
+ sage: F = QuantumValuedPolynomialRing(QQ, 1); F
219
+ Quantum-Valued Polynomial Ring over Integer Ring
220
+ sage: TestSuite(F).run()
221
+
222
+ TESTS::
223
+
224
+ sage: QuantumValuedPolynomialRing(24)
225
+ Traceback (most recent call last):
226
+ ...
227
+ TypeError: argument R must be a commutative ring
228
+ """
229
+ self._ground_ring = R.base_ring()
230
+ self._q = q
231
+ cat = Algebras(R).Commutative().WithBasis()
232
+ Parent.__init__(self, base=R, category=cat.WithRealizations())
233
+
234
+ _shorthands = ["B", "S"]
235
+
236
+ def _repr_(self) -> str:
237
+ r"""
238
+ Return the string representation.
239
+
240
+ EXAMPLES::
241
+
242
+ sage: F = QuantumValuedPolynomialRing(QQ)
243
+ sage: F # indirect doctest
244
+ Quantum-Valued Polynomial Ring over Rational Field
245
+
246
+ sage: QuantumValuedPolynomialRing(ZZ)
247
+ Quantum-Valued Polynomial Ring over Integer Ring
248
+ """
249
+ base = self.base_ring().base_ring()
250
+ return f"Quantum-Valued Polynomial Ring over {base}"
251
+
252
+ def a_realization(self):
253
+ """
254
+ Return a default realization.
255
+
256
+ The Shifted realization is chosen.
257
+
258
+ EXAMPLES::
259
+
260
+ sage: QuantumValuedPolynomialRing(QQ).a_realization()
261
+ Quantum-Valued Polynomial Ring over Rational Field
262
+ in the shifted basis
263
+ """
264
+ return self.Shifted()
265
+
266
+ class Bases(Category_realization_of_parent):
267
+ def super_categories(self) -> list:
268
+ r"""
269
+ Return the super-categories of ``self``.
270
+
271
+ EXAMPLES::
272
+
273
+ sage: A = QuantumValuedPolynomialRing(QQ); A
274
+ Quantum-Valued Polynomial Ring over Rational Field
275
+ sage: C = A.Bases(); C
276
+ Category of bases of Quantum-Valued Polynomial Ring
277
+ over Rational Field
278
+ sage: C.super_categories()
279
+ [Category of realizations of Quantum-Valued Polynomial Ring
280
+ over Rational Field,
281
+ Join of Category of algebras with basis
282
+ over Univariate Laurent Polynomial Ring in q over Rational Field and
283
+ Category of filtered algebras
284
+ over Univariate Laurent Polynomial Ring in q over Rational Field and
285
+ Category of commutative algebras
286
+ over Univariate Laurent Polynomial Ring in q over Rational Field and
287
+ Category of realizations of unital magmas]
288
+ """
289
+ A = self.base()
290
+ category = Algebras(A.base_ring()).Commutative().Filtered()
291
+ return [A.Realizations(),
292
+ category.Realizations().WithBasis()]
293
+
294
+ class ParentMethods:
295
+ def ground_ring(self):
296
+ """
297
+ Return the ring of coefficients.
298
+
299
+ This ring is not supposed to contain the variable `q`.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
304
+ sage: A.ground_ring()
305
+ Rational Field
306
+ """
307
+ return self.realization_of()._ground_ring
308
+
309
+ def _repr_(self) -> str:
310
+ r"""
311
+ EXAMPLES::
312
+
313
+ sage: F = QuantumValuedPolynomialRing(QQ).S()
314
+ sage: F # indirect doctest
315
+ Quantum-Valued Polynomial Ring over Rational Field
316
+ in the shifted basis
317
+ """
318
+ real = self.realization_of()
319
+ return f"{real} in the {self._realization_name()} basis"
320
+
321
+ @cached_method
322
+ def one_basis(self):
323
+ r"""
324
+ Return the number 0, which index the unit of this algebra.
325
+
326
+ EXAMPLES::
327
+
328
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
329
+ sage: A.one_basis()
330
+ 0
331
+ sage: A.one()
332
+ S[0]
333
+ """
334
+ return self.basis().keys()(0)
335
+
336
+ def q(self):
337
+ """
338
+ Return the variable `q`.
339
+
340
+ EXAMPLES::
341
+
342
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
343
+ sage: A.q()
344
+ q
345
+ """
346
+ return self.realization_of()._q
347
+
348
+ def degree_on_basis(self, m):
349
+ r"""
350
+ Return the degree of the basis element indexed by ``m``.
351
+
352
+ EXAMPLES::
353
+
354
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
355
+ sage: A.degree_on_basis(4)
356
+ 4
357
+ """
358
+ return ZZ(m)
359
+
360
+ def from_polynomial(self, p):
361
+ r"""
362
+ Convert a polynomial into the ring of quantum-valued polynomials.
363
+
364
+ This raises a :exc:`ValueError` if this is not possible.
365
+
366
+ INPUT:
367
+
368
+ - ``p`` -- a polynomial in ``x`` with coefficients in ``QQ(q)``
369
+
370
+ EXAMPLES::
371
+
372
+ sage: A = QuantumValuedPolynomialRing(ZZ).S()
373
+ sage: S = A.basis()
374
+ sage: A.from_polynomial((S[1]).polynomial())
375
+ S[1]
376
+ sage: A.from_polynomial((S[2]+2*S[3]).polynomial())
377
+ S[2] + 2*S[3]
378
+
379
+ sage: A = QuantumValuedPolynomialRing(ZZ).B()
380
+ sage: B = A.basis()
381
+ sage: A.from_polynomial((B[1]).polynomial())
382
+ B[1]
383
+ sage: A.from_polynomial((B[2]+2*B[3]).polynomial())
384
+ B[2] + 2*B[3]
385
+
386
+ TESTS::
387
+
388
+ sage: A = QuantumValuedPolynomialRing(QQ).B()
389
+ sage: q = polygen(QQ,'q')
390
+ sage: x = polygen(q.parent(),'x')
391
+ sage: A.from_polynomial(x**2/(q+1)+1)
392
+ Traceback (most recent call last):
393
+ ...
394
+ ValueError: not a polynomial with integer values : 1/(q + 1) is not a Laurent polynomial
395
+ """
396
+ B = self.basis()
397
+ poly = self._poly
398
+ laurent_polys = self.base_ring()
399
+ remain = p.change_variable_name('x')
400
+ result = self.zero()
401
+ while remain:
402
+ N = remain.degree()
403
+ base_N = poly(N)
404
+ top_coeff = remain.leading_coefficient() / base_N.lc()
405
+ denom = top_coeff.denominator()
406
+ if denom.is_term():
407
+ numer = top_coeff.numerator()
408
+ top_coeff_laurent = laurent_polys(numer) / laurent_polys(denom)
409
+ else:
410
+ msg = 'not a polynomial with integer values :'
411
+ msg += f' {top_coeff} is not a Laurent polynomial'
412
+ raise ValueError(msg)
413
+ remain += -top_coeff * base_N
414
+ result += top_coeff_laurent * B[N]
415
+ return result
416
+
417
+ def gen(self, i=0):
418
+ r"""
419
+ Return the generator of the algebra.
420
+
421
+ The optional argument is ignored.
422
+
423
+ EXAMPLES::
424
+
425
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
426
+ sage: F.gen()
427
+ S[1]
428
+ """
429
+ return self.basis()[1]
430
+
431
+ @cached_method
432
+ def algebra_generators(self):
433
+ r"""
434
+ Return the generators of this algebra.
435
+
436
+ EXAMPLES::
437
+
438
+ sage: A = QuantumValuedPolynomialRing(ZZ).S(); A
439
+ Quantum-Valued Polynomial Ring over Integer Ring
440
+ in the shifted basis
441
+ sage: A.algebra_generators()
442
+ Family (S[1],)
443
+ """
444
+ return Family([self.basis()[1]])
445
+
446
+ gens = algebra_generators
447
+
448
+ class ElementMethods:
449
+ def __call__(self, v):
450
+ """
451
+ Return the evaluation at some value ``v``.
452
+
453
+ EXAMPLES::
454
+
455
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
456
+ sage: B = F.gen()
457
+ sage: f = B**2+4*B+6
458
+ sage: f(1/3)
459
+ (q^2 + 18*q + 99)/9
460
+
461
+ sage: F = QuantumValuedPolynomialRing(ZZ).B()
462
+ sage: B = F.gen()
463
+ sage: f = F.monomial(2)+4*B+6
464
+ sage: f(1/3)
465
+ (66*q^2 + 66*q - 2)/(9*q^2 + 9*q)
466
+ """
467
+ return self.polynomial()(v)
468
+
469
+ def polynomial(self):
470
+ """
471
+ Convert to a polynomial in `x`.
472
+
473
+ EXAMPLES::
474
+
475
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
476
+ sage: S = F.gen()
477
+ sage: (S+1).polynomial()
478
+ q*x + 2
479
+
480
+ sage: F = QuantumValuedPolynomialRing(ZZ).B()
481
+ sage: B = F.gen()
482
+ sage: (B+1).polynomial()
483
+ x + 1
484
+
485
+ TESTS::
486
+
487
+ sage: F.zero().polynomial().parent()
488
+ Univariate Polynomial Ring in x over Fraction Field
489
+ of Univariate Polynomial Ring in q over Integer Ring
490
+ """
491
+ ring = self.parent().ground_ring()
492
+ fractions = PolynomialRing(ring, 'q').fraction_field()
493
+ R = PolynomialRing(fractions, 'x')
494
+ p = self.parent()._poly
495
+ return R.sum(c * p(i) for i, c in self)
496
+
497
+ def shift(self, j=1):
498
+ """
499
+ Shift all indices by `j`.
500
+
501
+ INPUT:
502
+
503
+ - `j` -- integer (default 1)
504
+
505
+ In the binomial basis, the shift by 1 corresponds to
506
+ a summation operator from `0` to `x`.
507
+
508
+ EXAMPLES::
509
+
510
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
511
+ sage: B = F.gen()
512
+ sage: (B+1).shift()
513
+ S[1] + S[2]
514
+ """
515
+ A = self.parent()
516
+ return A._from_dict({A._indices(i + j): c for i, c in self})
517
+
518
+ def sum_of_coefficients(self):
519
+ """
520
+ Return the sum of coefficients.
521
+
522
+ In the shifted basis, this is the evaluation at `x=0`.
523
+
524
+ EXAMPLES::
525
+
526
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
527
+ sage: B = F.basis()
528
+ sage: (B[2]*B[4]).sum_of_coefficients()
529
+ 1
530
+ """
531
+ R = self.parent().base_ring()
532
+ return R.sum(self._monomial_coefficients.values())
533
+
534
+ class Shifted(CombinatorialFreeModule, BindableClass):
535
+ r"""
536
+ The quantum-valued polynomial ring in the shifted basis.
537
+
538
+ The basis used here is given by `S[i] = \genfrac{[}{]}{0pt}{}{i+x}{i}_q` for `i \in \NN`.
539
+
540
+ Assuming `n_1 \leq n_2`, the product of two monomials `S[n_1] \cdot S[n_2]`
541
+ is given by the sum
542
+
543
+ .. MATH::
544
+
545
+ \sum_{k=0}^{n_1} (-1)^k q^{\binom{k}{2} - n_1 * n_2} \genfrac{[}{]}{0pt}{}{n_1}{k}_q \genfrac{[}{]}{0pt}{}{n_1+n_2-k}{n_1}_q S[n_1 + n_2 - k].
546
+ """
547
+ def __init__(self, A):
548
+ r"""
549
+ Initialize ``self``.
550
+
551
+ EXAMPLES::
552
+
553
+ sage: F = QuantumValuedPolynomialRing(QQ).S(); F
554
+ Quantum-Valued Polynomial Ring over Rational Field
555
+ in the shifted basis
556
+ sage: TestSuite(F).run() # not tested
557
+ """
558
+ CombinatorialFreeModule.__init__(self, A.base_ring(),
559
+ NonNegativeIntegers(),
560
+ category=A.Bases(),
561
+ prefix="S",
562
+ latex_prefix=r"\mathbb{S}")
563
+
564
+ def _an_element_(self):
565
+ """
566
+ Return a small element of ``self``.
567
+
568
+ EXAMPLES::
569
+
570
+ sage: F = QuantumValuedPolynomialRing(QQ).S()
571
+ sage: F.an_element()
572
+ 2*S[0] + 4*S[2]
573
+ """
574
+ NonNeg = self.basis().keys()
575
+ ring = self.base_ring()
576
+ return self.element_class(self, {NonNeg(0): ring(2),
577
+ NonNeg(2): ring(4)})
578
+
579
+ def _realization_name(self) -> str:
580
+ r"""
581
+ TESTS::
582
+
583
+ sage: F = QuantumValuedPolynomialRing(QQ).S()
584
+ sage: F._realization_name()
585
+ 'shifted'
586
+ """
587
+ return "shifted"
588
+
589
+ def product_on_basis(self, n1, n2):
590
+ r"""
591
+ Return the product of basis elements ``n1`` and ``n2``.
592
+
593
+ INPUT:
594
+
595
+ - ``n1``, ``n2`` -- integers
596
+
597
+ EXAMPLES::
598
+
599
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
600
+ sage: A.product_on_basis(0, 1)
601
+ S[1]
602
+ """
603
+ i = ZZ(n1)
604
+ j = ZZ(n2)
605
+ if j < i:
606
+ j, i = i, j
607
+ q = self.q()
608
+ return self._from_dict({i + j - k: (-1)**k
609
+ * q_binomial(i, k)
610
+ * q_binomial(i + j - k, i)
611
+ * q**(binomial(k, 2) - i * j)
612
+ for k in range(i + 1)})
613
+
614
+ def _from_binomial_basis(self, i):
615
+ """
616
+ Convert from the ``binomial(x,k)`` basis.
617
+
618
+ INPUT:
619
+
620
+ - ``i`` -- an integer
621
+
622
+ EXAMPLES::
623
+
624
+ sage: S = QuantumValuedPolynomialRing(ZZ).S()
625
+ sage: B = QuantumValuedPolynomialRing(ZZ).B()
626
+ sage: b = B.basis()
627
+ sage: S(b[3]+1) # indirect doctest
628
+ -(q^-6-1)*S[0] + (q^-8+q^-7+q^-6)*S[1]
629
+ - (q^-9+q^-8+q^-7)*S[2] + (q^-9)*S[3]
630
+ sage: B(_)
631
+ B[0] + B[3]
632
+ """
633
+ i = ZZ(i)
634
+ R = self.base_ring()
635
+ q = self.q()
636
+ return self._from_dict({k: R((-1)**(i - k) * q_binomial(i, k))
637
+ * q**(-i**2 + binomial(i - k, 2))
638
+ for k in range(i + 1)})
639
+
640
+ def from_h_vector(self, hv):
641
+ """
642
+ Convert from some `h`-vector.
643
+
644
+ EXAMPLES::
645
+
646
+ sage: A = QuantumValuedPolynomialRing(ZZ).S()
647
+ sage: B = A.basis()
648
+ sage: ex = B[2] + B[3]
649
+ sage: A.from_h_vector(ex.h_vector())
650
+ S[2] + S[3]
651
+
652
+ sage: q = A.base_ring().gen()
653
+ sage: ex = B[2] + q*B[3]
654
+ sage: A.from_h_vector(ex.h_vector())
655
+ S[2] + q*S[3]
656
+ """
657
+ B = self.basis()
658
+ ring = self.base_ring()
659
+ q = self.q()
660
+ d = len(hv) - 1
661
+ m = matrix(ring, d + 1, d + 1,
662
+ [(-1)**(d - j) * q_binomial(d - i, d - j, q) *
663
+ q**(-d * (d - i) + binomial(d - j, 2))
664
+ for j in range(d + 1)
665
+ for i in range(d + 1)])
666
+ v = vector(ring, [hv[i] for i in range(d + 1)])
667
+ return sum(ring(c) * B[i] for i, c in enumerate(m * v))
668
+
669
+ def _element_constructor_(self, x):
670
+ r"""
671
+ Convert ``x`` into ``self``.
672
+
673
+ INPUT:
674
+
675
+ - ``x`` -- an element of the base ring or something convertible
676
+
677
+ EXAMPLES::
678
+
679
+ sage: R = QuantumValuedPolynomialRing(QQ).S()
680
+ sage: x = R.gen()
681
+ sage: R(3)
682
+ 3*S[0]
683
+ sage: R(x)
684
+ S[1]
685
+ """
686
+ P = parent(x)
687
+ if isinstance(P, QuantumValuedPolynomialRing.Shifted):
688
+ if P is self:
689
+ return x
690
+ if P is not self.base_ring():
691
+ return self.element_class(self, x.monomial_coefficients())
692
+
693
+ # ok, not a quantum-valued polynomial ring element
694
+ R = self.base_ring()
695
+ # coercion via base ring
696
+ x = R(x)
697
+ if not x:
698
+ return self.element_class(self, {})
699
+ return self.from_base_ring_from_one_basis(x)
700
+
701
+ def _coerce_map_from_(self, R) -> bool:
702
+ r"""
703
+ Return whether there is a coercion from ``R`` into ``self``.
704
+
705
+ INPUT:
706
+
707
+ - ``R`` -- a commutative ring
708
+
709
+ The things that coerce into ``self`` are
710
+
711
+ - Quantum-Valued Polynomial Rings over a base
712
+ with a coercion map into ``self.base_ring()``.
713
+
714
+ - Anything with a coercion into ``self.base_ring()``.
715
+
716
+ EXAMPLES::
717
+
718
+ sage: F = QuantumValuedPolynomialRing(GF(7)).S(); F
719
+ Quantum-Valued Polynomial Ring over Finite Field of size 7
720
+ in the shifted basis
721
+
722
+ Elements of the quantum-valued polynomial ring canonically coerce in::
723
+
724
+ sage: x = F.gen()
725
+ sage: F.coerce(x*x) # indirect doctest
726
+ (6*q^-1)*S[1] + (q^-1+1)*S[2]
727
+
728
+ Elements of the integers coerce in, since there is a coerce map
729
+ from `\ZZ` to GF(7)::
730
+
731
+ sage: F.coerce(1) # indirect doctest
732
+ S[0]
733
+
734
+ There is no coerce map from `\QQ` to `\GF{7}`::
735
+
736
+ sage: F.coerce(2/3) # indirect doctest
737
+ Traceback (most recent call last):
738
+ ...
739
+ TypeError: no canonical coercion from Rational Field to
740
+ Quantum-Valued Polynomial Ring over Finite Field of size 7
741
+ in the shifted basis
742
+
743
+ Elements of the base ring coerce in::
744
+
745
+ sage: F.coerce(GF(7)(5))
746
+ 5*S[0]
747
+
748
+ The quantum-valued polynomial ring over `\ZZ` on `x` coerces in, since
749
+ `\ZZ` coerces to `\GF{7}`::
750
+
751
+ sage: G = QuantumValuedPolynomialRing(ZZ).S()
752
+ sage: Gx = G.gen()
753
+ sage: z = F.coerce(Gx**2); z
754
+ -(q^-1)*S[1] + (q^-1+1)*S[2]
755
+ sage: z.parent() is F
756
+ True
757
+
758
+ However, `\GF{7}` does not coerce to `\ZZ`, so the shuffle
759
+ algebra over `\GF{7}` does not coerce to the one over `\ZZ`::
760
+
761
+ sage: G.coerce(x^3+x)
762
+ Traceback (most recent call last):
763
+ ...
764
+ TypeError: no canonical coercion from Quantum-Valued Polynomial
765
+ Ring over Finite Field of size 7 in the shifted basis
766
+ to Quantum-Valued Polynomial Ring over Integer Ring
767
+ in the shifted basis
768
+
769
+ TESTS::
770
+
771
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
772
+ sage: G = QuantumValuedPolynomialRing(QQ).S()
773
+ sage: H = QuantumValuedPolynomialRing(ZZ).S()
774
+ sage: F._coerce_map_from_(G)
775
+ False
776
+ sage: G._coerce_map_from_(F)
777
+ True
778
+ sage: F._coerce_map_from_(H)
779
+ True
780
+ sage: F._coerce_map_from_(QQ)
781
+ False
782
+ sage: G._coerce_map_from_(QQ)
783
+ True
784
+ sage: F.has_coerce_map_from(PolynomialRing(ZZ, 'x'))
785
+ False
786
+ """
787
+ # quantum-valued polynomial rings in the same variable
788
+ # over any base that coerces in:
789
+ if isinstance(R, QuantumValuedPolynomialRing.Shifted):
790
+ return self.base_ring().has_coerce_map_from(R.base_ring())
791
+ if isinstance(R, QuantumValuedPolynomialRing.Binomial):
792
+ return R.module_morphism(self._from_binomial_basis,
793
+ codomain=self)
794
+ return self.base_ring().has_coerce_map_from(R)
795
+
796
+ def _poly(self, i):
797
+ """
798
+ Convert the basis element `S[i]` to a polynomial.
799
+
800
+ INPUT:
801
+
802
+ - ``i`` -- an integer
803
+
804
+ EXAMPLES::
805
+
806
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
807
+ sage: F._poly(4).factor() # needs sage.libs.singular
808
+ (1/(q^6 + 3*q^5 + 5*q^4 + 6*q^3 + 5*q^2 + 3*q + 1)) *
809
+ (q*x + 1) * (q^2*x + q + 1) * (q^3*x + q^2 + q + 1) *
810
+ (q^4*x + q^3 + q^2 + q + 1)
811
+ """
812
+ return q_binomial_x(i, i)
813
+
814
+ class Element(CombinatorialFreeModule.Element):
815
+ def umbra(self):
816
+ """
817
+ Return the Bernoulli umbra.
818
+
819
+ This is the derivative at `-1` of the shift by one.
820
+
821
+ This is related to Carlitz's `q`-Bernoulli numbers.
822
+
823
+ .. SEEALSO:: :meth:`derivative_at_minus_one`
824
+
825
+ EXAMPLES::
826
+
827
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
828
+ sage: B = F.gen()
829
+ sage: (B+1).umbra()
830
+ (q + 2)/(q + 1)
831
+ """
832
+ return self.shift().derivative_at_minus_one()
833
+
834
+ def variable_shift(self, k=1):
835
+ r"""
836
+ Return the image by the shift on variables.
837
+
838
+ The shift is the substitution operator
839
+
840
+ .. MATH::
841
+
842
+ x \mapsto q x + 1.
843
+
844
+ INPUT:
845
+
846
+ - `k` -- integer (default: 1)
847
+
848
+ EXAMPLES::
849
+
850
+ sage: A = QuantumValuedPolynomialRing(ZZ).S()
851
+ sage: S = A.basis()
852
+ sage: S[5].variable_shift()
853
+ S[0] + q*S[1] + q^2*S[2] + q^3*S[3] + q^4*S[4] + q^5*S[5]
854
+
855
+ sage: S[5].variable_shift(-1)
856
+ -(q^-5)*S[4] + (q^-5)*S[5]
857
+
858
+ TESTS::
859
+
860
+ sage: S[5].variable_shift(0)
861
+ S[5]
862
+ sage: S[5].variable_shift().variable_shift(-1)
863
+ S[5]
864
+ sage: S[5].variable_shift(2).variable_shift(-2)
865
+ S[5]
866
+ sage: S[3].variable_shift(-2)
867
+ (q^-5)*S[1] - (q^-6+q^-5)*S[2] + (q^-6)*S[3]
868
+ """
869
+ if k == 0:
870
+ return self
871
+
872
+ A = self.parent()
873
+ q = A.q()
874
+
875
+ def on_basis(n):
876
+ return {A._indices(j): q**(k * j)
877
+ * q_binomial(k + n - 1 - j, n - j)
878
+ for j in range(n + 1)}
879
+
880
+ mc = self._monomial_coefficients
881
+ ret = linear_combination((on_basis(index), coeff)
882
+ for index, coeff in mc.items())
883
+ return A.element_class(A, ret)
884
+
885
+ def derivative_at_minus_one(self):
886
+ """
887
+ Return the 'derivative' at -1.
888
+
889
+ .. SEEALSO:: :meth:`umbra`
890
+
891
+ EXAMPLES::
892
+
893
+ sage: F = QuantumValuedPolynomialRing(ZZ).S()
894
+ sage: B = F.gen()
895
+ sage: (B+1).derivative_at_minus_one()
896
+ 1
897
+ """
898
+ ring = q_int(1).parent()
899
+ return ring.sum(c / q_int(i) for i, c in self if i > 0)
900
+
901
+ def h_vector(self):
902
+ """
903
+ Return the numerator of the generating series of values.
904
+
905
+ If ``self`` is an Ehrhart polynomial, this is the h-vector.
906
+
907
+ .. SEEALSO:: :meth:`h_polynomial`, :meth:`fraction`
908
+
909
+ EXAMPLES::
910
+
911
+ sage: A = QuantumValuedPolynomialRing(ZZ).S()
912
+ sage: ex = A.basis()[4]
913
+ sage: ex.h_vector()
914
+ (0, 0, 0, 0, 1)
915
+
916
+ sage: q = polygen(QQ,'q')
917
+ sage: x = polygen(q.parent(),'x')
918
+ sage: ex = A.from_polynomial((1+q*x)**3)
919
+ sage: ex.h_vector()
920
+ (0, q^3, 2*q + 2*q^2, 1)
921
+ """
922
+ d = max(self.support())
923
+ ring = self.parent().base_ring()
924
+ q = self.parent().q()
925
+
926
+ def fn(j, i):
927
+ return ((-1)**(d - j) *
928
+ q**(binomial(d - j + i + 1, 2) -
929
+ binomial(i + 1, 2)) *
930
+ q_binomial(d - i, d - j))
931
+ m = matrix(ring, d + 1, d + 1, fn)
932
+ v = vector(ring, [self.coefficient(i) for i in range(d + 1)])
933
+ return m * v
934
+
935
+ def h_polynomial(self):
936
+ """
937
+ Return the `h`-vector as a polynomial.
938
+
939
+ .. SEEALSO:: :meth:`h_vector`, :meth:`fraction`
940
+
941
+ EXAMPLES::
942
+
943
+ sage: A = QuantumValuedPolynomialRing(ZZ).S()
944
+ sage: q = polygen(ZZ,'q')
945
+ sage: x = polygen(q.parent(),'x')
946
+ sage: ex = A.from_polynomial((1+q*x)**3)
947
+ sage: ex.h_polynomial()
948
+ z^3 + (2*q + 2*q^2)*z^2 + q^3*z
949
+ """
950
+ ring = PolynomialRing(self.parent().base_ring(), 'z')
951
+ return ring(list(self.h_vector()))
952
+
953
+ def fraction(self):
954
+ """
955
+ Return the generating series of values as a fraction.
956
+
957
+ .. SEEALSO:: :meth:`h_vector`, :meth:`h_polynomial`
958
+
959
+ EXAMPLES::
960
+
961
+ sage: A = QuantumValuedPolynomialRing(QQ).S()
962
+ sage: ex = A.basis()[4]
963
+ sage: ex.fraction().factor() # needs sage.libs.singular
964
+ (-1) * (t - 1)^-1 * (q*t - 1)^-1 * (q^2*t - 1)^-1 * (q^3*t - 1)^-1 * (q^4*t - 1)^-1
965
+
966
+ sage: q = polygen(QQ,'q')
967
+ sage: x = polygen(q.parent(), 'x')
968
+ sage: ex = A.from_polynomial((1+q*x)**3)
969
+ sage: ex.fraction().factor() # needs sage.libs.singular
970
+ (t - 1)^-1 * (q*t - 1)^-1 * (q^2*t - 1)^-1 * (q^3*t - 1)^-1 * (q^3*t^2 + 2*q^2*t + 2*q*t + 1)
971
+ sage: ex.fraction().numerator() # needs sage.libs.singular
972
+ q^3*t^2 + 2*q^2*t + 2*q*t + 1
973
+ """
974
+ v = self.h_vector()
975
+ d = len(v)
976
+ R = PolynomialRing(QQ, 'q,t')
977
+ frac_R = R.fraction_field()
978
+ q, t = R.gens()
979
+ denom = R.prod(1 - q**i * t for i in range(d))
980
+ numer = sum(frac_R(v[i]) * t**(d - 1 - i) for i in range(d))
981
+ return numer / denom
982
+
983
+ S = Shifted
984
+
985
+ # ===== Another basis for the same algebra =====
986
+
987
+ class Binomial(CombinatorialFreeModule, BindableClass):
988
+ r"""
989
+ The quantum-valued polynomial ring in the binomial basis.
990
+
991
+ The basis used here is given by `B[i] = \genfrac{[}{]}{0pt}{}{x}{i}_q` for `i \in \NN`.
992
+
993
+ Assuming `n_1 \leq n_2`, the product of two monomials `B[n_1] \cdot B[n_2]`
994
+ is given by the sum
995
+
996
+ .. MATH::
997
+
998
+ \sum_{k=0}^{n_1} q^{(k-n_1)(k-n_2)} \genfrac{[}{]}{0pt}{}{n_1}{k}_q \genfrac{[}{]}{0pt}{}{n_1+n_2-k}{n_1}_q B[n_1 + n_2 - k].
999
+ """
1000
+ def __init__(self, A) -> None:
1001
+ r"""
1002
+ Initialize ``self``.
1003
+
1004
+ EXAMPLES::
1005
+
1006
+ sage: F = QuantumValuedPolynomialRing(QQ).B(); F
1007
+ Quantum-Valued Polynomial Ring over Rational Field
1008
+ in the binomial basis
1009
+ sage: TestSuite(F).run() # not tested
1010
+ """
1011
+ CombinatorialFreeModule.__init__(self, A.base_ring(),
1012
+ NonNegativeIntegers(),
1013
+ category=A.Bases(),
1014
+ prefix="B",
1015
+ latex_prefix=r"\mathbb{B}")
1016
+
1017
+ def _realization_name(self) -> str:
1018
+ r"""
1019
+ TESTS::
1020
+
1021
+ sage: F = QuantumValuedPolynomialRing(QQ).B()
1022
+ sage: F._realization_name()
1023
+ 'binomial'
1024
+ """
1025
+ return "binomial"
1026
+
1027
+ def product_on_basis(self, n1, n2):
1028
+ r"""
1029
+ Return the product of basis elements ``n1`` and ``n2``.
1030
+
1031
+ INPUT:
1032
+
1033
+ - ``n1``, ``n2`` -- integers
1034
+
1035
+ The formula is taken from Theorem 3.4 in [HaHo2017]_.
1036
+
1037
+ EXAMPLES::
1038
+
1039
+ sage: A = QuantumValuedPolynomialRing(QQ).B()
1040
+ sage: A.product_on_basis(0, 1)
1041
+ B[1]
1042
+ """
1043
+ i = ZZ(n1)
1044
+ j = ZZ(n2)
1045
+ if j < i:
1046
+ j, i = i, j
1047
+
1048
+ q = self.q()
1049
+ return self._from_dict({i + j - k:
1050
+ q_binomial(i, k)
1051
+ * q_binomial(i + j - k, i)
1052
+ * q**((k - i) * (k - j))
1053
+ for k in range(i + 1)})
1054
+
1055
+ def _from_shifted_basis(self, i):
1056
+ """
1057
+ Convert from the shifted binomial(x+k,k) basis.
1058
+
1059
+ INPUT:
1060
+
1061
+ - ``i`` -- an integer
1062
+
1063
+ EXAMPLES::
1064
+
1065
+ sage: S = QuantumValuedPolynomialRing(ZZ).S()
1066
+ sage: B = QuantumValuedPolynomialRing(ZZ).B()
1067
+ sage: s = S.basis()
1068
+ sage: B(s[3]+1) # indirect doctest
1069
+ 2*B[0] + (q+q^2+q^3)*B[1] + (q^4+q^5+q^6)*B[2] + q^9*B[3]
1070
+ sage: S(_)
1071
+ S[0] + S[3]
1072
+ """
1073
+ i = ZZ(i)
1074
+ R = self.base_ring()
1075
+ q = self.q()
1076
+ return self._from_dict({k: R(q_binomial(i, k))
1077
+ * q**(k**2)
1078
+ for k in range(i + 1)})
1079
+
1080
+ def _element_constructor_(self, x):
1081
+ r"""
1082
+ Convert ``x`` into ``self``.
1083
+
1084
+ EXAMPLES::
1085
+
1086
+ sage: R = QuantumValuedPolynomialRing(QQ).B()
1087
+ sage: x = R.gen()
1088
+ sage: R(3)
1089
+ 3*B[0]
1090
+ sage: R(x)
1091
+ B[1]
1092
+ """
1093
+ P = x.parent()
1094
+ if isinstance(P, QuantumValuedPolynomialRing.Binomial):
1095
+ if P is self:
1096
+ return x
1097
+ if P is not self.base_ring():
1098
+ return self.element_class(self, x.monomial_coefficients())
1099
+
1100
+ # ok, not a quantum-valued polynomial ring element
1101
+ R = self.base_ring()
1102
+ # coercion via base ring
1103
+ x = R(x)
1104
+ if not x:
1105
+ return self.element_class(self, {})
1106
+ return self.from_base_ring_from_one_basis(x)
1107
+
1108
+ def _coerce_map_from_(self, R):
1109
+ r"""
1110
+ Return whether there is a coercion from ``R`` into ``self``.
1111
+
1112
+ INPUT:
1113
+
1114
+ - ``R`` -- a commutative ring
1115
+
1116
+ The things that coerce into ``self`` are
1117
+
1118
+ - Quantum-Valued Polynomial Rings over a base
1119
+ with a coercion map into ``self.base_ring()``.
1120
+
1121
+ - Anything with a coercion into ``self.base_ring()``.
1122
+
1123
+ EXAMPLES::
1124
+
1125
+ sage: F = QuantumValuedPolynomialRing(GF(7)).B(); F
1126
+ Quantum-Valued Polynomial Ring over Finite Field of size 7
1127
+ in the binomial basis
1128
+
1129
+ Elements of the integer-valued polynomial ring canonically coerce
1130
+ in::
1131
+
1132
+ sage: x = F.gen()
1133
+ sage: F.coerce(x*x) # indirect doctest
1134
+ B[1] + (q+q^2)*B[2]
1135
+
1136
+ Elements of the integers coerce in, since there is a coerce map
1137
+ from `\ZZ` to `\GF(7)`::
1138
+
1139
+ sage: F.coerce(1) # indirect doctest
1140
+ B[0]
1141
+
1142
+ There is no coerce map from `\QQ` to `\GF{7}`::
1143
+
1144
+ sage: F.coerce(2/3) # indirect doctest
1145
+ Traceback (most recent call last):
1146
+ ...
1147
+ TypeError: no canonical coercion from Rational Field to
1148
+ Quantum-Valued Polynomial Ring over Finite Field of size 7
1149
+ in the binomial basis
1150
+
1151
+ Elements of the base ring coerce in::
1152
+
1153
+ sage: F.coerce(GF(7)(5))
1154
+ 5*B[0]
1155
+
1156
+ The integer-valued polynomial ring over `\ZZ` on `x` coerces in,
1157
+ since `\ZZ` coerces to `\GF{7}`::
1158
+
1159
+ sage: G = QuantumValuedPolynomialRing(ZZ).B()
1160
+ sage: Gx = G.gen()
1161
+ sage: z = F.coerce(Gx**2); z
1162
+ B[1] + (q+q^2)*B[2]
1163
+ sage: z.parent() is F
1164
+ True
1165
+
1166
+ However, `\GF{7}` does not coerce to `\ZZ`, so the
1167
+ integer-valued polynomial algebra over `\GF{7}` does not
1168
+ coerce to the one over `\ZZ`::
1169
+
1170
+ sage: G.coerce(x^3+x)
1171
+ Traceback (most recent call last):
1172
+ ...
1173
+ TypeError: no canonical coercion from
1174
+ Quantum-Valued Polynomial Ring over Finite Field of size 7
1175
+ in the binomial basis to Quantum-Valued Polynomial Ring
1176
+ over Integer Ring in the binomial basis
1177
+
1178
+ TESTS::
1179
+
1180
+ sage: F = QuantumValuedPolynomialRing(ZZ).B()
1181
+ sage: G = QuantumValuedPolynomialRing(QQ).B()
1182
+ sage: H = QuantumValuedPolynomialRing(ZZ).B()
1183
+ sage: F._coerce_map_from_(G)
1184
+ False
1185
+ sage: G._coerce_map_from_(F)
1186
+ True
1187
+ sage: F._coerce_map_from_(H)
1188
+ True
1189
+ sage: F._coerce_map_from_(QQ)
1190
+ False
1191
+ sage: G._coerce_map_from_(QQ)
1192
+ True
1193
+ sage: F.has_coerce_map_from(PolynomialRing(ZZ,'x'))
1194
+ False
1195
+ """
1196
+ # quantum-valued polynomial rings over any base
1197
+ # that coerces in:
1198
+ if isinstance(R, QuantumValuedPolynomialRing.Binomial):
1199
+ return self.base_ring().has_coerce_map_from(R.base_ring())
1200
+ if isinstance(R, QuantumValuedPolynomialRing.Shifted):
1201
+ return R.module_morphism(self._from_shifted_basis,
1202
+ codomain=self)
1203
+ return self.base_ring().has_coerce_map_from(R)
1204
+
1205
+ def _poly(self, i):
1206
+ """
1207
+ Convert the basis element `B[i]` to a polynomial.
1208
+
1209
+ INPUT:
1210
+
1211
+ - ``i`` -- an integer
1212
+
1213
+ EXAMPLES::
1214
+
1215
+ sage: F = QuantumValuedPolynomialRing(ZZ).B()
1216
+ sage: F._poly(4).factor() # needs sage.libs.singular
1217
+ (1/(q^12 + 3*q^11 + 5*q^10 + 6*q^9 + 5*q^8 + 3*q^7 + q^6)) *
1218
+ (x - 1) * x * (x - q - 1) * (x - q^2 - q - 1)
1219
+ """
1220
+ return q_binomial_x(0, i)
1221
+
1222
+ class Element(CombinatorialFreeModule.Element):
1223
+ def variable_shift(self, k=1):
1224
+ r"""
1225
+ Return the image by the shift of variables.
1226
+
1227
+ On polynomials, the action for `k=1` is the shift
1228
+ on variables `x \mapsto 1 + qx`.
1229
+
1230
+ This implementation follows formula (5.5) in [HaHo2017]_.
1231
+
1232
+ INPUT:
1233
+
1234
+ - `k` -- nonnegative integer (default: 1)
1235
+
1236
+ EXAMPLES::
1237
+
1238
+ sage: A = QuantumValuedPolynomialRing(ZZ).B()
1239
+ sage: B = A.basis()
1240
+ sage: B[5].variable_shift()
1241
+ B[4] + q^5*B[5]
1242
+
1243
+ TESTS::
1244
+
1245
+ sage: B[5].variable_shift(0)
1246
+ B[5]
1247
+ """
1248
+ if k == 0:
1249
+ return self
1250
+
1251
+ A = self.parent()
1252
+ q = A.q()
1253
+
1254
+ def on_basis(n):
1255
+ return {A._indices(j): q**((k + j - n) * j)
1256
+ * q_binomial(k, n - j)
1257
+ for j in range(n + 1)}
1258
+
1259
+ mc = self._monomial_coefficients
1260
+ ret = linear_combination((on_basis(index), coeff)
1261
+ for index, coeff in mc.items())
1262
+ return A.element_class(A, ret)
1263
+
1264
+ B = Binomial