passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- 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, {})
|