passagemath-modules 10.6.31__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.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.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-ecd7067e.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,93 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Constructions of quadratic forms
4
+ """
5
+ ##
6
+ # Some extra routines to make the QuadraticForm class more useful.
7
+ ##
8
+
9
+ from sage.rings.integer_ring import ZZ
10
+ from sage.rings.polynomial.polynomial_element import Polynomial
11
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
12
+ from sage.quadratic_forms.quadratic_form import QuadraticForm
13
+
14
+
15
+ def BezoutianQuadraticForm(f, g):
16
+ r"""
17
+ Compute the Bezoutian of two polynomials defined over a common base ring. This is defined by
18
+
19
+ .. MATH::
20
+
21
+ {\rm Bez}(f, g) := \frac{f(x) g(y) - f(y) g(x)}{y - x}
22
+
23
+ and has size defined by the maximum of the degrees of `f` and `g`.
24
+
25
+ INPUT:
26
+
27
+ - ``f``, ``g`` -- polynomials in `R[x]`, for some ring `R`
28
+
29
+ OUTPUT: a quadratic form over `R`
30
+
31
+ EXAMPLES::
32
+
33
+ sage: R = PolynomialRing(ZZ, 'x')
34
+ sage: f = R([1,2,3])
35
+ sage: g = R([2,5])
36
+ sage: Q = BezoutianQuadraticForm(f, g); Q # needs sage.libs.singular
37
+ Quadratic form in 2 variables over Integer Ring with coefficients:
38
+ [ 1 -12 ]
39
+ [ * -15 ]
40
+
41
+ AUTHORS:
42
+
43
+ - Fernando Rodriguez-Villegas, Jonathan Hanke -- added on 11/9/2008
44
+ """
45
+ # Check that f and g are polynomials with a common base ring
46
+ if not isinstance(f, Polynomial) or not isinstance(g, Polynomial):
47
+ raise TypeError("one of your inputs is not a polynomial")
48
+ if f.base_ring() != g.base_ring(): # TO DO: Change this to allow coercion!
49
+ raise TypeError("these polynomials are not defined over the same coefficient ring")
50
+
51
+ # Initialize the quadratic form
52
+ R = f.base_ring()
53
+ P = PolynomialRing(R, ['x', 'y'])
54
+ a, b = P.gens()
55
+ n = max(f.degree(), g.degree())
56
+ Q = QuadraticForm(R, n)
57
+
58
+ # Set the coefficients of Bezoutian
59
+ bez_poly = (f(a) * g(b) - f(b) * g(a)) // (b - a) # Truncated (exact) division here
60
+ for i in range(n):
61
+ for j in range(i, n):
62
+ if i == j:
63
+ Q[i, j] = bez_poly.coefficient({a: i, b: j})
64
+ else:
65
+ Q[i, j] = bez_poly.coefficient({a: i, b: j}) * 2
66
+
67
+ return Q
68
+
69
+
70
+ def HyperbolicPlane_quadratic_form(R, r=1):
71
+ """
72
+ Construct the direct sum of `r` copies of the quadratic form `xy`
73
+ representing a hyperbolic plane defined over the base ring `R`.
74
+
75
+ INPUT:
76
+
77
+ - ``R`` -- a ring
78
+ - ``n`` -- integer (default: 1); number of copies
79
+
80
+ EXAMPLES::
81
+
82
+ sage: HyperbolicPlane_quadratic_form(ZZ)
83
+ Quadratic form in 2 variables over Integer Ring with coefficients:
84
+ [ 0 1 ]
85
+ [ * 0 ]
86
+ """
87
+ r = ZZ(r)
88
+ # Check that the multiplicity is a natural number
89
+ if r < 1:
90
+ raise TypeError("the multiplicity r must be a natural number")
91
+
92
+ H = QuadraticForm(R, 2, [0, 1, 0])
93
+ return sum([H for i in range(r - 1)], H)
@@ -0,0 +1,365 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Optimized counting of congruence solutions
4
+ """
5
+ from sage.arith.misc import is_prime, kronecker as kronecker_symbol, valuation
6
+ from sage.rings.finite_rings.integer_mod import Mod
7
+ from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
8
+
9
+
10
+ def count_modp__by_gauss_sum(n, p, m, Qdet):
11
+ r"""
12
+ Return the number of solutions of `Q(x) = m` over the finite field
13
+ `\ZZ/p\ZZ`, where `p` is a prime number > 2 and `Q` is a non-degenerate
14
+ quadratic form of dimension `n \geq 1` and has Gram determinant ``Qdet``.
15
+
16
+ REFERENCE:
17
+
18
+ These are defined in Table 1 on p363 of Hanke's "Local Densities..." paper.
19
+
20
+ INPUT:
21
+
22
+ - ``n`` -- integer `\geq 1`
23
+ - ``p`` -- a prime number > 2
24
+ - ``m`` -- integer
25
+ - ``Qdet`` -- a integer which is nonzero mod `p`
26
+
27
+ OUTPUT: integer `\geq 0`
28
+
29
+ EXAMPLES::
30
+
31
+ sage: from sage.quadratic_forms.count_local_2 import count_modp__by_gauss_sum
32
+
33
+ sage: count_modp__by_gauss_sum(3, 3, 0, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
34
+ 9
35
+ sage: count_modp__by_gauss_sum(3, 3, 1, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
36
+ 6
37
+ sage: count_modp__by_gauss_sum(3, 3, 2, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
38
+ 12
39
+
40
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1])
41
+ sage: [Q.count_congruence_solutions(3, 1, m, None, None)
42
+ ....: == count_modp__by_gauss_sum(3, 3, m, 1)
43
+ ....: for m in range(3)]
44
+ [True, True, True]
45
+
46
+
47
+ sage: count_modp__by_gauss_sum(3, 3, 0, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
48
+ 9
49
+ sage: count_modp__by_gauss_sum(3, 3, 1, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
50
+ 12
51
+ sage: count_modp__by_gauss_sum(3, 3, 2, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
52
+ 6
53
+
54
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,2])
55
+ sage: [Q.count_congruence_solutions(3, 1, m, None, None)
56
+ ....: == count_modp__by_gauss_sum(3, 3, m, 2)
57
+ ....: for m in range(3)]
58
+ [True, True, True]
59
+ """
60
+ # Check that Qdet is non-degenerate
61
+ if Qdet % p == 0:
62
+ raise RuntimeError("Qdet must be nonzero.")
63
+
64
+ # Check that p is prime > 2
65
+ if not is_prime(p) or p == 2:
66
+ raise RuntimeError("p must be a prime number > 2.")
67
+
68
+ # Check that n >= 1
69
+ if n < 1:
70
+ raise RuntimeError("the dimension n must be >= 1.")
71
+
72
+ # Compute the Gauss sum
73
+ neg1 = -1
74
+ if not m % p:
75
+ if n % 2:
76
+ count = p**(n - 1)
77
+ else:
78
+ count = p**(n - 1) + (p - 1) * (p**((n - 2) // 2)) * kronecker_symbol(((neg1**(n // 2)) * Qdet) % p, p)
79
+ else:
80
+ if n % 2:
81
+ count = p**(n - 1) + p**((n - 1) // 2) * kronecker_symbol(((neg1**((n - 1) // 2)) * Qdet * m) % p, p)
82
+ else:
83
+ count = p**(n - 1) - p**((n - 2) // 2) * kronecker_symbol(((neg1**(n // 2)) * Qdet) % p, p)
84
+
85
+ # Return the result
86
+ return count
87
+
88
+
89
+ cdef CountAllLocalTypesNaive_cdef(Q, p, k, m, zvec, nzvec):
90
+ """
91
+ This Cython routine is documented in its Python wrapper method
92
+ QuadraticForm.count_congruence_solutions_by_type().
93
+ """
94
+ cdef long n, i
95
+ cdef long a, b # Used to quickly evaluate Q(v)
96
+ cdef long ptr # Used to increment the vector
97
+ cdef long solntype # Used to store the kind of solution we find
98
+
99
+ # Some shortcuts and definitions
100
+ n = Q.dim()
101
+ R = p ** k
102
+ Q1 = Q.change_ring(IntegerModRing(R))
103
+
104
+ # Initialize the counting vector
105
+ count_vector = [0 for i in range(6)]
106
+
107
+ # Initialize v = (0, ... , 0)
108
+ v = [Mod(0, R) for i in range(n)]
109
+
110
+ # Some declarations to speed up the loop
111
+ R_n = R ** n
112
+ m1 = Mod(m, R)
113
+
114
+ # Count the local solutions
115
+ for i in range(R_n):
116
+
117
+ # Perform a carry (when value = R-1) until we can increment freely
118
+ ptr = len(v)
119
+ while ((ptr > 0) and (v[ptr - 1] == R - 1)):
120
+ v[ptr - 1] += 1
121
+ ptr += -1
122
+
123
+ # Only increment if we're not already at the zero vector =)
124
+ if ptr > 0:
125
+ v[ptr - 1] += 1
126
+
127
+ # Evaluate Q(v) quickly
128
+ tmp_val = Mod(0, R)
129
+ for a from 0 <= a < n:
130
+ for b from a <= b < n:
131
+ tmp_val += Q1[a, b] * v[a] * v[b]
132
+
133
+ # Sort the solution by it's type
134
+ # if Q1(v) == m1:
135
+ if tmp_val == m1:
136
+ solntype = local_solution_type_cdef(Q1, p, v, zvec, nzvec)
137
+ if solntype != 0:
138
+ count_vector[solntype] += 1
139
+
140
+ # Generate the Bad-type and Total counts
141
+ count_vector[3] = count_vector[4] + count_vector[5]
142
+ count_vector[0] = count_vector[1] + count_vector[2] + count_vector[3]
143
+
144
+ # Return the solution counts
145
+ return count_vector
146
+
147
+
148
+ def CountAllLocalTypesNaive(Q, p, k, m, zvec, nzvec):
149
+ r"""
150
+ This is an internal routine, which is called by
151
+ :meth:`sage.quadratic_forms.quadratic_form.QuadraticForm.count_congruence_solutions_by_type
152
+ QuadraticForm.count_congruence_solutions_by_type`. See the documentation of
153
+ that method for more details.
154
+
155
+ INPUT:
156
+
157
+ - ``Q`` -- quadratic form over `\ZZ`
158
+ - ``p`` -- prime number > 0
159
+ - ``k`` -- integer > 0
160
+ - ``m`` -- integer (depending only on mod `p^k`)
161
+ - ``zvec``, ``nzvec`` -- list of integers in ``range(Q.dim())``, or ``None``
162
+
163
+ OUTPUT:
164
+
165
+ a list of six integers `\ge 0` representing the solution types: ``[All,
166
+ Good, Zero, Bad, BadI, BadII]``
167
+
168
+ EXAMPLES::
169
+
170
+ sage: from sage.quadratic_forms.count_local_2 import CountAllLocalTypesNaive
171
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
172
+ sage: CountAllLocalTypesNaive(Q, 3, 1, 1, None, None)
173
+ [6, 6, 0, 0, 0, 0]
174
+ sage: CountAllLocalTypesNaive(Q, 3, 1, 2, None, None)
175
+ [6, 6, 0, 0, 0, 0]
176
+ sage: CountAllLocalTypesNaive(Q, 3, 1, 0, None, None)
177
+ [15, 12, 1, 2, 0, 2]
178
+ """
179
+ return CountAllLocalTypesNaive_cdef(Q, p, k, m, zvec, nzvec)
180
+
181
+
182
+ cdef local_solution_type_cdef(Q, p, w, zvec, nzvec):
183
+ """
184
+ Internal routine to check if a given solution vector `w` (of `Q(w) =
185
+ m` mod `p^k`) is of a certain local type and satisfies certain
186
+ congruence conditions mod `p`.
187
+
188
+ NOTE: No internal checking is done to test if `p` is a prime >=2, or
189
+ that Q has the same size as `w`.
190
+ """
191
+ cdef long i
192
+ cdef long n
193
+
194
+ n = Q.dim()
195
+
196
+ # Check if the solution satisfies the zvec "zero" congruence conditions
197
+ # (either zvec is empty or its components index the zero vector mod p)
198
+ if zvec is None or not zvec:
199
+ zero_flag = True
200
+ else:
201
+ zero_flag = False
202
+ i = 0
203
+ while i < len(zvec) and not w[zvec[i]] % p: # Increment so long as our entry is zero (mod p)
204
+ i += 1
205
+ if i == len(zvec): # If we make it through all entries then the solution is zero (mod p)
206
+ zero_flag = True
207
+
208
+ # DIAGNOSTIC
209
+ # print("IsLocalSolutionType: Finished the Zero congruence condition test \n")
210
+
211
+ if not zero_flag:
212
+ return <long> 0
213
+
214
+ # DIAGNOSTIC
215
+ # print("IsLocalSolutionType: Passed the Zero congruence condition test \n")
216
+
217
+ # Check if the solution satisfies the nzvec "nonzero" congruence conditions
218
+ # (nzvec is non-empty and its components index a nonzero vector mod p)
219
+ if nzvec is None:
220
+ nonzero_flag = True
221
+ elif len(nzvec) == 0:
222
+ nonzero_flag = False # Trivially no solutions in this case!
223
+ else:
224
+ nonzero_flag = False
225
+ i = 0
226
+ while not nonzero_flag and i < len(nzvec):
227
+ if w[nzvec[i]] % p:
228
+ nonzero_flag = True # The nonzero condition is satisfied when we find one nonzero entry
229
+ i += 1
230
+
231
+ if not nonzero_flag:
232
+ return <long> 0
233
+
234
+ # Check if the solution has the appropriate (local) type:
235
+ # -------------------------------------------------------
236
+
237
+ # 1: Check Good-type
238
+ for i in range(n):
239
+ if w[i] % p and Q[i, i] % p:
240
+ return <long> 1
241
+ if p == 2:
242
+ for i in range(n - 1):
243
+ if Q[i, i + 1] % p and (w[i] % p or w[i + 1] % p):
244
+ return <long> 1
245
+
246
+ # 2: Check Zero-type
247
+ Zero_flag = True
248
+ for i in range(n):
249
+ if w[i] % p:
250
+ Zero_flag = False
251
+ if Zero_flag:
252
+ return <long> 2
253
+
254
+ # Check if wS1 is zero or not
255
+ wS1_nonzero_flag = False
256
+ for i from 0 <= i < n:
257
+
258
+ # Compute the valuation of each index, allowing for off-diagonal terms
259
+ if Q[i, i] == 0:
260
+ if i == 0:
261
+ val = valuation(Q[i, i + 1], p) # Look at the term to the right
262
+ elif i == n - 1:
263
+ val = valuation(Q[i - 1, i], p) # Look at the term above
264
+ else:
265
+ val = valuation(Q[i, i + 1] + Q[i - 1, i], p) # Finds the valuation of the off-diagonal term since only one isn't zero
266
+ else:
267
+ val = valuation(Q[i, i], p)
268
+
269
+ # Test each index
270
+ if val == 1 and w[i] % p:
271
+ wS1_nonzero_flag = True
272
+
273
+ # 4: Check Bad-type I
274
+ if wS1_nonzero_flag:
275
+ return <long> 4
276
+
277
+ # 5: Check Bad-type II
278
+ if not wS1_nonzero_flag:
279
+ return <long> 5
280
+
281
+ # Error if we get here! =o
282
+ print(" Solution vector is " + str(w))
283
+ print(" and Q is \n" + str(Q) + "\n")
284
+ raise RuntimeError("Error in IsLocalSolutionType: Should not execute this line... =( \n")
285
+
286
+
287
+ def count_all_local_good_types_normal_form(Q, p, k, m, zvec, nzvec):
288
+ r"""
289
+ This is an internal routine, which is called by
290
+ :meth:`sage.quadratic_forms.quadratic_form.QuadraticForm.local_good_density_congruence_even
291
+ QuadraticForm.local_good_density_congruence_even`. See the documentation of
292
+ that method for more details.
293
+
294
+ INPUT:
295
+
296
+ - ``Q`` -- quadratic form over `\ZZ` in local normal form at p with no zero blocks mod `p^k`
297
+ - ``p`` -- prime number > 0
298
+ - ``k`` -- integer > 0
299
+ - ``m`` -- non-negative integer (depending only on mod `p^k`)
300
+ - ``zvec``, ``nzvec`` -- list of integers in ``range(Q.dim())``, or ``None``
301
+
302
+ OUTPUT:
303
+
304
+ a non-negative integer giving the number of solutions of Good type.
305
+
306
+ EXAMPLES::
307
+
308
+ sage: # needs sage.libs.pari
309
+ sage: from sage.quadratic_forms.count_local_2 import count_all_local_good_types_normal_form
310
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
311
+ sage: Q_local_at2 = Q.local_normal_form(2)
312
+ sage: Q_local_at3 = Q.local_normal_form(3)
313
+ sage: count_all_local_good_types_normal_form(Q_local_at2, 2, 3, 3, None, None)
314
+ 64
315
+ sage: count_all_local_good_types_normal_form(Q_local_at2, 2, 3, 3, [0], None)
316
+ 32
317
+ sage: count_all_local_good_types_normal_form(Q_local_at3, 3, 2, 1, None, None)
318
+ 54
319
+ """
320
+ n = Q.dim()
321
+ if n == 0:
322
+ return 0
323
+
324
+ m_range = p**k
325
+ if zvec is None:
326
+ zvec = []
327
+ if nzvec is None:
328
+ nzvec = []
329
+
330
+ # determine local blocks
331
+ blocks = []
332
+ i = 0
333
+ while i < n - 1:
334
+ if Q[i, i + 1] != 0:
335
+ blocks += [(i, i + 1)]
336
+ i += 2
337
+ else:
338
+ blocks += [(i,)]
339
+ i += 1
340
+ if i < n:
341
+ blocks += [(i,)]
342
+
343
+ solutions = [[0, 0] for _ in range(m_range)] # [good, not good]
344
+ solutions[0][1] = 1
345
+ for b in blocks:
346
+ Q_part = Q.extract_variables(b)
347
+ zvec_local = range(len(b)) if (b[0] in zvec) else None
348
+ nzvec_local = range(len(b)) if (b[0] in nzvec) else None
349
+
350
+ solutions_part = [[0, 0] for _ in range(m_range)]
351
+ for m_part in range(m_range):
352
+ cnt = CountAllLocalTypesNaive(Q_part, p, k, m_part, zvec_local, nzvec_local)
353
+ solutions_part[m_part][0] = cnt[1]
354
+ solutions_part[m_part][1] = cnt[0] - cnt[1]
355
+
356
+ # compute convolution of counts
357
+ solutions_new = [[0, 0] for _ in range(m_range)]
358
+ for m1 in range(m_range):
359
+ for m2 in range(m_range):
360
+ total = (solutions[m1][0] + solutions[m1][1]) * (solutions_part[m2][0] + solutions_part[m2][1])
361
+ good = total - solutions[m1][1] * solutions_part[m2][1]
362
+ solutions_new[(m1 + m2) % m_range][0] += good
363
+ solutions_new[(m1 + m2) % m_range][1] += total - good
364
+ solutions = solutions_new
365
+ return solutions[m % m_range][0]
@@ -0,0 +1,195 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Extra functions for quadratic forms
4
+ """
5
+
6
+ from sage.matrix.constructor import matrix
7
+ from sage.structure.element import Matrix
8
+ from sage.arith.misc import legendre_symbol
9
+ from sage.rings.integer_ring import ZZ
10
+
11
+
12
+ def is_triangular_number(n, return_value=False) -> bool | tuple:
13
+ """
14
+ Return whether ``n`` is a triangular number.
15
+
16
+ A *triangular number* is a number of the form `k(k+1)/2` for some
17
+ nonnegative integer `n`. See :wikipedia:`Triangular_number`. The sequence
18
+ of triangular number is references as A000217 in the Online encyclopedia of
19
+ integer sequences (OEIS).
20
+
21
+ If you want to get the value of `k` for which `n=k(k+1)/2` set the
22
+ argument ``return_value`` to ``True`` (see the examples below).
23
+
24
+ INPUT:
25
+
26
+ - ``n`` -- integer
27
+
28
+ - ``return_value`` -- boolean (default: ``False``); if set to
29
+ ``True`` the function returns a pair made of a boolean and the value `v`
30
+ such that `v(v+1)/2 = n`
31
+
32
+ EXAMPLES::
33
+
34
+ sage: is_triangular_number(3)
35
+ True
36
+ sage: is_triangular_number(3, return_value=True)
37
+ (True, 2)
38
+
39
+ sage: is_triangular_number(2)
40
+ False
41
+ sage: is_triangular_number(2, return_value=True)
42
+ (False, None)
43
+
44
+ sage: is_triangular_number(25*(25+1)/2)
45
+ True
46
+
47
+ sage: is_triangular_number(10^6 * (10^6 +1)/2, return_value=True)
48
+ (True, 1000000)
49
+
50
+ TESTS::
51
+
52
+ sage: F1 = [n for n in range(1,100*(100+1)/2)
53
+ ....: if is_triangular_number(n)]
54
+ sage: F2 = [n*(n+1)/2 for n in range(1,100)]
55
+ sage: F1 == F2
56
+ True
57
+
58
+ sage: for n in range(1000):
59
+ ....: res,v = is_triangular_number(n,return_value=True)
60
+ ....: assert res == is_triangular_number(n)
61
+ ....: if res: assert v*(v+1)/2 == n
62
+ """
63
+ n = ZZ(n)
64
+
65
+ if return_value:
66
+ if n < 0:
67
+ return (False, None)
68
+ if n == 0:
69
+ return (True, ZZ.zero())
70
+ s, r = (8 * n + 1).sqrtrem()
71
+ if r:
72
+ return (False, None)
73
+ return (True, (s - 1) // 2)
74
+
75
+ return (8 * n + 1).is_square()
76
+
77
+
78
+ def extend_to_primitive(A_input):
79
+ r"""
80
+ Given a matrix (resp. list of vectors), extend it to a square
81
+ matrix (resp. list of vectors), such that its determinant is the
82
+ gcd of its minors (i.e. extend the basis of a lattice to a
83
+ "maximal" one in `\ZZ^n`).
84
+
85
+ Author(s): Gonzalo Tornaria and Jonathan Hanke.
86
+
87
+ INPUT:
88
+
89
+ - ``A_input`` -- a matrix or a list of length n vectors (in the same space)
90
+
91
+ OUTPUT: a square matrix or a list of n vectors (resp.)
92
+
93
+ EXAMPLES::
94
+
95
+ sage: A = Matrix(ZZ, 3, 2, range(6))
96
+ sage: extend_to_primitive(A) # needs sage.libs.pari
97
+ [ 0 1 -1]
98
+ [ 2 3 0]
99
+ [ 4 5 0]
100
+
101
+ sage: extend_to_primitive([vector([1,2,3])]) # needs sage.libs.pari
102
+ [(1, 2, 3), (0, 1, 1), (-1, 0, 0)]
103
+ """
104
+ # Deal with a list of vectors
105
+ if not isinstance(A_input, Matrix):
106
+ A = matrix(A_input) # Make a matrix A with the given rows.
107
+ vec_output_flag = True
108
+ else:
109
+ A = A_input
110
+ vec_output_flag = False
111
+
112
+ # Arrange for A to have more columns than rows.
113
+ if A.is_square():
114
+ return A
115
+ if A.nrows() > A.ncols():
116
+ return extend_to_primitive(A.transpose()).transpose()
117
+
118
+ # Setup
119
+ k = A.nrows()
120
+ n = A.ncols()
121
+ R = A.base_ring()
122
+
123
+ # Smith normal form transformation, assuming more columns than rows
124
+ V = A.smith_form()[2]
125
+
126
+ # Extend the matrix in new coordinates, then switch back.
127
+ B = A * V
128
+ B_new = matrix(R, n - k, n)
129
+ for i in range(n - k):
130
+ B_new[i, n - i - 1] = 1
131
+ C = B.stack(B_new)
132
+ D = C * V**(-1)
133
+
134
+ # Normalize for a positive determinant
135
+ if D.det() < 0:
136
+ D.rescale_row(n - 1, -1)
137
+
138
+ # Return the current information
139
+ if vec_output_flag:
140
+ return D.rows()
141
+ else:
142
+ return D
143
+
144
+
145
+ def least_quadratic_nonresidue(p):
146
+ r"""
147
+ Return the smallest positive integer quadratic non-residue in `\ZZ/p\ZZ` for primes `p>2`.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: least_quadratic_nonresidue(5)
152
+ 2
153
+ sage: [least_quadratic_nonresidue(p) for p in prime_range(3, 100)] # needs sage.libs.pari
154
+ [2, 2, 3, 2, 2, 3, 2, 5, 2, 3, 2, 3, 2, 5, 2, 2, 2, 2, 7, 5, 3, 2, 3, 5]
155
+
156
+ TESTS:
157
+
158
+ This raises an error if input is a positive composite integer. ::
159
+
160
+ sage: least_quadratic_nonresidue(20)
161
+ Traceback (most recent call last):
162
+ ...
163
+ ValueError: p must be a prime number > 2
164
+
165
+ This raises an error if input is 2. This is because every integer is a
166
+ quadratic residue modulo 2. ::
167
+
168
+ sage: least_quadratic_nonresidue(2)
169
+ Traceback (most recent call last):
170
+ ...
171
+ ValueError: there are no quadratic non-residues in Z/2Z
172
+ """
173
+ p1 = abs(p)
174
+
175
+ # Deal with the prime p = 2 and |p| <= 1.
176
+ if p1 == 2:
177
+ raise ValueError("there are no quadratic non-residues in Z/2Z")
178
+ if p1 < 2:
179
+ raise ValueError("p must be a prime number > 2")
180
+
181
+ # Find the smallest non-residue mod p
182
+ # For 7/8 of primes the answer is 2, 3 or 5:
183
+ if p % 8 in (3, 5):
184
+ return ZZ(2)
185
+ if p % 12 in (5, 7):
186
+ return ZZ(3)
187
+ if p % 5 in (2, 3):
188
+ return ZZ(5)
189
+ # default case (first needed for p=71):
190
+ if not p.is_prime():
191
+ raise ValueError("p must be a prime number > 2")
192
+ from sage.arith.srange import xsrange
193
+ for r in xsrange(7, p):
194
+ if legendre_symbol(r, p) == -1:
195
+ return ZZ(r)