passagemath-modules 10.6.31__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31.dist-info/RECORD +808 -0
- passagemath_modules-10.6.31.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Constructions of quadratic forms
|
|
4
|
+
"""
|
|
5
|
+
##
|
|
6
|
+
# Some extra routines to make the QuadraticForm class more useful.
|
|
7
|
+
##
|
|
8
|
+
|
|
9
|
+
from sage.rings.integer_ring import ZZ
|
|
10
|
+
from sage.rings.polynomial.polynomial_element import Polynomial
|
|
11
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
12
|
+
from sage.quadratic_forms.quadratic_form import QuadraticForm
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def BezoutianQuadraticForm(f, g):
|
|
16
|
+
r"""
|
|
17
|
+
Compute the Bezoutian of two polynomials defined over a common base ring. This is defined by
|
|
18
|
+
|
|
19
|
+
.. MATH::
|
|
20
|
+
|
|
21
|
+
{\rm Bez}(f, g) := \frac{f(x) g(y) - f(y) g(x)}{y - x}
|
|
22
|
+
|
|
23
|
+
and has size defined by the maximum of the degrees of `f` and `g`.
|
|
24
|
+
|
|
25
|
+
INPUT:
|
|
26
|
+
|
|
27
|
+
- ``f``, ``g`` -- polynomials in `R[x]`, for some ring `R`
|
|
28
|
+
|
|
29
|
+
OUTPUT: a quadratic form over `R`
|
|
30
|
+
|
|
31
|
+
EXAMPLES::
|
|
32
|
+
|
|
33
|
+
sage: R = PolynomialRing(ZZ, 'x')
|
|
34
|
+
sage: f = R([1,2,3])
|
|
35
|
+
sage: g = R([2,5])
|
|
36
|
+
sage: Q = BezoutianQuadraticForm(f, g); Q # needs sage.libs.singular
|
|
37
|
+
Quadratic form in 2 variables over Integer Ring with coefficients:
|
|
38
|
+
[ 1 -12 ]
|
|
39
|
+
[ * -15 ]
|
|
40
|
+
|
|
41
|
+
AUTHORS:
|
|
42
|
+
|
|
43
|
+
- Fernando Rodriguez-Villegas, Jonathan Hanke -- added on 11/9/2008
|
|
44
|
+
"""
|
|
45
|
+
# Check that f and g are polynomials with a common base ring
|
|
46
|
+
if not isinstance(f, Polynomial) or not isinstance(g, Polynomial):
|
|
47
|
+
raise TypeError("one of your inputs is not a polynomial")
|
|
48
|
+
if f.base_ring() != g.base_ring(): # TO DO: Change this to allow coercion!
|
|
49
|
+
raise TypeError("these polynomials are not defined over the same coefficient ring")
|
|
50
|
+
|
|
51
|
+
# Initialize the quadratic form
|
|
52
|
+
R = f.base_ring()
|
|
53
|
+
P = PolynomialRing(R, ['x', 'y'])
|
|
54
|
+
a, b = P.gens()
|
|
55
|
+
n = max(f.degree(), g.degree())
|
|
56
|
+
Q = QuadraticForm(R, n)
|
|
57
|
+
|
|
58
|
+
# Set the coefficients of Bezoutian
|
|
59
|
+
bez_poly = (f(a) * g(b) - f(b) * g(a)) // (b - a) # Truncated (exact) division here
|
|
60
|
+
for i in range(n):
|
|
61
|
+
for j in range(i, n):
|
|
62
|
+
if i == j:
|
|
63
|
+
Q[i, j] = bez_poly.coefficient({a: i, b: j})
|
|
64
|
+
else:
|
|
65
|
+
Q[i, j] = bez_poly.coefficient({a: i, b: j}) * 2
|
|
66
|
+
|
|
67
|
+
return Q
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def HyperbolicPlane_quadratic_form(R, r=1):
|
|
71
|
+
"""
|
|
72
|
+
Construct the direct sum of `r` copies of the quadratic form `xy`
|
|
73
|
+
representing a hyperbolic plane defined over the base ring `R`.
|
|
74
|
+
|
|
75
|
+
INPUT:
|
|
76
|
+
|
|
77
|
+
- ``R`` -- a ring
|
|
78
|
+
- ``n`` -- integer (default: 1); number of copies
|
|
79
|
+
|
|
80
|
+
EXAMPLES::
|
|
81
|
+
|
|
82
|
+
sage: HyperbolicPlane_quadratic_form(ZZ)
|
|
83
|
+
Quadratic form in 2 variables over Integer Ring with coefficients:
|
|
84
|
+
[ 0 1 ]
|
|
85
|
+
[ * 0 ]
|
|
86
|
+
"""
|
|
87
|
+
r = ZZ(r)
|
|
88
|
+
# Check that the multiplicity is a natural number
|
|
89
|
+
if r < 1:
|
|
90
|
+
raise TypeError("the multiplicity r must be a natural number")
|
|
91
|
+
|
|
92
|
+
H = QuadraticForm(R, 2, [0, 1, 0])
|
|
93
|
+
return sum([H for i in range(r - 1)], H)
|
|
Binary file
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Optimized counting of congruence solutions
|
|
4
|
+
"""
|
|
5
|
+
from sage.arith.misc import is_prime, kronecker as kronecker_symbol, valuation
|
|
6
|
+
from sage.rings.finite_rings.integer_mod import Mod
|
|
7
|
+
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def count_modp__by_gauss_sum(n, p, m, Qdet):
|
|
11
|
+
r"""
|
|
12
|
+
Return the number of solutions of `Q(x) = m` over the finite field
|
|
13
|
+
`\ZZ/p\ZZ`, where `p` is a prime number > 2 and `Q` is a non-degenerate
|
|
14
|
+
quadratic form of dimension `n \geq 1` and has Gram determinant ``Qdet``.
|
|
15
|
+
|
|
16
|
+
REFERENCE:
|
|
17
|
+
|
|
18
|
+
These are defined in Table 1 on p363 of Hanke's "Local Densities..." paper.
|
|
19
|
+
|
|
20
|
+
INPUT:
|
|
21
|
+
|
|
22
|
+
- ``n`` -- integer `\geq 1`
|
|
23
|
+
- ``p`` -- a prime number > 2
|
|
24
|
+
- ``m`` -- integer
|
|
25
|
+
- ``Qdet`` -- a integer which is nonzero mod `p`
|
|
26
|
+
|
|
27
|
+
OUTPUT: integer `\geq 0`
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: from sage.quadratic_forms.count_local_2 import count_modp__by_gauss_sum
|
|
32
|
+
|
|
33
|
+
sage: count_modp__by_gauss_sum(3, 3, 0, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
|
|
34
|
+
9
|
|
35
|
+
sage: count_modp__by_gauss_sum(3, 3, 1, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
|
|
36
|
+
6
|
|
37
|
+
sage: count_modp__by_gauss_sum(3, 3, 2, 1) # for Q = x^2 + y^2 + z^2 => Gram Det = 1 (mod 3)
|
|
38
|
+
12
|
|
39
|
+
|
|
40
|
+
sage: Q = DiagonalQuadraticForm(ZZ, [1,1,1])
|
|
41
|
+
sage: [Q.count_congruence_solutions(3, 1, m, None, None)
|
|
42
|
+
....: == count_modp__by_gauss_sum(3, 3, m, 1)
|
|
43
|
+
....: for m in range(3)]
|
|
44
|
+
[True, True, True]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
sage: count_modp__by_gauss_sum(3, 3, 0, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
|
|
48
|
+
9
|
|
49
|
+
sage: count_modp__by_gauss_sum(3, 3, 1, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
|
|
50
|
+
12
|
|
51
|
+
sage: count_modp__by_gauss_sum(3, 3, 2, 2) # for Q = x^2 + y^2 + 2*z^2 => Gram Det = 2 (mod 3)
|
|
52
|
+
6
|
|
53
|
+
|
|
54
|
+
sage: Q = DiagonalQuadraticForm(ZZ, [1,1,2])
|
|
55
|
+
sage: [Q.count_congruence_solutions(3, 1, m, None, None)
|
|
56
|
+
....: == count_modp__by_gauss_sum(3, 3, m, 2)
|
|
57
|
+
....: for m in range(3)]
|
|
58
|
+
[True, True, True]
|
|
59
|
+
"""
|
|
60
|
+
# Check that Qdet is non-degenerate
|
|
61
|
+
if Qdet % p == 0:
|
|
62
|
+
raise RuntimeError("Qdet must be nonzero.")
|
|
63
|
+
|
|
64
|
+
# Check that p is prime > 2
|
|
65
|
+
if not is_prime(p) or p == 2:
|
|
66
|
+
raise RuntimeError("p must be a prime number > 2.")
|
|
67
|
+
|
|
68
|
+
# Check that n >= 1
|
|
69
|
+
if n < 1:
|
|
70
|
+
raise RuntimeError("the dimension n must be >= 1.")
|
|
71
|
+
|
|
72
|
+
# Compute the Gauss sum
|
|
73
|
+
neg1 = -1
|
|
74
|
+
if not m % p:
|
|
75
|
+
if n % 2:
|
|
76
|
+
count = p**(n - 1)
|
|
77
|
+
else:
|
|
78
|
+
count = p**(n - 1) + (p - 1) * (p**((n - 2) // 2)) * kronecker_symbol(((neg1**(n // 2)) * Qdet) % p, p)
|
|
79
|
+
else:
|
|
80
|
+
if n % 2:
|
|
81
|
+
count = p**(n - 1) + p**((n - 1) // 2) * kronecker_symbol(((neg1**((n - 1) // 2)) * Qdet * m) % p, p)
|
|
82
|
+
else:
|
|
83
|
+
count = p**(n - 1) - p**((n - 2) // 2) * kronecker_symbol(((neg1**(n // 2)) * Qdet) % p, p)
|
|
84
|
+
|
|
85
|
+
# Return the result
|
|
86
|
+
return count
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
cdef CountAllLocalTypesNaive_cdef(Q, p, k, m, zvec, nzvec):
|
|
90
|
+
"""
|
|
91
|
+
This Cython routine is documented in its Python wrapper method
|
|
92
|
+
QuadraticForm.count_congruence_solutions_by_type().
|
|
93
|
+
"""
|
|
94
|
+
cdef long n, i
|
|
95
|
+
cdef long a, b # Used to quickly evaluate Q(v)
|
|
96
|
+
cdef long ptr # Used to increment the vector
|
|
97
|
+
cdef long solntype # Used to store the kind of solution we find
|
|
98
|
+
|
|
99
|
+
# Some shortcuts and definitions
|
|
100
|
+
n = Q.dim()
|
|
101
|
+
R = p ** k
|
|
102
|
+
Q1 = Q.change_ring(IntegerModRing(R))
|
|
103
|
+
|
|
104
|
+
# Initialize the counting vector
|
|
105
|
+
count_vector = [0 for i in range(6)]
|
|
106
|
+
|
|
107
|
+
# Initialize v = (0, ... , 0)
|
|
108
|
+
v = [Mod(0, R) for i in range(n)]
|
|
109
|
+
|
|
110
|
+
# Some declarations to speed up the loop
|
|
111
|
+
R_n = R ** n
|
|
112
|
+
m1 = Mod(m, R)
|
|
113
|
+
|
|
114
|
+
# Count the local solutions
|
|
115
|
+
for i in range(R_n):
|
|
116
|
+
|
|
117
|
+
# Perform a carry (when value = R-1) until we can increment freely
|
|
118
|
+
ptr = len(v)
|
|
119
|
+
while ((ptr > 0) and (v[ptr - 1] == R - 1)):
|
|
120
|
+
v[ptr - 1] += 1
|
|
121
|
+
ptr += -1
|
|
122
|
+
|
|
123
|
+
# Only increment if we're not already at the zero vector =)
|
|
124
|
+
if ptr > 0:
|
|
125
|
+
v[ptr - 1] += 1
|
|
126
|
+
|
|
127
|
+
# Evaluate Q(v) quickly
|
|
128
|
+
tmp_val = Mod(0, R)
|
|
129
|
+
for a from 0 <= a < n:
|
|
130
|
+
for b from a <= b < n:
|
|
131
|
+
tmp_val += Q1[a, b] * v[a] * v[b]
|
|
132
|
+
|
|
133
|
+
# Sort the solution by it's type
|
|
134
|
+
# if Q1(v) == m1:
|
|
135
|
+
if tmp_val == m1:
|
|
136
|
+
solntype = local_solution_type_cdef(Q1, p, v, zvec, nzvec)
|
|
137
|
+
if solntype != 0:
|
|
138
|
+
count_vector[solntype] += 1
|
|
139
|
+
|
|
140
|
+
# Generate the Bad-type and Total counts
|
|
141
|
+
count_vector[3] = count_vector[4] + count_vector[5]
|
|
142
|
+
count_vector[0] = count_vector[1] + count_vector[2] + count_vector[3]
|
|
143
|
+
|
|
144
|
+
# Return the solution counts
|
|
145
|
+
return count_vector
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def CountAllLocalTypesNaive(Q, p, k, m, zvec, nzvec):
|
|
149
|
+
r"""
|
|
150
|
+
This is an internal routine, which is called by
|
|
151
|
+
:meth:`sage.quadratic_forms.quadratic_form.QuadraticForm.count_congruence_solutions_by_type
|
|
152
|
+
QuadraticForm.count_congruence_solutions_by_type`. See the documentation of
|
|
153
|
+
that method for more details.
|
|
154
|
+
|
|
155
|
+
INPUT:
|
|
156
|
+
|
|
157
|
+
- ``Q`` -- quadratic form over `\ZZ`
|
|
158
|
+
- ``p`` -- prime number > 0
|
|
159
|
+
- ``k`` -- integer > 0
|
|
160
|
+
- ``m`` -- integer (depending only on mod `p^k`)
|
|
161
|
+
- ``zvec``, ``nzvec`` -- list of integers in ``range(Q.dim())``, or ``None``
|
|
162
|
+
|
|
163
|
+
OUTPUT:
|
|
164
|
+
|
|
165
|
+
a list of six integers `\ge 0` representing the solution types: ``[All,
|
|
166
|
+
Good, Zero, Bad, BadI, BadII]``
|
|
167
|
+
|
|
168
|
+
EXAMPLES::
|
|
169
|
+
|
|
170
|
+
sage: from sage.quadratic_forms.count_local_2 import CountAllLocalTypesNaive
|
|
171
|
+
sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
|
|
172
|
+
sage: CountAllLocalTypesNaive(Q, 3, 1, 1, None, None)
|
|
173
|
+
[6, 6, 0, 0, 0, 0]
|
|
174
|
+
sage: CountAllLocalTypesNaive(Q, 3, 1, 2, None, None)
|
|
175
|
+
[6, 6, 0, 0, 0, 0]
|
|
176
|
+
sage: CountAllLocalTypesNaive(Q, 3, 1, 0, None, None)
|
|
177
|
+
[15, 12, 1, 2, 0, 2]
|
|
178
|
+
"""
|
|
179
|
+
return CountAllLocalTypesNaive_cdef(Q, p, k, m, zvec, nzvec)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
cdef local_solution_type_cdef(Q, p, w, zvec, nzvec):
|
|
183
|
+
"""
|
|
184
|
+
Internal routine to check if a given solution vector `w` (of `Q(w) =
|
|
185
|
+
m` mod `p^k`) is of a certain local type and satisfies certain
|
|
186
|
+
congruence conditions mod `p`.
|
|
187
|
+
|
|
188
|
+
NOTE: No internal checking is done to test if `p` is a prime >=2, or
|
|
189
|
+
that Q has the same size as `w`.
|
|
190
|
+
"""
|
|
191
|
+
cdef long i
|
|
192
|
+
cdef long n
|
|
193
|
+
|
|
194
|
+
n = Q.dim()
|
|
195
|
+
|
|
196
|
+
# Check if the solution satisfies the zvec "zero" congruence conditions
|
|
197
|
+
# (either zvec is empty or its components index the zero vector mod p)
|
|
198
|
+
if zvec is None or not zvec:
|
|
199
|
+
zero_flag = True
|
|
200
|
+
else:
|
|
201
|
+
zero_flag = False
|
|
202
|
+
i = 0
|
|
203
|
+
while i < len(zvec) and not w[zvec[i]] % p: # Increment so long as our entry is zero (mod p)
|
|
204
|
+
i += 1
|
|
205
|
+
if i == len(zvec): # If we make it through all entries then the solution is zero (mod p)
|
|
206
|
+
zero_flag = True
|
|
207
|
+
|
|
208
|
+
# DIAGNOSTIC
|
|
209
|
+
# print("IsLocalSolutionType: Finished the Zero congruence condition test \n")
|
|
210
|
+
|
|
211
|
+
if not zero_flag:
|
|
212
|
+
return <long> 0
|
|
213
|
+
|
|
214
|
+
# DIAGNOSTIC
|
|
215
|
+
# print("IsLocalSolutionType: Passed the Zero congruence condition test \n")
|
|
216
|
+
|
|
217
|
+
# Check if the solution satisfies the nzvec "nonzero" congruence conditions
|
|
218
|
+
# (nzvec is non-empty and its components index a nonzero vector mod p)
|
|
219
|
+
if nzvec is None:
|
|
220
|
+
nonzero_flag = True
|
|
221
|
+
elif len(nzvec) == 0:
|
|
222
|
+
nonzero_flag = False # Trivially no solutions in this case!
|
|
223
|
+
else:
|
|
224
|
+
nonzero_flag = False
|
|
225
|
+
i = 0
|
|
226
|
+
while not nonzero_flag and i < len(nzvec):
|
|
227
|
+
if w[nzvec[i]] % p:
|
|
228
|
+
nonzero_flag = True # The nonzero condition is satisfied when we find one nonzero entry
|
|
229
|
+
i += 1
|
|
230
|
+
|
|
231
|
+
if not nonzero_flag:
|
|
232
|
+
return <long> 0
|
|
233
|
+
|
|
234
|
+
# Check if the solution has the appropriate (local) type:
|
|
235
|
+
# -------------------------------------------------------
|
|
236
|
+
|
|
237
|
+
# 1: Check Good-type
|
|
238
|
+
for i in range(n):
|
|
239
|
+
if w[i] % p and Q[i, i] % p:
|
|
240
|
+
return <long> 1
|
|
241
|
+
if p == 2:
|
|
242
|
+
for i in range(n - 1):
|
|
243
|
+
if Q[i, i + 1] % p and (w[i] % p or w[i + 1] % p):
|
|
244
|
+
return <long> 1
|
|
245
|
+
|
|
246
|
+
# 2: Check Zero-type
|
|
247
|
+
Zero_flag = True
|
|
248
|
+
for i in range(n):
|
|
249
|
+
if w[i] % p:
|
|
250
|
+
Zero_flag = False
|
|
251
|
+
if Zero_flag:
|
|
252
|
+
return <long> 2
|
|
253
|
+
|
|
254
|
+
# Check if wS1 is zero or not
|
|
255
|
+
wS1_nonzero_flag = False
|
|
256
|
+
for i from 0 <= i < n:
|
|
257
|
+
|
|
258
|
+
# Compute the valuation of each index, allowing for off-diagonal terms
|
|
259
|
+
if Q[i, i] == 0:
|
|
260
|
+
if i == 0:
|
|
261
|
+
val = valuation(Q[i, i + 1], p) # Look at the term to the right
|
|
262
|
+
elif i == n - 1:
|
|
263
|
+
val = valuation(Q[i - 1, i], p) # Look at the term above
|
|
264
|
+
else:
|
|
265
|
+
val = valuation(Q[i, i + 1] + Q[i - 1, i], p) # Finds the valuation of the off-diagonal term since only one isn't zero
|
|
266
|
+
else:
|
|
267
|
+
val = valuation(Q[i, i], p)
|
|
268
|
+
|
|
269
|
+
# Test each index
|
|
270
|
+
if val == 1 and w[i] % p:
|
|
271
|
+
wS1_nonzero_flag = True
|
|
272
|
+
|
|
273
|
+
# 4: Check Bad-type I
|
|
274
|
+
if wS1_nonzero_flag:
|
|
275
|
+
return <long> 4
|
|
276
|
+
|
|
277
|
+
# 5: Check Bad-type II
|
|
278
|
+
if not wS1_nonzero_flag:
|
|
279
|
+
return <long> 5
|
|
280
|
+
|
|
281
|
+
# Error if we get here! =o
|
|
282
|
+
print(" Solution vector is " + str(w))
|
|
283
|
+
print(" and Q is \n" + str(Q) + "\n")
|
|
284
|
+
raise RuntimeError("Error in IsLocalSolutionType: Should not execute this line... =( \n")
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def count_all_local_good_types_normal_form(Q, p, k, m, zvec, nzvec):
|
|
288
|
+
r"""
|
|
289
|
+
This is an internal routine, which is called by
|
|
290
|
+
:meth:`sage.quadratic_forms.quadratic_form.QuadraticForm.local_good_density_congruence_even
|
|
291
|
+
QuadraticForm.local_good_density_congruence_even`. See the documentation of
|
|
292
|
+
that method for more details.
|
|
293
|
+
|
|
294
|
+
INPUT:
|
|
295
|
+
|
|
296
|
+
- ``Q`` -- quadratic form over `\ZZ` in local normal form at p with no zero blocks mod `p^k`
|
|
297
|
+
- ``p`` -- prime number > 0
|
|
298
|
+
- ``k`` -- integer > 0
|
|
299
|
+
- ``m`` -- non-negative integer (depending only on mod `p^k`)
|
|
300
|
+
- ``zvec``, ``nzvec`` -- list of integers in ``range(Q.dim())``, or ``None``
|
|
301
|
+
|
|
302
|
+
OUTPUT:
|
|
303
|
+
|
|
304
|
+
a non-negative integer giving the number of solutions of Good type.
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: # needs sage.libs.pari
|
|
309
|
+
sage: from sage.quadratic_forms.count_local_2 import count_all_local_good_types_normal_form
|
|
310
|
+
sage: Q = DiagonalQuadraticForm(ZZ, [1,2,3])
|
|
311
|
+
sage: Q_local_at2 = Q.local_normal_form(2)
|
|
312
|
+
sage: Q_local_at3 = Q.local_normal_form(3)
|
|
313
|
+
sage: count_all_local_good_types_normal_form(Q_local_at2, 2, 3, 3, None, None)
|
|
314
|
+
64
|
|
315
|
+
sage: count_all_local_good_types_normal_form(Q_local_at2, 2, 3, 3, [0], None)
|
|
316
|
+
32
|
|
317
|
+
sage: count_all_local_good_types_normal_form(Q_local_at3, 3, 2, 1, None, None)
|
|
318
|
+
54
|
|
319
|
+
"""
|
|
320
|
+
n = Q.dim()
|
|
321
|
+
if n == 0:
|
|
322
|
+
return 0
|
|
323
|
+
|
|
324
|
+
m_range = p**k
|
|
325
|
+
if zvec is None:
|
|
326
|
+
zvec = []
|
|
327
|
+
if nzvec is None:
|
|
328
|
+
nzvec = []
|
|
329
|
+
|
|
330
|
+
# determine local blocks
|
|
331
|
+
blocks = []
|
|
332
|
+
i = 0
|
|
333
|
+
while i < n - 1:
|
|
334
|
+
if Q[i, i + 1] != 0:
|
|
335
|
+
blocks += [(i, i + 1)]
|
|
336
|
+
i += 2
|
|
337
|
+
else:
|
|
338
|
+
blocks += [(i,)]
|
|
339
|
+
i += 1
|
|
340
|
+
if i < n:
|
|
341
|
+
blocks += [(i,)]
|
|
342
|
+
|
|
343
|
+
solutions = [[0, 0] for _ in range(m_range)] # [good, not good]
|
|
344
|
+
solutions[0][1] = 1
|
|
345
|
+
for b in blocks:
|
|
346
|
+
Q_part = Q.extract_variables(b)
|
|
347
|
+
zvec_local = range(len(b)) if (b[0] in zvec) else None
|
|
348
|
+
nzvec_local = range(len(b)) if (b[0] in nzvec) else None
|
|
349
|
+
|
|
350
|
+
solutions_part = [[0, 0] for _ in range(m_range)]
|
|
351
|
+
for m_part in range(m_range):
|
|
352
|
+
cnt = CountAllLocalTypesNaive(Q_part, p, k, m_part, zvec_local, nzvec_local)
|
|
353
|
+
solutions_part[m_part][0] = cnt[1]
|
|
354
|
+
solutions_part[m_part][1] = cnt[0] - cnt[1]
|
|
355
|
+
|
|
356
|
+
# compute convolution of counts
|
|
357
|
+
solutions_new = [[0, 0] for _ in range(m_range)]
|
|
358
|
+
for m1 in range(m_range):
|
|
359
|
+
for m2 in range(m_range):
|
|
360
|
+
total = (solutions[m1][0] + solutions[m1][1]) * (solutions_part[m2][0] + solutions_part[m2][1])
|
|
361
|
+
good = total - solutions[m1][1] * solutions_part[m2][1]
|
|
362
|
+
solutions_new[(m1 + m2) % m_range][0] += good
|
|
363
|
+
solutions_new[(m1 + m2) % m_range][1] += total - good
|
|
364
|
+
solutions = solutions_new
|
|
365
|
+
return solutions[m % m_range][0]
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Extra functions for quadratic forms
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from sage.matrix.constructor import matrix
|
|
7
|
+
from sage.structure.element import Matrix
|
|
8
|
+
from sage.arith.misc import legendre_symbol
|
|
9
|
+
from sage.rings.integer_ring import ZZ
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def is_triangular_number(n, return_value=False) -> bool | tuple:
|
|
13
|
+
"""
|
|
14
|
+
Return whether ``n`` is a triangular number.
|
|
15
|
+
|
|
16
|
+
A *triangular number* is a number of the form `k(k+1)/2` for some
|
|
17
|
+
nonnegative integer `n`. See :wikipedia:`Triangular_number`. The sequence
|
|
18
|
+
of triangular number is references as A000217 in the Online encyclopedia of
|
|
19
|
+
integer sequences (OEIS).
|
|
20
|
+
|
|
21
|
+
If you want to get the value of `k` for which `n=k(k+1)/2` set the
|
|
22
|
+
argument ``return_value`` to ``True`` (see the examples below).
|
|
23
|
+
|
|
24
|
+
INPUT:
|
|
25
|
+
|
|
26
|
+
- ``n`` -- integer
|
|
27
|
+
|
|
28
|
+
- ``return_value`` -- boolean (default: ``False``); if set to
|
|
29
|
+
``True`` the function returns a pair made of a boolean and the value `v`
|
|
30
|
+
such that `v(v+1)/2 = n`
|
|
31
|
+
|
|
32
|
+
EXAMPLES::
|
|
33
|
+
|
|
34
|
+
sage: is_triangular_number(3)
|
|
35
|
+
True
|
|
36
|
+
sage: is_triangular_number(3, return_value=True)
|
|
37
|
+
(True, 2)
|
|
38
|
+
|
|
39
|
+
sage: is_triangular_number(2)
|
|
40
|
+
False
|
|
41
|
+
sage: is_triangular_number(2, return_value=True)
|
|
42
|
+
(False, None)
|
|
43
|
+
|
|
44
|
+
sage: is_triangular_number(25*(25+1)/2)
|
|
45
|
+
True
|
|
46
|
+
|
|
47
|
+
sage: is_triangular_number(10^6 * (10^6 +1)/2, return_value=True)
|
|
48
|
+
(True, 1000000)
|
|
49
|
+
|
|
50
|
+
TESTS::
|
|
51
|
+
|
|
52
|
+
sage: F1 = [n for n in range(1,100*(100+1)/2)
|
|
53
|
+
....: if is_triangular_number(n)]
|
|
54
|
+
sage: F2 = [n*(n+1)/2 for n in range(1,100)]
|
|
55
|
+
sage: F1 == F2
|
|
56
|
+
True
|
|
57
|
+
|
|
58
|
+
sage: for n in range(1000):
|
|
59
|
+
....: res,v = is_triangular_number(n,return_value=True)
|
|
60
|
+
....: assert res == is_triangular_number(n)
|
|
61
|
+
....: if res: assert v*(v+1)/2 == n
|
|
62
|
+
"""
|
|
63
|
+
n = ZZ(n)
|
|
64
|
+
|
|
65
|
+
if return_value:
|
|
66
|
+
if n < 0:
|
|
67
|
+
return (False, None)
|
|
68
|
+
if n == 0:
|
|
69
|
+
return (True, ZZ.zero())
|
|
70
|
+
s, r = (8 * n + 1).sqrtrem()
|
|
71
|
+
if r:
|
|
72
|
+
return (False, None)
|
|
73
|
+
return (True, (s - 1) // 2)
|
|
74
|
+
|
|
75
|
+
return (8 * n + 1).is_square()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def extend_to_primitive(A_input):
|
|
79
|
+
r"""
|
|
80
|
+
Given a matrix (resp. list of vectors), extend it to a square
|
|
81
|
+
matrix (resp. list of vectors), such that its determinant is the
|
|
82
|
+
gcd of its minors (i.e. extend the basis of a lattice to a
|
|
83
|
+
"maximal" one in `\ZZ^n`).
|
|
84
|
+
|
|
85
|
+
Author(s): Gonzalo Tornaria and Jonathan Hanke.
|
|
86
|
+
|
|
87
|
+
INPUT:
|
|
88
|
+
|
|
89
|
+
- ``A_input`` -- a matrix or a list of length n vectors (in the same space)
|
|
90
|
+
|
|
91
|
+
OUTPUT: a square matrix or a list of n vectors (resp.)
|
|
92
|
+
|
|
93
|
+
EXAMPLES::
|
|
94
|
+
|
|
95
|
+
sage: A = Matrix(ZZ, 3, 2, range(6))
|
|
96
|
+
sage: extend_to_primitive(A) # needs sage.libs.pari
|
|
97
|
+
[ 0 1 -1]
|
|
98
|
+
[ 2 3 0]
|
|
99
|
+
[ 4 5 0]
|
|
100
|
+
|
|
101
|
+
sage: extend_to_primitive([vector([1,2,3])]) # needs sage.libs.pari
|
|
102
|
+
[(1, 2, 3), (0, 1, 1), (-1, 0, 0)]
|
|
103
|
+
"""
|
|
104
|
+
# Deal with a list of vectors
|
|
105
|
+
if not isinstance(A_input, Matrix):
|
|
106
|
+
A = matrix(A_input) # Make a matrix A with the given rows.
|
|
107
|
+
vec_output_flag = True
|
|
108
|
+
else:
|
|
109
|
+
A = A_input
|
|
110
|
+
vec_output_flag = False
|
|
111
|
+
|
|
112
|
+
# Arrange for A to have more columns than rows.
|
|
113
|
+
if A.is_square():
|
|
114
|
+
return A
|
|
115
|
+
if A.nrows() > A.ncols():
|
|
116
|
+
return extend_to_primitive(A.transpose()).transpose()
|
|
117
|
+
|
|
118
|
+
# Setup
|
|
119
|
+
k = A.nrows()
|
|
120
|
+
n = A.ncols()
|
|
121
|
+
R = A.base_ring()
|
|
122
|
+
|
|
123
|
+
# Smith normal form transformation, assuming more columns than rows
|
|
124
|
+
V = A.smith_form()[2]
|
|
125
|
+
|
|
126
|
+
# Extend the matrix in new coordinates, then switch back.
|
|
127
|
+
B = A * V
|
|
128
|
+
B_new = matrix(R, n - k, n)
|
|
129
|
+
for i in range(n - k):
|
|
130
|
+
B_new[i, n - i - 1] = 1
|
|
131
|
+
C = B.stack(B_new)
|
|
132
|
+
D = C * V**(-1)
|
|
133
|
+
|
|
134
|
+
# Normalize for a positive determinant
|
|
135
|
+
if D.det() < 0:
|
|
136
|
+
D.rescale_row(n - 1, -1)
|
|
137
|
+
|
|
138
|
+
# Return the current information
|
|
139
|
+
if vec_output_flag:
|
|
140
|
+
return D.rows()
|
|
141
|
+
else:
|
|
142
|
+
return D
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def least_quadratic_nonresidue(p):
|
|
146
|
+
r"""
|
|
147
|
+
Return the smallest positive integer quadratic non-residue in `\ZZ/p\ZZ` for primes `p>2`.
|
|
148
|
+
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: least_quadratic_nonresidue(5)
|
|
152
|
+
2
|
|
153
|
+
sage: [least_quadratic_nonresidue(p) for p in prime_range(3, 100)] # needs sage.libs.pari
|
|
154
|
+
[2, 2, 3, 2, 2, 3, 2, 5, 2, 3, 2, 3, 2, 5, 2, 2, 2, 2, 7, 5, 3, 2, 3, 5]
|
|
155
|
+
|
|
156
|
+
TESTS:
|
|
157
|
+
|
|
158
|
+
This raises an error if input is a positive composite integer. ::
|
|
159
|
+
|
|
160
|
+
sage: least_quadratic_nonresidue(20)
|
|
161
|
+
Traceback (most recent call last):
|
|
162
|
+
...
|
|
163
|
+
ValueError: p must be a prime number > 2
|
|
164
|
+
|
|
165
|
+
This raises an error if input is 2. This is because every integer is a
|
|
166
|
+
quadratic residue modulo 2. ::
|
|
167
|
+
|
|
168
|
+
sage: least_quadratic_nonresidue(2)
|
|
169
|
+
Traceback (most recent call last):
|
|
170
|
+
...
|
|
171
|
+
ValueError: there are no quadratic non-residues in Z/2Z
|
|
172
|
+
"""
|
|
173
|
+
p1 = abs(p)
|
|
174
|
+
|
|
175
|
+
# Deal with the prime p = 2 and |p| <= 1.
|
|
176
|
+
if p1 == 2:
|
|
177
|
+
raise ValueError("there are no quadratic non-residues in Z/2Z")
|
|
178
|
+
if p1 < 2:
|
|
179
|
+
raise ValueError("p must be a prime number > 2")
|
|
180
|
+
|
|
181
|
+
# Find the smallest non-residue mod p
|
|
182
|
+
# For 7/8 of primes the answer is 2, 3 or 5:
|
|
183
|
+
if p % 8 in (3, 5):
|
|
184
|
+
return ZZ(2)
|
|
185
|
+
if p % 12 in (5, 7):
|
|
186
|
+
return ZZ(3)
|
|
187
|
+
if p % 5 in (2, 3):
|
|
188
|
+
return ZZ(5)
|
|
189
|
+
# default case (first needed for p=71):
|
|
190
|
+
if not p.is_prime():
|
|
191
|
+
raise ValueError("p must be a prime number > 2")
|
|
192
|
+
from sage.arith.srange import xsrange
|
|
193
|
+
for r in xsrange(7, p):
|
|
194
|
+
if legendre_symbol(r, p) == -1:
|
|
195
|
+
return ZZ(r)
|