passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -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-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-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-x86_64-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,699 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Quotients of free modules
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- William Stein (2009): initial version
|
|
8
|
+
|
|
9
|
+
- Kwankyu Lee (2022-05): added quotient module over domain
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2009 William Stein <wstein@gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# This program is free software: you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of the GNU General Public License as published by
|
|
17
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
18
|
+
# (at your option) any later version.
|
|
19
|
+
# https://www.gnu.org/licenses/
|
|
20
|
+
# ****************************************************************************
|
|
21
|
+
|
|
22
|
+
from sage.modules.free_module import (
|
|
23
|
+
FreeModule_ambient,
|
|
24
|
+
FreeModule_ambient_field,
|
|
25
|
+
Module_free_ambient,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
###############################################################################
|
|
29
|
+
#
|
|
30
|
+
# Quotients of ambient free modules over a domain
|
|
31
|
+
#
|
|
32
|
+
###############################################################################
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class QuotientModule_free_ambient(Module_free_ambient):
|
|
36
|
+
"""
|
|
37
|
+
Quotients of ambient free modules by a submodule.
|
|
38
|
+
|
|
39
|
+
INPUT:
|
|
40
|
+
|
|
41
|
+
- ``module`` -- an ambient free module
|
|
42
|
+
|
|
43
|
+
- ``sub`` -- a submodule of ``module``
|
|
44
|
+
|
|
45
|
+
EXAMPLES::
|
|
46
|
+
|
|
47
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
48
|
+
sage: M = S**2
|
|
49
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
50
|
+
sage: M.quotient_module(N)
|
|
51
|
+
Quotient module by Submodule of Ambient free module of rank 2 over
|
|
52
|
+
the integral domain Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
53
|
+
Generated by the rows of the matrix:
|
|
54
|
+
[x - y z]
|
|
55
|
+
[ y*z x*z]
|
|
56
|
+
"""
|
|
57
|
+
def __init__(self, module, sub):
|
|
58
|
+
"""
|
|
59
|
+
Create this quotient module of ``module`` by a submodule ``sub``.
|
|
60
|
+
|
|
61
|
+
TESTS::
|
|
62
|
+
|
|
63
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
64
|
+
sage: M = S**2
|
|
65
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
66
|
+
sage: Q = M.quotient_module(N)
|
|
67
|
+
sage: TestSuite(Q).run(skip=['_test_elements', '_test_pickling', '_test_zero'])
|
|
68
|
+
"""
|
|
69
|
+
base_ring = module.base_ring()
|
|
70
|
+
degree = module.degree()
|
|
71
|
+
sparse = module.is_sparse()
|
|
72
|
+
# We store these in order to retain the information of how this was constructed
|
|
73
|
+
self._module = module
|
|
74
|
+
self._sub = sub
|
|
75
|
+
self.__hash = hash((self._module, self._sub))
|
|
76
|
+
|
|
77
|
+
# We then convert the data into maps from free modules
|
|
78
|
+
if isinstance(module, QuotientModule_free_ambient):
|
|
79
|
+
self._free_cover = module.cover()
|
|
80
|
+
C = self._free_cover.element_class
|
|
81
|
+
v = [C(self._free_cover, x.list(), coerce=False, copy=False) for x in sub.gens()]
|
|
82
|
+
w = [C(self._free_cover, x.list(), coerce=False, copy=False) for x in module.free_relations().gens()]
|
|
83
|
+
self._relations = self._free_cover.submodule(v + w, check=False)
|
|
84
|
+
else: # Otherwise module should be a free module
|
|
85
|
+
self._free_cover = module
|
|
86
|
+
self._relations = sub
|
|
87
|
+
|
|
88
|
+
Module_free_ambient.__init__(self, base_ring, degree=degree, sparse=sparse)
|
|
89
|
+
|
|
90
|
+
def _repr_(self):
|
|
91
|
+
r"""
|
|
92
|
+
Return the string representation of this quotient module.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
97
|
+
sage: M = S**2
|
|
98
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z , x*z])])
|
|
99
|
+
sage: M.quotient_module(N)
|
|
100
|
+
Quotient module by Submodule of Ambient free module of rank 2 over
|
|
101
|
+
the integral domain Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
102
|
+
Generated by the rows of the matrix:
|
|
103
|
+
[x - y z]
|
|
104
|
+
[ y*z x*z]
|
|
105
|
+
"""
|
|
106
|
+
return "Quotient module by %s" % self._sub
|
|
107
|
+
|
|
108
|
+
def __hash__(self):
|
|
109
|
+
r"""
|
|
110
|
+
Return the hash of this quotient module.
|
|
111
|
+
|
|
112
|
+
TESTS::
|
|
113
|
+
|
|
114
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
115
|
+
sage: M = S**2
|
|
116
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
117
|
+
sage: Q = M.quotient_module(N)
|
|
118
|
+
sage: hash(Q) == hash((M,N))
|
|
119
|
+
True
|
|
120
|
+
"""
|
|
121
|
+
return self.__hash
|
|
122
|
+
|
|
123
|
+
def gens(self) -> tuple:
|
|
124
|
+
"""
|
|
125
|
+
Return the generators of this module.
|
|
126
|
+
|
|
127
|
+
EXAMPLES::
|
|
128
|
+
|
|
129
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
130
|
+
sage: M = S**2
|
|
131
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
132
|
+
sage: Q = M.quotient_module(N)
|
|
133
|
+
sage: Q.gens()
|
|
134
|
+
((1, 0), (0, 1))
|
|
135
|
+
"""
|
|
136
|
+
return tuple(self(list(g)) for g in self._module.gens())
|
|
137
|
+
|
|
138
|
+
def gen(self, i=0):
|
|
139
|
+
"""
|
|
140
|
+
Return the `i`-th generator of this module.
|
|
141
|
+
|
|
142
|
+
EXAMPLES::
|
|
143
|
+
|
|
144
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
145
|
+
sage: M = S**2
|
|
146
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
147
|
+
sage: Q = M.quotient_module(N)
|
|
148
|
+
sage: Q.gen(0)
|
|
149
|
+
(1, 0)
|
|
150
|
+
"""
|
|
151
|
+
if i < 0 or i >= self._module.degree():
|
|
152
|
+
raise ValueError('generator %s not defined' % i)
|
|
153
|
+
return self.gens()[i]
|
|
154
|
+
|
|
155
|
+
def _coerce_map_from_(self, M):
|
|
156
|
+
"""
|
|
157
|
+
Return a coercion map from `M` to ``self``, or ``None``.
|
|
158
|
+
|
|
159
|
+
TESTS::
|
|
160
|
+
|
|
161
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
162
|
+
sage: M = S**2
|
|
163
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
164
|
+
sage: Q = M.quotient_module(N)
|
|
165
|
+
sage: Q.coerce_map_from(M)
|
|
166
|
+
Coercion map:
|
|
167
|
+
From: Ambient free module of rank 2 over the integral domain
|
|
168
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
169
|
+
To: Quotient module by Submodule of
|
|
170
|
+
Ambient free module of rank 2 over the integral domain
|
|
171
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
172
|
+
Generated by the rows of the matrix:
|
|
173
|
+
[x - y z]
|
|
174
|
+
[ y*z x*z]
|
|
175
|
+
"""
|
|
176
|
+
if isinstance(M, FreeModule_ambient):
|
|
177
|
+
return (self.base_ring().has_coerce_map_from(M.base_ring()) and
|
|
178
|
+
self.degree() == M.degree())
|
|
179
|
+
from sage.modules.submodule import Submodule_free_ambient
|
|
180
|
+
if isinstance(M, Submodule_free_ambient):
|
|
181
|
+
return self._module.has_coerce_map_from(self.ambient_module())
|
|
182
|
+
if (isinstance(M, QuotientModule_free_ambient)
|
|
183
|
+
and M.free_cover() == self.free_cover()):
|
|
184
|
+
try:
|
|
185
|
+
return M.free_relations().is_submodule(self.free_relations())
|
|
186
|
+
except NotImplementedError:
|
|
187
|
+
pass
|
|
188
|
+
|
|
189
|
+
def ambient_module(self):
|
|
190
|
+
"""
|
|
191
|
+
Return ``self``, since ``self`` is ambient.
|
|
192
|
+
|
|
193
|
+
EXAMPLES::
|
|
194
|
+
|
|
195
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
196
|
+
sage: M = S**2
|
|
197
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
198
|
+
sage: Q = M.quotient_module(N)
|
|
199
|
+
sage: Q.ambient_module() is Q
|
|
200
|
+
True
|
|
201
|
+
"""
|
|
202
|
+
return self
|
|
203
|
+
|
|
204
|
+
def cover(self):
|
|
205
|
+
r"""
|
|
206
|
+
Given this quotient space `Q = V/W`, return `V`.
|
|
207
|
+
|
|
208
|
+
EXAMPLES::
|
|
209
|
+
|
|
210
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
211
|
+
sage: M = S**2
|
|
212
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
213
|
+
sage: Q = M.quotient_module(N)
|
|
214
|
+
sage: Q.cover() is M
|
|
215
|
+
True
|
|
216
|
+
"""
|
|
217
|
+
return self._module
|
|
218
|
+
|
|
219
|
+
V = cover
|
|
220
|
+
|
|
221
|
+
def relations(self):
|
|
222
|
+
r"""
|
|
223
|
+
Given this quotient space `Q = V/W`, return `W`.
|
|
224
|
+
|
|
225
|
+
EXAMPLES::
|
|
226
|
+
|
|
227
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
228
|
+
sage: M = S**2
|
|
229
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
230
|
+
sage: Q = M.quotient_module(N)
|
|
231
|
+
sage: Q.relations() is N
|
|
232
|
+
True
|
|
233
|
+
"""
|
|
234
|
+
return self._sub
|
|
235
|
+
|
|
236
|
+
W = relations
|
|
237
|
+
|
|
238
|
+
def free_cover(self):
|
|
239
|
+
r"""
|
|
240
|
+
Given this quotient space `Q = V/W`, return the free module
|
|
241
|
+
that covers `V`.
|
|
242
|
+
|
|
243
|
+
EXAMPLES::
|
|
244
|
+
|
|
245
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
246
|
+
sage: M = S**2
|
|
247
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
248
|
+
sage: Q = M / N
|
|
249
|
+
sage: NQ = Q.submodule([Q([1,x])])
|
|
250
|
+
sage: QNQ = Q / NQ
|
|
251
|
+
sage: QNQ.free_cover() is Q.free_cover() is M
|
|
252
|
+
True
|
|
253
|
+
|
|
254
|
+
Note that this is different than the immediate cover::
|
|
255
|
+
|
|
256
|
+
sage: QNQ.cover() is Q
|
|
257
|
+
True
|
|
258
|
+
sage: QNQ.cover() is QNQ.free_cover()
|
|
259
|
+
False
|
|
260
|
+
"""
|
|
261
|
+
return self._free_cover
|
|
262
|
+
|
|
263
|
+
V = cover
|
|
264
|
+
|
|
265
|
+
def free_relations(self):
|
|
266
|
+
r"""
|
|
267
|
+
Given this quotient space `Q = V/W`, return the submodule that
|
|
268
|
+
generates all relations of `Q`.
|
|
269
|
+
|
|
270
|
+
When `V` is a free module, then this returns `W`. Otherwise this
|
|
271
|
+
returns the union of `W` lifted to the cover of `V` and the relations
|
|
272
|
+
of `V` (repeated until `W` is a submodule of a free module).
|
|
273
|
+
|
|
274
|
+
EXAMPLES::
|
|
275
|
+
|
|
276
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
277
|
+
sage: M = S**2
|
|
278
|
+
sage: N = M.submodule([vector([x - y, z]), vector([y*z, x*z])])
|
|
279
|
+
sage: Q = M / N
|
|
280
|
+
sage: NQ = Q.submodule([Q([1, x])])
|
|
281
|
+
sage: QNQ = Q / NQ
|
|
282
|
+
sage: QNQ.free_relations()
|
|
283
|
+
Submodule of Ambient free module of rank 2 over the integral domain
|
|
284
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
285
|
+
Generated by the rows of the matrix:
|
|
286
|
+
[ 1 x]
|
|
287
|
+
[x - y z]
|
|
288
|
+
[ y*z x*z]
|
|
289
|
+
|
|
290
|
+
Note that this is different than the defining relations::
|
|
291
|
+
|
|
292
|
+
sage: QNQ.relations() is NQ
|
|
293
|
+
True
|
|
294
|
+
sage: QNQ.relations() == QNQ.free_relations()
|
|
295
|
+
False
|
|
296
|
+
"""
|
|
297
|
+
return self._relations
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
###############################################################################
|
|
301
|
+
#
|
|
302
|
+
# Quotients of ambient free modules over a field
|
|
303
|
+
#
|
|
304
|
+
###############################################################################
|
|
305
|
+
|
|
306
|
+
class FreeModule_ambient_field_quotient(FreeModule_ambient_field):
|
|
307
|
+
"""
|
|
308
|
+
A quotient `V/W` of two vector spaces as a vector space.
|
|
309
|
+
|
|
310
|
+
To obtain `V` or `W` use ``self.V()`` and ``self.W()``.
|
|
311
|
+
|
|
312
|
+
EXAMPLES::
|
|
313
|
+
|
|
314
|
+
sage: # needs sage.rings.number_field
|
|
315
|
+
sage: k.<i> = QuadraticField(-1)
|
|
316
|
+
sage: A = k^3; V = A.span([[1,0,i], [2,i,0]])
|
|
317
|
+
sage: W = A.span([[3,i,i]])
|
|
318
|
+
sage: U = V/W; U
|
|
319
|
+
Vector space quotient V/W of dimension 1 over Number Field in i
|
|
320
|
+
with defining polynomial x^2 + 1 with i = 1*I where
|
|
321
|
+
V: Vector space of degree 3 and dimension 2 over Number Field in i
|
|
322
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
323
|
+
Basis matrix:
|
|
324
|
+
[ 1 0 i]
|
|
325
|
+
[ 0 1 -2]
|
|
326
|
+
W: Vector space of degree 3 and dimension 1 over Number Field in i
|
|
327
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
328
|
+
Basis matrix:
|
|
329
|
+
[ 1 1/3*i 1/3*i]
|
|
330
|
+
sage: U.V()
|
|
331
|
+
Vector space of degree 3 and dimension 2 over Number Field in i
|
|
332
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
333
|
+
Basis matrix:
|
|
334
|
+
[ 1 0 i]
|
|
335
|
+
[ 0 1 -2]
|
|
336
|
+
sage: U.W()
|
|
337
|
+
Vector space of degree 3 and dimension 1 over Number Field in i
|
|
338
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
339
|
+
Basis matrix:
|
|
340
|
+
[ 1 1/3*i 1/3*i]
|
|
341
|
+
sage: U.quotient_map()
|
|
342
|
+
Vector space morphism represented by the matrix:
|
|
343
|
+
[ 1]
|
|
344
|
+
[3*i]
|
|
345
|
+
Domain: Vector space of degree 3 and dimension 2 over Number Field in i
|
|
346
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
347
|
+
Basis matrix:
|
|
348
|
+
[ 1 0 i]
|
|
349
|
+
[ 0 1 -2]
|
|
350
|
+
Codomain: Vector space quotient V/W of dimension 1 over Number Field in i
|
|
351
|
+
with defining polynomial x^2 + 1 with i = 1*I where
|
|
352
|
+
V: Vector space of degree 3 and dimension 2 over Number Field in i
|
|
353
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
354
|
+
Basis matrix:
|
|
355
|
+
[ 1 0 i]
|
|
356
|
+
[ 0 1 -2]
|
|
357
|
+
W: Vector space of degree 3 and dimension 1 over Number Field in i
|
|
358
|
+
with defining polynomial x^2 + 1 with i = 1*I
|
|
359
|
+
Basis matrix:
|
|
360
|
+
[ 1 1/3*i 1/3*i]
|
|
361
|
+
sage: Z = V.quotient(W)
|
|
362
|
+
sage: Z == U
|
|
363
|
+
True
|
|
364
|
+
|
|
365
|
+
We create three quotient spaces and compare them::
|
|
366
|
+
|
|
367
|
+
sage: A = QQ^2
|
|
368
|
+
sage: V = A.span_of_basis([[1,0], [1,1]])
|
|
369
|
+
sage: W0 = V.span([V.1, V.0])
|
|
370
|
+
sage: W1 = V.span([V.1])
|
|
371
|
+
sage: W2 = V.span([V.1])
|
|
372
|
+
sage: Q0 = V/W0
|
|
373
|
+
sage: Q1 = V/W1
|
|
374
|
+
sage: Q2 = V/W2
|
|
375
|
+
|
|
376
|
+
sage: Q0 == Q1
|
|
377
|
+
False
|
|
378
|
+
sage: Q1 == Q2
|
|
379
|
+
True
|
|
380
|
+
|
|
381
|
+
TESTS::
|
|
382
|
+
|
|
383
|
+
sage: A = QQ^0; V = A.span([]) # corner case
|
|
384
|
+
sage: W = A.span([])
|
|
385
|
+
sage: U = V/W
|
|
386
|
+
|
|
387
|
+
sage: loads(dumps(U)) == U
|
|
388
|
+
True
|
|
389
|
+
sage: type(loads(dumps(U)) )
|
|
390
|
+
<class 'sage.modules.quotient_module.FreeModule_ambient_field_quotient_with_category'>
|
|
391
|
+
"""
|
|
392
|
+
def __init__(self, domain, sub, quotient_matrix, lift_matrix, inner_product_matrix=None):
|
|
393
|
+
"""
|
|
394
|
+
Create this quotient space, from the given domain, submodule,
|
|
395
|
+
and quotient_matrix.
|
|
396
|
+
|
|
397
|
+
EXAMPLES::
|
|
398
|
+
|
|
399
|
+
sage: A = QQ^5; V = A.span_of_basis([[1,0,-1,1,1], [1,-1,0,2/3,3/4]]); V
|
|
400
|
+
Vector space of degree 5 and dimension 2 over Rational Field
|
|
401
|
+
User basis matrix:
|
|
402
|
+
[ 1 0 -1 1 1]
|
|
403
|
+
[ 1 -1 0 2/3 3/4]
|
|
404
|
+
sage: W = V.span_of_basis([V.0 - 2/3*V.1]); W
|
|
405
|
+
Vector space of degree 5 and dimension 1 over Rational Field
|
|
406
|
+
User basis matrix:
|
|
407
|
+
[1/3 2/3 -1 5/9 1/2]
|
|
408
|
+
|
|
409
|
+
This creates a quotient vector space::
|
|
410
|
+
|
|
411
|
+
sage: Q = V / W
|
|
412
|
+
|
|
413
|
+
Behold the type of Q::
|
|
414
|
+
|
|
415
|
+
sage: type(Q)
|
|
416
|
+
<class 'sage.modules.quotient_module.FreeModule_ambient_field_quotient_with_category'>
|
|
417
|
+
|
|
418
|
+
We do some consistency checks on the extra quotient and
|
|
419
|
+
lifting structure of Q::
|
|
420
|
+
|
|
421
|
+
sage: Q(V.0)
|
|
422
|
+
(1)
|
|
423
|
+
sage: Q(V.0 - 2/3*V.1)
|
|
424
|
+
(0)
|
|
425
|
+
sage: v = Q.lift(Q.0); v
|
|
426
|
+
(1, 0, -1, 1, 1)
|
|
427
|
+
sage: Q( v )
|
|
428
|
+
(1)
|
|
429
|
+
"""
|
|
430
|
+
base_field = domain.base_field()
|
|
431
|
+
dimension = quotient_matrix.ncols()
|
|
432
|
+
sparse = domain.is_sparse()
|
|
433
|
+
self._sub = sub
|
|
434
|
+
self._domain = domain
|
|
435
|
+
self.__hash = hash((domain, sub))
|
|
436
|
+
FreeModule_ambient_field.__init__(self, base_field, dimension, sparse)
|
|
437
|
+
self.__quo_map = domain.Hom(self)(quotient_matrix)
|
|
438
|
+
self.__quo_map.register_as_coercion()
|
|
439
|
+
self.__lift_map = self.Hom(domain)(lift_matrix)
|
|
440
|
+
|
|
441
|
+
def _repr_(self):
|
|
442
|
+
r"""
|
|
443
|
+
Return the rather verbose string representation of this quotient space V/W.
|
|
444
|
+
|
|
445
|
+
EXAMPLES:
|
|
446
|
+
|
|
447
|
+
We create a quotient vector space over a finite field::
|
|
448
|
+
|
|
449
|
+
sage: # needs sage.rings.finite_rings
|
|
450
|
+
sage: k.<a> = GF(9); A = k^3; V = A.span_of_basis([[1,0,a], [a,a,1]]); W = V.span([V.1])
|
|
451
|
+
sage: Q = V/W
|
|
452
|
+
|
|
453
|
+
Note the type::
|
|
454
|
+
|
|
455
|
+
sage: type(Q) # needs sage.rings.finite_rings
|
|
456
|
+
<class 'sage.modules.quotient_module.FreeModule_ambient_field_quotient_with_category'>
|
|
457
|
+
|
|
458
|
+
The string representation mentions that this is a quotient
|
|
459
|
+
`V/W`, that the quotient has dimension 1 and is over a finite
|
|
460
|
+
field, and also describes `V` and `W`::
|
|
461
|
+
|
|
462
|
+
sage: Q._repr_() # needs sage.rings.finite_rings
|
|
463
|
+
'Vector space quotient V/W of dimension 1 over Finite Field in a of size 3^2 where\nV: Vector space of degree 3 and dimension 2 over Finite Field in a of size 3^2\nUser basis matrix:\n[1 0 a]\n[a a 1]\nW: Vector space of degree 3 and dimension 1 over Finite Field in a of size 3^2\nBasis matrix:\n[ 1 1 a + 2]'
|
|
464
|
+
"""
|
|
465
|
+
return "%s space quotient V/W of dimension %s over %s where\nV: %s\nW: %s" % (
|
|
466
|
+
"Sparse vector" if self.is_sparse() else "Vector",
|
|
467
|
+
self.dimension(), self.base_ring(),
|
|
468
|
+
self.V(), self.W())
|
|
469
|
+
|
|
470
|
+
def __hash__(self):
|
|
471
|
+
"""
|
|
472
|
+
Return hash of this quotient space `V/W`, which is, by definition,
|
|
473
|
+
the hash of the tuple `(V, W)`.
|
|
474
|
+
|
|
475
|
+
EXAMPLES:
|
|
476
|
+
|
|
477
|
+
We compute the hash of a certain 0-dimension quotient vector
|
|
478
|
+
space::
|
|
479
|
+
|
|
480
|
+
sage: A = QQ^2; V = A.span_of_basis([[1,0], [1,1]]); W = V.span([V.1, V.0])
|
|
481
|
+
sage: Q = V/W; Q.dimension()
|
|
482
|
+
0
|
|
483
|
+
sage: hash(Q) == hash((V,W))
|
|
484
|
+
True
|
|
485
|
+
"""
|
|
486
|
+
return self.__hash
|
|
487
|
+
|
|
488
|
+
def _element_constructor_(self, x):
|
|
489
|
+
"""
|
|
490
|
+
Convert an element into this quotient space `V/W` if there is
|
|
491
|
+
a way to make sense of it.
|
|
492
|
+
|
|
493
|
+
An element converts into ``self`` if it can be converted into `V`,
|
|
494
|
+
or if not at least if it can be made sense of as a list of
|
|
495
|
+
length the dimension of ``self``.
|
|
496
|
+
|
|
497
|
+
EXAMPLES:
|
|
498
|
+
|
|
499
|
+
We create a 2-dimensional quotient of a 3-dimension ambient
|
|
500
|
+
vector space::
|
|
501
|
+
|
|
502
|
+
sage: M = QQ^3 / [[1,2,3]]
|
|
503
|
+
|
|
504
|
+
A list of length 3 converts into ``QQ^3``, so it converts into
|
|
505
|
+
`M`::
|
|
506
|
+
|
|
507
|
+
sage: M([1,2,4]) #indirect doctest
|
|
508
|
+
(-1/3, -2/3)
|
|
509
|
+
sage: M([1,2,3])
|
|
510
|
+
(0, 0)
|
|
511
|
+
|
|
512
|
+
A list of length 2 converts into M, where here it just gives
|
|
513
|
+
the corresponding linear combination of the basis for `M`::
|
|
514
|
+
|
|
515
|
+
sage: M([1,2])
|
|
516
|
+
(1, 2)
|
|
517
|
+
sage: M.0 + 2*M.1
|
|
518
|
+
(1, 2)
|
|
519
|
+
|
|
520
|
+
Of course, elements of ``QQ^3`` convert into the quotient
|
|
521
|
+
module as well. Here is a different example::
|
|
522
|
+
|
|
523
|
+
sage: V = QQ^3; W = V.span([[1,0,0]]); Q = V/W
|
|
524
|
+
sage: Q(V.0)
|
|
525
|
+
(0, 0)
|
|
526
|
+
sage: Q(V.1)
|
|
527
|
+
(1, 0)
|
|
528
|
+
sage: Q.0
|
|
529
|
+
(1, 0)
|
|
530
|
+
sage: Q.0 + V.1
|
|
531
|
+
(2, 0)
|
|
532
|
+
|
|
533
|
+
Here we start with something that is over ZZ, so it
|
|
534
|
+
canonically coerces into ``QQ^3``, hence into ``self``::
|
|
535
|
+
|
|
536
|
+
sage: Q((ZZ^3)([1,2,3]))
|
|
537
|
+
(2, 3)
|
|
538
|
+
|
|
539
|
+
TESTS:
|
|
540
|
+
|
|
541
|
+
Ensure that :issue:`39507` is fixed::
|
|
542
|
+
|
|
543
|
+
sage: V = VectorSpace(GF(2),3)
|
|
544
|
+
sage: A = V.subspace([(0,1,0), (1,1,1)])
|
|
545
|
+
sage: B = A.subspace([])
|
|
546
|
+
sage: list(A/B)
|
|
547
|
+
[(0, 0), (1, 0), (0, 1), (1, 1)]
|
|
548
|
+
"""
|
|
549
|
+
if isinstance(x, self.element_class) and x.parent() is self:
|
|
550
|
+
return x
|
|
551
|
+
if isinstance(x, (list, tuple)) and len(x) == self._domain.rank():
|
|
552
|
+
return self.__quo_map(self._domain.linear_combination_of_basis(x))
|
|
553
|
+
return FreeModule_ambient_field._element_constructor_(self, x)
|
|
554
|
+
|
|
555
|
+
def _coerce_map_from_(self, M):
|
|
556
|
+
"""
|
|
557
|
+
Return a coercion map from `M` to ``self``, or None.
|
|
558
|
+
|
|
559
|
+
EXAMPLES::
|
|
560
|
+
|
|
561
|
+
sage: V = QQ^2 / [[1, 2]]
|
|
562
|
+
sage: V.coerce_map_from(ZZ^2)
|
|
563
|
+
Composite map:
|
|
564
|
+
From: Ambient free module of rank 2 over the principal ideal domain Integer Ring
|
|
565
|
+
To: Vector space quotient V/W of dimension 1 over Rational Field where
|
|
566
|
+
V: Vector space of dimension 2 over Rational Field
|
|
567
|
+
W: Vector space of degree 2 and dimension 1 over Rational Field
|
|
568
|
+
Basis matrix:
|
|
569
|
+
[1 2]
|
|
570
|
+
Defn: Coercion map:
|
|
571
|
+
From: Ambient free module of rank 2 over the principal ideal domain Integer Ring
|
|
572
|
+
To: Vector space of dimension 2 over Rational Field
|
|
573
|
+
then
|
|
574
|
+
Vector space morphism represented by the matrix:
|
|
575
|
+
[ 1]
|
|
576
|
+
[-1/2]
|
|
577
|
+
Domain: Vector space of dimension 2 over Rational Field
|
|
578
|
+
Codomain: Vector space quotient V/W of dimension 1 over Rational Field where
|
|
579
|
+
V: Vector space of dimension 2 over Rational Field
|
|
580
|
+
W: Vector space of degree 2 and dimension 1 over Rational Field
|
|
581
|
+
Basis matrix:
|
|
582
|
+
[1 2]
|
|
583
|
+
|
|
584
|
+
Make sure :issue:`10513` is fixed (no coercion from an abstract
|
|
585
|
+
vector space to an isomorphic quotient vector space)::
|
|
586
|
+
|
|
587
|
+
sage: V = QQ^3 / [[1,2,3]]
|
|
588
|
+
sage: V.coerce_map_from(QQ^2)
|
|
589
|
+
"""
|
|
590
|
+
from sage.modules.free_module import FreeModule_ambient
|
|
591
|
+
if (isinstance(M, FreeModule_ambient)
|
|
592
|
+
and not (isinstance(M, FreeModule_ambient_field_quotient)
|
|
593
|
+
and self._sub == M._sub)):
|
|
594
|
+
# No map between different quotients.
|
|
595
|
+
# No map from quotient to abstract module.
|
|
596
|
+
return None
|
|
597
|
+
f = super(FreeModule_ambient_field, self)._coerce_map_from_(M)
|
|
598
|
+
if f is not None:
|
|
599
|
+
return f
|
|
600
|
+
f = self._domain.coerce_map_from(M)
|
|
601
|
+
if f is not None:
|
|
602
|
+
return self.__quo_map * f
|
|
603
|
+
return None
|
|
604
|
+
|
|
605
|
+
def quotient_map(self):
|
|
606
|
+
"""
|
|
607
|
+
Given this quotient space `Q = V / W`, return the natural quotient
|
|
608
|
+
map from `V` to `Q`.
|
|
609
|
+
|
|
610
|
+
EXAMPLES::
|
|
611
|
+
|
|
612
|
+
sage: M = QQ^3 / [[1,2,3]]
|
|
613
|
+
sage: M.quotient_map()
|
|
614
|
+
Vector space morphism represented by the matrix:
|
|
615
|
+
[ 1 0]
|
|
616
|
+
[ 0 1]
|
|
617
|
+
[-1/3 -2/3]
|
|
618
|
+
Domain: Vector space of dimension 3 over Rational Field
|
|
619
|
+
Codomain: Vector space quotient V/W of dimension 2 over Rational Field where
|
|
620
|
+
V: Vector space of dimension 3 over Rational Field
|
|
621
|
+
W: Vector space of degree 3 and dimension 1 over Rational Field
|
|
622
|
+
Basis matrix:
|
|
623
|
+
[1 2 3]
|
|
624
|
+
|
|
625
|
+
sage: M.quotient_map()( (QQ^3)([1,2,3]) )
|
|
626
|
+
(0, 0)
|
|
627
|
+
"""
|
|
628
|
+
return self.__quo_map
|
|
629
|
+
|
|
630
|
+
def lift_map(self):
|
|
631
|
+
r"""
|
|
632
|
+
Given this quotient space `Q = V / W`, return a fixed choice of
|
|
633
|
+
linear homomorphism (a section) from `Q` to `V`.
|
|
634
|
+
|
|
635
|
+
EXAMPLES::
|
|
636
|
+
|
|
637
|
+
sage: M = QQ^3 / [[1,2,3]]
|
|
638
|
+
sage: M.lift_map()
|
|
639
|
+
Vector space morphism represented by the matrix:
|
|
640
|
+
[1 0 0]
|
|
641
|
+
[0 1 0]
|
|
642
|
+
Domain: Vector space quotient V/W of dimension 2 over Rational Field where
|
|
643
|
+
V: Vector space of dimension 3 over Rational Field
|
|
644
|
+
W: Vector space of degree 3 and dimension 1 over Rational Field
|
|
645
|
+
Basis matrix:
|
|
646
|
+
[1 2 3]
|
|
647
|
+
Codomain: Vector space of dimension 3 over Rational Field
|
|
648
|
+
"""
|
|
649
|
+
return self.__lift_map
|
|
650
|
+
|
|
651
|
+
def lift(self, x):
|
|
652
|
+
r"""
|
|
653
|
+
Lift element of this quotient `V / W` to `V` by applying
|
|
654
|
+
the fixed lift homomorphism.
|
|
655
|
+
|
|
656
|
+
The lift is a fixed homomorphism.
|
|
657
|
+
|
|
658
|
+
EXAMPLES::
|
|
659
|
+
|
|
660
|
+
sage: M = QQ^3 / [[1,2,3]]
|
|
661
|
+
sage: M.lift(M.0)
|
|
662
|
+
(1, 0, 0)
|
|
663
|
+
sage: M.lift(M.1)
|
|
664
|
+
(0, 1, 0)
|
|
665
|
+
sage: M.lift(M.0 - 2*M.1)
|
|
666
|
+
(1, -2, 0)
|
|
667
|
+
"""
|
|
668
|
+
return self.__lift_map(x)
|
|
669
|
+
|
|
670
|
+
def cover(self):
|
|
671
|
+
r"""
|
|
672
|
+
Given this quotient space `Q = V/W`, return `V`.
|
|
673
|
+
|
|
674
|
+
EXAMPLES::
|
|
675
|
+
|
|
676
|
+
sage: M = QQ^10 / [list(range(10)), list(range(2,12))]
|
|
677
|
+
sage: M.cover()
|
|
678
|
+
Vector space of dimension 10 over Rational Field
|
|
679
|
+
"""
|
|
680
|
+
return self._domain
|
|
681
|
+
|
|
682
|
+
V = cover
|
|
683
|
+
|
|
684
|
+
def relations(self):
|
|
685
|
+
r"""
|
|
686
|
+
Given this quotient space `Q = V/W`, return `W`.
|
|
687
|
+
|
|
688
|
+
EXAMPLES::
|
|
689
|
+
|
|
690
|
+
sage: M = QQ^10 / [list(range(10)), list(range(2,12))]
|
|
691
|
+
sage: M.relations()
|
|
692
|
+
Vector space of degree 10 and dimension 2 over Rational Field
|
|
693
|
+
Basis matrix:
|
|
694
|
+
[ 1 0 -1 -2 -3 -4 -5 -6 -7 -8]
|
|
695
|
+
[ 0 1 2 3 4 5 6 7 8 9]
|
|
696
|
+
"""
|
|
697
|
+
return self._sub
|
|
698
|
+
|
|
699
|
+
W = relations
|