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,1167 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ """
3
+ Miscellaneous functions for the Steenrod algebra and its elements
4
+
5
+ AUTHORS:
6
+
7
+ - John H. Palmieri (2008-07-30): initial version (as the file
8
+ steenrod_algebra_element.py)
9
+
10
+ - John H. Palmieri (2010-06-30): initial version of steenrod_misc.py.
11
+ Implemented profile functions. Moved most of the methods for
12
+ elements to the ``Element`` subclass of
13
+ :class:`sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra_generic`.
14
+
15
+ The main functions here are
16
+
17
+ - :func:`get_basis_name`. This function takes a string as input and
18
+ attempts to interpret it as the name of a basis for the Steenrod
19
+ algebra; it returns the canonical name attached to that basis. This
20
+ allows for the use of synonyms when defining bases, while the
21
+ resulting algebras will be identical.
22
+
23
+ - :func:`normalize_profile`. This function returns the canonical (and
24
+ hashable) description of any profile function. See
25
+ :mod:`sage.algebras.steenrod.steenrod_algebra` and
26
+ :func:`SteenrodAlgebra <sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra>`
27
+ for information on profile functions.
28
+
29
+ - functions named ``*_mono_to_string`` where ``*`` is a basis name
30
+ (:func:`milnor_mono_to_string`, etc.). These convert tuples
31
+ representing basis elements to strings, for _repr_ and _latex_
32
+ methods.
33
+ """
34
+
35
+ # ****************************************************************************
36
+ # Copyright (C) 2008-2010 John H. Palmieri <palmieri@math.washington.edu>
37
+ # Distributed under the terms of the GNU General Public License (GPL)
38
+ # ****************************************************************************
39
+
40
+ ######################################################
41
+ # basis names
42
+
43
+ _steenrod_milnor_basis_names = ['milnor']
44
+ _steenrod_serre_cartan_basis_names = ['serre_cartan', 'serre-cartan', 'sc',
45
+ 'adem', 'admissible']
46
+
47
+
48
+ def get_basis_name(basis, p, generic=None):
49
+ """
50
+ Return canonical basis named by string basis at the prime p.
51
+
52
+ INPUT:
53
+
54
+ - ``basis`` -- string
55
+
56
+ - ``p`` -- positive prime number
57
+
58
+ - ``generic`` -- boolean (default: 'None')
59
+
60
+ OUTPUT: ``basis_name`` -- string
61
+
62
+ Specify the names of the implemented bases. The input is
63
+ converted to lower-case, then processed to return the canonical
64
+ name for the basis.
65
+
66
+ For the Milnor and Serre-Cartan bases, use the list of synonyms
67
+ defined by the variables :data:`_steenrod_milnor_basis_names` and
68
+ :data:`_steenrod_serre_cartan_basis_names`. Their canonical names
69
+ are 'milnor' and 'serre-cartan', respectively.
70
+
71
+ For the other bases, use pattern-matching rather than a list of
72
+ synonyms:
73
+
74
+ - Search for 'wood' and 'y' or 'wood' and 'z' to get the Wood
75
+ bases. Canonical names 'woody', 'woodz'.
76
+
77
+ - Search for 'arnon' and 'c' for the Arnon C basis. Canonical
78
+ name: 'arnonc'.
79
+
80
+ - Search for 'arnon' (and no 'c') for the Arnon A basis. Also see
81
+ if 'long' is present, for the long form of the basis. Canonical
82
+ names: 'arnona', 'arnona_long'.
83
+
84
+ - Search for 'wall' for the Wall basis. Also see if 'long' is
85
+ present. Canonical names: 'wall', 'wall_long'.
86
+
87
+ - Search for 'pst' for P^s_t bases, then search for the order
88
+ type: 'rlex', 'llex', 'deg', 'revz'. Canonical names:
89
+ 'pst_rlex', 'pst_llex', 'pst_deg', 'pst_revz'.
90
+
91
+ - For commutator types, search for 'comm', an order type, and also
92
+ check to see if 'long' is present. Canonical names:
93
+ 'comm_rlex', 'comm_llex', 'comm_deg', 'comm_revz',
94
+ 'comm_rlex_long', 'comm_llex_long', 'comm_deg_long',
95
+ 'comm_revz_long'.
96
+
97
+ EXAMPLES::
98
+
99
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import get_basis_name
100
+ sage: get_basis_name('adem', 2)
101
+ 'serre-cartan'
102
+ sage: get_basis_name('milnor', 2)
103
+ 'milnor'
104
+ sage: get_basis_name('MiLNoR', 5)
105
+ 'milnor'
106
+ sage: get_basis_name('pst-llex', 2)
107
+ 'pst_llex'
108
+ sage: get_basis_name('wood_abcdedfg_y', 2)
109
+ 'woody'
110
+ sage: get_basis_name('wood', 2)
111
+ Traceback (most recent call last):
112
+ ...
113
+ ValueError: wood is not a recognized basis at the prime 2
114
+ sage: get_basis_name('arnon--hello--long', 2)
115
+ 'arnona_long'
116
+ sage: get_basis_name('arnona_long', p=5)
117
+ Traceback (most recent call last):
118
+ ...
119
+ ValueError: arnona_long is not a recognized basis at the prime 5
120
+ sage: get_basis_name('NOT_A_BASIS', 2)
121
+ Traceback (most recent call last):
122
+ ...
123
+ ValueError: not_a_basis is not a recognized basis at the prime 2
124
+ sage: get_basis_name('woody', 2, generic=True)
125
+ Traceback (most recent call last):
126
+ ...
127
+ ValueError: woody is not a recognized basis for the generic Steenrod algebra at the prime 2
128
+ """
129
+ if generic is None:
130
+ generic = p != 2
131
+ basis = basis.lower()
132
+ if basis in _steenrod_milnor_basis_names:
133
+ result = 'milnor'
134
+ elif basis in _steenrod_serre_cartan_basis_names:
135
+ result = 'serre-cartan'
136
+ elif basis.find('pst') >= 0:
137
+ if basis.find('rlex') >= 0:
138
+ result = 'pst_rlex'
139
+ elif basis.find('llex') >= 0:
140
+ result = 'pst_llex'
141
+ elif basis.find('deg') >= 0:
142
+ result = 'pst_deg'
143
+ elif basis.find('revz') >= 0:
144
+ result = 'pst_revz'
145
+ else:
146
+ result = 'pst_revz'
147
+ elif basis.find('comm') >= 0:
148
+ if basis.find('rlex') >= 0:
149
+ result = 'comm_rlex'
150
+ elif basis.find('llex') >= 0:
151
+ result = 'comm_llex'
152
+ elif basis.find('deg') >= 0:
153
+ result = 'comm_deg'
154
+ elif basis.find('revz') >= 0:
155
+ result = 'comm_revz'
156
+ else:
157
+ result = 'comm_revz'
158
+ if basis.find('long') >= 0:
159
+ result = result + '_long'
160
+ elif not generic and basis.find('wood') >= 0:
161
+ if basis.find('y') >= 0:
162
+ result = 'woody'
163
+ elif basis.find('z') >= 0:
164
+ result = 'woodz'
165
+ else:
166
+ raise ValueError("%s is not a recognized basis at the prime %s" % (basis, p))
167
+ elif not generic and basis.find('arnon') >= 0:
168
+ if basis.find('c') >= 0:
169
+ result = 'arnonc'
170
+ else:
171
+ result = 'arnona'
172
+ if basis.find('long') >= 0:
173
+ result = result + '_long'
174
+ elif not generic and basis.find('wall') >= 0:
175
+ result = 'wall'
176
+ if basis.find('long') >= 0:
177
+ result = result + '_long'
178
+ else:
179
+ gencase = " for the generic Steenrod algebra" if p == 2 and generic else ""
180
+ raise ValueError("%s is not a recognized basis%s at the prime %s" % (basis, gencase, p))
181
+ return result
182
+
183
+ ######################################################
184
+ # profile functions
185
+
186
+
187
+ def is_valid_profile(profile, truncation_type, p=2, generic=None):
188
+ r"""
189
+ Return ``True`` if ``profile``, together with ``truncation_type``, is a valid
190
+ profile at the prime `p`.
191
+
192
+ INPUT:
193
+
194
+ - ``profile`` -- when `p=2`, a tuple or list of numbers; when `p`
195
+ is odd, a pair of such lists
196
+
197
+ - ``truncation_type`` -- either 0 or `\infty`
198
+
199
+ - ``p`` -- prime number (default: 2)
200
+
201
+ - ``generic`` -- boolean (default: ``None``)
202
+
203
+ OUTPUT: ``True`` if the profile function is valid, ``False`` otherwise
204
+
205
+ See the documentation for :mod:`sage.algebras.steenrod.steenrod_algebra`
206
+ for descriptions of profile functions and how they correspond to
207
+ sub-Hopf algebras of the Steenrod algebra. Briefly: at the prime
208
+ 2, a profile function `e` is valid if it satisfies the condition
209
+
210
+ - `e(r) \geq \min( e(r-i) - i, e(i))` for all `0 < i < r`.
211
+
212
+ At odd primes, a pair of profile functions `e` and `k` are valid
213
+ if they satisfy
214
+
215
+ - `e(r) \geq \min( e(r-i) - i, e(i))` for all `0 < i < r`.
216
+
217
+ - if `k(i+j) = 1`, then either `e(i) \leq j` or `k(j) = 1` for all
218
+ `i \geq 1`, `j \geq 0`.
219
+
220
+ In this function, profile functions are lists or tuples, and
221
+ ``truncation_type`` is appended as the last element of the list
222
+ `e` before testing.
223
+
224
+ EXAMPLES:
225
+
226
+ `p=2`::
227
+
228
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import is_valid_profile
229
+ sage: is_valid_profile([3,2,1], 0)
230
+ True
231
+ sage: is_valid_profile([3,2,1], Infinity)
232
+ True
233
+ sage: is_valid_profile([1,2,3], 0)
234
+ False
235
+ sage: is_valid_profile([6,2,0], Infinity)
236
+ False
237
+ sage: is_valid_profile([0,3], 0)
238
+ False
239
+ sage: is_valid_profile([0,0,4], 0)
240
+ False
241
+ sage: is_valid_profile([0,0,0,4,0], 0)
242
+ True
243
+
244
+ Odd primes::
245
+
246
+ sage: is_valid_profile(([0,0,0], [2,1,1,1,2,2]), 0, p=3)
247
+ True
248
+ sage: is_valid_profile(([1], [2,2]), 0, p=3)
249
+ True
250
+ sage: is_valid_profile(([1], [2]), 0, p=7)
251
+ False
252
+ sage: is_valid_profile(([1,2,1], []), 0, p=7)
253
+ True
254
+ sage: is_valid_profile(([0,0,0], [2,1,1,1,2,2]), 0, p=2, generic=True)
255
+ True
256
+ """
257
+ from sage.rings.infinity import Infinity
258
+ if generic is None:
259
+ generic = p != 2
260
+ if not generic:
261
+ pro = list(profile) + [truncation_type]*len(profile)
262
+ r = 0
263
+ for pro_r in pro:
264
+ r += 1 # index of pro_r
265
+ if pro_r < Infinity:
266
+ for i in range(1,r):
267
+ if pro_r < min(pro[r-i-1] - i, pro[i-1]):
268
+ return False
269
+ else:
270
+ # p odd:
271
+ e = list(profile[0]) + [truncation_type]*len(profile[0])
272
+ k = list(profile[1])
273
+ if not set(k).issubset({1,2}):
274
+ return False
275
+ if truncation_type > 0:
276
+ k = k + [2]
277
+ else:
278
+ k = k + [1]*len(profile[0])
279
+ if len(k) > len(e):
280
+ e = e + [truncation_type] * (len(k) - len(e))
281
+ r = 0
282
+ for e_r in e:
283
+ r += 1 # index of e_r
284
+ if e_r < Infinity:
285
+ for i in range(1,r):
286
+ if e_r < min(e[r-i-1] - i, e[i-1]):
287
+ return False
288
+ r = -1
289
+ for k_r in k:
290
+ r += 1 # index of k_r
291
+ if k_r == 1:
292
+ for j in range(r):
293
+ i = r-j
294
+ if e[i-1] > j and k[j] == 2:
295
+ return False
296
+ return True
297
+
298
+
299
+ def normalize_profile(profile, precision=None, truncation_type='auto', p=2, generic=None):
300
+ r"""
301
+ Given a profile function and related data, return it in a standard form,
302
+ suitable for hashing and caching as data defining a sub-Hopf
303
+ algebra of the Steenrod algebra.
304
+
305
+ INPUT:
306
+
307
+ - ``profile`` -- a profile function in form specified below
308
+ - ``precision`` -- integer or ``None`` (default: ``None``)
309
+ - ``truncation_type`` -- 0 or `\infty` or 'auto' (default: 'auto')
310
+ - ``p`` -- prime (default: 2)
311
+ - ``generic`` -- boolean (default: ``None``)
312
+
313
+ OUTPUT:
314
+
315
+ a triple ``profile, precision, truncation_type``, in
316
+ standard form as described below.
317
+
318
+ The "standard form" is as follows: ``profile`` should be a tuple
319
+ of integers (or `\infty`) with no trailing zeroes when `p=2`, or a
320
+ pair of such when `p` is odd or `generic` is ``True``. ``precision``
321
+ should be a positive integer. ``truncation_type`` should be 0 or `\infty`.
322
+ Furthermore, this must be a valid profile, as determined by the
323
+ function :func:`is_valid_profile`. See also the documentation for
324
+ the module :mod:`sage.algebras.steenrod.steenrod_algebra` for information
325
+ about profile functions.
326
+
327
+ For the inputs: when `p=2`, ``profile`` should be a valid profile
328
+ function, and it may be entered in any of the following forms:
329
+
330
+ - a list or tuple, e.g., ``[3,2,1,1]``
331
+ - a function from positive integers to nonnegative integers (and
332
+ `\infty`), e.g., ``lambda n: n+2``. This corresponds to the
333
+ list ``[3, 4, 5, ...]``.
334
+ - ``None`` or ``Infinity`` -- use this for the profile function for
335
+ the whole Steenrod algebra. This corresponds to the list
336
+ ``[Infinity, Infinity, Infinity, ...]``
337
+
338
+ To make this hashable, it gets turned into a tuple. In the first
339
+ case it is clear how to do this; also in this case, ``precision``
340
+ is set to be one more than the length of this tuple. In the
341
+ second case, construct a tuple of length one less than
342
+ ``precision`` (default: 100). In the last case, the empty
343
+ tuple is returned and ``precision`` is set to 1.
344
+
345
+ Once a sub-Hopf algebra of the Steenrod algebra has been defined
346
+ using such a profile function, if the code requires any remaining
347
+ terms (say, terms after the 100th), then they are given by
348
+ ``truncation_type`` if that is 0 or `\infty`. If
349
+ ``truncation_type`` is 'auto', then in the case of a tuple, it
350
+ gets set to 0, while for the other cases it gets set to `\infty`.
351
+
352
+ See the examples below.
353
+
354
+ When `p` is odd, ``profile`` is a pair of "functions", so it may
355
+ have the following forms:
356
+
357
+ - a pair of lists or tuples, the second of which takes values in
358
+ the set `\{1,2\}`, e.g., ``([3,2,1,1], [1,1,2,2,1])``.
359
+
360
+ - a pair of functions, one (called `e`) from positive integers to
361
+ nonnegative integers (and `\infty`), one (called `k`) from
362
+ nonnegative integers to the set `\{1,2\}`, e.g.,
363
+ ``(lambda n: n+2, lambda n: 1)``. This corresponds to the
364
+ pair ``([3, 4, 5, ...], [1, 1, 1, ...])``.
365
+
366
+ - ``None`` or ``Infinity`` -- use this for the profile function for
367
+ the whole Steenrod algebra. This corresponds to the pair
368
+ ``([Infinity, Infinity, Infinity, ...], [2, 2, 2, ...])``.
369
+
370
+ You can also mix and match the first two, passing a pair with
371
+ first entry a list and second entry a function, for instance. The
372
+ values of ``precision`` and ``truncation_type`` are determined by
373
+ the first entry.
374
+
375
+ EXAMPLES:
376
+
377
+ `p=2`::
378
+
379
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import normalize_profile
380
+ sage: normalize_profile([1,2,1,0,0])
381
+ ((1, 2, 1), 0)
382
+
383
+ The full mod 2 Steenrod algebra::
384
+
385
+ sage: normalize_profile(Infinity)
386
+ ((), +Infinity)
387
+ sage: normalize_profile(None)
388
+ ((), +Infinity)
389
+ sage: normalize_profile(lambda n: Infinity)
390
+ ((), +Infinity)
391
+
392
+ The ``precision`` argument has no effect when the first argument
393
+ is a list or tuple::
394
+
395
+ sage: normalize_profile([1,2,1,0,0], precision=12)
396
+ ((1, 2, 1), 0)
397
+
398
+ If the first argument is a function, then construct a list of
399
+ length one less than ``precision``, by plugging in the numbers 1,
400
+ 2, ..., ``precision`` - 1::
401
+
402
+ sage: normalize_profile(lambda n: 4-n, precision=4)
403
+ ((3, 2, 1), +Infinity)
404
+ sage: normalize_profile(lambda n: 4-n, precision=4, truncation_type=0)
405
+ ((3, 2, 1), 0)
406
+
407
+ Negative numbers in profile functions are turned into zeroes::
408
+
409
+ sage: normalize_profile(lambda n: 4-n, precision=6)
410
+ ((3, 2, 1, 0, 0), +Infinity)
411
+
412
+ If it doesn't give a valid profile, an error is raised::
413
+
414
+ sage: normalize_profile(lambda n: 3, precision=4, truncation_type=0)
415
+ Traceback (most recent call last):
416
+ ...
417
+ ValueError: invalid profile
418
+ sage: normalize_profile(lambda n: 3, precision=4, truncation_type = Infinity)
419
+ ((3, 3, 3), +Infinity)
420
+
421
+ When `p` is odd, the behavior is similar::
422
+
423
+ sage: normalize_profile(([2,1], [2,2,2]), p=13)
424
+ (((2, 1), (2, 2, 2)), 0)
425
+
426
+ The full mod `p` Steenrod algebra::
427
+
428
+ sage: normalize_profile(None, p=7)
429
+ (((), ()), +Infinity)
430
+ sage: normalize_profile(Infinity, p=11)
431
+ (((), ()), +Infinity)
432
+ sage: normalize_profile((lambda n: Infinity, lambda n: 2), p=17)
433
+ (((), ()), +Infinity)
434
+
435
+ Note that as at the prime 2, the ``precision`` argument has no
436
+ effect on a list or tuple in either entry of ``profile``. If
437
+ ``truncation_type`` is 'auto', then it gets converted to either
438
+ ``0`` or ``+Infinity`` depending on the *first* entry of
439
+ ``profile``::
440
+
441
+ sage: normalize_profile(([2,1], [2,2,2]), precision=84, p=13)
442
+ (((2, 1), (2, 2, 2)), 0)
443
+ sage: normalize_profile((lambda n: 0, lambda n: 2), precision=4, p=11)
444
+ (((0, 0, 0), ()), +Infinity)
445
+ sage: normalize_profile((lambda n: 0, (1,1,1,1,1,1,1)), precision=4, p=11)
446
+ (((0, 0, 0), (1, 1, 1, 1, 1, 1, 1)), +Infinity)
447
+ sage: normalize_profile(((4,3,2,1), lambda n: 2), precision=6, p=11)
448
+ (((4, 3, 2, 1), (2, 2, 2, 2, 2)), 0)
449
+ sage: normalize_profile(((4,3,2,1), lambda n: 1), precision=3, p=11, truncation_type=Infinity)
450
+ (((4, 3, 2, 1), (1, 1)), +Infinity)
451
+
452
+ As at the prime 2, negative numbers in the first component are
453
+ converted to zeroes. Numbers in the second component must be
454
+ either 1 and 2, or else an error is raised::
455
+
456
+ sage: normalize_profile((lambda n: -n, lambda n: 1), precision=4, p=11)
457
+ (((0, 0, 0), (1, 1, 1)), +Infinity)
458
+ sage: normalize_profile([[0,0,0], [1,2,3,2,1]], p=11)
459
+ Traceback (most recent call last):
460
+ ...
461
+ ValueError: invalid profile
462
+ """
463
+ from sage.rings.infinity import Infinity
464
+ if truncation_type == 'zero':
465
+ truncation_type = 0
466
+ if truncation_type == 'infinity':
467
+ truncation_type = Infinity
468
+ if generic is None:
469
+ generic = p != 2
470
+ if not generic:
471
+ if profile is None or profile == Infinity:
472
+ # no specified profile or infinite profile: return profile
473
+ # for the entire Steenrod algebra
474
+ new_profile = ()
475
+ truncation_type = Infinity
476
+ elif isinstance(profile, (list, tuple)):
477
+ # profile is a list or tuple: use it as is. if
478
+ # truncation_type not specified, set it to 'zero'. remove
479
+ # trailing zeroes if truncation_type is 'auto' or 'zero'.
480
+ if truncation_type == 'auto':
481
+ truncation_type = 0
482
+ # remove trailing zeroes or Infinitys
483
+ while profile and profile[-1] == truncation_type:
484
+ profile = profile[:-1]
485
+ new_profile = tuple(profile)
486
+ elif callable(profile):
487
+ # profile is a function: turn it into a tuple. if
488
+ # truncation_type not specified, set it to 'infinity' if
489
+ # the function is ever infinite; otherwise set it to
490
+ # 0. remove trailing zeroes if truncation_type is
491
+ # 0, trailing Infinitys if truncation_type is oo.
492
+ if precision is None:
493
+ precision = 100
494
+ if truncation_type == 'auto':
495
+ truncation_type = Infinity
496
+ new_profile = [max(0, profile(i)) for i in range(1, precision)]
497
+ # remove trailing zeroes or Infinitys:
498
+ while new_profile and new_profile[-1] == truncation_type:
499
+ del new_profile[-1]
500
+ new_profile = tuple(new_profile)
501
+ if is_valid_profile(new_profile, truncation_type, p):
502
+ return new_profile, truncation_type
503
+ else:
504
+ raise ValueError("invalid profile")
505
+ else: # p odd
506
+ if profile is None or profile == Infinity:
507
+ # no specified profile or infinite profile: return profile
508
+ # for the entire Steenrod algebra
509
+ new_profile = ((), ())
510
+ truncation_type = Infinity
511
+ else: # profile should be a list or tuple of length 2
512
+ assert isinstance(profile, (list, tuple)) and len(profile) == 2, \
513
+ "Invalid form for profile"
514
+ e = profile[0]
515
+ k = profile[1]
516
+ if isinstance(e, (list, tuple)):
517
+ # e is a list or tuple: use it as is. if
518
+ # truncation_type not specified, set it to 0. remove
519
+ # appropriate trailing terms.
520
+ if truncation_type == 'auto':
521
+ truncation_type = 0
522
+ # remove trailing terms
523
+ while e and e[-1] == truncation_type:
524
+ e = e[:-1]
525
+ e = tuple(e)
526
+ elif callable(e):
527
+ # e is a function: turn it into a tuple. if
528
+ # truncation_type not specified, set it to 'infinity'
529
+ # if the function is ever infinite; otherwise set it
530
+ # to 0. remove appropriate trailing terms.
531
+ if precision is None:
532
+ e_precision = 100
533
+ else:
534
+ e_precision = precision
535
+ if truncation_type == 'auto':
536
+ truncation_type = Infinity
537
+ e = [max(0, e(i)) for i in range(1, e_precision)]
538
+ # remove trailing terms
539
+ while e and e[-1] == truncation_type:
540
+ del e[-1]
541
+ e = tuple(e)
542
+ if isinstance(k, (list, tuple)):
543
+ # k is a list or tuple: use it as is.
544
+ k = tuple(k)
545
+ elif callable(k):
546
+ # k is a function: turn it into a tuple.
547
+ if precision is None:
548
+ k_precision = 100
549
+ else:
550
+ k_precision = precision
551
+ k = tuple([k(i) for i in range(k_precision-1)])
552
+ # Remove trailing ones from k if truncation_type is 'zero',
553
+ # remove trailing twos if truncation_type is 'Infinity'.
554
+ if truncation_type == 0:
555
+ while k and k[-1] == 1:
556
+ k = k[:-1]
557
+ else:
558
+ while k and k[-1] == 2:
559
+ k = k[:-1]
560
+ new_profile = (e, k)
561
+ if is_valid_profile(new_profile, truncation_type, p, generic=True):
562
+ return new_profile, truncation_type
563
+ else:
564
+ raise ValueError("invalid profile")
565
+
566
+ ######################################################
567
+ # string representations for elements
568
+
569
+
570
+ def milnor_mono_to_string(mono, latex=False, generic=False):
571
+ r"""
572
+ String representation of element of the Milnor basis.
573
+
574
+ This is used by the _repr_ and _latex_ methods.
575
+
576
+ INPUT:
577
+
578
+ - ``mono`` -- if `generic=False`, tuple of nonnegative integers (a,b,c,...);
579
+ if `generic=True`, pair of tuples of nonnegative integers ((e0, e1, e2,
580
+ ...), (r1, r2, ...))
581
+
582
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
583
+ LaTeX string
584
+
585
+ - ``generic`` -- whether to format generically, or for the prime 2 (default)
586
+
587
+ OUTPUT: ``rep`` -- string
588
+
589
+ This returns a string like ``Sq(a,b,c,...)`` when `generic=False`, or a string
590
+ like ``Q_e0 Q_e1 Q_e2 ... P(r1, r2, ...)`` when `generic=True`.
591
+
592
+ EXAMPLES::
593
+
594
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import milnor_mono_to_string
595
+ sage: milnor_mono_to_string((1,2,3,4))
596
+ 'Sq(1,2,3,4)'
597
+ sage: milnor_mono_to_string((1,2,3,4),latex=True)
598
+ '\\text{Sq}(1,2,3,4)'
599
+ sage: milnor_mono_to_string(((1,0), (2,3,1)), generic=True)
600
+ 'Q_{1} Q_{0} P(2,3,1)'
601
+ sage: milnor_mono_to_string(((1,0), (2,3,1)), latex=True, generic=True)
602
+ 'Q_{1} Q_{0} \\mathcal{P}(2,3,1)'
603
+
604
+ The empty tuple represents the unit element::
605
+
606
+ sage: milnor_mono_to_string(())
607
+ '1'
608
+ sage: milnor_mono_to_string((), generic=True)
609
+ '1'
610
+ """
611
+ if latex:
612
+ if not generic:
613
+ sq = "\\text{Sq}"
614
+ P = "\\text{Sq}"
615
+ else:
616
+ P = "\\mathcal{P}"
617
+ else:
618
+ if not generic:
619
+ sq = "Sq"
620
+ P = "Sq"
621
+ else:
622
+ P = "P"
623
+ if mono == () or mono == (0,) or (generic and len(mono[0]) + len(mono[1]) == 0):
624
+ return "1"
625
+ else:
626
+ if not generic:
627
+ string = sq + "(" + str(mono[0])
628
+ for n in mono[1:]:
629
+ string = string + "," + str(n)
630
+ string = string + ")"
631
+ else:
632
+ string = ""
633
+ if len(mono[0]) > 0:
634
+ for e in mono[0]:
635
+ string = string + "Q_{" + str(e) + "} "
636
+ if len(mono[1]) > 0:
637
+ string = string + P + "(" + str(mono[1][0])
638
+ for n in mono[1][1:]:
639
+ string = string + "," + str(n)
640
+ string = string + ")"
641
+ return string.strip(" ")
642
+
643
+
644
+ def serre_cartan_mono_to_string(mono, latex=False, generic=False):
645
+ r"""
646
+ String representation of element of the Serre-Cartan basis.
647
+
648
+ This is used by the _repr_ and _latex_ methods.
649
+
650
+ INPUT:
651
+
652
+ - ``mono`` -- tuple of positive integers (a,b,c,...) when `generic=False`,
653
+ or tuple (e0, n1, e1, n2, ...) when `generic=True`, where each ei is 0 or
654
+ 1, and each ni is positive
655
+
656
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
657
+ LaTeX string
658
+
659
+ - ``generic`` -- whether to format generically, or for the prime 2 (default)
660
+
661
+ OUTPUT: ``rep`` -- string
662
+
663
+ This returns a string like ``Sq^{a} Sq^{b} Sq^{c} ...`` when
664
+ `generic=False`, or a string like
665
+ ``\beta^{e0} P^{n1} \beta^{e1} P^{n2} ...`` when `generic=True`.
666
+ is odd.
667
+
668
+ EXAMPLES::
669
+
670
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import serre_cartan_mono_to_string
671
+ sage: serre_cartan_mono_to_string((1,2,3,4))
672
+ 'Sq^{1} Sq^{2} Sq^{3} Sq^{4}'
673
+ sage: serre_cartan_mono_to_string((1,2,3,4),latex=True)
674
+ '\\text{Sq}^{1} \\text{Sq}^{2} \\text{Sq}^{3} \\text{Sq}^{4}'
675
+ sage: serre_cartan_mono_to_string((0,5,1,1,0), generic=True)
676
+ 'P^{5} beta P^{1}'
677
+ sage: serre_cartan_mono_to_string((0,5,1,1,0), generic=True, latex=True)
678
+ '\\mathcal{P}^{5} \\beta \\mathcal{P}^{1}'
679
+
680
+ The empty tuple represents the unit element 1::
681
+
682
+ sage: serre_cartan_mono_to_string(())
683
+ '1'
684
+ sage: serre_cartan_mono_to_string((), generic=True)
685
+ '1'
686
+ """
687
+ if latex:
688
+ if not generic:
689
+ sq = "\\text{Sq}"
690
+ P = "\\text{Sq}"
691
+ else:
692
+ P = "\\mathcal{P}"
693
+ else:
694
+ if not generic:
695
+ sq = "Sq"
696
+ P = "Sq"
697
+ else:
698
+ P = "P"
699
+ if len(mono) == 0 or mono == (0,):
700
+ return "1"
701
+ else:
702
+ if not generic:
703
+ string = ""
704
+ for n in mono:
705
+ string = string + sq + "^{" + str(n) + "} "
706
+ else:
707
+ string = ""
708
+ index = 0
709
+ for n in mono:
710
+ from sage.misc.functional import is_even
711
+ if is_even(index):
712
+ if n == 1:
713
+ if latex:
714
+ string = string + "\\beta "
715
+ else:
716
+ string = string + "beta "
717
+ else:
718
+ string = string + P + "^{" + str(n) + "} "
719
+ index += 1
720
+ return string.strip(" ")
721
+
722
+
723
+ def wood_mono_to_string(mono, latex=False):
724
+ r"""
725
+ String representation of element of Wood's Y and Z bases.
726
+
727
+ This is used by the _repr_ and _latex_ methods.
728
+
729
+ INPUT:
730
+
731
+ - ``mono`` -- tuple of pairs of nonnegative integers (s,t)
732
+
733
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
734
+ LaTeX string
735
+
736
+ OUTPUT:
737
+
738
+ ``string`` -- concatenation of strings of the form
739
+ ``Sq^{2^s (2^{t+1}-1)}`` for each pair (s,t)
740
+
741
+ EXAMPLES::
742
+
743
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import wood_mono_to_string
744
+ sage: wood_mono_to_string(((1,2),(3,0)))
745
+ 'Sq^{14} Sq^{8}'
746
+ sage: wood_mono_to_string(((1,2),(3,0)),latex=True)
747
+ '\\text{Sq}^{14} \\text{Sq}^{8}'
748
+
749
+ The empty tuple represents the unit element::
750
+
751
+ sage: wood_mono_to_string(())
752
+ '1'
753
+ """
754
+ if latex:
755
+ sq = "\\text{Sq}"
756
+ else:
757
+ sq = "Sq"
758
+ if len(mono) == 0:
759
+ return "1"
760
+ else:
761
+ string = ""
762
+ for (s,t) in mono:
763
+ string = string + sq + "^{" + \
764
+ str(2**s * (2**(t+1)-1)) + "} "
765
+ return string.strip(" ")
766
+
767
+
768
+ def wall_mono_to_string(mono, latex=False):
769
+ """
770
+ String representation of element of Wall's basis.
771
+
772
+ This is used by the _repr_ and _latex_ methods.
773
+
774
+ INPUT:
775
+
776
+ - ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
777
+ >= k`
778
+
779
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
780
+ LaTeX string
781
+
782
+ OUTPUT:
783
+
784
+ ``string`` -- concatenation of strings ``Q^{m}_{k}`` for each pair (m,k)
785
+
786
+ EXAMPLES::
787
+
788
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import wall_mono_to_string
789
+ sage: wall_mono_to_string(((1,2),(3,0)))
790
+ 'Q^{1}_{2} Q^{3}_{0}'
791
+ sage: wall_mono_to_string(((1,2),(3,0)),latex=True)
792
+ 'Q^{1}_{2} Q^{3}_{0}'
793
+
794
+ The empty tuple represents the unit element::
795
+
796
+ sage: wall_mono_to_string(())
797
+ '1'
798
+ """
799
+ if len(mono) == 0:
800
+ return "1"
801
+ else:
802
+ string = ""
803
+ for (m,k) in mono:
804
+ string = string + "Q^{" + str(m) + "}_{" \
805
+ + str(k) + "} "
806
+ return string.strip(" ")
807
+
808
+
809
+ def wall_long_mono_to_string(mono, latex=False):
810
+ r"""
811
+ Alternate string representation of element of Wall's basis.
812
+
813
+ This is used by the _repr_ and _latex_ methods.
814
+
815
+ INPUT:
816
+
817
+ - ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
818
+ >= k`
819
+
820
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
821
+ LaTeX string
822
+
823
+ OUTPUT:
824
+
825
+ ``string`` -- concatenation of strings of the form ``Sq^(2^m)``
826
+
827
+ EXAMPLES::
828
+
829
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import wall_long_mono_to_string
830
+ sage: wall_long_mono_to_string(((1,2),(3,0)))
831
+ 'Sq^{1} Sq^{2} Sq^{4} Sq^{8}'
832
+ sage: wall_long_mono_to_string(((1,2),(3,0)),latex=True)
833
+ '\\text{Sq}^{1} \\text{Sq}^{2} \\text{Sq}^{4} \\text{Sq}^{8}'
834
+
835
+ The empty tuple represents the unit element::
836
+
837
+ sage: wall_long_mono_to_string(())
838
+ '1'
839
+ """
840
+ if latex:
841
+ sq = "\\text{Sq}"
842
+ else:
843
+ sq = "Sq"
844
+ if len(mono) == 0:
845
+ return "1"
846
+ else:
847
+ string = ""
848
+ for (m,k) in mono:
849
+ for i in range(k,m+1):
850
+ string = string + sq + "^{" + str(2**i) + "} "
851
+ return string.strip(" ")
852
+
853
+
854
+ def arnonA_mono_to_string(mono, latex=False, p=2):
855
+ """
856
+ String representation of element of Arnon's A basis.
857
+
858
+ This is used by the _repr_ and _latex_ methods.
859
+
860
+ INPUT:
861
+
862
+ - ``mono`` -- tuple of pairs of nonnegative integers
863
+ (m,k) with `m >= k`
864
+
865
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
866
+ LaTeX string
867
+
868
+ OUTPUT: concatenation of strings of the form ``X^{m}_{k}`` for each pair
869
+ (m,k)
870
+
871
+ EXAMPLES::
872
+
873
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import arnonA_mono_to_string
874
+ sage: arnonA_mono_to_string(((1,2),(3,0)))
875
+ 'X^{1}_{2} X^{3}_{0}'
876
+ sage: arnonA_mono_to_string(((1,2),(3,0)),latex=True)
877
+ 'X^{1}_{2} X^{3}_{0}'
878
+
879
+ The empty tuple represents the unit element::
880
+
881
+ sage: arnonA_mono_to_string(())
882
+ '1'
883
+ """
884
+ if len(mono) == 0:
885
+ return "1"
886
+ else:
887
+ string = ""
888
+ for (m,k) in mono:
889
+ string = string + "X^{" + str(m) + "}_{" \
890
+ + str(k) + "} "
891
+ return string.strip(" ")
892
+
893
+
894
+ def arnonA_long_mono_to_string(mono, latex=False, p=2):
895
+ r"""
896
+ Alternate string representation of element of Arnon's A basis.
897
+
898
+ This is used by the _repr_ and _latex_ methods.
899
+
900
+ INPUT:
901
+
902
+ - ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
903
+ >= k`
904
+
905
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
906
+ LaTeX string
907
+
908
+ OUTPUT:
909
+
910
+ ``string`` -- concatenation of strings of the form ``Sq(2^m)``
911
+
912
+ EXAMPLES::
913
+
914
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import arnonA_long_mono_to_string
915
+ sage: arnonA_long_mono_to_string(((1,2),(3,0)))
916
+ 'Sq^{8} Sq^{4} Sq^{2} Sq^{1}'
917
+ sage: arnonA_long_mono_to_string(((1,2),(3,0)),latex=True)
918
+ '\\text{Sq}^{8} \\text{Sq}^{4} \\text{Sq}^{2} \\text{Sq}^{1}'
919
+
920
+ The empty tuple represents the unit element::
921
+
922
+ sage: arnonA_long_mono_to_string(())
923
+ '1'
924
+ """
925
+ if latex:
926
+ sq = "\\text{Sq}"
927
+ else:
928
+ sq = "Sq"
929
+ if len(mono) == 0:
930
+ return "1"
931
+ else:
932
+ string = ""
933
+ for (m,k) in mono:
934
+ for i in range(m,k-1,-1):
935
+ string = string + sq + "^{" + str(2**i) + "} "
936
+ return string.strip(" ")
937
+
938
+
939
+ def pst_mono_to_string(mono, latex=False, generic=False):
940
+ r"""
941
+ String representation of element of a `P^s_t`-basis.
942
+
943
+ This is used by the _repr_ and _latex_ methods.
944
+
945
+ INPUT:
946
+
947
+ - ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
948
+ 0`
949
+
950
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
951
+ LaTeX string
952
+
953
+ - ``generic`` -- whether to format generically, or for the prime 2 (default)
954
+
955
+ OUTPUT:
956
+
957
+ ``string`` -- concatenation of strings of the form ``P^{s}_{t}``
958
+ for each pair (s,t)
959
+
960
+ EXAMPLES::
961
+
962
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import pst_mono_to_string
963
+ sage: pst_mono_to_string(((1,2),(0,3)), generic=False)
964
+ 'P^{1}_{2} P^{0}_{3}'
965
+ sage: pst_mono_to_string(((1,2),(0,3)),latex=True, generic=False)
966
+ 'P^{1}_{2} P^{0}_{3}'
967
+ sage: pst_mono_to_string(((1,4), (((1,2), 1),((0,3), 2))), generic=True)
968
+ 'Q_{1} Q_{4} P^{1}_{2} (P^{0}_{3})^2'
969
+ sage: pst_mono_to_string(((1,4), (((1,2), 1),((0,3), 2))), latex=True, generic=True)
970
+ 'Q_{1} Q_{4} P^{1}_{2} (P^{0}_{3})^{2}'
971
+
972
+ The empty tuple represents the unit element::
973
+
974
+ sage: pst_mono_to_string(())
975
+ '1'
976
+ """
977
+ if len(mono) == 0:
978
+ return "1"
979
+ else:
980
+ string = ""
981
+ if not generic:
982
+ for (s,t) in mono:
983
+ string = string + "P^{" + str(s) + "}_{" \
984
+ + str(t) + "} "
985
+ else:
986
+ for e in mono[0]:
987
+ string = string + "Q_{" + str(e) + "} "
988
+ for ((s,t), n) in mono[1]:
989
+ if n == 1:
990
+ string = string + "P^{" + str(s) + "}_{" \
991
+ + str(t) + "} "
992
+ else:
993
+ if latex:
994
+ pow = "{%s}" % n
995
+ else:
996
+ pow = str(n)
997
+ string = string + "(P^{" + str(s) + "}_{" \
998
+ + str(t) + "})^" + pow + " "
999
+ return string.strip(" ")
1000
+
1001
+
1002
+ def comm_mono_to_string(mono, latex=False, generic=False):
1003
+ r"""
1004
+ String representation of element of a commutator basis.
1005
+
1006
+ This is used by the _repr_ and _latex_ methods.
1007
+
1008
+ INPUT:
1009
+
1010
+ - ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
1011
+ 0`
1012
+
1013
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
1014
+ LaTeX string
1015
+
1016
+ - ``generic`` -- whether to format generically, or for the prime 2 (default)
1017
+
1018
+ OUTPUT:
1019
+
1020
+ ``string`` -- concatenation of strings of the form ``c_{s,t}``
1021
+ for each pair (s,t)
1022
+
1023
+ EXAMPLES::
1024
+
1025
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import comm_mono_to_string
1026
+ sage: comm_mono_to_string(((1,2),(0,3)), generic=False)
1027
+ 'c_{1,2} c_{0,3}'
1028
+ sage: comm_mono_to_string(((1,2),(0,3)), latex=True)
1029
+ 'c_{1,2} c_{0,3}'
1030
+ sage: comm_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), generic=True)
1031
+ 'Q_{1} Q_{4} c_{1,2} c_{0,3}^2'
1032
+ sage: comm_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), latex=True, generic=True)
1033
+ 'Q_{1} Q_{4} c_{1,2} c_{0,3}^{2}'
1034
+
1035
+ The empty tuple represents the unit element::
1036
+
1037
+ sage: comm_mono_to_string(())
1038
+ '1'
1039
+ """
1040
+ if len(mono) == 0:
1041
+ return "1"
1042
+ else:
1043
+ string = ""
1044
+ if not generic:
1045
+ for (s,t) in mono:
1046
+ string = string + "c_{" + str(s) + "," \
1047
+ + str(t) + "} "
1048
+ else:
1049
+ for e in mono[0]:
1050
+ string = string + "Q_{" + str(e) + "} "
1051
+ for ((s,t), n) in mono[1]:
1052
+ string = string + "c_{" + str(s) + "," \
1053
+ + str(t) + "}"
1054
+ if n > 1:
1055
+ if latex:
1056
+ pow = "^{%s}" % n
1057
+ else:
1058
+ pow = "^%s" % n
1059
+ string = string + pow
1060
+ string = string + " "
1061
+ return string.strip(" ")
1062
+
1063
+
1064
+ def comm_long_mono_to_string(mono, p, latex=False, generic=False):
1065
+ r"""
1066
+ Alternate string representation of element of a commutator basis.
1067
+
1068
+ Okay in low dimensions, but gets unwieldy as the dimension
1069
+ increases.
1070
+
1071
+ INPUT:
1072
+
1073
+ - ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
1074
+ 0`
1075
+
1076
+ - ``latex`` -- boolean (default: ``False``); if ``True``, output
1077
+ LaTeX string
1078
+
1079
+ - ``generic`` -- whether to format generically, or for the prime 2 (default)
1080
+
1081
+ OUTPUT:
1082
+
1083
+ ``string`` -- concatenation of strings of the form ``s_{2^s... 2^(s+t-1)}``
1084
+ for each pair (s,t)
1085
+
1086
+ EXAMPLES::
1087
+
1088
+ sage: from sage.algebras.steenrod.steenrod_algebra_misc import comm_long_mono_to_string
1089
+ sage: comm_long_mono_to_string(((1,2),(0,3)), 2)
1090
+ 's_{24} s_{124}'
1091
+ sage: comm_long_mono_to_string(((1,2),(0,3)), 2, latex=True)
1092
+ 's_{24} s_{124}'
1093
+ sage: comm_long_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), 5, generic=True)
1094
+ 'Q_{1} Q_{4} s_{5,25} s_{1,5,25}^2'
1095
+ sage: comm_long_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), 3, latex=True, generic=True)
1096
+ 'Q_{1} Q_{4} s_{3,9} s_{1,3,9}^{2}'
1097
+
1098
+ The empty tuple represents the unit element::
1099
+
1100
+ sage: comm_long_mono_to_string((), p=2)
1101
+ '1'
1102
+ """
1103
+ if len(mono) == 0:
1104
+ return "1"
1105
+ else:
1106
+ string = ""
1107
+ if not generic:
1108
+ for (s,t) in mono:
1109
+ if s + t > 4:
1110
+ comma = ","
1111
+ else:
1112
+ comma = ""
1113
+ string = string + "s_{"
1114
+ for i in range(t):
1115
+ string = string + str(2**(s+i)) + comma
1116
+ string = string.strip(",") + "} "
1117
+ else:
1118
+ for e in mono[0]:
1119
+ string = string + "Q_{" + str(e) + "} "
1120
+ for ((s,t), n) in mono[1]:
1121
+ string = string + "s_{"
1122
+ for i in range(t):
1123
+ string = string + str(p**(s+i)) + ","
1124
+ string = string.strip(",") + "}"
1125
+ if n > 1:
1126
+ if latex:
1127
+ pow = "^{%s}" % n
1128
+ else:
1129
+ pow = "^%s" % n
1130
+ string = string + pow
1131
+ string = string + " "
1132
+ return string.strip(" ")
1133
+
1134
+ # miscellany:
1135
+
1136
+
1137
+ def convert_perm(m):
1138
+ """
1139
+ Convert tuple m of nonnegative integers to a permutation in
1140
+ one-line form.
1141
+
1142
+ INPUT:
1143
+
1144
+ - ``m`` -- tuple of nonnegative integers with no repetitions
1145
+
1146
+ OUTPUT:
1147
+
1148
+ ``list`` -- conversion of ``m`` to a permutation of the set
1149
+ 1,2,...,len(m)
1150
+
1151
+ If ``m=(3,7,4)``, then one can view ``m`` as representing the
1152
+ permutation of the set `(3,4,7)` sending 3 to 3, 4 to 7, and 7 to
1153
+ 4. This function converts ``m`` to the list ``[1,3,2]``, which
1154
+ represents essentially the same permutation, but of the set
1155
+ `(1,2,3)`. This list can then be passed to :func:`Permutation
1156
+ <sage.combinat.permutation.Permutation>`, and its signature can be
1157
+ computed.
1158
+
1159
+ EXAMPLES::
1160
+
1161
+ sage: sage.algebras.steenrod.steenrod_algebra_misc.convert_perm((3,7,4))
1162
+ [1, 3, 2]
1163
+ sage: sage.algebras.steenrod.steenrod_algebra_misc.convert_perm((5,0,6,3))
1164
+ [3, 1, 4, 2]
1165
+ """
1166
+ m2 = sorted(m)
1167
+ return [list(m2).index(x)+1 for x in m]