passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_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 +806 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-4c5b64b1.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.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-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.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-gnu.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-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-gnu.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-gnu.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,800 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Set systems
|
|
4
|
+
|
|
5
|
+
Many matroid methods return a collection of subsets. In this module a class
|
|
6
|
+
:class:`SetSystem <sage.matroids.set_system.SetSystem>` is defined to do
|
|
7
|
+
just this. The class is intended for internal use, so all you can do as a user
|
|
8
|
+
is iterate over its members.
|
|
9
|
+
|
|
10
|
+
The class is equipped with partition refinement methods to help with matroid
|
|
11
|
+
isomorphism testing.
|
|
12
|
+
|
|
13
|
+
AUTHORS:
|
|
14
|
+
|
|
15
|
+
- Rudi Pendavingh, Stefan van Zwam (2013-04-01): initial version
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
# Copyright (C) 2013 Rudi Pendavingh <rudi.pendavingh@gmail.com>
|
|
20
|
+
# Copyright (C) 2013 Stefan van Zwam <stefanvanzwam@gmail.com>
|
|
21
|
+
#
|
|
22
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
23
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
24
|
+
# the License, or (at your option) any later version.
|
|
25
|
+
# https://www.gnu.org/licenses/
|
|
26
|
+
# ****************************************************************************
|
|
27
|
+
|
|
28
|
+
from cysignals.memory cimport check_allocarray, check_reallocarray, sig_free
|
|
29
|
+
from sage.data_structures.bitset_base cimport *
|
|
30
|
+
|
|
31
|
+
# SetSystem
|
|
32
|
+
|
|
33
|
+
cdef class SetSystem:
|
|
34
|
+
"""
|
|
35
|
+
A ``SetSystem`` is an enumerator of a collection of subsets of a given
|
|
36
|
+
fixed and finite groundset. It offers the possibility to enumerate its
|
|
37
|
+
contents. One is most likely to encounter these as output from some
|
|
38
|
+
Matroid methods::
|
|
39
|
+
|
|
40
|
+
sage: M = matroids.catalog.Fano()
|
|
41
|
+
sage: M.circuits()
|
|
42
|
+
SetSystem of 14 sets over 7 elements
|
|
43
|
+
|
|
44
|
+
To access the sets in this structure, simply iterate over them. The
|
|
45
|
+
simplest way must be::
|
|
46
|
+
|
|
47
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
48
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
49
|
+
sage: T = list(S)
|
|
50
|
+
|
|
51
|
+
Or immediately use it to iterate::
|
|
52
|
+
|
|
53
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
54
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
55
|
+
sage: [min(X) for X in S]
|
|
56
|
+
[1, 3, 1]
|
|
57
|
+
|
|
58
|
+
Note that this class is intended for runtime, so no loads/dumps mechanism
|
|
59
|
+
was implemented.
|
|
60
|
+
|
|
61
|
+
.. WARNING::
|
|
62
|
+
|
|
63
|
+
The only guaranteed behavior of this class is that it is iterable. It
|
|
64
|
+
is expected that M.circuits(), M.bases(), and so on will in the near
|
|
65
|
+
future return actual iterators. All other methods (which are already
|
|
66
|
+
hidden by default) are only for internal use by the Sage matroid code.
|
|
67
|
+
"""
|
|
68
|
+
def __cinit__(self, groundset, subsets=None, capacity=1):
|
|
69
|
+
"""
|
|
70
|
+
Init internal data structures.
|
|
71
|
+
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
75
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
76
|
+
sage: S
|
|
77
|
+
SetSystem of 3 sets over 4 elements
|
|
78
|
+
"""
|
|
79
|
+
cdef long i
|
|
80
|
+
if not isinstance(groundset, tuple):
|
|
81
|
+
self._groundset = tuple(groundset)
|
|
82
|
+
else:
|
|
83
|
+
self._groundset = groundset
|
|
84
|
+
self._idx = {}
|
|
85
|
+
for i in range(len(self._groundset)):
|
|
86
|
+
self._idx[self._groundset[i]] = i
|
|
87
|
+
|
|
88
|
+
self._groundset_size = len(groundset)
|
|
89
|
+
self._bitset_size = max(self._groundset_size, 1)
|
|
90
|
+
self._capacity = capacity
|
|
91
|
+
self._subsets = <bitset_t*>check_allocarray(self._capacity, sizeof(bitset_t))
|
|
92
|
+
bitset_init(self._temp, self._bitset_size)
|
|
93
|
+
self._len = 0
|
|
94
|
+
|
|
95
|
+
def __init__(self, groundset, subsets=None, capacity=1):
|
|
96
|
+
"""
|
|
97
|
+
Create a SetSystem.
|
|
98
|
+
|
|
99
|
+
INPUT:
|
|
100
|
+
|
|
101
|
+
- ``groundset`` -- list or tuple of finitely many elements
|
|
102
|
+
- ``subsets`` -- (default: ``None``) enumerator for a set of subsets of
|
|
103
|
+
``groundset``
|
|
104
|
+
- ``capacity`` -- (default: ``1``) initial maximal capacity of the set
|
|
105
|
+
system
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
110
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
111
|
+
sage: S
|
|
112
|
+
SetSystem of 3 sets over 4 elements
|
|
113
|
+
sage: sorted(S[1])
|
|
114
|
+
[3, 4]
|
|
115
|
+
sage: for s in S: print(sorted(s))
|
|
116
|
+
[1, 2]
|
|
117
|
+
[3, 4]
|
|
118
|
+
[1, 2, 4]
|
|
119
|
+
"""
|
|
120
|
+
if subsets is not None:
|
|
121
|
+
for e in subsets:
|
|
122
|
+
self.append(e)
|
|
123
|
+
|
|
124
|
+
def __dealloc__(self):
|
|
125
|
+
cdef long i
|
|
126
|
+
for i in range(self._len):
|
|
127
|
+
bitset_free(self._subsets[i])
|
|
128
|
+
sig_free(self._subsets)
|
|
129
|
+
bitset_free(self._temp)
|
|
130
|
+
|
|
131
|
+
def __len__(self):
|
|
132
|
+
"""
|
|
133
|
+
Return the number of subsets in this SetSystem.
|
|
134
|
+
|
|
135
|
+
EXAMPLES::
|
|
136
|
+
|
|
137
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
138
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
139
|
+
sage: S
|
|
140
|
+
SetSystem of 3 sets over 4 elements
|
|
141
|
+
sage: len(S)
|
|
142
|
+
3
|
|
143
|
+
"""
|
|
144
|
+
return self._len
|
|
145
|
+
|
|
146
|
+
def __iter__(self):
|
|
147
|
+
"""
|
|
148
|
+
Return an iterator for the subsets in this SetSystem.
|
|
149
|
+
|
|
150
|
+
EXAMPLES::
|
|
151
|
+
|
|
152
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
153
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
154
|
+
sage: for s in S: print(sorted(s))
|
|
155
|
+
[1, 2]
|
|
156
|
+
[3, 4]
|
|
157
|
+
[1, 2, 4]
|
|
158
|
+
"""
|
|
159
|
+
return SetSystemIterator(self)
|
|
160
|
+
|
|
161
|
+
def __getitem__(self, k):
|
|
162
|
+
"""
|
|
163
|
+
Return the `k`-th subset in this SetSystem.
|
|
164
|
+
|
|
165
|
+
INPUT:
|
|
166
|
+
|
|
167
|
+
- ``k`` -- integer; the index of the subset in the system
|
|
168
|
+
|
|
169
|
+
OUTPUT: the subset at index `k`
|
|
170
|
+
|
|
171
|
+
EXAMPLES::
|
|
172
|
+
|
|
173
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
174
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
175
|
+
sage: sorted(S[0])
|
|
176
|
+
[1, 2]
|
|
177
|
+
sage: sorted(S[1])
|
|
178
|
+
[3, 4]
|
|
179
|
+
sage: sorted(S[2])
|
|
180
|
+
[1, 2, 4]
|
|
181
|
+
"""
|
|
182
|
+
if k < len(self):
|
|
183
|
+
return self.subset(k)
|
|
184
|
+
else:
|
|
185
|
+
raise ValueError("out of range")
|
|
186
|
+
|
|
187
|
+
def __repr__(self):
|
|
188
|
+
"""
|
|
189
|
+
Return a string representation of ``self``.
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
194
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
195
|
+
sage: repr(S) # indirect doctest
|
|
196
|
+
'SetSystem of 3 sets over 4 elements'
|
|
197
|
+
"""
|
|
198
|
+
return f'SetSystem of {self._len} sets over {self._groundset_size} elements'
|
|
199
|
+
|
|
200
|
+
cdef copy(self):
|
|
201
|
+
cdef SetSystem S
|
|
202
|
+
S = SetSystem(self._groundset, capacity=len(self))
|
|
203
|
+
for i in range(len(self)):
|
|
204
|
+
S._append(self._subsets[i])
|
|
205
|
+
return S
|
|
206
|
+
|
|
207
|
+
cdef _relabel(self, mapping):
|
|
208
|
+
"""
|
|
209
|
+
Relabel each element `e` of the ground set as ``mapping[e]``, where
|
|
210
|
+
``mapping`` is a given injective map.
|
|
211
|
+
|
|
212
|
+
INPUT:
|
|
213
|
+
|
|
214
|
+
- ``mapping`` -- a Python object such that ``mapping[e]`` is the new
|
|
215
|
+
label of `e`
|
|
216
|
+
|
|
217
|
+
OUTPUT: none
|
|
218
|
+
"""
|
|
219
|
+
cdef long i
|
|
220
|
+
E = []
|
|
221
|
+
for i in range(self._groundset_size):
|
|
222
|
+
if self._groundset[i] in mapping:
|
|
223
|
+
E.append(mapping[self._E[i]])
|
|
224
|
+
else:
|
|
225
|
+
E.append(self._E[i])
|
|
226
|
+
self._groundset = E
|
|
227
|
+
self._idx = {}
|
|
228
|
+
for i in range(self._groundset_size):
|
|
229
|
+
self._idx[self._groundset[i]] = i
|
|
230
|
+
|
|
231
|
+
cpdef _complements(self):
|
|
232
|
+
"""
|
|
233
|
+
Return a SetSystem containing the complements of each element in the
|
|
234
|
+
groundset.
|
|
235
|
+
|
|
236
|
+
EXAMPLES::
|
|
237
|
+
|
|
238
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
239
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
240
|
+
sage: T = S._complements()
|
|
241
|
+
sage: for t in T: print(sorted(t))
|
|
242
|
+
[3, 4]
|
|
243
|
+
[1, 2]
|
|
244
|
+
[3]
|
|
245
|
+
"""
|
|
246
|
+
cdef SetSystem S
|
|
247
|
+
if self._groundset_size == 0:
|
|
248
|
+
return self
|
|
249
|
+
S = SetSystem(self._groundset, capacity=len(self))
|
|
250
|
+
for i in range(len(self)):
|
|
251
|
+
bitset_complement(self._temp, self._subsets[i])
|
|
252
|
+
S._append(self._temp)
|
|
253
|
+
return S
|
|
254
|
+
|
|
255
|
+
cdef inline resize(self, k=None):
|
|
256
|
+
"""
|
|
257
|
+
Change the capacity of the SetSystem.
|
|
258
|
+
"""
|
|
259
|
+
if k is None:
|
|
260
|
+
k = self._len
|
|
261
|
+
for i in range(k, self._len):
|
|
262
|
+
bitset_free(self._subsets[i])
|
|
263
|
+
self._len = min(self._len, k)
|
|
264
|
+
k2 = max(k, 1)
|
|
265
|
+
self._subsets = <bitset_t*>check_reallocarray(self._subsets, k2, sizeof(bitset_t))
|
|
266
|
+
self._capacity = k2
|
|
267
|
+
|
|
268
|
+
cdef inline _append(self, bitset_t X):
|
|
269
|
+
"""
|
|
270
|
+
Append subset in internal, bitset format.
|
|
271
|
+
"""
|
|
272
|
+
if self._capacity == self._len:
|
|
273
|
+
self.resize(self._capacity * 2)
|
|
274
|
+
bitset_init(self._subsets[self._len], self._bitset_size)
|
|
275
|
+
bitset_copy(self._subsets[self._len], X)
|
|
276
|
+
self._len += 1
|
|
277
|
+
|
|
278
|
+
cdef inline append(self, X):
|
|
279
|
+
"""
|
|
280
|
+
Append subset.
|
|
281
|
+
"""
|
|
282
|
+
if self._capacity == self._len:
|
|
283
|
+
self.resize(self._capacity * 2)
|
|
284
|
+
bitset_init(self._subsets[self._len], self._bitset_size)
|
|
285
|
+
bitset_clear(self._subsets[self._len])
|
|
286
|
+
for x in X:
|
|
287
|
+
bitset_add(self._subsets[self._len], <mp_bitcnt_t> self._idx[x])
|
|
288
|
+
self._len += 1
|
|
289
|
+
|
|
290
|
+
cdef inline _subset(self, long k):
|
|
291
|
+
"""
|
|
292
|
+
Return the `k`-th subset, in index format.
|
|
293
|
+
"""
|
|
294
|
+
return bitset_list(self._subsets[k])
|
|
295
|
+
|
|
296
|
+
cdef subset(self, k):
|
|
297
|
+
"""
|
|
298
|
+
Return the `k`-th subset.
|
|
299
|
+
"""
|
|
300
|
+
cdef long i
|
|
301
|
+
F = set()
|
|
302
|
+
i = bitset_first(self._subsets[k])
|
|
303
|
+
while i >= 0:
|
|
304
|
+
F.add(self._groundset[i])
|
|
305
|
+
i = bitset_next(self._subsets[k], i + 1)
|
|
306
|
+
return frozenset(F)
|
|
307
|
+
|
|
308
|
+
cpdef _get_groundset(self):
|
|
309
|
+
"""
|
|
310
|
+
Return the groundset of this SetSystem.
|
|
311
|
+
|
|
312
|
+
EXAMPLES::
|
|
313
|
+
|
|
314
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
315
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
316
|
+
sage: sorted(S._get_groundset())
|
|
317
|
+
[1, 2, 3, 4]
|
|
318
|
+
"""
|
|
319
|
+
return frozenset(self._groundset)
|
|
320
|
+
|
|
321
|
+
cpdef is_connected(self):
|
|
322
|
+
"""
|
|
323
|
+
Test if the :class:`SetSystem` is connected.
|
|
324
|
+
|
|
325
|
+
A :class:`SetSystem` is connected if there is no nonempty proper subset
|
|
326
|
+
``X`` of the groundset so the each subset is either contained in ``X``
|
|
327
|
+
or disjoint from ``X``.
|
|
328
|
+
|
|
329
|
+
EXAMPLES::
|
|
330
|
+
|
|
331
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
332
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
333
|
+
sage: S.is_connected()
|
|
334
|
+
True
|
|
335
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4]])
|
|
336
|
+
sage: S.is_connected()
|
|
337
|
+
False
|
|
338
|
+
sage: S = SetSystem([1], [])
|
|
339
|
+
sage: S.is_connected()
|
|
340
|
+
True
|
|
341
|
+
"""
|
|
342
|
+
if self._groundset_size <= 1:
|
|
343
|
+
return True
|
|
344
|
+
cdef long i
|
|
345
|
+
bitset_clear(self._temp)
|
|
346
|
+
cdef bitset_t active
|
|
347
|
+
bitset_init(active, self._len)
|
|
348
|
+
bitset_complement(active, active)
|
|
349
|
+
|
|
350
|
+
# We compute the union of all sets containing 0, and deactivate them.
|
|
351
|
+
for i in range(self._len):
|
|
352
|
+
if bitset_in(self._subsets[i], 0):
|
|
353
|
+
bitset_union(self._temp, self._subsets[i], self._temp)
|
|
354
|
+
bitset_discard(active, i)
|
|
355
|
+
|
|
356
|
+
cdef bint closed = False
|
|
357
|
+
while not closed:
|
|
358
|
+
closed = True
|
|
359
|
+
|
|
360
|
+
# We update _temp with all active sets that intersects it. If there
|
|
361
|
+
# is no such set, then _temp is closed (i.e. a connected component).
|
|
362
|
+
i = bitset_first(active)
|
|
363
|
+
while i>=0:
|
|
364
|
+
if not bitset_are_disjoint(self._temp, self._subsets[i]):
|
|
365
|
+
bitset_union(self._temp, self._subsets[i], self._temp)
|
|
366
|
+
bitset_discard(active, i)
|
|
367
|
+
closed = False
|
|
368
|
+
i = bitset_next(active, i+1)
|
|
369
|
+
bitset_free(active)
|
|
370
|
+
bitset_complement(self._temp, self._temp)
|
|
371
|
+
return bitset_isempty(self._temp)
|
|
372
|
+
|
|
373
|
+
# isomorphism
|
|
374
|
+
|
|
375
|
+
cdef list _incidence_count(self, E):
|
|
376
|
+
"""
|
|
377
|
+
For the sub-collection indexed by ``E``, count how often each element
|
|
378
|
+
occurs.
|
|
379
|
+
"""
|
|
380
|
+
cdef long i, e
|
|
381
|
+
cdef list cnt
|
|
382
|
+
cnt = [0 for v in range(self._groundset_size)]
|
|
383
|
+
for e in E:
|
|
384
|
+
i = bitset_first(self._subsets[e])
|
|
385
|
+
while i >= 0:
|
|
386
|
+
cnt[i] += 1
|
|
387
|
+
i = bitset_next(self._subsets[e], i + 1)
|
|
388
|
+
return cnt
|
|
389
|
+
|
|
390
|
+
cdef SetSystem _groundset_partition(self, SetSystem P, list cnt):
|
|
391
|
+
"""
|
|
392
|
+
Helper method for partition methods below.
|
|
393
|
+
"""
|
|
394
|
+
cdef dict C
|
|
395
|
+
cdef long i, v, t0, t
|
|
396
|
+
cdef bint split
|
|
397
|
+
|
|
398
|
+
C = {}
|
|
399
|
+
for i in range(len(P)):
|
|
400
|
+
v = bitset_first(P._subsets[i])
|
|
401
|
+
if v < 0:
|
|
402
|
+
continue
|
|
403
|
+
t0 = cnt[v]
|
|
404
|
+
v = bitset_next(P._subsets[i], v + 1)
|
|
405
|
+
split = False
|
|
406
|
+
while v >= 0:
|
|
407
|
+
t = cnt[v]
|
|
408
|
+
if t != t0:
|
|
409
|
+
split = True
|
|
410
|
+
if t < t0:
|
|
411
|
+
t0 = t
|
|
412
|
+
v = bitset_next(P._subsets[i], v + 1)
|
|
413
|
+
if split:
|
|
414
|
+
C.clear()
|
|
415
|
+
v = bitset_first(P._subsets[i])
|
|
416
|
+
while v >= 0:
|
|
417
|
+
t = cnt[v]
|
|
418
|
+
if t != t0:
|
|
419
|
+
if t in C:
|
|
420
|
+
C[t].add(v)
|
|
421
|
+
else:
|
|
422
|
+
C[t] = set([v])
|
|
423
|
+
v = bitset_next(P._subsets[i], v + 1)
|
|
424
|
+
for t in sorted(C):
|
|
425
|
+
bitset_clear(self._temp)
|
|
426
|
+
for v in C[t]:
|
|
427
|
+
bitset_add(self._temp, v)
|
|
428
|
+
bitset_discard(P._subsets[i], v)
|
|
429
|
+
P._append(self._temp)
|
|
430
|
+
|
|
431
|
+
cdef long subset_characteristic(self, SetSystem P, long e) noexcept:
|
|
432
|
+
"""
|
|
433
|
+
Helper method for partition methods below.
|
|
434
|
+
"""
|
|
435
|
+
cdef long c
|
|
436
|
+
c = 0
|
|
437
|
+
for p in range(len(P)):
|
|
438
|
+
c <<= bitset_len(P._subsets[p])
|
|
439
|
+
bitset_intersection(self._temp, P._subsets[p], self._subsets[e])
|
|
440
|
+
c += bitset_len(self._temp)
|
|
441
|
+
return c
|
|
442
|
+
|
|
443
|
+
cdef subsets_partition(self, SetSystem P=None, E=None):
|
|
444
|
+
"""
|
|
445
|
+
Helper method for partition methods below.
|
|
446
|
+
"""
|
|
447
|
+
if P is None:
|
|
448
|
+
P = self.groundset_partition()
|
|
449
|
+
if E is None:
|
|
450
|
+
E = range(self._len)
|
|
451
|
+
if len(E) == 0:
|
|
452
|
+
return [E]
|
|
453
|
+
|
|
454
|
+
ED = [(self.subset_characteristic(P, e), e) for e in E]
|
|
455
|
+
ED.sort()
|
|
456
|
+
|
|
457
|
+
EP = []
|
|
458
|
+
ep = []
|
|
459
|
+
d = ED[0][0]
|
|
460
|
+
eh = [d]
|
|
461
|
+
for ed in ED:
|
|
462
|
+
if ed[0] != d:
|
|
463
|
+
EP.append(ep)
|
|
464
|
+
ep = [ed[1]]
|
|
465
|
+
d = ed[0]
|
|
466
|
+
else:
|
|
467
|
+
ep.append(ed[1])
|
|
468
|
+
eh.append(ed[0])
|
|
469
|
+
EP.append(ep)
|
|
470
|
+
return EP, hash(tuple(eh))
|
|
471
|
+
|
|
472
|
+
cdef _distinguish(self, Py_ssize_t v):
|
|
473
|
+
"""
|
|
474
|
+
Helper method for partition methods below.
|
|
475
|
+
"""
|
|
476
|
+
cdef SetSystem S
|
|
477
|
+
S = SetSystem(self._groundset, capacity=len(self) + 1)
|
|
478
|
+
bitset_clear(self._temp)
|
|
479
|
+
bitset_add(self._temp, v)
|
|
480
|
+
for i in range(len(self)):
|
|
481
|
+
bitset_difference(S._temp, self._subsets[i], self._temp)
|
|
482
|
+
S._append(S._temp)
|
|
483
|
+
S._append(self._temp)
|
|
484
|
+
return S
|
|
485
|
+
|
|
486
|
+
# partition functions
|
|
487
|
+
cdef initial_partition(self, SetSystem P=None, E=None):
|
|
488
|
+
"""
|
|
489
|
+
Helper method for partition methods below.
|
|
490
|
+
"""
|
|
491
|
+
if E is None:
|
|
492
|
+
E = range(self._len)
|
|
493
|
+
if P is None:
|
|
494
|
+
if self._groundset:
|
|
495
|
+
P = SetSystem(self._groundset, [self._groundset], capacity=self._groundset_size)
|
|
496
|
+
else:
|
|
497
|
+
P = SetSystem([], [])
|
|
498
|
+
cnt = self._incidence_count(E)
|
|
499
|
+
self._groundset_partition(P, cnt)
|
|
500
|
+
return P
|
|
501
|
+
|
|
502
|
+
cpdef _equitable_partition(self, SetSystem P=None, EP=None):
|
|
503
|
+
r"""
|
|
504
|
+
Return an equitable ordered partition of the groundset of the
|
|
505
|
+
hypergraph whose edges are the subsets in this SetSystem.
|
|
506
|
+
|
|
507
|
+
Given any ordered partition `P = (p_1, ..., p_k)` of the groundset of
|
|
508
|
+
a hypergraph, any edge `e` of the hypergraph has a characteristic
|
|
509
|
+
intersection number sequence `i(e)=(|p_1\cap e|, ... , |p_k\cap e|))`.
|
|
510
|
+
There is an ordered partition `EP` of the edges that groups the edges
|
|
511
|
+
according to this intersection number sequence. Given this an ordered
|
|
512
|
+
partition of the edges, we may similarly refine `P` to a new ordered
|
|
513
|
+
partition `P'`, by considering the incidence numbers of groundset
|
|
514
|
+
elements with each partition element of `EP`.
|
|
515
|
+
|
|
516
|
+
The ordered partition `P` is equitable when `P' = P`.
|
|
517
|
+
|
|
518
|
+
INPUT:
|
|
519
|
+
|
|
520
|
+
- ``P`` -- an equitable ordered partition of the groundset, stored as
|
|
521
|
+
a SetSystem
|
|
522
|
+
- ``EP`` -- the corresponding equitable partition of the edges, stored
|
|
523
|
+
as a list of lists of indices of subsets of this SetSystem
|
|
524
|
+
|
|
525
|
+
OUTPUT:
|
|
526
|
+
|
|
527
|
+
- ``P`` -- an equitable ordered partition of the groundset, stored as a
|
|
528
|
+
SetSystem
|
|
529
|
+
- ``EP`` -- the corresponding equitable partition of the edges, stored
|
|
530
|
+
as a list of lists of indices of subsets of this SetSystem
|
|
531
|
+
- ``h`` -- integer invariant of the SetSystem
|
|
532
|
+
|
|
533
|
+
EXAMPLES::
|
|
534
|
+
|
|
535
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
536
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
537
|
+
sage: for p in S._equitable_partition()[0]: print(sorted(p))
|
|
538
|
+
[3]
|
|
539
|
+
[4]
|
|
540
|
+
[1, 2]
|
|
541
|
+
sage: T = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 3, 4]])
|
|
542
|
+
sage: for p in T._equitable_partition()[0]: print(sorted(p))
|
|
543
|
+
[2]
|
|
544
|
+
[1]
|
|
545
|
+
[3, 4]
|
|
546
|
+
|
|
547
|
+
.. NOTE::
|
|
548
|
+
|
|
549
|
+
We do not maintain any well-defined order when refining a
|
|
550
|
+
partition. We do maintain that the resulting order of the
|
|
551
|
+
partition elements is an invariant of the isomorphism class of the
|
|
552
|
+
hypergraph.
|
|
553
|
+
"""
|
|
554
|
+
cdef long h
|
|
555
|
+
cdef list EP2, H
|
|
556
|
+
|
|
557
|
+
if P is None:
|
|
558
|
+
P = self.initial_partition()
|
|
559
|
+
else:
|
|
560
|
+
P = P.copy()
|
|
561
|
+
if EP is None:
|
|
562
|
+
EP = self.subsets_partition(P)[0]
|
|
563
|
+
|
|
564
|
+
h = len(EP)
|
|
565
|
+
pl = 0
|
|
566
|
+
while len(P) > pl:
|
|
567
|
+
H = [h]
|
|
568
|
+
pl = len(P)
|
|
569
|
+
EP2 = []
|
|
570
|
+
for ep in EP:
|
|
571
|
+
SP, h = self.subsets_partition(P, ep)
|
|
572
|
+
H.append(h)
|
|
573
|
+
for p in SP:
|
|
574
|
+
cnt = self._incidence_count(p)
|
|
575
|
+
self._groundset_partition(P, cnt)
|
|
576
|
+
if len(p) > 1:
|
|
577
|
+
EP2.append(p)
|
|
578
|
+
EP = EP2
|
|
579
|
+
h = hash(tuple(H))
|
|
580
|
+
|
|
581
|
+
return P, EP, h
|
|
582
|
+
|
|
583
|
+
cpdef _heuristic_partition(self, SetSystem P=None, EP=None):
|
|
584
|
+
"""
|
|
585
|
+
Return a heuristic ordered partition into singletons of the ground
|
|
586
|
+
set of the hypergraph whose edges are the subsets in this SetSystem.
|
|
587
|
+
|
|
588
|
+
This partition obtained as follows: make an equitable
|
|
589
|
+
partition ``P``, and while ``P`` has a partition element ``p`` with
|
|
590
|
+
more than one element, select an arbitrary ``e`` from the first such
|
|
591
|
+
``p`` and split ``p`` into ``p-e``. Then replace ``P`` with
|
|
592
|
+
the equitable refinement of this partition.
|
|
593
|
+
|
|
594
|
+
INPUT:
|
|
595
|
+
|
|
596
|
+
- ``P`` -- (default: ``None``) an ordered partition of the groundset
|
|
597
|
+
- ``EP`` -- (default: ``None``) the corresponding partition of the
|
|
598
|
+
edges, stored as a list of lists of indices of subsets of this
|
|
599
|
+
SetSystem
|
|
600
|
+
|
|
601
|
+
OUTPUT:
|
|
602
|
+
|
|
603
|
+
- ``P`` -- an ordered partition of the groundset into singletons,
|
|
604
|
+
stored as a SetSystem
|
|
605
|
+
- ``EP`` -- the corresponding partition of the edges, stored as a list
|
|
606
|
+
of lists of indices of subsets of this SetSystem
|
|
607
|
+
- ``h`` -- integer invariant of the SetSystem
|
|
608
|
+
|
|
609
|
+
EXAMPLES::
|
|
610
|
+
|
|
611
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
612
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
613
|
+
sage: for p in S._heuristic_partition()[0]: print(sorted(p))
|
|
614
|
+
[3]
|
|
615
|
+
[4]
|
|
616
|
+
[2]
|
|
617
|
+
[1]
|
|
618
|
+
sage: T = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 3, 4]])
|
|
619
|
+
sage: for p in T._heuristic_partition()[0]: print(sorted(p))
|
|
620
|
+
[2]
|
|
621
|
+
[1]
|
|
622
|
+
[4]
|
|
623
|
+
[3]
|
|
624
|
+
"""
|
|
625
|
+
P, EP, h = self._equitable_partition(P, EP)
|
|
626
|
+
for i in range(len(P)):
|
|
627
|
+
if bitset_len(P._subsets[i]) > 1:
|
|
628
|
+
return self._heuristic_partition(P._distinguish(bitset_first(P._subsets[i])), EP)
|
|
629
|
+
return P, EP, h
|
|
630
|
+
|
|
631
|
+
cpdef _isomorphism(self, SetSystem other, SetSystem SP=None, SetSystem OP=None):
|
|
632
|
+
"""
|
|
633
|
+
Return a groundset isomorphism between this SetSystem and an other.
|
|
634
|
+
|
|
635
|
+
INPUT:
|
|
636
|
+
|
|
637
|
+
- ``other`` -- SetSystem
|
|
638
|
+
- ``SP`` -- (optional) SetSystem storing an ordered partition of the
|
|
639
|
+
groundset of ``self``
|
|
640
|
+
- ``OP`` -- (optional) SetSystem storing an ordered partition of the
|
|
641
|
+
groundset of ``other``
|
|
642
|
+
|
|
643
|
+
OUTPUT:
|
|
644
|
+
|
|
645
|
+
``morphism`` -- dictionary containing an isomorphism respecting the
|
|
646
|
+
given ordered partitions, or ``None`` if no such isomorphism exists.
|
|
647
|
+
|
|
648
|
+
EXAMPLES::
|
|
649
|
+
|
|
650
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
651
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
652
|
+
sage: T = SetSystem(['a', 'b', 'c', 'd'], [['a', 'b'], ['c', 'd'],
|
|
653
|
+
....: ['a', 'c', 'd']])
|
|
654
|
+
sage: S._isomorphism(T)
|
|
655
|
+
{1: 'c', 2: 'd', 3: 'b', 4: 'a'}
|
|
656
|
+
sage: S = SetSystem([], [])
|
|
657
|
+
sage: S._isomorphism(S)
|
|
658
|
+
{}
|
|
659
|
+
"""
|
|
660
|
+
cdef long l, p, v
|
|
661
|
+
if SP is None or OP is None:
|
|
662
|
+
SP, SEP, sh = self._equitable_partition()
|
|
663
|
+
OP, OEP, oh = other._equitable_partition()
|
|
664
|
+
if sh != oh:
|
|
665
|
+
return None
|
|
666
|
+
if len(SP) != len(OP):
|
|
667
|
+
return None
|
|
668
|
+
p = SP._groundset_size + 1
|
|
669
|
+
for i in range(len(SP)):
|
|
670
|
+
l = bitset_len(SP._subsets[i])
|
|
671
|
+
if l != bitset_len(OP._subsets[i]):
|
|
672
|
+
return None
|
|
673
|
+
if l != 1 and l < p:
|
|
674
|
+
p = l
|
|
675
|
+
for i in range(len(SP)):
|
|
676
|
+
if bitset_len(SP._subsets[i]) == p:
|
|
677
|
+
SP2, SEP, sh = self._equitable_partition(SP._distinguish(bitset_first(SP._subsets[i])))
|
|
678
|
+
v = bitset_first(OP._subsets[i])
|
|
679
|
+
while v >= 0:
|
|
680
|
+
OP2, OEP, oh = other._equitable_partition(OP._distinguish(v))
|
|
681
|
+
if sh == oh:
|
|
682
|
+
m = self._isomorphism(other, SP2, OP2)
|
|
683
|
+
if m is not None:
|
|
684
|
+
return m
|
|
685
|
+
v = bitset_next(OP._subsets[i], v + 1)
|
|
686
|
+
return None
|
|
687
|
+
if sorted([self.subset_characteristic(SP, i) for i in range(len(self))]) != sorted([other.subset_characteristic(OP, i) for i in range(len(other))]):
|
|
688
|
+
return None
|
|
689
|
+
return dict([(self._groundset[bitset_first(SP._subsets[i])], other._groundset[bitset_first(OP._subsets[i])]) for i in range(len(SP))])
|
|
690
|
+
|
|
691
|
+
cpdef _equivalence(self, is_equiv, SetSystem other, SetSystem SP=None, SetSystem OP=None):
|
|
692
|
+
"""
|
|
693
|
+
Return a groundset isomorphism that is an equivalence between this
|
|
694
|
+
SetSystem and an other.
|
|
695
|
+
|
|
696
|
+
INPUT:
|
|
697
|
+
|
|
698
|
+
- ``is_equiv`` -- a function that determines if a given groundset
|
|
699
|
+
isomorphism is a valid equivalence
|
|
700
|
+
- ``other`` -- SetSystem
|
|
701
|
+
- ``SP`` -- (optional) SetSystem storing an ordered partition of the
|
|
702
|
+
groundset of ``self``
|
|
703
|
+
- ``OP`` -- (optional) SetSystem storing an ordered partition of the
|
|
704
|
+
groundset of ``other``
|
|
705
|
+
|
|
706
|
+
OUTPUT:
|
|
707
|
+
|
|
708
|
+
``morphism``, a dictionary containing an isomorphism respecting the
|
|
709
|
+
given ordered partitions, so that ``is_equiv(self, other, morphism)``
|
|
710
|
+
is ``True``; or ``None`` if no such equivalence exists.
|
|
711
|
+
|
|
712
|
+
EXAMPLES::
|
|
713
|
+
|
|
714
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
715
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
716
|
+
sage: T = SetSystem(['a', 'b', 'c', 'd'], [['a', 'b'], ['c', 'd'],
|
|
717
|
+
....: ['a', 'c', 'd']])
|
|
718
|
+
sage: S._equivalence(lambda self, other, morph:True, T)
|
|
719
|
+
{1: 'c', 2: 'd', 3: 'b', 4: 'a'}
|
|
720
|
+
|
|
721
|
+
Check that :issue:`15189` is fixed::
|
|
722
|
+
|
|
723
|
+
sage: M = Matroid(ring=GF(5), reduced_matrix=[[1,0,3],[0,1,1],[1,1,0]])
|
|
724
|
+
sage: N = Matroid(ring=GF(5), reduced_matrix=[[1,0,1],[0,1,1],[1,1,0]])
|
|
725
|
+
sage: M.is_field_isomorphic(N)
|
|
726
|
+
False
|
|
727
|
+
sage: any(M.is_field_isomorphism(N, p) for p in Permutations(range(6))) # needs sage.combinat
|
|
728
|
+
False
|
|
729
|
+
"""
|
|
730
|
+
cdef long v
|
|
731
|
+
if SP is None or OP is None:
|
|
732
|
+
SP, SEP, sh = self._equitable_partition()
|
|
733
|
+
OP, OEP, oh = other._equitable_partition()
|
|
734
|
+
if sh != oh:
|
|
735
|
+
return None
|
|
736
|
+
if len(SP) != len(OP):
|
|
737
|
+
return None
|
|
738
|
+
for i in range(len(SP)):
|
|
739
|
+
if bitset_len(SP._subsets[i]) != bitset_len(OP._subsets[i]):
|
|
740
|
+
return None
|
|
741
|
+
for i in range(len(SP)):
|
|
742
|
+
if bitset_len(SP._subsets[i]) > 1:
|
|
743
|
+
SP2, SEP, sh = self._equitable_partition(SP._distinguish(bitset_first(SP._subsets[i])))
|
|
744
|
+
v = bitset_first(OP._subsets[i])
|
|
745
|
+
while v >= 0:
|
|
746
|
+
OP2, OEP, oh = other._equitable_partition(OP._distinguish(v))
|
|
747
|
+
if sh == oh:
|
|
748
|
+
m = self._equivalence(is_equiv, other, SP2, OP2)
|
|
749
|
+
if m is not None:
|
|
750
|
+
return m
|
|
751
|
+
v = bitset_next(OP._subsets[i], v + 1)
|
|
752
|
+
return None
|
|
753
|
+
morph = dict([(self._groundset[bitset_first(SP._subsets[i])], other._groundset[bitset_first(OP._subsets[i])]) for i in range(len(SP))])
|
|
754
|
+
if is_equiv(self, other, morph):
|
|
755
|
+
return morph
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
cdef class SetSystemIterator:
|
|
759
|
+
def __init__(self, H):
|
|
760
|
+
"""
|
|
761
|
+
Create an iterator for a SetSystem.
|
|
762
|
+
|
|
763
|
+
Called internally when iterating over the contents of a SetSystem.
|
|
764
|
+
|
|
765
|
+
EXAMPLES::
|
|
766
|
+
|
|
767
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
768
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
769
|
+
sage: type(S.__iter__())
|
|
770
|
+
<... 'sage.matroids.set_system.SetSystemIterator'>
|
|
771
|
+
"""
|
|
772
|
+
self._H = H
|
|
773
|
+
self._pointer = -1
|
|
774
|
+
self._len = len(H)
|
|
775
|
+
|
|
776
|
+
def __iter__(self):
|
|
777
|
+
return self
|
|
778
|
+
|
|
779
|
+
def __next__(self):
|
|
780
|
+
"""
|
|
781
|
+
Return the next subset of a SetSystem.
|
|
782
|
+
|
|
783
|
+
EXAMPLES::
|
|
784
|
+
|
|
785
|
+
sage: from sage.matroids.set_system import SetSystem
|
|
786
|
+
sage: S = SetSystem([1, 2, 3, 4], [[1, 2], [3, 4], [1, 2, 4]])
|
|
787
|
+
sage: I = S.__iter__()
|
|
788
|
+
sage: sorted(I.__next__())
|
|
789
|
+
[1, 2]
|
|
790
|
+
sage: sorted(I.__next__())
|
|
791
|
+
[3, 4]
|
|
792
|
+
sage: sorted(I.__next__())
|
|
793
|
+
[1, 2, 4]
|
|
794
|
+
"""
|
|
795
|
+
self._pointer += 1
|
|
796
|
+
if self._pointer == self._len:
|
|
797
|
+
self._pointer = -1
|
|
798
|
+
raise StopIteration
|
|
799
|
+
else:
|
|
800
|
+
return self._H.subset(self._pointer)
|