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,947 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Circuits matroids
4
+
5
+ Matroids are characterized by a list of circuits, which are minimal dependent
6
+ sets. The ``CircuitsMatroid`` class implements matroids using this information
7
+ as data.
8
+
9
+ A ``CircuitsMatroid`` can be created from another matroid or from a list of
10
+ circuits. For a full description of allowed inputs, see
11
+ :class:`below <sage.matroids.circuits_matroid.CircuitsMatroid>`. It is
12
+ recommended to use the :func:`Matroid() <sage.matroids.constructor.Matroid>`
13
+ function for a more flexible way of constructing a ``CircuitsMatroid`` and
14
+ other classes of matroids. For direct access to the ``CircuitsMatroid``
15
+ constructor, run::
16
+
17
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
18
+
19
+ AUTHORS:
20
+
21
+ - Giorgos Mousa (2023-12-23): initial version
22
+ """
23
+
24
+ # ****************************************************************************
25
+ # Copyright (C) 2023 Giorgos Mousa <gmousa@proton.me>
26
+ #
27
+ # This program is free software: you can redistribute it and/or modify
28
+ # it under the terms of the GNU General Public License as published by
29
+ # the Free Software Foundation, either version 2 of the License, or
30
+ # (at your option) any later version.
31
+ # https://www.gnu.org/licenses/
32
+ # ****************************************************************************
33
+
34
+ from cpython.object cimport Py_EQ, Py_NE
35
+ from sage.structure.richcmp cimport rich_to_bool, richcmp
36
+ from sage.matroids.matroid cimport Matroid
37
+ from sage.matroids.set_system cimport SetSystem
38
+
39
+ cdef class CircuitsMatroid(Matroid):
40
+ r"""
41
+ A matroid defined by its circuits.
42
+
43
+ INPUT:
44
+
45
+ - ``M`` -- matroid (default: ``None``)
46
+ - ``groundset`` -- list (default: ``None``); the groundset of the matroid
47
+ - ``circuits`` -- list (default: ``None``); the collection of circuits of
48
+ the matroid
49
+ - ``nsc_defined`` -- boolean (default: ``False``); whether the matroid was
50
+ defined by its nonspanning circuits
51
+
52
+ .. NOTE::
53
+
54
+ For a more flexible means of input, use the ``Matroid()`` function.
55
+ """
56
+
57
+ # necessary (__init__, groundset, _rank)
58
+
59
+ def __init__(self, M=None, groundset=None, circuits=None, nsc_defined=False):
60
+ """
61
+ Initialization of the matroid. See the class docstring for full
62
+ documentation.
63
+
64
+ TESTS::
65
+
66
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
67
+ sage: M = CircuitsMatroid(matroids.catalog.Fano())
68
+ sage: TestSuite(M).run()
69
+ """
70
+ if M is not None:
71
+ self._groundset = M.groundset()
72
+ self._C = set(M.circuits())
73
+ else:
74
+ self._groundset = frozenset(groundset)
75
+ self._C = set([frozenset(C) for C in circuits])
76
+ # k-circuits
77
+ self._k_C = {}
78
+ for C in self._C:
79
+ try:
80
+ self._k_C[len(C)].add(C)
81
+ except KeyError:
82
+ self._k_C[len(C)] = set()
83
+ self._k_C[len(C)].add(C)
84
+ self._sorted_C_lens = sorted(self._k_C)
85
+ self._matroid_rank = self.rank(self._groundset)
86
+ self._nsc_defined = nsc_defined
87
+
88
+ cpdef frozenset groundset(self):
89
+ """
90
+ Return the groundset of the matroid.
91
+
92
+ The groundset is the set of elements that comprise the matroid.
93
+
94
+ OUTPUT: set
95
+
96
+ EXAMPLES::
97
+
98
+ sage: M = matroids.Theta(2)
99
+ sage: sorted(M.groundset())
100
+ ['x0', 'x1', 'y0', 'y1']
101
+ """
102
+ return self._groundset
103
+
104
+ cpdef int _rank(self, frozenset X) except? -1:
105
+ """
106
+ Return the rank of a set ``X``.
107
+
108
+ This method does no checking on ``X``, and ``X`` may be assumed to have
109
+ the same interface as ``frozenset``.
110
+
111
+ INPUT:
112
+
113
+ - ``X`` -- an object with Python's ``frozenset`` interface
114
+
115
+ OUTPUT: integer
116
+
117
+ EXAMPLES::
118
+
119
+ sage: M = matroids.Theta(3)
120
+ sage: M._rank(frozenset(['x1', 'y0', 'y2']))
121
+ 2
122
+ """
123
+ return len(self._max_independent(X))
124
+
125
+ # optional
126
+
127
+ cpdef full_rank(self):
128
+ r"""
129
+ Return the rank of the matroid.
130
+
131
+ The *rank* of the matroid is the size of the largest independent
132
+ subset of the groundset.
133
+
134
+ OUTPUT: integer
135
+
136
+ EXAMPLES::
137
+
138
+ sage: M = matroids.Theta(20)
139
+ sage: M.full_rank()
140
+ 20
141
+ """
142
+ return self._matroid_rank
143
+
144
+ cpdef bint _is_independent(self, frozenset X) noexcept:
145
+ """
146
+ Test if input is independent.
147
+
148
+ INPUT:
149
+
150
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
151
+ a subset of ``self.groundset()``
152
+
153
+ OUTPUT: boolean
154
+
155
+ EXAMPLES::
156
+
157
+ sage: M = matroids.Theta(4)
158
+ sage: M._is_independent(frozenset(['y0', 'y1', 'y3', 'x2']))
159
+ False
160
+ sage: M._is_independent(frozenset(['y0', 'y2', 'y3', 'x2']))
161
+ True
162
+ """
163
+ cdef int i, l = len(X)
164
+ for i in self._sorted_C_lens:
165
+ if i > l:
166
+ break
167
+ for C in self._k_C[i]:
168
+ if C <= X:
169
+ return False
170
+ return True
171
+
172
+ cpdef frozenset _max_independent(self, frozenset X):
173
+ """
174
+ Compute a maximal independent subset.
175
+
176
+ INPUT:
177
+
178
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
179
+ a subset of ``self.groundset()``
180
+
181
+ OUTPUT: frozenset; a maximal independent subset of ``X``
182
+
183
+ EXAMPLES::
184
+
185
+ sage: M = matroids.Theta(6)
186
+ sage: len(M._max_independent(M.groundset()))
187
+ 6
188
+ """
189
+ cdef set XX = set(X)
190
+ cdef frozenset C
191
+ while True:
192
+ try:
193
+ C = self._circuit(frozenset(XX))
194
+ e = next(iter(C))
195
+ XX.remove(e)
196
+ except (ValueError, StopIteration):
197
+ return frozenset(XX)
198
+
199
+ cpdef frozenset _circuit(self, frozenset X):
200
+ """
201
+ Return a minimal dependent subset.
202
+
203
+ INPUT:
204
+
205
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
206
+ a subset of ``self.groundset()``
207
+
208
+ OUTPUT: frozenset; a circuit contained in ``X``, if it exists.
209
+ Otherwise an error is raised.
210
+
211
+ EXAMPLES::
212
+
213
+ sage: M = matroids.Theta(4)
214
+ sage: sorted(M._circuit(frozenset(['y0', 'y1', 'y3', 'x2'])))
215
+ ['x2', 'y0', 'y1', 'y3']
216
+ sage: M._circuit(frozenset(['y0', 'y2', 'y3', 'x2']))
217
+ Traceback (most recent call last):
218
+ ...
219
+ ValueError: no circuit in independent set
220
+ """
221
+ cdef int i, l = len(X)
222
+ for i in self._sorted_C_lens:
223
+ if i > l:
224
+ break
225
+ for C in self._k_C[i]:
226
+ if C <= X:
227
+ return C
228
+ raise ValueError("no circuit in independent set")
229
+
230
+ cpdef frozenset _closure(self, frozenset X):
231
+ """
232
+ Return the closure of a set.
233
+
234
+ INPUT:
235
+
236
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
237
+ a subset of ``self.groundset()``
238
+
239
+ OUTPUT: :class:`frozenset`
240
+
241
+ EXAMPLES::
242
+
243
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
244
+ sage: M = CircuitsMatroid(matroids.catalog.Vamos())
245
+ sage: sorted(M._closure(frozenset(['a', 'b', 'c'])))
246
+ ['a', 'b', 'c', 'd']
247
+ """
248
+ cdef set XX = set(X)
249
+ cdef frozenset S
250
+ cdef int i
251
+ for i in self._sorted_C_lens:
252
+ if i > len(XX) + 1:
253
+ break
254
+ for C in self._k_C[i]:
255
+ S = C - XX
256
+ if len(S) == 1:
257
+ XX.add(next(iter(S)))
258
+ return frozenset(XX)
259
+
260
+ cpdef _is_isomorphic(self, other, certificate=False):
261
+ """
262
+ Test if ``self`` is isomorphic to ``other``.
263
+
264
+ INPUT:
265
+
266
+ - ``other`` -- matroid
267
+ - ``certificate`` -- boolean (default: ``False``)
268
+
269
+ OUTPUT: boolean, and, if ``certificate=True``, a dictionary giving the
270
+ isomorphism or ``None``
271
+
272
+ EXAMPLES::
273
+
274
+ sage: M = matroids.Spike(3)
275
+ sage: from sage.matroids.basis_matroid import BasisMatroid
276
+ sage: N = BasisMatroid(M)
277
+ sage: M.is_isomorphic(N)
278
+ True
279
+ sage: N = matroids.catalog.Vamos()
280
+ sage: M.is_isomorphic(N)
281
+ False
282
+
283
+ .. NOTE::
284
+
285
+ Internal version that does no input checking.
286
+ """
287
+ if certificate:
288
+ return self._is_isomorphic(other), self._isomorphism(other)
289
+ N = CircuitsMatroid(other)
290
+ S = SetSystem(self._groundset, self._C)
291
+ O = SetSystem(N._groundset, N._C)
292
+ return S._isomorphism(O) is not None
293
+
294
+ # representation
295
+
296
+ def _repr_(self):
297
+ """
298
+ Return a string representation of the matroid.
299
+
300
+ EXAMPLES::
301
+
302
+ sage: matroids.Theta(10)
303
+ Theta_10: Matroid of rank 10 on 20 elements with 490 circuits
304
+ sage: matroids.catalog.NonDesargues()
305
+ NonDesargues: Matroid of rank 3 on 10 elements with 9 nonspanning circuits
306
+ """
307
+ if self._nsc_defined:
308
+ return f'{Matroid._repr_(self)} with {len(self.nonspanning_circuits())} nonspanning circuits'
309
+ else:
310
+ return f'{Matroid._repr_(self)} with {len(self._C)} circuits'
311
+
312
+ # comparison
313
+
314
+ def __hash__(self):
315
+ r"""
316
+ Return an invariant of the matroid.
317
+
318
+ This function is called when matroids are added to a set. It is very
319
+ desirable to override it so it can distinguish matroids on the same
320
+ groundset, which is a very typical use case!
321
+
322
+ .. WARNING::
323
+
324
+ This method is linked to ``__richcmp__`` (in Cython) and ``__cmp__``
325
+ or ``__eq__``/``__ne__`` (in Python). If you override one, you
326
+ should (and, in Cython, \emph{must}) override the other!
327
+
328
+ EXAMPLES::
329
+
330
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
331
+ sage: M = CircuitsMatroid(matroids.catalog.Vamos())
332
+ sage: N = CircuitsMatroid(matroids.catalog.Vamos())
333
+ sage: hash(M) == hash(N)
334
+ True
335
+ sage: O = CircuitsMatroid(matroids.catalog.NonVamos())
336
+ sage: hash(M) == hash(O)
337
+ False
338
+ """
339
+ return hash(tuple([self._groundset, frozenset(self._C)]))
340
+
341
+ def __richcmp__(left, right, int op):
342
+ r"""
343
+ Compare two matroids.
344
+
345
+ We take a very restricted view on equality: the objects need to be of
346
+ the exact same type (so no subclassing) and the internal data need to
347
+ be the same. For CircuitsMatroids, this means that the groundsets and
348
+ the sets of circuits of the two matroids are equal.
349
+
350
+ EXAMPLES::
351
+
352
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
353
+ sage: M = CircuitsMatroid(matroids.catalog.Pappus())
354
+ sage: N = CircuitsMatroid(matroids.catalog.NonPappus())
355
+ sage: M == N
356
+ False
357
+ sage: N = Matroid(circuits=M.circuits())
358
+ sage: M == N
359
+ True
360
+ """
361
+ cdef CircuitsMatroid lt, rt
362
+ if op not in [Py_EQ, Py_NE]:
363
+ return NotImplemented
364
+ if type(left) is not type(right):
365
+ return NotImplemented
366
+ lt = <CircuitsMatroid> left
367
+ rt = <CircuitsMatroid> right
368
+ if lt.groundset() != rt.groundset():
369
+ return rich_to_bool(op, 1)
370
+ if lt.full_rank() != rt.full_rank():
371
+ return rich_to_bool(op, 1)
372
+ return richcmp(frozenset(lt._C), frozenset(rt._C), op)
373
+
374
+ # copying, loading, saving
375
+
376
+ def __reduce__(self):
377
+ """
378
+ Save the matroid for later reloading.
379
+
380
+ OUTPUT:
381
+
382
+ A tuple ``(unpickle, (version, data))``, where ``unpickle`` is the
383
+ name of a function that, when called with ``(version, data)``,
384
+ produces a matroid isomorphic to ``self``. ``version`` is an integer
385
+ (currently 0) and ``data`` is a tuple ``(E, C, name)`` where ``E`` is
386
+ the groundset, ``C`` is the list of circuits, and ``name`` is a custom
387
+ name.
388
+
389
+ EXAMPLES::
390
+
391
+ sage: M = matroids.Theta(5)
392
+ sage: M == loads(dumps(M)) # indirect doctest
393
+ True
394
+ sage: M.reset_name()
395
+ sage: loads(dumps(M))
396
+ Matroid of rank 5 on 10 elements with 45 circuits
397
+ """
398
+ import sage.matroids.unpickling
399
+ data = (self._groundset, frozenset(self._C), self.get_custom_name())
400
+ version = 0
401
+ return sage.matroids.unpickling.unpickle_circuits_matroid, (version, data)
402
+
403
+ cpdef relabel(self, mapping):
404
+ r"""
405
+ Return an isomorphic matroid with relabeled groundset.
406
+
407
+ The output is obtained by relabeling each element `e` by
408
+ ``mapping[e]``, where ``mapping`` is a given injective map. If
409
+ ``mapping[e]`` is not defined, then the identity map is assumed.
410
+
411
+ INPUT:
412
+
413
+ - ``mapping`` -- a Python object such that ``mapping[e]`` is the new
414
+ label of `e`
415
+
416
+ OUTPUT: matroid
417
+
418
+ EXAMPLES::
419
+
420
+ sage: # needs sage.rings.finite_rings
421
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
422
+ sage: M = CircuitsMatroid(matroids.catalog.RelaxedNonFano())
423
+ sage: sorted(M.groundset())
424
+ [0, 1, 2, 3, 4, 5, 6]
425
+ sage: N = M.relabel({'g': 'x', 0: 'z'}) # 'g': 'x' is ignored
426
+ sage: from sage.matroids.utilities import cmp_elements_key
427
+ sage: sorted(N.groundset(), key=cmp_elements_key)
428
+ [1, 2, 3, 4, 5, 6, 'z']
429
+ sage: M.is_isomorphic(N)
430
+ True
431
+
432
+ TESTS::
433
+
434
+ sage: # needs sage.rings.finite_rings
435
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
436
+ sage: M = CircuitsMatroid(matroids.catalog.RelaxedNonFano())
437
+ sage: f = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}
438
+ sage: N = M.relabel(f)
439
+ sage: for S in powerset(M.groundset()):
440
+ ....: assert M.rank(S) == N.rank([f[x] for x in S])
441
+ """
442
+ d = self._relabel_map(mapping)
443
+ E = [d[x] for x in self._groundset]
444
+ C = []
445
+ for i in self._k_C:
446
+ C += [[d[y] for y in x] for x in self._k_C[i]]
447
+ M = CircuitsMatroid(groundset=E, circuits=C)
448
+ return M
449
+
450
+ # enumeration
451
+
452
+ def bases_iterator(self):
453
+ r"""
454
+ Return an iterator over the bases of the matroid.
455
+
456
+ EXAMPLES::
457
+
458
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
459
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
460
+ sage: it = M.bases_iterator()
461
+ sage: it.__next__()
462
+ frozenset({0, 1})
463
+ sage: sorted(M.bases_iterator(), key=str)
464
+ [frozenset({0, 1}),
465
+ frozenset({0, 2}),
466
+ frozenset({0, 3}),
467
+ frozenset({1, 2}),
468
+ frozenset({1, 3}),
469
+ frozenset({2, 3})]
470
+ """
471
+ from itertools import combinations
472
+ cdef set NB = set(self.nonbases())
473
+ cdef frozenset S
474
+ for St in combinations(self._groundset, self._matroid_rank):
475
+ S = frozenset(St)
476
+ if S not in NB:
477
+ yield S
478
+
479
+ cpdef SetSystem independent_sets(self, long k=-1):
480
+ r"""
481
+ Return the independent sets of the matroid.
482
+
483
+ INPUT:
484
+
485
+ - ``k`` -- integer (optional); if specified, return the size-`k`
486
+ independent sets of the matroid
487
+
488
+ OUTPUT: :class:`SetSystem`
489
+
490
+ EXAMPLES::
491
+
492
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
493
+ sage: M = CircuitsMatroid(matroids.catalog.Pappus())
494
+ sage: M.independent_sets(4)
495
+ SetSystem of 0 sets over 9 elements
496
+ sage: M.independent_sets(3)
497
+ SetSystem of 75 sets over 9 elements
498
+ sage: frozenset({'a', 'c', 'e'}) in _
499
+ True
500
+
501
+ TESTS::
502
+
503
+ sage: # needs sage.graphs
504
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
505
+ sage: M = CircuitsMatroid(matroids.CompleteGraphic(4))
506
+ sage: len(M.bases())
507
+ 16
508
+
509
+ .. SEEALSO::
510
+
511
+ :meth:`M.bases() <sage.matroids.circuits_matroid.bases>`
512
+ """
513
+ if k == -1: # all independent sets
514
+ return self._independent_sets()
515
+
516
+ # independent k-sets
517
+ from itertools import combinations
518
+ cdef SetSystem I_k = SetSystem(self._groundset)
519
+ cdef set D_k = set(self.dependent_sets(k))
520
+ cdef frozenset S
521
+ for St in combinations(self._groundset, k):
522
+ S = frozenset(St)
523
+ if S not in D_k:
524
+ I_k.append(S)
525
+ return I_k
526
+
527
+ cpdef SetSystem dependent_sets(self, long k):
528
+ r"""
529
+ Return the dependent sets of fixed size.
530
+
531
+ INPUT:
532
+
533
+ - ``k`` -- integer
534
+
535
+ OUTPUT: :class:`SetSystem`
536
+
537
+ EXAMPLES::
538
+
539
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
540
+ sage: M = CircuitsMatroid(matroids.catalog.Vamos())
541
+ sage: M.dependent_sets(3)
542
+ SetSystem of 0 sets over 8 elements
543
+ sage: sorted([sorted(X) for X in M.dependent_sets(4)])
544
+ [['a', 'b', 'c', 'd'], ['a', 'b', 'e', 'f'], ['a', 'b', 'g', 'h'],
545
+ ['c', 'd', 'e', 'f'], ['e', 'f', 'g', 'h']]
546
+
547
+ TESTS::
548
+
549
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
550
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
551
+ sage: len(M.nonbases())
552
+ 0
553
+
554
+ sage: # needs sage.graphs
555
+ sage: M = CircuitsMatroid(matroids.CompleteGraphic(6))
556
+ sage: len(M.nonbases())
557
+ 1707
558
+ """
559
+ cdef int i
560
+ cdef set D_k = set()
561
+ cdef frozenset S
562
+ for i in range(min(self._k_C), k + 1):
563
+ if i in self._k_C:
564
+ for S in self._k_C[i]:
565
+ D_k.add(S)
566
+ if i == k:
567
+ break
568
+ for S in D_k.copy():
569
+ D_k.remove(S)
570
+ for e in S ^ self._groundset:
571
+ D_k.add(S | set([e]))
572
+ return SetSystem(self._groundset, D_k)
573
+
574
+ cpdef SetSystem circuits(self, k=None):
575
+ """
576
+ Return the circuits of the matroid.
577
+
578
+ INPUT:
579
+
580
+ - ``k`` -- integer (optional); the length of the circuits
581
+
582
+ OUTPUT: :class:`SetSystem`
583
+
584
+ EXAMPLES::
585
+
586
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
587
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
588
+ sage: M.circuits()
589
+ SetSystem of 4 sets over 4 elements
590
+ sage: list(M.circuits(0))
591
+ []
592
+ sage: sorted(M.circuits(3), key=str)
593
+ [frozenset({0, 1, 2}),
594
+ frozenset({0, 1, 3}),
595
+ frozenset({0, 2, 3}),
596
+ frozenset({1, 2, 3})]
597
+ """
598
+ cdef SetSystem C = SetSystem(self._groundset)
599
+ if k is not None:
600
+ if k in self._k_C:
601
+ for c in self._k_C[k]:
602
+ C.append(c)
603
+ else:
604
+ for i in self._k_C:
605
+ for c in self._k_C[i]:
606
+ C.append(c)
607
+ return C
608
+
609
+ def circuits_iterator(self, k=None):
610
+ """
611
+ Return an iterator over the circuits of the matroid.
612
+
613
+ INPUT:
614
+
615
+ - ``k`` -- integer (optional); the length of the circuits
616
+
617
+ EXAMPLES::
618
+
619
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
620
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
621
+ sage: sum(1 for C in M.circuits_iterator())
622
+ 4
623
+ sage: list(M.circuits_iterator(0))
624
+ []
625
+ sage: sorted(M.circuits_iterator(3), key=str)
626
+ [frozenset({0, 1, 2}),
627
+ frozenset({0, 1, 3}),
628
+ frozenset({0, 2, 3}),
629
+ frozenset({1, 2, 3})]
630
+ """
631
+ if k is not None:
632
+ if k in self._k_C:
633
+ for C in self._k_C[k]:
634
+ yield C
635
+ else:
636
+ for i in self._k_C:
637
+ for C in self._k_C[i]:
638
+ yield C
639
+
640
+ cpdef SetSystem nonspanning_circuits(self):
641
+ """
642
+ Return the nonspanning circuits of the matroid.
643
+
644
+ OUTPUT: :class:`SetSystem`
645
+
646
+ EXAMPLES::
647
+
648
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
649
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
650
+ sage: M.nonspanning_circuits()
651
+ SetSystem of 0 sets over 4 elements
652
+ sage: M = matroids.Theta(5)
653
+ sage: M.nonspanning_circuits()
654
+ SetSystem of 15 sets over 10 elements
655
+ """
656
+ cdef SetSystem NSC = SetSystem(self._groundset)
657
+ cdef int i
658
+ cdef frozenset S
659
+ for i in self._sorted_C_lens:
660
+ if i > self._matroid_rank:
661
+ break
662
+ for S in self._k_C[i]:
663
+ NSC.append(S)
664
+ return NSC
665
+
666
+ def nonspanning_circuits_iterator(self):
667
+ """
668
+ Return an iterator over the nonspanning circuits of the matroid.
669
+
670
+ EXAMPLES::
671
+
672
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
673
+ sage: M = CircuitsMatroid(matroids.Uniform(2, 4))
674
+ sage: list(M.nonspanning_circuits_iterator())
675
+ []
676
+ """
677
+ cdef int i
678
+ for i in self._k_C:
679
+ if i <= self._matroid_rank:
680
+ for C in self._k_C[i]:
681
+ yield C
682
+
683
+ cpdef SetSystem no_broken_circuits_facets(self, ordering=None, reduced=False):
684
+ r"""
685
+ Return the no broken circuits (NBC) facets of ``self``.
686
+
687
+ INPUT:
688
+
689
+ - ``ordering`` -- list (optional); a total ordering of the groundset
690
+ - ``reduced`` -- boolean (default: ``False``)
691
+
692
+ OUTPUT: :class:`SetSystem`
693
+
694
+ EXAMPLES::
695
+
696
+ sage: M = Matroid(circuits=[[0, 1, 2]])
697
+ sage: M.no_broken_circuits_facets(ordering=[1, 0, 2])
698
+ SetSystem of 2 sets over 3 elements
699
+ sage: sorted([sorted(X) for X in _])
700
+ [[0, 1], [1, 2]]
701
+ sage: M.no_broken_circuits_facets(ordering=[1, 0, 2], reduced=True)
702
+ SetSystem of 2 sets over 3 elements
703
+ sage: sorted([sorted(X) for X in _])
704
+ [[0], [2]]
705
+ """
706
+ from itertools import combinations
707
+ from sage.matroids.utilities import cmp_elements_key
708
+ if ordering is None:
709
+ ordering = sorted(self._groundset, key=cmp_elements_key)
710
+ else:
711
+ if frozenset(ordering) != self._groundset:
712
+ raise ValueError("not an ordering of the groundset")
713
+
714
+ cdef int i, r = self._matroid_rank
715
+ cdef frozenset min_e = frozenset([ordering[0]])
716
+ cdef frozenset S
717
+ # compute broken circuits (with minimal element added)
718
+ cdef dict BC = {}
719
+ for i in range(r + 1):
720
+ BC[i] = set()
721
+ for C in self._C:
722
+ for e in ordering:
723
+ if e in C:
724
+ S = C - frozenset([e]) | min_e
725
+ if len(S) <= r:
726
+ BC[len(S)].add(S)
727
+ break
728
+
729
+ for i in range(r):
730
+ for S in BC[i].copy():
731
+ BC[i].remove(S)
732
+ for e in self._groundset ^ S:
733
+ BC[i+1].add(S | set([e]))
734
+
735
+ cdef SetSystem B = SetSystem(self._groundset)
736
+ for St in combinations(ordering[1:], self._matroid_rank - 1):
737
+ S = frozenset(St)
738
+ if S | min_e not in BC[r]:
739
+ if not reduced:
740
+ B.append(S | min_e)
741
+ else:
742
+ B.append(S)
743
+
744
+ return B
745
+
746
+ cpdef SetSystem no_broken_circuits_sets(self, ordering=None, reduced=False):
747
+ r"""
748
+ Return the no broken circuits (NBC) sets of ``self``.
749
+
750
+ An NBC set is a subset `A` of the groundset under some total
751
+ ordering `<` such that `A` contains no broken circuit.
752
+
753
+ INPUT:
754
+
755
+ - ``ordering`` -- list (optional); a total ordering of the groundset
756
+ - ``reduced`` -- boolean (default: ``False``)
757
+
758
+ OUTPUT: :class:`SetSystem`
759
+
760
+ EXAMPLES::
761
+
762
+ sage: # needs sage.graphs
763
+ sage: M = Matroid(circuits=[[1, 2, 3], [3, 4, 5], [1, 2, 4, 5]])
764
+ sage: SimplicialComplex(M.no_broken_circuits_sets())
765
+ Simplicial complex with vertex set (1, 2, 3, 4, 5)
766
+ and facets {(1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5)}
767
+ sage: SimplicialComplex(M.no_broken_circuits_sets([5, 4, 3, 2, 1]))
768
+ Simplicial complex with vertex set (1, 2, 3, 4, 5)
769
+ and facets {(1, 3, 5), (1, 4, 5), (2, 3, 5), (2, 4, 5)}
770
+
771
+ ::
772
+
773
+ sage: # needs sage.graphs
774
+ sage: M = Matroid(circuits=[[1, 2, 3], [1, 4, 5], [2, 3, 4, 5]])
775
+ sage: SimplicialComplex(M.no_broken_circuits_sets([5, 4, 3, 2, 1]))
776
+ Simplicial complex with vertex set (1, 2, 3, 4, 5)
777
+ and facets {(1, 3, 5), (2, 3, 5), (2, 4, 5), (3, 4, 5)}
778
+
779
+ TESTS::
780
+
781
+ sage: # needs sage.graphs
782
+ sage: M = Matroid(circuits=[[1, 2, 3], [3, 4, 5], [1, 2, 4, 5]])
783
+ sage: C1 = SimplicialComplex(M.no_broken_circuits_sets())
784
+ sage: from sage.matroids.basis_matroid import BasisMatroid
785
+ sage: M = BasisMatroid(Matroid(circuits=[[1, 2, 3], [3, 4, 5], [1, 2, 4, 5]]))
786
+ sage: C2 = SimplicialComplex(M.no_broken_circuits_sets())
787
+ sage: C1 == C2
788
+ True
789
+ """
790
+ from sage.topology.simplicial_complex import SimplicialComplex
791
+ cdef SetSystem NBC = SetSystem(self._groundset)
792
+ for f in SimplicialComplex(self.no_broken_circuits_facets(ordering, reduced),
793
+ maximality_check=False).face_iterator():
794
+ NBC.append(frozenset(f))
795
+ return NBC
796
+
797
+ cpdef broken_circuit_complex(self, ordering=None, reduced=False):
798
+ r"""
799
+ Return the broken circuit complex of ``self``.
800
+
801
+ The broken circuit complex of a matroid with a total ordering `<`
802
+ on the groundset is obtained from the
803
+ :meth:`NBC sets <no_broken_circuits_sets>` under subset inclusion.
804
+
805
+ INPUT:
806
+
807
+ - ``ordering`` -- list (optional); a total ordering of the groundset
808
+ - ``reduced`` -- boolean (default: ``False``); whether to return the
809
+ reduced broken circuit complex (the link at the smallest element)
810
+
811
+ OUTPUT: a simplicial complex of the NBC sets under inclusion
812
+
813
+ EXAMPLES::
814
+
815
+ sage: # needs sage.graphs
816
+ sage: M = Matroid(circuits=[[1, 2, 3], [3, 4, 5], [1, 2, 4, 5]])
817
+ sage: M.broken_circuit_complex()
818
+ Simplicial complex with vertex set (1, 2, 3, 4, 5)
819
+ and facets {(1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5)}
820
+ sage: M.broken_circuit_complex([5, 4, 3, 2, 1])
821
+ Simplicial complex with vertex set (1, 2, 3, 4, 5)
822
+ and facets {(1, 3, 5), (1, 4, 5), (2, 3, 5), (2, 4, 5)}
823
+ sage: M.broken_circuit_complex([5, 4, 3, 2, 1], reduced=True)
824
+ Simplicial complex with vertex set (1, 2, 3, 4)
825
+ and facets {(1, 3), (1, 4), (2, 3), (2, 4)}
826
+
827
+ For a matroid with loops, the broken circuit complex is not defined,
828
+ and the method yields an error::
829
+
830
+ sage: # needs sage.graphs
831
+ sage: M = Matroid(groundset=[0, 1, 2], circuits=[[0]])
832
+ sage: M.broken_circuit_complex()
833
+ Traceback (most recent call last):
834
+ ...
835
+ ValueError: broken circuit complex of matroid with loops is not defined
836
+ """
837
+ from sage.topology.simplicial_complex import SimplicialComplex
838
+ if self.loops():
839
+ raise ValueError("broken circuit complex of matroid with loops is not defined")
840
+ return SimplicialComplex(self.no_broken_circuits_facets(ordering, reduced), maximality_check=False)
841
+
842
+ # properties
843
+
844
+ cpdef girth(self):
845
+ r"""
846
+ Return the girth of the matroid.
847
+
848
+ The girth is the size of the smallest circuit. In case the matroid has
849
+ no circuits the girth is `\infty`.
850
+
851
+ EXAMPLES::
852
+
853
+ sage: matroids.Theta(10).girth()
854
+ 3
855
+
856
+ REFERENCES:
857
+
858
+ [Oxl2011]_, p. 327.
859
+ """
860
+ from sage.rings.infinity import infinity
861
+ return min(self._k_C, default=infinity)
862
+
863
+ cpdef bint is_paving(self) noexcept:
864
+ """
865
+ Return if ``self`` is paving.
866
+
867
+ A matroid is paving if each of its circuits has size `r` or `r+1`.
868
+
869
+ OUTPUT: boolean
870
+
871
+ EXAMPLES::
872
+
873
+ sage: from sage.matroids.circuits_matroid import CircuitsMatroid
874
+ sage: M = CircuitsMatroid(matroids.catalog.Vamos())
875
+ sage: M.is_paving()
876
+ True
877
+ """
878
+ return self.girth() >= self._matroid_rank
879
+
880
+ # verification
881
+
882
+ cpdef is_valid(self, certificate=False):
883
+ r"""
884
+ Test if ``self`` obeys the matroid axioms.
885
+
886
+ For a matroid defined by its circuits, we check the circuit axioms.
887
+
888
+ INPUT:
889
+
890
+ - ``certificate`` -- boolean (default: ``False``)
891
+
892
+ OUTPUT: boolean, or (boolean, dictionary)
893
+
894
+ EXAMPLES::
895
+
896
+ sage: C = [[1, 2, 3], [3, 4, 5], [1, 2, 4, 5]]
897
+ sage: M = Matroid(circuits=C)
898
+ sage: M.is_valid()
899
+ True
900
+ sage: C = [[1, 2], [1, 2, 3], [3, 4, 5], [1, 2, 4, 5]]
901
+ sage: M = Matroid(circuits=C)
902
+ sage: M.is_valid()
903
+ False
904
+ sage: C = [[3, 6], [1, 2, 3], [3, 4, 5], [1, 2, 4, 5]]
905
+ sage: M = Matroid(circuits=C)
906
+ sage: M.is_valid()
907
+ False
908
+ sage: C = [[3, 6], [1, 2, 3], [3, 4, 5], [1, 2, 6], [6, 4, 5], [1, 2, 4, 5]]
909
+ sage: M = Matroid(circuits=C)
910
+ sage: M.is_valid()
911
+ True
912
+ sage: C = [[], [1, 2, 3], [3, 4, 5], [1, 2, 4, 5]]
913
+ sage: M = Matroid(circuits=C)
914
+ sage: M.is_valid()
915
+ False
916
+ sage: C = [[1, 2, 3], [3, 4, 5]]
917
+ sage: M = Matroid(circuits=C)
918
+ sage: M.is_valid(certificate=True)
919
+ (False,
920
+ {'circuit 1': frozenset({...}),
921
+ 'circuit 2': frozenset({...}),
922
+ 'element': 3,
923
+ 'error': 'elimination axiom failed'})
924
+ """
925
+ from itertools import combinations_with_replacement
926
+ cdef int i, j
927
+ cdef frozenset C1, C2, I12, U12
928
+ for (i, j) in combinations_with_replacement(self._sorted_C_lens, 2):
929
+ # loop through all circuit length pairs (i, j) with i <= j
930
+ for C1 in self._k_C[i]:
931
+ if not C1: # the empty set can't be a circuit
932
+ return False if not certificate else (False, {"error": "the empty set can't be a circuit"})
933
+ for C2 in self._k_C[j]:
934
+ I12 = C1 & C2
935
+ if not I12: # C1 and C2 are disjoint; nothing to test
936
+ continue
937
+ if len(I12) == len(C1):
938
+ if len(C1) == len(C2): # they are the same circuit
939
+ break
940
+ # C1 < C2; a circuit can't be a subset of another circuit
941
+ return False if not certificate else (False, {"error": "a circuit can't be a subset of another circuit", "circuit 1": C1, "circuit 2": C2})
942
+ # check circuit elimination axiom
943
+ U12 = C1 | C2
944
+ for e in I12:
945
+ if self._is_independent(U12 - {e}):
946
+ return False if not certificate else (False, {"error": "elimination axiom failed", "circuit 1": C1, "circuit 2": C2, "element": e})
947
+ return True if not certificate else (True, {})