passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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 +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.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-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.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-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.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-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.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-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.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-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,823 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Morphisms of free modules
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
- William Stein: initial version
|
|
7
|
+
|
|
8
|
+
- Miguel Marco (2010-06-19): added eigenvalues, eigenvectors and minpoly functions
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
TESTS::
|
|
12
|
+
|
|
13
|
+
sage: V = ZZ^2; f = V.hom([V.1, -2*V.0])
|
|
14
|
+
sage: loads(dumps(f))
|
|
15
|
+
Free module morphism defined by the matrix
|
|
16
|
+
[ 0 1]
|
|
17
|
+
[-2 0]
|
|
18
|
+
Domain: Ambient free module of rank 2 over the principal ideal domain ...
|
|
19
|
+
Codomain: Ambient free module of rank 2 over the principal ideal domain ...
|
|
20
|
+
sage: loads(dumps(f)) == f
|
|
21
|
+
True
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
####################################################################################
|
|
25
|
+
# Copyright (C) 2009 William Stein <wstein@gmail.com>
|
|
26
|
+
#
|
|
27
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
28
|
+
#
|
|
29
|
+
# This code is distributed in the hope that it will be useful,
|
|
30
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
31
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
32
|
+
# General Public License for more details.
|
|
33
|
+
#
|
|
34
|
+
# The full text of the GPL is available at:
|
|
35
|
+
#
|
|
36
|
+
# http://www.gnu.org/licenses/
|
|
37
|
+
####################################################################################
|
|
38
|
+
|
|
39
|
+
# A matrix morphism is a morphism that is defined by multiplication by a
|
|
40
|
+
# matrix. Elements of domain must either have a method "vector()" that
|
|
41
|
+
# returns a vector that the defining matrix can hit from the left, or
|
|
42
|
+
# be coercible into vector space of appropriate dimension.
|
|
43
|
+
|
|
44
|
+
import sage.modules.free_module as free_module
|
|
45
|
+
|
|
46
|
+
from sage.categories.morphism import Morphism
|
|
47
|
+
from sage.modules import free_module_homspace, matrix_morphism
|
|
48
|
+
from sage.structure.richcmp import rich_to_bool, richcmp
|
|
49
|
+
from sage.structure.sequence import Sequence
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def is_FreeModuleMorphism(x):
|
|
53
|
+
"""
|
|
54
|
+
This function is deprecated.
|
|
55
|
+
|
|
56
|
+
EXAMPLES::
|
|
57
|
+
|
|
58
|
+
sage: V = ZZ^2; f = V.hom([V.1, -2*V.0])
|
|
59
|
+
sage: sage.modules.free_module_morphism.is_FreeModuleMorphism(f)
|
|
60
|
+
doctest:warning...
|
|
61
|
+
DeprecationWarning: is_FreeModuleMorphism is deprecated;
|
|
62
|
+
use isinstance(..., FreeModuleMorphism) or categories instead
|
|
63
|
+
See https://github.com/sagemath/sage/issues/37731 for details.
|
|
64
|
+
True
|
|
65
|
+
sage: sage.modules.free_module_morphism.is_FreeModuleMorphism(0)
|
|
66
|
+
False
|
|
67
|
+
"""
|
|
68
|
+
from sage.misc.superseded import deprecation
|
|
69
|
+
deprecation(37731,
|
|
70
|
+
"is_FreeModuleMorphism is deprecated; "
|
|
71
|
+
"use isinstance(..., FreeModuleMorphism) or categories instead")
|
|
72
|
+
return isinstance(x, FreeModuleMorphism)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class FreeModuleMorphism(matrix_morphism.MatrixMorphism):
|
|
76
|
+
|
|
77
|
+
def __init__(self, parent, A, side='left'):
|
|
78
|
+
"""
|
|
79
|
+
INPUT:
|
|
80
|
+
|
|
81
|
+
- ``parent`` -- a homspace in a (sub) category of free modules
|
|
82
|
+
|
|
83
|
+
- ``A`` -- matrix
|
|
84
|
+
|
|
85
|
+
- ``side`` -- side of the vectors acted on by the matrix (default: ``'left'``)
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: V = ZZ^3; W = span([[1,2,3], [-1,2,8]], ZZ)
|
|
90
|
+
sage: phi = V.hom(matrix(ZZ, 3, [1..9]))
|
|
91
|
+
sage: type(phi)
|
|
92
|
+
<class 'sage.modules.free_module_morphism.FreeModuleMorphism'>
|
|
93
|
+
"""
|
|
94
|
+
if not isinstance(parent, free_module_homspace.FreeModuleHomspace):
|
|
95
|
+
raise TypeError("parent (=%s) must be a free module hom space" % parent)
|
|
96
|
+
if isinstance(A, matrix_morphism.MatrixMorphism):
|
|
97
|
+
A = A.matrix()
|
|
98
|
+
A = parent._matrix_space(side)(A)
|
|
99
|
+
matrix_morphism.MatrixMorphism.__init__(self, parent, A, side=side)
|
|
100
|
+
|
|
101
|
+
def pushforward(self, x):
|
|
102
|
+
"""
|
|
103
|
+
Compute the image of a sub-module of the domain.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: V = QQ^3; W = span([[1,2,3], [-1,2,5/3]], QQ)
|
|
108
|
+
sage: phi = V.hom(matrix(QQ, 3, [1..9]))
|
|
109
|
+
sage: phi.rank()
|
|
110
|
+
2
|
|
111
|
+
sage: phi(V) #indirect doctest
|
|
112
|
+
Vector space of degree 3 and dimension 2 over Rational Field
|
|
113
|
+
Basis matrix:
|
|
114
|
+
[ 1 0 -1]
|
|
115
|
+
[ 0 1 2]
|
|
116
|
+
|
|
117
|
+
We compute the image of a submodule of a ZZ-module embedded in
|
|
118
|
+
a rational vector space::
|
|
119
|
+
|
|
120
|
+
sage: V = QQ^3; W = V.span_of_basis([[2,2,3], [-1,2,5/3]], ZZ)
|
|
121
|
+
sage: phi = W.hom([W.0, W.0 - W.1]); phi
|
|
122
|
+
Free module morphism defined by the matrix
|
|
123
|
+
[ 1 0]
|
|
124
|
+
[ 1 -1]...
|
|
125
|
+
sage: phi(span([2*W.1], ZZ))
|
|
126
|
+
Free module of degree 3 and rank 1 over Integer Ring
|
|
127
|
+
Echelon basis matrix:
|
|
128
|
+
[ 6 0 8/3]
|
|
129
|
+
sage: phi(2*W.1)
|
|
130
|
+
(6, 0, 8/3)
|
|
131
|
+
"""
|
|
132
|
+
if isinstance(x, free_module.FreeModule_generic):
|
|
133
|
+
V = self.domain().submodule(x)
|
|
134
|
+
return self.restrict_domain(V).image()
|
|
135
|
+
raise TypeError("`pushforward` is only defined for submodules")
|
|
136
|
+
|
|
137
|
+
def _repr_(self):
|
|
138
|
+
r"""
|
|
139
|
+
Return string representation of this morphism of free modules.
|
|
140
|
+
|
|
141
|
+
EXAMPLES::
|
|
142
|
+
|
|
143
|
+
sage: V = ZZ^3; W = span([[1,2,3], [-1,2,8]], ZZ)
|
|
144
|
+
sage: phi = V.hom(matrix(ZZ, 3, [1..9]))
|
|
145
|
+
sage: phi._repr_()
|
|
146
|
+
'Free module morphism defined by the matrix\n[1 2 3]\n[4 5 6]\n[7 8 9]\nDomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring\nCodomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring'
|
|
147
|
+
|
|
148
|
+
sage: V = ZZ^6
|
|
149
|
+
sage: W = ZZ^4
|
|
150
|
+
sage: m = matrix(QQ, [[1, 0, 0 ,0], [0]*4, [0]*4, [0]*4, [0]*4, [0]*4])
|
|
151
|
+
sage: phi = V.hom(m, W)
|
|
152
|
+
sage: rho = phi.restrict_codomain(W.span([W.0]))
|
|
153
|
+
sage: rho
|
|
154
|
+
Free module morphism defined by the matrix
|
|
155
|
+
[1]
|
|
156
|
+
[0]
|
|
157
|
+
[0]
|
|
158
|
+
[0]
|
|
159
|
+
[0]
|
|
160
|
+
[0]
|
|
161
|
+
Domain: Ambient free module of rank 6 over the principal ideal domain Integer Ring
|
|
162
|
+
Codomain: Free module of degree 4 and rank 1 over Integer Ring
|
|
163
|
+
Echelon basis matrix:
|
|
164
|
+
[1 0 0 0]
|
|
165
|
+
|
|
166
|
+
sage: V = QQ^40
|
|
167
|
+
sage: m = matrix(QQ, 40, 40, 1600)
|
|
168
|
+
sage: phi = V.hom(m, V)
|
|
169
|
+
sage: phi
|
|
170
|
+
Vector space morphism represented by the matrix:
|
|
171
|
+
40 x 40 dense matrix over Rational Field
|
|
172
|
+
Domain: Vector space of dimension 40 over Rational Field
|
|
173
|
+
Codomain: Vector space of dimension 40 over Rational Field
|
|
174
|
+
|
|
175
|
+
The representation displays which side of the vectors the matrix is acting::
|
|
176
|
+
|
|
177
|
+
sage: V = ZZ^3
|
|
178
|
+
sage: h = V.hom([V.1, V.2, V.0]); h
|
|
179
|
+
Free module morphism defined by the matrix
|
|
180
|
+
[0 1 0]
|
|
181
|
+
[0 0 1]
|
|
182
|
+
[1 0 0]
|
|
183
|
+
Domain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
|
|
184
|
+
Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
|
|
185
|
+
sage: h2 = V.hom([V.1, V.2, V.0], side='right'); h2
|
|
186
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
187
|
+
[0 0 1]
|
|
188
|
+
[1 0 0]
|
|
189
|
+
[0 1 0]
|
|
190
|
+
Domain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
|
|
191
|
+
Codomain: Ambient free module of rank 3 over the principal ideal domain Integer Ring
|
|
192
|
+
"""
|
|
193
|
+
r = "Free module morphism defined {}by the matrix\n{!r}\nDomain: {}\nCodomain: {}"
|
|
194
|
+
act = ""
|
|
195
|
+
if self.side() == "right":
|
|
196
|
+
act = "as left-multiplication "
|
|
197
|
+
return r.format(act, self.matrix(), self.domain(), self.codomain())
|
|
198
|
+
|
|
199
|
+
def change_ring(self, R):
|
|
200
|
+
"""
|
|
201
|
+
Change the ring over which this morphism is defined.
|
|
202
|
+
|
|
203
|
+
This changes the ring of the domain, codomain, and underlying matrix.
|
|
204
|
+
|
|
205
|
+
EXAMPLES::
|
|
206
|
+
|
|
207
|
+
sage: V0 = span([[0,0,1],[0,2,0]], ZZ); V1 = span([[1/2,0],[0,2]], ZZ)
|
|
208
|
+
sage: W = span([[1,0],[0,6]], ZZ)
|
|
209
|
+
sage: h = V0.hom([-3*V1.0 - 3*V1.1, -3*V1.0 - 3*V1.1])
|
|
210
|
+
sage: h.base_ring()
|
|
211
|
+
Integer Ring
|
|
212
|
+
sage: h
|
|
213
|
+
Free module morphism defined by the matrix
|
|
214
|
+
[-3 -3]
|
|
215
|
+
[-3 -3]...
|
|
216
|
+
sage: h.change_ring(QQ).base_ring()
|
|
217
|
+
Rational Field
|
|
218
|
+
sage: f = h.change_ring(QQ); f
|
|
219
|
+
Vector space morphism represented by the matrix:
|
|
220
|
+
[-3 -3]
|
|
221
|
+
[-3 -3]
|
|
222
|
+
Domain: Vector space of degree 3 and dimension 2 over Rational Field
|
|
223
|
+
Basis matrix:
|
|
224
|
+
[0 1 0]
|
|
225
|
+
[0 0 1]
|
|
226
|
+
Codomain: Vector space of degree 2 and dimension 2 over Rational Field
|
|
227
|
+
Basis matrix:
|
|
228
|
+
[1 0]
|
|
229
|
+
[0 1]
|
|
230
|
+
sage: f = h.change_ring(GF(7)); f
|
|
231
|
+
Vector space morphism represented by the matrix:
|
|
232
|
+
[4 4]
|
|
233
|
+
[4 4]
|
|
234
|
+
Domain: Vector space of degree 3 and dimension 2 over Finite Field of size 7
|
|
235
|
+
Basis matrix:
|
|
236
|
+
[0 1 0]
|
|
237
|
+
[0 0 1]
|
|
238
|
+
Codomain: Vector space of degree 2 and dimension 2 over Finite Field of size 7
|
|
239
|
+
Basis matrix:
|
|
240
|
+
[1 0]
|
|
241
|
+
[0 1]
|
|
242
|
+
"""
|
|
243
|
+
D = self.domain().change_ring(R)
|
|
244
|
+
C = self.codomain().change_ring(R)
|
|
245
|
+
A = self.matrix().change_ring(R)
|
|
246
|
+
return D.hom(A, C, side=self.side())
|
|
247
|
+
|
|
248
|
+
def inverse_image(self, V):
|
|
249
|
+
"""
|
|
250
|
+
Given a submodule V of the codomain of self, return the
|
|
251
|
+
inverse image of V under self, i.e., the biggest submodule of
|
|
252
|
+
the domain of ``self`` that maps into V.
|
|
253
|
+
|
|
254
|
+
EXAMPLES:
|
|
255
|
+
|
|
256
|
+
We test computing inverse images over a field::
|
|
257
|
+
|
|
258
|
+
sage: V = QQ^3; W = span([[1,2,3], [-1,2,5/3]], QQ)
|
|
259
|
+
sage: phi = V.hom(matrix(QQ, 3, [1..9]))
|
|
260
|
+
sage: phi.rank()
|
|
261
|
+
2
|
|
262
|
+
sage: I = phi.inverse_image(W); I
|
|
263
|
+
Vector space of degree 3 and dimension 2 over Rational Field
|
|
264
|
+
Basis matrix:
|
|
265
|
+
[ 1 0 0]
|
|
266
|
+
[ 0 1 -1/2]
|
|
267
|
+
sage: phi(I.0) in W
|
|
268
|
+
True
|
|
269
|
+
sage: phi(I.1) in W
|
|
270
|
+
True
|
|
271
|
+
sage: W = phi.image()
|
|
272
|
+
sage: phi.inverse_image(W) == V
|
|
273
|
+
True
|
|
274
|
+
|
|
275
|
+
We test computing inverse images between two spaces embedded in different
|
|
276
|
+
ambient spaces.::
|
|
277
|
+
|
|
278
|
+
sage: V0 = span([[0,0,1],[0,2,0]],ZZ); V1 = span([[1/2,0],[0,2]],ZZ)
|
|
279
|
+
sage: W = span([[1,0],[0,6]],ZZ)
|
|
280
|
+
sage: h = V0.hom([-3*V1.0 - 3*V1.1, -3*V1.0 - 3*V1.1])
|
|
281
|
+
sage: h.inverse_image(W)
|
|
282
|
+
Free module of degree 3 and rank 2 over Integer Ring
|
|
283
|
+
Echelon basis matrix:
|
|
284
|
+
[0 2 1]
|
|
285
|
+
[0 0 2]
|
|
286
|
+
sage: h(h.inverse_image(W)).is_submodule(W)
|
|
287
|
+
True
|
|
288
|
+
sage: h(h.inverse_image(W)).index_in(W)
|
|
289
|
+
+Infinity
|
|
290
|
+
sage: h(h.inverse_image(W))
|
|
291
|
+
Free module of degree 2 and rank 1 over Integer Ring
|
|
292
|
+
Echelon basis matrix:
|
|
293
|
+
[ 3 12]
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
We test computing inverse images over the integers::
|
|
297
|
+
|
|
298
|
+
sage: V = QQ^3; W = V.span_of_basis([[2,2,3],[-1,2,5/3]], ZZ)
|
|
299
|
+
sage: phi = W.hom([W.0, W.0 - W.1])
|
|
300
|
+
sage: Z = W.span([2*W.1]); Z
|
|
301
|
+
Free module of degree 3 and rank 1 over Integer Ring
|
|
302
|
+
Echelon basis matrix:
|
|
303
|
+
[ 2 -4 -10/3]
|
|
304
|
+
sage: Y = phi.inverse_image(Z); Y
|
|
305
|
+
Free module of degree 3 and rank 1 over Integer Ring
|
|
306
|
+
Echelon basis matrix:
|
|
307
|
+
[ 6 0 8/3]
|
|
308
|
+
sage: phi(Y) == Z
|
|
309
|
+
True
|
|
310
|
+
|
|
311
|
+
We test that :issue:`24590` is resolved::
|
|
312
|
+
|
|
313
|
+
sage: A = FreeQuadraticModule(ZZ, 1, matrix([2]))
|
|
314
|
+
sage: f = A.Hom(A).an_element()
|
|
315
|
+
sage: f.inverse_image(A)
|
|
316
|
+
Free module of degree 1 and rank 1 over Integer Ring
|
|
317
|
+
Echelon basis matrix:
|
|
318
|
+
[1]
|
|
319
|
+
|
|
320
|
+
We test that it respects the ``side``::
|
|
321
|
+
|
|
322
|
+
sage: V = ZZ^2
|
|
323
|
+
sage: m = matrix(2, [1, 1, 0, 1])
|
|
324
|
+
sage: h = V.hom(m, side='right')
|
|
325
|
+
sage: h
|
|
326
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
327
|
+
[1 1]
|
|
328
|
+
[0 1]...
|
|
329
|
+
sage: SV = V.span([V.0])
|
|
330
|
+
sage: h.inverse_image(SV)
|
|
331
|
+
Free module of degree 2 and rank 1 over Integer Ring
|
|
332
|
+
Echelon basis matrix:
|
|
333
|
+
[1 0]
|
|
334
|
+
sage: V.hom(m).inverse_image(SV)
|
|
335
|
+
Free module of degree 2 and rank 1 over Integer Ring
|
|
336
|
+
Echelon basis matrix:
|
|
337
|
+
[ 1 -1]
|
|
338
|
+
"""
|
|
339
|
+
if self.rank() == 0:
|
|
340
|
+
# Special case -- if this is the 0 map, then the only possibility
|
|
341
|
+
# for the inverse image is that it is the whole domain.
|
|
342
|
+
return self.domain()
|
|
343
|
+
|
|
344
|
+
R = self.base_ring()
|
|
345
|
+
if self.side() == "left":
|
|
346
|
+
A = self.matrix()
|
|
347
|
+
else:
|
|
348
|
+
A = self.matrix().transpose()
|
|
349
|
+
|
|
350
|
+
# Replace the module V that we are going to pullback by a
|
|
351
|
+
# submodule that is contained in the image of self, since our
|
|
352
|
+
# plan is to lift all generators of V.
|
|
353
|
+
V = self.image().intersection(V)
|
|
354
|
+
# Write V in terms of the basis for the codomain.
|
|
355
|
+
V = self.codomain().coordinate_module(V)
|
|
356
|
+
B = V.basis_matrix()
|
|
357
|
+
|
|
358
|
+
# Compute the kernel, which is contained in the inverse image.
|
|
359
|
+
K = self.kernel()
|
|
360
|
+
|
|
361
|
+
if R.is_field():
|
|
362
|
+
# By solving, find lifts of each of the basis elements of V.
|
|
363
|
+
# Each row of C gives a linear combination of the basis for the domain
|
|
364
|
+
# that maps to one of the basis elements V.
|
|
365
|
+
C = A.solve_left(B)
|
|
366
|
+
|
|
367
|
+
else:
|
|
368
|
+
if not hasattr(A, 'hermite_form'):
|
|
369
|
+
raise NotImplementedError("base ring (%s) must have hermite_form algorithm in order to compute inverse image" % R)
|
|
370
|
+
|
|
371
|
+
# 1. Compute H such that U*A = H = hnf(A) without zero
|
|
372
|
+
# rows. What this "does" is find a basis for the image of
|
|
373
|
+
# A and explicitly represents each element in this basis
|
|
374
|
+
# as the image of some element of the domain (the rows of
|
|
375
|
+
# U give these elements of the domain).
|
|
376
|
+
H, U = A.hermite_form(transformation=True, include_zero_rows=False)
|
|
377
|
+
|
|
378
|
+
# 2. Next we find the unique solution to the equation
|
|
379
|
+
# Y*H = B. This writes each basis element of V in
|
|
380
|
+
# terms of our image basis found in the previous step.
|
|
381
|
+
Y = H.solve_left(B)
|
|
382
|
+
|
|
383
|
+
# 3. Multiply Y by U then takes those same linear combinations
|
|
384
|
+
# from step 2 above and lifts them to coefficients that define
|
|
385
|
+
# linear combinations of the basis for the domain.
|
|
386
|
+
C = Y*U
|
|
387
|
+
|
|
388
|
+
# Finally take the linear combinations of the basis for the
|
|
389
|
+
# domain defined by C. Together with the kernel K, this spans
|
|
390
|
+
# the inverse image of V.
|
|
391
|
+
dom = self.domain()
|
|
392
|
+
if not dom.is_ambient():
|
|
393
|
+
C = C * dom.basis_matrix()
|
|
394
|
+
L = dom.submodule(C.rows())
|
|
395
|
+
return K + L
|
|
396
|
+
|
|
397
|
+
def lift(self, x):
|
|
398
|
+
r"""
|
|
399
|
+
Given an element of the image, return an element of the codomain that maps onto it.
|
|
400
|
+
|
|
401
|
+
Note that ``lift`` and ``preimage_representative`` are
|
|
402
|
+
equivalent names for this method, with the latter suggesting
|
|
403
|
+
that the return value is a coset representative of the domain
|
|
404
|
+
modulo the kernel of the morphism.
|
|
405
|
+
|
|
406
|
+
EXAMPLES::
|
|
407
|
+
|
|
408
|
+
sage: X = QQ**2
|
|
409
|
+
sage: V = X.span([[2, 0], [0, 8]], ZZ)
|
|
410
|
+
sage: W = (QQ**1).span([[1/12]], ZZ)
|
|
411
|
+
sage: f = V.hom([W([1/3]), W([1/2])], W)
|
|
412
|
+
sage: l=f.lift([1/3]); l # random
|
|
413
|
+
(8, -16)
|
|
414
|
+
sage: f(l)
|
|
415
|
+
(1/3)
|
|
416
|
+
sage: f(f.lift([1/2]))
|
|
417
|
+
(1/2)
|
|
418
|
+
sage: f(f.lift([1/6]))
|
|
419
|
+
(1/6)
|
|
420
|
+
sage: f.lift([1/12])
|
|
421
|
+
Traceback (most recent call last):
|
|
422
|
+
...
|
|
423
|
+
ValueError: element is not in the image
|
|
424
|
+
sage: f.lift([1/24])
|
|
425
|
+
Traceback (most recent call last):
|
|
426
|
+
...
|
|
427
|
+
TypeError: element [1/24] is not in free module
|
|
428
|
+
|
|
429
|
+
This works for vector spaces, too::
|
|
430
|
+
|
|
431
|
+
sage: V = VectorSpace(GF(3), 2)
|
|
432
|
+
sage: W = VectorSpace(GF(3), 3)
|
|
433
|
+
sage: f = V.hom([W.1, W.1 - W.0])
|
|
434
|
+
sage: f.lift(W.1)
|
|
435
|
+
(1, 0)
|
|
436
|
+
sage: f.lift(W.2)
|
|
437
|
+
Traceback (most recent call last):
|
|
438
|
+
...
|
|
439
|
+
ValueError: element is not in the image
|
|
440
|
+
sage: w = W((17, -2, 0))
|
|
441
|
+
sage: f(f.lift(w)) == w
|
|
442
|
+
True
|
|
443
|
+
|
|
444
|
+
This example illustrates the use of the ``preimage_representative``
|
|
445
|
+
as an equivalent name for this method. ::
|
|
446
|
+
|
|
447
|
+
sage: V = ZZ^3
|
|
448
|
+
sage: W = ZZ^2
|
|
449
|
+
sage: w = vector(ZZ, [1,2])
|
|
450
|
+
sage: f = V.hom([w, w, w], W)
|
|
451
|
+
sage: f.preimage_representative(vector(ZZ, [10, 20]))
|
|
452
|
+
(0, 0, 10)
|
|
453
|
+
|
|
454
|
+
::
|
|
455
|
+
|
|
456
|
+
sage: V = QQ^2; m = matrix(2, [1, 1, 0, 1])
|
|
457
|
+
sage: V.hom(m, side='right').lift(V.0 + V.1)
|
|
458
|
+
(0, 1)
|
|
459
|
+
sage: V.hom(m).lift(V.0 + V.1)
|
|
460
|
+
(1, 0)
|
|
461
|
+
"""
|
|
462
|
+
from .free_module_element import vector
|
|
463
|
+
x = self.codomain()(x)
|
|
464
|
+
if self.side() == "right":
|
|
465
|
+
A = self.matrix().transpose()
|
|
466
|
+
else:
|
|
467
|
+
A = self.matrix()
|
|
468
|
+
R = self.base_ring()
|
|
469
|
+
if R.is_field():
|
|
470
|
+
try:
|
|
471
|
+
C = A.solve_left(x)
|
|
472
|
+
except ValueError:
|
|
473
|
+
raise ValueError("element is not in the image")
|
|
474
|
+
else:
|
|
475
|
+
# see inverse_image for similar code but with comments
|
|
476
|
+
if not hasattr(A, 'hermite_form'):
|
|
477
|
+
raise NotImplementedError("base ring (%s) must have hermite_form algorithm in order to compute inverse image" % R)
|
|
478
|
+
H, U = A.hermite_form(transformation=True, include_zero_rows=False)
|
|
479
|
+
Y = H.solve_left(vector(self.codomain().coordinates(x)))
|
|
480
|
+
C = Y*U
|
|
481
|
+
try:
|
|
482
|
+
t = self.domain().linear_combination_of_basis(C)
|
|
483
|
+
except TypeError:
|
|
484
|
+
raise ValueError("element is not in the image")
|
|
485
|
+
assert self(t) == x
|
|
486
|
+
return t
|
|
487
|
+
|
|
488
|
+
preimage_representative = lift
|
|
489
|
+
|
|
490
|
+
def eigenvalues(self, extend=True):
|
|
491
|
+
r"""
|
|
492
|
+
Return a list with the eigenvalues of the endomorphism of vector spaces.
|
|
493
|
+
|
|
494
|
+
INPUT:
|
|
495
|
+
|
|
496
|
+
- ``extend`` -- boolean (default: ``True``); decides if base field
|
|
497
|
+
extensions should be considered or not
|
|
498
|
+
|
|
499
|
+
EXAMPLES:
|
|
500
|
+
|
|
501
|
+
We compute the eigenvalues of an endomorphism of `\QQ^3`::
|
|
502
|
+
|
|
503
|
+
sage: V = QQ^3
|
|
504
|
+
sage: H = V.endomorphism_ring()([[1,-1,0], [-1,1,1], [0,3,1]])
|
|
505
|
+
sage: H.eigenvalues() # needs sage.rings.number_field
|
|
506
|
+
[3, 1, -1]
|
|
507
|
+
|
|
508
|
+
Note the effect of the ``extend`` option::
|
|
509
|
+
|
|
510
|
+
sage: V = QQ^2
|
|
511
|
+
sage: H = V.endomorphism_ring()([[0,-1], [1,0]])
|
|
512
|
+
sage: H.eigenvalues() # needs sage.rings.number_field
|
|
513
|
+
[-1*I, 1*I]
|
|
514
|
+
sage: H.eigenvalues(extend=False) # needs sage.libs.pari
|
|
515
|
+
[]
|
|
516
|
+
"""
|
|
517
|
+
if self.base_ring().is_field():
|
|
518
|
+
if self.is_endomorphism():
|
|
519
|
+
return self.matrix().eigenvalues(extend=extend)
|
|
520
|
+
else:
|
|
521
|
+
raise TypeError("not an endomorphism")
|
|
522
|
+
else:
|
|
523
|
+
raise NotImplementedError("module must be a vector space")
|
|
524
|
+
|
|
525
|
+
def eigenvectors(self, extend=True):
|
|
526
|
+
"""
|
|
527
|
+
Compute the subspace of eigenvectors of a given eigenvalue.
|
|
528
|
+
|
|
529
|
+
INPUT:
|
|
530
|
+
|
|
531
|
+
- ``extend`` -- boolean (default: ``True``); decides if base field
|
|
532
|
+
extensions should be considered or not
|
|
533
|
+
|
|
534
|
+
OUTPUT:
|
|
535
|
+
|
|
536
|
+
A sequence of tuples. Each tuple contains an eigenvalue, a sequence
|
|
537
|
+
with a basis of the corresponding subspace of eigenvectors, and the
|
|
538
|
+
algebraic multiplicity of the eigenvalue.
|
|
539
|
+
|
|
540
|
+
EXAMPLES::
|
|
541
|
+
|
|
542
|
+
sage: # needs sage.rings.number_field
|
|
543
|
+
sage: V = (QQ^4).subspace([[0,2,1,4], [1,2,5,0], [1,1,1,1]])
|
|
544
|
+
sage: H = (V.Hom(V))(matrix(QQ, [[0,1,0], [-1,0,0], [0,0,3]]))
|
|
545
|
+
sage: H.eigenvectors()
|
|
546
|
+
[(3, [(0, 0, 1, -6/7)], 1),
|
|
547
|
+
(-1*I, [(1, 1*I, 0, -0.571428571428572? + 2.428571428571429?*I)], 1),
|
|
548
|
+
(1*I, [(1, -1*I, 0, -0.571428571428572? - 2.428571428571429?*I)], 1)]
|
|
549
|
+
sage: H.eigenvectors(extend=False)
|
|
550
|
+
[(3, [(0, 0, 1, -6/7)], 1)]
|
|
551
|
+
sage: H1 = (V.Hom(V))(matrix(QQ, [[2,1,0],[0,2,0],[0,0,3]]))
|
|
552
|
+
sage: H1.eigenvectors()
|
|
553
|
+
[(3, [(0, 0, 1, -6/7)], 1), (2, [(0, 1, 0, 17/7)], 2)]
|
|
554
|
+
sage: H1.eigenvectors(extend=False)
|
|
555
|
+
[(3, [(0, 0, 1, -6/7)], 1), (2, [(0, 1, 0, 17/7)], 2)]
|
|
556
|
+
|
|
557
|
+
::
|
|
558
|
+
|
|
559
|
+
sage: V = QQ^2
|
|
560
|
+
sage: m = matrix(2, [1, 1, 0, 1])
|
|
561
|
+
sage: V.hom(m, side='right').eigenvectors() # needs sage.rings.number_field
|
|
562
|
+
[(1, [(1, 0)], 2)]
|
|
563
|
+
sage: V.hom(m).eigenvectors() # needs sage.rings.number_field
|
|
564
|
+
[(1, [(0, 1)], 2)]
|
|
565
|
+
"""
|
|
566
|
+
if self.base_ring().is_field():
|
|
567
|
+
if self.is_endomorphism():
|
|
568
|
+
if self.side() == "right":
|
|
569
|
+
seigenvec = self.matrix().eigenvectors_right(extend=extend)
|
|
570
|
+
else:
|
|
571
|
+
seigenvec = self.matrix().eigenvectors_left(extend=extend)
|
|
572
|
+
resu = []
|
|
573
|
+
for i in seigenvec:
|
|
574
|
+
V = self.domain().base_extend(i[0].parent())
|
|
575
|
+
svectors = Sequence([V(j * V.basis_matrix()) for j in i[1]], cr=True)
|
|
576
|
+
resu.append((i[0], svectors, i[2]))
|
|
577
|
+
return resu
|
|
578
|
+
else:
|
|
579
|
+
raise TypeError("not an endomorphism")
|
|
580
|
+
else:
|
|
581
|
+
raise NotImplementedError("module must be a vector space")
|
|
582
|
+
|
|
583
|
+
def eigenspaces(self, extend=True):
|
|
584
|
+
"""
|
|
585
|
+
Compute a list of subspaces formed by eigenvectors of ``self``.
|
|
586
|
+
|
|
587
|
+
INPUT:
|
|
588
|
+
|
|
589
|
+
- ``extend`` -- boolean (default: ``True``); determines if field
|
|
590
|
+
extensions should be considered
|
|
591
|
+
|
|
592
|
+
OUTPUT: a list of pairs ``(eigenvalue, eigenspace)``
|
|
593
|
+
|
|
594
|
+
EXAMPLES::
|
|
595
|
+
|
|
596
|
+
sage: V = QQ^3
|
|
597
|
+
sage: h = V.hom([[1,0,0], [0,0,1], [0,-1,0]], V)
|
|
598
|
+
sage: h.eigenspaces() # needs sage.rings.number_field
|
|
599
|
+
[(1, Vector space of degree 3 and dimension 1 over Rational Field
|
|
600
|
+
Basis matrix:
|
|
601
|
+
[1 0 0]),
|
|
602
|
+
(-1*I, Vector space of degree 3 and dimension 1 over Algebraic Field
|
|
603
|
+
Basis matrix:
|
|
604
|
+
[ 0 1 1*I]),
|
|
605
|
+
(1*I, Vector space of degree 3 and dimension 1 over Algebraic Field
|
|
606
|
+
Basis matrix:
|
|
607
|
+
[ 0 1 -1*I])]
|
|
608
|
+
|
|
609
|
+
sage: h.eigenspaces(extend=False) # needs sage.rings.number_field
|
|
610
|
+
[(1,
|
|
611
|
+
Vector space of degree 3 and dimension 1 over Rational Field
|
|
612
|
+
Basis matrix:
|
|
613
|
+
[1 0 0])]
|
|
614
|
+
|
|
615
|
+
sage: h = V.hom([[2,1,0], [0,2,0], [0,0,-1]], V)
|
|
616
|
+
sage: h.eigenspaces() # needs sage.rings.number_field
|
|
617
|
+
[(-1, Vector space of degree 3 and dimension 1 over Rational Field
|
|
618
|
+
Basis matrix:
|
|
619
|
+
[0 0 1]),
|
|
620
|
+
(2, Vector space of degree 3 and dimension 1 over Rational Field
|
|
621
|
+
Basis matrix:
|
|
622
|
+
[0 1 0])]
|
|
623
|
+
|
|
624
|
+
sage: h = V.hom([[2,1,0], [0,2,0], [0,0,2]], V)
|
|
625
|
+
sage: h.eigenspaces() # needs sage.rings.number_field
|
|
626
|
+
[(2, Vector space of degree 3 and dimension 2 over Rational Field
|
|
627
|
+
Basis matrix:
|
|
628
|
+
[0 1 0]
|
|
629
|
+
[0 0 1])]
|
|
630
|
+
|
|
631
|
+
::
|
|
632
|
+
|
|
633
|
+
sage: V = QQ^2; m = matrix(2, [1, 1, 0, 1])
|
|
634
|
+
sage: V.hom(m, side='right').eigenspaces() # needs sage.rings.number_field
|
|
635
|
+
[(1, Vector space of degree 2 and dimension 1 over Rational Field
|
|
636
|
+
Basis matrix:
|
|
637
|
+
[1 0])]
|
|
638
|
+
sage: V.hom(m).eigenspaces() # needs sage.rings.number_field
|
|
639
|
+
[(1, Vector space of degree 2 and dimension 1 over Rational Field
|
|
640
|
+
Basis matrix:
|
|
641
|
+
[0 1])]
|
|
642
|
+
"""
|
|
643
|
+
ev = self.eigenvectors(extend)
|
|
644
|
+
return [(vec[0], Sequence(vec[1]).universe().subspace(vec[1]))
|
|
645
|
+
for vec in ev]
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
class BaseIsomorphism1D(Morphism):
|
|
649
|
+
"""
|
|
650
|
+
An isomorphism between a ring and a free rank-1 module over the ring.
|
|
651
|
+
|
|
652
|
+
EXAMPLES::
|
|
653
|
+
|
|
654
|
+
sage: R.<x,y> = QQ[]
|
|
655
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
656
|
+
sage: from_V
|
|
657
|
+
Isomorphism morphism:
|
|
658
|
+
From: Ambient free module of rank 1 over the integral domain
|
|
659
|
+
Multivariate Polynomial Ring in x, y over Rational Field
|
|
660
|
+
To: Multivariate Polynomial Ring in x, y over Rational Field
|
|
661
|
+
"""
|
|
662
|
+
def _repr_type(self) -> str:
|
|
663
|
+
r"""
|
|
664
|
+
EXAMPLES::
|
|
665
|
+
|
|
666
|
+
sage: R.<x,y> = QQ[]
|
|
667
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
668
|
+
sage: from_V._repr_type()
|
|
669
|
+
'Isomorphism'
|
|
670
|
+
"""
|
|
671
|
+
return "Isomorphism"
|
|
672
|
+
|
|
673
|
+
def is_injective(self) -> bool:
|
|
674
|
+
r"""
|
|
675
|
+
EXAMPLES::
|
|
676
|
+
|
|
677
|
+
sage: R.<x,y> = QQ[]
|
|
678
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
679
|
+
sage: from_V.is_injective()
|
|
680
|
+
True
|
|
681
|
+
"""
|
|
682
|
+
return True
|
|
683
|
+
|
|
684
|
+
def is_surjective(self) -> bool:
|
|
685
|
+
r"""
|
|
686
|
+
EXAMPLES::
|
|
687
|
+
|
|
688
|
+
sage: R.<x,y> = QQ[]
|
|
689
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
690
|
+
sage: from_V.is_surjective()
|
|
691
|
+
True
|
|
692
|
+
"""
|
|
693
|
+
return True
|
|
694
|
+
|
|
695
|
+
def _richcmp_(self, other, op):
|
|
696
|
+
r"""
|
|
697
|
+
EXAMPLES::
|
|
698
|
+
|
|
699
|
+
sage: R.<x,y> = QQ[]
|
|
700
|
+
sage: V, fr, to = R.free_module(R)
|
|
701
|
+
sage: fr == loads(dumps(fr))
|
|
702
|
+
True
|
|
703
|
+
"""
|
|
704
|
+
if isinstance(other, BaseIsomorphism1D):
|
|
705
|
+
return richcmp(self._basis, other._basis, op)
|
|
706
|
+
else:
|
|
707
|
+
return rich_to_bool(op, 1)
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
class BaseIsomorphism1D_to_FM(BaseIsomorphism1D):
|
|
711
|
+
"""
|
|
712
|
+
An isomorphism from a ring to its 1-dimensional free module.
|
|
713
|
+
|
|
714
|
+
INPUT:
|
|
715
|
+
|
|
716
|
+
- ``parent`` -- the homset
|
|
717
|
+
- ``basis`` -- (default: 1) an invertible element of the ring
|
|
718
|
+
|
|
719
|
+
EXAMPLES::
|
|
720
|
+
|
|
721
|
+
sage: R = Zmod(8)
|
|
722
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
723
|
+
sage: v = to_V(2); v
|
|
724
|
+
(2)
|
|
725
|
+
sage: from_V(v)
|
|
726
|
+
2
|
|
727
|
+
sage: W, from_W, to_W = R.free_module(R, basis=3)
|
|
728
|
+
sage: W is V
|
|
729
|
+
True
|
|
730
|
+
sage: w = to_W(2); w
|
|
731
|
+
(6)
|
|
732
|
+
sage: from_W(w)
|
|
733
|
+
2
|
|
734
|
+
|
|
735
|
+
The basis vector has to be a unit so that the map is an isomorphism::
|
|
736
|
+
|
|
737
|
+
sage: W, from_W, to_W = R.free_module(R, basis=4)
|
|
738
|
+
Traceback (most recent call last):
|
|
739
|
+
...
|
|
740
|
+
ValueError: basis element must be a unit
|
|
741
|
+
"""
|
|
742
|
+
def __init__(self, parent, basis=None):
|
|
743
|
+
"""
|
|
744
|
+
TESTS::
|
|
745
|
+
|
|
746
|
+
sage: R = Zmod(8)
|
|
747
|
+
sage: W, from_W, to_W = R.free_module(R, basis=3)
|
|
748
|
+
sage: TestSuite(to_W).run()
|
|
749
|
+
"""
|
|
750
|
+
Morphism.__init__(self, parent)
|
|
751
|
+
self._basis = basis
|
|
752
|
+
|
|
753
|
+
def _call_(self, x):
|
|
754
|
+
"""
|
|
755
|
+
TESTS::
|
|
756
|
+
|
|
757
|
+
sage: R = Zmod(8)
|
|
758
|
+
sage: W, from_W, to_W = R.free_module(R, basis=3)
|
|
759
|
+
sage: to_W(6) # indirect doctest
|
|
760
|
+
(2)
|
|
761
|
+
"""
|
|
762
|
+
if self._basis is not None:
|
|
763
|
+
x *= self._basis
|
|
764
|
+
return self.codomain()([x])
|
|
765
|
+
|
|
766
|
+
|
|
767
|
+
class BaseIsomorphism1D_from_FM(BaseIsomorphism1D):
|
|
768
|
+
"""
|
|
769
|
+
An isomorphism to a ring from its 1-dimensional free module.
|
|
770
|
+
|
|
771
|
+
INPUT:
|
|
772
|
+
|
|
773
|
+
- ``parent`` -- the homset
|
|
774
|
+
- ``basis`` -- (default: 1) an invertible element of the ring
|
|
775
|
+
|
|
776
|
+
EXAMPLES::
|
|
777
|
+
|
|
778
|
+
sage: R.<x> = QQ[[]]
|
|
779
|
+
sage: V, from_V, to_V = R.free_module(R)
|
|
780
|
+
sage: v = to_V(1+x); v
|
|
781
|
+
(1 + x)
|
|
782
|
+
sage: from_V(v)
|
|
783
|
+
1 + x
|
|
784
|
+
sage: W, from_W, to_W = R.free_module(R, basis=(1-x))
|
|
785
|
+
sage: W is V
|
|
786
|
+
True
|
|
787
|
+
sage: w = to_W(1+x); w
|
|
788
|
+
(1 - x^2)
|
|
789
|
+
sage: from_W(w)
|
|
790
|
+
1 + x + O(x^20)
|
|
791
|
+
|
|
792
|
+
The basis vector has to be a unit so that the map is an isomorphism::
|
|
793
|
+
|
|
794
|
+
sage: W, from_W, to_W = R.free_module(R, basis=x)
|
|
795
|
+
Traceback (most recent call last):
|
|
796
|
+
...
|
|
797
|
+
ValueError: basis element must be a unit
|
|
798
|
+
"""
|
|
799
|
+
def __init__(self, parent, basis=None):
|
|
800
|
+
"""
|
|
801
|
+
TESTS::
|
|
802
|
+
|
|
803
|
+
sage: R.<x> = QQ[[]]
|
|
804
|
+
sage: W, from_W, to_W = R.free_module(R, basis=(1-x))
|
|
805
|
+
sage: TestSuite(from_W).run(skip='_test_nonzero_equal')
|
|
806
|
+
"""
|
|
807
|
+
Morphism.__init__(self, parent)
|
|
808
|
+
self._basis = basis
|
|
809
|
+
|
|
810
|
+
def _call_(self, x):
|
|
811
|
+
"""
|
|
812
|
+
TESTS::
|
|
813
|
+
|
|
814
|
+
sage: R.<x> = QQ[[]]
|
|
815
|
+
sage: W, from_W, to_W = R.free_module(R, basis=(1-x))
|
|
816
|
+
sage: w = to_W(1+x); w
|
|
817
|
+
(1 - x^2)
|
|
818
|
+
sage: from_W(w)
|
|
819
|
+
1 + x + O(x^20)
|
|
820
|
+
"""
|
|
821
|
+
if self._basis is None:
|
|
822
|
+
return x[0]
|
|
823
|
+
return self.codomain()(x[0] / self._basis)
|