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,923 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.libs.singular
|
|
3
|
+
r"""
|
|
4
|
+
Free resolutions
|
|
5
|
+
|
|
6
|
+
Let `R` be a commutative ring. A finite free resolution of an `R`-module `M`
|
|
7
|
+
is a chain complex of free `R`-modules
|
|
8
|
+
|
|
9
|
+
.. MATH::
|
|
10
|
+
|
|
11
|
+
0 \rightarrow R^{n_k} \xrightarrow{d_k}
|
|
12
|
+
\cdots \xrightarrow{d_2} R^{n_1} \xrightarrow{d_1} R^{n_0}
|
|
13
|
+
|
|
14
|
+
terminating with a zero module at the end that is exact (all homology groups
|
|
15
|
+
are zero) such that the image of `d_1` is `M`.
|
|
16
|
+
|
|
17
|
+
EXAMPLES::
|
|
18
|
+
|
|
19
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
20
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
21
|
+
sage: m = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z]).transpose()
|
|
22
|
+
sage: r = FreeResolution(m, name='S'); r
|
|
23
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
24
|
+
|
|
25
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
26
|
+
sage: r = I.free_resolution(); r
|
|
27
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
28
|
+
|
|
29
|
+
::
|
|
30
|
+
|
|
31
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
32
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
33
|
+
sage: r = I.graded_free_resolution(); r
|
|
34
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
35
|
+
|
|
36
|
+
An example of a minimal free resolution from [CLO2005]_::
|
|
37
|
+
|
|
38
|
+
sage: R.<x,y,z,w> = QQ[]
|
|
39
|
+
sage: I = R.ideal([y*z - x*w, y^3 - x^2*z, x*z^2 - y^2*w, z^3 - y*w^2])
|
|
40
|
+
sage: r = I.free_resolution(); r
|
|
41
|
+
S^1 <-- S^4 <-- S^4 <-- S^1 <-- 0
|
|
42
|
+
sage: len(r)
|
|
43
|
+
3
|
|
44
|
+
sage: r.matrix(2)
|
|
45
|
+
[-z^2 -x*z y*w -y^2]
|
|
46
|
+
[ y 0 -x 0]
|
|
47
|
+
[ -w y z x]
|
|
48
|
+
[ 0 w 0 z]
|
|
49
|
+
|
|
50
|
+
AUTHORS:
|
|
51
|
+
|
|
52
|
+
- Kwankyu Lee (2022-05-13): initial version
|
|
53
|
+
- Travis Scrimshaw (2022-08-23): refactored for free module inputs
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
# ****************************************************************************
|
|
57
|
+
# Copyright (C) 2022 Kwankyu Lee <ekwankyu@gmail.com>
|
|
58
|
+
# (C) 2022 Travis Scrimshaw <tcscrims at gmail.com>
|
|
59
|
+
#
|
|
60
|
+
# This program is free software: you can redistribute it and/or modify
|
|
61
|
+
# it under the terms of the GNU General Public License as published by
|
|
62
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
63
|
+
# (at your option) any later version.
|
|
64
|
+
# https://www.gnu.org/licenses/
|
|
65
|
+
# ****************************************************************************
|
|
66
|
+
|
|
67
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
68
|
+
from sage.misc.abstract_method import abstract_method
|
|
69
|
+
from sage.misc.classcall_metaclass import ClasscallMetaclass
|
|
70
|
+
from sage.structure.sage_object import SageObject
|
|
71
|
+
from sage.structure.element import Matrix
|
|
72
|
+
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
|
|
73
|
+
from sage.categories.integral_domains import IntegralDomains
|
|
74
|
+
from sage.modules.free_module_element import vector
|
|
75
|
+
from sage.modules.free_module import FreeModule
|
|
76
|
+
from sage.modules.free_module import Module_free_ambient, FreeModule_generic
|
|
77
|
+
from sage.rings.ideal import Ideal_generic
|
|
78
|
+
|
|
79
|
+
from copy import copy
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class FreeResolution(SageObject, metaclass=ClasscallMetaclass):
|
|
83
|
+
r"""
|
|
84
|
+
A free resolution.
|
|
85
|
+
|
|
86
|
+
Let `R` be a commutative ring. A *free resolution* of an `R`-module `M`
|
|
87
|
+
is a (possibly infinite) chain complex of free `R`-modules
|
|
88
|
+
|
|
89
|
+
.. MATH::
|
|
90
|
+
|
|
91
|
+
\cdots \rightarrow R^{n_k} \xrightarrow{d_k}
|
|
92
|
+
\cdots \xrightarrow{d_2} R^{n_1} \xrightarrow{d_1} R^{n_0}
|
|
93
|
+
|
|
94
|
+
that is exact (all homology groups are zero) such that the image
|
|
95
|
+
of `d_1` is `M`.
|
|
96
|
+
"""
|
|
97
|
+
@staticmethod
|
|
98
|
+
def __classcall_private__(cls, module, *args, graded=False, degrees=None, shifts=None, **kwds):
|
|
99
|
+
"""
|
|
100
|
+
Dispatch to the correct constructor.
|
|
101
|
+
|
|
102
|
+
TESTS::
|
|
103
|
+
|
|
104
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
105
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
106
|
+
sage: m = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z]).transpose()
|
|
107
|
+
sage: r = FreeResolution(m, name='S')
|
|
108
|
+
sage: type(r)
|
|
109
|
+
<class 'sage.homology.free_resolution.FiniteFreeResolution_singular'>
|
|
110
|
+
|
|
111
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
112
|
+
sage: r = FreeResolution(I)
|
|
113
|
+
sage: type(r)
|
|
114
|
+
<class 'sage.homology.free_resolution.FiniteFreeResolution_singular'>
|
|
115
|
+
|
|
116
|
+
sage: R.<x> = QQ[]
|
|
117
|
+
sage: M = R^3
|
|
118
|
+
sage: v = M([x^2, 2*x^2, 3*x^2])
|
|
119
|
+
sage: w = M([0, x, 2*x])
|
|
120
|
+
sage: S = M.submodule([v, w])
|
|
121
|
+
sage: r = FreeResolution(S)
|
|
122
|
+
sage: type(r)
|
|
123
|
+
<class 'sage.homology.free_resolution.FiniteFreeResolution_free_module'>
|
|
124
|
+
|
|
125
|
+
sage: I = R.ideal([x^4 + 3*x^2 + 2])
|
|
126
|
+
sage: r = FreeResolution(I)
|
|
127
|
+
sage: type(r)
|
|
128
|
+
<class 'sage.homology.free_resolution.FiniteFreeResolution_free_module'>
|
|
129
|
+
|
|
130
|
+
sage: R.<x,y> = QQ[]
|
|
131
|
+
sage: I = R.ideal([x^2, y^3])
|
|
132
|
+
sage: Q = R.quo(I)
|
|
133
|
+
sage: Q.is_integral_domain()
|
|
134
|
+
False
|
|
135
|
+
sage: xb, yb = Q.gens() # needs sage.rings.function_field
|
|
136
|
+
sage: FreeResolution(Q.ideal([xb])) # has torsion # needs sage.rings.function_field
|
|
137
|
+
Traceback (most recent call last):
|
|
138
|
+
...
|
|
139
|
+
NotImplementedError: the ring must be a polynomial ring using Singular
|
|
140
|
+
"""
|
|
141
|
+
if degrees is not None or shifts is not None:
|
|
142
|
+
graded = True
|
|
143
|
+
|
|
144
|
+
if isinstance(module, Matrix):
|
|
145
|
+
is_free_module = False
|
|
146
|
+
S = module.base_ring()
|
|
147
|
+
if S in PrincipalIdealDomains():
|
|
148
|
+
module = module.echelon_form()
|
|
149
|
+
if module.nrows() > module.rank():
|
|
150
|
+
module = module.submatrix(nrows=module.rank())
|
|
151
|
+
module.set_immutable()
|
|
152
|
+
is_free_module = True
|
|
153
|
+
if not module.is_immutable():
|
|
154
|
+
# We need to make an immutable copy of the matrix
|
|
155
|
+
module = copy(module)
|
|
156
|
+
module.set_immutable()
|
|
157
|
+
if is_free_module:
|
|
158
|
+
if graded:
|
|
159
|
+
from sage.homology.graded_resolution import GradedFiniteFreeResolution_free_module
|
|
160
|
+
return GradedFiniteFreeResolution_free_module(module,
|
|
161
|
+
*args,
|
|
162
|
+
degrees=degrees,
|
|
163
|
+
shifts=shifts,
|
|
164
|
+
**kwds)
|
|
165
|
+
return FiniteFreeResolution_free_module(module, *args, **kwds)
|
|
166
|
+
|
|
167
|
+
from sage.rings.polynomial.multi_polynomial_libsingular import MPolynomialRing_libsingular
|
|
168
|
+
if not isinstance(S, MPolynomialRing_libsingular):
|
|
169
|
+
raise NotImplementedError("the matrix must be over a PID or a "
|
|
170
|
+
" polynomial ring that is using Singular")
|
|
171
|
+
|
|
172
|
+
if graded:
|
|
173
|
+
# We are computing a graded resolution
|
|
174
|
+
from sage.homology.graded_resolution import GradedFiniteFreeResolution_singular
|
|
175
|
+
return GradedFiniteFreeResolution_singular(module, *args, degrees=degrees,
|
|
176
|
+
shifts=shifts, **kwds)
|
|
177
|
+
|
|
178
|
+
return FiniteFreeResolution_singular(module, **kwds)
|
|
179
|
+
|
|
180
|
+
if graded:
|
|
181
|
+
return module.graded_free_resolution(*args, **kwds)
|
|
182
|
+
return module.free_resolution(*args, **kwds)
|
|
183
|
+
|
|
184
|
+
def __init__(self, module, name='S', **kwds):
|
|
185
|
+
"""
|
|
186
|
+
Initialize ``self``.
|
|
187
|
+
|
|
188
|
+
INPUT:
|
|
189
|
+
|
|
190
|
+
- ``base_ring`` -- a ring
|
|
191
|
+
- ``name`` -- (default: ``'S'``) the name of the ring for printing
|
|
192
|
+
|
|
193
|
+
TESTS::
|
|
194
|
+
|
|
195
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
196
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
197
|
+
sage: m1 = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z])
|
|
198
|
+
sage: r = FreeResolution(m1, name='S')
|
|
199
|
+
sage: TestSuite(r).run(skip=['_test_pickling'])
|
|
200
|
+
"""
|
|
201
|
+
if isinstance(module, Ideal_generic):
|
|
202
|
+
S = module.ring()
|
|
203
|
+
else: # module or matrix
|
|
204
|
+
S = module.base_ring()
|
|
205
|
+
|
|
206
|
+
self._base_ring = S
|
|
207
|
+
self._name = name
|
|
208
|
+
self._module = module
|
|
209
|
+
|
|
210
|
+
def _repr_(self):
|
|
211
|
+
r"""
|
|
212
|
+
Return a string representation of ``self``.
|
|
213
|
+
|
|
214
|
+
TESTS::
|
|
215
|
+
|
|
216
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
217
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
218
|
+
sage: m1 = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z])
|
|
219
|
+
sage: r = FreeResolution(m1, name='S')
|
|
220
|
+
sage: print(FreeResolution._repr_(r))
|
|
221
|
+
Free resolution of the row space of the matrix:
|
|
222
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
223
|
+
"""
|
|
224
|
+
if isinstance(self._module, Matrix):
|
|
225
|
+
return f"Free resolution of the row space of the matrix:\n{self._module}"
|
|
226
|
+
return f"Free resolution of {self._module}"
|
|
227
|
+
|
|
228
|
+
def _repr_module(self, i):
|
|
229
|
+
r"""
|
|
230
|
+
Return the string form of the `i`-th free module.
|
|
231
|
+
|
|
232
|
+
INPUT:
|
|
233
|
+
|
|
234
|
+
- ``i`` -- positive integer
|
|
235
|
+
|
|
236
|
+
EXAMPLES::
|
|
237
|
+
|
|
238
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
239
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
240
|
+
sage: m = matrix(S, 1, [y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
241
|
+
sage: r = FreeResolution(m.transpose(), name='S')
|
|
242
|
+
sage: r._repr_module(2)
|
|
243
|
+
'S^2'
|
|
244
|
+
sage: r # indirect doctest
|
|
245
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
246
|
+
|
|
247
|
+
TESTS::
|
|
248
|
+
|
|
249
|
+
sage: S.<x,y,z> = PolynomialRing(QQ)
|
|
250
|
+
sage: I = S.ideal(0)
|
|
251
|
+
sage: C = I.free_resolution()
|
|
252
|
+
sage: C
|
|
253
|
+
S^1 <-- 0
|
|
254
|
+
"""
|
|
255
|
+
if i == 0:
|
|
256
|
+
if self._length > 0:
|
|
257
|
+
r = self._maps[0].nrows()
|
|
258
|
+
else:
|
|
259
|
+
r = self._initial_differential.domain().dimension()
|
|
260
|
+
s = f'{self._name}^{r}'
|
|
261
|
+
return s
|
|
262
|
+
elif i > self._length:
|
|
263
|
+
s = '0'
|
|
264
|
+
else:
|
|
265
|
+
r = self._maps[i - 1].ncols()
|
|
266
|
+
if r > 0:
|
|
267
|
+
s = f'{self._name}^{r}'
|
|
268
|
+
else:
|
|
269
|
+
s = '0'
|
|
270
|
+
return s
|
|
271
|
+
|
|
272
|
+
@abstract_method
|
|
273
|
+
def differential(self, i):
|
|
274
|
+
r"""
|
|
275
|
+
Return the `i`-th differential map.
|
|
276
|
+
|
|
277
|
+
INPUT:
|
|
278
|
+
|
|
279
|
+
- ``i`` -- positive integer
|
|
280
|
+
|
|
281
|
+
TESTS::
|
|
282
|
+
|
|
283
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
284
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
285
|
+
sage: m1 = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z])
|
|
286
|
+
sage: r = FreeResolution(m1, name='S')
|
|
287
|
+
sage: FreeResolution.differiental(r, 1)
|
|
288
|
+
Traceback (most recent call last):
|
|
289
|
+
...
|
|
290
|
+
AttributeError: type object 'FreeResolution' has no attribute 'differiental'...
|
|
291
|
+
"""
|
|
292
|
+
|
|
293
|
+
def target(self):
|
|
294
|
+
r"""
|
|
295
|
+
Return the codomain of the `0`-th differential map.
|
|
296
|
+
|
|
297
|
+
The codomain of the `0`-th differential map is the cokernel of
|
|
298
|
+
the first differential map.
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
303
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
304
|
+
sage: r = I.graded_free_resolution()
|
|
305
|
+
sage: r
|
|
306
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
307
|
+
sage: r.target()
|
|
308
|
+
Quotient module by
|
|
309
|
+
Submodule of Ambient free module of rank 1 over the integral domain
|
|
310
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
311
|
+
Generated by the rows of the matrix:
|
|
312
|
+
[-z^2 + y*w]
|
|
313
|
+
[ y*z - x*w]
|
|
314
|
+
[-y^2 + x*z]
|
|
315
|
+
"""
|
|
316
|
+
return self.differential(0).codomain()
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class FiniteFreeResolution(FreeResolution):
|
|
320
|
+
r"""
|
|
321
|
+
Finite free resolutions.
|
|
322
|
+
|
|
323
|
+
The matrix at index `i` in the list defines the differential map from
|
|
324
|
+
`(i + 1)`-th free module to the `i`-th free module over the base ring by
|
|
325
|
+
multiplication on the left. The number of matrices in the list is the
|
|
326
|
+
length of the resolution. The number of rows and columns of the matrices
|
|
327
|
+
define the ranks of the free modules in the resolution.
|
|
328
|
+
|
|
329
|
+
Note that the first matrix in the list defines the differential map at
|
|
330
|
+
homological index `1`.
|
|
331
|
+
|
|
332
|
+
A subclass must provide a ``_maps`` attribute that contains a list of the
|
|
333
|
+
maps defining the resolution.
|
|
334
|
+
|
|
335
|
+
A subclass can define ``_initial_differential`` attribute that
|
|
336
|
+
contains the `0`-th differential map whose codomain is the target
|
|
337
|
+
of the free resolution.
|
|
338
|
+
|
|
339
|
+
EXAMPLES::
|
|
340
|
+
|
|
341
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
342
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
343
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
344
|
+
sage: r = FreeResolution(I)
|
|
345
|
+
sage: r.differential(0)
|
|
346
|
+
Coercion map:
|
|
347
|
+
From: Ambient free module of rank 1 over the integral domain
|
|
348
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
349
|
+
To: Quotient module by
|
|
350
|
+
Submodule of Ambient free module of rank 1 over the integral domain
|
|
351
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
352
|
+
Generated by the rows of the matrix:
|
|
353
|
+
[-z^2 + y*w]
|
|
354
|
+
[ y*z - x*w]
|
|
355
|
+
[-y^2 + x*z]
|
|
356
|
+
"""
|
|
357
|
+
@lazy_attribute
|
|
358
|
+
def _length(self):
|
|
359
|
+
"""
|
|
360
|
+
The length of ``self``.
|
|
361
|
+
|
|
362
|
+
TESTS::
|
|
363
|
+
|
|
364
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
365
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
366
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
367
|
+
sage: r = FreeResolution(I)
|
|
368
|
+
sage: r._length
|
|
369
|
+
2
|
|
370
|
+
"""
|
|
371
|
+
return len(self._maps)
|
|
372
|
+
|
|
373
|
+
def _repr_(self):
|
|
374
|
+
"""
|
|
375
|
+
Return the string form of this resolution.
|
|
376
|
+
|
|
377
|
+
INPUT:
|
|
378
|
+
|
|
379
|
+
- ``i`` -- positive integer
|
|
380
|
+
|
|
381
|
+
EXAMPLES::
|
|
382
|
+
|
|
383
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
384
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
385
|
+
sage: r = I.graded_free_resolution(); r
|
|
386
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
387
|
+
"""
|
|
388
|
+
s = self._repr_module(0)
|
|
389
|
+
for i in range(1, self._length + 1):
|
|
390
|
+
s += ' <-- ' + self._repr_module(i)
|
|
391
|
+
s += ' <-- 0'
|
|
392
|
+
return s
|
|
393
|
+
|
|
394
|
+
def __len__(self):
|
|
395
|
+
r"""
|
|
396
|
+
Return the length of this resolution.
|
|
397
|
+
|
|
398
|
+
The length of a free resolution is the index of the last nonzero free module.
|
|
399
|
+
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
403
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
404
|
+
sage: r = I.graded_free_resolution(); r
|
|
405
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
406
|
+
sage: len(r)
|
|
407
|
+
2
|
|
408
|
+
"""
|
|
409
|
+
return len(self._maps)
|
|
410
|
+
|
|
411
|
+
def __getitem__(self, i):
|
|
412
|
+
r"""
|
|
413
|
+
Return the `i`-th free module of this resolution.
|
|
414
|
+
|
|
415
|
+
INPUT:
|
|
416
|
+
|
|
417
|
+
- ``i`` -- positive integer
|
|
418
|
+
|
|
419
|
+
EXAMPLES::
|
|
420
|
+
|
|
421
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
422
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
423
|
+
sage: r = I.graded_free_resolution(); r
|
|
424
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
425
|
+
sage: r.target()
|
|
426
|
+
Quotient module by Submodule of Ambient free module of rank 1 over the integral domain
|
|
427
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
428
|
+
Generated by the rows of the matrix:
|
|
429
|
+
[-z^2 + y*w]
|
|
430
|
+
[ y*z - x*w]
|
|
431
|
+
[-y^2 + x*z]
|
|
432
|
+
"""
|
|
433
|
+
if i < 0:
|
|
434
|
+
raise IndexError('invalid index')
|
|
435
|
+
elif i > self._length:
|
|
436
|
+
F = FreeModule(self._base_ring, 0)
|
|
437
|
+
elif i == 0:
|
|
438
|
+
F = self.differential(0).domain()
|
|
439
|
+
elif i == self._length:
|
|
440
|
+
F = FreeModule(self._base_ring, self._maps[i - 1].ncols())
|
|
441
|
+
else:
|
|
442
|
+
F = FreeModule(self._base_ring, self._maps[i].nrows())
|
|
443
|
+
return F
|
|
444
|
+
|
|
445
|
+
def differential(self, i):
|
|
446
|
+
r"""
|
|
447
|
+
Return the `i`-th differential map.
|
|
448
|
+
|
|
449
|
+
INPUT:
|
|
450
|
+
|
|
451
|
+
- ``i`` -- positive integer
|
|
452
|
+
|
|
453
|
+
EXAMPLES::
|
|
454
|
+
|
|
455
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
456
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
457
|
+
sage: r = I.graded_free_resolution()
|
|
458
|
+
sage: r
|
|
459
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
460
|
+
sage: r.differential(3)
|
|
461
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
462
|
+
[]
|
|
463
|
+
Domain: Ambient free module of rank 0 over the integral domain
|
|
464
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
465
|
+
Codomain: Ambient free module of rank 2 over the integral domain
|
|
466
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
467
|
+
sage: r.differential(2)
|
|
468
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
469
|
+
[-y x]
|
|
470
|
+
[ z -y]
|
|
471
|
+
[-w z]
|
|
472
|
+
Domain: Ambient free module of rank 2 over the integral domain
|
|
473
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
474
|
+
Codomain: Ambient free module of rank 3 over the integral domain
|
|
475
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
476
|
+
sage: r.differential(1)
|
|
477
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
478
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
479
|
+
Domain: Ambient free module of rank 3 over the integral domain
|
|
480
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
481
|
+
Codomain: Ambient free module of rank 1 over the integral domain
|
|
482
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
483
|
+
sage: r.differential(0)
|
|
484
|
+
Coercion map:
|
|
485
|
+
From: Ambient free module of rank 1 over the integral domain
|
|
486
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
487
|
+
To: Quotient module by
|
|
488
|
+
Submodule of Ambient free module of rank 1 over the integral domain
|
|
489
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
490
|
+
Generated by the rows of the matrix:
|
|
491
|
+
[-z^2 + y*w]
|
|
492
|
+
[ y*z - x*w]
|
|
493
|
+
[-y^2 + x*z]
|
|
494
|
+
|
|
495
|
+
TESTS::
|
|
496
|
+
|
|
497
|
+
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
498
|
+
sage: S = P2.coordinate_ring()
|
|
499
|
+
sage: I = S.ideal(0)
|
|
500
|
+
sage: C = I.graded_free_resolution(); C
|
|
501
|
+
S(0) <-- 0
|
|
502
|
+
sage: C[1]
|
|
503
|
+
Ambient free module of rank 0 over the integral domain
|
|
504
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
505
|
+
sage: C[0]
|
|
506
|
+
Ambient free module of rank 1 over the integral domain
|
|
507
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
508
|
+
sage: C.differential(1)
|
|
509
|
+
Free module morphism defined as left-multiplication by the matrix
|
|
510
|
+
[]
|
|
511
|
+
Domain: Ambient free module of rank 0 over the integral domain
|
|
512
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
513
|
+
Codomain: Ambient free module of rank 1 over the integral domain
|
|
514
|
+
Multivariate Polynomial Ring in x, y, z over Rational Field
|
|
515
|
+
sage: C.differential(1).matrix()
|
|
516
|
+
[]
|
|
517
|
+
sage: C.differential(1).matrix().dimensions()
|
|
518
|
+
(1, 0)
|
|
519
|
+
"""
|
|
520
|
+
if i < 0:
|
|
521
|
+
raise IndexError('invalid index')
|
|
522
|
+
elif i == 0:
|
|
523
|
+
try:
|
|
524
|
+
return self._initial_differential
|
|
525
|
+
except AttributeError:
|
|
526
|
+
raise ValueError('0th differential map undefined')
|
|
527
|
+
elif i > self._length + 1:
|
|
528
|
+
s = FreeModule(self._base_ring, 0)
|
|
529
|
+
t = FreeModule(self._base_ring, 0)
|
|
530
|
+
m = s.hom(0, t, side='right')
|
|
531
|
+
elif i == self._length + 1:
|
|
532
|
+
s = FreeModule(self._base_ring, 0)
|
|
533
|
+
if self._length > 0:
|
|
534
|
+
t = FreeModule(self._base_ring, self._maps[i - 2].ncols())
|
|
535
|
+
else:
|
|
536
|
+
t = self._initial_differential.domain()
|
|
537
|
+
m = s.hom(0, t, side='right')
|
|
538
|
+
else:
|
|
539
|
+
s = FreeModule(self._base_ring, self._maps[i - 1].ncols())
|
|
540
|
+
t = FreeModule(self._base_ring, self._maps[i - 1].nrows())
|
|
541
|
+
m = s.hom(self._maps[i - 1], t, side='right')
|
|
542
|
+
return m
|
|
543
|
+
|
|
544
|
+
def matrix(self, i):
|
|
545
|
+
r"""
|
|
546
|
+
Return the matrix representing the `i`-th differential map.
|
|
547
|
+
|
|
548
|
+
INPUT:
|
|
549
|
+
|
|
550
|
+
- ``i`` -- positive integer
|
|
551
|
+
|
|
552
|
+
EXAMPLES::
|
|
553
|
+
|
|
554
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
555
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
556
|
+
sage: r = I.graded_free_resolution(); r
|
|
557
|
+
S(0) <-- S(-2)⊕S(-2)⊕S(-2) <-- S(-3)⊕S(-3) <-- 0
|
|
558
|
+
sage: r.matrix(3)
|
|
559
|
+
[]
|
|
560
|
+
sage: r.matrix(2)
|
|
561
|
+
[-y x]
|
|
562
|
+
[ z -y]
|
|
563
|
+
[-w z]
|
|
564
|
+
sage: r.matrix(1)
|
|
565
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
566
|
+
"""
|
|
567
|
+
if i <= 0:
|
|
568
|
+
raise IndexError('invalid index')
|
|
569
|
+
elif i <= self._length:
|
|
570
|
+
return self._maps[i - 1]
|
|
571
|
+
else:
|
|
572
|
+
return self.differential(i).matrix()
|
|
573
|
+
|
|
574
|
+
def chain_complex(self):
|
|
575
|
+
r"""
|
|
576
|
+
Return this resolution as a chain complex.
|
|
577
|
+
|
|
578
|
+
A chain complex in Sage has its own useful methods.
|
|
579
|
+
|
|
580
|
+
EXAMPLES::
|
|
581
|
+
|
|
582
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
583
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
584
|
+
sage: r = I.graded_free_resolution()
|
|
585
|
+
sage: unicode_art(r.chain_complex())
|
|
586
|
+
⎛-y x⎞
|
|
587
|
+
⎜ z -y⎟
|
|
588
|
+
(z^2 - y*w y*z - x*w y^2 - x*z) ⎝-w z⎠
|
|
589
|
+
0 <── C_0 <────────────────────────────── C_1 <────── C_2 <── 0
|
|
590
|
+
"""
|
|
591
|
+
from sage.homology.chain_complex import ChainComplex
|
|
592
|
+
mats = {}
|
|
593
|
+
for i in range(self._length, 0, -1):
|
|
594
|
+
mats[i] = self.matrix(i)
|
|
595
|
+
return ChainComplex(mats, degree_of_differential=-1)
|
|
596
|
+
|
|
597
|
+
@lazy_attribute
|
|
598
|
+
def _initial_differential(self):
|
|
599
|
+
r"""
|
|
600
|
+
Define the `0`-th differential map of this resolution.
|
|
601
|
+
|
|
602
|
+
EXAMPLES::
|
|
603
|
+
|
|
604
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
605
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
606
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
607
|
+
sage: r = FreeResolution(I)
|
|
608
|
+
sage: r._initial_differential
|
|
609
|
+
Coercion map:
|
|
610
|
+
From: Ambient free module of rank 1 over the integral domain
|
|
611
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
612
|
+
To: Quotient module by
|
|
613
|
+
Submodule of Ambient free module of rank 1 over the integral domain
|
|
614
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
615
|
+
Generated by the rows of the matrix:
|
|
616
|
+
[-z^2 + y*w]
|
|
617
|
+
[ y*z - x*w]
|
|
618
|
+
[-y^2 + x*z]
|
|
619
|
+
"""
|
|
620
|
+
module = self._module
|
|
621
|
+
if isinstance(module, Ideal_generic):
|
|
622
|
+
S = module.ring()
|
|
623
|
+
M = FreeModule(S, 1)
|
|
624
|
+
N = M.submodule([vector([g]) for g in module.gens()])
|
|
625
|
+
elif isinstance(module, Module_free_ambient):
|
|
626
|
+
S = module.base_ring()
|
|
627
|
+
M = module.ambient_module()
|
|
628
|
+
N = module
|
|
629
|
+
elif isinstance(module, Matrix):
|
|
630
|
+
S = module.base_ring()
|
|
631
|
+
N = module.row_space()
|
|
632
|
+
M = N.ambient_module()
|
|
633
|
+
Q = M.quotient(N)
|
|
634
|
+
return Q.coerce_map_from(M)
|
|
635
|
+
|
|
636
|
+
def _m(self):
|
|
637
|
+
r"""
|
|
638
|
+
Return the matrix whose column space is ``self._module``.
|
|
639
|
+
|
|
640
|
+
If ``self._module`` is an ideal, then just the ideal is returned.
|
|
641
|
+
|
|
642
|
+
TESTS::
|
|
643
|
+
|
|
644
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
645
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
646
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
647
|
+
sage: r = FreeResolution(I)
|
|
648
|
+
sage: r._m()
|
|
649
|
+
Ideal (-z^2 + y*w, y*z - x*w, -y^2 + x*z) of
|
|
650
|
+
Multivariate Polynomial Ring in x, y, z, w over Rational Field
|
|
651
|
+
|
|
652
|
+
sage: m = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z]).transpose()
|
|
653
|
+
sage: r = FreeResolution(m, name='S')
|
|
654
|
+
sage: r._m()
|
|
655
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
656
|
+
|
|
657
|
+
sage: M = m.image()
|
|
658
|
+
sage: r = FreeResolution(M, name='S')
|
|
659
|
+
sage: r._m()
|
|
660
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
661
|
+
"""
|
|
662
|
+
if isinstance(self._module, Ideal_generic):
|
|
663
|
+
return self._module
|
|
664
|
+
if isinstance(self._module, Module_free_ambient):
|
|
665
|
+
return self._module.matrix().transpose()
|
|
666
|
+
if isinstance(self._module, Matrix):
|
|
667
|
+
return self._module.transpose()
|
|
668
|
+
raise ValueError("unable to create a matrix/ideal to build the resolution")
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
class FiniteFreeResolution_free_module(FiniteFreeResolution):
|
|
672
|
+
r"""
|
|
673
|
+
Free resolutions of a free module.
|
|
674
|
+
|
|
675
|
+
INPUT:
|
|
676
|
+
|
|
677
|
+
- ``module`` -- a free module or ideal over a PID
|
|
678
|
+
- ``name`` -- the name of the base ring
|
|
679
|
+
|
|
680
|
+
EXAMPLES::
|
|
681
|
+
|
|
682
|
+
sage: R.<x> = QQ[]
|
|
683
|
+
sage: M = R^3
|
|
684
|
+
sage: v = M([x^2, 2*x^2, 3*x^2])
|
|
685
|
+
sage: w = M([0, x, 2*x])
|
|
686
|
+
sage: S = M.submodule([v, w]); S
|
|
687
|
+
Free module of degree 3 and rank 2 over
|
|
688
|
+
Univariate Polynomial Ring in x over Rational Field
|
|
689
|
+
Echelon basis matrix:
|
|
690
|
+
[ x^2 2*x^2 3*x^2]
|
|
691
|
+
[ 0 x 2*x]
|
|
692
|
+
sage: res = S.free_resolution(); res
|
|
693
|
+
S^3 <-- S^2 <-- 0
|
|
694
|
+
sage: ascii_art(res.chain_complex())
|
|
695
|
+
[ x^2 0]
|
|
696
|
+
[2*x^2 x]
|
|
697
|
+
[3*x^2 2*x]
|
|
698
|
+
0 <-- C_0 <-------------- C_1 <-- 0
|
|
699
|
+
|
|
700
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
701
|
+
sage: I = R.ideal([x^4 + 3*x^2 + 2])
|
|
702
|
+
sage: res = I.free_resolution(); res
|
|
703
|
+
S^1 <-- S^1 <-- 0
|
|
704
|
+
"""
|
|
705
|
+
@lazy_attribute
|
|
706
|
+
def _maps(self):
|
|
707
|
+
r"""
|
|
708
|
+
Return the maps that define ``self``.
|
|
709
|
+
|
|
710
|
+
EXAMPLES::
|
|
711
|
+
|
|
712
|
+
sage: R.<x> = QQ[]
|
|
713
|
+
sage: M = R^3
|
|
714
|
+
sage: v = M([x^2, 2*x^2, 3*x^2])
|
|
715
|
+
sage: w = M([0, x, 2*x])
|
|
716
|
+
sage: S = M.submodule([v, w])
|
|
717
|
+
sage: res = S.free_resolution(); res
|
|
718
|
+
S^3 <-- S^2 <-- 0
|
|
719
|
+
sage: ascii_art(res.chain_complex())
|
|
720
|
+
[ x^2 0]
|
|
721
|
+
[2*x^2 x]
|
|
722
|
+
[3*x^2 2*x]
|
|
723
|
+
0 <-- C_0 <-------------- C_1 <-- 0
|
|
724
|
+
sage: res._maps
|
|
725
|
+
[
|
|
726
|
+
[ x^2 0]
|
|
727
|
+
[2*x^2 x]
|
|
728
|
+
[3*x^2 2*x]
|
|
729
|
+
]
|
|
730
|
+
|
|
731
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
732
|
+
sage: I = R.ideal([x^4 + 3*x^2 + 2])
|
|
733
|
+
sage: res = I.free_resolution()
|
|
734
|
+
sage: res._maps
|
|
735
|
+
[[x^4 + 3*x^2 + 2]]
|
|
736
|
+
|
|
737
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
738
|
+
sage: M = matrix([[x^2, 2],
|
|
739
|
+
....: [3*x^2, 5],
|
|
740
|
+
....: [5*x^2, 4]])
|
|
741
|
+
sage: res = FreeResolution(M.transpose()); res
|
|
742
|
+
S^3 <-- S^2 <-- 0
|
|
743
|
+
sage: res._m()
|
|
744
|
+
[ 1 0]
|
|
745
|
+
[ 5/2 -x^2]
|
|
746
|
+
[ 2 -6*x^2]
|
|
747
|
+
sage: res._maps
|
|
748
|
+
[
|
|
749
|
+
[ 1 0]
|
|
750
|
+
[ 5/2 -x^2]
|
|
751
|
+
[ 2 -6*x^2]
|
|
752
|
+
]
|
|
753
|
+
|
|
754
|
+
An overdetermined system over a PID::
|
|
755
|
+
|
|
756
|
+
sage: res = FreeResolution(M); res
|
|
757
|
+
S^2 <-- S^2 <-- 0
|
|
758
|
+
sage: res._m()
|
|
759
|
+
[x^2 0]
|
|
760
|
+
[ 2 -1]
|
|
761
|
+
sage: res._maps
|
|
762
|
+
[
|
|
763
|
+
[x^2 0]
|
|
764
|
+
[ 2 -1]
|
|
765
|
+
]
|
|
766
|
+
"""
|
|
767
|
+
if isinstance(self._module, Ideal_generic):
|
|
768
|
+
from sage.matrix.constructor import matrix
|
|
769
|
+
return [matrix([[self._module.gen()]])]
|
|
770
|
+
return [self._m()]
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
class FiniteFreeResolution_singular(FiniteFreeResolution):
|
|
774
|
+
r"""
|
|
775
|
+
Minimal free resolutions of ideals or submodules of free modules
|
|
776
|
+
of multivariate polynomial rings implemented in Singular.
|
|
777
|
+
|
|
778
|
+
INPUT:
|
|
779
|
+
|
|
780
|
+
- ``module`` -- a submodule of a free module `M` of rank `n` over `S` or
|
|
781
|
+
an ideal of a multi-variate polynomial ring
|
|
782
|
+
|
|
783
|
+
- ``name`` -- string (optional); name of the base ring
|
|
784
|
+
|
|
785
|
+
- ``algorithm`` -- (default: ``'heuristic'``) Singular algorithm
|
|
786
|
+
to compute a resolution of ``ideal``
|
|
787
|
+
|
|
788
|
+
OUTPUT: a minimal free resolution of the ideal
|
|
789
|
+
|
|
790
|
+
If ``module`` is an ideal of `S`, it is considered as a submodule of a
|
|
791
|
+
free module of rank `1` over `S`.
|
|
792
|
+
|
|
793
|
+
The available algorithms and the corresponding Singular commands
|
|
794
|
+
are shown below:
|
|
795
|
+
|
|
796
|
+
============= ============================
|
|
797
|
+
algorithm Singular commands
|
|
798
|
+
============= ============================
|
|
799
|
+
``minimal`` ``mres(ideal)``
|
|
800
|
+
``shreyer`` ``minres(sres(std(ideal)))``
|
|
801
|
+
``standard`` ``minres(nres(std(ideal)))``
|
|
802
|
+
``heuristic`` ``minres(res(std(ideal)))``
|
|
803
|
+
============= ============================
|
|
804
|
+
|
|
805
|
+
EXAMPLES::
|
|
806
|
+
|
|
807
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
808
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
809
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
810
|
+
sage: r = FreeResolution(I); r
|
|
811
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
812
|
+
sage: len(r)
|
|
813
|
+
2
|
|
814
|
+
|
|
815
|
+
::
|
|
816
|
+
|
|
817
|
+
sage: FreeResolution(I, algorithm='minimal')
|
|
818
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
819
|
+
sage: FreeResolution(I, algorithm='shreyer')
|
|
820
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
821
|
+
sage: FreeResolution(I, algorithm='standard')
|
|
822
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
823
|
+
sage: FreeResolution(I, algorithm='heuristic')
|
|
824
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
825
|
+
|
|
826
|
+
We can also construct a resolution by passing in a matrix defining
|
|
827
|
+
the initial differential::
|
|
828
|
+
|
|
829
|
+
sage: m = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z]).transpose()
|
|
830
|
+
sage: r = FreeResolution(m, name='S'); r
|
|
831
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
832
|
+
sage: r.matrix(1)
|
|
833
|
+
[z^2 - y*w y*z - x*w y^2 - x*z]
|
|
834
|
+
|
|
835
|
+
An additional construction is using a submodule of a free module::
|
|
836
|
+
|
|
837
|
+
sage: M = m.image()
|
|
838
|
+
sage: r = FreeResolution(M, name='S'); r
|
|
839
|
+
S^1 <-- S^3 <-- S^2 <-- 0
|
|
840
|
+
|
|
841
|
+
A nonhomogeneous ideal::
|
|
842
|
+
|
|
843
|
+
sage: I = S.ideal([z^2 - y*w, y*z - x*w, y^2 - x])
|
|
844
|
+
sage: R = FreeResolution(I); R
|
|
845
|
+
S^1 <-- S^3 <-- S^3 <-- S^1 <-- 0
|
|
846
|
+
sage: R.matrix(2)
|
|
847
|
+
[ y*z - x*w y^2 - x 0]
|
|
848
|
+
[-z^2 + y*w 0 y^2 - x]
|
|
849
|
+
[ 0 -z^2 + y*w -y*z + x*w]
|
|
850
|
+
sage: R.matrix(3)
|
|
851
|
+
[ y^2 - x]
|
|
852
|
+
[-y*z + x*w]
|
|
853
|
+
[ z^2 - y*w]
|
|
854
|
+
"""
|
|
855
|
+
def __init__(self, module, name='S', algorithm='heuristic', **kwds):
|
|
856
|
+
r"""
|
|
857
|
+
Initialize ``self``.
|
|
858
|
+
|
|
859
|
+
TESTS::
|
|
860
|
+
|
|
861
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
862
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
863
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
864
|
+
sage: r = FreeResolution(I)
|
|
865
|
+
sage: TestSuite(r).run(skip=['_test_pickling'])
|
|
866
|
+
|
|
867
|
+
sage: m = matrix(S, 1, [z^2 - y*w, y*z - x*w, y^2 - x*z]).transpose()
|
|
868
|
+
sage: r = FreeResolution(m, name='S')
|
|
869
|
+
sage: TestSuite(r).run(skip=['_test_pickling'])
|
|
870
|
+
|
|
871
|
+
sage: M = m.image()
|
|
872
|
+
sage: r = FreeResolution(M, name='S')
|
|
873
|
+
sage: TestSuite(r).run(skip=['_test_pickling'])
|
|
874
|
+
"""
|
|
875
|
+
self._algorithm = algorithm
|
|
876
|
+
super().__init__(module, name=name, **kwds)
|
|
877
|
+
|
|
878
|
+
@lazy_attribute
|
|
879
|
+
def _maps(self):
|
|
880
|
+
r"""
|
|
881
|
+
Return the maps that define ``self``.
|
|
882
|
+
|
|
883
|
+
TESTS::
|
|
884
|
+
|
|
885
|
+
sage: from sage.homology.free_resolution import FreeResolution
|
|
886
|
+
sage: S.<x,y,z,w> = PolynomialRing(QQ)
|
|
887
|
+
sage: I = S.ideal([y*w - z^2, -x*w + y*z, x*z - y^2])
|
|
888
|
+
sage: r = FreeResolution(I)
|
|
889
|
+
sage: r._maps
|
|
890
|
+
[
|
|
891
|
+
[-y x]
|
|
892
|
+
[ z -y]
|
|
893
|
+
[z^2 - y*w y*z - x*w y^2 - x*z], [-w z]
|
|
894
|
+
]
|
|
895
|
+
"""
|
|
896
|
+
from sage.libs.singular.singular import si2sa_resolution
|
|
897
|
+
from sage.libs.singular.function import singular_function
|
|
898
|
+
|
|
899
|
+
# This ensures the first component of the Singular resolution to be a
|
|
900
|
+
# module, like the later components. This is important when the
|
|
901
|
+
# components are converted to Sage modules.
|
|
902
|
+
module = singular_function("module")
|
|
903
|
+
mod = module(self._m())
|
|
904
|
+
|
|
905
|
+
if self._algorithm == 'minimal':
|
|
906
|
+
mres = singular_function('mres') # syzygy method
|
|
907
|
+
r = mres(mod, 0)
|
|
908
|
+
elif self._algorithm == 'shreyer':
|
|
909
|
+
std = singular_function('std')
|
|
910
|
+
sres = singular_function('sres') # Shreyer method
|
|
911
|
+
minres = singular_function('minres')
|
|
912
|
+
r = minres(sres(std(mod), 0))
|
|
913
|
+
elif self._algorithm == 'standard':
|
|
914
|
+
nres = singular_function('nres') # standard basis method
|
|
915
|
+
minres = singular_function('minres')
|
|
916
|
+
r = minres(nres(mod, 0))
|
|
917
|
+
elif self._algorithm == 'heuristic':
|
|
918
|
+
std = singular_function('std')
|
|
919
|
+
res = singular_function('res') # heuristic method
|
|
920
|
+
minres = singular_function('minres')
|
|
921
|
+
r = minres(res(std(mod), 0))
|
|
922
|
+
|
|
923
|
+
return si2sa_resolution(r)
|