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,708 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Equivalence Testing
4
+
5
+ AUTHORS:
6
+
7
+ - Anna Haensch (2014-12-01): added test for rational isometry
8
+ """
9
+ from typing import Any
10
+
11
+ from sage.arith.misc import (hilbert_symbol,
12
+ GCD,
13
+ is_prime,
14
+ legendre_symbol,
15
+ prime_divisors,
16
+ valuation)
17
+ from sage.rings.integer_ring import ZZ
18
+ from sage.rings.rational_field import QQ
19
+
20
+
21
+ ##############################################################################
22
+ # Routines to test if two quadratic forms over ZZ are globally equivalent. #
23
+ # (For now, we require both forms to be positive definite.) #
24
+ ##############################################################################
25
+
26
+ def is_globally_equivalent_to(self, other, return_matrix=False) -> bool | Any:
27
+ r"""
28
+ Determine if the current quadratic form is equivalent to the
29
+ given form over `\ZZ`.
30
+
31
+ If ``return_matrix`` is True, then we return the transformation
32
+ matrix `M` so that ``self(M) == other``.
33
+
34
+ INPUT:
35
+
36
+ - ``self``, ``other`` -- positive definite integral quadratic forms
37
+
38
+ - ``return_matrix`` -- boolean (default: ``False``); return
39
+ the transformation matrix instead of a boolean
40
+
41
+ OUTPUT:
42
+
43
+ - if ``return_matrix`` is ``False``: a boolean
44
+
45
+ - if ``return_matrix`` is ``True``: either ``False`` or the
46
+ transformation matrix
47
+
48
+ EXAMPLES::
49
+
50
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
51
+ sage: M = Matrix(ZZ, 4, 4, [1,2,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1])
52
+ sage: Q1 = Q(M)
53
+ sage: Q.is_globally_equivalent_to(Q1) # needs sage.libs.pari
54
+ True
55
+ sage: MM = Q.is_globally_equivalent_to(Q1, return_matrix=True) # needs sage.libs.pari
56
+ sage: Q(MM) == Q1 # needs sage.libs.pari
57
+ True
58
+
59
+ ::
60
+
61
+ sage: # needs sage.libs.pari
62
+ sage: Q1 = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
63
+ sage: Q2 = QuadraticForm(ZZ, 3, [2, 1, 2, 2, 1, 3])
64
+ sage: Q3 = QuadraticForm(ZZ, 3, [8, 6, 5, 3, 4, 2])
65
+ sage: Q1.is_globally_equivalent_to(Q2)
66
+ False
67
+ sage: Q1.is_globally_equivalent_to(Q2, return_matrix=True)
68
+ False
69
+ sage: Q1.is_globally_equivalent_to(Q3)
70
+ True
71
+ sage: M = Q1.is_globally_equivalent_to(Q3, True); M
72
+ [-1 -1 0]
73
+ [ 1 1 1]
74
+ [-1 0 0]
75
+ sage: Q1(M) == Q3
76
+ True
77
+
78
+ ::
79
+
80
+ sage: Q = DiagonalQuadraticForm(ZZ, [1, -1])
81
+ sage: Q.is_globally_equivalent_to(Q) # needs sage.libs.pari
82
+ Traceback (most recent call last):
83
+ ...
84
+ ValueError: not a definite form in QuadraticForm.is_globally_equivalent_to()
85
+
86
+ ALGORITHM: this uses the PARI function :pari:`qfisom`, implementing
87
+ an algorithm by Plesken and Souvignier.
88
+
89
+ TESTS:
90
+
91
+ :issue:`27749` is fixed::
92
+
93
+ sage: Q = QuadraticForm(ZZ, 2, [2, 3, 5])
94
+ sage: P = QuadraticForm(ZZ, 2, [8, 6, 5])
95
+ sage: Q.is_globally_equivalent_to(P) # needs sage.libs.pari
96
+ False
97
+ sage: P.is_globally_equivalent_to(Q) # needs sage.libs.pari
98
+ False
99
+ """
100
+ from sage.quadratic_forms.quadratic_form import QuadraticForm
101
+
102
+ # Check that other is a QuadraticForm
103
+ if not isinstance(other, QuadraticForm):
104
+ raise TypeError("you must compare two quadratic forms, but the argument is not a quadratic form")
105
+
106
+ # only for definite forms
107
+ if not self.is_definite() or not other.is_definite():
108
+ raise ValueError("not a definite form in QuadraticForm.is_globally_equivalent_to()")
109
+
110
+ mat = other.__pari__().qfisom(self)
111
+ if not mat:
112
+ return False
113
+
114
+ if return_matrix:
115
+ return mat.sage()
116
+ else:
117
+ return True
118
+
119
+
120
+ def is_locally_equivalent_to(self, other, check_primes_only=False,
121
+ force_jordan_equivalence_test=False) -> bool:
122
+ r"""
123
+ Determine if the current quadratic form (defined over `\ZZ`) is
124
+ locally equivalent to the given form over the real numbers and the
125
+ `p`-adic integers for every prime `p`.
126
+
127
+ This works by comparing the local Jordan decompositions at every
128
+ prime, and the dimension and signature at the real place.
129
+
130
+ INPUT:
131
+
132
+ - ``other`` -- a :class:`QuadraticForm`
133
+
134
+ OUTPUT: boolean
135
+
136
+ EXAMPLES::
137
+
138
+ sage: Q1 = QuadraticForm(ZZ, 3, [1, 0, -1, 2, -1, 5])
139
+ sage: Q2 = QuadraticForm(ZZ, 3, [2, 1, 2, 2, 1, 3])
140
+ sage: Q1.is_globally_equivalent_to(Q2) # needs sage.libs.pari
141
+ False
142
+ sage: Q1.is_locally_equivalent_to(Q2) # needs sage.libs.pari
143
+ True
144
+ """
145
+ # TO IMPLEMENT:
146
+ if self.det() == 0:
147
+ raise NotImplementedError("OOps! We need to think about whether this still works for degenerate forms... especially check the signature.")
148
+
149
+ # Check that both forms have the same dimension and base ring
150
+ if (self.dim() != other.dim()) or (self.base_ring() != other.base_ring()):
151
+ return False
152
+
153
+ # Check that the determinant and level agree
154
+ if (self.det() != other.det()) or (self.level() != other.level()):
155
+ return False
156
+
157
+ # -----------------------------------------------------
158
+
159
+ # Test equivalence over the real numbers
160
+ if self.signature() != other.signature():
161
+ return False
162
+
163
+ # Test equivalence over Z_p for all primes
164
+ if (self.base_ring() == ZZ) and (not force_jordan_equivalence_test):
165
+
166
+ # Test equivalence with Conway-Sloane genus symbols (default over ZZ)
167
+ if self.CS_genus_symbol_list() != other.CS_genus_symbol_list():
168
+ return False
169
+ else:
170
+ # Test equivalence via the O'Meara criterion.
171
+ for p in prime_divisors(ZZ(2) * self.det()):
172
+ if not self.has_equivalent_Jordan_decomposition_at_prime(other, p):
173
+ return False
174
+
175
+ # All tests have passed!
176
+ return True
177
+
178
+
179
+ def has_equivalent_Jordan_decomposition_at_prime(self, other, p) -> bool:
180
+ """
181
+ Determine if the given quadratic form has a Jordan decomposition
182
+ equivalent to that of ``self``.
183
+
184
+ INPUT:
185
+
186
+ - ``other`` -- a :class:`QuadraticForm`
187
+
188
+ OUTPUT: boolean
189
+
190
+ EXAMPLES::
191
+
192
+ sage: Q1 = QuadraticForm(ZZ, 3, [1, 0, -1, 1, 0, 3])
193
+ sage: Q2 = QuadraticForm(ZZ, 3, [1, 0, 0, 2, -2, 6])
194
+ sage: Q3 = QuadraticForm(ZZ, 3, [1, 0, 0, 1, 0, 11])
195
+ sage: [Q1.level(), Q2.level(), Q3.level()]
196
+ [44, 44, 44]
197
+
198
+ sage: # needs sage.libs.pari
199
+ sage: Q1.has_equivalent_Jordan_decomposition_at_prime(Q2, 2)
200
+ False
201
+ sage: Q1.has_equivalent_Jordan_decomposition_at_prime(Q2, 11)
202
+ False
203
+ sage: Q1.has_equivalent_Jordan_decomposition_at_prime(Q3, 2)
204
+ False
205
+ sage: Q1.has_equivalent_Jordan_decomposition_at_prime(Q3, 11)
206
+ True
207
+ sage: Q2.has_equivalent_Jordan_decomposition_at_prime(Q3, 2)
208
+ True
209
+ sage: Q2.has_equivalent_Jordan_decomposition_at_prime(Q3, 11)
210
+ False
211
+ """
212
+ # Sanity Checks
213
+ # if not isinstance(other, QuadraticForm):
214
+ if not isinstance(other, type(self)):
215
+ raise TypeError("the first argument must be of type QuadraticForm")
216
+ if not is_prime(p):
217
+ raise TypeError("the second argument must be a prime number")
218
+
219
+ # Get the relevant local normal forms quickly
220
+ self_jordan = self.jordan_blocks_by_scale_and_unimodular(p, safe_flag=False)
221
+ other_jordan = other.jordan_blocks_by_scale_and_unimodular(p, safe_flag=False)
222
+
223
+ # Check for the same number of Jordan components
224
+ if len(self_jordan) != len(other_jordan):
225
+ return False
226
+
227
+ # Deal with odd primes: Check that the Jordan component scales, dimensions, and discriminants are the same
228
+ if p != 2:
229
+ for i in range(len(self_jordan)):
230
+ if (self_jordan[i][0] != other_jordan[i][0]) \
231
+ or (self_jordan[i][1].dim() != other_jordan[i][1].dim()) \
232
+ or (legendre_symbol(self_jordan[i][1].det() * other_jordan[i][1].det(), p) != 1):
233
+ return False
234
+
235
+ # All tests passed for an odd prime.
236
+ return True
237
+
238
+ # For p = 2: Check that all Jordan Invariants are the same.
239
+ elif p == 2:
240
+
241
+ # Useful definition
242
+ t = len(self_jordan) # Define t = Number of Jordan components
243
+
244
+ # Check that all Jordan Invariants are the same (scale, dim, and norm)
245
+ for i in range(t):
246
+ if (self_jordan[i][0] != other_jordan[i][0]) \
247
+ or (self_jordan[i][1].dim() != other_jordan[i][1].dim()) \
248
+ or (valuation(GCD(self_jordan[i][1].coefficients()), p) != valuation(GCD(other_jordan[i][1].coefficients()), p)):
249
+ return False
250
+
251
+ # Use O'Meara's isometry test 93:29 on p277.
252
+ # ------------------------------------------
253
+
254
+ # List of norms, scales, and dimensions for each i
255
+ scale_list = [ZZ(2)**self_jordan[i][0] for i in range(t)]
256
+ norm_list = [ZZ(2)**(self_jordan[i][0] + valuation(GCD(self_jordan[i][1].coefficients()), 2)) for i in range(t)]
257
+ dim_list = [(self_jordan[i][1].dim()) for i in range(t)]
258
+
259
+ # List of Hessian determinants and Hasse invariants for each Jordan (sub)chain
260
+ # (Note: This is not the same as O'Meara's Gram determinants, but ratios are the same!) -- NOT SO GOOD...
261
+ # But it matters in condition (ii), so we multiply all by 2 (instead of dividing by 2 since only square-factors matter, and it's easier.)
262
+ j = 0
263
+ self_chain_det_list = [self_jordan[j][1].Gram_det() * (scale_list[j]**dim_list[j])]
264
+ other_chain_det_list = [other_jordan[j][1].Gram_det() * (scale_list[j]**dim_list[j])]
265
+ self_hasse_chain_list = [self_jordan[j][1].scale_by_factor(ZZ(2)**self_jordan[j][0]).hasse_invariant__OMeara(2)]
266
+ other_hasse_chain_list = [other_jordan[j][1].scale_by_factor(ZZ(2)**other_jordan[j][0]).hasse_invariant__OMeara(2)]
267
+
268
+ for j in range(1, t):
269
+ self_chain_det_list.append(self_chain_det_list[j-1] * self_jordan[j][1].Gram_det() * (scale_list[j]**dim_list[j]))
270
+ other_chain_det_list.append(other_chain_det_list[j-1] * other_jordan[j][1].Gram_det() * (scale_list[j]**dim_list[j]))
271
+ self_hasse_chain_list.append(self_hasse_chain_list[j-1]
272
+ * hilbert_symbol(self_chain_det_list[j-1], self_jordan[j][1].Gram_det(), 2)
273
+ * self_jordan[j][1].hasse_invariant__OMeara(2))
274
+ other_hasse_chain_list.append(other_hasse_chain_list[j-1]
275
+ * hilbert_symbol(other_chain_det_list[j-1], other_jordan[j][1].Gram_det(), 2)
276
+ * other_jordan[j][1].hasse_invariant__OMeara(2))
277
+
278
+ # SANITY CHECK -- check that the scale powers are strictly increasing
279
+ for i in range(1, len(scale_list)):
280
+ if scale_list[i - 1] >= scale_list[i]:
281
+ raise RuntimeError("there is something wrong with the Jordan Decomposition ; the given scales are not strictly increasing")
282
+
283
+ # Test O'Meara's two conditions
284
+ for i in range(t - 1):
285
+
286
+ # Condition (i): Check that their (unit) ratio is a square (but it suffices to check at most mod 8).
287
+ modulus = norm_list[i] * norm_list[i+1] / (scale_list[i] ** 2)
288
+ modulus = min(modulus, 8)
289
+ if (modulus > 1) and (((self_chain_det_list[i] / other_chain_det_list[i]) % modulus) != 1):
290
+ return False
291
+
292
+ # Check O'Meara's condition (ii) when appropriate
293
+ if norm_list[i + 1] % (4 * norm_list[i]) == 0:
294
+ if self_hasse_chain_list[i] * hilbert_symbol(norm_list[i] * other_chain_det_list[i], -self_chain_det_list[i], 2) \
295
+ != other_hasse_chain_list[i] * hilbert_symbol(norm_list[i], -other_chain_det_list[i], 2): # Nipp conditions
296
+ return False
297
+
298
+ # All tests passed for the prime 2.
299
+ return True
300
+
301
+ else:
302
+ raise TypeError("this should not have happened")
303
+
304
+
305
+ def is_rationally_isometric(self, other, return_matrix=False) -> bool | Any:
306
+ """
307
+ Determine if two regular quadratic forms over a number field are isometric.
308
+
309
+ INPUT:
310
+
311
+ - ``other`` -- a quadratic form over a number field
312
+
313
+ - ``return_matrix`` -- boolean (default: ``False``); return
314
+ the transformation matrix instead of a boolean; this is currently
315
+ only implemented for forms over ``QQ``
316
+
317
+ OUTPUT:
318
+
319
+ - if ``return_matrix`` is ``False``: a boolean
320
+
321
+ - if ``return_matrix`` is ``True``: either ``False`` or the
322
+ transformation matrix
323
+
324
+ EXAMPLES::
325
+
326
+ sage: V = DiagonalQuadraticForm(QQ, [1, 1, 2])
327
+ sage: W = DiagonalQuadraticForm(QQ, [2, 2, 2])
328
+ sage: V.is_rationally_isometric(W) # needs sage.libs.pari
329
+ True
330
+
331
+ ::
332
+
333
+ sage: # needs sage.rings.number_field
334
+ sage: x = polygen(ZZ, 'x')
335
+ sage: K.<a> = NumberField(x^2 - 3)
336
+ sage: V = QuadraticForm(K, 4, [1, 0, 0, 0, 2*a, 0, 0, a, 0, 2]); V
337
+ Quadratic form in 4 variables over Number Field in a
338
+ with defining polynomial x^2 - 3 with coefficients:
339
+ [ 1 0 0 0 ]
340
+ [ * 2*a 0 0 ]
341
+ [ * * a 0 ]
342
+ [ * * * 2 ]
343
+ sage: W = QuadraticForm(K, 4, [1, 2*a, 4, 6, 3, 10, 2, 1, 2, 5]); W
344
+ Quadratic form in 4 variables over Number Field in a
345
+ with defining polynomial x^2 - 3 with coefficients:
346
+ [ 1 2*a 4 6 ]
347
+ [ * 3 10 2 ]
348
+ [ * * 1 2 ]
349
+ [ * * * 5 ]
350
+ sage: V.is_rationally_isometric(W)
351
+ False
352
+
353
+ ::
354
+
355
+ sage: # needs sage.rings.number_field
356
+ sage: K.<a> = NumberField(x^4 + 2*x + 6)
357
+ sage: V = DiagonalQuadraticForm(K, [a, 2, 3, 2, 1]); V
358
+ Quadratic form in 5 variables over Number Field in a
359
+ with defining polynomial x^4 + 2*x + 6 with coefficients:
360
+ [ a 0 0 0 0 ]
361
+ [ * 2 0 0 0 ]
362
+ [ * * 3 0 0 ]
363
+ [ * * * 2 0 ]
364
+ [ * * * * 1 ]
365
+ sage: W = DiagonalQuadraticForm(K, [a, a, a, 2, 1]); W
366
+ Quadratic form in 5 variables over Number Field in a
367
+ with defining polynomial x^4 + 2*x + 6 with coefficients:
368
+ [ a 0 0 0 0 ]
369
+ [ * a 0 0 0 ]
370
+ [ * * a 0 0 ]
371
+ [ * * * 2 0 ]
372
+ [ * * * * 1 ]
373
+ sage: V.is_rationally_isometric(W)
374
+ False
375
+
376
+ ::
377
+
378
+ sage: # needs sage.rings.number_field
379
+ sage: K.<a> = NumberField(x^2 - 3)
380
+ sage: V = DiagonalQuadraticForm(K, [-1, a, -2*a])
381
+ sage: W = DiagonalQuadraticForm(K, [-1, -a, 2*a])
382
+ sage: V.is_rationally_isometric(W)
383
+ True
384
+
385
+ sage: # needs sage.rings.number_field
386
+ sage: V = DiagonalQuadraticForm(QQ, [1, 1, 2])
387
+ sage: W = DiagonalQuadraticForm(QQ, [2, 2, 2])
388
+ sage: T = V.is_rationally_isometric(W, True); T
389
+ [ 0 0 1]
390
+ [-1/2 -1/2 0]
391
+ [ 1/2 -1/2 0]
392
+ sage: V.Gram_matrix() == T.transpose() * W.Gram_matrix() * T
393
+ True
394
+
395
+ sage: T = W.is_rationally_isometric(V, True); T # needs sage.rings.number_field
396
+ [ 0 -1 1]
397
+ [ 0 -1 -1]
398
+ [ 1 0 0]
399
+ sage: W.Gram_matrix() == T.T * V.Gram_matrix() * T # needs sage.rings.number_field
400
+ True
401
+
402
+ ::
403
+
404
+ sage: L = QuadraticForm(QQ, 3, [2, 2, 0, 2, 2, 5])
405
+ sage: M = QuadraticForm(QQ, 3, [2, 2, 0, 3, 2, 3])
406
+ sage: L.is_rationally_isometric(M, True) # needs sage.libs.pari
407
+ False
408
+
409
+ ::
410
+
411
+ sage: A = DiagonalQuadraticForm(QQ, [1, 5])
412
+ sage: B = QuadraticForm(QQ, 2, [1, 12, 81])
413
+ sage: T = A.is_rationally_isometric(B, True); T # needs sage.libs.pari
414
+ [ 1 -2]
415
+ [ 0 1/3]
416
+ sage: A.Gram_matrix() == T.T * B.Gram_matrix() * T # needs sage.libs.pari
417
+ True
418
+
419
+ ::
420
+
421
+ sage: C = DiagonalQuadraticForm(QQ, [1, 5, 9])
422
+ sage: D = DiagonalQuadraticForm(QQ, [6, 30, 1])
423
+ sage: T = C.is_rationally_isometric(D, True); T # needs sage.libs.pari
424
+ [ 0 -5/6 1/2]
425
+ [ 0 1/6 1/2]
426
+ [ -1 0 0]
427
+ sage: C.Gram_matrix() == T.T * D.Gram_matrix() * T # needs sage.libs.pari
428
+ True
429
+
430
+ ::
431
+
432
+ sage: E = DiagonalQuadraticForm(QQ, [1, 1])
433
+ sage: F = QuadraticForm(QQ, 2, [17, 94, 130])
434
+ sage: T = F.is_rationally_isometric(E, True); T # needs sage.libs.pari
435
+ [ -4 -189/17]
436
+ [ -1 -43/17]
437
+ sage: F.Gram_matrix() == T.T * E.Gram_matrix() * T # needs sage.libs.pari
438
+ True
439
+
440
+ TESTS::
441
+
442
+ sage: # needs sage.rings.number_field
443
+ sage: K.<a> = QuadraticField(3)
444
+ sage: V = DiagonalQuadraticForm(K, [1, 2])
445
+ sage: W = DiagonalQuadraticForm(K, [1, 0])
446
+ sage: V.is_rationally_isometric(W)
447
+ Traceback (most recent call last):
448
+ ...
449
+ NotImplementedError: this only tests regular forms
450
+
451
+ Forms must have the same base ring otherwise a :exc:`TypeError` is raised::
452
+
453
+ sage: # needs sage.rings.number_field
454
+ sage: K1.<a> = QuadraticField(5)
455
+ sage: K2.<b> = QuadraticField(7)
456
+ sage: V = DiagonalQuadraticForm(K1, [1, a])
457
+ sage: W = DiagonalQuadraticForm(K2, [1, b])
458
+ sage: V.is_rationally_isometric(W)
459
+ Traceback (most recent call last):
460
+ ...
461
+ TypeError: forms must have the same base ring.
462
+
463
+ Forms which have different dimension are not isometric::
464
+
465
+ sage: W = DiagonalQuadraticForm(QQ, [1, 2])
466
+ sage: V = DiagonalQuadraticForm(QQ, [1, 1, 1])
467
+ sage: V.is_rationally_isometric(W)
468
+ False
469
+
470
+ Forms whose determinants do not differ by a square in the base field are not isometric::
471
+
472
+ sage: # needs sage.rings.number_field
473
+ sage: K.<a> = NumberField(x^2 - 3)
474
+ sage: V = DiagonalQuadraticForm(K, [-1, a, -2*a])
475
+ sage: W = DiagonalQuadraticForm(K, [-1, a, 2*a])
476
+ sage: V.is_rationally_isometric(W)
477
+ False
478
+
479
+ ::
480
+
481
+ sage: # needs sage.rings.number_field
482
+ sage: K.<a> = NumberField(x^5 - x + 2, 'a')
483
+ sage: Q = QuadraticForm(K, 3, [a, 1, 0, -a**2, -a**3, -1])
484
+ sage: m = Q.matrix()
485
+ sage: for _ in range(5):
486
+ ....: t = random_matrix(ZZ, 3, algorithm='unimodular')
487
+ ....: m2 = t*m*t.transpose()
488
+ ....: Q2 = QuadraticForm(K, 3, [m2[i,j] / (2 if i==j else 1)
489
+ ....: for i in range(3) for j in range(i,3)])
490
+ ....: print(Q.is_rationally_isometric(Q2))
491
+ True
492
+ True
493
+ True
494
+ True
495
+ True
496
+ """
497
+ if self.Gram_det() == 0 or other.Gram_det() == 0:
498
+ raise NotImplementedError("this only tests regular forms")
499
+
500
+ if self.base_ring() != other.base_ring():
501
+ raise TypeError("forms must have the same base ring.")
502
+
503
+ if self.dim() != other.dim():
504
+ return False
505
+
506
+ if not (self.Gram_det() * other.Gram_det()).is_square():
507
+ return False
508
+
509
+ L1 = self.Gram_det().support()
510
+ L2 = other.Gram_det().support()
511
+
512
+ for p in set().union(L1, L2):
513
+ if self.hasse_invariant(p) != other.hasse_invariant(p):
514
+ return False
515
+
516
+ if self.base_ring() == QQ:
517
+ if self.signature() != other.signature():
518
+ return False
519
+ else:
520
+
521
+ M = self.rational_diagonal_form().Gram_matrix_rational()
522
+ N = other.rational_diagonal_form().Gram_matrix_rational()
523
+ K = self.base_ring()
524
+
525
+ Mentries = M.diagonal()
526
+ Nentries = N.diagonal()
527
+
528
+ for emb in K.real_embeddings():
529
+
530
+ Mpos = 0
531
+ for x in Mentries:
532
+ Mpos += emb(x) >= 0
533
+
534
+ Npos = 0
535
+ for x in Nentries:
536
+ Npos += emb(x) >= 0
537
+
538
+ if Npos != Mpos:
539
+ return False
540
+
541
+ if not return_matrix:
542
+ return True
543
+
544
+ # Ensure that both quadratic forms are diagonal.
545
+ Q, q_diagonal_transform = self.rational_diagonal_form(True)
546
+ F, f_diagonal_transform = other.rational_diagonal_form(True)
547
+
548
+ # Call the method that does all the work to compute the transformation.
549
+ transform = _diagonal_isometry(Q, F)
550
+
551
+ return f_diagonal_transform * transform * q_diagonal_transform.inverse()
552
+
553
+
554
+ def _diagonal_isometry(V, W):
555
+ r"""
556
+ Given two diagonal, rationally equivalent quadratic forms, computes a
557
+ transition matrix mapping from one to the other.
558
+
559
+ .. NOTE::
560
+
561
+ This function is an auxiliary method of ``isometry``, which is
562
+ the method that should be called as it performs error-checking
563
+ that is not present in this function.
564
+
565
+ INPUT:
566
+
567
+ - ``V`` -- a diagonal quadratic form
568
+ - ``W`` -- a diagonal quadratic form
569
+
570
+ OUTPUT:
571
+
572
+ - A matrix ``T`` representing the isometry transformation, such that if
573
+ ``VM`` is the gram matrix of ``V`` and ``WM`` is the gram matrix of
574
+ ``W``, then ``VM == T.transpose() * WM * T`` yields ``True``.
575
+
576
+ EXAMPLES::
577
+
578
+ sage: from sage.quadratic_forms.quadratic_form__equivalence_testing import _diagonal_isometry
579
+
580
+ sage: Q = DiagonalQuadraticForm(QQ, [1, 2, 4])
581
+ sage: F = DiagonalQuadraticForm(QQ, [2, 2, 2])
582
+
583
+ sage: T = _diagonal_isometry(Q, F); T # needs sage.libs.pari
584
+ [ 0 1 0]
585
+ [-1/2 0 1]
586
+ [ 1/2 0 1]
587
+ sage: Q.Gram_matrix() == T.T * F.Gram_matrix() * T # needs sage.libs.pari
588
+ True
589
+
590
+ sage: T = _diagonal_isometry(F, Q); T # needs sage.libs.pari
591
+ [ 0 -1 -1]
592
+ [ 1 0 0]
593
+ [ 0 -1/2 1/2]
594
+ sage: F.Gram_matrix() == T.T * Q.Gram_matrix() * T # needs sage.libs.pari
595
+ True
596
+ """
597
+ import copy
598
+ from sage.quadratic_forms.quadratic_form import DiagonalQuadraticForm
599
+ from sage.matrix.constructor import Matrix
600
+ from sage.modules.free_module_element import vector
601
+
602
+ # We need to modify V and W, so copy them into Q and F respectively.
603
+ Q, F = copy.deepcopy(V), copy.deepcopy(W)
604
+ # Let FM denote the Gram matrix of F.
605
+ FM = F.Gram_matrix()
606
+ n = Q.dim()
607
+
608
+ # This matrix represents a new basis for W, where the columns of the
609
+ # matrix are the vectors of the basis. We initialize it to the standard basis.
610
+ change_of_basis_matrix = Matrix.identity(QQ, n)
611
+
612
+ # The goal of this loop is to obtain a new basis for W such that the
613
+ # Gram matrix of V with respect to the standard basis equals the Gram matrix
614
+ # of W with respect to the new basis.
615
+ for i in range(n):
616
+ # If the first terms are not equal...
617
+ if Q.Gram_matrix()[0][0] != F.Gram_matrix()[0][0]:
618
+ # Find a vector w in F such that F(w) equals the first term of Q.
619
+ w = F.solve(Q.Gram_matrix()[0][0])
620
+ w = vector(QQ, i * [0] + w.list())
621
+
622
+ # We want to extend the basis of W to include the vector w.
623
+ # Find a non-fixed vector in the current basis to replace by w.
624
+ j = i
625
+ # The new set of vectors must still be linearly independent (i.e. the matrix is non-singular).
626
+ while True:
627
+ temp_matrix = Matrix(change_of_basis_matrix)
628
+ temp_matrix.set_column(j, change_of_basis_matrix * w)
629
+ if not temp_matrix.is_singular():
630
+ break
631
+ j += 1
632
+
633
+ change_of_basis_matrix = temp_matrix
634
+
635
+ # We want to fix w to be the basis vector at position i, so swap it with whatever is already there.
636
+ col = change_of_basis_matrix.column(i)
637
+ change_of_basis_matrix.set_column(i, change_of_basis_matrix.column(j))
638
+ change_of_basis_matrix.set_column(j, col)
639
+
640
+ # Orthogonalize the basis.
641
+ change_of_basis_matrix = _gram_schmidt(change_of_basis_matrix, i, W.bilinear_map)
642
+
643
+ # Obtain the diagonal gram matrix of F.
644
+ FM = W(change_of_basis_matrix).Gram_matrix_rational()
645
+
646
+ # Now we have that QM[0][0] == FM[0][0] where QM and FM are the Gram matrices
647
+ # of Q and F respectively. We remove the first variable from each form and continue.
648
+ F = DiagonalQuadraticForm(F.base_ring(), FM.diagonal())
649
+ F = F.extract_variables(range(i + 1, F.dim()))
650
+ Q = Q.extract_variables(range(1, Q.dim()))
651
+
652
+ return change_of_basis_matrix
653
+
654
+
655
+ def _gram_schmidt(m, fixed_vector_index, inner_product):
656
+ r"""
657
+ Orthogonalize a set of vectors, starting at a fixed vector, with respect to a given
658
+ inner product.
659
+
660
+ INPUT:
661
+
662
+ - ``m`` -- a square matrix whose columns represent vectors
663
+ - ``fixed_vector_index`` -- any vectors preceding the vector (i.e. to its left)
664
+ at this index are not changed.
665
+ - ``inner_product`` -- a function that takes two vector arguments and returns a scalar,
666
+ representing an inner product
667
+
668
+ OUTPUT: a matrix consisting of orthogonal columns with respect to the given inner product
669
+
670
+ EXAMPLES::
671
+
672
+ sage: from sage.quadratic_forms.quadratic_form__equivalence_testing import _gram_schmidt
673
+ sage: Q = QuadraticForm(QQ, 3, [1, 2, 2, 2, 1, 3]); Q
674
+ Quadratic form in 3 variables over Rational Field with coefficients:
675
+ [ 1 2 2 ]
676
+ [ * 2 1 ]
677
+ [ * * 3 ]
678
+ sage: QM = Q.Gram_matrix(); QM
679
+ [ 1 1 1]
680
+ [ 1 2 1/2]
681
+ [ 1 1/2 3]
682
+ sage: std_basis = matrix.identity(3)
683
+ sage: ortho_basis = _gram_schmidt(std_basis, 0, Q.bilinear_map); ortho_basis
684
+ [ 1 -1 -3/2]
685
+ [ 0 1 1/2]
686
+ [ 0 0 1]
687
+ sage: Q(ortho_basis).Gram_matrix_rational()
688
+ [ 1 0 0]
689
+ [ 0 1 0]
690
+ [ 0 0 7/4]
691
+ sage: v1 = ortho_basis.column(0); v2 = ortho_basis.column(1); v3 = ortho_basis.column(2);
692
+ sage: Q.bilinear_map(v1, v2) == 0
693
+ True
694
+ sage: Q.bilinear_map(v1, v3) == 0
695
+ True
696
+ sage: Q.bilinear_map(v2, v3) == 0
697
+ True
698
+ """
699
+ from sage.matrix.constructor import column_matrix
700
+
701
+ n = m.dimensions()[0]
702
+ vectors = [m.column(i) for i in range(n)]
703
+
704
+ for i in range(fixed_vector_index, n):
705
+ for j in range(i + 1, n):
706
+ vectors[j] = vectors[j] - (inner_product(vectors[j], vectors[i]) / inner_product(vectors[i], vectors[i])) * vectors[i]
707
+
708
+ return column_matrix(vectors)