passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.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 (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,748 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.libs.pari
3
+ r"""
4
+ Class groups of binary quadratic forms
5
+
6
+ EXAMPLES:
7
+
8
+ Constructing the class of a given binary quadratic form is straightforward::
9
+
10
+ sage: F1 = BinaryQF([22, 91, 99])
11
+ sage: cl1 = F1.form_class(); cl1
12
+ Class of 5*x^2 - 3*x*y + 22*y^2
13
+
14
+ Every class is represented by a reduced form in it::
15
+
16
+ sage: cl1.form()
17
+ 5*x^2 - 3*x*y + 22*y^2
18
+ sage: cl1.form() == F1.reduced_form()
19
+ True
20
+
21
+ Addition of form classes and derived operations are defined by composition
22
+ of binary quadratic forms::
23
+
24
+ sage: F2 = BinaryQF([4, 1, 27])
25
+ sage: cl2 = F2.form_class(); cl2
26
+ Class of 4*x^2 + x*y + 27*y^2
27
+ sage: cl1 + cl2
28
+ Class of 9*x^2 + x*y + 12*y^2
29
+ sage: cl1 + cl2 == (F1 * F2).form_class()
30
+ True
31
+ sage: -cl1
32
+ Class of 5*x^2 + 3*x*y + 22*y^2
33
+ sage: cl1 - cl1
34
+ Class of x^2 + x*y + 108*y^2
35
+
36
+ The form class group can be constructed as an explicit parent object::
37
+
38
+ sage: F1.discriminant()
39
+ -431
40
+ sage: Cl = BQFClassGroup(-431); Cl
41
+ Form Class Group of Discriminant -431
42
+ sage: cl1.parent() is Cl
43
+ True
44
+ sage: Cl(F1) == cl1
45
+ True
46
+
47
+ Structural properties of the form class group, such as the class number,
48
+ the group invariants, and element orders, can be computed::
49
+
50
+ sage: # needs sage.rings.number_field
51
+ sage: Cl.order()
52
+ 21
53
+ sage: cl1 * Cl.order() == Cl.zero()
54
+ True
55
+ sage: cl2 * Cl.order() == Cl.zero()
56
+ True
57
+ sage: cl2.order()
58
+ 7
59
+ sage: cl2 * cl2.order() == Cl.zero()
60
+ True
61
+ sage: Cl.abelian_group()
62
+ Additive abelian group isomorphic to Z/21 embedded in Form Class Group of Discriminant -431
63
+ sage: Cl.gens() # random
64
+ [Class of 5*x^2 + 3*x*y + 22*y^2]
65
+ sage: Cl.gens()[0].order()
66
+ 21
67
+
68
+ AUTHORS:
69
+
70
+ - Lorenz Panny (2023)
71
+ """
72
+
73
+ # ****************************************************************************
74
+ # Copyright (C) 2023 Lorenz Panny
75
+ #
76
+ # This program is free software: you can redistribute it and/or modify
77
+ # it under the terms of the GNU General Public License as published by
78
+ # the Free Software Foundation, either version 2 of the License, or
79
+ # (at your option) any later version.
80
+ # https://www.gnu.org/licenses/
81
+ # ****************************************************************************
82
+
83
+ from sage.misc.cachefunc import cached_method
84
+ from sage.misc.lazy_import import lazy_import
85
+
86
+ from sage.structure.parent import Parent
87
+ from sage.structure.unique_representation import UniqueRepresentation
88
+ from sage.structure.element import AdditiveGroupElement
89
+ from sage.categories.morphism import Morphism
90
+
91
+ from sage.misc.prandom import randrange
92
+ from sage.rings.integer_ring import ZZ
93
+ from sage.rings.finite_rings.integer_mod_ring import Zmod
94
+ from sage.rings.finite_rings.integer_mod import Mod
95
+ from sage.rings.polynomial.polynomial_ring import polygen
96
+ from sage.arith.misc import random_prime
97
+ from sage.matrix.constructor import matrix
98
+ from sage.groups.generic import order_from_multiple, multiple
99
+ from sage.groups.additive_abelian.additive_abelian_wrapper import AdditiveAbelianGroupWrapper
100
+ from sage.quadratic_forms.binary_qf import BinaryQF
101
+
102
+ lazy_import('sage.libs.pari', 'pari')
103
+
104
+
105
+ class BQFClassGroup(Parent, UniqueRepresentation):
106
+ r"""
107
+ This type represents the class group for a given discriminant `D`.
108
+
109
+ - For `D < 0`, the group is the class group of *positive definite*
110
+ binary quadratic forms. The "full" form class group is the direct
111
+ sum of two isomorphic copies of this group (one for positive
112
+ definite forms and one for negative definite forms).
113
+
114
+ - For `D > 0`, this functionality is currently not implemented.
115
+
116
+ EXAMPLES::
117
+
118
+ sage: BQFClassGroup(-4)
119
+ Form Class Group of Discriminant -4
120
+ sage: BQFClassGroup(-6)
121
+ Traceback (most recent call last):
122
+ ...
123
+ ValueError: not a discriminant
124
+
125
+ The discriminant need not be fundamental::
126
+
127
+ sage: BQFClassGroup(-22^2)
128
+ Form Class Group of Discriminant -484
129
+ """
130
+
131
+ def __init__(self, D, *, check=True):
132
+ r"""
133
+ Construct the class group for a given discriminant `D`.
134
+
135
+ TESTS:
136
+
137
+ Check that positive discriminants are rejected until code is
138
+ written for them::
139
+
140
+ sage: BQFClassGroup(101)
141
+ Traceback (most recent call last):
142
+ ...
143
+ NotImplementedError: positive discriminants are not yet supported
144
+ """
145
+ self._disc = ZZ(D)
146
+ if check:
147
+ if not self._disc or self._disc % 4 not in (0, 1):
148
+ raise ValueError('not a discriminant')
149
+ if self._disc > 0:
150
+ raise NotImplementedError('positive discriminants are not yet supported')
151
+ super().__init__()
152
+
153
+ def _element_constructor_(self, F, *, check=True):
154
+ r"""
155
+ Construct an element of this form class group as a :class:`BQFClassGroup_element`.
156
+
157
+ EXAMPLES::
158
+
159
+ sage: Cl = BQFClassGroup(-999)
160
+ sage: Cl(0) # indirect doctest
161
+ Class of x^2 + x*y + 250*y^2
162
+ sage: Cl(BinaryQF([16, 5, 16])) # indirect doctest
163
+ Class of 16*x^2 + 5*x*y + 16*y^2
164
+ """
165
+ if isinstance(F, BQFClassGroup_element):
166
+ if check and F.parent() is not self: # class group is unique parent
167
+ raise ValueError('quadratic form has incorrect discriminant')
168
+ return F
169
+ if F == 0:
170
+ return self.zero()
171
+ if check and not isinstance(F, BinaryQF):
172
+ raise TypeError('not a binary quadratic form')
173
+ return BQFClassGroup_element(F, parent=self, check=check)
174
+
175
+ def zero(self):
176
+ r"""
177
+ Return the neutral element of this group, i.e., the class of the
178
+ principal binary quadratic form of the respective discriminant.
179
+
180
+ EXAMPLES::
181
+
182
+ sage: Cl = BQFClassGroup(-999)
183
+ sage: cl = Cl.zero(); cl
184
+ Class of x^2 + x*y + 250*y^2
185
+ sage: cl + cl == cl
186
+ True
187
+ """
188
+ return self(BinaryQF.principal(self._disc))
189
+
190
+ def random_element(self):
191
+ r"""
192
+ Return a somewhat random element of this form class group.
193
+
194
+ ALGORITHM:
195
+
196
+ Sample random odd primes `a` until `b^2 = D \pmod{4a}` has a
197
+ solution `b \in \ZZ` and set `c = (b^2-D)/(4a)`. Flip a coin
198
+ to choose the sign of `b`. Then return the class of `[a,b,c]`.
199
+
200
+ .. NOTE::
201
+
202
+ No strict guarantees are being made about the distribution of
203
+ classes sampled by this function. Heuristically, however, it
204
+ should be fairly close to uniform.
205
+
206
+ EXAMPLES::
207
+
208
+ sage: Cl = BQFClassGroup(-999); Cl
209
+ Form Class Group of Discriminant -999
210
+ sage: cl = Cl.random_element(); cl # random
211
+ Class of 10*x^2 + x*y + 25*y^2
212
+ sage: cl.form().discriminant()
213
+ -999
214
+ """
215
+ B = self._disc.abs() * 100 + 9999
216
+ while True:
217
+ a = random_prime(B, proof=False, lbound=3)
218
+ if self._disc.kronecker(a) == 1:
219
+ break
220
+ b = ZZ(Mod(self._disc, 4*a).sqrt())
221
+ c = (b**2 - self._disc) // (4*a)
222
+ if randrange(2):
223
+ b = -b
224
+ return self(BinaryQF([a, b, c]))
225
+
226
+ def __hash__(self):
227
+ r"""
228
+ Return a hash value for this form class group.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: hash(BQFClassGroup(-999)) # random
233
+ -4246560339810542104
234
+ """
235
+ return hash(('BQFClassGroup', self._disc))
236
+
237
+ def _repr_(self):
238
+ r"""
239
+ Return a string describing this form class group.
240
+
241
+ EXAMPLES::
242
+
243
+ sage: BQFClassGroup(-999) # indirect doctest
244
+ Form Class Group of Discriminant -999
245
+ """
246
+ return f'Form Class Group of Discriminant {self._disc}'
247
+
248
+ def discriminant(self):
249
+ r"""
250
+ Return the discriminant of the forms in this form class group.
251
+
252
+ EXAMPLES::
253
+
254
+ sage: BQFClassGroup(-999).discriminant()
255
+ -999
256
+ """
257
+ return self._disc
258
+
259
+ @cached_method
260
+ def order(self):
261
+ r"""
262
+ Return the order of this form class group (the *class number*).
263
+
264
+ ALGORITHM: :func:`sage.rings.number_field.order.quadratic_order_class_number`.
265
+
266
+ EXAMPLES::
267
+
268
+ sage: # needs sage.rings.number_field
269
+ sage: BQFClassGroup(-4).order()
270
+ 1
271
+ sage: BQFClassGroup(-11).order()
272
+ 1
273
+ sage: BQFClassGroup(-67).order()
274
+ 1
275
+ sage: BQFClassGroup(-163).order()
276
+ 1
277
+ sage: BQFClassGroup(-999).order()
278
+ 24
279
+ sage: BQFClassGroup(-9999).order()
280
+ 88
281
+ sage: BQFClassGroup(-99999).order()
282
+ 224
283
+ """
284
+ # Beware: If this code is ever generalized to positive
285
+ # discriminants, care must be taken to use the correct
286
+ # notion of class number. We may need the *narrow* class
287
+ # number here; see PARI's documentation for qfbclassno().
288
+ from sage.rings.number_field.order import quadratic_order_class_number
289
+ return quadratic_order_class_number(self._disc)
290
+
291
+ cardinality = order
292
+
293
+ @cached_method
294
+ def abelian_group(self):
295
+ r"""
296
+ Return the structure of this form class group as an
297
+ :class:`AdditiveAbelianGroupWrapper` object.
298
+
299
+ ALGORITHM: :pari:`quadclassunit`
300
+
301
+ EXAMPLES::
302
+
303
+ sage: Cl = BQFClassGroup(-4*777)
304
+ sage: Cl.order() # needs sage.rings.number_field
305
+ 16
306
+ sage: G = Cl.abelian_group(); G
307
+ Additive abelian group isomorphic to Z/4 + Z/2 + Z/2 embedded in Form Class Group of Discriminant -3108
308
+ sage: G.gens() # random
309
+ (Class of 11*x^2 + 4*x*y + 71*y^2,
310
+ Class of 6*x^2 + 6*x*y + 131*y^2,
311
+ Class of 2*x^2 + 2*x*y + 389*y^2)
312
+ sage: [g.order() for g in G.gens()]
313
+ [4, 2, 2]
314
+ sage: G.discrete_log(Cl.random_element()) # random
315
+ (3, 0, 1)
316
+ """
317
+ h, ords, gens, reg = pari.quadclassunit(self._disc)
318
+ ords = [ZZ(o) for o in ords]
319
+ gens = [BinaryQF(g) for g in gens]
320
+ return AdditiveAbelianGroupWrapper(self, gens, ords)
321
+
322
+ def gens(self) -> list:
323
+ r"""
324
+ Return a generating set of this form class group.
325
+
326
+ EXAMPLES::
327
+
328
+ sage: Cl = BQFClassGroup(-4*419)
329
+ sage: Cl.gens()
330
+ [Class of 3*x^2 + 2*x*y + 140*y^2]
331
+
332
+ ::
333
+
334
+ sage: Cl = BQFClassGroup(-4*777)
335
+ sage: Cl.gens() # random
336
+ [Class of 11*x^2 + 4*x*y + 71*y^2,
337
+ Class of 6*x^2 + 6*x*y + 131*y^2,
338
+ Class of 2*x^2 + 2*x*y + 389*y^2]
339
+ """
340
+ return [g.element() for g in self.abelian_group().gens()]
341
+
342
+ def _coerce_map_from_(self, other):
343
+ r"""
344
+ Return the natural projection map between two class groups
345
+ of binary quadratic forms when it is defined.
346
+
347
+ .. SEEALSO:: :class:`BQFClassGroupQuotientMorphism`
348
+
349
+ EXAMPLES::
350
+
351
+ sage: G = BQFClassGroup(-4*117117)
352
+ sage: H = BQFClassGroup(-4*77)
353
+ sage: proj = G.hom(H); proj # implicit doctest
354
+ Coercion morphism:
355
+ From: Form Class Group of Discriminant -468468
356
+ To: Form Class Group of Discriminant -308
357
+ sage: elt = G(BinaryQF(333, 306, 422)); elt
358
+ Class of 333*x^2 + 306*x*y + 422*y^2
359
+ sage: proj(elt)
360
+ Class of 9*x^2 + 4*x*y + 9*y^2
361
+ """
362
+ if not isinstance(other, BQFClassGroup):
363
+ return super()._coerce_map_from_(other)
364
+ try:
365
+ proj = BQFClassGroupQuotientMorphism(other, self)
366
+ except (TypeError, ValueError):
367
+ return super()._coerce_map_from_(other)
368
+ return proj
369
+
370
+
371
+ class BQFClassGroup_element(AdditiveGroupElement):
372
+ r"""
373
+ This type represents elements of class groups of binary quadratic forms.
374
+
375
+ Users should not need to construct objects of this type directly; it can
376
+ be accessed via either the :class:`BQFClassGroup` parent object or the
377
+ :meth:`~BinaryQF.form_class` method associated to binary quadratic forms.
378
+
379
+ Currently only classes of positive definite forms are supported.
380
+
381
+ EXAMPLES::
382
+
383
+ sage: F = BinaryQF([22, 91, 99])
384
+ sage: F.form_class() # implicit doctest
385
+ Class of 5*x^2 - 3*x*y + 22*y^2
386
+
387
+ ::
388
+
389
+ sage: Cl = BQFClassGroup(-4*419)
390
+ sage: Cl.zero()
391
+ Class of x^2 + 419*y^2
392
+ sage: Cl.gens()[0] # implicit doctest
393
+ Class of 3*x^2 + 2*x*y + 140*y^2
394
+ """
395
+
396
+ def __init__(self, F, parent, *, check=True, reduce=True):
397
+ r"""
398
+ Constructor for classes of binary quadratic forms.
399
+
400
+ EXAMPLES::
401
+
402
+ sage: Cl = BQFClassGroup(-431)
403
+ sage: F = BinaryQF([22, 91, 99])
404
+ sage: from sage.quadratic_forms.bqf_class_group import BQFClassGroup_element
405
+ sage: BQFClassGroup_element(F, parent=Cl)
406
+ Class of 5*x^2 - 3*x*y + 22*y^2
407
+ """
408
+ if check:
409
+ if not isinstance(F, BinaryQF):
410
+ raise TypeError('not a binary quadratic form')
411
+ if F.discriminant() != parent.discriminant():
412
+ raise ValueError('given quadratic form has wrong discriminant')
413
+ if not F.is_primitive():
414
+ raise ValueError('given quadratic form is not primitive')
415
+ if not F.is_positive_definite():
416
+ raise NotImplementedError('only positive definite forms are currently supported')
417
+ if reduce:
418
+ F = F.reduced_form()
419
+ self._form = F
420
+ super().__init__(parent=parent)
421
+
422
+ def form(self):
423
+ r"""
424
+ Return a reduced quadratic form in this class.
425
+
426
+ (For `D < 0`, each class contains a *unique* reduced form.)
427
+
428
+ EXAMPLES::
429
+
430
+ sage: F = BinaryQF([3221, 2114, 350])
431
+ sage: cl = F.form_class()
432
+ sage: cl.form()
433
+ 29*x^2 + 14*x*y + 350*y^2
434
+ sage: cl.form() == F.reduced_form()
435
+ True
436
+ """
437
+ return self._form
438
+
439
+ def _neg_(self):
440
+ r"""
441
+ Return the inverse of this form class.
442
+
443
+ The inverse class of a form `[a,b,c]` is represented by `[a,-b,c]`.
444
+
445
+ EXAMPLES::
446
+
447
+ sage: F = BinaryQF([11,21,31])
448
+ sage: cl = F.form_class(); cl
449
+ Class of 11*x^2 - x*y + 21*y^2
450
+ sage: -cl # indirect doctest
451
+ Class of 11*x^2 + x*y + 21*y^2
452
+ sage: cl + (-cl) == cl.parent().zero() # indirect doctest
453
+ True
454
+ """
455
+ a, b, c = self._form
456
+ F = BinaryQF([a, -b, c])
457
+ return BQFClassGroup_element(F, parent=self.parent())
458
+
459
+ def _add_(self, other):
460
+ r"""
461
+ Return the composition of two form classes.
462
+
463
+ EXAMPLES::
464
+
465
+ sage: cl1 = BinaryQF([11,21,31]).form_class(); cl1
466
+ Class of 11*x^2 - x*y + 21*y^2
467
+ sage: cl2 = BinaryQF([7,55,141]).form_class(); cl2
468
+ Class of 7*x^2 - x*y + 33*y^2
469
+ sage: cl1 + cl2 # indirect doctest
470
+ Class of 3*x^2 + x*y + 77*y^2
471
+ """
472
+ F = self._form * other._form
473
+ return BQFClassGroup_element(F, parent=self.parent())
474
+
475
+ def _sub_(self, other):
476
+ r"""
477
+ Return the composition of a form class with the inverse of another.
478
+
479
+ EXAMPLES::
480
+
481
+ sage: cl1 = BinaryQF([11,21,31]).form_class(); cl1
482
+ Class of 11*x^2 - x*y + 21*y^2
483
+ sage: cl2 = BinaryQF([7,55,141]).form_class(); cl2
484
+ Class of 7*x^2 - x*y + 33*y^2
485
+ sage: cl1 - cl2 # indirect doctest
486
+ Class of 9*x^2 - 7*x*y + 27*y^2
487
+ sage: cl1 - cl2 == cl1 + (-cl2) # indirect doctest
488
+ True
489
+ """
490
+ return self + (-other)
491
+
492
+ def __mul__(self, other):
493
+ r"""
494
+ Return an integer multiple of this form class with respect to
495
+ repeated composition.
496
+
497
+ ALGORITHM: :func:`multiple`
498
+
499
+ EXAMPLES::
500
+
501
+ sage: F = BinaryQF([11,21,31])
502
+ sage: cl = F.form_class(); cl
503
+ Class of 11*x^2 - x*y + 21*y^2
504
+ sage: cl*0 == cl.parent().zero() # indirect doctest
505
+ True
506
+ sage: cl*1 == cl # indirect doctest
507
+ True
508
+ sage: cl*(-1) == -cl # indirect doctest
509
+ True
510
+ sage: cl*2 == cl + cl # indirect doctest
511
+ True
512
+ sage: cl*5 == cl + cl + cl + cl + cl # indirect doctest
513
+ True
514
+ sage: 5*cl == cl*5 # indirect doctest
515
+ True
516
+ sage: cl*(-5) == -(5*cl) # indirect doctest
517
+ True
518
+ """
519
+ return multiple(self, other, operation='+')
520
+
521
+ __rmul__ = __mul__
522
+
523
+ def __eq__(self, other):
524
+ r"""
525
+ Test two form classes for equality.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: F = BinaryQF([11,21,31])
530
+ sage: cl = F.form_class(); cl
531
+ Class of 11*x^2 - x*y + 21*y^2
532
+ sage: cl == cl # indirect doctest
533
+ True
534
+ sage: -cl == cl # indirect doctest
535
+ False
536
+ """
537
+ # When generalizing to positive discriminants in the future, keep
538
+ # in mind that for indefinite forms there can be multiple reduced
539
+ # forms per class. This also affects the other comparison methods
540
+ # as well as hashing.
541
+ return self._form == other._form
542
+
543
+ def __ne__(self, other):
544
+ r"""
545
+ Test two form classes for inequality.
546
+
547
+ EXAMPLES::
548
+
549
+ sage: F = BinaryQF([11,21,31])
550
+ sage: cl = F.form_class(); cl
551
+ Class of 11*x^2 - x*y + 21*y^2
552
+ sage: cl != cl # indirect doctest
553
+ False
554
+ sage: -cl != cl # indirect doctest
555
+ True
556
+ """
557
+ return self._form != other._form
558
+
559
+ def __lt__(self, other):
560
+ r"""
561
+ Compare two form classes according to the lexicographic ordering
562
+ on their coefficient lists.
563
+
564
+ EXAMPLES::
565
+
566
+ sage: cl1 = BinaryQF([7,55,141]).form_class(); cl1
567
+ Class of 7*x^2 - x*y + 33*y^2
568
+ sage: cl2 = BinaryQF([11,21,31]).form_class(); cl2
569
+ Class of 11*x^2 - x*y + 21*y^2
570
+ sage: cl1 < cl2 # indirect doctest
571
+ True
572
+ sage: cl1 > cl2 # indirect doctest
573
+ False
574
+ """
575
+ return self._form < other._form
576
+
577
+ def __bool__(self) -> bool:
578
+ r"""
579
+ Return ``True`` if this form class is *not* the principal class
580
+ and ``False`` otherwise.
581
+
582
+ EXAMPLES::
583
+
584
+ sage: cl = BinaryQF([11,21,31]).form_class()
585
+ sage: bool(cl)
586
+ True
587
+ sage: bool(0*cl)
588
+ False
589
+ """
590
+ return self != self.parent().zero()
591
+
592
+ def is_zero(self) -> bool:
593
+ r"""
594
+ Return ``True`` if this form class is the principal class and
595
+ ``False`` otherwise.
596
+
597
+ EXAMPLES::
598
+
599
+ sage: cl = BinaryQF([11,21,31]).form_class()
600
+ sage: cl.is_zero()
601
+ False
602
+ sage: (0*cl).is_zero()
603
+ True
604
+ """
605
+ return not self
606
+
607
+ def __repr__(self) -> str:
608
+ r"""
609
+ Return a string representation of this form class.
610
+
611
+ EXAMPLES::
612
+
613
+ sage: F = BinaryQF([11,21,31])
614
+ sage: F.form_class() # indirect doctest
615
+ Class of 11*x^2 - x*y + 21*y^2
616
+ """
617
+ return f'Class of {self._form}'
618
+
619
+ def __hash__(self):
620
+ r"""
621
+ Return a hash value for this form class.
622
+
623
+ EXAMPLES::
624
+
625
+ sage: cl = BinaryQF([11,21,31]).form_class()
626
+ sage: hash(cl) # random
627
+ -7760578299759721732
628
+ """
629
+ return hash(('BQFClassGroup_element', self._form))
630
+
631
+ @cached_method
632
+ def order(self):
633
+ r"""
634
+ Return the order of this form class in its class group.
635
+
636
+ ALGORITHM: :meth:`BQFClassGroup.order` and :func:`order_from_multiple`
637
+
638
+ EXAMPLES::
639
+
640
+ sage: # needs sage.rings.number_field
641
+ sage: cl = BinaryQF([11,21,31]).form_class()
642
+ sage: cl.order()
643
+ 10
644
+ sage: (cl+cl).order()
645
+ 5
646
+ sage: (cl+cl+cl).order()
647
+ 10
648
+ sage: (5*cl).order()
649
+ 2
650
+ """
651
+ return order_from_multiple(self, self.parent().cardinality())
652
+
653
+
654
+ class BQFClassGroupQuotientMorphism(Morphism):
655
+ r"""
656
+ Let `D` be a discriminant and `f > 0` an integer.
657
+
658
+ Given the class groups `G` and `H` of discriminants `f^2 D` and `D`,
659
+ this class represents the natural projection morphism `G \to H` which
660
+ is defined by composing the class representative `[a,b,c]` with the
661
+ principal form of the target discriminant.
662
+
663
+ Alternatively, evaluating this map can be characterized as finding a
664
+ class representative `[a,b,c]` satisfying `f^2 \mid a` and `f \mid b`
665
+ and substituting `x \mapsto x/f`.
666
+
667
+ This map is a well-defined group homomorphism.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: from sage.quadratic_forms.bqf_class_group import BQFClassGroupQuotientMorphism
672
+ sage: G = BQFClassGroup(-4*117117)
673
+ sage: H = BQFClassGroup(-4*77)
674
+ sage: proj = BQFClassGroupQuotientMorphism(G, H)
675
+ sage: elt = G(BinaryQF(333, 306, 422))
676
+ sage: proj(elt)
677
+ Class of 9*x^2 + 4*x*y + 9*y^2
678
+
679
+ TESTS:
680
+
681
+ Check that it is really a group homomorphism::
682
+
683
+ sage: D = -randrange(1, 10^4)
684
+ sage: D *= 4 if D%4 not in (0,1) else 1
685
+ sage: f = randrange(1, 10^3)
686
+ sage: G = BQFClassGroup(f^2*D)
687
+ sage: H = BQFClassGroup(D)
688
+ sage: proj = G.hom(H)
689
+ sage: proj(G.zero()) == H.zero()
690
+ True
691
+ sage: elt1 = G.random_element()
692
+ sage: elt2 = G.random_element()
693
+ sage: proj(elt1 + elt2) == proj(elt1) + proj(elt2)
694
+ True
695
+
696
+ Check that it satisfies compatibility::
697
+
698
+ sage: ff = f * randrange(1, 10^3)
699
+ sage: F = BQFClassGroup(ff^2*D)
700
+ sage: proj = F.hom(H)
701
+ sage: proj1 = F.hom(G)
702
+ sage: proj2 = G.hom(H)
703
+ sage: elt = F.random_element()
704
+ sage: proj(elt) == proj2(proj1(elt))
705
+ True
706
+ """
707
+ def __init__(self, G, H):
708
+ r"""
709
+ Initialize this morphism between class groups of binary
710
+ quadratic forms.
711
+
712
+ EXAMPLES::
713
+
714
+ sage: from sage.quadratic_forms.bqf_class_group import BQFClassGroupQuotientMorphism
715
+ sage: G = BQFClassGroup(-4*117117)
716
+ sage: H = BQFClassGroup(-4*77)
717
+ sage: f = BQFClassGroupQuotientMorphism(G, H)
718
+ sage: TestSuite(f).run(skip='_test_category')
719
+ """
720
+ if not isinstance(G, BQFClassGroup):
721
+ raise TypeError('G needs to be a BQFClassGroup')
722
+ if not isinstance(H, BQFClassGroup):
723
+ raise TypeError('H needs to be a BQFClassGroup')
724
+ f2 = ZZ(G.discriminant() / H.discriminant())
725
+ if not f2.is_square():
726
+ raise ValueError('morphism only defined when disc(G) = f^2 * disc(H)')
727
+ super().__init__(G, H)
728
+
729
+ def _call_(self, elt):
730
+ r"""
731
+ Evaluate this morphism.
732
+
733
+ EXAMPLES::
734
+
735
+ sage: from sage.quadratic_forms.bqf_class_group import BQFClassGroupQuotientMorphism
736
+ sage: G = BQFClassGroup(-4*117117)
737
+ sage: H = BQFClassGroup(-4*77)
738
+ sage: proj = BQFClassGroupQuotientMorphism(G, H)
739
+ sage: elt = G(BinaryQF(333, 306, 422))
740
+ sage: proj(elt)
741
+ Class of 9*x^2 + 4*x*y + 9*y^2
742
+
743
+ ALGORITHM: [Buell89]_, Theorem 7.9
744
+ """
745
+ one = BinaryQF.principal(self.codomain().discriminant())
746
+ bqf = elt.form()
747
+ bqf *= one
748
+ return self.codomain()(bqf)