passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 (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 +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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-aarch64-linux-musl.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,954 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Multiplication for elements of the Steenrod algebra
5
+
6
+ AUTHORS:
7
+
8
+ - John H. Palmieri (2008-07-30: version 0.9) initial version: Milnor
9
+ multiplication.
10
+ - John H. Palmieri (2010-06-30: version 1.0) multiplication of
11
+ Serre-Cartan basis elements using the Adem relations.
12
+ - Simon King (2011-10-25): Fix the use of cached functions.
13
+
14
+ .. rubric:: Milnor multiplication, `p=2`
15
+
16
+ See Milnor's paper [Mil1958]_ for proofs, etc.
17
+
18
+ To multiply Milnor basis elements `\text{Sq}(r_1, r_2, ...)` and
19
+ `\text{Sq}(s_1, s_2,...)` at the prime 2, form all possible matrices
20
+ `M` with rows and columns indexed starting at 0, with position (0,0)
21
+ deleted (or ignored), with `s_i` equal to the sum of column `i` for
22
+ each `i`, and with `r_j` equal to the 'weighted' sum of row `j`. The
23
+ weights are as follows: elements from column `i` are multiplied by
24
+ `2^i`. For example, to multiply `\text{Sq}(2)` and `\text{Sq}(1,1)`,
25
+ form the matrices
26
+
27
+ .. MATH::
28
+
29
+ \begin{Vmatrix}
30
+ * & 1 & 1 \\
31
+ 2 & 0 & 0
32
+ \end{Vmatrix}
33
+ \quad \text{and} \quad
34
+ \begin{Vmatrix}
35
+ * & 0 & 1 \\
36
+ 0 & 1 & 0
37
+ \end{Vmatrix}
38
+
39
+ (The `*` is the ignored (0,0)-entry of the matrix.) For each such
40
+ matrix `M`, compute a multinomial coefficient, mod 2: for each
41
+ diagonal `\{m_{ij}: i+j=n\}`, compute `(\sum m_{i,j}!) / (m_{0,n}!
42
+ m_{1,n-1}! ... m_{n,0}!)`. Multiply these together for all `n`. (To
43
+ compute this mod 2, view the entries of the matrix as their base 2
44
+ expansions; then this coefficient is zero if and only if there is some
45
+ diagonal containing two numbers which have a summand in common in
46
+ their base 2 expansion. For example, if 3 and 10 are in the same
47
+ diagonal, the coefficient is zero, because `3=1+2` and `10=2+8`: they
48
+ both have a summand of 2.)
49
+
50
+ Now, for each matrix with multinomial coefficient 1, let `t_n` be
51
+ the sum of the `n`-th diagonal in the matrix; then
52
+
53
+ .. MATH::
54
+
55
+ \text{Sq}(r_1, r_2, ...) \text{Sq}(s_1, s_2, ...) = \sum \text{Sq}(t_1, t_2, ...)
56
+
57
+ The function :func:`milnor_multiplication` takes as input two tuples
58
+ of nonnegative integers, `r` and `s`, which represent
59
+ `\text{Sq}(r)=\text{Sq}(r_1, r_2, ...)` and
60
+ `\text{Sq}(s)=\text{Sq}(s_1, s_2, ...)`; it returns as output a
61
+ dictionary whose keys are tuples `t=(t_1, t_2, ...)` of nonnegative
62
+ integers, and for each tuple the associated value is the coefficient
63
+ of `\text{Sq}(t)` in the product formula. (Since we are working mod 2,
64
+ this coefficient is 1 -- if it is zero, the element is omitted from
65
+ the dictionary altogether).
66
+
67
+ .. rubric:: Milnor multiplication, odd primes
68
+
69
+ As for the `p=2` case, see Milnor's paper [Mil1958]_ for proofs.
70
+
71
+ Fix an odd prime `p`. There are three steps to multiply Milnor basis
72
+ elements `Q_{f_1} Q_{f_2} ... \mathcal{P}(q_1, q_2, ...)` and
73
+ `Q_{g_1} Q_{g_2} ... \mathcal{P}(s_1, s_2,...)`: first, use the formula
74
+
75
+ .. MATH::
76
+
77
+ \mathcal{P}(q_1, q_2, ...) Q_k = Q_k \mathcal{P}(q_1, q_2, ...)
78
+ + Q_{k+1} \mathcal{P}(q_1 - p^k, q_2, ...)
79
+ + Q_{k+2} \mathcal{P}(q_1, q_2 - p^k, ...)
80
+ + ...
81
+
82
+ Second, use the fact that the `Q_k`'s form an exterior algebra: `Q_k^2 =
83
+ 0` for all `k`, and if `i \neq j`, then `Q_i` and `Q_j` anticommute:
84
+ `Q_i Q_j = -Q_j Q_i`. After these two steps, the product is a linear
85
+ combination of terms of the form
86
+
87
+ .. MATH::
88
+
89
+ Q_{e_1} Q_{e_2} ... \mathcal{P}(r_1, r_2, ...) \mathcal{P}(s_1, s_2, ...).
90
+
91
+ Finally, use Milnor matrices to multiply the pairs of
92
+ `\mathcal{P}(...)` terms, as at the prime 2: form all possible
93
+ matrices `M` with rows and columns indexed starting at 0, with
94
+ position (0,0) deleted (or ignored), with `s_i` equal to the sum of
95
+ column `i` for each `i`, and with `r_j` equal to the weighted sum of
96
+ row `j`: elements from column `i` are multiplied by `p^i`. For
97
+ example when `p=5`, to multiply `\mathcal{P}(5)` and
98
+ `\mathcal{P}(1,1)`, form the matrices
99
+
100
+ .. MATH::
101
+
102
+ \begin{Vmatrix}
103
+ * & 1 & 1 \\
104
+ 5 & 0 & 0
105
+ \end{Vmatrix}
106
+ \quad \text{and} \quad
107
+ \begin{Vmatrix}
108
+ * & 0 & 1 \\
109
+ 0 & 1 & 0
110
+ \end{Vmatrix}
111
+
112
+ For each such matrix `M`, compute a multinomial coefficient, mod `p`:
113
+ for each diagonal `\{m_{ij}: i+j=n\}`, compute `(\sum m_{i,j}!) /
114
+ (m_{0,n}! m_{1,n-1}! ... m_{n,0}!)`. Multiply these together for
115
+ all `n`.
116
+
117
+ Now, for each matrix with nonzero multinomial coefficient `b_M`, let
118
+ `t_n` be the sum of the `n`-th diagonal in the matrix; then
119
+
120
+ .. MATH::
121
+
122
+ \mathcal{P}(r_1, r_2, ...) \mathcal{P}(s_1, s_2, ...)
123
+ = \sum b_M \mathcal{P}(t_1, t_2, ...)
124
+
125
+ For example when `p=5`, we have
126
+
127
+ .. MATH::
128
+
129
+ \mathcal{P}(5) \mathcal{P}(1,1) = \mathcal{P}(6,1) + 2 \mathcal{P}(0,2).
130
+
131
+ The function :func:`milnor_multiplication` takes as input two pairs of
132
+ tuples of nonnegative integers, `(g,q)` and `(f,s)`, which represent
133
+ `Q_{g_1} Q_{g_2} ... \mathcal{P}(q_1, q_2, ...)` and
134
+ `Q_{f_1} Q_{f_2} ... \mathcal{P}(s_1, s_2, ...)`. It returns as output a
135
+ dictionary whose keys are pairs of tuples `(e,t)` of nonnegative
136
+ integers, and for each tuple the associated value is the coefficient
137
+ in the product formula.
138
+
139
+ .. rubric:: The Adem relations and admissible sequences
140
+
141
+ If `p=2`, then the mod 2 Steenrod algebra is generated by Steenrod
142
+ squares `\text{Sq}^a` for `a \geq 0` (equal to the Milnor basis element
143
+ `\text{Sq}(a)`). The *Adem relations* are as follows: if `a < 2b`,
144
+
145
+ .. MATH::
146
+
147
+ \text{Sq}^a \text{Sq}^b = \sum_{j=0}^{a/2} \binom{b-j-1}{a-2j} \text{Sq}^{a+b-j} \text{Sq}^j
148
+
149
+ A monomial `\text{Sq}^{i_1} \text{Sq}^{i_2} ... \text{Sq}^{i_n}` is called *admissible* if
150
+ `i_k \geq 2 i_{k+1}` for all `k`. One can use the Adem relations to
151
+ show that the admissible monomials span the Steenrod algebra, as a
152
+ vector space; with more work, one can show that the admissible
153
+ monomials are also linearly independent. They form the *Serre-Cartan*
154
+ basis for the Steenrod algebra. To multiply a collection of
155
+ admissible monomials, concatenate them and see if the result is
156
+ admissible. If it is, you're done. If not, find the first pair `\text{Sq}^a
157
+ \text{Sq}^b` where it fails to be admissible and apply the Adem relations
158
+ there. Repeat with the resulting terms. One can prove that this
159
+ process terminates in a finite number of steps, and therefore gives a
160
+ procedure for multiplying elements of the Serre-Cartan basis.
161
+
162
+ At an odd prime `p`, the Steenrod algebra is generated by the `p`-th
163
+ power operations `\mathcal{P}^a` (the same as `\mathcal{P}(a)` in the
164
+ Milnor basis) and the Bockstein operation `\beta` (= `Q_0` in the
165
+ Milnor basis). The odd primary *Adem relations* are as follows: if `a
166
+ < pb`,
167
+
168
+ .. MATH::
169
+
170
+ \mathcal{P}^a \mathcal{P}^b = \sum_{j=0}^{a/p} (-1)^{a+j}
171
+ \binom{(b-j)(p-1)-1}{a-pj} \mathcal{P}^{a+b-j} \mathcal{P}^j
172
+
173
+ Also, if `a \leq pb`,
174
+
175
+ .. MATH::
176
+
177
+ \mathcal{P}^a \beta \mathcal{P}^b = \sum_{j=0}^{a/p} (-1)^{a+j}
178
+ \binom{(b-j)(p-1)}{a-pj} \beta \mathcal{P}^{a+b-j} \mathcal{P}^j +
179
+ \sum_{j=0}^{a/p} (-1)^{a+j-1} \binom{(b-j)(p-1)-1}{a-pj-1}
180
+ \mathcal{P}^{a+b-j} \beta \mathcal{P}^j
181
+
182
+ The *admissible* monomials at an odd prime are products of the form
183
+
184
+ .. MATH::
185
+
186
+ \beta^{\epsilon_0} \mathcal{P}^{s_1} \beta^{\epsilon_1}
187
+ \mathcal{P}^{s_2} ... \mathcal{P}^{s_n} \beta^{\epsilon_n}
188
+
189
+ where `s_k \geq \epsilon_{k+1} + p s_{k+1}` for all `k`. As at the
190
+ prime 2, these form a basis for the Steenrod algebra.
191
+
192
+ The main function for this is :func:`make_mono_admissible`,
193
+ which converts a product of Steenrod
194
+ squares or `p`-th power operations and Bocksteins into a dictionary
195
+ representing a sum of admissible monomials.
196
+ """
197
+
198
+ # ****************************************************************************
199
+ # Copyright (C) 2008-2010 John H. Palmieri <palmieri@math.washington.edu>
200
+ # Distributed under the terms of the GNU General Public License (GPL)
201
+ # ****************************************************************************
202
+
203
+ from sage.misc.cachefunc import cached_function
204
+
205
+ # Milnor, p=2
206
+
207
+
208
+ def milnor_multiplication(r, s):
209
+ r"""
210
+ Product of Milnor basis elements r and s at the prime 2.
211
+
212
+ INPUT:
213
+
214
+ - ``r`` -- tuple of nonnegative integers
215
+ - ``s`` -- tuple of nonnegative integers
216
+
217
+ OUTPUT:
218
+
219
+ Dictionary of terms of the form (tuple: coeff), where
220
+ 'tuple' is a tuple of nonnegative integers and 'coeff' is 1.
221
+
222
+ This computes Milnor matrices for the product of `\text{Sq}(r)`
223
+ and `\text{Sq}(s)`, computes their multinomial coefficients, and
224
+ for each matrix whose coefficient is 1, add `\text{Sq}(t)` to the
225
+ output, where `t` is the tuple formed by the diagonals sums from
226
+ the matrix.
227
+
228
+ EXAMPLES::
229
+
230
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import milnor_multiplication
231
+ sage: milnor_multiplication((2,), (1,)) == {(0, 1): 1, (3,): 1}
232
+ True
233
+ sage: sorted(milnor_multiplication((4,), (2,1)).items())
234
+ [((0, 3), 1), ((2, 0, 1), 1), ((6, 1), 1)]
235
+ sage: sorted(milnor_multiplication((2,4), (0,1)).items())
236
+ [((2, 0, 0, 1), 1), ((2, 5), 1)]
237
+
238
+ These examples correspond to the following product computations:
239
+
240
+ .. MATH::
241
+
242
+ \text{Sq}(2) \text{Sq}(1) = \text{Sq}(0,1) + \text{Sq}(3)
243
+
244
+ \text{Sq}(4) \text{Sq}(2,1) = \text{Sq}(6,1) + \text{Sq}(0,3) + \text{Sq}(2,0,1)
245
+
246
+ \text{Sq}(2,4) \text{Sq}(0,1) = \text{Sq}(2, 5) + \text{Sq}(2, 0, 0, 1)
247
+
248
+ This uses the same algorithm Monks does in his Maple package: see
249
+ http://mathweb.scranton.edu/monks/software/Steenrod/steen.html.
250
+ """
251
+ result = {}
252
+ rows = len(r) + 1
253
+ cols = len(s) + 1
254
+ diags = len(r) + len(s)
255
+ # initialize matrix
256
+ M = list(range(rows))
257
+ for i in range(rows):
258
+ M[i] = [0]*cols
259
+ for j in range(1,cols):
260
+ M[0][j] = s[j-1]
261
+ for i in range(1,rows):
262
+ M[i][0] = r[i-1]
263
+ for j in range(1,cols):
264
+ M[i][j] = 0
265
+ found = True
266
+ while found:
267
+ # check diagonals
268
+ n = 1
269
+ okay = 1
270
+ diagonal = [0]*diags
271
+ while n <= diags and okay is not None:
272
+ nth_diagonal = [M[i][n-i] for i in range(max(0,n-cols+1), min(1+n,rows))]
273
+ okay = multinomial(nth_diagonal)
274
+ diagonal[n-1] = okay
275
+ n = n + 1
276
+ if okay is not None:
277
+ i = diags - 1
278
+ while i >= 0 and diagonal[i] == 0:
279
+ i = i - 1
280
+ t = tuple(diagonal[:i+1])
281
+ # reduce mod two:
282
+ if t in result:
283
+ del result[t]
284
+ else:
285
+ result[t] = 1
286
+ # now look for new matrices:
287
+ found = False
288
+ i = 1
289
+ while not found and i < rows:
290
+ sum = M[i][0]
291
+ j = 1
292
+ while not found and j < cols:
293
+ # check to see if column index j is small enough
294
+ if sum >= 2**j:
295
+ # now check to see if there's anything above this entry
296
+ # to add to it
297
+ temp_col_sum = 0
298
+ for k in range(i):
299
+ temp_col_sum += M[k][j]
300
+ if temp_col_sum != 0:
301
+ found = True
302
+ for row in range(1,i):
303
+ M[row][0] = r[row-1]
304
+ for col in range(1,cols):
305
+ M[0][col] = M[0][col] + M[row][col]
306
+ M[row][col] = 0
307
+ for col in range(1,j):
308
+ M[0][col] = M[0][col] + M[i][col]
309
+ M[i][col] = 0
310
+ M[0][j] = M[0][j] - 1
311
+ M[i][j] = M[i][j] + 1
312
+ M[i][0] = sum - 2**j
313
+ else:
314
+ sum = sum + M[i][j] * 2**j
315
+ else:
316
+ sum = sum + M[i][j] * 2**j
317
+ j += 1
318
+ i += 1
319
+ return result
320
+
321
+
322
+ def multinomial(list):
323
+ r"""
324
+ Multinomial coefficient of list, mod 2.
325
+
326
+ INPUT:
327
+
328
+ - ``list`` -- list of integers
329
+
330
+ OUTPUT: none if the multinomial coefficient is 0, or sum of list if it is 1
331
+
332
+ Given the input `[n_1, n_2, n_3, ...]`, this computes the
333
+ multinomial coefficient `(n_1 + n_2 + n_3 + ...)! / (n_1! n_2!
334
+ n_3! ...)`, mod 2. The method is roughly this: expand each
335
+ `n_i` in binary. If there is a 1 in the same digit for any `n_i`
336
+ and `n_j` with `i\neq j`, then the coefficient is 0; otherwise, it
337
+ is 1.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import multinomial
342
+ sage: multinomial([1,2,4])
343
+ 7
344
+ sage: multinomial([1,2,5])
345
+ sage: multinomial([1,2,12,192,256])
346
+ 463
347
+
348
+ This function does not compute any factorials, so the following are
349
+ actually reasonable to do::
350
+
351
+ sage: multinomial([1,65536])
352
+ 65537
353
+ sage: multinomial([4,65535])
354
+ sage: multinomial([32768,65536])
355
+ 98304
356
+ """
357
+ old_sum = list[0]
358
+ okay = True
359
+ i = 1
360
+ while okay and i < len(list):
361
+ j = 1
362
+ while okay and j <= min(old_sum, list[i]):
363
+ if j & old_sum == j:
364
+ okay = (j & list[i] == 0)
365
+ j = j << 1
366
+ old_sum = old_sum + list[i]
367
+ i = i + 1
368
+ if okay:
369
+ return old_sum
370
+ else:
371
+ return None
372
+
373
+ # Milnor, p odd
374
+
375
+
376
+ def milnor_multiplication_odd(m1, m2, p):
377
+ r"""
378
+ Product of Milnor basis elements defined by m1 and m2 at the odd prime p.
379
+
380
+ INPUT:
381
+
382
+ - ``m1`` -- pair of tuples (e,r), where e is an increasing tuple of
383
+ nonnegative integers and r is a tuple of nonnegative integers
384
+ - ``m2`` -- pair of tuples (f,s), same format as m1
385
+ - ``p`` -- odd prime number
386
+
387
+ OUTPUT:
388
+
389
+ Dictionary of terms of the form (tuple: coeff), where 'tuple' is
390
+ a pair of tuples, as for r and s, and 'coeff' is an integer mod p.
391
+
392
+ This computes the product of the Milnor basis elements
393
+ `Q_{e_1} Q_{e_2} ... P(r_1, r_2, ...)` and
394
+ `Q_{f_1} Q_{f_2} ... P(s_1, s_2, ...)`.
395
+
396
+ EXAMPLES::
397
+
398
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import milnor_multiplication_odd
399
+ sage: sorted(milnor_multiplication_odd(((0,2),(5,)), ((1,),(1,)), 5).items())
400
+ [(((0, 1, 2), (0, 1)), 4), (((0, 1, 2), (6,)), 4)]
401
+ sage: milnor_multiplication_odd(((0,2,4),()), ((1,3),()), 7)
402
+ {((0, 1, 2, 3, 4), ()): 6}
403
+ sage: milnor_multiplication_odd(((0,2,4),()), ((1,5),()), 7)
404
+ {((0, 1, 2, 4, 5), ()): 1}
405
+ sage: sorted(milnor_multiplication_odd(((),(6,)), ((),(2,)), 3).items())
406
+ [(((), (0, 2)), 1), (((), (4, 1)), 1), (((), (8,)), 1)]
407
+
408
+ These examples correspond to the following product computations:
409
+
410
+ .. MATH::
411
+
412
+ p=5: \quad Q_0 Q_2 \mathcal{P}(5) Q_1 \mathcal{P}(1) = 4 Q_0 Q_1 Q_2 \mathcal{P}(0,1) + 4 Q_0 Q_1 Q_2 \mathcal{P}(6)
413
+
414
+ p=7: \quad (Q_0 Q_2 Q_4) (Q_1 Q_3) = 6 Q_0 Q_1 Q_2 Q_3 Q_4
415
+
416
+ p=7: \quad (Q_0 Q_2 Q_4) (Q_1 Q_5) = Q_0 Q_1 Q_2 Q_3 Q_5
417
+
418
+ p=3: \quad \mathcal{P}(6) \mathcal{P}(2) = \mathcal{P}(0,2) + \mathcal{P}(4,1) + \mathcal{P}(8)
419
+
420
+ The following used to fail until the trailing zeroes were
421
+ eliminated in p_mono::
422
+
423
+ sage: A = SteenrodAlgebra(3)
424
+ sage: a = A.P(0,3); b = A.P(12); c = A.Q(1,2)
425
+ sage: (a+b)*c == a*c + b*c
426
+ True
427
+
428
+ Test that the bug reported in :issue:`7212` has been fixed::
429
+
430
+ sage: A.P(36,6)*A.P(27,9,81)
431
+ 2 P(13,21,83) + P(14,24,82) + P(17,20,83) + P(25,18,83) + P(26,21,82) + P(36,15,80,1) + P(49,12,83) + 2 P(50,15,82) + 2 P(53,11,83) + 2 P(63,15,81)
432
+
433
+ Associativity once failed because of a sign error::
434
+
435
+ sage: a,b,c = A.Q_exp(0,1), A.P(3), A.Q_exp(1,1)
436
+ sage: (a*b)*c == a*(b*c)
437
+ True
438
+
439
+ This uses the same algorithm Monks does in his Maple package to
440
+ iterate through the possible matrices: see
441
+ http://mathweb.scranton.edu/monks/software/Steenrod/steen.html.
442
+ """
443
+ from sage.rings.finite_rings.finite_field_constructor import GF
444
+ F = GF(p)
445
+ (f,s) = m2
446
+ # First compute Q_e0 Q_e1 ... P(r1, r2, ...) Q_f0 Q_f1 ...
447
+ # Store results (as dictionary of pairs of tuples) in 'answer'.
448
+ answer = {m1: F(1)}
449
+ for k in f:
450
+ old_answer = answer
451
+ answer = {}
452
+ for mono in old_answer:
453
+ if k not in mono[0]:
454
+ q_mono = set(mono[0])
455
+ if q_mono:
456
+ ind = len(q_mono.intersection(range(k,1+max(q_mono))))
457
+ else:
458
+ ind = 0
459
+ coeff = (-1)**ind * old_answer[mono]
460
+ lst = list(mono[0])
461
+ if ind == 0:
462
+ lst.append(k)
463
+ else:
464
+ lst.insert(-ind,k)
465
+ q_mono = tuple(lst)
466
+ p_mono = mono[1]
467
+ answer[(q_mono, p_mono)] = F(coeff)
468
+ for i in range(1,1+len(mono[1])):
469
+ if (k+i not in mono[0]) and (p**k <= mono[1][i-1]):
470
+ q_mono = set(mono[0])
471
+ if q_mono:
472
+ ind = len(q_mono.intersection(range(k+i,1+max(q_mono))))
473
+ else:
474
+ ind = 0
475
+ coeff = (-1)**ind * old_answer[mono]
476
+ lst = list(mono[0])
477
+ if ind == 0:
478
+ lst.append(k+i)
479
+ else:
480
+ lst.insert(-ind,k+i)
481
+ q_mono = tuple(lst)
482
+ p_mono = list(mono[1])
483
+ p_mono[i-1] = p_mono[i-1] - p**k
484
+
485
+ # The next two lines were added so that p_mono will not
486
+ # have trailing zeros. This makes p_mono uniquely
487
+ # determined by P(*p_mono).
488
+
489
+ while p_mono and p_mono[-1] == 0:
490
+ p_mono.pop()
491
+
492
+ answer[(q_mono, tuple(p_mono))] = F(coeff)
493
+ # Now for the Milnor matrices. For each entry '(e,r): coeff' in answer,
494
+ # multiply r with s. Record coefficient for matrix and multiply by coeff.
495
+ # Store in 'result'.
496
+ if not s:
497
+ result = answer
498
+ else:
499
+ result = {}
500
+ for (e, r) in answer:
501
+ old_coeff = answer[(e,r)]
502
+ # Milnor multiplication for r and s
503
+ rows = len(r) + 1
504
+ cols = len(s) + 1
505
+ diags = len(r) + len(s)
506
+ # initialize matrix
507
+ M = list(range(rows))
508
+ for i in range(rows):
509
+ M[i] = [0]*cols
510
+ for j in range(1,cols):
511
+ M[0][j] = s[j-1]
512
+ for i in range(1,rows):
513
+ M[i][0] = r[i-1]
514
+ for j in range(1,cols):
515
+ M[i][j] = 0
516
+ found = True
517
+ while found:
518
+ # check diagonals
519
+ n = 1
520
+ coeff = old_coeff
521
+ diagonal = [0]*diags
522
+ while n <= diags and coeff != 0:
523
+ nth_diagonal = [M[i][n-i] for i in range(max(0,n-cols+1), min(1+n,rows))]
524
+ coeff = coeff * multinomial_odd(nth_diagonal,p)
525
+ diagonal[n-1] = sum(nth_diagonal)
526
+ n = n + 1
527
+ if F(coeff) != 0:
528
+ i = diags - 1
529
+ while i >= 0 and diagonal[i] == 0:
530
+ i = i - 1
531
+ t = tuple(diagonal[:i+1])
532
+ if (e,t) in result:
533
+ result[(e,t)] = F(coeff + result[(e,t)])
534
+ else:
535
+ result[(e,t)] = F(coeff)
536
+ # now look for new matrices:
537
+ found = False
538
+ i = 1
539
+ while not found and i < rows:
540
+ temp_sum = M[i][0]
541
+ j = 1
542
+ while not found and j < cols:
543
+ # check to see if column index j is small enough
544
+ if temp_sum >= p**j:
545
+ # now check to see if there's anything above this entry
546
+ # to add to it
547
+ temp_col_sum = 0
548
+ for k in range(i):
549
+ temp_col_sum += M[k][j]
550
+ if temp_col_sum != 0:
551
+ found = True
552
+ for row in range(1,i):
553
+ M[row][0] = r[row-1]
554
+ for col in range(1,cols):
555
+ M[0][col] = M[0][col] + M[row][col]
556
+ M[row][col] = 0
557
+ for col in range(1,j):
558
+ M[0][col] = M[0][col] + M[i][col]
559
+ M[i][col] = 0
560
+ M[0][j] = M[0][j] - 1
561
+ M[i][j] = M[i][j] + 1
562
+ M[i][0] = temp_sum - p**j
563
+ else:
564
+ temp_sum += M[i][j] * p**j
565
+ else:
566
+ temp_sum += M[i][j] * p**j
567
+ j = j + 1
568
+ i = i + 1
569
+ return result
570
+
571
+
572
+ def multinomial_odd(list, p):
573
+ r"""
574
+ Multinomial coefficient of list, mod p.
575
+
576
+ INPUT:
577
+
578
+ - ``list`` -- list of integers
579
+ - ``p`` -- a prime number
580
+
581
+ OUTPUT: associated multinomial coefficient, mod p
582
+
583
+ Given the input `[n_1, n_2, n_3, ...]`, this computes the
584
+ multinomial coefficient `(n_1 + n_2 + n_3 + ...)! / (n_1! n_2!
585
+ n_3! ...)`, mod `p`. The method is this: expand each `n_i` in
586
+ base `p`: `n_i = \sum_j p^j n_{ij}`. Do the same for the sum of
587
+ the `n_i`'s, which we call `m`: `m = \sum_j p^j m_j`. Then the
588
+ multinomial coefficient is congruent, mod `p`, to the product of
589
+ the multinomial coefficients `m_j! / (n_{1j}! n_{2j}! ...)`.
590
+
591
+ Furthermore, any multinomial coefficient `m! / (n_1! n_2! ...)`
592
+ can be computed as a product of binomial coefficients: it equals
593
+
594
+ .. MATH::
595
+
596
+ \binom{n_1}{n_1} \binom{n_1 + n_2}{n_2} \binom{n_1 + n_2 + n_3}{n_3} ...
597
+
598
+ This is convenient because Sage's binomial function returns
599
+ integers, not rational numbers (as would be produced just by
600
+ dividing factorials).
601
+
602
+ EXAMPLES::
603
+
604
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import multinomial_odd
605
+ sage: multinomial_odd([1,2,4], 2)
606
+ 1
607
+ sage: multinomial_odd([1,2,4], 7)
608
+ 0
609
+ sage: multinomial_odd([1,2,4], 11)
610
+ 6
611
+ sage: multinomial_odd([1,2,4], 101)
612
+ 4
613
+ sage: multinomial_odd([1,2,4], 107)
614
+ 105
615
+ """
616
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
617
+ from sage.rings.integer import Integer
618
+ from sage.arith.misc import binomial
619
+ n = sum(list)
620
+ answer = 1
621
+ F = GF(p)
622
+ n_expansion = Integer(n).digits(p)
623
+ list_expansion = [Integer(k).digits(p) for k in list]
624
+ index = 0
625
+ while answer != 0 and index < len(n_expansion):
626
+ multi = F(1)
627
+ partial_sum = 0
628
+ for exp in list_expansion:
629
+ if index < len(exp):
630
+ partial_sum = partial_sum + exp[index]
631
+ multi = F(multi * binomial(partial_sum, exp[index]))
632
+ answer = F(answer * multi)
633
+ index += 1
634
+ return answer
635
+
636
+ # Adem relations, Serre-Cartan basis, admissible sequences
637
+
638
+
639
+ def binomial_mod2(n, k):
640
+ r"""
641
+ The binomial coefficient `\binom{n}{k}`, computed mod 2.
642
+
643
+ INPUT:
644
+
645
+ - `n`, `k` -- integers
646
+
647
+ OUTPUT: `n` choose `k`, mod 2
648
+
649
+ EXAMPLES::
650
+
651
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import binomial_mod2
652
+ sage: binomial_mod2(4,2)
653
+ 0
654
+ sage: binomial_mod2(5,4)
655
+ 1
656
+ sage: binomial_mod2(3 * 32768, 32768)
657
+ 1
658
+ sage: binomial_mod2(4 * 32768, 32768)
659
+ 0
660
+ """
661
+ if n < k:
662
+ return 0
663
+ elif ((n-k) & k) == 0:
664
+ return 1
665
+ else:
666
+ return 0
667
+
668
+
669
+ def binomial_modp(n, k, p):
670
+ r"""
671
+ The binomial coefficient `\binom{n}{k}`, computed mod `p`.
672
+
673
+ INPUT:
674
+
675
+ - `n`, `k` -- integers
676
+ - ``p`` -- prime number
677
+
678
+ OUTPUT: `n` choose `k`, mod `p`
679
+
680
+ EXAMPLES::
681
+
682
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import binomial_modp
683
+ sage: binomial_modp(5,2,3)
684
+ 1
685
+ sage: binomial_modp(6,2,11) # 6 choose 2 = 15
686
+ 4
687
+ """
688
+ if n < k:
689
+ return 0
690
+ return multinomial_odd([n-k, k], p)
691
+
692
+
693
+ @cached_function
694
+ def adem(a, b, c=0, p=2, generic=None):
695
+ r"""
696
+ The mod `p` Adem relations.
697
+
698
+ INPUT:
699
+
700
+ - `a`, `b`, `c` -- nonnegative integers (optional); corresponding
701
+ to either `P^a P^b` or (if `c` present) to `P^a \beta^b P^c`
702
+ - ``p`` -- positive prime number (default: 2)
703
+ - ``generic`` -- whether to use the generic Steenrod algebra, (default: depends on prime)
704
+
705
+ OUTPUT:
706
+
707
+ a dictionary representing the mod `p` Adem relations
708
+ applied to `P^a P^b` or (if `c` present) to `P^a \beta^b P^c`.
709
+
710
+ The mod `p` Adem relations for the mod `p` Steenrod algebra are as
711
+ follows: if `p=2`, then if `a < 2b`,
712
+
713
+ .. MATH::
714
+
715
+ \text{Sq}^a \text{Sq}^b = \sum_{j=0}^{a/2} \binom{b-j-1}{a-2j} \text{Sq}^{a+b-j} \text{Sq}^j
716
+
717
+ If `p` is odd, then if `a < pb`,
718
+
719
+ .. MATH::
720
+
721
+ P^a P^b = \sum_{j=0}^{a/p} (-1)^{a+j} \binom{(b-j)(p-1)-1}{a-pj} P^{a+b-j} P^j
722
+
723
+ Also for `p` odd, if `a \leq pb`,
724
+
725
+ .. MATH::
726
+
727
+ P^a \beta P^b = \sum_{j=0}^{a/p} (-1)^{a+j} \binom{(b-j)(p-1)}{a-pj} \beta P^{a+b-j} P^j
728
+ + \sum_{j=0}^{a/p} (-1)^{a+j-1} \binom{(b-j)(p-1)-1}{a-pj-1} P^{a+b-j} \beta P^j
729
+
730
+ EXAMPLES:
731
+
732
+ If two arguments (`a` and `b`) are given, then computations are
733
+ done mod 2. If `a \geq 2b`, then the dictionary {(a,b): 1} is
734
+ returned. Otherwise, the right side of the mod 2 Adem relation
735
+ for `\text{Sq}^a \text{Sq}^b` is returned. For example, since
736
+ `\text{Sq}^2 \text{Sq}^2 = \text{Sq}^3 \text{Sq}^1`, we have::
737
+
738
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import adem
739
+ sage: adem(2,2) # indirect doctest
740
+ {(3, 1): 1}
741
+ sage: adem(4,2)
742
+ {(4, 2): 1}
743
+ sage: adem(4,4) == {(6, 2): 1, (7, 1): 1}
744
+ True
745
+
746
+ If `p` is given and is odd, then with two inputs `a` and `b`, the
747
+ Adem relation for `P^a P^b` is computed. With three inputs `a`,
748
+ `b`, `c`, the Adem relation for `P^a \beta^b P^c` is computed.
749
+ In either case, the keys in the output are all tuples of odd length,
750
+ with ``(i_1, i_2, ..., i_m)`` representing
751
+
752
+ .. MATH::
753
+
754
+ \beta^{i_1} P^{i_2} \beta^{i_3} P^{i_4} ... \beta^{i_m}
755
+
756
+ For instance::
757
+
758
+ sage: adem(3,1, p=3)
759
+ {(0, 3, 0, 1, 0): 1}
760
+ sage: adem(3,0,1, p=3)
761
+ {(0, 3, 0, 1, 0): 1}
762
+ sage: adem(1,0,1, p=7)
763
+ {(0, 2, 0): 2}
764
+ sage: adem(1,1,1, p=5) == {(0, 2, 1): 1, (1, 2, 0): 1}
765
+ True
766
+ sage: adem(1,1,2, p=5) == {(0, 3, 1): 1, (1, 3, 0): 2}
767
+ True
768
+ """
769
+ if generic is None:
770
+ generic = (p != 2)
771
+ if not generic:
772
+ if b == 0:
773
+ return {(a,): 1}
774
+ elif a == 0:
775
+ return {(b,): 1}
776
+ elif a >= 2*b:
777
+ return {(a,b): 1}
778
+ result = {}
779
+ for c in range(1 + a//2):
780
+ if binomial_mod2(b-c-1, a-2*c) == 1:
781
+ if c == 0:
782
+ result[(a+b,)] = 1
783
+ else:
784
+ result[(a+b-c,c)] = 1
785
+ return result
786
+ # p odd
787
+ if a == 0 and b == 0:
788
+ return {(c,): 1}
789
+ if c == 0:
790
+ bockstein = 0
791
+ A = a
792
+ B = b
793
+ else:
794
+ A = a
795
+ B = c
796
+ bockstein = b # should be 0 or 1
797
+ if A == 0:
798
+ return {(bockstein, B, 0): 1}
799
+ if B == 0:
800
+ return {(0, A, bockstein): 1}
801
+ if bockstein == 0:
802
+ if A >= p*B: # admissible
803
+ return {(0,A,0,B,0): 1}
804
+ result = {}
805
+ for j in range(1 + a//p):
806
+ coeff = (-1)**(A+j) * binomial_modp((B-j) * (p-1) - 1, A - p*j, p)
807
+ if coeff % p != 0:
808
+ if j == 0:
809
+ result[(0,A+B,0)] = coeff
810
+ else:
811
+ result[(0,A+B-j,0,j,0)] = coeff
812
+ else:
813
+ if A >= p*B + 1: # admissible
814
+ return {(0,A,1,B,0): 1}
815
+ result = {}
816
+ for j in range(1 + a//p):
817
+ coeff = (-1)**(A+j) * binomial_modp((B-j) * (p-1), A - p*j, p)
818
+ if coeff % p != 0:
819
+ if j == 0:
820
+ result[(1,A+B,0)] = coeff
821
+ else:
822
+ result[(1,A+B-j,0,j,0)] = coeff
823
+ for j in range(1 + (a-1)//p):
824
+ coeff = (-1)**(A+j-1) * binomial_modp((B-j) * (p-1) - 1, A - p*j - 1, p)
825
+ if coeff % p != 0:
826
+ if j == 0:
827
+ result[(0,A+B,1)] = coeff
828
+ else:
829
+ result[(0,A+B-j,1,j,0)] = coeff
830
+ return result
831
+
832
+
833
+ @cached_function
834
+ def make_mono_admissible(mono, p=2, generic=None):
835
+ r"""
836
+ Given a tuple ``mono``, view it as a product of Steenrod
837
+ operations, and return a dictionary giving data equivalent to
838
+ writing that product as a linear combination of admissible
839
+ monomials.
840
+
841
+ When `p=2`, the sequence (and hence the corresponding monomial)
842
+ `(i_1, i_2, ...)` is admissible if `i_j \geq 2 i_{j+1}` for all
843
+ `j`.
844
+
845
+ When `p` is odd, the sequence `(e_1, i_1, e_2, i_2, ...)` is
846
+ admissible if `i_j \geq e_{j+1} + p i_{j+1}` for all `j`.
847
+
848
+ INPUT:
849
+
850
+ - ``mono`` -- tuple of nonnegative integers
851
+ - ``p`` -- prime number (default: 2)
852
+ - ``generic`` -- whether to use the generic Steenrod algebra (default: depends on prime)
853
+
854
+ OUTPUT:
855
+
856
+ Dictionary of terms of the form (tuple: coeff), where
857
+ 'tuple' is an admissible tuple of nonnegative integers and
858
+ 'coeff' is its coefficient. This corresponds to a linear
859
+ combination of admissible monomials. When `p` is odd, each tuple
860
+ must have an odd length: it should be of the form `(e_1, i_1, e_2,
861
+ i_2, ..., e_k)` where each `e_j` is either 0 or 1 and each `i_j`
862
+ is a positive integer: this corresponds to the admissible monomial
863
+
864
+ .. MATH::
865
+
866
+ \beta^{e_1} \mathcal{P}^{i_2} \beta^{e_2} \mathcal{P}^{i_2} ...
867
+ \mathcal{P}^{i_k} \beta^{e_k}
868
+
869
+ ALGORITHM:
870
+
871
+ Given `(i_1, i_2, i_3, ...)`, apply the Adem relations to the first
872
+ pair (or triple when `p` is odd) where the sequence is inadmissible,
873
+ and then apply this function recursively to each of the resulting
874
+ tuples `(i_1, ..., i_{j-1}, NEW, i_{j+2}, ...)`, keeping track of
875
+ the coefficients.
876
+
877
+ EXAMPLES::
878
+
879
+ sage: from sage.algebras.steenrod.steenrod_algebra_mult import make_mono_admissible
880
+ sage: make_mono_admissible((12,)) # already admissible, indirect doctest
881
+ {(12,): 1}
882
+ sage: make_mono_admissible((2,1)) # already admissible
883
+ {(2, 1): 1}
884
+ sage: make_mono_admissible((2,2))
885
+ {(3, 1): 1}
886
+ sage: make_mono_admissible((2, 2, 2))
887
+ {(5, 1): 1}
888
+ sage: make_mono_admissible((0, 2, 0, 1, 0), p=7)
889
+ {(0, 3, 0): 3}
890
+
891
+ Test the fix from :issue:`13796`::
892
+
893
+ sage: SteenrodAlgebra(p=2, basis='adem').Q(2) * (Sq(6) * Sq(2)) # indirect doctest # needs sage.combinat
894
+ Sq^10 Sq^4 Sq^1 + Sq^10 Sq^5 + Sq^12 Sq^3 + Sq^13 Sq^2
895
+ """
896
+ from sage.rings.finite_rings.finite_field_constructor import GF
897
+ if generic is None:
898
+ generic = p != 2
899
+ F = GF(p)
900
+ if len(mono) == 1:
901
+ return {mono: 1}
902
+ if not generic and len(mono) == 2:
903
+ return adem(*mono, p=p, generic=generic)
904
+ if not generic:
905
+ # check to see if admissible:
906
+ admissible = True
907
+ for j in range(len(mono)-1):
908
+ if mono[j] < 2*mono[j+1]:
909
+ admissible = False
910
+ break
911
+ if admissible:
912
+ return {mono: 1}
913
+ # else j is the first index where admissibility fails
914
+ ans = {}
915
+ y = adem(mono[j], mono[j+1])
916
+ for x in y:
917
+ new = mono[:j] + x + mono[j+2:]
918
+ new = make_mono_admissible(new)
919
+ for m in new:
920
+ if m in ans:
921
+ ans[m] = ans[m] + y[x] * new[m]
922
+ if F(ans[m]) == 0:
923
+ del ans[m]
924
+ else:
925
+ ans[m] = y[x] * new[m]
926
+ return ans
927
+ # p odd
928
+ # check to see if admissible:
929
+ admissible = True
930
+ for j in range(1, len(mono)-2, 2):
931
+ if mono[j] < mono[j+1] + p*mono[j+2]:
932
+ admissible = False
933
+ break
934
+ if admissible:
935
+ return {mono: 1}
936
+ # else j is the first index where admissibility fails
937
+ ans = {}
938
+ y = adem(*mono[j:j+3], p=p, generic=True)
939
+ for x in y:
940
+ new_x = list(x)
941
+ new_x[0] = mono[j-1] + x[0]
942
+ if len(mono) >= j+3:
943
+ new_x[-1] = mono[j+3] + x[-1]
944
+ if new_x[0] <= 1 and new_x[-1] <= 1:
945
+ new = mono[:j-1] + tuple(new_x) + mono[j+4:]
946
+ new = make_mono_admissible(new, p, generic=True)
947
+ for m in new:
948
+ if m in ans:
949
+ ans[m] = ans[m] + y[x] * new[m]
950
+ if F(ans[m]) == 0:
951
+ del ans[m]
952
+ else:
953
+ ans[m] = y[x] * new[m]
954
+ return ans