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
sage/matrix/docs.py
ADDED
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Matrices over an arbitrary ring
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- William Stein
|
|
8
|
+
|
|
9
|
+
- Martin Albrecht: conversion to Pyrex
|
|
10
|
+
|
|
11
|
+
- Jaap Spies: various functions
|
|
12
|
+
|
|
13
|
+
- Gary Zablackis: fixed a sign bug in generic determinant.
|
|
14
|
+
|
|
15
|
+
- William Stein and Robert Bradshaw - complete restructuring.
|
|
16
|
+
|
|
17
|
+
- Rob Beezer - refactor kernel functions.
|
|
18
|
+
|
|
19
|
+
Elements of matrix spaces are of class ``Matrix`` (or a
|
|
20
|
+
class derived from Matrix). They can be either sparse or dense, and
|
|
21
|
+
can be defined over any base ring.
|
|
22
|
+
|
|
23
|
+
EXAMPLES:
|
|
24
|
+
|
|
25
|
+
We create the `2\times 3` matrix
|
|
26
|
+
|
|
27
|
+
.. MATH::
|
|
28
|
+
|
|
29
|
+
\left(\begin{matrix} 1&2&3\\4&5&6 \end{matrix}\right)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
as an element of a matrix space over `\QQ`::
|
|
33
|
+
|
|
34
|
+
sage: M = MatrixSpace(QQ,2,3)
|
|
35
|
+
sage: A = M([1,2,3, 4,5,6]); A
|
|
36
|
+
[1 2 3]
|
|
37
|
+
[4 5 6]
|
|
38
|
+
sage: A.parent()
|
|
39
|
+
Full MatrixSpace of 2 by 3 dense matrices over Rational Field
|
|
40
|
+
|
|
41
|
+
Alternatively, we could create A more directly as follows (which
|
|
42
|
+
would completely avoid having to create the matrix space)::
|
|
43
|
+
|
|
44
|
+
sage: A = matrix(QQ, 2, [1,2,3, 4,5,6]); A
|
|
45
|
+
[1 2 3]
|
|
46
|
+
[4 5 6]
|
|
47
|
+
|
|
48
|
+
We next change the top-right entry of `A`. Note that matrix
|
|
49
|
+
indexing is `0`-based in Sage, so the top right entry is
|
|
50
|
+
`(0,2)`, which should be thought of as "row number
|
|
51
|
+
`0`, column number `2`".
|
|
52
|
+
|
|
53
|
+
::
|
|
54
|
+
|
|
55
|
+
sage: A[0,2] = 389
|
|
56
|
+
sage: A
|
|
57
|
+
[ 1 2 389]
|
|
58
|
+
[ 4 5 6]
|
|
59
|
+
|
|
60
|
+
Also notice how matrices print. All columns have the same width and
|
|
61
|
+
entries in a given column are right justified. Next we compute the
|
|
62
|
+
reduced row echelon form of `A`.
|
|
63
|
+
|
|
64
|
+
::
|
|
65
|
+
|
|
66
|
+
sage: A.rref()
|
|
67
|
+
[ 1 0 -1933/3]
|
|
68
|
+
[ 0 1 1550/3]
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
Indexing
|
|
72
|
+
========
|
|
73
|
+
|
|
74
|
+
Sage has quite flexible ways of extracting elements or submatrices
|
|
75
|
+
from a matrix::
|
|
76
|
+
|
|
77
|
+
sage: m=[(1, -2, -1, -1,9), (1, 8, 6, 2,2), (1, 1, -1, 1,4), (-1, 2, -2, -1,4)] ; M = matrix(m)
|
|
78
|
+
sage: M
|
|
79
|
+
[ 1 -2 -1 -1 9]
|
|
80
|
+
[ 1 8 6 2 2]
|
|
81
|
+
[ 1 1 -1 1 4]
|
|
82
|
+
[-1 2 -2 -1 4]
|
|
83
|
+
|
|
84
|
+
Get the 2 x 2 submatrix of M, starting at row index and column index 1::
|
|
85
|
+
|
|
86
|
+
sage: M[1:3,1:3]
|
|
87
|
+
[ 8 6]
|
|
88
|
+
[ 1 -1]
|
|
89
|
+
|
|
90
|
+
Get the 2 x 3 submatrix of M starting at row index and column index 1::
|
|
91
|
+
|
|
92
|
+
sage: M[1:3,[1..3]]
|
|
93
|
+
[ 8 6 2]
|
|
94
|
+
[ 1 -1 1]
|
|
95
|
+
|
|
96
|
+
Get the second column of M::
|
|
97
|
+
|
|
98
|
+
sage: M[:,1]
|
|
99
|
+
[-2]
|
|
100
|
+
[ 8]
|
|
101
|
+
[ 1]
|
|
102
|
+
[ 2]
|
|
103
|
+
|
|
104
|
+
Get the first row of M::
|
|
105
|
+
|
|
106
|
+
sage: M[0,:]
|
|
107
|
+
[ 1 -2 -1 -1 9]
|
|
108
|
+
|
|
109
|
+
Get the last row of M (negative numbers count from the end)::
|
|
110
|
+
|
|
111
|
+
sage: M[-1,:]
|
|
112
|
+
[-1 2 -2 -1 4]
|
|
113
|
+
|
|
114
|
+
More examples::
|
|
115
|
+
|
|
116
|
+
sage: M[range(2),:]
|
|
117
|
+
[ 1 -2 -1 -1 9]
|
|
118
|
+
[ 1 8 6 2 2]
|
|
119
|
+
sage: M[range(2),4]
|
|
120
|
+
[9]
|
|
121
|
+
[2]
|
|
122
|
+
sage: M[range(3),range(5)]
|
|
123
|
+
[ 1 -2 -1 -1 9]
|
|
124
|
+
[ 1 8 6 2 2]
|
|
125
|
+
[ 1 1 -1 1 4]
|
|
126
|
+
|
|
127
|
+
sage: M[3,range(5)]
|
|
128
|
+
[-1 2 -2 -1 4]
|
|
129
|
+
sage: M[3,:]
|
|
130
|
+
[-1 2 -2 -1 4]
|
|
131
|
+
sage: M[3,4]
|
|
132
|
+
4
|
|
133
|
+
|
|
134
|
+
sage: M[-1,:]
|
|
135
|
+
[-1 2 -2 -1 4]
|
|
136
|
+
|
|
137
|
+
sage: A = matrix(ZZ,3,4, [3, 2, -5, 0, 1, -1, 1, -4, 1, 0, 1, -3]); A
|
|
138
|
+
[ 3 2 -5 0]
|
|
139
|
+
[ 1 -1 1 -4]
|
|
140
|
+
[ 1 0 1 -3]
|
|
141
|
+
|
|
142
|
+
A series of three numbers, separated by colons, like ``n:m:s``, means
|
|
143
|
+
numbers from ``n`` up to (but not including) ``m``, in steps of ``s``.
|
|
144
|
+
So ``0:5:2`` means the sequence ``[0,2,4]``::
|
|
145
|
+
|
|
146
|
+
sage: A[:,0:4:2]
|
|
147
|
+
[ 3 -5]
|
|
148
|
+
[ 1 1]
|
|
149
|
+
[ 1 1]
|
|
150
|
+
|
|
151
|
+
sage: A[1:,0:4:2]
|
|
152
|
+
[1 1]
|
|
153
|
+
[1 1]
|
|
154
|
+
|
|
155
|
+
sage: A[2::-1,:]
|
|
156
|
+
[ 1 0 1 -3]
|
|
157
|
+
[ 1 -1 1 -4]
|
|
158
|
+
[ 3 2 -5 0]
|
|
159
|
+
|
|
160
|
+
sage: A[1:,3::-1]
|
|
161
|
+
[-4 1 -1 1]
|
|
162
|
+
[-3 1 0 1]
|
|
163
|
+
|
|
164
|
+
sage: A[1:,3::-2]
|
|
165
|
+
[-4 -1]
|
|
166
|
+
[-3 0]
|
|
167
|
+
|
|
168
|
+
sage: A[2::-1,3:1:-1]
|
|
169
|
+
[-3 1]
|
|
170
|
+
[-4 1]
|
|
171
|
+
[ 0 -5]
|
|
172
|
+
|
|
173
|
+
We can also change submatrices using these indexing features::
|
|
174
|
+
|
|
175
|
+
sage: M=matrix([(1, -2, -1, -1,9), (1, 8, 6, 2,2), (1, 1, -1, 1,4), (-1, 2, -2, -1,4)]); M
|
|
176
|
+
[ 1 -2 -1 -1 9]
|
|
177
|
+
[ 1 8 6 2 2]
|
|
178
|
+
[ 1 1 -1 1 4]
|
|
179
|
+
[-1 2 -2 -1 4]
|
|
180
|
+
|
|
181
|
+
Set the 2 x 2 submatrix of M, starting at row index and column index 1::
|
|
182
|
+
|
|
183
|
+
sage: M[1:3,1:3] = [[1,0],[0,1]]; M
|
|
184
|
+
[ 1 -2 -1 -1 9]
|
|
185
|
+
[ 1 1 0 2 2]
|
|
186
|
+
[ 1 0 1 1 4]
|
|
187
|
+
[-1 2 -2 -1 4]
|
|
188
|
+
|
|
189
|
+
Set the 2 x 3 submatrix of M starting at row index and column index 1::
|
|
190
|
+
|
|
191
|
+
sage: M[1:3,[1..3]] = M[2:4,0:3]; M
|
|
192
|
+
[ 1 -2 -1 -1 9]
|
|
193
|
+
[ 1 1 0 1 2]
|
|
194
|
+
[ 1 -1 2 -2 4]
|
|
195
|
+
[-1 2 -2 -1 4]
|
|
196
|
+
|
|
197
|
+
Set part of the first column of M::
|
|
198
|
+
|
|
199
|
+
sage: M[1:,0]=[[2],[3],[4]]; M
|
|
200
|
+
[ 1 -2 -1 -1 9]
|
|
201
|
+
[ 2 1 0 1 2]
|
|
202
|
+
[ 3 -1 2 -2 4]
|
|
203
|
+
[ 4 2 -2 -1 4]
|
|
204
|
+
|
|
205
|
+
Or do a similar thing with a vector::
|
|
206
|
+
|
|
207
|
+
sage: M[1:,0]=vector([-2,-3,-4]); M
|
|
208
|
+
[ 1 -2 -1 -1 9]
|
|
209
|
+
[-2 1 0 1 2]
|
|
210
|
+
[-3 -1 2 -2 4]
|
|
211
|
+
[-4 2 -2 -1 4]
|
|
212
|
+
|
|
213
|
+
Or a constant::
|
|
214
|
+
|
|
215
|
+
sage: M[1:,0]=30; M
|
|
216
|
+
[ 1 -2 -1 -1 9]
|
|
217
|
+
[30 1 0 1 2]
|
|
218
|
+
[30 -1 2 -2 4]
|
|
219
|
+
[30 2 -2 -1 4]
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
Set the first row of M::
|
|
223
|
+
|
|
224
|
+
sage: M[0,:]=[[20,21,22,23,24]]; M
|
|
225
|
+
[20 21 22 23 24]
|
|
226
|
+
[30 1 0 1 2]
|
|
227
|
+
[30 -1 2 -2 4]
|
|
228
|
+
[30 2 -2 -1 4]
|
|
229
|
+
sage: M[0,:]=vector([0,1,2,3,4]); M
|
|
230
|
+
[ 0 1 2 3 4]
|
|
231
|
+
[30 1 0 1 2]
|
|
232
|
+
[30 -1 2 -2 4]
|
|
233
|
+
[30 2 -2 -1 4]
|
|
234
|
+
sage: M[0,:]=-3; M
|
|
235
|
+
[-3 -3 -3 -3 -3]
|
|
236
|
+
[30 1 0 1 2]
|
|
237
|
+
[30 -1 2 -2 4]
|
|
238
|
+
[30 2 -2 -1 4]
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
sage: A = matrix(ZZ,3,4, [3, 2, -5, 0, 1, -1, 1, -4, 1, 0, 1, -3]); A
|
|
242
|
+
[ 3 2 -5 0]
|
|
243
|
+
[ 1 -1 1 -4]
|
|
244
|
+
[ 1 0 1 -3]
|
|
245
|
+
|
|
246
|
+
We can use the step feature of slices to set every other column::
|
|
247
|
+
|
|
248
|
+
sage: A[:,0:3:2] = 5; A
|
|
249
|
+
[ 5 2 5 0]
|
|
250
|
+
[ 5 -1 5 -4]
|
|
251
|
+
[ 5 0 5 -3]
|
|
252
|
+
|
|
253
|
+
sage: A[1:,0:4:2] = [[100,200],[300,400]]; A
|
|
254
|
+
[ 5 2 5 0]
|
|
255
|
+
[100 -1 200 -4]
|
|
256
|
+
[300 0 400 -3]
|
|
257
|
+
|
|
258
|
+
We can also count backwards to flip the matrix upside down::
|
|
259
|
+
|
|
260
|
+
sage: A[::-1,:]=A; A
|
|
261
|
+
[300 0 400 -3]
|
|
262
|
+
[100 -1 200 -4]
|
|
263
|
+
[ 5 2 5 0]
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
sage: A[1:,3::-1]=[[2,3,0,1],[9,8,7,6]]; A
|
|
267
|
+
[300 0 400 -3]
|
|
268
|
+
[ 1 0 3 2]
|
|
269
|
+
[ 6 7 8 9]
|
|
270
|
+
|
|
271
|
+
sage: A[1:,::-2] = A[1:,::2]; A
|
|
272
|
+
[300 0 400 -3]
|
|
273
|
+
[ 1 3 3 1]
|
|
274
|
+
[ 6 8 8 6]
|
|
275
|
+
|
|
276
|
+
sage: A[::-1,3:1:-1] = [[4,3],[1,2],[-1,-2]]; A
|
|
277
|
+
[300 0 -2 -1]
|
|
278
|
+
[ 1 3 2 1]
|
|
279
|
+
[ 6 8 3 4]
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
We save and load a matrix::
|
|
283
|
+
|
|
284
|
+
sage: A = matrix(Integers(8),3,range(9))
|
|
285
|
+
sage: loads(dumps(A)) == A
|
|
286
|
+
True
|
|
287
|
+
|
|
288
|
+
MUTABILITY: Matrices are either immutable or not. When initially
|
|
289
|
+
created, matrices are typically mutable, so one can change their
|
|
290
|
+
entries. Once a matrix `A` is made immutable using
|
|
291
|
+
``A.set_immutable()`` the entries of `A`
|
|
292
|
+
cannot be changed, and `A` can never be made mutable again.
|
|
293
|
+
However, properties of `A` such as its rank, characteristic
|
|
294
|
+
polynomial, etc., are all cached so computations involving
|
|
295
|
+
`A` may be more efficient. Once `A` is made
|
|
296
|
+
immutable it cannot be changed back. However, one can obtain a
|
|
297
|
+
mutable copy of `A` using ``copy(A)``.
|
|
298
|
+
|
|
299
|
+
EXAMPLES::
|
|
300
|
+
|
|
301
|
+
sage: A = matrix(RR,2,[1,10,3.5,2])
|
|
302
|
+
sage: A.set_immutable()
|
|
303
|
+
sage: copy(A) is A
|
|
304
|
+
False
|
|
305
|
+
|
|
306
|
+
The echelon form method always returns immutable matrices with
|
|
307
|
+
known rank.
|
|
308
|
+
|
|
309
|
+
EXAMPLES::
|
|
310
|
+
|
|
311
|
+
sage: A = matrix(Integers(8),3,range(9))
|
|
312
|
+
sage: A.determinant()
|
|
313
|
+
0
|
|
314
|
+
sage: A[0,0] = 5
|
|
315
|
+
sage: A.determinant()
|
|
316
|
+
1
|
|
317
|
+
sage: A.set_immutable()
|
|
318
|
+
sage: A[0,0] = 5
|
|
319
|
+
Traceback (most recent call last):
|
|
320
|
+
...
|
|
321
|
+
ValueError: matrix is immutable; please change a copy instead (i.e., use copy(M) to change a copy of M).
|
|
322
|
+
|
|
323
|
+
Implementation and Design
|
|
324
|
+
-------------------------
|
|
325
|
+
|
|
326
|
+
Class Diagram (an x means that class is currently supported)::
|
|
327
|
+
|
|
328
|
+
x Matrix
|
|
329
|
+
x Matrix_sparse
|
|
330
|
+
x Matrix_generic_sparse
|
|
331
|
+
x Matrix_integer_sparse
|
|
332
|
+
x Matrix_rational_sparse
|
|
333
|
+
Matrix_cyclo_sparse
|
|
334
|
+
x Matrix_modn_sparse
|
|
335
|
+
Matrix_RR_sparse
|
|
336
|
+
Matrix_CC_sparse
|
|
337
|
+
Matrix_RDF_sparse
|
|
338
|
+
Matrix_CDF_sparse
|
|
339
|
+
|
|
340
|
+
x Matrix_dense
|
|
341
|
+
x Matrix_generic_dense
|
|
342
|
+
x Matrix_integer_dense
|
|
343
|
+
x Matrix_rational_dense
|
|
344
|
+
Matrix_cyclo_dense -- idea: restrict scalars to QQ, compute charpoly there, then factor
|
|
345
|
+
x Matrix_modn_dense
|
|
346
|
+
Matrix_RR_dense
|
|
347
|
+
Matrix_CC_dense
|
|
348
|
+
x Matrix_real_double_dense
|
|
349
|
+
x Matrix_complex_double_dense
|
|
350
|
+
x Matrix_complex_ball_dense
|
|
351
|
+
|
|
352
|
+
The corresponding files in the sage/matrix library code directory
|
|
353
|
+
are named
|
|
354
|
+
|
|
355
|
+
::
|
|
356
|
+
|
|
357
|
+
[matrix] [base ring] [dense or sparse].
|
|
358
|
+
|
|
359
|
+
::
|
|
360
|
+
|
|
361
|
+
New matrices types can only be implemented in Cython.
|
|
362
|
+
|
|
363
|
+
*********** LEVEL 1 **********
|
|
364
|
+
NON-OPTIONAL
|
|
365
|
+
For each base field it is *absolutely* essential to completely
|
|
366
|
+
implement the following functionality for that base ring:
|
|
367
|
+
|
|
368
|
+
* __cinit__ -- should use check_allocarray from cysignals.memory
|
|
369
|
+
(only needed if allocate memory)
|
|
370
|
+
* __init__ -- this signature: 'def __init__(self, parent, entries, copy, coerce)'
|
|
371
|
+
* __dealloc__ -- use sig_free (only needed if allocate memory)
|
|
372
|
+
* set_unsafe(self, size_t i, size_t j, x) -- doesn't do bounds or any other checks; assumes x is in self._base_ring
|
|
373
|
+
* get_unsafe(self, size_t i, size_t j) -- doesn't do checks
|
|
374
|
+
* __richcmp__ -- always the same (I don't know why its needed -- bug in PYREX)
|
|
375
|
+
|
|
376
|
+
Note that the __init__ function must construct the all zero matrix if ``entries == None``.
|
|
377
|
+
|
|
378
|
+
*********** LEVEL 2 **********
|
|
379
|
+
|
|
380
|
+
IMPORTANT (and *highly* recommended):
|
|
381
|
+
|
|
382
|
+
After getting the special class with all level 1 functionality to
|
|
383
|
+
work, implement all of the following (they should not change
|
|
384
|
+
functionality, except speed (always faster!) in any way):
|
|
385
|
+
|
|
386
|
+
* def _pickle(self):
|
|
387
|
+
return data, version
|
|
388
|
+
* def _unpickle(self, data, int version)
|
|
389
|
+
reconstruct matrix from given data and version; may assume _parent, _nrows, and _ncols are set.
|
|
390
|
+
Use version numbers >= 0 so if you change the pickle strategy then
|
|
391
|
+
old objects still unpickle.
|
|
392
|
+
* cdef _list -- list of underlying elements (need not be a copy)
|
|
393
|
+
* cdef _dict -- sparse dictionary of underlying elements
|
|
394
|
+
* cdef _add_ -- add two matrices with identical parents
|
|
395
|
+
* _matrix_times_matrix_c_impl -- multiply two matrices with compatible dimensions and
|
|
396
|
+
identical base rings (both sparse or both dense)
|
|
397
|
+
* cpdef _richcmp_ -- compare two matrices with identical parents
|
|
398
|
+
* cdef _lmul_c_impl -- multiply this matrix on the right by a scalar, i.e., self * scalar
|
|
399
|
+
* cdef _rmul_c_impl -- multiply this matrix on the left by a scalar, i.e., scalar * self
|
|
400
|
+
* __copy__
|
|
401
|
+
* __neg__
|
|
402
|
+
|
|
403
|
+
The list and dict returned by _list and _dict will *not* be changed
|
|
404
|
+
by any internal algorithms and are not accessible to the user.
|
|
405
|
+
|
|
406
|
+
*********** LEVEL 3 **********
|
|
407
|
+
OPTIONAL:
|
|
408
|
+
|
|
409
|
+
* cdef _sub_
|
|
410
|
+
* __invert__
|
|
411
|
+
* _multiply_classical
|
|
412
|
+
* __deepcopy__
|
|
413
|
+
|
|
414
|
+
Further special support:
|
|
415
|
+
* Matrix windows -- to support Strassen multiplication for a given base ring.
|
|
416
|
+
* Other functions, e.g., transpose, for which knowing the
|
|
417
|
+
specific representation can be helpful.
|
|
418
|
+
|
|
419
|
+
.. NOTE::
|
|
420
|
+
|
|
421
|
+
- For caching, use self.fetch and self.cache.
|
|
422
|
+
|
|
423
|
+
- Any method that can change the matrix should call
|
|
424
|
+
``check_mutability()`` first. There are also many fast cdef'd bounds checking methods.
|
|
425
|
+
|
|
426
|
+
- Kernels of matrices
|
|
427
|
+
Implement only a left_kernel() or right_kernel() method, whichever requires
|
|
428
|
+
the least overhead (usually meaning little or no transposing). Let the
|
|
429
|
+
methods in the matrix2 class handle left, right, generic kernel distinctions.
|
|
430
|
+
"""
|
|
Binary file
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Echelon matrices over finite fields.
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2014 Vincent Delecroix <20100.delecroix@gmail.com>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
10
|
+
# the License, or (at your option) any later version.
|
|
11
|
+
# https://www.gnu.org/licenses/
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
|
|
14
|
+
from sage.matrix.matrix0 cimport Matrix
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def reduced_echelon_matrix_iterator(K, k, n, bint sparse=False, bint copy=True, bint set_immutable=False):
|
|
18
|
+
r"""
|
|
19
|
+
An iterator over `(k,n)` reduced echelon matrices over the finite field `K`.
|
|
20
|
+
|
|
21
|
+
INPUT:
|
|
22
|
+
|
|
23
|
+
- ``K`` -- a finite field
|
|
24
|
+
|
|
25
|
+
- ``k`` -- number of rows (or the size of the subspace)
|
|
26
|
+
|
|
27
|
+
- ``n`` -- number of columns (or the dimension of the ambient space)
|
|
28
|
+
|
|
29
|
+
- ``sparse`` -- boolean (default: ``False``)
|
|
30
|
+
|
|
31
|
+
- ``copy`` -- boolean (default: ``True``); if set to ``False`` then
|
|
32
|
+
iterator yields the same matrix over and over (but with different
|
|
33
|
+
entries). Default is ``True`` which is safer but might be slower.
|
|
34
|
+
|
|
35
|
+
- ``set_immutable`` -- boolean; if set to ``True`` then the output matrices
|
|
36
|
+
are immutable. This option automatically turns ``copy`` into ``True``.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
.. NOTE::
|
|
40
|
+
|
|
41
|
+
We ensure that the iteration order is so that all matrices with given
|
|
42
|
+
pivot columns are generated consecutively. Furthermore, the order in
|
|
43
|
+
which the pivot columns appear is lexicographic.
|
|
44
|
+
|
|
45
|
+
It would be faster to generate the pivots columns following a Gray code.
|
|
46
|
+
There would be only one pivot changing at a time, avoiding the possibly
|
|
47
|
+
expensive ``m0.__copy__()``. However that would modify the generation
|
|
48
|
+
order some functions depend upon.
|
|
49
|
+
|
|
50
|
+
EXAMPLES::
|
|
51
|
+
|
|
52
|
+
sage: from sage.matrix.echelon_matrix import reduced_echelon_matrix_iterator
|
|
53
|
+
sage: it = reduced_echelon_matrix_iterator(GF(2), 2, 3)
|
|
54
|
+
sage: for m in it:
|
|
55
|
+
....: print(m)
|
|
56
|
+
....: print(m.pivots())
|
|
57
|
+
....: print("*******")
|
|
58
|
+
[1 0 0]
|
|
59
|
+
[0 1 0]
|
|
60
|
+
(0, 1)
|
|
61
|
+
*******
|
|
62
|
+
[1 0 0]
|
|
63
|
+
[0 1 1]
|
|
64
|
+
(0, 1)
|
|
65
|
+
*******
|
|
66
|
+
[1 0 1]
|
|
67
|
+
[0 1 0]
|
|
68
|
+
(0, 1)
|
|
69
|
+
*******
|
|
70
|
+
[1 0 1]
|
|
71
|
+
[0 1 1]
|
|
72
|
+
(0, 1)
|
|
73
|
+
*******
|
|
74
|
+
[1 0 0]
|
|
75
|
+
[0 0 1]
|
|
76
|
+
(0, 2)
|
|
77
|
+
*******
|
|
78
|
+
[1 1 0]
|
|
79
|
+
[0 0 1]
|
|
80
|
+
(0, 2)
|
|
81
|
+
*******
|
|
82
|
+
[0 1 0]
|
|
83
|
+
[0 0 1]
|
|
84
|
+
(1, 2)
|
|
85
|
+
*******
|
|
86
|
+
|
|
87
|
+
TESTS:
|
|
88
|
+
|
|
89
|
+
Testing cardinalities::
|
|
90
|
+
|
|
91
|
+
sage: q = 71
|
|
92
|
+
sage: F = GF(q)
|
|
93
|
+
sage: len(list(reduced_echelon_matrix_iterator(F, 1, 3, copy=False))) == q**2+q+1
|
|
94
|
+
True
|
|
95
|
+
sage: len(list(reduced_echelon_matrix_iterator(F, 2, 3, copy=False))) == q**2+q+1
|
|
96
|
+
True
|
|
97
|
+
|
|
98
|
+
Testing options::
|
|
99
|
+
|
|
100
|
+
sage: it = reduced_echelon_matrix_iterator(GF(4, 'z'), 2, 4, copy=False) # needs sage.rings.finite_rings
|
|
101
|
+
sage: next(it) is next(it) # needs sage.rings.finite_rings
|
|
102
|
+
True
|
|
103
|
+
sage: for a in it: pass
|
|
104
|
+
|
|
105
|
+
sage: it = reduced_echelon_matrix_iterator(GF(4, 'z'), 2, 4, set_immutable=True) # needs sage.rings.finite_rings
|
|
106
|
+
sage: all(a.is_immutable() and a.echelon_form() == a for a in it)
|
|
107
|
+
True
|
|
108
|
+
"""
|
|
109
|
+
cdef Matrix m0,m,mm
|
|
110
|
+
cdef Py_ssize_t i
|
|
111
|
+
n = int(n)
|
|
112
|
+
k = int(k)
|
|
113
|
+
|
|
114
|
+
if n < k:
|
|
115
|
+
raise NotImplementedError("echelon matrix with fewer rows than columns "
|
|
116
|
+
"i.e. not full rank) are not implemented")
|
|
117
|
+
|
|
118
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
119
|
+
from itertools import combinations,product
|
|
120
|
+
|
|
121
|
+
copy = copy or set_immutable
|
|
122
|
+
|
|
123
|
+
m0 = MatrixSpace(K,k,n,sparse=sparse)()
|
|
124
|
+
Klist = list(K)
|
|
125
|
+
K1 = K.one()
|
|
126
|
+
|
|
127
|
+
# First, we select which columns will be pivots:
|
|
128
|
+
for pivots in combinations(range(n),k):
|
|
129
|
+
m = m0.__copy__()
|
|
130
|
+
free_positions = []
|
|
131
|
+
for i in range(k):
|
|
132
|
+
m[i,pivots[i]] = K1
|
|
133
|
+
for j in range(pivots[i]+1,n):
|
|
134
|
+
if j not in pivots:
|
|
135
|
+
free_positions.append((i,j))
|
|
136
|
+
|
|
137
|
+
# Next, we fill in those entries that are not
|
|
138
|
+
# determined by the echelon form alone:
|
|
139
|
+
num_free_pos = len(free_positions)
|
|
140
|
+
for v in product(Klist, repeat=num_free_pos):
|
|
141
|
+
for i in range(num_free_pos):
|
|
142
|
+
m[free_positions[i]] = v[i]
|
|
143
|
+
|
|
144
|
+
if copy:
|
|
145
|
+
mm = m.__copy__()
|
|
146
|
+
mm.cache('pivots',pivots)
|
|
147
|
+
mm.cache('rank',k)
|
|
148
|
+
mm.cache('in_echelon_form',True)
|
|
149
|
+
if set_immutable:
|
|
150
|
+
mm.set_immutable()
|
|
151
|
+
yield mm
|
|
152
|
+
else:
|
|
153
|
+
yield m
|
|
154
|
+
del v # hack: Python itertools reuses the tuple if nobody else uses it
|
|
155
|
+
del pivots # hack: Python itertools reuses the tuple if nobody else uses it
|
sage/matrix/matrix.pxd
ADDED
|
Binary file
|
sage/matrix/matrix0.pxd
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Generic matrices
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ***************************************************************************
|
|
7
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ***************************************************************************
|
|
15
|
+
|
|
16
|
+
cimport sage.structure.element
|
|
17
|
+
cimport sage.structure.mutability
|
|
18
|
+
|
|
19
|
+
cdef class Matrix(sage.structure.element.Matrix):
|
|
20
|
+
# Properties of any matrix (plus _parent, inherited from base class)
|
|
21
|
+
cdef public object _subdivisions
|
|
22
|
+
cdef public object _base_ring
|
|
23
|
+
cdef bint _is_immutable
|
|
24
|
+
|
|
25
|
+
cpdef _add_(self, other)
|
|
26
|
+
cpdef _sub_(self, other)
|
|
27
|
+
|
|
28
|
+
cdef bint _will_use_strassen(self, Matrix right) except -2
|
|
29
|
+
cdef bint _will_use_strassen_echelon(self) except -2
|
|
30
|
+
cdef int _strassen_default_cutoff(self, Matrix right) except -2
|
|
31
|
+
cdef int _strassen_default_echelon_cutoff(self) except -2
|
|
32
|
+
|
|
33
|
+
# Implementation of hash function
|
|
34
|
+
cdef long _hash_(self) except -1
|
|
35
|
+
cdef void get_hash_constants(self, long C[5]) noexcept
|
|
36
|
+
|
|
37
|
+
# Cache
|
|
38
|
+
cdef public object _cache
|
|
39
|
+
cdef long hash # cached hash value
|
|
40
|
+
cdef void clear_cache(self) noexcept
|
|
41
|
+
cdef fetch(self, key)
|
|
42
|
+
cdef cache(self, key, x)
|
|
43
|
+
|
|
44
|
+
# Mutability and bounds checking
|
|
45
|
+
cdef check_bounds(self, Py_ssize_t i, Py_ssize_t j)
|
|
46
|
+
cdef check_mutability(self)
|
|
47
|
+
cdef check_bounds_and_mutability(self, Py_ssize_t i, Py_ssize_t j)
|
|
48
|
+
|
|
49
|
+
# Unsafe entry access
|
|
50
|
+
cdef set_unsafe(self, Py_ssize_t i, Py_ssize_t j, object x)
|
|
51
|
+
cdef get_unsafe(self, Py_ssize_t i, Py_ssize_t j)
|
|
52
|
+
cdef _coerce_element(self, x)
|
|
53
|
+
cdef bint get_is_zero_unsafe(self, Py_ssize_t i, Py_ssize_t j) except -1
|
|
54
|
+
|
|
55
|
+
# Row and column operations
|
|
56
|
+
cdef check_row_bounds(self, Py_ssize_t r1, Py_ssize_t r2)
|
|
57
|
+
cdef check_column_bounds(self, Py_ssize_t c1, Py_ssize_t c2)
|
|
58
|
+
cdef check_row_bounds_and_mutability(self, Py_ssize_t r1, Py_ssize_t r2)
|
|
59
|
+
cdef check_column_bounds_and_mutability(self, Py_ssize_t c1, Py_ssize_t c2)
|
|
60
|
+
cdef swap_rows_c(self, Py_ssize_t r1, Py_ssize_t r2)
|
|
61
|
+
cdef swap_columns_c(self, Py_ssize_t c1, Py_ssize_t c2)
|
|
62
|
+
cdef add_multiple_of_row_c(self, Py_ssize_t i, Py_ssize_t j, s, Py_ssize_t col_start)
|
|
63
|
+
cdef add_multiple_of_column_c(self, Py_ssize_t i, Py_ssize_t j, s, Py_ssize_t row_start)
|
|
64
|
+
cdef rescale_row_c(self, Py_ssize_t i, s, Py_ssize_t start_col)
|
|
65
|
+
cdef rescale_col_c(self, Py_ssize_t i, s, Py_ssize_t start_row)
|
|
66
|
+
|
|
67
|
+
# Helper function for inverse of sparse matrices
|
|
68
|
+
cdef build_inverse_from_augmented_sparse(self, A)
|