passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1072 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Local Field Invariants
4
+
5
+ This contains routines to compute local (`p`-adic) invariants of
6
+ quadratic forms over the rationals.
7
+ """
8
+
9
+ # ****************************************************************************
10
+ # Copyright (C) 2007 William Stein and Jonathan Hanke
11
+ # Copyright (C) 2015 Jeroen Demeyer <jdemeyer@cage.ugent.be>
12
+ #
13
+ # This program is free software: you can redistribute it and/or modify
14
+ # it under the terms of the GNU General Public License as published by
15
+ # the Free Software Foundation, either version 2 of the License, or
16
+ # (at your option) any later version.
17
+ # https://www.gnu.org/licenses/
18
+ # ****************************************************************************
19
+
20
+ ###########################################################################
21
+ # TO DO: Add routines for Hasse invariants at all places, anisotropic
22
+ # places, is_semi_definite, and support for number fields.
23
+ ###########################################################################
24
+
25
+ from copy import deepcopy
26
+
27
+ from sage.arith.misc import hilbert_symbol, prime_divisors
28
+ from sage.matrix.matrix_space import MatrixSpace
29
+ from sage.misc.cachefunc import cached_method
30
+ from sage.rings.integer_ring import ZZ
31
+ from sage.rings.rational_field import QQ
32
+
33
+
34
+ def rational_diagonal_form(self, return_matrix=False):
35
+ """
36
+ Return a diagonal form equivalent to the given quadratic from
37
+ over the fraction field of its defining ring.
38
+
39
+ INPUT:
40
+
41
+ - ``return_matrix`` -- boolean (default: ``False``); also return the
42
+ transformation matrix
43
+
44
+ OUTPUT: either the diagonal quadratic form `D` (if ``return_matrix`` is false)
45
+ or the pair `(D, T)` (if ``return_matrix`` is true) where
46
+
47
+ - ``D`` -- the diagonalized form of this quadratic form
48
+
49
+ - ``T`` -- transformation matrix. This is such that
50
+ ``T.transpose() * self.matrix() * T`` gives ``D.matrix()``
51
+
52
+ Both `D` and `T` are defined over the fraction field of the
53
+ base ring of the given form.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: Q = QuadraticForm(ZZ, 2, [0,1,-1])
58
+ sage: Q
59
+ Quadratic form in 2 variables over Integer Ring with coefficients:
60
+ [ 0 1 ]
61
+ [ * -1 ]
62
+ sage: Q.rational_diagonal_form()
63
+ Quadratic form in 2 variables over Rational Field with coefficients:
64
+ [ 1/4 0 ]
65
+ [ * -1 ]
66
+
67
+ If we start with a diagonal form, we get back the same form defined
68
+ over the fraction field::
69
+
70
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,5,7])
71
+ sage: Q.rational_diagonal_form()
72
+ Quadratic form in 4 variables over Rational Field with coefficients:
73
+ [ 1 0 0 0 ]
74
+ [ * 3 0 0 ]
75
+ [ * * 5 0 ]
76
+ [ * * * 7 ]
77
+
78
+ In the following example, we check the consistency of the
79
+ transformation matrix::
80
+
81
+ sage: Q = QuadraticForm(ZZ, 4, range(10))
82
+ sage: D, T = Q.rational_diagonal_form(return_matrix=True)
83
+ sage: D
84
+ Quadratic form in 4 variables over Rational Field with coefficients:
85
+ [ -1/16 0 0 0 ]
86
+ [ * 4 0 0 ]
87
+ [ * * 13 0 ]
88
+ [ * * * 563/52 ]
89
+ sage: T
90
+ [ 1 0 11 149/26]
91
+ [ -1/8 1 -2 -10/13]
92
+ [ 0 0 1 -29/26]
93
+ [ 0 0 0 1]
94
+ sage: T.transpose() * Q.matrix() * T
95
+ [ -1/8 0 0 0]
96
+ [ 0 8 0 0]
97
+ [ 0 0 26 0]
98
+ [ 0 0 0 563/26]
99
+ sage: D.matrix()
100
+ [ -1/8 0 0 0]
101
+ [ 0 8 0 0]
102
+ [ 0 0 26 0]
103
+ [ 0 0 0 563/26]
104
+
105
+ ::
106
+
107
+ sage: Q1 = QuadraticForm(ZZ, 4, [1, 1, 0, 0, 1, 0, 0, 1, 0, 18])
108
+ sage: Q1
109
+ Quadratic form in 4 variables over Integer Ring with coefficients:
110
+ [ 1 1 0 0 ]
111
+ [ * 1 0 0 ]
112
+ [ * * 1 0 ]
113
+ [ * * * 18 ]
114
+ sage: Q1.rational_diagonal_form(return_matrix=True)
115
+ (
116
+ Quadratic form in 4 variables over Rational Field with coefficients:
117
+ [ 1 0 0 0 ]
118
+ [ * 3/4 0 0 ]
119
+ [ * * 1 0 ]
120
+ [ * * * 18 ] ,
121
+ <BLANKLINE>
122
+ [ 1 -1/2 0 0]
123
+ [ 0 1 0 0]
124
+ [ 0 0 1 0]
125
+ [ 0 0 0 1]
126
+ )
127
+
128
+ PARI returns a singular transformation matrix for this case::
129
+
130
+ sage: Q = QuadraticForm(QQ, 2, [1/2, 1, 1/2])
131
+ sage: Q.rational_diagonal_form()
132
+ Quadratic form in 2 variables over Rational Field with coefficients:
133
+ [ 1/2 0 ]
134
+ [ * 0 ]
135
+
136
+ This example cannot be computed by PARI::
137
+
138
+ sage: # needs sage.rings.real_interval_field
139
+ sage: Q = QuadraticForm(RIF, 4, range(10))
140
+ sage: Q.__pari__()
141
+ Traceback (most recent call last):
142
+ ...
143
+ TypeError
144
+ sage: Q.rational_diagonal_form()
145
+ Quadratic form in 4 variables over Real Interval Field with 53 bits of precision
146
+ with coefficients:
147
+ [ 5 0.?e-14 0.?e-13 0.?e-13 ]
148
+ [ * -0.05000000000000? 0.?e-12 0.?e-12 ]
149
+ [ * * 13.00000000000? 0.?e-10 ]
150
+ [ * * * 10.8269230769? ]
151
+
152
+ TESTS:
153
+
154
+ Changing the output quadratic form does not affect the caching::
155
+
156
+ sage: Q, T = Q1.rational_diagonal_form(return_matrix=True)
157
+ sage: Q[0,0] = 13
158
+ sage: Q1.rational_diagonal_form()
159
+ Quadratic form in 4 variables over Rational Field with coefficients:
160
+ [ 1 0 0 0 ]
161
+ [ * 3/4 0 0 ]
162
+ [ * * 1 0 ]
163
+ [ * * * 18 ]
164
+
165
+ The transformation matrix is immutable::
166
+
167
+ sage: T[0,0] = 13
168
+ Traceback (most recent call last):
169
+ ...
170
+ ValueError: matrix is immutable; please change a copy instead
171
+ (i.e., use copy(M) to change a copy of M).
172
+
173
+ Test for a singular form::
174
+
175
+ sage: m = matrix(GF(11), [[1,5,0,0], [5,1,9,0], [0,9,1,5], [0,0,5,1]])
176
+ sage: qf = QuadraticForm(m)
177
+ sage: Q, T = qf.rational_diagonal_form(return_matrix=True)
178
+ sage: T
179
+ [ 1 6 5 10]
180
+ [ 0 1 10 9]
181
+ [ 0 0 1 2]
182
+ [ 0 0 0 1]
183
+ """
184
+ Q, T = self._rational_diagonal_form_and_transformation()
185
+ T.set_immutable()
186
+
187
+ # Quadratic forms do not support immutability, so we need to make
188
+ # a copy to be safe.
189
+ Q = deepcopy(Q)
190
+ return (Q, T) if return_matrix else Q
191
+
192
+
193
+ @cached_method
194
+ def _rational_diagonal_form_and_transformation(self):
195
+ """
196
+ Return a diagonal form equivalent to the given quadratic from and
197
+ the corresponding transformation matrix.
198
+
199
+ This is over the fraction field of the base ring of the given
200
+ quadratic form.
201
+
202
+ OUTPUT: a tuple `(D,T)` where
203
+
204
+ - ``D`` -- the diagonalized form of this quadratic form
205
+
206
+ - ``T`` -- transformation matrix. This is such that
207
+ ``T.transpose() * self.matrix() * T`` gives ``D.matrix()``
208
+
209
+ Both `D` and `T` are defined over the fraction field of the
210
+ base ring of the given form.
211
+
212
+ EXAMPLES::
213
+
214
+ sage: Q = QuadraticForm(ZZ, 4, [1, 1, 0, 0, 1, 0, 0, 1, 0, 18])
215
+ sage: Q
216
+ Quadratic form in 4 variables over Integer Ring with coefficients:
217
+ [ 1 1 0 0 ]
218
+ [ * 1 0 0 ]
219
+ [ * * 1 0 ]
220
+ [ * * * 18 ]
221
+ sage: Q._rational_diagonal_form_and_transformation()
222
+ (
223
+ Quadratic form in 4 variables over Rational Field with coefficients:
224
+ [ 1 0 0 0 ]
225
+ [ * 3/4 0 0 ]
226
+ [ * * 1 0 ]
227
+ [ * * * 18 ] ,
228
+ <BLANKLINE>
229
+ [ 1 -1/2 0 0]
230
+ [ 0 1 0 0]
231
+ [ 0 0 1 0]
232
+ [ 0 0 0 1]
233
+ )
234
+ """
235
+ n = self.dim()
236
+ K = self.base_ring().fraction_field()
237
+ Q = self.change_ring(K)
238
+ MS = MatrixSpace(K, n, n)
239
+
240
+ try:
241
+ # Try PARI if the type is supported
242
+ pariself = self.__pari__()
243
+ # Check that conversion back works
244
+ MS(pariself.sage())
245
+ except Exception:
246
+ pass
247
+ else:
248
+ R = pariself.qfgaussred()
249
+ # Diagonal matrix
250
+ D = MS()
251
+ for i in range(n):
252
+ D[i, i] = R[i, i]
253
+ newQ = Q.parent()(D)
254
+ # Transformation matrix (inverted)
255
+ T = MS(R.sage())
256
+ for i in range(n):
257
+ T[i, i] = K.one()
258
+ try:
259
+ return newQ, ~T
260
+ except ZeroDivisionError:
261
+ # Singular case is not fully supported by PARI
262
+ pass
263
+
264
+ # General case if conversion to/from PARI failed
265
+ T = MS(1)
266
+
267
+ # Clear the entries one row at a time.
268
+ for i in range(n):
269
+
270
+ # Deal with rows where the diagonal entry is zero.
271
+ if Q[i, i] == 0:
272
+
273
+ # Look for a nonzero entry and use it to make the diagonal nonzero (if it exists)
274
+ for j in range(i + 1, n):
275
+ if Q[i, j] != 0:
276
+ temp = MS(1)
277
+ if Q[i, j] + Q[j, j] == 0:
278
+ temp[j, i] = -1
279
+ else:
280
+ temp[j, i] = 1
281
+
282
+ # Apply the transformation
283
+ Q = Q(temp)
284
+ T = T * temp
285
+ break
286
+
287
+ # Create a matrix which deals with off-diagonal entries (all at once for each row)
288
+ temp = MS(1)
289
+ for j in range(i + 1, n):
290
+ if Q[i, j] != 0:
291
+ temp[i, j] = -Q[i, j] / (Q[i, i] * 2)
292
+ # This should only occur when Q[i,i] != 0, which the above step guarantees.
293
+
294
+ Q = Q(temp)
295
+ T = T * temp
296
+
297
+ return Q, T
298
+
299
+
300
+ def signature_vector(self):
301
+ r"""
302
+ Return the triple `(p, n, z)` of integers where
303
+
304
+ - `p` = number of positive eigenvalues
305
+ - `n` = number of negative eigenvalues
306
+ - `z` = number of zero eigenvalues
307
+
308
+ for the symmetric matrix associated to `Q`.
309
+
310
+ OUTPUT: a triple of integers `\geq 0`
311
+
312
+ EXAMPLES::
313
+
314
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,0,0,-4])
315
+ sage: Q.signature_vector()
316
+ (1, 1, 2)
317
+
318
+ ::
319
+
320
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,-3,-4])
321
+ sage: Q.signature_vector()
322
+ (2, 2, 0)
323
+
324
+ ::
325
+
326
+ sage: Q = QuadraticForm(ZZ, 4, range(10)); Q
327
+ Quadratic form in 4 variables over Integer Ring with coefficients:
328
+ [ 0 1 2 3 ]
329
+ [ * 4 5 6 ]
330
+ [ * * 7 8 ]
331
+ [ * * * 9 ]
332
+ sage: Q.signature_vector()
333
+ (3, 1, 0)
334
+ """
335
+ diag = self.rational_diagonal_form()
336
+ p = 0
337
+ n = 0
338
+ z = 0
339
+ for i in range(diag.dim()):
340
+ if diag[i, i] > 0:
341
+ p += 1
342
+ elif diag[i, i] < 0:
343
+ n += 1
344
+ else:
345
+ z += 1
346
+
347
+ return (p, n, z)
348
+
349
+
350
+ def signature(self):
351
+ """
352
+ Return the signature of the quadratic form, defined as:
353
+
354
+ number of positive eigenvalues `-` number of negative eigenvalues
355
+
356
+ of the matrix of the quadratic form.
357
+
358
+ OUTPUT: integer
359
+
360
+ EXAMPLES::
361
+
362
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,0,0,-4,3,11,3])
363
+ sage: Q.signature()
364
+ 3
365
+
366
+ ::
367
+
368
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,-3,-4])
369
+ sage: Q.signature()
370
+ 0
371
+
372
+ ::
373
+
374
+ sage: Q = QuadraticForm(ZZ, 4, range(10)); Q
375
+ Quadratic form in 4 variables over Integer Ring with coefficients:
376
+ [ 0 1 2 3 ]
377
+ [ * 4 5 6 ]
378
+ [ * * 7 8 ]
379
+ [ * * * 9 ]
380
+ sage: Q.signature()
381
+ 2
382
+ """
383
+ p, n, _ = self.signature_vector()
384
+ return p - n
385
+
386
+
387
+ def hasse_invariant(self, p):
388
+ r"""
389
+ Compute the Hasse invariant at a prime `p` or at infinity, as given on p55 of
390
+ Cassels's book. If `Q` is diagonal with coefficients `a_i`, then the
391
+ (Cassels) Hasse invariant is given by
392
+
393
+ .. MATH::
394
+
395
+ c_p = \prod_{i < j} (a_i, a_j)_p
396
+
397
+ where `(a,b)_p` is the Hilbert symbol at `p`. The underlying
398
+ quadratic form must be non-degenerate over `\QQ_p` for this to make
399
+ sense.
400
+
401
+ .. WARNING::
402
+
403
+ This is different from the O'Meara Hasse invariant, which
404
+ allows `i \leq j` in the product. That is given by the method
405
+ :meth:`hasse_invariant__OMeara`.
406
+
407
+ .. NOTE::
408
+
409
+ We should really rename this ``hasse_invariant__Cassels``, and
410
+ set :meth:`hasse_invariant` as a front-end to it.
411
+
412
+ INPUT:
413
+
414
+ - ``p`` -- a prime number > 0 or `-1` for the infinite place
415
+
416
+ OUTPUT: `1` or `-1`
417
+
418
+ EXAMPLES::
419
+
420
+ sage: Q = QuadraticForm(ZZ, 2, [1,2,3])
421
+ sage: Q.rational_diagonal_form()
422
+ Quadratic form in 2 variables over Rational Field with coefficients:
423
+ [ 1 0 ]
424
+ [ * 2 ]
425
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
426
+ [1, 1, 1, 1, 1, 1, 1, 1]
427
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
428
+ [1, 1, 1, 1, 1, 1, 1, 1]
429
+
430
+ ::
431
+
432
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1])
433
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
434
+ [1, 1, 1, 1, 1, 1, 1, 1]
435
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
436
+ [-1, 1, 1, 1, 1, 1, 1, 1]
437
+
438
+ ::
439
+
440
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1,5])
441
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
442
+ [1, 1, 1, 1, 1, 1, 1, 1]
443
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
444
+ [-1, 1, 1, 1, 1, 1, 1, 1]
445
+
446
+ ::
447
+
448
+ sage: x = polygen(ZZ, 'x')
449
+ sage: K.<a> = NumberField(x^2 - 23) # needs sage.rings.number_field
450
+ sage: Q = DiagonalQuadraticForm(K, [-a, a + 2]) # needs sage.rings.number_field
451
+ sage: [Q.hasse_invariant(p) for p in K.primes_above(19)] # needs sage.rings.number_field
452
+ [-1, 1]
453
+ """
454
+ # TO DO: Need to deal with the case n=1 separately somewhere!
455
+
456
+ Diag = self.rational_diagonal_form()
457
+ R = Diag.base_ring()
458
+
459
+ hasse_temp = 1
460
+ n = Diag.dim()
461
+
462
+ if R == QQ:
463
+ for j in range(n - 1):
464
+ for k in range(j + 1, n):
465
+ hasse_temp = hasse_temp * hilbert_symbol(Diag[j, j],
466
+ Diag[k, k], p)
467
+
468
+ else:
469
+ for j in range(n - 1):
470
+ for k in range(j + 1, n):
471
+ hasse_temp = hasse_temp * R.hilbert_symbol(Diag[j, j],
472
+ Diag[k, k], p)
473
+
474
+ return hasse_temp
475
+
476
+
477
+ def hasse_invariant__OMeara(self, p):
478
+ r"""
479
+ Compute the O'Meara Hasse invariant at a prime `p`.
480
+
481
+ This is defined on
482
+ p167 of O'Meara's book. If `Q` is diagonal with coefficients `a_i`,
483
+ then the (Cassels) Hasse invariant is given by
484
+
485
+ .. MATH::
486
+
487
+ c_p = \prod_{i \leq j} (a_i, a_j)_p
488
+
489
+ where `(a,b)_p` is the Hilbert symbol at `p`.
490
+
491
+ .. WARNING::
492
+
493
+ This is different from the (Cassels) Hasse invariant, which
494
+ only allows `i < j` in the product. That is given by the method
495
+ hasse_invariant(p).
496
+
497
+ INPUT:
498
+
499
+ - ``p`` -- a prime number > 0 or `-1` for the infinite place
500
+
501
+ OUTPUT: `1` or `-1`
502
+
503
+ EXAMPLES::
504
+
505
+ sage: Q = QuadraticForm(ZZ, 2, [1,2,3])
506
+ sage: Q.rational_diagonal_form()
507
+ Quadratic form in 2 variables over Rational Field with coefficients:
508
+ [ 1 0 ]
509
+ [ * 2 ]
510
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
511
+ [1, 1, 1, 1, 1, 1, 1, 1]
512
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
513
+ [1, 1, 1, 1, 1, 1, 1, 1]
514
+
515
+ ::
516
+
517
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1])
518
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
519
+ [1, 1, 1, 1, 1, 1, 1, 1]
520
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
521
+ [-1, 1, 1, 1, 1, 1, 1, 1]
522
+
523
+ ::
524
+
525
+ sage: Q = DiagonalQuadraticForm(ZZ,[1,-1,-1])
526
+ sage: [Q.hasse_invariant(p) for p in prime_range(20)] # needs sage.libs.pari
527
+ [-1, 1, 1, 1, 1, 1, 1, 1]
528
+ sage: [Q.hasse_invariant__OMeara(p) for p in prime_range(20)] # needs sage.libs.pari
529
+ [-1, 1, 1, 1, 1, 1, 1, 1]
530
+
531
+ ::
532
+
533
+ sage: x = polygen(ZZ, 'x')
534
+ sage: K.<a> = NumberField(x^2 - 23) # needs sage.rings.number_field
535
+ sage: Q = DiagonalQuadraticForm(K, [-a, a + 2]) # needs sage.rings.number_field
536
+ sage: [Q.hasse_invariant__OMeara(p) for p in K.primes_above(19)] # needs sage.rings.number_field
537
+ [1, 1]
538
+ """
539
+ # TO DO: Need to deal with the case n=1 separately somewhere!
540
+
541
+ Diag = self.rational_diagonal_form()
542
+ R = Diag.base_ring()
543
+
544
+ hasse_temp = 1
545
+ n = Diag.dim()
546
+ if R == QQ:
547
+ for j in range(n):
548
+ for k in range(j, n):
549
+ hasse_temp = hasse_temp * hilbert_symbol(Diag[j, j],
550
+ Diag[k, k], p)
551
+
552
+ else:
553
+ for j in range(n):
554
+ for k in range(j, n):
555
+ hasse_temp = hasse_temp * R.hilbert_symbol(Diag[j, j],
556
+ Diag[k, k], p)
557
+
558
+ return hasse_temp
559
+
560
+
561
+ def is_hyperbolic(self, p) -> bool:
562
+ r"""
563
+ Check if the quadratic form is a sum of hyperbolic planes over
564
+ the `p`-adic numbers `\QQ_p` or over the real numbers `\RR`.
565
+
566
+ REFERENCES:
567
+
568
+ This criterion follows from Cassels's "Rational Quadratic Forms":
569
+
570
+ - local invariants for hyperbolic plane (Lemma 2.4, p58)
571
+ - direct sum formulas (Lemma 2.3, p58)
572
+
573
+ INPUT:
574
+
575
+ - ``p`` -- a prime number > 0 or `-1` for the infinite place
576
+
577
+ OUTPUT: boolean
578
+
579
+ EXAMPLES::
580
+
581
+ sage: # needs sage.libs.pari
582
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1])
583
+ sage: Q.is_hyperbolic(-1)
584
+ False
585
+ sage: Q.is_hyperbolic(2)
586
+ False
587
+ sage: Q.is_hyperbolic(3)
588
+ False
589
+ sage: Q.is_hyperbolic(5) # Here -1 is a square, so it's true.
590
+ True
591
+ sage: Q.is_hyperbolic(7)
592
+ False
593
+ sage: Q.is_hyperbolic(13) # Here -1 is a square, so it's true.
594
+ True
595
+ """
596
+ # False for odd-dim'l forms
597
+ if self.dim() % 2:
598
+ return False
599
+
600
+ # True for the zero form
601
+ if not self.dim():
602
+ return True
603
+
604
+ # Compare local invariants
605
+ # Note: since the dimension is even, the extra powers of 2 in
606
+ # self.det() := Det(2*Q) don't affect the answer!
607
+ m = ZZ(self.dim() // 2)
608
+ if p == -1:
609
+ return self.signature() == 0
610
+
611
+ if p == 2:
612
+ return (QQ(self.det() * (-1) ** m).is_padic_square(p) and
613
+ self.hasse_invariant(p) ==
614
+ (-1) ** m.binomial(2)) # here -1 is hilbert_symbol(-1,-1,2)
615
+
616
+ return (QQ(self.det() * (-1) ** m).is_padic_square(p) and
617
+ self.hasse_invariant(p) == 1)
618
+
619
+
620
+ def is_anisotropic(self, p) -> bool:
621
+ r"""
622
+ Check if the quadratic form is anisotropic over the `p`-adic numbers `\QQ_p` or `\RR`.
623
+
624
+ INPUT:
625
+
626
+ - ``p`` -- a prime number > 0 or `-1` for the infinite place
627
+
628
+ OUTPUT: boolean
629
+
630
+ EXAMPLES::
631
+
632
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1])
633
+ sage: Q.is_anisotropic(2) # needs sage.libs.pari
634
+ True
635
+ sage: Q.is_anisotropic(3) # needs sage.libs.pari
636
+ True
637
+ sage: Q.is_anisotropic(5) # needs sage.libs.pari
638
+ False
639
+
640
+ ::
641
+
642
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1])
643
+ sage: Q.is_anisotropic(2) # needs sage.libs.pari
644
+ False
645
+ sage: Q.is_anisotropic(3) # needs sage.libs.pari
646
+ False
647
+ sage: Q.is_anisotropic(5) # needs sage.libs.pari
648
+ False
649
+
650
+ ::
651
+
652
+ sage: [DiagonalQuadraticForm(ZZ, # needs sage.libs.pari
653
+ ....: [1, -least_quadratic_nonresidue(p)]).is_anisotropic(p)
654
+ ....: for p in prime_range(3, 30)]
655
+ [True, True, True, True, True, True, True, True, True]
656
+
657
+ ::
658
+
659
+ sage: [DiagonalQuadraticForm(ZZ, [1, -least_quadratic_nonresidue(p), # needs sage.libs.pari
660
+ ....: p, -p*least_quadratic_nonresidue(p)]).is_anisotropic(p)
661
+ ....: for p in prime_range(3, 30)]
662
+ [True, True, True, True, True, True, True, True, True]
663
+ """
664
+ # TO DO: Should check that p is prime
665
+ if p == -1:
666
+ return self.is_definite()
667
+
668
+ n = self.dim()
669
+ D = self.det()
670
+
671
+ if n >= 5:
672
+ return False
673
+
674
+ if n == 4:
675
+ return (QQ(D).is_padic_square(p) and
676
+ (self.hasse_invariant(p) == - hilbert_symbol(-1, -1, p)))
677
+
678
+ if n == 3:
679
+ return self.hasse_invariant(p) != hilbert_symbol(-1, -D, p)
680
+
681
+ if n == 2:
682
+ return not QQ(-D).is_padic_square(p)
683
+
684
+ if n == 1:
685
+ return self[0, 0] != 0
686
+
687
+ raise NotImplementedError("we have not established a convention for 0-dim'l quadratic forms")
688
+
689
+
690
+ def is_isotropic(self, p) -> bool:
691
+ r"""
692
+ Check if `Q` is isotropic over the `p`-adic numbers `\QQ_p` or `\RR`.
693
+
694
+ INPUT:
695
+
696
+ - ``p`` -- a prime number > 0 or `-1` for the infinite place
697
+
698
+ OUTPUT: boolean
699
+
700
+ EXAMPLES::
701
+
702
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1])
703
+ sage: Q.is_isotropic(2) # needs sage.libs.pari
704
+ False
705
+ sage: Q.is_isotropic(3) # needs sage.libs.pari
706
+ False
707
+ sage: Q.is_isotropic(5) # needs sage.libs.pari
708
+ True
709
+
710
+ ::
711
+
712
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1])
713
+ sage: Q.is_isotropic(2) # needs sage.libs.pari
714
+ True
715
+ sage: Q.is_isotropic(3) # needs sage.libs.pari
716
+ True
717
+ sage: Q.is_isotropic(5) # needs sage.libs.pari
718
+ True
719
+
720
+ ::
721
+
722
+ sage: [DiagonalQuadraticForm(ZZ, # needs sage.libs.pari
723
+ ....: [1, -least_quadratic_nonresidue(p)]).is_isotropic(p)
724
+ ....: for p in prime_range(3, 30)]
725
+ [False, False, False, False, False, False, False, False, False]
726
+
727
+ ::
728
+
729
+ sage: [DiagonalQuadraticForm(ZZ, [1, -least_quadratic_nonresidue(p), # needs sage.libs.pari
730
+ ....: p, -p*least_quadratic_nonresidue(p)]).is_isotropic(p)
731
+ ....: for p in prime_range(3, 30)]
732
+ [False, False, False, False, False, False, False, False, False]
733
+ """
734
+ return not self.is_anisotropic(p)
735
+
736
+
737
+ def anisotropic_primes(self):
738
+ """
739
+ Return a list with all of the anisotropic primes of the quadratic form.
740
+
741
+ The infinite place is denoted by `-1`.
742
+
743
+ EXAMPLES::
744
+
745
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1])
746
+ sage: Q.anisotropic_primes() # needs sage.libs.pari
747
+ [2, -1]
748
+
749
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
750
+ sage: Q.anisotropic_primes() # needs sage.libs.pari
751
+ [2, -1]
752
+
753
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1,1])
754
+ sage: Q.anisotropic_primes() # needs sage.libs.pari
755
+ [-1]
756
+ """
757
+ # Look at all prime divisors of 2 * Det(Q) to find the
758
+ # anisotropic primes...
759
+ possible_primes = prime_divisors(2 * self.det()) + [-1]
760
+ return [p for p in possible_primes if self.is_anisotropic(p)]
761
+
762
+
763
+ def compute_definiteness(self):
764
+ """
765
+ Compute whether the given quadratic form is positive-definite,
766
+ negative-definite, indefinite, degenerate, or the zero form.
767
+
768
+ This caches one of the following strings in ``self.__definiteness_string``:
769
+ "pos_def", "neg_def", "indef", "zero", "degenerate". It is called
770
+ from all routines like: :meth:`is_positive_definite`, :meth:`is_negative_definite`,
771
+ :meth:`is_indefinite`, etc.
772
+
773
+ .. NOTE::
774
+
775
+ A degenerate form is considered neither definite nor indefinite.
776
+
777
+ .. NOTE::
778
+
779
+ The zero-dimensional form is considered both positive definite and negative definite.
780
+
781
+ OUTPUT: boolean
782
+
783
+ EXAMPLES::
784
+
785
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1,1])
786
+ sage: Q.compute_definiteness()
787
+ sage: Q.is_positive_definite()
788
+ True
789
+ sage: Q.is_negative_definite()
790
+ False
791
+ sage: Q.is_indefinite()
792
+ False
793
+ sage: Q.is_definite()
794
+ True
795
+
796
+ ::
797
+
798
+ sage: Q = DiagonalQuadraticForm(ZZ, [])
799
+ sage: Q.compute_definiteness()
800
+ sage: Q.is_positive_definite()
801
+ True
802
+ sage: Q.is_negative_definite()
803
+ True
804
+ sage: Q.is_indefinite()
805
+ False
806
+ sage: Q.is_definite()
807
+ True
808
+
809
+ ::
810
+
811
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,0,-1])
812
+ sage: Q.compute_definiteness()
813
+ sage: Q.is_positive_definite()
814
+ False
815
+ sage: Q.is_negative_definite()
816
+ False
817
+ sage: Q.is_indefinite()
818
+ False
819
+ sage: Q.is_definite()
820
+ False
821
+ """
822
+ # Sanity Check
823
+ from sage.rings.real_mpfr import RR
824
+
825
+ if not ((self.base_ring() == ZZ) or (self.base_ring() == QQ) or (self.base_ring() == RR)):
826
+ raise NotImplementedError("we can only check definiteness over ZZ, QQ, and RR for now")
827
+
828
+ # Some useful variables
829
+ n = self.dim()
830
+
831
+ # Deal with the zero-diml form
832
+ if n == 0:
833
+ self.__definiteness_string = "zero"
834
+ return
835
+
836
+ sig_pos, sig_neg, sig_zer = self.signature_vector()
837
+
838
+ # Determine and cache the definiteness string
839
+ if sig_zer > 0:
840
+ self.__definiteness_string = "degenerate"
841
+ return
842
+ elif sig_neg == n:
843
+ self.__definiteness_string = "neg_def"
844
+ return
845
+ elif sig_pos == n:
846
+ self.__definiteness_string = "pos_def"
847
+ return
848
+ else:
849
+ self.__definiteness_string = "indefinite"
850
+ return
851
+
852
+
853
+ def compute_definiteness_string_by_determinants(self):
854
+ """
855
+ Compute the (positive) definiteness of a quadratic form by looking
856
+ at the signs of all of its upper-left subdeterminants. See also
857
+ :meth:`compute_definiteness` for more documentation.
858
+
859
+ OUTPUT: string describing the definiteness
860
+
861
+ EXAMPLES::
862
+
863
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1,1])
864
+ sage: Q.compute_definiteness_string_by_determinants()
865
+ 'pos_def'
866
+
867
+ ::
868
+
869
+ sage: Q = DiagonalQuadraticForm(ZZ, [])
870
+ sage: Q.compute_definiteness_string_by_determinants()
871
+ 'zero'
872
+
873
+ ::
874
+
875
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,0,-1])
876
+ sage: Q.compute_definiteness_string_by_determinants()
877
+ 'degenerate'
878
+
879
+ ::
880
+
881
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-1])
882
+ sage: Q.compute_definiteness_string_by_determinants()
883
+ 'indefinite'
884
+
885
+ ::
886
+
887
+ sage: Q = DiagonalQuadraticForm(ZZ, [-1,-1])
888
+ sage: Q.compute_definiteness_string_by_determinants()
889
+ 'neg_def'
890
+ """
891
+ # Sanity Check
892
+ from sage.rings.real_mpfr import RR
893
+
894
+ if not ((self.base_ring() == ZZ) or (self.base_ring() == QQ) or (self.base_ring() == RR)):
895
+ raise NotImplementedError("we can only check definiteness over ZZ, QQ, and RR for now")
896
+
897
+ from sage.functions.all import sgn
898
+
899
+ # Some useful variables
900
+ n = self.dim()
901
+ M = self.matrix()
902
+
903
+ # Deal with the zero-diml form
904
+ if n == 0:
905
+ return "zero"
906
+
907
+ # Deal with degenerate forms
908
+ if self.det() == 0:
909
+ return "degenerate"
910
+
911
+ # Check the sign of the ratios of consecutive determinants of the upper triangular r x r submatrices
912
+ first_coeff = self[0, 0]
913
+ for r in range(1, n + 1):
914
+ I = list(range(r))
915
+ new_det = M.matrix_from_rows_and_columns(I, I).det()
916
+
917
+ # Check for a (non-degenerate) zero -- so it's indefinite
918
+ if new_det == 0:
919
+ return "indefinite"
920
+
921
+ # Check for a change of signs in the upper r x r submatrix -- so it's indefinite
922
+ if sgn(first_coeff)**r != sgn(new_det):
923
+ return "indefinite"
924
+
925
+ # Here all ratios of determinants have the correct sign, so the matrix is (pos or neg) definite.
926
+ return "pos_def" if first_coeff > 0 else "neg_def"
927
+
928
+
929
+ def is_positive_definite(self) -> bool:
930
+ """
931
+ Determine if the given quadratic form is positive-definite.
932
+
933
+ .. NOTE::
934
+
935
+ A degenerate form is considered neither definite nor indefinite.
936
+
937
+ .. NOTE::
938
+
939
+ The zero-dimensional form is considered both positive definite and negative definite.
940
+
941
+ OUTPUT: boolean
942
+
943
+ EXAMPLES::
944
+
945
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,5])
946
+ sage: Q.is_positive_definite()
947
+ True
948
+
949
+ ::
950
+
951
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-3,5])
952
+ sage: Q.is_positive_definite()
953
+ False
954
+ """
955
+ # Try to use the cached value
956
+ try:
957
+ def_str = self.__definiteness_string
958
+ except AttributeError:
959
+ self.compute_definiteness()
960
+ def_str = self.__definiteness_string
961
+
962
+ # Return the answer
963
+ return (def_str == "pos_def") or (def_str == "zero")
964
+
965
+
966
+ def is_negative_definite(self) -> bool:
967
+ """
968
+ Determine if the given quadratic form is negative-definite.
969
+
970
+ .. NOTE::
971
+
972
+ A degenerate form is considered neither definite nor indefinite.
973
+
974
+ .. NOTE::
975
+
976
+ The zero-dimensional form is considered both positive definite and negative definite.
977
+
978
+ OUTPUT: boolean
979
+
980
+ EXAMPLES::
981
+
982
+ sage: Q = DiagonalQuadraticForm(ZZ, [-1,-3,-5])
983
+ sage: Q.is_negative_definite()
984
+ True
985
+
986
+ ::
987
+
988
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-3,5])
989
+ sage: Q.is_negative_definite()
990
+ False
991
+ """
992
+ # Try to use the cached value
993
+ try:
994
+ def_str = self.__definiteness_string
995
+ except AttributeError:
996
+ self.compute_definiteness()
997
+ def_str = self.__definiteness_string
998
+
999
+ # Return the answer
1000
+ return (def_str == "neg_def") or (def_str == "zero")
1001
+
1002
+
1003
+ def is_indefinite(self) -> bool:
1004
+ """
1005
+ Determine if the given quadratic form is indefinite.
1006
+
1007
+ .. NOTE::
1008
+
1009
+ A degenerate form is considered neither definite nor indefinite.
1010
+
1011
+ .. NOTE::
1012
+
1013
+ The zero-dimensional form is not considered indefinite.
1014
+
1015
+ OUTPUT: boolean
1016
+
1017
+ EXAMPLES::
1018
+
1019
+ sage: Q = DiagonalQuadraticForm(ZZ, [-1,-3,-5])
1020
+ sage: Q.is_indefinite()
1021
+ False
1022
+
1023
+ ::
1024
+
1025
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-3,5])
1026
+ sage: Q.is_indefinite()
1027
+ True
1028
+ """
1029
+ # Try to use the cached value
1030
+ try:
1031
+ def_str = self.__definiteness_string
1032
+ except AttributeError:
1033
+ self.compute_definiteness()
1034
+ def_str = self.__definiteness_string
1035
+
1036
+ # Return the answer
1037
+ return def_str == "indefinite"
1038
+
1039
+
1040
+ def is_definite(self) -> bool:
1041
+ """
1042
+ Determine if the given quadratic form is (positive or negative) definite.
1043
+
1044
+ .. NOTE::
1045
+
1046
+ A degenerate form is considered neither definite nor indefinite.
1047
+
1048
+ .. NOTE::
1049
+
1050
+ The zero-dimensional form is considered indefinite.
1051
+
1052
+ OUTPUT: boolean
1053
+
1054
+ EXAMPLES::
1055
+
1056
+ sage: Q = DiagonalQuadraticForm(ZZ, [-1,-3,-5])
1057
+ sage: Q.is_definite()
1058
+ True
1059
+
1060
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,-3,5])
1061
+ sage: Q.is_definite()
1062
+ False
1063
+ """
1064
+ # Try to use the cached value
1065
+ try:
1066
+ def_str = self.__definiteness_string
1067
+ except AttributeError:
1068
+ self.compute_definiteness()
1069
+ def_str = self.__definiteness_string
1070
+
1071
+ # Return the answer
1072
+ return (def_str == "pos_def") or (def_str == "neg_def") or (def_str == "zero")