passagemath-modules 10.6.31rc3__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.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-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,952 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Fraction field elements of Ore polynomial rings
|
|
4
|
+
|
|
5
|
+
AUTHOR:
|
|
6
|
+
|
|
7
|
+
- Xavier Caruso (2020-05)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# ***************************************************************************
|
|
11
|
+
# Copyright (C) 2020 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
12
|
+
#
|
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
16
|
+
# (at your option) any later version.
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ***************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.categories.homset import Hom
|
|
21
|
+
from sage.categories.map import Map
|
|
22
|
+
from sage.categories.morphism import Morphism
|
|
23
|
+
from sage.misc.cachefunc import cached_method
|
|
24
|
+
from sage.misc.latex import latex
|
|
25
|
+
from sage.structure.element import AlgebraElement
|
|
26
|
+
from sage.structure.richcmp import op_EQ, op_NE, richcmp
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class OreFunction(AlgebraElement):
|
|
30
|
+
r"""
|
|
31
|
+
An element in a Ore function field.
|
|
32
|
+
"""
|
|
33
|
+
def __init__(self, parent, numerator, denominator=None, simplify=True):
|
|
34
|
+
r"""
|
|
35
|
+
Initialize this element.
|
|
36
|
+
|
|
37
|
+
TESTS::
|
|
38
|
+
|
|
39
|
+
sage: R.<t> = GF(5)[]
|
|
40
|
+
sage: der = R.derivation()
|
|
41
|
+
sage: A.<d> = R['d', der]
|
|
42
|
+
sage: K = A.fraction_field()
|
|
43
|
+
sage: f = K.random_element()
|
|
44
|
+
|
|
45
|
+
sage: # TestSuite(f).run()
|
|
46
|
+
"""
|
|
47
|
+
AlgebraElement.__init__(self, parent)
|
|
48
|
+
ring = parent._ring
|
|
49
|
+
numerator = ring(numerator)
|
|
50
|
+
if denominator is None:
|
|
51
|
+
denominator = ring.one()
|
|
52
|
+
else:
|
|
53
|
+
denominator = ring(denominator)
|
|
54
|
+
if not denominator:
|
|
55
|
+
raise ZeroDivisionError("denominator must be nonzero")
|
|
56
|
+
# We normalize the fraction
|
|
57
|
+
if numerator:
|
|
58
|
+
if simplify and parent._simplification:
|
|
59
|
+
D = numerator.left_gcd(denominator, monic=False)
|
|
60
|
+
numerator, _ = numerator.left_quo_rem(D)
|
|
61
|
+
denominator, _ = denominator.left_quo_rem(D)
|
|
62
|
+
s = denominator.leading_coefficient()
|
|
63
|
+
if s != 1:
|
|
64
|
+
s = ~s
|
|
65
|
+
numerator = s*numerator
|
|
66
|
+
denominator = s*denominator
|
|
67
|
+
self._numerator = numerator
|
|
68
|
+
self._denominator = denominator
|
|
69
|
+
else:
|
|
70
|
+
self._numerator = ring.zero()
|
|
71
|
+
self._denominator = ring.one()
|
|
72
|
+
|
|
73
|
+
def _repr_(self):
|
|
74
|
+
r"""
|
|
75
|
+
Return a string representation of this element.
|
|
76
|
+
|
|
77
|
+
EXAMPLES::
|
|
78
|
+
|
|
79
|
+
sage: # needs sage.rings.finite_rings
|
|
80
|
+
sage: k.<a> = GF(5^3)
|
|
81
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
82
|
+
sage: S.<x> = k['x', Frob]
|
|
83
|
+
sage: f = (x+a)^(-1) * (x^2 + a^2)
|
|
84
|
+
sage: f
|
|
85
|
+
(x + a)^(-1) * (x^2 + a^2)
|
|
86
|
+
|
|
87
|
+
TESTS::
|
|
88
|
+
|
|
89
|
+
sage: # needs sage.rings.finite_rings
|
|
90
|
+
sage: f = 1/x^3; f
|
|
91
|
+
x^(-3)
|
|
92
|
+
sage: f * x^5
|
|
93
|
+
x^2
|
|
94
|
+
"""
|
|
95
|
+
if not self._numerator:
|
|
96
|
+
return "0"
|
|
97
|
+
if self._denominator == 1:
|
|
98
|
+
return str(self._numerator)
|
|
99
|
+
if self._denominator.is_monomial():
|
|
100
|
+
s = "%s^(-%s)" % (self.parent().variable_name(), self._denominator.degree())
|
|
101
|
+
else:
|
|
102
|
+
s = "(%s)^(-1)" % self._denominator
|
|
103
|
+
if self._numerator == 1:
|
|
104
|
+
return s
|
|
105
|
+
if self._numerator._is_atomic():
|
|
106
|
+
return "%s * %s" % (s, self._numerator)
|
|
107
|
+
else:
|
|
108
|
+
return "%s * (%s)" % (s, self._numerator)
|
|
109
|
+
|
|
110
|
+
def _latex_(self):
|
|
111
|
+
r"""
|
|
112
|
+
Return a LaTeX representation of this element.
|
|
113
|
+
|
|
114
|
+
EXAMPLES::
|
|
115
|
+
|
|
116
|
+
sage: R.<t> = GF(5)[]
|
|
117
|
+
sage: der = R.derivation()
|
|
118
|
+
sage: S.<d> = R['d', der]
|
|
119
|
+
sage: f = (d+t)^(-1) * (d^2 + t^2)
|
|
120
|
+
sage: latex(f)
|
|
121
|
+
\left(d + t\right)^{-1} \cdot \left(d^{2} + t^{2}\right)
|
|
122
|
+
"""
|
|
123
|
+
if not self._numerator:
|
|
124
|
+
return "0"
|
|
125
|
+
if self._denominator == 1:
|
|
126
|
+
return latex(self._numerator)
|
|
127
|
+
if self._denominator.is_monomial():
|
|
128
|
+
s = "%s^{-%s}" % (self.parent().latex_variable_names()[0], self._denominator.degree())
|
|
129
|
+
else:
|
|
130
|
+
s = "\\left(%s\\right)^{-1}" % self._denominator
|
|
131
|
+
if self._numerator == 1:
|
|
132
|
+
return s
|
|
133
|
+
if self._numerator._is_atomic():
|
|
134
|
+
return "%s \\cdot %s" % (s, latex(self._numerator))
|
|
135
|
+
else:
|
|
136
|
+
return "%s \\cdot \\left(%s\\right)" % (s, latex(self._numerator))
|
|
137
|
+
|
|
138
|
+
def __hash__(self):
|
|
139
|
+
r"""
|
|
140
|
+
Return a hash of this element.
|
|
141
|
+
|
|
142
|
+
TESTS::
|
|
143
|
+
|
|
144
|
+
sage: # needs sage.rings.finite_rings
|
|
145
|
+
sage: k.<a> = GF(5^3)
|
|
146
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
147
|
+
sage: S.<x> = k['x', Frob]
|
|
148
|
+
sage: K = S.fraction_field()
|
|
149
|
+
sage: f = K.random_element()
|
|
150
|
+
sage: hash(f) # random
|
|
151
|
+
1700763101013238501
|
|
152
|
+
"""
|
|
153
|
+
return hash((self._numerator, self._denominator))
|
|
154
|
+
|
|
155
|
+
def _richcmp_(self, other, op):
|
|
156
|
+
r"""
|
|
157
|
+
Compare this element with ``other`` for the comparison
|
|
158
|
+
operator ``op``.
|
|
159
|
+
|
|
160
|
+
TESTS::
|
|
161
|
+
|
|
162
|
+
sage: # needs sage.rings.function_field
|
|
163
|
+
sage: R.<t> = QQ[]
|
|
164
|
+
sage: sigma = R.hom([t+1])
|
|
165
|
+
sage: der = R.derivation(1, twist=sigma)
|
|
166
|
+
sage: S.<delta> = R['delta', der]
|
|
167
|
+
sage: K = S.fraction_field()
|
|
168
|
+
sage: P = K.random_element()
|
|
169
|
+
sage: Q = K.random_element()
|
|
170
|
+
sage: D = K.random_element()
|
|
171
|
+
sage: Q == 0 or D == 0 or (P*D) / (Q*D) == P/Q # long time
|
|
172
|
+
True
|
|
173
|
+
"""
|
|
174
|
+
if self.parent()._simplification:
|
|
175
|
+
return richcmp((self._numerator, self._denominator), (other._numerator, other._denominator), op)
|
|
176
|
+
if op == op_EQ or op == op_NE:
|
|
177
|
+
_, U, V = self._denominator.left_xlcm(other._denominator)
|
|
178
|
+
return richcmp(U * self._numerator, V * other._numerator, op)
|
|
179
|
+
return NotImplemented
|
|
180
|
+
|
|
181
|
+
def left_denominator(self):
|
|
182
|
+
r"""
|
|
183
|
+
Return `s` if this element reads `s^{-1} t`.
|
|
184
|
+
|
|
185
|
+
WARNING:
|
|
186
|
+
|
|
187
|
+
When the twisting morphism is bijective, there is a unique
|
|
188
|
+
irreducible fraction of the form `s^{-1} t` representing this
|
|
189
|
+
element. Here irreducible means that `s` and `t` have no
|
|
190
|
+
nontrivial common left divisor.
|
|
191
|
+
Under this additional assumption, this method always returns
|
|
192
|
+
this distinguished denominator `s`.
|
|
193
|
+
|
|
194
|
+
On the contrary, when the twisting morphism is not bijective,
|
|
195
|
+
this method returns the denominator of *some* fraction
|
|
196
|
+
representing the input element.
|
|
197
|
+
However, the software guarantees that the method :meth:`right_numerator`
|
|
198
|
+
outputs the numerator of the *same* fraction.
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: # needs sage.rings.finite_rings
|
|
203
|
+
sage: k.<a> = GF(5^3)
|
|
204
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
205
|
+
sage: S.<x> = k['x', Frob]
|
|
206
|
+
sage: s = x + a
|
|
207
|
+
sage: t = x^2 + a*x + a^2
|
|
208
|
+
sage: f = s^(-1) * t
|
|
209
|
+
sage: f.left_denominator()
|
|
210
|
+
x + a
|
|
211
|
+
|
|
212
|
+
In the example below, a simplification occurs::
|
|
213
|
+
|
|
214
|
+
sage: # needs sage.rings.finite_rings
|
|
215
|
+
sage: u = S.random_element(degree=2)
|
|
216
|
+
sage: g = (u*s)^(-1) * (u*t)
|
|
217
|
+
sage: g.left_denominator()
|
|
218
|
+
x + a
|
|
219
|
+
|
|
220
|
+
When the twisting morphism is not invertible, simplifications
|
|
221
|
+
do not occur in general::
|
|
222
|
+
|
|
223
|
+
sage: R.<z> = GF(11)[]
|
|
224
|
+
sage: sigma = R.hom([z^2])
|
|
225
|
+
sage: S.<x> = R['x', sigma]
|
|
226
|
+
sage: s = (x + z)^2
|
|
227
|
+
sage: t = (x + z) * (x^2 + z^2)
|
|
228
|
+
sage: f = s^(-1) * t # needs sage.rings.function_field
|
|
229
|
+
sage: f.left_denominator() # needs sage.rings.function_field
|
|
230
|
+
x^2 + (z^2 + z)*x + z^2
|
|
231
|
+
|
|
232
|
+
However, the following always holds true::
|
|
233
|
+
|
|
234
|
+
sage: f == f.left_denominator()^(-1) * f.right_numerator() # needs sage.rings.function_field
|
|
235
|
+
True
|
|
236
|
+
|
|
237
|
+
.. SEEALSO::
|
|
238
|
+
|
|
239
|
+
:meth:`right_numerator`, :meth:`left_numerator`, :meth:`right_denominator`
|
|
240
|
+
"""
|
|
241
|
+
return self._denominator
|
|
242
|
+
|
|
243
|
+
def right_numerator(self):
|
|
244
|
+
r"""
|
|
245
|
+
Return `t` if this element reads `s^{-1} t`.
|
|
246
|
+
|
|
247
|
+
WARNING:
|
|
248
|
+
|
|
249
|
+
When the twisting morphism is bijective, there is a unique
|
|
250
|
+
irreducible fraction of the form `s^{-1} t` representing this
|
|
251
|
+
element. Here irreducible means that `s` and `t` have no
|
|
252
|
+
nontrivial common left divisor.
|
|
253
|
+
Under this additional assumption, this method always returns
|
|
254
|
+
this distinguished numerator `t`.
|
|
255
|
+
|
|
256
|
+
On the contrary, when the twisting morphism is not bijective,
|
|
257
|
+
this method returns the numerator of *some* fraction
|
|
258
|
+
representing the input element.
|
|
259
|
+
However, the software guarantees that the method :meth:`left_denominator`
|
|
260
|
+
outputs the numerator of the *same* fraction.
|
|
261
|
+
|
|
262
|
+
EXAMPLES::
|
|
263
|
+
|
|
264
|
+
sage: # needs sage.rings.finite_rings
|
|
265
|
+
sage: k.<a> = GF(5^3)
|
|
266
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
267
|
+
sage: S.<x> = k['x', Frob]
|
|
268
|
+
sage: s = x + a
|
|
269
|
+
sage: t = x^2 + a*x + a^2
|
|
270
|
+
sage: f = s^(-1) * t
|
|
271
|
+
sage: f.right_numerator()
|
|
272
|
+
x^2 + a*x + a^2
|
|
273
|
+
|
|
274
|
+
In the example below, a simplification occurs::
|
|
275
|
+
|
|
276
|
+
sage: # needs sage.rings.finite_rings
|
|
277
|
+
sage: u = S.random_element(degree=2)
|
|
278
|
+
sage: g = (u*s)^(-1) * (u*t)
|
|
279
|
+
sage: g.right_numerator()
|
|
280
|
+
x^2 + a*x + a^2
|
|
281
|
+
|
|
282
|
+
.. SEEALSO::
|
|
283
|
+
|
|
284
|
+
:meth:`left_denominator`, :meth:`left_numerator`, :meth:`right_denominator`
|
|
285
|
+
"""
|
|
286
|
+
return self._numerator
|
|
287
|
+
|
|
288
|
+
@cached_method
|
|
289
|
+
def _reverse_fraction(self):
|
|
290
|
+
r"""
|
|
291
|
+
Return the pair `(s,t)` if this element reads `t s^{-1}`.
|
|
292
|
+
|
|
293
|
+
This is a helper function. Do not call it directly.
|
|
294
|
+
|
|
295
|
+
TESTS::
|
|
296
|
+
|
|
297
|
+
sage: # needs sage.rings.finite_rings
|
|
298
|
+
sage: k.<a> = GF(11^3)
|
|
299
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
300
|
+
sage: der = k.derivation(a+1, twist=Frob)
|
|
301
|
+
sage: S.<x> = k['x', der]
|
|
302
|
+
sage: P = S.random_element(degree=5)
|
|
303
|
+
sage: Q = S.random_element(degree=5)
|
|
304
|
+
sage: f = P / Q
|
|
305
|
+
sage: f == f.left_numerator() / f.right_denominator() # indirect doctest
|
|
306
|
+
True
|
|
307
|
+
"""
|
|
308
|
+
_, denominator, numerator = self._numerator.right_xlcm(self._denominator, monic=False)
|
|
309
|
+
d = denominator.degree()
|
|
310
|
+
s = ~(denominator.leading_coefficient())
|
|
311
|
+
morphism = self.parent().twisting_morphism(-d)
|
|
312
|
+
if morphism is not None:
|
|
313
|
+
s = morphism(s)
|
|
314
|
+
numerator = numerator * s
|
|
315
|
+
denominator = denominator * s
|
|
316
|
+
return numerator, denominator
|
|
317
|
+
|
|
318
|
+
def right_denominator(self):
|
|
319
|
+
r"""
|
|
320
|
+
Return `s` if this element reads `t s^{-1}`.
|
|
321
|
+
|
|
322
|
+
WARNING:
|
|
323
|
+
|
|
324
|
+
When the twisting morphism is bijective, there is a unique
|
|
325
|
+
irreducible fraction of the form `t s^{-1}` representing this
|
|
326
|
+
element. Here irreducible means that `s` and `t` have no
|
|
327
|
+
nontrivial common right divisor.
|
|
328
|
+
Under this additional assumption, this method always returns
|
|
329
|
+
this distinguished denominator `s`.
|
|
330
|
+
|
|
331
|
+
On the contrary, when the twisting morphism is not bijective,
|
|
332
|
+
the existence of the writing `t s^{-1}` is not guaranteed in
|
|
333
|
+
general. In this case, this method raises an error.
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: # needs sage.rings.finite_rings
|
|
338
|
+
sage: k.<a> = GF(5^3)
|
|
339
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
340
|
+
sage: S.<x> = k['x', Frob]
|
|
341
|
+
sage: s = x + a
|
|
342
|
+
sage: t = x^2 + a*x + a^2
|
|
343
|
+
sage: f = t/s
|
|
344
|
+
sage: f.right_denominator()
|
|
345
|
+
x + a
|
|
346
|
+
|
|
347
|
+
In the example below, a simplification occurs::
|
|
348
|
+
|
|
349
|
+
sage: # needs sage.rings.finite_rings
|
|
350
|
+
sage: u = S.random_element(degree=2)
|
|
351
|
+
sage: g = (t*u) / (s*u)
|
|
352
|
+
sage: g.right_denominator()
|
|
353
|
+
x + a
|
|
354
|
+
|
|
355
|
+
.. SEEALSO::
|
|
356
|
+
|
|
357
|
+
:meth:`left_numerator`, :meth:`left_denominator`, :meth:`right_numerator`
|
|
358
|
+
|
|
359
|
+
TESTS::
|
|
360
|
+
|
|
361
|
+
sage: R.<z> = GF(11)[]
|
|
362
|
+
sage: sigma = R.hom([z^2])
|
|
363
|
+
sage: S.<x> = R['x', sigma]
|
|
364
|
+
sage: f = (x + z) / (x - z) # needs sage.rings.function_field
|
|
365
|
+
sage: f.right_denominator() # needs sage.rings.function_field
|
|
366
|
+
Traceback (most recent call last):
|
|
367
|
+
...
|
|
368
|
+
NotImplementedError: inversion of the twisting morphism Ring endomorphism
|
|
369
|
+
of Fraction Field of Univariate Polynomial Ring in z over Finite Field of size 11
|
|
370
|
+
Defn: z |--> z^2
|
|
371
|
+
"""
|
|
372
|
+
return self._reverse_fraction()[1]
|
|
373
|
+
|
|
374
|
+
def left_numerator(self):
|
|
375
|
+
r"""
|
|
376
|
+
Return `t` if this element reads `t s^{-1}`.
|
|
377
|
+
|
|
378
|
+
WARNING:
|
|
379
|
+
|
|
380
|
+
When the twisting morphism is bijective, there is a unique
|
|
381
|
+
irreducible fraction of the form `t s^{-1}` representing this
|
|
382
|
+
element. Here irreducible means that `s` and `t` have no
|
|
383
|
+
nontrivial common right divisor.
|
|
384
|
+
Under this additional assumption, this method always returns
|
|
385
|
+
this distinguished numerator `t`.
|
|
386
|
+
|
|
387
|
+
On the contrary, when the twisting morphism is not bijective,
|
|
388
|
+
the existence of the writing `t s^{-1}` is not guaranteed in
|
|
389
|
+
general. In this case, this method raises an error.
|
|
390
|
+
|
|
391
|
+
EXAMPLES::
|
|
392
|
+
|
|
393
|
+
sage: # needs sage.rings.finite_rings
|
|
394
|
+
sage: k.<a> = GF(5^3)
|
|
395
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
396
|
+
sage: S.<x> = k['x', Frob]
|
|
397
|
+
sage: s = x + a
|
|
398
|
+
sage: t = x^2 + a*x + a^2
|
|
399
|
+
sage: f = t/s
|
|
400
|
+
sage: f.left_numerator()
|
|
401
|
+
x^2 + a*x + a^2
|
|
402
|
+
|
|
403
|
+
In the example below, a simplification occurs::
|
|
404
|
+
|
|
405
|
+
sage: # needs sage.rings.finite_rings
|
|
406
|
+
sage: u = S.random_element(degree=2)
|
|
407
|
+
sage: g = (t*u) / (s*u)
|
|
408
|
+
sage: g.left_numerator()
|
|
409
|
+
x^2 + a*x + a^2
|
|
410
|
+
"""
|
|
411
|
+
return self._reverse_fraction()[0]
|
|
412
|
+
|
|
413
|
+
def is_zero(self):
|
|
414
|
+
r"""
|
|
415
|
+
Return ``True`` if this element is equal to zero.
|
|
416
|
+
|
|
417
|
+
EXAMPLES::
|
|
418
|
+
|
|
419
|
+
sage: R.<t> = GF(3)[]
|
|
420
|
+
sage: der = R.derivation()
|
|
421
|
+
sage: A.<d> = R['x', der]
|
|
422
|
+
sage: f = t/d
|
|
423
|
+
sage: f.is_zero()
|
|
424
|
+
False
|
|
425
|
+
sage: (f-f).is_zero()
|
|
426
|
+
True
|
|
427
|
+
"""
|
|
428
|
+
return self._numerator.is_zero()
|
|
429
|
+
|
|
430
|
+
def _add_(self, other):
|
|
431
|
+
r"""
|
|
432
|
+
Return the sum of this element and ``other``.
|
|
433
|
+
|
|
434
|
+
INPUT:
|
|
435
|
+
|
|
436
|
+
- ``other`` -- a Ore function
|
|
437
|
+
|
|
438
|
+
TESTS::
|
|
439
|
+
|
|
440
|
+
sage: # needs sage.rings.finite_rings
|
|
441
|
+
sage: k.<a> = GF(5^2)
|
|
442
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
443
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
444
|
+
sage: S.<x> = k['x', der]
|
|
445
|
+
sage: K = S.fraction_field()
|
|
446
|
+
sage: f = K.random_element()
|
|
447
|
+
sage: g = K.random_element()
|
|
448
|
+
sage: h = K.random_element()
|
|
449
|
+
sage: f + g == g + f
|
|
450
|
+
True
|
|
451
|
+
sage: f + (g + h) == (f + g) + h
|
|
452
|
+
True
|
|
453
|
+
"""
|
|
454
|
+
denominator, U, V = self._denominator.left_xlcm(other._denominator)
|
|
455
|
+
numerator = U * self._numerator + V * other._numerator
|
|
456
|
+
return self.parent()(numerator, denominator)
|
|
457
|
+
|
|
458
|
+
def _sub_(self, other):
|
|
459
|
+
r"""
|
|
460
|
+
Return the subtraction of this element and ``other``.
|
|
461
|
+
|
|
462
|
+
INPUT:
|
|
463
|
+
|
|
464
|
+
- ``other`` -- a Ore function
|
|
465
|
+
|
|
466
|
+
TESTS::
|
|
467
|
+
|
|
468
|
+
sage: # needs sage.rings.finite_rings
|
|
469
|
+
sage: k.<a> = GF(5^2)
|
|
470
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
471
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
472
|
+
sage: S.<x> = k['x', der]
|
|
473
|
+
sage: K = S.fraction_field()
|
|
474
|
+
sage: f = K.random_element()
|
|
475
|
+
sage: g = K.random_element()
|
|
476
|
+
sage: h = K.random_element()
|
|
477
|
+
sage: f - (g - h) == (f - g) + h
|
|
478
|
+
True
|
|
479
|
+
"""
|
|
480
|
+
denominator, U, V = self._denominator.left_xlcm(other._denominator)
|
|
481
|
+
numerator = U * self._numerator - V * other._numerator
|
|
482
|
+
return self.parent()(numerator, denominator)
|
|
483
|
+
|
|
484
|
+
def _neg_(self):
|
|
485
|
+
r"""
|
|
486
|
+
Return the opposite of this element.
|
|
487
|
+
|
|
488
|
+
TESTS::
|
|
489
|
+
|
|
490
|
+
sage: # needs sage.rings.finite_rings
|
|
491
|
+
sage: k.<a> = GF(5^2)
|
|
492
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
493
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
494
|
+
sage: S.<x> = k['x', der]
|
|
495
|
+
sage: K = S.fraction_field()
|
|
496
|
+
sage: f = K.random_element()
|
|
497
|
+
sage: g = -f
|
|
498
|
+
sage: (f+g).is_zero()
|
|
499
|
+
True
|
|
500
|
+
"""
|
|
501
|
+
return self.parent()(-self._numerator, self._denominator, simplify=False)
|
|
502
|
+
|
|
503
|
+
def _mul_(self, other):
|
|
504
|
+
r"""
|
|
505
|
+
Return the product of this element and ``other``.
|
|
506
|
+
|
|
507
|
+
INPUT:
|
|
508
|
+
|
|
509
|
+
- ``other`` -- a Ore function
|
|
510
|
+
|
|
511
|
+
TESTS::
|
|
512
|
+
|
|
513
|
+
sage: # needs sage.rings.finite_rings
|
|
514
|
+
sage: k.<a> = GF(5^2)
|
|
515
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
516
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
517
|
+
sage: S.<x> = k['x', der]
|
|
518
|
+
sage: K = S.fraction_field()
|
|
519
|
+
sage: f = K.random_element()
|
|
520
|
+
sage: g = K.random_element()
|
|
521
|
+
sage: h = K.random_element()
|
|
522
|
+
sage: (f * g) * h == f * (g * h)
|
|
523
|
+
True
|
|
524
|
+
sage: f * (g + h) == f*g + f*h
|
|
525
|
+
True
|
|
526
|
+
sage: (f + g) * h == f*h + g*h
|
|
527
|
+
True
|
|
528
|
+
"""
|
|
529
|
+
if self.is_zero():
|
|
530
|
+
return self
|
|
531
|
+
if other.is_zero():
|
|
532
|
+
return other
|
|
533
|
+
L, U, V = self._numerator.left_xlcm(other._denominator, monic=False)
|
|
534
|
+
denominator = U * self._denominator
|
|
535
|
+
numerator = V * other._numerator
|
|
536
|
+
return self.parent()(numerator, denominator)
|
|
537
|
+
|
|
538
|
+
def _div_(self, other):
|
|
539
|
+
r"""
|
|
540
|
+
Return the division of this element by ``other``.
|
|
541
|
+
|
|
542
|
+
INPUT:
|
|
543
|
+
|
|
544
|
+
- ``other`` -- a Ore function
|
|
545
|
+
|
|
546
|
+
TESTS::
|
|
547
|
+
|
|
548
|
+
sage: # needs sage.rings.finite_rings
|
|
549
|
+
sage: k.<a> = GF(5^2)
|
|
550
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
551
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
552
|
+
sage: S.<x> = k['x', der]
|
|
553
|
+
sage: K = S.fraction_field()
|
|
554
|
+
sage: f = K.random_element()
|
|
555
|
+
sage: g = K.random_element()
|
|
556
|
+
sage: h = K.random_element()
|
|
557
|
+
sage: g == 0 or h == 0 or f / (g / h) == f*h / g
|
|
558
|
+
True
|
|
559
|
+
sage: 0/f
|
|
560
|
+
0
|
|
561
|
+
sage: f/0
|
|
562
|
+
Traceback (most recent call last):
|
|
563
|
+
...
|
|
564
|
+
ZeroDivisionError: cannot divide by zero
|
|
565
|
+
|
|
566
|
+
We check that :issue:`32109` is fixed::
|
|
567
|
+
|
|
568
|
+
sage: K(0)/K(0) # needs sage.rings.finite_rings
|
|
569
|
+
Traceback (most recent call last):
|
|
570
|
+
...
|
|
571
|
+
ZeroDivisionError: cannot divide by zero
|
|
572
|
+
"""
|
|
573
|
+
if not other._numerator:
|
|
574
|
+
raise ZeroDivisionError("cannot divide by zero")
|
|
575
|
+
if not self._numerator:
|
|
576
|
+
return self
|
|
577
|
+
L, U, V = self._numerator.left_xlcm(other._numerator, monic=False)
|
|
578
|
+
denominator = U * self._denominator
|
|
579
|
+
numerator = V * other._denominator
|
|
580
|
+
return self.parent()(numerator, denominator)
|
|
581
|
+
|
|
582
|
+
def __invert__(self):
|
|
583
|
+
r"""
|
|
584
|
+
Return the inverse of this element.
|
|
585
|
+
|
|
586
|
+
TESTS::
|
|
587
|
+
|
|
588
|
+
sage: # needs sage.rings.finite_rings
|
|
589
|
+
sage: k.<a> = GF(5^2)
|
|
590
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
591
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
592
|
+
sage: S.<x> = k['x', der]
|
|
593
|
+
sage: K = S.fraction_field()
|
|
594
|
+
sage: f = K.random_element()
|
|
595
|
+
sage: g = ~f
|
|
596
|
+
sage: f * g
|
|
597
|
+
1
|
|
598
|
+
sage: ~K(0)
|
|
599
|
+
Traceback (most recent call last):
|
|
600
|
+
...
|
|
601
|
+
ZeroDivisionError: cannot divide by zero
|
|
602
|
+
"""
|
|
603
|
+
if not self._numerator:
|
|
604
|
+
raise ZeroDivisionError("cannot divide by zero")
|
|
605
|
+
return self.parent()(self._denominator, self._numerator)
|
|
606
|
+
|
|
607
|
+
def hilbert_shift(self, s, var=None):
|
|
608
|
+
r"""
|
|
609
|
+
Return this Ore function with variable shifted by `s`,
|
|
610
|
+
i.e. if this Ore function is `f(x)`, return `f(x+s)`.
|
|
611
|
+
|
|
612
|
+
INPUT:
|
|
613
|
+
|
|
614
|
+
- ``s`` -- an element in the base ring
|
|
615
|
+
|
|
616
|
+
- ``var`` -- string; the variable name
|
|
617
|
+
|
|
618
|
+
EXAMPLES::
|
|
619
|
+
|
|
620
|
+
sage: R.<t> = GF(7)[]
|
|
621
|
+
sage: der = R.derivation()
|
|
622
|
+
sage: A.<d> = R['d', der]
|
|
623
|
+
sage: K = A.fraction_field()
|
|
624
|
+
|
|
625
|
+
sage: f = 1 / (d-t)
|
|
626
|
+
sage: f.hilbert_shift(t)
|
|
627
|
+
d^(-1)
|
|
628
|
+
|
|
629
|
+
One can specify another variable name::
|
|
630
|
+
|
|
631
|
+
sage: f.hilbert_shift(t, var='x')
|
|
632
|
+
x^(-1)
|
|
633
|
+
|
|
634
|
+
When the twisting morphism is not trivial, the output lies
|
|
635
|
+
in a different Ore polynomial ring::
|
|
636
|
+
|
|
637
|
+
sage: # needs sage.rings.finite_rings
|
|
638
|
+
sage: k.<a> = GF(5^3)
|
|
639
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
640
|
+
sage: S.<x> = k['x', Frob]
|
|
641
|
+
sage: K = S.fraction_field()
|
|
642
|
+
sage: f = (x-a)^(-2)
|
|
643
|
+
sage: g = f.hilbert_shift(a); g
|
|
644
|
+
x^(-2)
|
|
645
|
+
sage: g.parent()
|
|
646
|
+
Ore Function Field in x over Finite Field in a of size 5^3
|
|
647
|
+
twisted by a |--> a^5 and a*([a |--> a^5] - id)
|
|
648
|
+
sage: g.parent() is S
|
|
649
|
+
False
|
|
650
|
+
|
|
651
|
+
This behavior ensures that the Hilbert shift by a fixed element
|
|
652
|
+
defines a homomorphism of fields::
|
|
653
|
+
|
|
654
|
+
sage: # needs sage.rings.finite_rings
|
|
655
|
+
sage: U = K.random_element(degree=5)
|
|
656
|
+
sage: V = K.random_element(degree=5)
|
|
657
|
+
sage: s = k.random_element()
|
|
658
|
+
sage: (U+V).hilbert_shift(s) == U.hilbert_shift(s) + V.hilbert_shift(s)
|
|
659
|
+
True
|
|
660
|
+
sage: (U*V).hilbert_shift(s) == U.hilbert_shift(s) * V.hilbert_shift(s)
|
|
661
|
+
True
|
|
662
|
+
"""
|
|
663
|
+
numerator = self._numerator.hilbert_shift(s, var)
|
|
664
|
+
denominator = self._denominator.hilbert_shift(s, var)
|
|
665
|
+
parent = numerator.parent().fraction_field()
|
|
666
|
+
return parent(numerator, denominator, simplify=False)
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
class ConstantOreFunctionSection(Map):
|
|
670
|
+
r"""
|
|
671
|
+
Representation of the canonical homomorphism from the constants of a Ore
|
|
672
|
+
function field to the base field.
|
|
673
|
+
|
|
674
|
+
This class is needed by the coercion system.
|
|
675
|
+
|
|
676
|
+
EXAMPLES::
|
|
677
|
+
|
|
678
|
+
sage: # needs sage.rings.finite_rings
|
|
679
|
+
sage: from sage.rings.polynomial.ore_polynomial_element import ConstantOrePolynomialSection
|
|
680
|
+
sage: k.<a> = GF(5^3)
|
|
681
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
682
|
+
sage: S.<x> = k['x', Frob]
|
|
683
|
+
sage: K = S.fraction_field()
|
|
684
|
+
sage: iota = K.coerce_map_from(k)
|
|
685
|
+
sage: sigma = iota.section(); sigma
|
|
686
|
+
Generic map:
|
|
687
|
+
From: Ore Function Field in x over Finite Field in a of size 5^3
|
|
688
|
+
twisted by a |--> a^5
|
|
689
|
+
To: Finite Field in a of size 5^3
|
|
690
|
+
"""
|
|
691
|
+
def _call_(self, x):
|
|
692
|
+
r"""
|
|
693
|
+
Return `x` viewed in the base field,
|
|
694
|
+
or raise an error if `x` is not a constant Ore function.
|
|
695
|
+
|
|
696
|
+
TESTS::
|
|
697
|
+
|
|
698
|
+
sage: R.<t> = QQ[]
|
|
699
|
+
sage: F = R.fraction_field()
|
|
700
|
+
sage: sigma = R.hom([t^2])
|
|
701
|
+
sage: S.<x> = R['x', sigma]
|
|
702
|
+
sage: P = S._random_nonzero_element()
|
|
703
|
+
sage: f = (t*P) / P # needs sage.rings.function_field
|
|
704
|
+
sage: F(f) # needs sage.rings.function_field
|
|
705
|
+
t
|
|
706
|
+
sage: g = x / (x+t) # needs sage.rings.function_field
|
|
707
|
+
sage: F(g) # needs sage.rings.function_field
|
|
708
|
+
Traceback (most recent call last):
|
|
709
|
+
...
|
|
710
|
+
TypeError: (x + t^2)^(-1) * x is not a constant function
|
|
711
|
+
"""
|
|
712
|
+
numerator = x._numerator
|
|
713
|
+
denominator = x._denominator
|
|
714
|
+
if numerator.degree() == denominator.degree() and denominator.right_divides(numerator):
|
|
715
|
+
return numerator.leading_coefficient() / denominator.leading_coefficient()
|
|
716
|
+
raise TypeError(f"{x} is not a constant function")
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
class OreFunctionBaseringInjection(Morphism):
|
|
720
|
+
r"""
|
|
721
|
+
Representation of the canonical homomorphism from a field `k` into a Ore
|
|
722
|
+
function field over `k`.
|
|
723
|
+
|
|
724
|
+
This class is needed by the coercion system.
|
|
725
|
+
"""
|
|
726
|
+
def __init__(self, domain, codomain):
|
|
727
|
+
r"""
|
|
728
|
+
Initialize this morphism.
|
|
729
|
+
|
|
730
|
+
EXAMPLES::
|
|
731
|
+
|
|
732
|
+
sage: R.<t> = QQ[]
|
|
733
|
+
sage: sigma = R.hom([t+1])
|
|
734
|
+
sage: S.<x> = R['x',sigma]
|
|
735
|
+
sage: K = S.fraction_field() # needs sage.rings.function_field
|
|
736
|
+
sage: K.coerce_map_from(K.base_ring()) # indirect doctest # needs sage.rings.function_field
|
|
737
|
+
Ore Function base injection morphism:
|
|
738
|
+
From: Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
739
|
+
To: Ore Function Field in x over Fraction Field of Univariate Polynomial Ring in t over Rational Field twisted by t |--> t + 1
|
|
740
|
+
"""
|
|
741
|
+
assert codomain.base_ring() is domain, \
|
|
742
|
+
"the domain of the injection must be the base ring of the Ore function field"
|
|
743
|
+
Morphism.__init__(self, Hom(domain,codomain))
|
|
744
|
+
self._an_element = codomain.gen()
|
|
745
|
+
self._repr_type_str = "Ore Function base injection"
|
|
746
|
+
|
|
747
|
+
def an_element(self):
|
|
748
|
+
r"""
|
|
749
|
+
Return an element of the codomain of the ring homomorphism.
|
|
750
|
+
|
|
751
|
+
EXAMPLES::
|
|
752
|
+
|
|
753
|
+
sage: # needs sage.rings.finite_rings
|
|
754
|
+
sage: k.<t> = GF(5^3)
|
|
755
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
756
|
+
sage: S.<x> = k['x',Frob]
|
|
757
|
+
sage: K = S.fraction_field()
|
|
758
|
+
sage: m = K.coerce_map_from(k)
|
|
759
|
+
sage: m.an_element()
|
|
760
|
+
x
|
|
761
|
+
"""
|
|
762
|
+
return self._an_element
|
|
763
|
+
|
|
764
|
+
def _call_(self, x):
|
|
765
|
+
r"""
|
|
766
|
+
Return the constant Ore function equal to `x`.
|
|
767
|
+
|
|
768
|
+
INPUT:
|
|
769
|
+
|
|
770
|
+
- ``e`` -- element in the base ring
|
|
771
|
+
|
|
772
|
+
TESTS::
|
|
773
|
+
|
|
774
|
+
sage: # needs sage.rings.finite_rings
|
|
775
|
+
sage: k.<t> = GF(5^3)
|
|
776
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
777
|
+
sage: S.<x> = k['x',Frob]
|
|
778
|
+
sage: K = S.fraction_field()
|
|
779
|
+
sage: m = K.coerce_map_from(k)
|
|
780
|
+
sage: m(t)
|
|
781
|
+
t
|
|
782
|
+
sage: m(t).parent()
|
|
783
|
+
Ore Function Field in x over Finite Field in t of size 5^3 twisted by t |--> t^5
|
|
784
|
+
"""
|
|
785
|
+
codomain = self.codomain()
|
|
786
|
+
try:
|
|
787
|
+
return codomain._element_constructor_(x)
|
|
788
|
+
except AttributeError:
|
|
789
|
+
return codomain(x)
|
|
790
|
+
|
|
791
|
+
def section(self):
|
|
792
|
+
r"""
|
|
793
|
+
Return the canonical homomorphism from the constants of a Ore
|
|
794
|
+
function filed to its base field.
|
|
795
|
+
|
|
796
|
+
TESTS::
|
|
797
|
+
|
|
798
|
+
sage: # needs sage.rings.finite_rings
|
|
799
|
+
sage: k.<t> = GF(5^3)
|
|
800
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
801
|
+
sage: S.<x> = k['x',Frob]
|
|
802
|
+
sage: K = S.fraction_field()
|
|
803
|
+
sage: m = K.coerce_map_from(k)
|
|
804
|
+
sage: m.section()
|
|
805
|
+
Generic map:
|
|
806
|
+
From: Ore Function Field in x over Finite Field in t of size 5^3
|
|
807
|
+
twisted by t |--> t^5
|
|
808
|
+
To: Finite Field in t of size 5^3
|
|
809
|
+
"""
|
|
810
|
+
return ConstantOreFunctionSection(self.codomain(), self.domain())
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
# Ore functions over Ore function field with finite index center
|
|
814
|
+
################################################################
|
|
815
|
+
|
|
816
|
+
class OreFunction_with_large_center(OreFunction):
|
|
817
|
+
r"""
|
|
818
|
+
A special class for elements of Ore function fields whose
|
|
819
|
+
center has finite index.
|
|
820
|
+
|
|
821
|
+
TESTS::
|
|
822
|
+
|
|
823
|
+
sage: # needs sage.rings.finite_rings
|
|
824
|
+
sage: k.<a> = GF(5^3)
|
|
825
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
826
|
+
sage: S.<x> = k['x', Frob]
|
|
827
|
+
sage: K = S.fraction_field()
|
|
828
|
+
sage: f = K.random_element()
|
|
829
|
+
sage: from sage.rings.polynomial.ore_function_element import OreFunction_with_large_center
|
|
830
|
+
sage: isinstance(f, OreFunction_with_large_center)
|
|
831
|
+
True
|
|
832
|
+
|
|
833
|
+
sage: # TestSuite(f).run()
|
|
834
|
+
"""
|
|
835
|
+
def reduced_trace(self, var=None):
|
|
836
|
+
r"""
|
|
837
|
+
Return the reduced trace of this element.
|
|
838
|
+
|
|
839
|
+
INPUT:
|
|
840
|
+
|
|
841
|
+
- ``var`` -- string or ``None`` (default: ``None``);
|
|
842
|
+
the name of the central variable
|
|
843
|
+
|
|
844
|
+
EXAMPLES::
|
|
845
|
+
|
|
846
|
+
sage: # needs sage.rings.finite_rings
|
|
847
|
+
sage: k.<t> = GF(5^3)
|
|
848
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
849
|
+
sage: S.<x> = k['x', Frob]
|
|
850
|
+
sage: K = S.fraction_field()
|
|
851
|
+
sage: a = 1 / (x^2 + t)
|
|
852
|
+
sage: tr = a.reduced_trace(); tr
|
|
853
|
+
3/(z^2 + 2)
|
|
854
|
+
|
|
855
|
+
The reduced trace lies in the center of `S`, which is the fraction field
|
|
856
|
+
of a univariate polynomial ring in the variable `z = x^3` over `GF(5)`::
|
|
857
|
+
|
|
858
|
+
sage: # needs sage.rings.finite_rings
|
|
859
|
+
sage: tr.parent()
|
|
860
|
+
Fraction Field of Univariate Polynomial Ring in z over Finite Field of size 5
|
|
861
|
+
sage: tr.parent() is K.center()
|
|
862
|
+
True
|
|
863
|
+
|
|
864
|
+
We can use explicit conversion to view ``tr`` as a Ore function::
|
|
865
|
+
|
|
866
|
+
sage: K(tr) # needs sage.rings.finite_rings
|
|
867
|
+
(x^6 + 2)^(-1) * 3
|
|
868
|
+
|
|
869
|
+
By default, the name of the central variable is usually ``z`` (see
|
|
870
|
+
:meth:`sage.rings.polynomial.skew_polynomial_ring.OreFunctionField_with_large_center.center`
|
|
871
|
+
for more details about this).
|
|
872
|
+
However, the user can specify a different variable name if desired::
|
|
873
|
+
|
|
874
|
+
sage: a.reduced_trace(var='u') # needs sage.rings.finite_rings
|
|
875
|
+
3/(u^2 + 2)
|
|
876
|
+
|
|
877
|
+
TESTS:
|
|
878
|
+
|
|
879
|
+
We check that the reduced trace is additive::
|
|
880
|
+
|
|
881
|
+
sage: # needs sage.rings.finite_rings
|
|
882
|
+
sage: a = K.random_element(degree=5)
|
|
883
|
+
sage: b = K.random_element(degree=7)
|
|
884
|
+
sage: a.reduced_trace() + b.reduced_trace() == (a+b).reduced_trace()
|
|
885
|
+
True
|
|
886
|
+
|
|
887
|
+
::
|
|
888
|
+
|
|
889
|
+
sage: (a*b).reduced_trace() == (b*a).reduced_trace() # needs sage.rings.finite_rings
|
|
890
|
+
True
|
|
891
|
+
"""
|
|
892
|
+
ring = self.parent()._ring
|
|
893
|
+
denominator = self._denominator.reduced_norm(var)
|
|
894
|
+
cofactor, _ = ring(denominator).right_quo_rem(self._denominator)
|
|
895
|
+
numerator = (cofactor * self._numerator).reduced_trace(var)
|
|
896
|
+
return numerator/denominator
|
|
897
|
+
|
|
898
|
+
def reduced_norm(self, var=None):
|
|
899
|
+
r"""
|
|
900
|
+
Return the reduced norm of this Ore function.
|
|
901
|
+
|
|
902
|
+
INPUT:
|
|
903
|
+
|
|
904
|
+
- ``var`` -- string or ``None`` (default: ``None``);
|
|
905
|
+
the name of the central variable
|
|
906
|
+
|
|
907
|
+
EXAMPLES::
|
|
908
|
+
|
|
909
|
+
sage: # needs sage.rings.finite_rings
|
|
910
|
+
sage: k.<t> = GF(5^3)
|
|
911
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
912
|
+
sage: S.<x> = k['x', Frob]
|
|
913
|
+
sage: K = S.fraction_field()
|
|
914
|
+
sage: a = (x + t) / (x^2 + t^2)
|
|
915
|
+
sage: N = a.reduced_norm(); N
|
|
916
|
+
(z + 2)/(z^2 + 4)
|
|
917
|
+
|
|
918
|
+
The reduced norm lies in the center of `S`, which is the fraction field
|
|
919
|
+
of a univariate polynomial ring in the variable `z = x^3` over `GF(5)`. ::
|
|
920
|
+
|
|
921
|
+
sage: # needs sage.rings.finite_rings
|
|
922
|
+
sage: N.parent()
|
|
923
|
+
Fraction Field of Univariate Polynomial Ring in z over Finite Field of size 5
|
|
924
|
+
sage: N.parent() is K.center()
|
|
925
|
+
True
|
|
926
|
+
|
|
927
|
+
We can use explicit conversion to view ``N`` as a skew polynomial::
|
|
928
|
+
|
|
929
|
+
sage: K(N) # needs sage.rings.finite_rings
|
|
930
|
+
(x^6 + 4)^(-1) * (x^3 + 2)
|
|
931
|
+
|
|
932
|
+
By default, the name of the central variable is usually ``z`` (see
|
|
933
|
+
:meth:`sage.rings.polynomial.skew_polynomial_ring.SkewPolynomialRing_finite_order.center`
|
|
934
|
+
for more details about this).
|
|
935
|
+
However, the user can specify a different variable name if desired::
|
|
936
|
+
|
|
937
|
+
sage: a.reduced_norm(var='u') # needs sage.rings.finite_rings
|
|
938
|
+
(u + 2)/(u^2 + 4)
|
|
939
|
+
|
|
940
|
+
TESTS:
|
|
941
|
+
|
|
942
|
+
We check that the reduced norm is a multiplicative map::
|
|
943
|
+
|
|
944
|
+
sage: # needs sage.rings.finite_rings
|
|
945
|
+
sage: a = K.random_element()
|
|
946
|
+
sage: b = K.random_element()
|
|
947
|
+
sage: a.reduced_norm() * b.reduced_norm() == (a*b).reduced_norm()
|
|
948
|
+
True
|
|
949
|
+
"""
|
|
950
|
+
numerator = self._numerator.reduced_norm(var)
|
|
951
|
+
denominator = self._denominator.reduced_norm(var)
|
|
952
|
+
return numerator/denominator
|