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,715 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs
3
+ r"""
4
+ Flats matroids
5
+
6
+ Matroids are characterized by a set of flats, which are sets invariant under
7
+ closure. The ``FlatsMatroid`` class implements matroids using this information
8
+ as data.
9
+
10
+ A ``FlatsMatroid`` can be created from another matroid or from a dictionary of
11
+ flats. For a full description of allowed inputs, see
12
+ :class:`below <sage.matroids.flats_matroid.FlatsMatroid>`. It is
13
+ recommended to use the :func:`Matroid() <sage.matroids.constructor.Matroid>`
14
+ function for a more flexible way of constructing a ``FlatsMatroid`` and other
15
+ classes of matroids. For direct access to the ``FlatsMatroid`` constructor,
16
+ run::
17
+
18
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
19
+
20
+ AUTHORS:
21
+
22
+ - Giorgos Mousa (2024-01-01): initial version
23
+ """
24
+
25
+ # ****************************************************************************
26
+ # Copyright (C) 2024 Giorgos Mousa <gmousa@proton.me>
27
+ #
28
+ # This program is free software: you can redistribute it and/or modify
29
+ # it under the terms of the GNU General Public License as published by
30
+ # the Free Software Foundation, either version 2 of the License, or
31
+ # (at your option) any later version.
32
+ # https://www.gnu.org/licenses/
33
+ # ****************************************************************************
34
+
35
+ from cpython.object cimport Py_EQ, Py_NE
36
+ from sage.structure.richcmp cimport rich_to_bool, richcmp
37
+ from sage.matroids.matroid cimport Matroid
38
+ from sage.matroids.set_system cimport SetSystem
39
+ from sage.combinat.posets.lattices import LatticePoset, FiniteLatticePoset
40
+
41
+ cdef class FlatsMatroid(Matroid):
42
+ r"""
43
+ INPUT:
44
+
45
+ - ``M`` -- matroid (default: ``None``)
46
+ - ``groundset`` -- list (default: ``None``); the groundset of the matroid
47
+ - ``flats`` -- (default: ``None``) the dictionary of the lists of flats
48
+ (indexed by their rank), or the list of all flats, or the lattice of
49
+ flats of the matroid
50
+
51
+ .. NOTE::
52
+
53
+ For a more flexible means of input, use the ``Matroid()`` function.
54
+ """
55
+
56
+ # necessary (__init__, groundset, _rank)
57
+
58
+ def __init__(self, M=None, groundset=None, flats=None):
59
+ """
60
+ Initialization of the matroid. See the class docstring for full
61
+ documentation.
62
+
63
+ TESTS::
64
+
65
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
66
+ sage: M = FlatsMatroid(matroids.catalog.Fano())
67
+ sage: TestSuite(M).run()
68
+ """
69
+ self._F = {}
70
+ self._L = None
71
+ if M is not None:
72
+ self._groundset = M.groundset()
73
+ for i in range(M.rank() + 1):
74
+ for F in M.flats(i):
75
+ try:
76
+ self._F[i].add(F)
77
+ except KeyError:
78
+ self._F[i] = set()
79
+ self._F[i].add(F)
80
+ else:
81
+ self._groundset = frozenset(groundset)
82
+ if isinstance(flats, dict):
83
+ for i in sorted(flats):
84
+ for F in flats[i]:
85
+ try:
86
+ self._F[i].add(frozenset(F))
87
+ except KeyError:
88
+ self._F[i] = set()
89
+ self._F[i].add(frozenset(F))
90
+ else: # store lattice of flats
91
+ if isinstance(flats, FiniteLatticePoset):
92
+ self._L = flats
93
+ else: # assume iterable of flats
94
+ self._L = LatticePoset(([frozenset(F) for F in flats], lambda x, y: x < y))
95
+ self._matroid_rank = self._L.rank()
96
+ for i in range(self._matroid_rank + 1):
97
+ self._F[i] = set()
98
+ for x in self._L:
99
+ self._F[self._L.rank(x)].add(x)
100
+ self._matroid_rank = max(self._F, default=-1)
101
+
102
+ cpdef frozenset groundset(self):
103
+ """
104
+ Return the groundset of the matroid.
105
+
106
+ The groundset is the set of elements that comprise the matroid.
107
+
108
+ OUTPUT: :class:`frozenset`
109
+
110
+ EXAMPLES::
111
+
112
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
113
+ sage: M = FlatsMatroid(matroids.Theta(2))
114
+ sage: sorted(M.groundset())
115
+ ['x0', 'x1', 'y0', 'y1']
116
+ """
117
+ return self._groundset
118
+
119
+ cpdef int _rank(self, frozenset X) except? -1:
120
+ """
121
+ Return the rank of a set ``X``.
122
+
123
+ This method does no checking on ``X``, and ``X`` may be assumed to have
124
+ the same interface as ``frozenset``.
125
+
126
+ INPUT:
127
+
128
+ - ``X`` -- an object with Python's ``frozenset`` interface
129
+
130
+ OUTPUT: integer
131
+
132
+ EXAMPLES::
133
+
134
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
135
+ sage: M = FlatsMatroid(matroids.Theta(3))
136
+ sage: M._rank(frozenset(['x1', 'y0', 'y2']))
137
+ 2
138
+
139
+ TESTS::
140
+
141
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
142
+ sage: M = matroids.catalog.NonDesargues()
143
+ sage: F = FlatsMatroid(M)
144
+ sage: for S in powerset(M.groundset()):
145
+ ....: assert M.rank(S) == F.rank(S)
146
+ """
147
+ for i in range(self._matroid_rank + 1):
148
+ for f in self._F[i]:
149
+ if f >= X:
150
+ return i
151
+
152
+ # optional
153
+
154
+ cpdef full_rank(self):
155
+ r"""
156
+ Return the rank of the matroid.
157
+
158
+ The *rank* of the matroid is the size of the largest independent
159
+ subset of the groundset.
160
+
161
+ OUTPUT: integer
162
+
163
+ EXAMPLES::
164
+
165
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
166
+ sage: M = FlatsMatroid(matroids.Theta(6))
167
+ sage: M.full_rank()
168
+ 6
169
+ """
170
+ return self._matroid_rank
171
+
172
+ cpdef frozenset _closure(self, frozenset X):
173
+ """
174
+ Return the closure of a set.
175
+
176
+ INPUT:
177
+
178
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
179
+ a subset of ``self.groundset()``
180
+
181
+ OUTPUT: :class:`frozenset`
182
+
183
+ EXAMPLES::
184
+
185
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
186
+ sage: M = FlatsMatroid(matroids.catalog.Vamos())
187
+ sage: sorted(M._closure(frozenset(['a', 'b', 'c'])))
188
+ ['a', 'b', 'c', 'd']
189
+ """
190
+ cdef int i
191
+ for i in range(self._matroid_rank + 1):
192
+ for f in self._F[i]:
193
+ if f >= X:
194
+ return f
195
+
196
+ cpdef bint _is_closed(self, frozenset X) noexcept:
197
+ """
198
+ Test if input is a closed set.
199
+
200
+ INPUT:
201
+
202
+ - ``X`` -- an object with Python's ``frozenset`` interface containing
203
+ a subset of ``self.groundset()``
204
+
205
+ OUTPUT: boolean
206
+
207
+ EXAMPLES::
208
+
209
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
210
+ sage: M = FlatsMatroid(matroids.catalog.Vamos())
211
+ sage: M._is_closed(frozenset(['a', 'b', 'c', 'd']))
212
+ True
213
+ sage: M._is_closed(frozenset(['a', 'b', 'c', 'e']))
214
+ False
215
+ """
216
+ cdef int i
217
+ for i in self._F:
218
+ if X in self._F[i]:
219
+ return True
220
+ return False
221
+
222
+ cpdef _is_isomorphic(self, other, certificate=False):
223
+ """
224
+ Test if ``self`` is isomorphic to ``other``.
225
+
226
+ INPUT:
227
+
228
+ - ``other`` -- matroid
229
+ - ``certificate`` -- boolean (default: ``False``)
230
+
231
+ OUTPUT: boolean, and, if ``certificate=True``, a dictionary giving the
232
+ isomorphism or ``None``
233
+
234
+ EXAMPLES::
235
+
236
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
237
+ sage: M = matroids.catalog.NonDesargues()
238
+ sage: N = FlatsMatroid(M)
239
+ sage: N._is_isomorphic(M)
240
+ True
241
+ sage: N._is_isomorphic(matroids.catalog.R9())
242
+ False
243
+
244
+ .. NOTE::
245
+
246
+ Internal version that does no input checking.
247
+ """
248
+ if certificate:
249
+ return self._is_isomorphic(other), self._isomorphism(other)
250
+ N = FlatsMatroid(other)
251
+ flats_self = [F for i in self._F for F in self._F[i]]
252
+ flats_other = [F for i in N._F for F in N._F[i]]
253
+ SS = SetSystem(self._groundset, flats_self)
254
+ OS = SetSystem(N._groundset, flats_other)
255
+ return SS._isomorphism(OS) is not None
256
+
257
+ # representation
258
+
259
+ def _repr_(self):
260
+ """
261
+ Return a string representation of the matroid.
262
+
263
+ EXAMPLES::
264
+
265
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
266
+ sage: M = FlatsMatroid(matroids.Uniform(6, 6)); M
267
+ Matroid of rank 6 on 6 elements with 64 flats
268
+ """
269
+ flats_num = sum(1 for i in self._F for F in self._F[i])
270
+ return f'{Matroid._repr_(self)} with {flats_num} flats'
271
+
272
+ # comparison
273
+
274
+ def __hash__(self):
275
+ r"""
276
+ Return an invariant of the matroid.
277
+
278
+ This function is called when matroids are added to a set. It is very
279
+ desirable to override it so it can distinguish matroids on the same
280
+ groundset, which is a very typical use case!
281
+
282
+ .. WARNING::
283
+
284
+ This method is linked to ``__richcmp__`` (in Cython) and ``__cmp__``
285
+ or ``__eq__``/``__ne__`` (in Python). If you override one, you
286
+ should (and, in Cython, \emph{must}) override the other!
287
+
288
+ EXAMPLES::
289
+
290
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
291
+ sage: M = FlatsMatroid(matroids.catalog.Vamos())
292
+ sage: N = FlatsMatroid(matroids.catalog.Vamos())
293
+ sage: hash(M) == hash(N)
294
+ True
295
+ sage: O = FlatsMatroid(matroids.catalog.NonVamos())
296
+ sage: hash(M) == hash(O)
297
+ False
298
+ """
299
+ flats = frozenset([F for i in self._F for F in self._F[i]])
300
+ return hash(tuple([self._groundset, flats]))
301
+
302
+ def __richcmp__(left, right, int op):
303
+ r"""
304
+ Compare two matroids.
305
+
306
+ We take a very restricted view on equality: the objects need to be of
307
+ the exact same type (so no subclassing) and the internal data need to
308
+ be the same. For FlatsMatroids, this means that the groundsets and the
309
+ dictionaries of flats of the two matroids are equal.
310
+
311
+ EXAMPLES::
312
+
313
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
314
+ sage: M = FlatsMatroid(matroids.catalog.Pappus())
315
+ sage: N = FlatsMatroid(matroids.catalog.NonPappus())
316
+ sage: M == N
317
+ False
318
+ sage: N = Matroid(M.bases())
319
+ sage: M == N
320
+ False
321
+ """
322
+ cdef FlatsMatroid lt, rt
323
+ if op not in [Py_EQ, Py_NE]:
324
+ return NotImplemented
325
+ if type(left) is not type(right):
326
+ return NotImplemented
327
+ lt = <FlatsMatroid> left
328
+ rt = <FlatsMatroid> right
329
+ if lt.groundset() != rt.groundset():
330
+ return rich_to_bool(op, 1)
331
+ if lt.full_rank() != rt.full_rank():
332
+ return rich_to_bool(op, 1)
333
+ return richcmp(lt._F, rt._F, op)
334
+
335
+ # copying, loading, saving
336
+
337
+ def __reduce__(self):
338
+ """
339
+ Save the matroid for later reloading.
340
+
341
+ OUTPUT:
342
+
343
+ A tuple ``(unpickle, (version, data))``, where ``unpickle`` is the
344
+ name of a function that, when called with ``(version, data)``,
345
+ produces a matroid isomorphic to ``self``. ``version`` is an integer
346
+ (currently 0) and ``data`` is a tuple ``(E, F, name)`` where ``E`` is
347
+ the groundset, ``F`` is the dictionary of flats, and ``name`` is a
348
+ custom name.
349
+
350
+ EXAMPLES::
351
+
352
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
353
+ sage: M = FlatsMatroid(matroids.catalog.Vamos())
354
+ sage: M == loads(dumps(M)) # indirect doctest
355
+ True
356
+ sage: M.reset_name()
357
+ sage: loads(dumps(M))
358
+ Matroid of rank 4 on 8 elements with 79 flats
359
+ """
360
+ import sage.matroids.unpickling
361
+ data = (self._groundset, self._F, self.get_custom_name())
362
+ version = 0
363
+ return sage.matroids.unpickling.unpickle_flats_matroid, (version, data)
364
+
365
+ cpdef relabel(self, mapping):
366
+ r"""
367
+ Return an isomorphic matroid with relabeled groundset.
368
+
369
+ The output is obtained by relabeling each element `e` by
370
+ ``mapping[e]``, where ``mapping`` is a given injective map. If
371
+ ``mapping[e]`` is not defined, then the identity map is assumed.
372
+
373
+ INPUT:
374
+
375
+ - ``mapping`` -- a Python object such that ``mapping[e]`` is the new
376
+ label of `e`
377
+
378
+ OUTPUT: matroid
379
+
380
+ EXAMPLES::
381
+
382
+ sage: # needs sage.rings.finite_rings
383
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
384
+ sage: M = FlatsMatroid(matroids.catalog.RelaxedNonFano())
385
+ sage: sorted(M.groundset())
386
+ [0, 1, 2, 3, 4, 5, 6]
387
+ sage: N = M.relabel({'g': 'x', 0: 'z'}) # 'g': 'x' is ignored
388
+ sage: from sage.matroids.utilities import cmp_elements_key
389
+ sage: sorted(N.groundset(), key=cmp_elements_key)
390
+ [1, 2, 3, 4, 5, 6, 'z']
391
+ sage: M.is_isomorphic(N)
392
+ True
393
+
394
+ TESTS::
395
+
396
+ sage: # needs sage.rings.finite_rings
397
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
398
+ sage: M = FlatsMatroid(matroids.catalog.RelaxedNonFano())
399
+ sage: f = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g'}
400
+ sage: N = M.relabel(f)
401
+ sage: for S in powerset(M.groundset()):
402
+ ....: assert M.rank(S) == N.rank([f[x] for x in S])
403
+ """
404
+ d = self._relabel_map(mapping)
405
+ E = [d[x] for x in self._groundset]
406
+ F = {}
407
+ for i in self._F:
408
+ F[i] = []
409
+ F[i] += [[d[y] for y in x] for x in self._F[i]]
410
+ M = FlatsMatroid(groundset=E, flats=F)
411
+ return M
412
+
413
+ # enumeration
414
+
415
+ cpdef SetSystem flats(self, long k):
416
+ r"""
417
+ Return the flats of the matroid of specified rank.
418
+
419
+ INPUT:
420
+
421
+ - ``k`` -- integer
422
+
423
+ OUTPUT: :class:`SetSystem`
424
+
425
+ EXAMPLES::
426
+
427
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
428
+ sage: M = FlatsMatroid(matroids.Uniform(3, 4))
429
+ sage: sorted(M.flats(2), key=str)
430
+ [frozenset({0, 1}),
431
+ frozenset({0, 2}),
432
+ frozenset({0, 3}),
433
+ frozenset({1, 2}),
434
+ frozenset({1, 3}),
435
+ frozenset({2, 3})]
436
+ """
437
+ if k in self._F:
438
+ return SetSystem(self._groundset, self._F[k])
439
+ return SetSystem(self._groundset)
440
+
441
+ def flats_iterator(self, k):
442
+ r"""
443
+ Return an iterator over the flats of the matroid of specified rank.
444
+
445
+ INPUT:
446
+
447
+ - ``k`` -- integer
448
+
449
+ EXAMPLES::
450
+
451
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
452
+ sage: M = FlatsMatroid(matroids.Uniform(3, 4))
453
+ sage: sorted([list(F) for F in M.flats_iterator(2)])
454
+ [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]
455
+ """
456
+ if k in self._F:
457
+ for F in self._F[k]:
458
+ yield F
459
+
460
+ def lattice_of_flats(self):
461
+ """
462
+ Return the lattice of flats of the matroid.
463
+
464
+ EXAMPLES::
465
+
466
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
467
+ sage: M = FlatsMatroid(matroids.catalog.Fano())
468
+ sage: M.lattice_of_flats()
469
+ Finite lattice containing 16 elements
470
+ """
471
+ if self._L is None:
472
+ flats = [F for i in range(self._matroid_rank + 1) for F in self._F[i]]
473
+ self._L = LatticePoset((flats, lambda x, y: x < y))
474
+ return self._L
475
+
476
+ cpdef list whitney_numbers(self):
477
+ r"""
478
+ Return the Whitney numbers of the first kind of the matroid.
479
+
480
+ The Whitney numbers of the first kind -- here encoded as a vector
481
+ `(w_0=1, \ldots, w_r)` -- are numbers of alternating sign, where `w_i`
482
+ is the value of the coefficient of the `(r-i)`-th degree term of the
483
+ matroid's characteristic polynomial. Moreover, `|w_i|` is the number of
484
+ `(i-1)`-dimensional faces of the broken circuit complex of the matroid.
485
+
486
+ OUTPUT: list of integers
487
+
488
+ EXAMPLES::
489
+
490
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
491
+ sage: M = FlatsMatroid(matroids.catalog.BetsyRoss())
492
+ sage: M.whitney_numbers()
493
+ [1, -11, 35, -25]
494
+
495
+ TESTS::
496
+
497
+ sage: M = Matroid(flats=[[0], [0, 1]])
498
+ sage: M.whitney_numbers()
499
+ []
500
+ """
501
+ if self.loops():
502
+ return []
503
+ cdef list w = [0] * (self._matroid_rank + 1)
504
+ if self._L is None:
505
+ for S in self.no_broken_circuits_sets_iterator():
506
+ w[len(S)] += 1
507
+ from sage.rings.integer_ring import ZZ
508
+ return [ZZ((-1)**i * abs_w) for (i, abs_w) in enumerate(w)]
509
+ else:
510
+ mu = self._L.moebius_function_matrix()
511
+ for (i, F) in enumerate(self._L.list()):
512
+ w[self._L.rank(F)] += mu[0, i]
513
+ return w
514
+
515
+ cpdef list whitney_numbers2(self):
516
+ r"""
517
+ Return the Whitney numbers of the second kind of the matroid.
518
+
519
+ The Whitney numbers of the second kind are here encoded as a vector
520
+ `(W_0, ..., W_r)`, where `W_i` is the number of flats of rank `i`, and
521
+ `r` is the rank of the matroid.
522
+
523
+ OUTPUT: list of integers
524
+
525
+ EXAMPLES::
526
+
527
+ sage: # needs sage.rings.finite_rings
528
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
529
+ sage: M = FlatsMatroid(matroids.catalog.XY13())
530
+ sage: M.whitney_numbers2()
531
+ [1, 13, 78, 250, 394, 191, 1]
532
+
533
+ TESTS::
534
+
535
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
536
+ sage: for M in matroids.AllMatroids(4): # optional - matroid_database
537
+ ....: assert M.whitney_numbers2() == FlatsMatroid(M).whitney_numbers2()
538
+ """
539
+ cdef list W = []
540
+ cdef int i
541
+ for i in self._F:
542
+ W.append(len(self._F[i]))
543
+ return W
544
+
545
+ # verification
546
+
547
+ cpdef is_valid(self, certificate=False):
548
+ r"""
549
+ Test if ``self`` obeys the matroid axioms.
550
+
551
+ For a matroid defined by its flats, we check the flats axioms.
552
+
553
+ If the lattice of flats has already been computed, we instead perform
554
+ the equivalent check of whether it forms a geometric lattice.
555
+
556
+ INPUT:
557
+
558
+ - ``certificate`` -- boolean (default: ``False``)
559
+
560
+ OUTPUT: boolean, or (boolean, dictionary)
561
+
562
+ EXAMPLES::
563
+
564
+ sage: Matroid(flats={0: [[]], 1: [[0], [1]], 2: [[0, 1]]}).is_valid()
565
+ True
566
+ sage: Matroid(flats={0: [''], 1: ['a', 'b'], 2: ['ab']}).is_valid()
567
+ True
568
+ sage: M = Matroid(flats={0: [[]], 1: [[0], [1]]}) # missing groundset
569
+ sage: M.is_valid()
570
+ False
571
+ sage: M = Matroid(flats={0: [''],
572
+ ....: 1: ['0','1','2','3','4','5','6','7','8','9','a','b','c'],
573
+ ....: 2: ['45','46','47','4c','56','57','5c','67','6c','7c',
574
+ ....: '048','149','24a','34b','059','15a','25b','358',
575
+ ....: '06a','16b','268','369','07b','178','279','37a',
576
+ ....: '0123c','89abc'],
577
+ ....: 3: ['0123456789abc']})
578
+ sage: M.is_valid()
579
+ True
580
+ sage: from sage.matroids.flats_matroid import FlatsMatroid
581
+ sage: FlatsMatroid(matroids.catalog.NonVamos()).is_valid()
582
+ True
583
+
584
+ If we input a list or a lattice of flats, the method checks whether the
585
+ lattice of flats is geometric::
586
+
587
+ sage: Matroid(flats=[[], [0], [1], [0, 1]]).is_valid()
588
+ True
589
+ sage: Matroid(flats=['', 'a', 'b', 'ab']).is_valid()
590
+ True
591
+ sage: M = Matroid(flats=['', # missing an extension of flat ['5'] by '6'
592
+ ....: '0','1','2','3','4','5','6','7','8','9','a','b','c',
593
+ ....: '45','46','47','4c','57','5c','67','6c','7c',
594
+ ....: '048','149','24a','34b','059','15a','25b','358',
595
+ ....: '06a','16b','268','369','07b','178','279','37a',
596
+ ....: '0123c','89abc',
597
+ ....: '0123456789abc'])
598
+ sage: M.is_valid(certificate=True)
599
+ (False, {'error': 'the lattice of flats is not geometric'})
600
+ sage: Matroid(matroids.catalog.Fano().lattice_of_flats()).is_valid()
601
+ True
602
+
603
+ Some invalid lists of flats are recognized before calling ``is_valid``,
604
+ upon the attempted matroid definition::
605
+
606
+ sage: M = Matroid(flats=[[], [0], [1]]) # missing groundset
607
+ Traceback (most recent call last):
608
+ ...
609
+ ValueError: not a join-semilattice: no top element
610
+ sage: Matroid(flats=[[0], [1], [0, 1]]) # missing an intersection
611
+ Traceback (most recent call last):
612
+ ...
613
+ ValueError: not a meet-semilattice: no bottom element
614
+ sage: Matroid(flats=[[], [0, 1], [2], [0], [1], [0, 1, 2]])
615
+ Traceback (most recent call last):
616
+ ...
617
+ ValueError: the poset is not ranked
618
+
619
+ TESTS::
620
+
621
+ sage: Matroid(flats={0: [], 1: [[0], [1]], 2: [[0, 1]]}).is_valid(certificate=True) # missing an intersection
622
+ (False, {'error': 'flats dictionary has invalid ranks'})
623
+ sage: Matroid(flats={0: [[]], 2: [[0], [1]], 3: [[0, 1]]}).is_valid(certificate=True) # invalid ranks
624
+ (False, {'error': 'flats dictionary has invalid ranks'})
625
+ sage: Matroid(flats={0: [[]], 1: [[0], [1]], 2: [[0], [0, 1]]}).is_valid(certificate=True) # duplicates
626
+ (False, {'error': 'flats dictionary has repeated flats'})
627
+ sage: Matroid(flats={0: [[]], 1: [[0], [1], [0, 1]]}).is_valid(certificate=True)
628
+ (False,
629
+ {'error': 'a single element extension of a flat must be a subset of exactly one flat',
630
+ 'flat': frozenset()})
631
+ sage: Matroid(flats={0: [[]], 1: [[0, 1], [2]], 2: [[0], [1], [0, 1, 2]]}).is_valid(certificate=True)
632
+ (False,
633
+ {'error': 'the intersection of two flats must be a flat',
634
+ 'flat 1': frozenset({0, 1}),
635
+ 'flat 2': frozenset({1})})
636
+ sage: M = Matroid(flats={0: [''], # missing an extension of flat ['5'] by '6'
637
+ ....: 1: ['0','1','2','3','4','5','6','7','8','9','a','b','c'],
638
+ ....: 2: ['45','46','47','4c','57','5c','67','6c','7c',
639
+ ....: '048','149','24a','34b','059','15a','25b','358',
640
+ ....: '06a','16b','268','369','07b','178','279','37a',
641
+ ....: '0123c','89abc'],
642
+ ....: 3: ['0123456789abc']})
643
+ sage: M.is_valid(certificate=True)
644
+ (False,
645
+ {'error': 'a single element extension of a flat must be a subset of exactly one flat',
646
+ 'flat': frozenset({'...'})})
647
+ sage: M = Matroid(flats=[[], [0], [1], [0], [0, 1]]) # duplicates are ignored
648
+ sage: M.lattice_of_flats()
649
+ Finite lattice containing 4 elements
650
+ sage: M.is_valid(certificate=True)
651
+ (True, {})
652
+ sage: M = Matroid(flats=['',
653
+ ....: '0','1','2','3','4','5','6','7','8','9','a','b','c',
654
+ ....: '45','46','47','4c','56','57','5c','67','6c','7c',
655
+ ....: '048','149','24a','34b','059','15a','25b','358',
656
+ ....: '06a','16b','268','369','07b','178','279','37a',
657
+ ....: '0123c','89abc',
658
+ ....: '0123456789abc'])
659
+ sage: M.is_valid(certificate=True)
660
+ (True, {})
661
+ """
662
+ if self._L is not None: # if the lattice of flats is available
663
+ if certificate:
664
+ if not self._is_closed(self._groundset):
665
+ return False, {"error": "the groundset must be a flat"}
666
+ if not self._L.is_geometric():
667
+ return False, {"error": "the lattice of flats is not geometric"}
668
+ return True, {}
669
+ return self._is_closed(self._groundset) and self._L.is_geometric()
670
+
671
+ cdef int i, j, k
672
+ cdef frozenset F1, F2, I12
673
+ cdef list ranks, cover, flats_lst
674
+ cdef bint flag
675
+
676
+ # check flats dictionary for invalid ranks and repeated flats
677
+ ranks = list(self._F)
678
+ if ranks != list(range(len(ranks))):
679
+ return False if not certificate else (False, {"error": "flats dictionary has invalid ranks"})
680
+ flats_lst = [F for i in self._F for F in self._F[i]]
681
+ if len(flats_lst) != len(set(flats_lst)):
682
+ return False if not certificate else (False, {"error": "flats dictionary has repeated flats"})
683
+
684
+ # the groundset must be a flat
685
+ if not self._is_closed(self._groundset):
686
+ return False if not certificate else (False, {"error": "the groundset must be a flat"})
687
+
688
+ # a single element extension of a flat must be a subset of exactly one flat
689
+ for i in ranks[:-1]:
690
+ for F1 in self._F[i]:
691
+ cover = []
692
+ for F2 in self._F[i+1]:
693
+ if F2 >= F1:
694
+ cover.extend(F1 ^ F2)
695
+ if len(cover) != len(F1 ^ self._groundset) or set(cover) != F1 ^ self._groundset:
696
+ return False if not certificate else (False, {"error": "a single element extension of a flat must be a subset of exactly one flat", "flat": F1})
697
+
698
+ # the intersection of two flats must be a flat
699
+ for i in ranks:
700
+ for j in ranks[i:]:
701
+ for F1 in self._F[i]:
702
+ for F2 in self._F[j]:
703
+ flag = False
704
+ I12 = F1 & F2
705
+ for k in self._F:
706
+ if k <= i:
707
+ if I12 in self._F[k]:
708
+ flag = True
709
+ break
710
+ if flag:
711
+ break
712
+ if not flag:
713
+ return False if not certificate else (False, {"error": "the intersection of two flats must be a flat", "flat 1": F1, "flat 2": F2})
714
+
715
+ return True if not certificate else (True, {})