passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -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-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,977 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Local Density Congruence
4
+ """
5
+ ##########################################################################
6
+ # Methods which compute the local densities for representing a number
7
+ # by a quadratic form at a prime (possibly subject to additional
8
+ # congruence conditions).
9
+ ##########################################################################
10
+ from copy import deepcopy
11
+
12
+ from sage.sets.set import Set
13
+ from sage.rings.rational_field import QQ
14
+ from sage.arith.misc import valuation
15
+ from sage.misc.verbose import verbose
16
+
17
+ from sage.quadratic_forms.count_local_2 import count_modp__by_gauss_sum, count_all_local_good_types_normal_form
18
+
19
+
20
+ def count_modp_solutions__by_Gauss_sum(self, p, m):
21
+ r"""
22
+ Return the number of solutions of `Q(x) = m` (mod `p`) of a
23
+ non-degenerate quadratic form over the finite field `\ZZ/p\ZZ`,
24
+ where `p` is a prime number > 2.
25
+
26
+ .. NOTE::
27
+
28
+ We adopt the useful convention that a zero-dimensional
29
+ quadratic form has exactly one solution always (i.e. the empty
30
+ vector).
31
+
32
+ These are defined in Table 1 on p363 of Hanke's "Local Densities..." paper.
33
+
34
+ INPUT:
35
+
36
+ - ``p`` -- a prime number > 2
37
+
38
+ - ``m`` -- integer
39
+
40
+ OUTPUT: integer `\geq 0`
41
+
42
+ EXAMPLES::
43
+
44
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1])
45
+ sage: [Q.count_modp_solutions__by_Gauss_sum(3, m) for m in range(3)]
46
+ [9, 6, 12]
47
+
48
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,2])
49
+ sage: [Q.count_modp_solutions__by_Gauss_sum(3, m) for m in range(3)]
50
+ [9, 12, 6]
51
+ """
52
+ if self.dim() == 0:
53
+ return 1
54
+ return count_modp__by_gauss_sum(self.dim(), p, m, self.Gram_det())
55
+
56
+
57
+ def local_good_density_congruence_odd(self, p, m, Zvec, NZvec):
58
+ """
59
+ Find the Good-type local density of `Q` representing `m` at `p`.
60
+ (Assuming that `p > 2` and `Q` is given in local diagonal form.)
61
+
62
+ The additional congruence condition arguments ``Zvec`` and ``NZvec`` can
63
+ be either a list of indices or None. ``Zvec=[]`` is equivalent to
64
+ ``Zvec=None``, which both impose no additional conditions, but
65
+ ``NZvec=[]`` returns no solutions always while ``NZvec=None`` imposes no
66
+ additional condition.
67
+
68
+ .. TODO::
69
+
70
+ Add type checking for ``Zvec``, ``NZvec``, and that `Q` is in local
71
+ normal form.
72
+
73
+ INPUT:
74
+
75
+ - ``self`` -- quadratic form `Q`, assumed to be diagonal and `p`-integral
76
+
77
+ - ``p`` -- a prime number
78
+
79
+ - ``m`` -- integer
80
+
81
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
82
+
83
+ OUTPUT: a rational number
84
+
85
+ EXAMPLES::
86
+
87
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
88
+ sage: Q.local_good_density_congruence_odd(3, 1, None, None)
89
+ 2/3
90
+
91
+ ::
92
+
93
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
94
+ sage: Q.local_good_density_congruence_odd(3, 1, None, None)
95
+ 8/9
96
+ """
97
+ n = self.dim()
98
+
99
+ # Put the Zvec congruence condition in a standard form
100
+ if Zvec is None:
101
+ Zvec = []
102
+
103
+ # Sanity Check on Zvec and NZvec:
104
+ # -------------------------------
105
+ Sn = Set(range(n))
106
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
107
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
108
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
109
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
110
+
111
+ # Assuming Q is diagonal, find the indices of the p-unit (diagonal) entries
112
+ UnitVec = Set(i for i in range(n) if self[i, i] % p)
113
+ NonUnitVec = Set(range(n)) - UnitVec
114
+
115
+ # Take cases on the existence of additional nonzero congruence conditions (mod p)
116
+ UnitVec_minus_Zvec = list(UnitVec - Set(Zvec))
117
+ NonUnitVec_minus_Zvec = list(NonUnitVec - Set(Zvec))
118
+ Q_Unit_minus_Zvec = self.extract_variables(UnitVec_minus_Zvec)
119
+
120
+ if NZvec is None:
121
+ if m % p:
122
+ total = Q_Unit_minus_Zvec.count_modp_solutions__by_Gauss_sum(p, m) * p**len(NonUnitVec_minus_Zvec)
123
+ else:
124
+ total = (Q_Unit_minus_Zvec.count_modp_solutions__by_Gauss_sum(p, m) - 1) * p**len(NonUnitVec_minus_Zvec)
125
+
126
+ else:
127
+ UnitVec_minus_ZNZvec = list(UnitVec - (Set(Zvec) + Set(NZvec)))
128
+ NonUnitVec_minus_ZNZvec = list(NonUnitVec - (Set(Zvec) + Set(NZvec)))
129
+ Q_Unit_minus_ZNZvec = self.extract_variables(UnitVec_minus_ZNZvec)
130
+
131
+ if m % p:
132
+ total = Q_Unit_minus_Zvec.count_modp_solutions__by_Gauss_sum(p, m) * p**len(NonUnitVec_minus_Zvec) \
133
+ - Q_Unit_minus_ZNZvec.count_modp_solutions__by_Gauss_sum(p, m) * p**len(NonUnitVec_minus_ZNZvec)
134
+ else:
135
+ total = (Q_Unit_minus_Zvec.count_modp_solutions__by_Gauss_sum(p, m) - 1) * p**len(NonUnitVec_minus_Zvec) \
136
+ - (Q_Unit_minus_ZNZvec.count_modp_solutions__by_Gauss_sum(p, m) - 1) * p**len(NonUnitVec_minus_ZNZvec)
137
+
138
+ # Return the Good-type representation density
139
+ good_density = QQ(total) / p**(n - 1)
140
+ return good_density
141
+
142
+
143
+ def local_good_density_congruence_even(self, m, Zvec, NZvec):
144
+ r"""
145
+ Find the Good-type local density of `Q` representing `m` at `p=2`.
146
+ (Assuming `Q` is given in local diagonal form.)
147
+
148
+ The additional congruence condition arguments ``Zvec`` and ``NZvec`` can
149
+ be either a list of indices or None. ``Zvec=[]`` is equivalent to
150
+ ``Zvec=None`` which both impose no additional conditions, but
151
+ ``NZvec=[]`` returns no solutions always while ``NZvec=None`` imposes no
152
+ additional condition.
153
+
154
+ .. WARNING::
155
+
156
+ Here the indices passed in ``Zvec`` and ``NZvec`` represent
157
+ indices of the solution vector `x` of `Q(x) = m` (mod `p^k`), and *not*
158
+ the Jordan components of `Q`. They therefore are required (and
159
+ assumed) to include either all or none of the indices of a given
160
+ Jordan component of `Q`. This is only important when `p=2` since
161
+ otherwise all Jordan blocks are `1 \times 1`, and so there the indices and
162
+ Jordan blocks coincide.
163
+
164
+ .. TODO::
165
+
166
+ Add type checking for ``Zvec`` and ``NZvec``, and that `Q` is in local
167
+ normal form.
168
+
169
+ INPUT:
170
+
171
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and 2-integral
172
+
173
+ - ``p`` -- a prime number
174
+
175
+ - ``m`` -- integer
176
+
177
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
178
+
179
+ OUTPUT: a rational number
180
+
181
+ EXAMPLES::
182
+
183
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
184
+ sage: Q.local_good_density_congruence_even(1, None, None)
185
+ 1
186
+
187
+ ::
188
+
189
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
190
+ sage: Q.local_good_density_congruence_even(1, None, None)
191
+ 1
192
+ sage: Q.local_good_density_congruence_even(2, None, None)
193
+ 3/2
194
+ sage: Q.local_good_density_congruence_even(3, None, None)
195
+ 1
196
+ sage: Q.local_good_density_congruence_even(4, None, None)
197
+ 1/2
198
+
199
+ ::
200
+
201
+ sage: Q = QuadraticForm(ZZ, 4, range(10))
202
+ sage: Q[0,0] = 5
203
+ sage: Q[1,1] = 10
204
+ sage: Q[2,2] = 15
205
+ sage: Q[3,3] = 20
206
+ sage: Q
207
+ Quadratic form in 4 variables over Integer Ring with coefficients:
208
+ [ 5 1 2 3 ]
209
+ [ * 10 5 6 ]
210
+ [ * * 15 8 ]
211
+ [ * * * 20 ]
212
+ sage: Q.theta_series(20) # needs sage.libs.pari
213
+ 1 + 2*q^5 + 2*q^10 + 2*q^14 + 2*q^15 + 2*q^16 + 2*q^18 + O(q^20)
214
+ sage: Q_local = Q.local_normal_form(2) # needs sage.libs.pari sage.rings.padics
215
+ sage: Q_local.local_good_density_congruence_even(1, None, None) # needs sage.libs.pari sage.rings.padics
216
+ 3/4
217
+ sage: Q_local.local_good_density_congruence_even(2, None, None) # needs sage.libs.pari sage.rings.padics
218
+ 9/8
219
+ sage: Q_local.local_good_density_congruence_even(5, None, None) # needs sage.libs.pari sage.rings.padics
220
+ 3/4
221
+ """
222
+ n = self.dim()
223
+
224
+ # Put the Zvec congruence condition in a standard form
225
+ if Zvec is None:
226
+ Zvec = []
227
+
228
+ # Sanity Check on Zvec and NZvec:
229
+ # -------------------------------
230
+ Sn = Set(range(n))
231
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
232
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
233
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
234
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
235
+
236
+ # Find the indices of x for which the associated Jordan blocks are nonzero mod 8 TODO: Move this to special Jordan block code separately!
237
+ # -------------------------------------------------------------------------------
238
+ Not8vec = []
239
+ for i in range(n):
240
+
241
+ # DIAGNOSTIC
242
+ verbose(" i = " + str(i))
243
+ verbose(" n = " + str(n))
244
+ verbose(" Not8vec = " + str(Not8vec))
245
+
246
+ nz_flag = False
247
+
248
+ # Check if the diagonal entry isn't divisible 8
249
+ if self[i, i] % 8:
250
+ nz_flag = True
251
+
252
+ # Check appropriate off-diagonal entries aren't divisible by 8
253
+ else:
254
+
255
+ # Special check for first off-diagonal entry
256
+ if i == 0 and self[i, i + 1] % 8:
257
+ nz_flag = True
258
+
259
+ # Special check for last off-diagonal entry
260
+ elif i == n - 1 and self[i - 1, i] % 8:
261
+ nz_flag = True
262
+
263
+ # Check for the middle off-diagonal entries
264
+ else:
265
+ if (i > 0) and (i < n - 1) and (self[i, i + 1] % 8 or
266
+ self[i - 1, i] % 8):
267
+ nz_flag = True
268
+
269
+ # Remember the (vector) index if it's not part of a Jordan block of norm divisible by 8
270
+ if nz_flag:
271
+ Not8vec += [i]
272
+
273
+ # Compute the number of Good-type solutions mod 8:
274
+ # ------------------------------------------------
275
+
276
+ # Setup the indexing sets for additional zero congruence solutions
277
+ Q_Not8 = self.extract_variables(Not8vec)
278
+ Not8 = Set(Not8vec)
279
+ Is8 = Set(range(n)) - Not8
280
+
281
+ Z = Set(Zvec)
282
+ Z_Not8 = Not8.intersection(Z)
283
+ Z_Is8 = Is8.intersection(Z)
284
+ Is8_minus_Z = Is8 - Z_Is8
285
+
286
+ # DIAGNOSTIC
287
+ verbose("Z = " + str(Z))
288
+ verbose("Z_Not8 = " + str(Z_Not8))
289
+ verbose("Z_Is8 = " + str(Z_Is8))
290
+ verbose("Is8_minus_Z = " + str(Is8_minus_Z))
291
+
292
+ # Take cases on the existence of additional nonzero congruence conditions (mod 2)
293
+ if NZvec is None:
294
+ total = (4 ** len(Z_Is8)) * (8 ** len(Is8_minus_Z)) \
295
+ * count_all_local_good_types_normal_form(Q_Not8, 2, 3, m, list(Z_Not8), None)
296
+ else:
297
+ ZNZ = Z + Set(NZvec)
298
+ ZNZ_Not8 = Not8.intersection(ZNZ)
299
+ ZNZ_Is8 = Is8.intersection(ZNZ)
300
+ Is8_minus_ZNZ = Is8 - ZNZ_Is8
301
+
302
+ # DIAGNOSTIC
303
+ verbose("ZNZ = " + str(ZNZ))
304
+ verbose("ZNZ_Not8 = " + str(ZNZ_Not8))
305
+ verbose("ZNZ_Is8 = " + str(ZNZ_Is8))
306
+ verbose("Is8_minus_ZNZ = " + str(Is8_minus_ZNZ))
307
+
308
+ total = (4 ** len(Z_Is8)) * (8 ** len(Is8_minus_Z)) \
309
+ * count_all_local_good_types_normal_form(Q_Not8, 2, 3, m, list(Z_Not8), None) \
310
+ - (4 ** len(ZNZ_Is8)) * (8 ** len(Is8_minus_ZNZ)) \
311
+ * count_all_local_good_types_normal_form(Q_Not8, 2, 3, m, list(ZNZ_Not8), None)
312
+
313
+ # DIAGNOSTIC
314
+ verbose("total = " + str(total))
315
+
316
+ # Return the associated Good-type representation density
317
+ return QQ(total) / 8**(n - 1)
318
+
319
+
320
+ def local_good_density_congruence(self, p, m, Zvec=None, NZvec=None):
321
+ """
322
+ Find the Good-type local density of `Q` representing `m` at `p`.
323
+ (Front end routine for parity specific routines for `p`.)
324
+
325
+ .. TODO::
326
+
327
+ Add documentation about the additional congruence
328
+ conditions ``Zvec`` and ``NZvec``.
329
+
330
+ INPUT:
331
+
332
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
333
+
334
+ - ``p`` -- a prime number
335
+
336
+ - ``m`` -- integer
337
+
338
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
339
+
340
+ OUTPUT: a rational number
341
+
342
+ EXAMPLES::
343
+
344
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
345
+ sage: Q.local_good_density_congruence(2, 1, None, None)
346
+ 1
347
+ sage: Q.local_good_density_congruence(3, 1, None, None)
348
+ 2/3
349
+
350
+ ::
351
+
352
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
353
+ sage: Q.local_good_density_congruence(2, 1, None, None)
354
+ 1
355
+ sage: Q.local_good_density_congruence(3, 1, None, None)
356
+ 8/9
357
+ """
358
+ # DIAGNOSTIC
359
+ verbose(" In local_good_density_congruence with ")
360
+ verbose(" Q is: \n" + str(self))
361
+ verbose(" p = " + str(p))
362
+ verbose(" m = " + str(m))
363
+ verbose(" Zvec = " + str(Zvec))
364
+ verbose(" NZvec = " + str(NZvec))
365
+
366
+ # Put the Zvec congruence condition in a standard form
367
+ if Zvec is None:
368
+ Zvec = []
369
+
370
+ n = self.dim()
371
+
372
+ # Sanity Check on Zvec and NZvec:
373
+ # -------------------------------
374
+ Sn = Set(range(n))
375
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
376
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
377
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
378
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
379
+
380
+ # There was here a commented-out check that Q is in local normal form
381
+ # (it often may not be since the reduction procedure
382
+ # often mixes up the order of the valuations...)
383
+ # This commented-out code was removed in issue #32960
384
+
385
+ # Decide which routine to use to compute the Good-type density
386
+ if p > 2:
387
+ return self.local_good_density_congruence_odd(p, m, Zvec, NZvec)
388
+
389
+ if p == 2:
390
+ return self.local_good_density_congruence_even(m, Zvec, NZvec)
391
+
392
+ raise RuntimeError("\n Error in Local_Good_Density: The 'prime' p = " + str(p) + " is < 2. \n")
393
+
394
+
395
+ def local_zero_density_congruence(self, p, m, Zvec=None, NZvec=None):
396
+ """
397
+ Find the Zero-type local density of `Q` representing `m` at `p`,
398
+ allowing certain congruence conditions mod `p`.
399
+
400
+ INPUT:
401
+
402
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
403
+
404
+ - ``p`` -- a prime number
405
+
406
+ - ``m`` -- integer
407
+
408
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
409
+
410
+ OUTPUT: a rational number
411
+
412
+ EXAMPLES::
413
+
414
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
415
+ sage: Q.local_zero_density_congruence(2, 2, None, None)
416
+ 0
417
+ sage: Q.local_zero_density_congruence(2, 4, None, None)
418
+ 1/2
419
+ sage: Q.local_zero_density_congruence(3, 6, None, None)
420
+ 0
421
+ sage: Q.local_zero_density_congruence(3, 9, None, None)
422
+ 2/9
423
+
424
+ ::
425
+
426
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
427
+ sage: Q.local_zero_density_congruence(2, 2, None, None)
428
+ 0
429
+ sage: Q.local_zero_density_congruence(2, 4, None, None)
430
+ 1/4
431
+ sage: Q.local_zero_density_congruence(3, 6, None, None)
432
+ 0
433
+ sage: Q.local_zero_density_congruence(3, 9, None, None)
434
+ 8/81
435
+ """
436
+ # DIAGNOSTIC
437
+ verbose(" In local_zero_density_congruence with ")
438
+ verbose(" Q is: \n" + str(self))
439
+ verbose(" p = " + str(p))
440
+ verbose(" m = " + str(m))
441
+ verbose(" Zvec = " + str(Zvec))
442
+ verbose(" NZvec = " + str(NZvec))
443
+
444
+ # Put the Zvec congruence condition in a standard form
445
+ if Zvec is None:
446
+ Zvec = []
447
+
448
+ n = self.dim()
449
+
450
+ # Sanity Check on Zvec and NZvec:
451
+ # -------------------------------
452
+ Sn = Set(range(n))
453
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
454
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
455
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
456
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
457
+
458
+ p2 = p * p
459
+
460
+ # Check some conditions for no zero-type solutions to exist
461
+ if m % p2 or NZvec is not None:
462
+ return 0
463
+
464
+ # Use the reduction procedure to return the result
465
+ return self.local_density_congruence(p, m / p2, None, None) / p**(self.dim() - 2)
466
+
467
+
468
+ def local_badI_density_congruence(self, p, m, Zvec=None, NZvec=None):
469
+ """
470
+ Find the Bad-type I local density of `Q` representing `m` at `p`.
471
+ (Assuming that `p > 2` and `Q` is given in local diagonal form.)
472
+
473
+ INPUT:
474
+
475
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
476
+
477
+ - ``p`` -- a prime number
478
+
479
+ - ``m`` -- integer
480
+
481
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
482
+
483
+ OUTPUT: a rational number
484
+
485
+ EXAMPLES::
486
+
487
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
488
+ sage: Q.local_badI_density_congruence(2, 1, None, None)
489
+ 0
490
+ sage: Q.local_badI_density_congruence(2, 2, None, None)
491
+ 1
492
+ sage: Q.local_badI_density_congruence(2, 4, None, None)
493
+ 0
494
+ sage: Q.local_badI_density_congruence(3, 1, None, None)
495
+ 0
496
+ sage: Q.local_badI_density_congruence(3, 6, None, None)
497
+ 0
498
+ sage: Q.local_badI_density_congruence(3, 9, None, None)
499
+ 0
500
+
501
+ ::
502
+
503
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
504
+ sage: Q.local_badI_density_congruence(2, 1, None, None)
505
+ 0
506
+ sage: Q.local_badI_density_congruence(2, 2, None, None)
507
+ 0
508
+ sage: Q.local_badI_density_congruence(2, 4, None, None)
509
+ 0
510
+ sage: Q.local_badI_density_congruence(3, 2, None, None)
511
+ 0
512
+ sage: Q.local_badI_density_congruence(3, 6, None, None)
513
+ 0
514
+ sage: Q.local_badI_density_congruence(3, 9, None, None)
515
+ 0
516
+
517
+ ::
518
+
519
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,3,9])
520
+ sage: Q.local_badI_density_congruence(3, 1, None, None)
521
+ 0
522
+ sage: Q.local_badI_density_congruence(3, 3, None, None)
523
+ 4/3
524
+ sage: Q.local_badI_density_congruence(3, 6, None, None)
525
+ 4/3
526
+ sage: Q.local_badI_density_congruence(3, 9, None, None)
527
+ 0
528
+ sage: Q.local_badI_density_congruence(3, 18, None, None)
529
+ 0
530
+ """
531
+ # DIAGNOSTIC
532
+ verbose(" In local_badI_density_congruence with ")
533
+ verbose(" Q is: \n" + str(self))
534
+ verbose(" p = " + str(p))
535
+ verbose(" m = " + str(m))
536
+ verbose(" Zvec = " + str(Zvec))
537
+ verbose(" NZvec = " + str(NZvec))
538
+
539
+ # Put the Zvec congruence condition in a standard form
540
+ if Zvec is None:
541
+ Zvec = []
542
+
543
+ n = self.dim()
544
+
545
+ # Sanity Check on Zvec and NZvec:
546
+ # -------------------------------
547
+ Sn = Set(range(n))
548
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
549
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
550
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
551
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
552
+
553
+ # Define the indexing set S_0, and determine if S_1 is empty:
554
+ # -----------------------------------------------------------
555
+ S0 = []
556
+ S1_empty_flag = True
557
+ # This is used to check if we should be computing BI solutions at all!
558
+ # (We should really to this earlier, but S1 must be nonzero to proceed.)
559
+
560
+ # Find the valuation of each variable (which will be the same over 2x2 blocks),
561
+ # remembering those of valuation 0 and if an entry of valuation 1 exists.
562
+ for i in range(n):
563
+
564
+ # Compute the valuation of each index, allowing for off-diagonal terms
565
+ if self[i, i] == 0:
566
+ if i == 0:
567
+ val = valuation(self[i, i + 1], p) # Look at the term to the right
568
+ else:
569
+ if i == n - 1:
570
+ val = valuation(self[i - 1, i], p) # Look at the term above
571
+ else:
572
+ val = valuation(self[i, i + 1] + self[i - 1, i], p) # Finds the valuation of the off-diagonal term since only one isn't zero
573
+ else:
574
+ val = valuation(self[i, i], p)
575
+
576
+ if val == 0:
577
+ S0 += [i]
578
+ elif val == 1:
579
+ S1_empty_flag = False # Need to have a non-empty S1 set to proceed with Bad-type I reduction...
580
+
581
+ # Check that S1 is non-empty and p|m to proceed, otherwise return no solutions.
582
+ if S1_empty_flag or m % p:
583
+ return 0
584
+
585
+ # Check some conditions for no bad-type I solutions to exist
586
+ if (NZvec is not None) and (len(Set(S0).intersection(Set(NZvec))) != 0):
587
+ return 0
588
+
589
+ # Check that the form is primitive... WHY DO WE NEED TO DO THIS?!?
590
+ if not S0:
591
+ print(" Using Q = " + str(self))
592
+ print(" and p = " + str(p))
593
+ raise RuntimeError("the form is not primitive")
594
+
595
+ # DIAGNOSTIC
596
+ verbose(" m = " + str(m) + " p = " + str(p))
597
+ verbose(" S0 = " + str(S0))
598
+ verbose(" len(S0) = " + str(len(S0)))
599
+
600
+ # Make the form Qnew for the reduction procedure:
601
+ # -----------------------------------------------
602
+ Qnew = deepcopy(self) # TODO: DO THIS WITHOUT A copy()
603
+ for i in range(n):
604
+ if i in S0:
605
+ Qnew[i, i] = p * Qnew[i, i]
606
+ if ((p == 2) and (i < n - 1)):
607
+ Qnew[i, i + 1] = p * Qnew[i, i + 1]
608
+ else:
609
+ Qnew[i, i] = Qnew[i, i] / p
610
+ if ((p == 2) and (i < n - 1)):
611
+ Qnew[i, i + 1] = Qnew[i, i + 1] / p
612
+
613
+ # DIAGNOSTIC
614
+ verbose("\n\n Check of Bad-type I reduction: \n")
615
+ verbose(" Q is " + str(self))
616
+ verbose(" Qnew is " + str(Qnew))
617
+ verbose(" p = " + str(p))
618
+ verbose(" m / p = " + str(m / p))
619
+ verbose(" NZvec " + str(NZvec))
620
+
621
+ # Do the reduction
622
+ Zvec_geq_1 = list(Set([i for i in Zvec if i not in S0]))
623
+ if NZvec is None:
624
+ NZvec_geq_1 = NZvec
625
+ else:
626
+ NZvec_geq_1 = list(Set([i for i in NZvec if i not in S0]))
627
+
628
+ return QQ(p**(1 - len(S0))) * Qnew.local_good_density_congruence(p, m / p, Zvec_geq_1, NZvec_geq_1)
629
+
630
+
631
+ def local_badII_density_congruence(self, p, m, Zvec=None, NZvec=None):
632
+ """
633
+ Find the Bad-type II local density of `Q` representing `m` at `p`.
634
+ (Assuming that `p > 2` and `Q` is given in local diagonal form.)
635
+
636
+ INPUT:
637
+
638
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
639
+
640
+ - ``p`` -- a prime number
641
+
642
+ - ``m`` -- integer
643
+
644
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
645
+
646
+ OUTPUT: a rational number
647
+
648
+ EXAMPLES::
649
+
650
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
651
+ sage: Q.local_badII_density_congruence(2, 1, None, None)
652
+ 0
653
+ sage: Q.local_badII_density_congruence(2, 2, None, None)
654
+ 0
655
+ sage: Q.local_badII_density_congruence(2, 4, None, None)
656
+ 0
657
+ sage: Q.local_badII_density_congruence(3, 1, None, None)
658
+ 0
659
+ sage: Q.local_badII_density_congruence(3, 6, None, None)
660
+ 0
661
+ sage: Q.local_badII_density_congruence(3, 9, None, None)
662
+ 0
663
+ sage: Q.local_badII_density_congruence(3, 27, None, None)
664
+ 0
665
+
666
+ ::
667
+
668
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,3,9,9])
669
+ sage: Q.local_badII_density_congruence(3, 1, None, None)
670
+ 0
671
+ sage: Q.local_badII_density_congruence(3, 3, None, None)
672
+ 0
673
+ sage: Q.local_badII_density_congruence(3, 6, None, None)
674
+ 0
675
+ sage: Q.local_badII_density_congruence(3, 9, None, None)
676
+ 4/27
677
+ sage: Q.local_badII_density_congruence(3, 18, None, None)
678
+ 4/9
679
+ """
680
+ # DIAGNOSTIC
681
+ verbose(" In local_badII_density_congruence with ")
682
+ verbose(" Q is: \n" + str(self))
683
+ verbose(" p = " + str(p))
684
+ verbose(" m = " + str(m))
685
+ verbose(" Zvec = " + str(Zvec))
686
+ verbose(" NZvec = " + str(NZvec))
687
+
688
+ # Put the Zvec congruence condition in a standard form
689
+ if Zvec is None:
690
+ Zvec = []
691
+
692
+ n = self.dim()
693
+
694
+ # Sanity Check on Zvec and NZvec:
695
+ # -------------------------------
696
+ Sn = Set(range(n))
697
+ if (Zvec is not None) and (len(Set(Zvec) + Sn) > n):
698
+ raise RuntimeError("Zvec must be a subset of {0, ..., n-1}.")
699
+ if (NZvec is not None) and (len(Set(NZvec) + Sn) > n):
700
+ raise RuntimeError("NZvec must be a subset of {0, ..., n-1}.")
701
+
702
+ # Define the indexing sets S_i:
703
+ # -----------------------------
704
+ S0 = []
705
+ S1 = []
706
+ S2plus = []
707
+
708
+ for i in range(n):
709
+
710
+ # Compute the valuation of each index, allowing for off-diagonal terms
711
+ if self[i, i] == 0:
712
+ if i == 0:
713
+ val = valuation(self[i, i + 1], p) # Look at the term to the right
714
+ elif i == n - 1:
715
+ val = valuation(self[i - 1, i], p) # Look at the term above
716
+ else:
717
+ val = valuation(self[i, i + 1] + self[i - 1, i], p) # Finds the valuation of the off-diagonal term since only one isn't zero
718
+ else:
719
+ val = valuation(self[i, i], p)
720
+
721
+ # Sort the indices into disjoint sets by their valuation
722
+ if (val == 0):
723
+ S0 += [i]
724
+ elif (val == 1):
725
+ S1 += [i]
726
+ elif (val >= 2):
727
+ S2plus += [i]
728
+
729
+ # Check that S2 is non-empty and p^2 divides m to proceed, otherwise return no solutions.
730
+ p2 = p * p
731
+ if not S2plus or m % p2:
732
+ return 0
733
+
734
+ # Check some conditions for no bad-type II solutions to exist
735
+ if (NZvec is not None) and (len(Set(S2plus).intersection(Set(NZvec))) == 0):
736
+ return 0
737
+
738
+ # Check that the form is primitive... WHY IS THIS NECESSARY?
739
+ if not S0:
740
+ print(" Using Q = " + str(self))
741
+ print(" and p = " + str(p))
742
+ raise RuntimeError("the form is not primitive")
743
+
744
+ # DIAGNOSTIC
745
+ verbose("\n Entering BII routine ")
746
+ verbose(" S0 is " + str(S0))
747
+ verbose(" S1 is " + str(S1))
748
+ verbose(" S2plus is " + str(S2plus))
749
+ verbose(" m = " + str(m) + " p = " + str(p))
750
+
751
+ # Make the form Qnew for the reduction procedure:
752
+ # -----------------------------------------------
753
+ Qnew = deepcopy(self) # TODO: DO THIS WITHOUT A copy()
754
+ for i in range(n):
755
+ if i in S2plus:
756
+ Qnew[i, i] = Qnew[i, i] / p2
757
+ if (p == 2) and (i < n - 1):
758
+ Qnew[i, i + 1] = Qnew[i, i + 1] / p2
759
+
760
+ # DIAGNOSTIC
761
+ verbose("\n\n Check of Bad-type II reduction: \n")
762
+ verbose(" Q is " + str(self))
763
+ verbose(" Qnew is " + str(Qnew))
764
+
765
+ # Perform the reduction formula
766
+ Zvec_geq_2 = list(Set([i for i in Zvec if i in S2plus]))
767
+ if NZvec is None:
768
+ NZvec_geq_2 = NZvec
769
+ else:
770
+ NZvec_geq_2 = list(Set([i for i in NZvec if i in S2plus]))
771
+
772
+ diff = Qnew.local_density_congruence(p, m / p2, Zvec_geq_2, NZvec_geq_2)
773
+ diff -= Qnew.local_density_congruence(p, m / p2, S2plus, NZvec_geq_2)
774
+ return QQ(p**(len(S2plus) + 2 - n)) * diff
775
+
776
+
777
+ def local_bad_density_congruence(self, p, m, Zvec=None, NZvec=None):
778
+ """
779
+ Find the Bad-type local density of `Q` representing
780
+ `m` at `p`, allowing certain congruence conditions mod `p`.
781
+
782
+ INPUT:
783
+
784
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
785
+
786
+ - ``p`` -- a prime number
787
+
788
+ - ``m`` -- integer
789
+
790
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
791
+
792
+ OUTPUT: a rational number
793
+
794
+ EXAMPLES::
795
+
796
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
797
+ sage: Q.local_bad_density_congruence(2, 1, None, None)
798
+ 0
799
+ sage: Q.local_bad_density_congruence(2, 2, None, None)
800
+ 1
801
+ sage: Q.local_bad_density_congruence(2, 4, None, None)
802
+ 0
803
+ sage: Q.local_bad_density_congruence(3, 1, None, None)
804
+ 0
805
+ sage: Q.local_bad_density_congruence(3, 6, None, None)
806
+ 0
807
+ sage: Q.local_bad_density_congruence(3, 9, None, None)
808
+ 0
809
+ sage: Q.local_bad_density_congruence(3, 27, None, None)
810
+ 0
811
+
812
+ ::
813
+
814
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,3,9,9])
815
+ sage: Q.local_bad_density_congruence(3, 1, None, None)
816
+ 0
817
+ sage: Q.local_bad_density_congruence(3, 3, None, None)
818
+ 4/3
819
+ sage: Q.local_bad_density_congruence(3, 6, None, None)
820
+ 4/3
821
+ sage: Q.local_bad_density_congruence(3, 9, None, None)
822
+ 4/27
823
+ sage: Q.local_bad_density_congruence(3, 18, None, None)
824
+ 4/9
825
+ sage: Q.local_bad_density_congruence(3, 27, None, None)
826
+ 8/27
827
+ """
828
+ return self.local_badI_density_congruence(p, m, Zvec, NZvec) + self.local_badII_density_congruence(p, m, Zvec, NZvec)
829
+
830
+ ########################################################
831
+ # local_density and local_density_congruence routines #
832
+ ########################################################
833
+
834
+
835
+ def local_density_congruence(self, p, m, Zvec=None, NZvec=None):
836
+ """
837
+ Find the local density of `Q` representing `m` at `p`,
838
+ allowing certain congruence conditions mod `p`.
839
+
840
+ INPUT:
841
+
842
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
843
+
844
+ - ``p`` -- a prime number
845
+
846
+ - ``m`` -- integer
847
+
848
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
849
+
850
+ OUTPUT: a rational number
851
+
852
+ EXAMPLES::
853
+
854
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
855
+ sage: Q.local_density_congruence(p=2, m=1, Zvec=None, NZvec=None)
856
+ 1
857
+ sage: Q.local_density_congruence(p=3, m=1, Zvec=None, NZvec=None)
858
+ 8/9
859
+ sage: Q.local_density_congruence(p=5, m=1, Zvec=None, NZvec=None)
860
+ 24/25
861
+ sage: Q.local_density_congruence(p=7, m=1, Zvec=None, NZvec=None)
862
+ 48/49
863
+ sage: Q.local_density_congruence(p=11, m=1, Zvec=None, NZvec=None)
864
+ 120/121
865
+
866
+ ::
867
+
868
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
869
+ sage: Q.local_density_congruence(2, 1, None, None)
870
+ 1
871
+ sage: Q.local_density_congruence(2, 2, None, None)
872
+ 1
873
+ sage: Q.local_density_congruence(2, 4, None, None)
874
+ 3/2
875
+ sage: Q.local_density_congruence(3, 1, None, None)
876
+ 2/3
877
+ sage: Q.local_density_congruence(3, 6, None, None)
878
+ 4/3
879
+ sage: Q.local_density_congruence(3, 9, None, None)
880
+ 14/9
881
+ sage: Q.local_density_congruence(3, 27, None, None)
882
+ 2
883
+
884
+ ::
885
+
886
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,3,9,9])
887
+ sage: Q.local_density_congruence(3, 1, None, None)
888
+ 2
889
+ sage: Q.local_density_congruence(3, 3, None, None)
890
+ 4/3
891
+ sage: Q.local_density_congruence(3, 6, None, None)
892
+ 4/3
893
+ sage: Q.local_density_congruence(3, 9, None, None)
894
+ 2/9
895
+ sage: Q.local_density_congruence(3, 18, None, None)
896
+ 4/9
897
+ """
898
+ return self.local_good_density_congruence(p, m, Zvec, NZvec) \
899
+ + self.local_zero_density_congruence(p, m, Zvec, NZvec) \
900
+ + self.local_bad_density_congruence(p, m, Zvec, NZvec)
901
+
902
+
903
+ def local_primitive_density_congruence(self, p, m, Zvec=None, NZvec=None):
904
+ """
905
+ Find the primitive local density of `Q` representing
906
+ `m` at `p`, allowing certain congruence conditions mod `p`.
907
+
908
+ .. NOTE::
909
+
910
+ The following routine is not used internally, but is included for consistency.
911
+
912
+ INPUT:
913
+
914
+ - ``self`` -- quadratic form `Q`, assumed to be block diagonal and `p`-integral
915
+
916
+ - ``p`` -- a prime number
917
+
918
+ - ``m`` -- integer
919
+
920
+ - ``Zvec``, ``NZvec`` -- non-repeating lists of integers in ``range(self.dim())`` or ``None``
921
+
922
+ OUTPUT: a rational number
923
+
924
+ EXAMPLES::
925
+
926
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1,1])
927
+ sage: Q.local_primitive_density_congruence(p=2, m=1, Zvec=None, NZvec=None)
928
+ 1
929
+ sage: Q.local_primitive_density_congruence(p=3, m=1, Zvec=None, NZvec=None)
930
+ 8/9
931
+ sage: Q.local_primitive_density_congruence(p=5, m=1, Zvec=None, NZvec=None)
932
+ 24/25
933
+ sage: Q.local_primitive_density_congruence(p=7, m=1, Zvec=None, NZvec=None)
934
+ 48/49
935
+ sage: Q.local_primitive_density_congruence(p=11, m=1, Zvec=None, NZvec=None)
936
+ 120/121
937
+
938
+ ::
939
+
940
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
941
+ sage: Q.local_primitive_density_congruence(2, 1, None, None)
942
+ 1
943
+ sage: Q.local_primitive_density_congruence(2, 2, None, None)
944
+ 1
945
+ sage: Q.local_primitive_density_congruence(2, 4, None, None)
946
+ 1
947
+ sage: Q.local_primitive_density_congruence(3, 1, None, None)
948
+ 2/3
949
+ sage: Q.local_primitive_density_congruence(3, 6, None, None)
950
+ 4/3
951
+ sage: Q.local_primitive_density_congruence(3, 9, None, None)
952
+ 4/3
953
+ sage: Q.local_primitive_density_congruence(3, 27, None, None)
954
+ 4/3
955
+
956
+ ::
957
+
958
+ sage: Q = DiagonalQuadraticForm(ZZ, [1,3,3,9,9])
959
+ sage: Q.local_primitive_density_congruence(3, 1, None, None)
960
+ 2
961
+ sage: Q.local_primitive_density_congruence(3, 3, None, None)
962
+ 4/3
963
+ sage: Q.local_primitive_density_congruence(3, 6, None, None)
964
+ 4/3
965
+ sage: Q.local_primitive_density_congruence(3, 9, None, None)
966
+ 4/27
967
+ sage: Q.local_primitive_density_congruence(3, 18, None, None)
968
+ 4/9
969
+ sage: Q.local_primitive_density_congruence(3, 27, None, None)
970
+ 8/27
971
+ sage: Q.local_primitive_density_congruence(3, 81, None, None)
972
+ 8/27
973
+ sage: Q.local_primitive_density_congruence(3, 243, None, None)
974
+ 8/27
975
+ """
976
+ return self.local_good_density_congruence(p, m, Zvec, NZvec) \
977
+ + self.local_bad_density_congruence(p, m, Zvec, NZvec)