passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,809 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Some useful functions for the matroid class.
4
+
5
+ For direct access to the methods :meth:`newlabel`, :meth:`setprint` and
6
+ :meth:`get_nonisomorphic_matroids`, type::
7
+
8
+ sage: from sage.matroids.advanced import *
9
+
10
+ See also :mod:`sage.matroids.advanced`.
11
+
12
+ AUTHORS:
13
+
14
+ - Stefan van Zwam (2011-06-24): initial version
15
+ """
16
+ # ****************************************************************************
17
+ # Copyright (C) 2013 Rudi Pendavingh <rudi.pendavingh@gmail.com>
18
+ # Copyright (C) 2013 Stefan van Zwam <stefanvanzwam@gmail.com>
19
+ #
20
+ #
21
+ # Distributed under the terms of the GNU General Public License (GPL)
22
+ # as published by the Free Software Foundation; either version 2 of
23
+ # the License, or (at your option) any later version.
24
+ # https://www.gnu.org/licenses/
25
+ # ****************************************************************************
26
+
27
+ from collections.abc import Iterable
28
+ from sage.matrix.constructor import Matrix
29
+ from sage.rings.integer_ring import ZZ
30
+ from sage.rings.rational_field import QQ
31
+ from sage.structure.all import SageObject
32
+ from operator import itemgetter
33
+
34
+
35
+ def setprint(X):
36
+ """
37
+ Print nested data structures nicely.
38
+
39
+ Python's data structures ``set`` and ``frozenset`` do not print nicely.
40
+ This function can be used as replacement for ``print`` to overcome this.
41
+ For direct access to ``setprint``, run::
42
+
43
+ sage: from sage.matroids.advanced import *
44
+
45
+ .. NOTE::
46
+
47
+ This function will be redundant when Sage moves to Python 3, since the
48
+ default ``print`` will suffice then.
49
+
50
+ INPUT:
51
+
52
+ - ``X`` -- any Python object
53
+
54
+ OUTPUT: none; however, the function prints a nice representation of ``X``
55
+
56
+ EXAMPLES:
57
+
58
+ Output looks much better::
59
+
60
+ sage: from sage.matroids.advanced import setprint
61
+ sage: L = [{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {4, 1, 3}]
62
+ sage: print(L)
63
+ [{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {1, 3, 4}]
64
+ sage: setprint(L)
65
+ [{1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}]
66
+
67
+ Note that for iterables, the effect can be undesirable::
68
+
69
+ sage: from sage.matroids.advanced import setprint
70
+ sage: M = matroids.catalog.Fano().delete('efg')
71
+ sage: M.bases()
72
+ SetSystem of 3 sets over 4 elements
73
+ sage: setprint(M.bases())
74
+ [{'a', 'b', 'c'}, {'a', 'b', 'd'}, {'a', 'c', 'd'}]
75
+
76
+ An exception was made for subclasses of SageObject::
77
+
78
+ sage: from sage.matroids.advanced import setprint
79
+ sage: G = graphs.PetersenGraph() # needs sage.graphs
80
+ sage: list(G) # needs sage.graphs
81
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
82
+ sage: setprint(G) # needs sage.graphs
83
+ Petersen graph: Graph on 10 vertices
84
+ """
85
+ print(setprint_s(X, toplevel=True))
86
+
87
+
88
+ def setprint_s(X, toplevel=False):
89
+ """
90
+ Create the string for use by ``setprint()``.
91
+
92
+ INPUT:
93
+
94
+ - ``X`` -- any Python object
95
+ - ``toplevel`` -- boolean (default: ``False``); indicates whether this is a
96
+ recursion or not
97
+
98
+ OUTPUT:
99
+
100
+ A string representation of the object, with nice notation for sets and
101
+ frozensets.
102
+
103
+ EXAMPLES::
104
+
105
+ sage: from sage.matroids.utilities import setprint_s
106
+ sage: L = [{1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {4, 1, 3}]
107
+ sage: setprint_s(L)
108
+ '[{1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}]'
109
+
110
+ The ``toplevel`` argument only affects strings, to mimic ``print``'s
111
+ behavior::
112
+
113
+ sage: X = 'abcd'
114
+ sage: setprint_s(X)
115
+ "'abcd'"
116
+ sage: setprint_s(X, toplevel=True)
117
+ 'abcd'
118
+ """
119
+ if isinstance(X, (frozenset, set)):
120
+ return '{' + ', '.join(sorted(setprint_s(x) for x in X)) + '}'
121
+ elif isinstance(X, dict):
122
+ return '{' + ', '.join(sorted(setprint_s(key) + ': ' + setprint_s(val)
123
+ for key, val in X.items())) + '}'
124
+ elif isinstance(X, str):
125
+ if toplevel:
126
+ return X
127
+ else:
128
+ return "'" + X + "'"
129
+ elif isinstance(X, Iterable) and not isinstance(X, SageObject):
130
+ return '[' + ', '.join(sorted(setprint_s(x) for x in X)) + ']'
131
+ else:
132
+ return repr(X)
133
+
134
+
135
+ def newlabel(groundset):
136
+ r"""
137
+ Create a new element label different from the labels in ``groundset``.
138
+
139
+ INPUT:
140
+
141
+ - ``groundset`` -- set of objects
142
+
143
+ OUTPUT: string not in the set ``groundset``
144
+
145
+ For direct access to ``newlabel``, run::
146
+
147
+ sage: from sage.matroids.advanced import *
148
+
149
+ ALGORITHM:
150
+
151
+ #. Create a set of all one-character alphanumeric strings.
152
+ #. Remove the string representation of each existing element from this
153
+ list.
154
+ #. If the list is nonempty, return any element.
155
+ #. Otherwise, return the concatenation of the strings of each existing
156
+ element, preceded by 'e'.
157
+
158
+ EXAMPLES::
159
+
160
+ sage: from sage.matroids.advanced import newlabel
161
+ sage: S = set(['a', 42, 'b'])
162
+ sage: newlabel(S) in S
163
+ False
164
+
165
+ sage: S = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
166
+ sage: t = newlabel(S)
167
+ sage: len(t)
168
+ 63
169
+ sage: t[0]
170
+ 'e'
171
+ """
172
+ char_list = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
173
+ char_list.difference_update([str(e) for e in groundset])
174
+ try:
175
+ s = char_list.pop()
176
+ except KeyError:
177
+ s = 'e' + ''.join([str(e) for e in groundset])
178
+ return s
179
+
180
+
181
+ def sanitize_contractions_deletions(matroid, contractions, deletions):
182
+ r"""
183
+ Return a fixed version of sets ``contractions`` and ``deletions``.
184
+
185
+ INPUT:
186
+
187
+ - ``matroid`` -- a :class:`Matroid <sage.matroids.matroid.Matroid>`
188
+ instance
189
+ - ``contractions`` -- a subset of the groundset
190
+ - ``deletions`` -- a subset of the groundset
191
+
192
+ OUTPUT: an independent set ``C`` and a coindependent set ``D`` such that
193
+
194
+ ``matroid / contractions \ deletions == matroid / C \ D``
195
+
196
+ Raise an error if either is not a subset of the groundset of ``matroid``
197
+ or if they are not disjoint.
198
+
199
+ This function is used by the
200
+ :meth:`Matroid.minor() <sage.matroids.matroid.Matroid.minor>` method.
201
+
202
+ EXAMPLES::
203
+
204
+ sage: from sage.matroids.utilities import setprint
205
+ sage: from sage.matroids.utilities import sanitize_contractions_deletions
206
+ sage: M = matroids.catalog.Fano()
207
+ sage: setprint(sanitize_contractions_deletions(M, 'abc', 'defg'))
208
+ [{'a', 'b', 'c'}, {'d', 'e', 'f', 'g'}]
209
+ sage: setprint(sanitize_contractions_deletions(M, 'defg', 'abc'))
210
+ [{'a', 'b', 'c', 'f'}, {'d', 'e', 'g'}]
211
+ sage: setprint(sanitize_contractions_deletions(M, [1, 2, 3], 'efg'))
212
+ Traceback (most recent call last):
213
+ ...
214
+ ValueError: [1, 2, 3] is not a subset of the groundset
215
+ sage: setprint(sanitize_contractions_deletions(M, 'efg', [1, 2, 3]))
216
+ Traceback (most recent call last):
217
+ ...
218
+ ValueError: [1, 2, 3] is not a subset of the groundset
219
+ sage: setprint(sanitize_contractions_deletions(M, 'ade', 'efg'))
220
+ Traceback (most recent call last):
221
+ ...
222
+ ValueError: contraction and deletion sets are not disjoint.
223
+ """
224
+ if not contractions:
225
+ contractions = frozenset()
226
+ else:
227
+ contractions = matroid._subset(contractions)
228
+
229
+ if not deletions:
230
+ deletions = frozenset()
231
+ else:
232
+ deletions = matroid._subset(deletions)
233
+
234
+ if not contractions.isdisjoint(deletions):
235
+ raise ValueError("contraction and deletion sets are not disjoint.")
236
+
237
+ conset = matroid._max_independent(contractions)
238
+ delset = matroid._max_coindependent(deletions)
239
+
240
+ return conset.union(deletions.difference(delset)), delset.union(contractions.difference(conset))
241
+
242
+
243
+ def make_regular_matroid_from_matroid(matroid):
244
+ r"""
245
+ Attempt to construct a regular representation of a matroid.
246
+
247
+ INPUT:
248
+
249
+ - ``matroid`` -- matroid
250
+
251
+ OUTPUT:
252
+
253
+ Return a `(0, 1, -1)`-matrix over the integers such that, if the input is
254
+ a regular matroid, then the output is a totally unimodular matrix
255
+ representing that matroid.
256
+
257
+ EXAMPLES::
258
+
259
+ sage: from sage.matroids.utilities import make_regular_matroid_from_matroid
260
+ sage: make_regular_matroid_from_matroid( # needs sage.graphs
261
+ ....: matroids.CompleteGraphic(6)).is_isomorphic(
262
+ ....: matroids.CompleteGraphic(6))
263
+ True
264
+ """
265
+ import sage.matroids.linear_matroid
266
+ M = matroid
267
+ if isinstance(M, sage.matroids.linear_matroid.RegularMatroid):
268
+ return M
269
+
270
+ from sage.graphs.bipartite_graph import BipartiteGraph
271
+
272
+ rk = M.full_rank()
273
+ # First create a reduced 0-1 matrix
274
+ B = list(M.basis())
275
+ NB = list(M.groundset().difference(B))
276
+ dB = {}
277
+ i = 0
278
+ for e in B:
279
+ dB[e] = i
280
+ i += 1
281
+ dNB = {}
282
+ i = 0
283
+ for e in NB:
284
+ dNB[e] = i
285
+ i += 1
286
+ A = Matrix(ZZ, len(B), len(NB), 0)
287
+ G = BipartiteGraph(A.transpose()) # Sage's BipartiteGraph uses the column set as first color class. This is an edgeless graph.
288
+ for e in NB:
289
+ C = M.circuit(B + [e])
290
+ for f in C.difference([e]):
291
+ A[dB[f], dNB[e]] = 1
292
+ # Change some entries from -1 to 1
293
+ entries = list(BipartiteGraph(A.transpose()).edges(labels=False, sort=False))
294
+ while entries:
295
+ L = [G.shortest_path(u, v) for u, v in entries]
296
+ mindex, minval = min(enumerate(L), key=lambda x: len(x[1]))
297
+
298
+ # if minval = 0, there is an edge not spanned by the current subgraph. Its entry is free to be scaled any way.
299
+ if len(minval) > 0: # DUBIOUS !!
300
+ # Check the subdeterminant
301
+ S = frozenset(L[mindex])
302
+ rows = []
303
+ cols = []
304
+ for i in S:
305
+ if i < rk:
306
+ rows.append(i)
307
+ else:
308
+ cols.append(i - rk)
309
+ if A[rows, cols].det() != 0:
310
+ A[entries[mindex][0], entries[mindex][1] - rk] = -1
311
+ G.add_edge(entries[mindex][0], entries[mindex][1])
312
+ entries.pop(mindex)
313
+ return sage.matroids.linear_matroid.RegularMatroid(groundset=B + NB, reduced_matrix=A)
314
+
315
+
316
+ def get_nonisomorphic_matroids(MSet):
317
+ """
318
+ Return non-isomorphic members of the matroids in set ``MSet``.
319
+
320
+ For direct access to ``get_nonisomorphic_matroids``, run::
321
+
322
+ sage: from sage.matroids.advanced import *
323
+
324
+ INPUT:
325
+
326
+ - ``MSet`` -- an iterable whose members are matroids
327
+
328
+ OUTPUT:
329
+
330
+ A list containing one representative of each isomorphism class of
331
+ members of ``MSet``.
332
+
333
+ EXAMPLES::
334
+
335
+ sage: from sage.matroids.advanced import *
336
+ sage: L = matroids.Uniform(3, 5).extensions()
337
+ sage: len(list(L))
338
+ 32
339
+ sage: len(get_nonisomorphic_matroids(L))
340
+ 5
341
+ """
342
+ OutSet = []
343
+ for M in MSet:
344
+ seen = False
345
+ for N in OutSet:
346
+ if N.is_isomorphic(M):
347
+ seen = True
348
+ break
349
+ if not seen:
350
+ OutSet.append(M)
351
+ return OutSet
352
+
353
+
354
+ def spanning_forest(M):
355
+ r"""
356
+ Return a list of edges of a spanning forest of the bipartite
357
+ graph defined by `M`
358
+
359
+ INPUT:
360
+
361
+ - ``M`` -- a matrix defining a bipartite graph G. The vertices are the
362
+ rows and columns, if `M[i,j]` is nonzero, then there is an edge
363
+ between row `i` and column `j`.
364
+
365
+ OUTPUT:
366
+
367
+ A list of tuples `(r_i,c_i)` representing edges between row `r_i` and
368
+ column `c_i`.
369
+
370
+ EXAMPLES::
371
+
372
+ sage: from sage.matroids.utilities import spanning_forest
373
+ sage: len(spanning_forest(matrix([[1,1,1],[1,1,1],[1,1,1]]))) # needs sage.graphs
374
+ 5
375
+ sage: len(spanning_forest(matrix([[0,0,1],[0,1,0],[0,1,0]]))) # needs sage.graphs
376
+ 3
377
+ """
378
+ from sage.graphs.graph import Graph
379
+ from sage.graphs.spanning_tree import kruskal
380
+
381
+ # Given a matrix, produce a spanning tree
382
+ G = Graph()
383
+ m = M.ncols()
384
+ for (x, y) in M.dict():
385
+ G.add_edge(x + m, y)
386
+ T = []
387
+ # find spanning tree in each component
388
+ for component in G.connected_components_subgraphs():
389
+ spanning_tree = kruskal(component)
390
+ for (x, y, z) in spanning_tree:
391
+ if x < m:
392
+ t = x
393
+ x = y
394
+ y = t
395
+ T.append((x - m, y))
396
+ return T
397
+
398
+
399
+ def spanning_stars(M):
400
+ r"""
401
+ Return the edges of a connected subgraph that is a union of
402
+ all edges incident some subset of vertices.
403
+
404
+ INPUT:
405
+
406
+ - ``M`` -- a matrix defining a bipartite graph G. The vertices are the
407
+ rows and columns, if `M[i,j]` is nonzero, then there is an edge
408
+ between row i and column 0.
409
+
410
+ OUTPUT:
411
+
412
+ A list of tuples `(row,column)` in a spanning forest of the bipartite graph
413
+ defined by ``M``.
414
+
415
+ EXAMPLES::
416
+
417
+ sage: from sage.matroids.utilities import spanning_stars
418
+ sage: edges = spanning_stars(matrix([[1,1,1],[1,1,1],[1,1,1]])) # needs sage.graphs
419
+ sage: Graph([(x+3, y) for x,y in edges]).is_connected() # needs sage.graphs
420
+ True
421
+ """
422
+ from sage.graphs.graph import Graph
423
+
424
+ G = Graph()
425
+ m = M.ncols()
426
+ for x, y in M.dict():
427
+ G.add_edge(x + m, y)
428
+
429
+ delta = (M.nrows() + m)**0.5
430
+ # remove low degree vertices
431
+ H = []
432
+ # candidate vertices
433
+ V_0 = set()
434
+ d = 0
435
+ while G.order():
436
+ x, d = min(G.degree_iterator(labels=True), key=itemgetter(1))
437
+ if d < delta:
438
+ V_0.add(x)
439
+ H.extend(G.edges_incident(x, False))
440
+ G.delete_vertex(x)
441
+ else:
442
+ break
443
+
444
+ # min degree is at least sqrt(n)
445
+ # greedily remove vertices
446
+ G2 = G.copy()
447
+ # set of picked vertices
448
+ V_1 = set()
449
+ while G2.order():
450
+ # choose vertex with maximum degree in G2
451
+ x, d = max(G2.degree_iterator(labels=True), key=itemgetter(1))
452
+ V_1.add(x)
453
+ G2.delete_vertices(G2.neighbors(x))
454
+ G2.delete_vertex(x)
455
+
456
+ # G2 is a graph of all edges incident to V_1
457
+ G2 = Graph()
458
+ for v in V_1:
459
+ for u in G.neighbors(v):
460
+ G2.add_edge(u, v)
461
+
462
+ V = V_0 | V_1
463
+ # compute a spanning tree
464
+ T = spanning_forest(M)
465
+ for x, y in T:
466
+ if x not in V and y not in V:
467
+ V.add(v)
468
+
469
+ for v in V:
470
+ if G.has_vertex(v): # some vertices are not in G
471
+ H.extend(G.edges_incident(v, False))
472
+
473
+ # T contain all edges in some spanning tree
474
+ T = []
475
+ for x, y in H:
476
+ if x < m:
477
+ t = x
478
+ x = y
479
+ y = t
480
+ T.append((x - m, y))
481
+ return T
482
+
483
+ # Partial fields and lifting
484
+
485
+
486
+ def lift_cross_ratios(A, lift_map=None):
487
+ r"""
488
+ Return a matrix which arises from the given matrix by lifting cross ratios.
489
+
490
+ INPUT:
491
+
492
+ - ``A`` -- a matrix over a ring ``source_ring``
493
+ - ``lift_map`` -- a Python dictionary, mapping each cross ratio of ``A`` to
494
+ some element of a target ring, and such that
495
+ ``lift_map[source_ring(1)] = target_ring(1)``
496
+
497
+ OUTPUT: ``Z`` -- a matrix over the ring ``target_ring``
498
+
499
+ The intended use of this method is to create a (reduced) matrix representation of a
500
+ matroid ``M`` over a ring ``target_ring``, given a (reduced) matrix representation of
501
+ ``A`` of ``M`` over a ring ``source_ring`` and a map ``lift_map`` from ``source_ring``
502
+ to ``target_ring``.
503
+
504
+ This method will create a unique candidate representation ``Z``, but will not verify
505
+ if ``Z`` is indeed a representation of ``M``. However, this is guaranteed if the
506
+ conditions of the lift theorem (see [PvZ2010]_) hold for the lift map in combination with
507
+ the matrix ``A``.
508
+
509
+ For a lift map `f` and a matrix `A` these conditions are as follows. First of all
510
+ `f: S \rightarrow T`, where `S` is a set of invertible elements of the source ring and
511
+ `T` is a set of invertible elements of the target ring. The matrix `A` has entries
512
+ from the source ring, and each cross ratio of `A` is contained in `S`. Moreover:
513
+
514
+ - `1 \in S`, `1 \in T`;
515
+ - for all `x \in S`: `f(x) = 1` if and only if `x = 1`;
516
+ - for all `x, y \in S`: if `x + y = 0` then `f(x) + f(y) = 0`;
517
+ - for all `x, y \in S`: if `x + y = 1` then `f(x) + f(y) = 1`;
518
+ - for all `x, y, z \in S`: if `xy = z` then `f(x)f(y) = f(z)`.
519
+
520
+ Any ring homomorphism `h: P \rightarrow R` induces a lift map from the set of units `S` of
521
+ `P` to the set of units `T` of `R`. There exist lift maps which do not arise in
522
+ this manner. Several such maps can be created by the function
523
+ :meth:`lift_map() <sage.matroids.utilities.lift_map>`.
524
+
525
+ .. SEEALSO::
526
+
527
+ :meth:`lift_map() <sage.matroids.utilities.lift_map>`
528
+
529
+ EXAMPLES::
530
+
531
+ sage: # needs sage.graphs
532
+ sage: from sage.matroids.advanced import lift_cross_ratios, lift_map, LinearMatroid
533
+ sage: R = GF(7)
534
+ sage: to_sixth_root_of_unity = lift_map('sru') # needs sage.rings.number_field
535
+ sage: A = Matrix(R, [[1, 0, 6, 1, 2],[6, 1, 0, 0, 1],[0, 6, 3, 6, 0]])
536
+ sage: A
537
+ [1 0 6 1 2]
538
+ [6 1 0 0 1]
539
+ [0 6 3 6 0]
540
+ sage: Z = lift_cross_ratios(A, to_sixth_root_of_unity) # needs sage.rings.finite_rings sage.rings.number_field
541
+ sage: Z # needs sage.rings.finite_rings sage.rings.number_field
542
+ [ 1 0 1 1 1]
543
+ [-z + 1 1 0 0 1]
544
+ [ 0 -1 1 -z + 1 0]
545
+ sage: M = LinearMatroid(reduced_matrix=A)
546
+ sage: sorted(M.cross_ratios())
547
+ [3, 5]
548
+ sage: N = LinearMatroid(reduced_matrix=Z) # needs sage.rings.finite_rings sage.rings.number_field
549
+ sage: sorted(N.cross_ratios()) # needs sage.rings.finite_rings sage.rings.number_field
550
+ [-z + 1, z]
551
+ sage: M.is_isomorphism(N, {e:e for e in M.groundset()}) # needs sage.rings.finite_rings sage.rings.number_field
552
+ True
553
+ """
554
+ from sage.graphs.graph import Graph
555
+
556
+ for s, t in lift_map.items():
557
+ source_ring = s.parent()
558
+ target_ring = t.parent()
559
+ break
560
+ plus_one1 = source_ring(1)
561
+ minus_one1 = source_ring(-1)
562
+ plus_one2 = target_ring(1)
563
+ minus_one2 = target_ring(-1)
564
+
565
+ G = Graph([((r, 0), (c, 1), (r, c)) for r, c in A.nonzero_positions()])
566
+ # write the entries of (a scaled version of) A as products of cross ratios of A
567
+ T = Graph()
568
+ for C in G.connected_components_subgraphs():
569
+ T.add_edges(C.min_spanning_tree())
570
+ # - fix a tree of the support graph G to units (= empty dict, product of 0 terms)
571
+ F = {entry: dict() for entry in T.edge_labels()}
572
+ W = set(G.edge_iterator()) - set(T.edge_iterator())
573
+ H = G.subgraph(edges=T.edge_iterator())
574
+ while W:
575
+ # - find an edge in W to process, closing a circuit in H which is induced in G
576
+ edge = W.pop()
577
+ path = H.shortest_path(edge[0], edge[1])
578
+ path_s = set(path)
579
+ retry = True
580
+ while retry:
581
+ retry = False
582
+ for edge2 in W:
583
+ if edge2[0] in path_s and edge2[1] in path_s:
584
+ W.add(edge)
585
+ edge = edge2
586
+ W.remove(edge)
587
+ path = H.shortest_path(edge[0], edge[1])
588
+ path_s = set(path)
589
+ retry = True
590
+ break
591
+ entry = edge[2]
592
+ entries = []
593
+ for i in range(len(path) - 1):
594
+ v = path[i]
595
+ w = path[i + 1]
596
+ if v[1] == 0:
597
+ entries.append((v[0], w[0]))
598
+ else:
599
+ entries.append((w[0], v[0]))
600
+ # - compute the cross ratio `cr` of this whirl
601
+ cr = source_ring(A[entry])
602
+ div = True
603
+ for entry2 in entries:
604
+ if div:
605
+ cr /= A[entry2]
606
+ else:
607
+ cr *= A[entry2]
608
+ div = not div
609
+
610
+ monomial = {}
611
+ if len(path) % 4 == 0:
612
+ if not cr == plus_one1:
613
+ monomial[cr] = 1
614
+ else:
615
+ cr = -cr
616
+ if cr != plus_one1:
617
+ monomial[cr] = 1
618
+ if minus_one1 in monomial:
619
+ monomial[minus_one1] = monomial[minus_one1] + 1
620
+ else:
621
+ monomial[minus_one1] = 1
622
+
623
+ if cr != plus_one1 and cr not in lift_map:
624
+ raise ValueError("Input matrix has a cross ratio " + str(cr) + ", which is not in the lift_map")
625
+ # - write the entry as a product of cross ratios of A
626
+ div = True
627
+ for entry2 in entries:
628
+ if div:
629
+ for cr, degree in F[entry2].items():
630
+ if cr in monomial:
631
+ monomial[cr] = monomial[cr] + degree
632
+ else:
633
+ monomial[cr] = degree
634
+ else:
635
+ for cr, degree in F[entry2].items():
636
+ if cr in monomial:
637
+ monomial[cr] = monomial[cr] - degree
638
+ else:
639
+ monomial[cr] = -degree
640
+ div = not div
641
+ F[entry] = monomial
642
+ # - current edge is done, can be used in next iteration
643
+ H.add_edge(edge)
644
+
645
+ # compute each entry of Z as the product of lifted cross ratios
646
+ Z = Matrix(target_ring, A.nrows(), A.ncols())
647
+ for entry, monomial in F.items():
648
+ Z[entry] = plus_one2
649
+ for cr, degree in monomial.items():
650
+ if cr == minus_one1:
651
+ Z[entry] = Z[entry] * (minus_one2**degree)
652
+ else:
653
+ Z[entry] = Z[entry] * (lift_map[cr]**degree)
654
+
655
+ return Z
656
+
657
+
658
+ def lift_map(target):
659
+ r"""
660
+ Create a lift map, to be used for lifting the cross ratios of a matroid
661
+ representation.
662
+
663
+ .. SEEALSO::
664
+
665
+ :meth:`lift_cross_ratios() <sage.matroids.utilities.lift_cross_ratios>`
666
+
667
+ INPUT:
668
+
669
+ - ``target`` -- string describing the target (partial) field
670
+
671
+ OUTPUT: dictionary
672
+
673
+ Depending on the value of ``target``, the following lift maps will be created:
674
+
675
+ - "reg": a lift map from `\GF3` to the regular partial field `(\ZZ, <-1>)`.
676
+
677
+ - "sru": a lift map from `\GF7` to the
678
+ sixth-root-of-unity partial field `(\QQ(z), <z>)`, where `z` is a sixth root
679
+ of unity. The map sends 3 to `z`.
680
+
681
+ - "dyadic": a lift map from `\GF{11}` to the dyadic partial field `(\QQ, <-1, 2>)`.
682
+
683
+ - "gm": a lift map from `\GF{19}` to the golden mean partial field
684
+ `(\QQ(t), <-1,t>)`, where `t` is a root of `t^2-t-1`. The map sends `5` to `t`.
685
+
686
+ The example below shows that the latter map satisfies three necessary conditions stated in
687
+ :meth:`lift_cross_ratios() <sage.matroids.utilities.lift_cross_ratios>`
688
+
689
+ EXAMPLES::
690
+
691
+ sage: from sage.matroids.utilities import lift_map
692
+ sage: lm = lift_map('gm') # needs sage.rings.finite_rings sage.rings.number_field
693
+ sage: for x in lm: # needs sage.rings.finite_rings sage.rings.number_field
694
+ ....: if (x == 1) is not (lm[x] == 1):
695
+ ....: print('not a proper lift map')
696
+ ....: for y in lm:
697
+ ....: if (x+y == 0) and not (lm[x]+lm[y] == 0):
698
+ ....: print('not a proper lift map')
699
+ ....: if (x+y == 1) and not (lm[x]+lm[y] == 1):
700
+ ....: print('not a proper lift map')
701
+ ....: for z in lm:
702
+ ....: if (x*y==z) and not (lm[x]*lm[y]==lm[z]):
703
+ ....: print('not a proper lift map')
704
+ """
705
+ from sage.rings.finite_rings.finite_field_constructor import GF
706
+
707
+ if target == "reg":
708
+ R = GF(3)
709
+ return {R(1): ZZ(1)}
710
+
711
+ if target == "sru":
712
+ from sage.rings.number_field.number_field import NumberField
713
+
714
+ R = GF(7)
715
+ z = ZZ['z'].gen()
716
+ S = NumberField(z * z - z + 1, 'z')
717
+ z = S(z)
718
+ return {R.one(): S.one(), R(3): z, R(3)**(-1): z**5}
719
+
720
+ if target == "dyadic":
721
+ R = GF(11)
722
+ return {R(1): QQ(1), R(-1): QQ(-1), R(2): QQ(2), R(6): QQ((1, 2))}
723
+
724
+ if target == "gm":
725
+ from sage.rings.number_field.number_field import NumberField
726
+
727
+ R = GF(19)
728
+ t = QQ['t'].gen()
729
+ G = NumberField(t * t - t - 1, 't')
730
+ return {R(1): G(1), R(5): G(t),
731
+ R(1) / R(5): G(1) / G(t), R(-5): G(-t),
732
+ R(-5)**(-1): G(-t)**(-1), R(5)**2: G(t)**2,
733
+ R(5)**(-2): G(t)**(-2)}
734
+
735
+ raise NotImplementedError(target)
736
+
737
+
738
+ def split_vertex(G, u, v=None, edges=None):
739
+ """
740
+ Split a vertex in a graph.
741
+
742
+ If an edge is inserted between the vertices after splitting, this
743
+ corresponds to a graphic coextension of a matroid.
744
+
745
+ INPUT:
746
+
747
+ - ``G`` -- a SageMath :class:`Graph`
748
+ - ``u`` -- a vertex in ``G``
749
+ - ``v`` -- (optional) the name of the new vertex after the splitting. If
750
+ ``v`` is specified and already in the graph, it must be an isolated vertex.
751
+ - ``edges`` -- (optional) iterable container of edges on ``u`` that
752
+ move to ``v`` after the splitting. If ``None``, ``v`` will be an isolated
753
+ vertex. The edge labels must be specified.
754
+
755
+ EXAMPLES::
756
+
757
+ sage: # needs sage.graphs
758
+ sage: from sage.matroids.utilities import split_vertex
759
+ sage: G = graphs.BullGraph()
760
+ sage: split_vertex(G, u=1, v=55, edges=[(1, 3)])
761
+ Traceback (most recent call last):
762
+ ...
763
+ ValueError: the edges are not all incident with u
764
+ sage: split_vertex(G, u=1, v=55, edges=[(1, 3, None)])
765
+ sage: list(G.edges(sort=True))
766
+ [(0, 1, None), (0, 2, None), (1, 2, None), (2, 4, None), (3, 55, None)]
767
+ """
768
+ if v is None:
769
+ v = G.add_vertex()
770
+ elif v not in G:
771
+ G.add_vertex(v)
772
+ elif G.degree(v):
773
+ raise ValueError("v must be a new vertex or an isolated vertex")
774
+ if edges is None:
775
+ edges = []
776
+
777
+ edges_on_u = G.edges_incident(u)
778
+
779
+ for e in edges:
780
+ if e not in edges_on_u:
781
+ # if e is a loop, put it on u and v
782
+ # otherwise raise an error
783
+ if e[0] == e[1]:
784
+ G.add_edge(u, v, e[2])
785
+ G.delete_edge(e)
786
+ else:
787
+ raise ValueError("the edges are not all incident with u")
788
+
789
+ elif e[0] == u:
790
+ G.add_edge(v, e[1], e[2])
791
+ elif e[1] == u:
792
+ G.add_edge(e[0], v, e[2])
793
+ G.delete_edge(e)
794
+
795
+ # This modifies the graph without needing to return anything
796
+
797
+
798
+ def cmp_elements_key(x):
799
+ """
800
+ A helper function to compare elements which may be integers or strings.
801
+
802
+ EXAMPLES::
803
+
804
+ sage: from sage.matroids.utilities import cmp_elements_key
805
+ sage: l = ['a', 'b', 1, 3, 2, 10, 111, 100, 'c', 'aa']
806
+ sage: sorted(l, key=cmp_elements_key)
807
+ [1, 2, 3, 10, 100, 111, 'a', 'aa', 'b', 'c']
808
+ """
809
+ return (isinstance(x, str), x)