passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.libs.pari
|
|
3
|
+
r"""
|
|
4
|
+
Morphisms between finitely generated modules over a PID
|
|
5
|
+
|
|
6
|
+
AUTHOR:
|
|
7
|
+
|
|
8
|
+
- William Stein, 2009
|
|
9
|
+
"""
|
|
10
|
+
# *************************************************************************
|
|
11
|
+
# Copyright (C) 2009 William Stein <wstein@gmail.com>
|
|
12
|
+
#
|
|
13
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
14
|
+
#
|
|
15
|
+
# This code is distributed in the hope that it will be useful,
|
|
16
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
18
|
+
# General Public License for more details.
|
|
19
|
+
#
|
|
20
|
+
# The full text of the GPL is available at:
|
|
21
|
+
#
|
|
22
|
+
# https://www.gnu.org/licenses/
|
|
23
|
+
# *************************************************************************
|
|
24
|
+
|
|
25
|
+
from sage.categories.morphism import Morphism
|
|
26
|
+
from .fgp_module import DEBUG
|
|
27
|
+
from sage.structure.richcmp import richcmp, op_NE
|
|
28
|
+
from sage.misc.cachefunc import cached_method
|
|
29
|
+
from sage.categories.homset import Homset
|
|
30
|
+
import sage.misc.weak_dict
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class FGP_Morphism(Morphism):
|
|
34
|
+
"""
|
|
35
|
+
A morphism between finitely generated modules over a PID.
|
|
36
|
+
|
|
37
|
+
EXAMPLES:
|
|
38
|
+
|
|
39
|
+
An endomorphism::
|
|
40
|
+
|
|
41
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
42
|
+
sage: Q = V/W; Q
|
|
43
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
44
|
+
sage: phi = Q.hom([Q.0+3*Q.1, -Q.1]); phi
|
|
45
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(1, 3), (0, 11)]
|
|
46
|
+
sage: phi(Q.0) == Q.0 + 3*Q.1
|
|
47
|
+
True
|
|
48
|
+
sage: phi(Q.1) == -Q.1
|
|
49
|
+
True
|
|
50
|
+
|
|
51
|
+
A morphism between different modules V1/W1 ---> V2/W2 in
|
|
52
|
+
different ambient spaces::
|
|
53
|
+
|
|
54
|
+
sage: V1 = ZZ^2; W1 = V1.span([[1,2],[3,4]]); A1 = V1/W1
|
|
55
|
+
sage: V2 = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W2 = V2.span([2*V2.0+4*V2.1, 9*V2.0+12*V2.1, 4*V2.2]); A2=V2/W2
|
|
56
|
+
sage: A1
|
|
57
|
+
Finitely generated module V/W over Integer Ring with invariants (2)
|
|
58
|
+
sage: A2
|
|
59
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
60
|
+
sage: phi = A1.hom([2*A2.0])
|
|
61
|
+
sage: phi(A1.0)
|
|
62
|
+
(2, 0)
|
|
63
|
+
sage: 2*A2.0
|
|
64
|
+
(2, 0)
|
|
65
|
+
sage: phi(2*A1.0)
|
|
66
|
+
(0, 0)
|
|
67
|
+
|
|
68
|
+
TESTS::
|
|
69
|
+
|
|
70
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
71
|
+
sage: phi = Q.hom([Q.0,Q.0 + 2*Q.1])
|
|
72
|
+
sage: loads(dumps(phi)) == phi
|
|
73
|
+
True
|
|
74
|
+
"""
|
|
75
|
+
def __init__(self, parent, phi, check=True):
|
|
76
|
+
"""
|
|
77
|
+
A morphism between finitely generated modules over a PID.
|
|
78
|
+
|
|
79
|
+
EXAMPLES::
|
|
80
|
+
|
|
81
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
82
|
+
sage: Q = V/W; Q
|
|
83
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
84
|
+
sage: phi = Q.hom([Q.0+3*Q.1, -Q.1]); phi
|
|
85
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(1, 3), (0, 11)]
|
|
86
|
+
sage: phi(Q.0) == Q.0 + 3*Q.1
|
|
87
|
+
True
|
|
88
|
+
sage: phi(Q.1) == -Q.1
|
|
89
|
+
True
|
|
90
|
+
|
|
91
|
+
For full documentation, see :class:`FGP_Morphism`.
|
|
92
|
+
"""
|
|
93
|
+
Morphism.__init__(self, parent)
|
|
94
|
+
M = parent.domain()
|
|
95
|
+
N = parent.codomain()
|
|
96
|
+
if isinstance(phi, FGP_Morphism):
|
|
97
|
+
if check:
|
|
98
|
+
if phi.parent() != parent:
|
|
99
|
+
raise TypeError
|
|
100
|
+
phi = phi._phi
|
|
101
|
+
check = False # no need
|
|
102
|
+
|
|
103
|
+
# input: phi is a morphism from MO = M.optimized().V() to N.V()
|
|
104
|
+
# that sends MO.W() to N.W()
|
|
105
|
+
if check:
|
|
106
|
+
if not isinstance(phi, Morphism) and M == N:
|
|
107
|
+
A = M.optimized()[0].V()
|
|
108
|
+
B = N.V()
|
|
109
|
+
s = M.base_ring()(phi) * B.coordinate_module(A).basis_matrix()
|
|
110
|
+
phi = A.Hom(B)(s)
|
|
111
|
+
|
|
112
|
+
MO, _ = M.optimized()
|
|
113
|
+
if phi.domain() != MO.V():
|
|
114
|
+
raise ValueError("domain of phi must be the covering module for the optimized covering module of the domain")
|
|
115
|
+
if phi.codomain() != N.V():
|
|
116
|
+
raise ValueError("codomain of phi must be the covering module the codomain.")
|
|
117
|
+
# check that MO.W() gets sent into N.W()
|
|
118
|
+
# todo (optimize): this is slow:
|
|
119
|
+
for x in MO.W().basis():
|
|
120
|
+
if phi(x) not in N.W():
|
|
121
|
+
raise ValueError("phi must send optimized submodule of M.W() into N.W()")
|
|
122
|
+
self._phi = phi
|
|
123
|
+
|
|
124
|
+
def _repr_(self):
|
|
125
|
+
"""
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
129
|
+
sage: Q = V/W; Q
|
|
130
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
131
|
+
sage: phi = Q.hom([Q.0+3*Q.1, -Q.1])
|
|
132
|
+
sage: phi._repr_()
|
|
133
|
+
'Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(1, 3), (0, 11)]'
|
|
134
|
+
"""
|
|
135
|
+
return "Morphism from module over %s with invariants %s to module with invariants %s that sends the generators to %s" % (
|
|
136
|
+
self.domain().base_ring(), self.domain().invariants(), self.codomain().invariants(),
|
|
137
|
+
list(self.im_gens()))
|
|
138
|
+
|
|
139
|
+
@cached_method
|
|
140
|
+
def im_gens(self):
|
|
141
|
+
"""
|
|
142
|
+
Return tuple of the images of the generators of the domain
|
|
143
|
+
under this morphism.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
148
|
+
sage: phi = Q.hom([Q.0,Q.0 + 2*Q.1])
|
|
149
|
+
sage: phi.im_gens()
|
|
150
|
+
((1, 0), (1, 2))
|
|
151
|
+
sage: phi.im_gens() is phi.im_gens()
|
|
152
|
+
True
|
|
153
|
+
"""
|
|
154
|
+
return tuple([self(x) for x in self.domain().gens()])
|
|
155
|
+
|
|
156
|
+
def _richcmp_(self, right, op):
|
|
157
|
+
"""
|
|
158
|
+
Comparison of ``self`` and ``right``.
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ)
|
|
163
|
+
sage: W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
164
|
+
sage: Q = V/W
|
|
165
|
+
sage: phi = Q.hom([Q.0,Q.0 + 2*Q.1])
|
|
166
|
+
sage: phi.im_gens()
|
|
167
|
+
((1, 0), (1, 2))
|
|
168
|
+
sage: phi.im_gens() is phi.im_gens()
|
|
169
|
+
True
|
|
170
|
+
sage: phi == phi
|
|
171
|
+
True
|
|
172
|
+
sage: psi = Q.hom([Q.0,Q.0 - 2*Q.1])
|
|
173
|
+
sage: phi == psi
|
|
174
|
+
False
|
|
175
|
+
sage: psi = Q.hom([Q.0,Q.0 - 2*Q.1])
|
|
176
|
+
sage: phi < psi
|
|
177
|
+
True
|
|
178
|
+
sage: psi >= phi
|
|
179
|
+
True
|
|
180
|
+
sage: psi = Q.hom([Q.0,Q.0 + 2*Q.1])
|
|
181
|
+
sage: phi == psi
|
|
182
|
+
True
|
|
183
|
+
"""
|
|
184
|
+
a = (self.domain(), self.codomain())
|
|
185
|
+
b = (right.domain(), right.codomain())
|
|
186
|
+
if a != b:
|
|
187
|
+
return (op == op_NE)
|
|
188
|
+
return richcmp(self.im_gens(), right.im_gens(), op)
|
|
189
|
+
|
|
190
|
+
def __add__(self, right):
|
|
191
|
+
"""
|
|
192
|
+
EXAMPLES::
|
|
193
|
+
|
|
194
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
195
|
+
sage: Q=V/W; phi = Q.hom([2*Q.0, Q.1]); phi
|
|
196
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(2, 0), (0, 1)]
|
|
197
|
+
sage: phi + phi
|
|
198
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(0, 0), (0, 2)]
|
|
199
|
+
"""
|
|
200
|
+
if not isinstance(right, FGP_Morphism): # todo: implement using coercion model
|
|
201
|
+
right = self.parent()(right)
|
|
202
|
+
return FGP_Morphism(self.parent(), self._phi + right._phi, check=DEBUG)
|
|
203
|
+
|
|
204
|
+
def __sub__(self, right):
|
|
205
|
+
"""
|
|
206
|
+
EXAMPLES::
|
|
207
|
+
|
|
208
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
209
|
+
sage: Q=V/W; phi = Q.hom([2*Q.0, Q.1])
|
|
210
|
+
sage: phi - phi
|
|
211
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(0, 0), (0, 0)]
|
|
212
|
+
"""
|
|
213
|
+
if not isinstance(right, FGP_Morphism): # todo: implement using coercion model
|
|
214
|
+
right = self.parent()(right)
|
|
215
|
+
return FGP_Morphism(self.parent(), self._phi - right._phi, check=DEBUG)
|
|
216
|
+
|
|
217
|
+
def __neg__(self):
|
|
218
|
+
"""
|
|
219
|
+
EXAMPLES::
|
|
220
|
+
|
|
221
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
222
|
+
sage: Q=V/W; phi = Q.hom([2*Q.0, Q.1])
|
|
223
|
+
sage: -phi
|
|
224
|
+
Morphism from module over Integer Ring with invariants (4, 12) to module with invariants (4, 12) that sends the generators to [(2, 0), (0, 11)]
|
|
225
|
+
"""
|
|
226
|
+
return FGP_Morphism(self.parent(), -self._phi, check=DEBUG)
|
|
227
|
+
|
|
228
|
+
def __call__(self, x):
|
|
229
|
+
"""
|
|
230
|
+
EXAMPLES::
|
|
231
|
+
|
|
232
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
233
|
+
sage: Q = V/W
|
|
234
|
+
sage: phi = Q.hom([Q.0+3*Q.1, -Q.1])
|
|
235
|
+
sage: phi(Q.0) == Q.0 + 3*Q.1
|
|
236
|
+
True
|
|
237
|
+
|
|
238
|
+
We compute the image of some submodules of the domain::
|
|
239
|
+
|
|
240
|
+
sage: phi(Q)
|
|
241
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
242
|
+
sage: phi(Q.submodule([Q.0]))
|
|
243
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
244
|
+
sage: phi(Q.submodule([Q.1]))
|
|
245
|
+
Finitely generated module V/W over Integer Ring with invariants (12)
|
|
246
|
+
sage: phi(W/W)
|
|
247
|
+
Finitely generated module V/W over Integer Ring with invariants ()
|
|
248
|
+
|
|
249
|
+
We try to evaluate on a module that is not a submodule of the domain, which raises a ValueError::
|
|
250
|
+
|
|
251
|
+
sage: phi(V/W.scale(2))
|
|
252
|
+
Traceback (most recent call last):
|
|
253
|
+
...
|
|
254
|
+
ValueError: x must be a submodule or element of the domain
|
|
255
|
+
|
|
256
|
+
We evaluate on an element of the domain that is not in the V
|
|
257
|
+
for the optimized representation of the domain::
|
|
258
|
+
|
|
259
|
+
sage: V = span([[1/2,0,0],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
260
|
+
sage: Q = V/W; Q
|
|
261
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
262
|
+
sage: O, X = Q.optimized()
|
|
263
|
+
sage: O.V()
|
|
264
|
+
Free module of degree 3 and rank 2 over Integer Ring
|
|
265
|
+
User basis matrix:
|
|
266
|
+
[ 0 6 1]
|
|
267
|
+
[ 0 -2 0]
|
|
268
|
+
sage: phi = Q.hom([Q.0, 4*Q.1])
|
|
269
|
+
sage: x = Q(V.0); x
|
|
270
|
+
(0, 8)
|
|
271
|
+
sage: x == 8*Q.1
|
|
272
|
+
True
|
|
273
|
+
sage: x in O.V()
|
|
274
|
+
False
|
|
275
|
+
sage: phi(x)
|
|
276
|
+
(0, 8)
|
|
277
|
+
sage: phi(8*Q.1)
|
|
278
|
+
(0, 8)
|
|
279
|
+
sage: phi(8*Q.1) == phi(x)
|
|
280
|
+
True
|
|
281
|
+
"""
|
|
282
|
+
from .fgp_module import FGP_Module_class
|
|
283
|
+
if isinstance(x, FGP_Module_class):
|
|
284
|
+
if not x.is_submodule(self.domain()):
|
|
285
|
+
raise ValueError("x must be a submodule or element of the domain")
|
|
286
|
+
# perhaps can be optimized with a matrix multiply; but note
|
|
287
|
+
# the subtlety of optimized representations.
|
|
288
|
+
return self.codomain().submodule([self(y) for y in x.smith_form_gens()])
|
|
289
|
+
else:
|
|
290
|
+
C = self.codomain()
|
|
291
|
+
D = self.domain()
|
|
292
|
+
O, X = D.optimized()
|
|
293
|
+
x = D(x)
|
|
294
|
+
if O is D:
|
|
295
|
+
x = x.lift()
|
|
296
|
+
else:
|
|
297
|
+
# Now we have to transform x so that it is in the optimized representation.
|
|
298
|
+
x = D.V().coordinate_vector(x.lift()) * X
|
|
299
|
+
return C(self._phi(x))
|
|
300
|
+
|
|
301
|
+
def kernel(self):
|
|
302
|
+
"""
|
|
303
|
+
Compute the kernel of this homomorphism.
|
|
304
|
+
|
|
305
|
+
EXAMPLES::
|
|
306
|
+
|
|
307
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
308
|
+
sage: Q = V/W; Q
|
|
309
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
310
|
+
sage: Q.hom([0, Q.1]).kernel()
|
|
311
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
312
|
+
sage: A = Q.hom([Q.0, 0]).kernel(); A
|
|
313
|
+
Finitely generated module V/W over Integer Ring with invariants (12)
|
|
314
|
+
sage: Q.1 in A
|
|
315
|
+
True
|
|
316
|
+
sage: phi = Q.hom([Q.0-3*Q.1, Q.0+Q.1])
|
|
317
|
+
sage: A = phi.kernel(); A
|
|
318
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
319
|
+
sage: phi(A)
|
|
320
|
+
Finitely generated module V/W over Integer Ring with invariants ()
|
|
321
|
+
"""
|
|
322
|
+
# The kernel is just got by taking the inverse image of the submodule W
|
|
323
|
+
# of the codomain quotient object.
|
|
324
|
+
V = self._phi.inverse_image(self.codomain().W())
|
|
325
|
+
D = self.domain()
|
|
326
|
+
V = D.W() + V
|
|
327
|
+
return D._module_constructor(V, D.W(), check=DEBUG)
|
|
328
|
+
|
|
329
|
+
def inverse_image(self, A):
|
|
330
|
+
"""
|
|
331
|
+
Given a submodule A of the codomain of this morphism, return
|
|
332
|
+
the inverse image of A under this morphism.
|
|
333
|
+
|
|
334
|
+
EXAMPLES::
|
|
335
|
+
|
|
336
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W; Q
|
|
337
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
338
|
+
sage: phi = Q.hom([0, Q.1])
|
|
339
|
+
sage: phi.inverse_image(Q.submodule([]))
|
|
340
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
341
|
+
sage: phi.kernel()
|
|
342
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
343
|
+
sage: phi.inverse_image(phi.codomain())
|
|
344
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
345
|
+
|
|
346
|
+
sage: phi.inverse_image(Q.submodule([Q.0]))
|
|
347
|
+
Finitely generated module V/W over Integer Ring with invariants (4)
|
|
348
|
+
sage: phi.inverse_image(Q.submodule([Q.1]))
|
|
349
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
350
|
+
|
|
351
|
+
sage: phi.inverse_image(ZZ^3)
|
|
352
|
+
Traceback (most recent call last):
|
|
353
|
+
...
|
|
354
|
+
TypeError: A must be a finitely generated quotient module
|
|
355
|
+
sage: phi.inverse_image(ZZ^3 / W.scale(2))
|
|
356
|
+
Traceback (most recent call last):
|
|
357
|
+
...
|
|
358
|
+
ValueError: A must be a submodule of the codomain
|
|
359
|
+
"""
|
|
360
|
+
from .fgp_module import FGP_Module_class
|
|
361
|
+
if not isinstance(A, FGP_Module_class):
|
|
362
|
+
raise TypeError("A must be a finitely generated quotient module")
|
|
363
|
+
if not A.is_submodule(self.codomain()):
|
|
364
|
+
raise ValueError("A must be a submodule of the codomain")
|
|
365
|
+
V = self._phi.inverse_image(A.V())
|
|
366
|
+
D = self.domain()
|
|
367
|
+
V = D.W() + V
|
|
368
|
+
return D._module_constructor(V, D.W(), check=DEBUG)
|
|
369
|
+
|
|
370
|
+
def image(self):
|
|
371
|
+
"""
|
|
372
|
+
Compute the image of this homomorphism.
|
|
373
|
+
|
|
374
|
+
EXAMPLES::
|
|
375
|
+
|
|
376
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
377
|
+
sage: Q = V/W; Q
|
|
378
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
379
|
+
sage: Q.hom([Q.0+3*Q.1, -Q.1]).image()
|
|
380
|
+
Finitely generated module V/W over Integer Ring with invariants (4, 12)
|
|
381
|
+
sage: Q.hom([3*Q.1, Q.1]).image()
|
|
382
|
+
Finitely generated module V/W over Integer Ring with invariants (12)
|
|
383
|
+
"""
|
|
384
|
+
V = self._phi.image() + self.codomain().W()
|
|
385
|
+
W = V.intersection(self.codomain().W())
|
|
386
|
+
return self.codomain()._module_constructor(V, W, check=DEBUG)
|
|
387
|
+
|
|
388
|
+
def lift(self, x):
|
|
389
|
+
"""
|
|
390
|
+
Given an element x in the codomain of self, if possible find an
|
|
391
|
+
element y in the domain such that self(y) == x. Raise a ValueError
|
|
392
|
+
if no such y exists.
|
|
393
|
+
|
|
394
|
+
INPUT:
|
|
395
|
+
|
|
396
|
+
- ``x`` -- element of the codomain of self
|
|
397
|
+
|
|
398
|
+
EXAMPLES::
|
|
399
|
+
|
|
400
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
|
|
401
|
+
sage: Q=V/W; phi = Q.hom([2*Q.0, Q.1])
|
|
402
|
+
sage: phi.lift(Q.1)
|
|
403
|
+
(0, 1)
|
|
404
|
+
sage: phi.lift(Q.0)
|
|
405
|
+
Traceback (most recent call last):
|
|
406
|
+
...
|
|
407
|
+
ValueError: no lift of element to domain
|
|
408
|
+
sage: phi.lift(2*Q.0)
|
|
409
|
+
(1, 0)
|
|
410
|
+
sage: phi.lift(2*Q.0+Q.1)
|
|
411
|
+
(1, 1)
|
|
412
|
+
sage: V = span([[5, -1/2]],ZZ); W = span([[20,-2]],ZZ); Q = V/W; phi=Q.hom([2*Q.0])
|
|
413
|
+
sage: x = phi.image().0; phi(phi.lift(x)) == x
|
|
414
|
+
True
|
|
415
|
+
"""
|
|
416
|
+
x = self.codomain()(x)
|
|
417
|
+
|
|
418
|
+
# We view self as a map V/W --> V'/W', where V/W is the
|
|
419
|
+
# optimized representation (which is fine to work with since
|
|
420
|
+
# there is a lift to the optimized representation if and only
|
|
421
|
+
# if there is a lift to the non-optimized representation).
|
|
422
|
+
CD = self.codomain()
|
|
423
|
+
A = self._phi.matrix()
|
|
424
|
+
try:
|
|
425
|
+
H, U = self.__lift_data
|
|
426
|
+
except AttributeError:
|
|
427
|
+
# Get the matrix of self: V --> V' wrt the basis for V and V'.
|
|
428
|
+
|
|
429
|
+
# Stack it on top of the basis for W'.
|
|
430
|
+
Wp = CD.V().coordinate_module(CD.W()).basis_matrix()
|
|
431
|
+
B = A.stack(Wp)
|
|
432
|
+
|
|
433
|
+
# Compute Hermite form of C with transformation
|
|
434
|
+
H, U = B.hermite_form(transformation=True)
|
|
435
|
+
self.__lift_data = H, U
|
|
436
|
+
|
|
437
|
+
# write x in terms of the basis for V.
|
|
438
|
+
w = CD.V().coordinate_vector(x.lift())
|
|
439
|
+
|
|
440
|
+
# Solve z*H = w.
|
|
441
|
+
try:
|
|
442
|
+
z = H.solve_left(w)
|
|
443
|
+
if z.denominator() != 1:
|
|
444
|
+
raise ValueError
|
|
445
|
+
except ValueError:
|
|
446
|
+
raise ValueError("no lift of element to domain")
|
|
447
|
+
|
|
448
|
+
# Write back in terms of rows of B, and delete rows not corresponding to A,
|
|
449
|
+
# since those corresponding to relations
|
|
450
|
+
v = (z * U)[:A.nrows()]
|
|
451
|
+
|
|
452
|
+
# Take the linear combination that v defines.
|
|
453
|
+
y = v * self.domain().optimized()[0].V().basis_matrix()
|
|
454
|
+
|
|
455
|
+
# Return the finitely generated module element defined by y.
|
|
456
|
+
y = self.domain()(y)
|
|
457
|
+
assert self(y) == x, "bug in phi.lift()"
|
|
458
|
+
return y
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
_fgp_homset = sage.misc.weak_dict.WeakValueDictionary()
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def FGP_Homset(X, Y):
|
|
465
|
+
"""
|
|
466
|
+
EXAMPLES::
|
|
467
|
+
|
|
468
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
469
|
+
sage: Q.Hom(Q) # indirect doctest
|
|
470
|
+
Set of Morphisms from Finitely generated module V/W over Integer Ring with invariants (4, 12) to Finitely generated module V/W over Integer Ring with invariants (4, 12) in Category of modules over Integer Ring
|
|
471
|
+
sage: True # Q.Hom(Q) is Q.Hom(Q)
|
|
472
|
+
True
|
|
473
|
+
sage: type(Q.Hom(Q))
|
|
474
|
+
<class 'sage.modules.fg_pid.fgp_morphism.FGP_Homset_class_with_category'>
|
|
475
|
+
"""
|
|
476
|
+
key = (X, Y)
|
|
477
|
+
try:
|
|
478
|
+
return _fgp_homset[key]
|
|
479
|
+
except KeyError:
|
|
480
|
+
pass
|
|
481
|
+
H = FGP_Homset_class(X, Y)
|
|
482
|
+
# Caching breaks tests in fgp_module.
|
|
483
|
+
# _fgp_homset[key] = H
|
|
484
|
+
return H
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
class FGP_Homset_class(Homset):
|
|
488
|
+
"""
|
|
489
|
+
Homsets of :class:`~sage.modules.fg_pid.fgp_module.FGP_Module`.
|
|
490
|
+
|
|
491
|
+
TESTS::
|
|
492
|
+
|
|
493
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
494
|
+
sage: H = Hom(Q,Q); H # indirect doctest
|
|
495
|
+
Set of Morphisms from Finitely generated module V/W over Integer Ring with invariants (4, 12) to Finitely generated module V/W over Integer Ring with invariants (4, 12) in Category of modules over Integer Ring
|
|
496
|
+
sage: type(H)
|
|
497
|
+
<class 'sage.modules.fg_pid.fgp_morphism.FGP_Homset_class_with_category'>
|
|
498
|
+
"""
|
|
499
|
+
Element = FGP_Morphism
|
|
500
|
+
|
|
501
|
+
def __init__(self, X, Y, category=None):
|
|
502
|
+
"""
|
|
503
|
+
EXAMPLES::
|
|
504
|
+
|
|
505
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
506
|
+
sage: type(Q.Hom(Q))
|
|
507
|
+
<class 'sage.modules.fg_pid.fgp_morphism.FGP_Homset_class_with_category'>
|
|
508
|
+
"""
|
|
509
|
+
if category is None:
|
|
510
|
+
from sage.modules.free_module import FreeModule_generic
|
|
511
|
+
if isinstance(X, FreeModule_generic) and isinstance(Y, FreeModule_generic):
|
|
512
|
+
from sage.categories.modules_with_basis import ModulesWithBasis
|
|
513
|
+
category = ModulesWithBasis(X.base_ring())
|
|
514
|
+
else:
|
|
515
|
+
from sage.categories.modules import Modules
|
|
516
|
+
category = Modules(X.base_ring())
|
|
517
|
+
Homset.__init__(self, X, Y, category)
|
|
518
|
+
|
|
519
|
+
def _coerce_map_from_(self, S):
|
|
520
|
+
"""
|
|
521
|
+
EXAMPLES::
|
|
522
|
+
|
|
523
|
+
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
|
|
524
|
+
sage: phi = Q.hom([Q.0,Q.0 + 2*Q.1]); psi = loads(dumps(phi))
|
|
525
|
+
sage: phi.parent()._coerce_map_from_(psi.parent())
|
|
526
|
+
True
|
|
527
|
+
sage: phi.parent()._coerce_map_from_(Q.Hom(ZZ^3))
|
|
528
|
+
False
|
|
529
|
+
"""
|
|
530
|
+
# We define this so that morphisms in equal parents canonically coerce,
|
|
531
|
+
# since otherwise, e.g., the dumps(loads(...)) doctest above would fail.
|
|
532
|
+
if isinstance(S, FGP_Homset_class) and S == self:
|
|
533
|
+
return True
|
|
534
|
+
if self.is_endomorphism_set():
|
|
535
|
+
R = self.domain().base_ring()
|
|
536
|
+
return R == S or bool(R._coerce_map_from_(S))
|
|
537
|
+
return False
|
|
538
|
+
|
|
539
|
+
def __call__(self, x):
|
|
540
|
+
"""
|
|
541
|
+
Convert x into an fgp morphism.
|
|
542
|
+
|
|
543
|
+
EXAMPLES::
|
|
544
|
+
|
|
545
|
+
sage: V = span([[1/2,0,0],[3/2,2,1],[0,0,1]],ZZ); W = V.span([V.0+2*V.1, 9*V.0+2*V.1, 4*V.2])
|
|
546
|
+
sage: Q = V/W; H = Q.Hom(Q)
|
|
547
|
+
sage: H(3)
|
|
548
|
+
Morphism from module over Integer Ring with invariants (4, 16) to module with invariants (4, 16) that sends the generators to [(3, 0), (0, 3)]
|
|
549
|
+
"""
|
|
550
|
+
return self.element_class(self, x)
|