passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,1028 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Fraction fields of Ore polynomial rings
|
|
4
|
+
|
|
5
|
+
Sage provides support for building the fraction field of any Ore
|
|
6
|
+
polynomial ring and performing basic operations in it.
|
|
7
|
+
The fraction field is constructed by the method
|
|
8
|
+
:meth:`sage.rings.polynomial.ore_polynomial_ring.OrePolynomialRing.fraction_field`
|
|
9
|
+
as demonstrated below::
|
|
10
|
+
|
|
11
|
+
sage: R.<t> = QQ[]
|
|
12
|
+
sage: der = R.derivation()
|
|
13
|
+
sage: A.<d> = R['d', der]
|
|
14
|
+
sage: K = A.fraction_field()
|
|
15
|
+
sage: K
|
|
16
|
+
Ore Function Field in d over Fraction Field of Univariate Polynomial Ring in t
|
|
17
|
+
over Rational Field twisted by d/dt
|
|
18
|
+
|
|
19
|
+
The simplest way to build elements in `K` is to use the division
|
|
20
|
+
operator over Ore polynomial rings::
|
|
21
|
+
|
|
22
|
+
sage: f = 1/d
|
|
23
|
+
sage: f
|
|
24
|
+
d^(-1)
|
|
25
|
+
sage: f.parent() is K
|
|
26
|
+
True
|
|
27
|
+
|
|
28
|
+
REPRESENTATION OF ELEMENTS:
|
|
29
|
+
|
|
30
|
+
Elements in `K` are internally represented by fractions of the form `s^{-1} t`
|
|
31
|
+
with the denominator on the left. Notice that, because of noncommutativity,
|
|
32
|
+
this is not the same that fractions with denominator on the right.
|
|
33
|
+
For example, a fraction created by the division operator is usually displayed
|
|
34
|
+
with a different numerator and/or a different denominator::
|
|
35
|
+
|
|
36
|
+
sage: g = t / d
|
|
37
|
+
sage: g
|
|
38
|
+
(d - 1/t)^(-1) * t
|
|
39
|
+
|
|
40
|
+
The left numerator and right denominator are accessible as follows::
|
|
41
|
+
|
|
42
|
+
sage: g.left_numerator()
|
|
43
|
+
t
|
|
44
|
+
sage: g.right_denominator()
|
|
45
|
+
d
|
|
46
|
+
|
|
47
|
+
Similarly the methods :meth:`OrePolynomial.left_denominator` and
|
|
48
|
+
:meth:`OrePolynomial.right_numerator` give access to the Ore polynomials
|
|
49
|
+
`s` and `t` in the representation `s^{-1} t`::
|
|
50
|
+
|
|
51
|
+
sage: g.left_denominator()
|
|
52
|
+
d - 1/t
|
|
53
|
+
sage: g.right_numerator()
|
|
54
|
+
t
|
|
55
|
+
|
|
56
|
+
We favored the writing `s^{-1} t` because it always exists.
|
|
57
|
+
On the contrary, the writing `s t^{-1}` is only guaranteed when the twisting
|
|
58
|
+
morphism defining the Ore polynomial ring is bijective. As a consequence, when
|
|
59
|
+
the latter assumption is not fulfilled (or actually if Sage cannot invert the
|
|
60
|
+
twisting morphism), computing the left numerator and the right denominator fails::
|
|
61
|
+
|
|
62
|
+
sage: # needs sage.rings.function_field
|
|
63
|
+
sage: sigma = R.hom([t^2])
|
|
64
|
+
sage: S.<x> = R['x', sigma]
|
|
65
|
+
sage: F = S.fraction_field()
|
|
66
|
+
sage: f = F.random_element()
|
|
67
|
+
sage: while not f:
|
|
68
|
+
....: f = F.random_element()
|
|
69
|
+
sage: f.left_numerator()
|
|
70
|
+
Traceback (most recent call last):
|
|
71
|
+
...
|
|
72
|
+
NotImplementedError: inversion of the twisting morphism
|
|
73
|
+
Ring endomorphism of Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
74
|
+
Defn: t |--> t^2
|
|
75
|
+
|
|
76
|
+
On a related note, fractions are systematically simplified when the twisting
|
|
77
|
+
morphism is bijective but they are not otherwise. As an example, compare the
|
|
78
|
+
two following computations::
|
|
79
|
+
|
|
80
|
+
sage: # needs sage.rings.function_field
|
|
81
|
+
sage: P = d^2 + t*d + 1
|
|
82
|
+
sage: Q = d + t^2
|
|
83
|
+
sage: D = d^3 + t^2 + 1
|
|
84
|
+
sage: f = P^(-1) * Q
|
|
85
|
+
sage: f
|
|
86
|
+
(d^2 + t*d + 1)^(-1) * (d + t^2)
|
|
87
|
+
sage: g = (D*P)^(-1) * (D*Q)
|
|
88
|
+
sage: g
|
|
89
|
+
(d^2 + t*d + 1)^(-1) * (d + t^2)
|
|
90
|
+
|
|
91
|
+
sage: # needs sage.rings.function_field
|
|
92
|
+
sage: P = x^2 + t*x + 1
|
|
93
|
+
sage: Q = x + t^2
|
|
94
|
+
sage: D = x^3 + t^2 + 1
|
|
95
|
+
sage: f = P^(-1) * Q
|
|
96
|
+
sage: f
|
|
97
|
+
(x^2 + t*x + 1)^(-1) * (x + t^2)
|
|
98
|
+
sage: g = (D*P)^(-1) * (D*Q)
|
|
99
|
+
sage: g
|
|
100
|
+
(x^5 + t^8*x^4 + x^3 + (t^2 + 1)*x^2 + (t^3 + t)*x + t^2 + 1)^(-1)
|
|
101
|
+
* (x^4 + t^16*x^3 + (t^2 + 1)*x + t^4 + t^2)
|
|
102
|
+
sage: f == g
|
|
103
|
+
True
|
|
104
|
+
|
|
105
|
+
OPERATIONS:
|
|
106
|
+
|
|
107
|
+
Basic arithmetical operations are available::
|
|
108
|
+
|
|
109
|
+
sage: # needs sage.rings.function_field
|
|
110
|
+
sage: f = 1 / d
|
|
111
|
+
sage: g = 1 / (d + t)
|
|
112
|
+
sage: u = f + g; u
|
|
113
|
+
(d^2 + ((t^2 - 1)/t)*d)^(-1) * (2*d + (t^2 - 2)/t)
|
|
114
|
+
sage: v = f - g; v
|
|
115
|
+
(d^2 + ((t^2 - 1)/t)*d)^(-1) * t
|
|
116
|
+
sage: u + v
|
|
117
|
+
d^(-1) * 2
|
|
118
|
+
|
|
119
|
+
sage: f * g
|
|
120
|
+
(d^2 + t*d)^(-1)
|
|
121
|
+
sage: f / g
|
|
122
|
+
d^(-1) * (d + t)
|
|
123
|
+
|
|
124
|
+
Of course, multiplication remains noncommutative::
|
|
125
|
+
|
|
126
|
+
sage: # needs sage.rings.function_field
|
|
127
|
+
sage: g * f
|
|
128
|
+
(d^2 + t*d + 1)^(-1)
|
|
129
|
+
sage: g^(-1) * f
|
|
130
|
+
(d - 1/t)^(-1) * (d + (t^2 - 1)/t)
|
|
131
|
+
|
|
132
|
+
TESTS:
|
|
133
|
+
|
|
134
|
+
The Ore function field is commutative if the twisting morphism is the
|
|
135
|
+
identity and the twisting derivation vanishes. ::
|
|
136
|
+
|
|
137
|
+
sage: # needs sage.rings.finite_rings
|
|
138
|
+
sage: k.<a> = GF(5^3)
|
|
139
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
140
|
+
sage: S.<x> = k['x', Frob]
|
|
141
|
+
sage: K = S.fraction_field()
|
|
142
|
+
sage: K.is_commutative()
|
|
143
|
+
False
|
|
144
|
+
sage: T.<y> = k['y', Frob^3]
|
|
145
|
+
sage: L = T.fraction_field()
|
|
146
|
+
sage: L.is_commutative()
|
|
147
|
+
True
|
|
148
|
+
|
|
149
|
+
AUTHOR:
|
|
150
|
+
|
|
151
|
+
- Xavier Caruso (2020-05)
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
# ***************************************************************************
|
|
156
|
+
# Copyright (C) 2020 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
157
|
+
#
|
|
158
|
+
# This program is free software: you can redistribute it and/or modify
|
|
159
|
+
# it under the terms of the GNU General Public License as published by
|
|
160
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
161
|
+
# (at your option) any later version.
|
|
162
|
+
# https://www.gnu.org/licenses/
|
|
163
|
+
# ***************************************************************************
|
|
164
|
+
|
|
165
|
+
from sage.categories.algebras import Algebras
|
|
166
|
+
from sage.categories.commutative_rings import CommutativeRings
|
|
167
|
+
from sage.categories.fields import Fields
|
|
168
|
+
from sage.categories.homset import Hom
|
|
169
|
+
from sage.categories.map import Section
|
|
170
|
+
from sage.rings.morphism import RingHomomorphism
|
|
171
|
+
from sage.rings.polynomial.ore_function_element import (
|
|
172
|
+
OreFunction_with_large_center,
|
|
173
|
+
OreFunctionBaseringInjection,
|
|
174
|
+
)
|
|
175
|
+
from sage.rings.polynomial.ore_polynomial_ring import OrePolynomialRing
|
|
176
|
+
from sage.structure.category_object import normalize_names
|
|
177
|
+
from sage.structure.parent import Parent
|
|
178
|
+
from sage.structure.richcmp import op_EQ
|
|
179
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
180
|
+
|
|
181
|
+
WORKING_CENTER_MAX_TRIES = 1000
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
# Generic implementation of Ore function fields
|
|
185
|
+
###############################################
|
|
186
|
+
|
|
187
|
+
class OreFunctionField(Parent, UniqueRepresentation):
|
|
188
|
+
r"""
|
|
189
|
+
A class for fraction fields of Ore polynomial rings.
|
|
190
|
+
"""
|
|
191
|
+
Element = None
|
|
192
|
+
|
|
193
|
+
def __init__(self, ring, category=None):
|
|
194
|
+
r"""
|
|
195
|
+
Initialize this Ore function field.
|
|
196
|
+
|
|
197
|
+
TESTS::
|
|
198
|
+
|
|
199
|
+
sage: # needs sage.rings.finite_rings
|
|
200
|
+
sage: k.<a> = GF(11^3)
|
|
201
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
202
|
+
sage: der = k.derivation(a, twist=Frob)
|
|
203
|
+
sage: S.<x> = k['x', der]
|
|
204
|
+
sage: K = S.fraction_field()
|
|
205
|
+
sage: TestSuite(K).run()
|
|
206
|
+
"""
|
|
207
|
+
if self.Element is None:
|
|
208
|
+
import sage.rings.polynomial.ore_function_element
|
|
209
|
+
self.Element = sage.rings.polynomial.ore_function_element.OreFunction
|
|
210
|
+
if not isinstance(ring, OrePolynomialRing):
|
|
211
|
+
raise TypeError("not a Ore Polynomial Ring")
|
|
212
|
+
if ring.base_ring() not in Fields():
|
|
213
|
+
raise TypeError("the base ring must be a field")
|
|
214
|
+
try:
|
|
215
|
+
_ = ring.twisting_morphism(-1)
|
|
216
|
+
self._simplification = True
|
|
217
|
+
except (TypeError, ZeroDivisionError, NotImplementedError):
|
|
218
|
+
self._simplification = False
|
|
219
|
+
self._ring = ring
|
|
220
|
+
base = ring.base_ring()
|
|
221
|
+
if ring in CommutativeRings():
|
|
222
|
+
category = Algebras(base).Commutative().or_subcategory(category)
|
|
223
|
+
else:
|
|
224
|
+
category = Algebras(base).or_subcategory(category)
|
|
225
|
+
Parent.__init__(self, base=base, names=ring.variable_name(),
|
|
226
|
+
normalize=True, category=category)
|
|
227
|
+
|
|
228
|
+
def _element_constructor_(self, *args, **kwds):
|
|
229
|
+
r"""
|
|
230
|
+
Construct an element in this Ore function field.
|
|
231
|
+
|
|
232
|
+
TESTS::
|
|
233
|
+
|
|
234
|
+
sage: # needs sage.rings.finite_rings
|
|
235
|
+
sage: k.<a> = GF(5^3)
|
|
236
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
237
|
+
sage: S.<x> = k['x', Frob]
|
|
238
|
+
sage: K = S.fraction_field()
|
|
239
|
+
sage: f = K(x^2 + a, x + a^2) # indirect doctest
|
|
240
|
+
sage: f
|
|
241
|
+
(x + a^2)^(-1) * (x^2 + a)
|
|
242
|
+
"""
|
|
243
|
+
return self.element_class(self, *args, **kwds)
|
|
244
|
+
|
|
245
|
+
def _coerce_map_from_base_ring(self):
|
|
246
|
+
r"""
|
|
247
|
+
Return a coercion map from the base ring of this Ore function field.
|
|
248
|
+
|
|
249
|
+
EXAMPLES::
|
|
250
|
+
|
|
251
|
+
sage: # needs sage.rings.finite_rings
|
|
252
|
+
sage: k.<t> = GF(11^2)
|
|
253
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
254
|
+
sage: S.<x> = k['x', Frob]
|
|
255
|
+
sage: K = S.fraction_field()
|
|
256
|
+
sage: K.coerce_map_from(k) # indirect doctest
|
|
257
|
+
Ore Function base injection morphism:
|
|
258
|
+
From: Finite Field in t of size 11^2
|
|
259
|
+
To: Ore Function Field in x over Finite Field in t of size 11^2
|
|
260
|
+
twisted by t |--> t^11
|
|
261
|
+
"""
|
|
262
|
+
return OreFunctionBaseringInjection(self.base_ring(), self)
|
|
263
|
+
|
|
264
|
+
def _coerce_map_from_(self, P):
|
|
265
|
+
r"""
|
|
266
|
+
Return ``True`` if `P` coerces to this Ore function field.
|
|
267
|
+
|
|
268
|
+
EXAMPLES::
|
|
269
|
+
|
|
270
|
+
sage: R.<t> = QQ[]
|
|
271
|
+
sage: der = R.derivation()
|
|
272
|
+
sage: A.<d> = R['d', der]
|
|
273
|
+
sage: K = A.fraction_field()
|
|
274
|
+
|
|
275
|
+
sage: K.has_coerce_map_from(A)
|
|
276
|
+
True
|
|
277
|
+
sage: K.has_coerce_map_from(R)
|
|
278
|
+
True
|
|
279
|
+
sage: K.has_coerce_map_from(R.fraction_field())
|
|
280
|
+
True
|
|
281
|
+
"""
|
|
282
|
+
if isinstance(P, OreFunctionField):
|
|
283
|
+
return P._ring.has_coerce_map_from(self._ring)
|
|
284
|
+
if isinstance(P, Parent):
|
|
285
|
+
return P.has_coerce_map_from(self._ring)
|
|
286
|
+
|
|
287
|
+
def _repr_(self) -> str:
|
|
288
|
+
r"""
|
|
289
|
+
Return a string representation of this Ore function field.
|
|
290
|
+
|
|
291
|
+
EXAMPLES::
|
|
292
|
+
|
|
293
|
+
sage: R.<t> = QQ[]
|
|
294
|
+
sage: sigma = R.hom([t+1])
|
|
295
|
+
sage: S.<x> = OrePolynomialRing(R, sigma)
|
|
296
|
+
sage: S.fraction_field() # needs sage.rings.function_field
|
|
297
|
+
Ore Function Field in x over Fraction Field of Univariate Polynomial Ring in t over Rational Field twisted by t |--> t + 1
|
|
298
|
+
|
|
299
|
+
sage: der = R.derivation()
|
|
300
|
+
sage: T.<d> = OrePolynomialRing(R, der)
|
|
301
|
+
sage: T.fraction_field() # needs sage.rings.function_field
|
|
302
|
+
Ore Function Field in d over Fraction Field of Univariate Polynomial Ring in t over Rational Field twisted by d/dt
|
|
303
|
+
"""
|
|
304
|
+
s = "Ore Function Field in %s over %s twisted by " % (self.variable_name(), self.base_ring())
|
|
305
|
+
morphism = self.twisting_morphism()
|
|
306
|
+
derivation = self.twisting_derivation()
|
|
307
|
+
if derivation is None:
|
|
308
|
+
s += morphism._repr_short()
|
|
309
|
+
else:
|
|
310
|
+
if morphism is not None:
|
|
311
|
+
s += "%s and " % morphism._repr_short()
|
|
312
|
+
s += derivation._repr_()
|
|
313
|
+
return s
|
|
314
|
+
|
|
315
|
+
def _latex_(self):
|
|
316
|
+
r"""
|
|
317
|
+
Return a LaTeX representation of this Ore function field.
|
|
318
|
+
|
|
319
|
+
EXAMPLES::
|
|
320
|
+
|
|
321
|
+
sage: # needs sage.rings.finite_rings
|
|
322
|
+
sage: k.<a> = GF(5^3)
|
|
323
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
324
|
+
sage: S.<x> = k['x', Frob]
|
|
325
|
+
sage: K = S.fraction_field()
|
|
326
|
+
sage: latex(K) # indirect doctest
|
|
327
|
+
\Bold{F}_{5^{3}}\left(x ; a \mapsto a^{5} \right)
|
|
328
|
+
|
|
329
|
+
sage: R.<t> = QQ[]
|
|
330
|
+
sage: der = R.derivation()
|
|
331
|
+
sage: T.<delta> = R['delta', der]
|
|
332
|
+
sage: L = T.fraction_field()
|
|
333
|
+
sage: latex(L) # indirect doctest
|
|
334
|
+
\mathrm{Frac}(\Bold{Q}[t])\left(\delta ; \frac{d}{dt} \right)
|
|
335
|
+
"""
|
|
336
|
+
from sage.misc.latex import latex
|
|
337
|
+
s = "%s\\left(%s" % (latex(self.base_ring()), self.latex_variable_names()[0])
|
|
338
|
+
sep = ";"
|
|
339
|
+
if self.twisting_morphism() is not None:
|
|
340
|
+
s += sep + latex(self.twisting_morphism())
|
|
341
|
+
sep = ","
|
|
342
|
+
if self.twisting_derivation() is not None:
|
|
343
|
+
s += sep + latex(self.twisting_derivation())
|
|
344
|
+
return s + "\\right)"
|
|
345
|
+
|
|
346
|
+
def change_var(self, var):
|
|
347
|
+
r"""
|
|
348
|
+
Return the Ore function field in variable ``var`` with the same base
|
|
349
|
+
ring, twisting morphism and twisting derivation as ``self``.
|
|
350
|
+
|
|
351
|
+
INPUT:
|
|
352
|
+
|
|
353
|
+
- ``var`` -- string representing the name of the new variable
|
|
354
|
+
|
|
355
|
+
EXAMPLES::
|
|
356
|
+
|
|
357
|
+
sage: # needs sage.rings.finite_rings
|
|
358
|
+
sage: k.<t> = GF(5^3)
|
|
359
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
360
|
+
sage: R.<x> = OrePolynomialRing(k,Frob)
|
|
361
|
+
sage: K = R.fraction_field()
|
|
362
|
+
sage: K
|
|
363
|
+
Ore Function Field in x over Finite Field in t of size 5^3 twisted by t |--> t^5
|
|
364
|
+
sage: Ky = K.change_var('y'); Ky
|
|
365
|
+
Ore Function Field in y over Finite Field in t of size 5^3 twisted by t |--> t^5
|
|
366
|
+
sage: Ky is K.change_var('y')
|
|
367
|
+
True
|
|
368
|
+
"""
|
|
369
|
+
return OreFunctionField(self._ring.change_var(var))
|
|
370
|
+
|
|
371
|
+
def characteristic(self):
|
|
372
|
+
r"""
|
|
373
|
+
Return the characteristic of this Ore function field.
|
|
374
|
+
|
|
375
|
+
EXAMPLES::
|
|
376
|
+
|
|
377
|
+
sage: R.<t> = QQ[]
|
|
378
|
+
sage: sigma = R.hom([t+1])
|
|
379
|
+
sage: S = R['x',sigma]
|
|
380
|
+
sage: S.fraction_field().characteristic() # needs sage.rings.function_field
|
|
381
|
+
0
|
|
382
|
+
|
|
383
|
+
sage: # needs sage.rings.finite_rings
|
|
384
|
+
sage: k.<u> = GF(5^3)
|
|
385
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
386
|
+
sage: S = k['y',Frob]
|
|
387
|
+
sage: S.fraction_field().characteristic() # needs sage.rings.function_field
|
|
388
|
+
5
|
|
389
|
+
"""
|
|
390
|
+
return self.base_ring().characteristic()
|
|
391
|
+
|
|
392
|
+
def twisting_morphism(self, n=1):
|
|
393
|
+
r"""
|
|
394
|
+
Return the twisting endomorphism defining this Ore function field iterated ``n`` times
|
|
395
|
+
or ``None`` if this Ore function field is not twisted by an endomorphism.
|
|
396
|
+
|
|
397
|
+
INPUT:
|
|
398
|
+
|
|
399
|
+
- ``n`` -- integer (default: 1)
|
|
400
|
+
|
|
401
|
+
EXAMPLES::
|
|
402
|
+
|
|
403
|
+
sage: R.<t> = QQ[]
|
|
404
|
+
sage: sigma = R.hom([t+1])
|
|
405
|
+
sage: S.<x> = R['x', sigma]
|
|
406
|
+
sage: K = S.fraction_field() # needs sage.rings.function_field
|
|
407
|
+
sage: K.twisting_morphism() # needs sage.rings.function_field
|
|
408
|
+
Ring endomorphism of
|
|
409
|
+
Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
410
|
+
Defn: t |--> t + 1
|
|
411
|
+
|
|
412
|
+
When the Ore polynomial ring is only twisted by a derivation, this
|
|
413
|
+
method returns nothing::
|
|
414
|
+
|
|
415
|
+
sage: der = R.derivation()
|
|
416
|
+
sage: A.<d> = R['x', der]
|
|
417
|
+
sage: F = A.fraction_field() # needs sage.rings.function_field
|
|
418
|
+
sage: F.twisting_morphism() # needs sage.rings.function_field
|
|
419
|
+
|
|
420
|
+
.. SEEALSO::
|
|
421
|
+
|
|
422
|
+
:meth:`sage.rings.polynomial.ore_polynomial_element.OrePolynomial.twisting_morphism`,
|
|
423
|
+
:meth:`twisting_derivation`
|
|
424
|
+
"""
|
|
425
|
+
return self._ring.twisting_morphism(n)
|
|
426
|
+
|
|
427
|
+
def twisting_derivation(self):
|
|
428
|
+
r"""
|
|
429
|
+
Return the twisting derivation defining this Ore function field
|
|
430
|
+
or ``None`` if this Ore function field is not twisted by a derivation.
|
|
431
|
+
|
|
432
|
+
EXAMPLES::
|
|
433
|
+
|
|
434
|
+
sage: R.<t> = QQ[]
|
|
435
|
+
sage: der = R.derivation(); der
|
|
436
|
+
d/dt
|
|
437
|
+
sage: A.<d> = R['d', der]
|
|
438
|
+
sage: F = A.fraction_field()
|
|
439
|
+
sage: F.twisting_derivation()
|
|
440
|
+
d/dt
|
|
441
|
+
|
|
442
|
+
sage: # needs sage.rings.finite_rings
|
|
443
|
+
sage: k.<a> = GF(5^3)
|
|
444
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
445
|
+
sage: S.<x> = k['x', Frob]
|
|
446
|
+
sage: K = S.fraction_field()
|
|
447
|
+
sage: K.twisting_derivation()
|
|
448
|
+
|
|
449
|
+
.. SEEALSO::
|
|
450
|
+
|
|
451
|
+
:meth:`sage.rings.polynomial.ore_polynomial_element.OrePolynomial.twisting_derivation`,
|
|
452
|
+
:meth:`twisting_morphism`
|
|
453
|
+
"""
|
|
454
|
+
return self._ring.twisting_derivation()
|
|
455
|
+
|
|
456
|
+
def gen(self, n=0):
|
|
457
|
+
r"""
|
|
458
|
+
Return the indeterminate generator of this Ore function field.
|
|
459
|
+
|
|
460
|
+
INPUT:
|
|
461
|
+
|
|
462
|
+
- ``n`` -- index of generator to return (default: 0); exists for
|
|
463
|
+
compatibility with other polynomial rings
|
|
464
|
+
|
|
465
|
+
EXAMPLES::
|
|
466
|
+
|
|
467
|
+
sage: # needs sage.rings.finite_rings
|
|
468
|
+
sage: k.<a> = GF(5^4)
|
|
469
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
470
|
+
sage: S.<x> = k['x', Frob]
|
|
471
|
+
sage: K = S.fraction_field()
|
|
472
|
+
sage: K.gen()
|
|
473
|
+
x
|
|
474
|
+
"""
|
|
475
|
+
return self(self._ring.gen(n))
|
|
476
|
+
|
|
477
|
+
def gens(self) -> tuple:
|
|
478
|
+
"""
|
|
479
|
+
Return the tuple of generators of ``self``.
|
|
480
|
+
|
|
481
|
+
EXAMPLES::
|
|
482
|
+
|
|
483
|
+
sage: # needs sage.rings.finite_rings
|
|
484
|
+
sage: k.<a> = GF(5^4)
|
|
485
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
486
|
+
sage: S.<x> = k['x', Frob]
|
|
487
|
+
sage: K = S.fraction_field()
|
|
488
|
+
sage: K.gens()
|
|
489
|
+
(x,)
|
|
490
|
+
"""
|
|
491
|
+
return (self(self._ring.gen(0)),)
|
|
492
|
+
|
|
493
|
+
parameter = gen
|
|
494
|
+
|
|
495
|
+
def gens_dict(self) -> dict:
|
|
496
|
+
r"""
|
|
497
|
+
Return a {name: variable} dictionary of the generators of
|
|
498
|
+
this Ore function field.
|
|
499
|
+
|
|
500
|
+
EXAMPLES::
|
|
501
|
+
|
|
502
|
+
sage: # needs sage.libs.singular sage.rings.finite_rings
|
|
503
|
+
sage: R.<t> = ZZ[]
|
|
504
|
+
sage: sigma = R.hom([t+1])
|
|
505
|
+
sage: S.<x> = OrePolynomialRing(R, sigma)
|
|
506
|
+
sage: K = S.fraction_field()
|
|
507
|
+
sage: K.gens_dict()
|
|
508
|
+
{'x': x}
|
|
509
|
+
"""
|
|
510
|
+
return dict(zip(self.variable_names(), self.gens()))
|
|
511
|
+
|
|
512
|
+
def is_finite(self) -> bool:
|
|
513
|
+
r"""
|
|
514
|
+
Return ``False`` since Ore function field are not finite.
|
|
515
|
+
|
|
516
|
+
EXAMPLES::
|
|
517
|
+
|
|
518
|
+
sage: # needs sage.rings.finite_rings
|
|
519
|
+
sage: k.<t> = GF(5^3)
|
|
520
|
+
sage: k.is_finite()
|
|
521
|
+
True
|
|
522
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
523
|
+
sage: S.<x> = k['x',Frob]
|
|
524
|
+
sage: K = S.fraction_field()
|
|
525
|
+
sage: K.is_finite()
|
|
526
|
+
False
|
|
527
|
+
"""
|
|
528
|
+
return False
|
|
529
|
+
|
|
530
|
+
def is_exact(self) -> bool:
|
|
531
|
+
r"""
|
|
532
|
+
Return ``True`` if elements of this Ore function field are exact.
|
|
533
|
+
This happens if and only if elements of the base ring are exact.
|
|
534
|
+
|
|
535
|
+
EXAMPLES::
|
|
536
|
+
|
|
537
|
+
sage: # needs sage.rings.finite_rings
|
|
538
|
+
sage: k.<t> = GF(5^3)
|
|
539
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
540
|
+
sage: S.<x> = k['x', Frob]
|
|
541
|
+
sage: K = S.fraction_field()
|
|
542
|
+
sage: K.is_exact()
|
|
543
|
+
True
|
|
544
|
+
|
|
545
|
+
sage: # needs sage.rings.padics
|
|
546
|
+
sage: k.<u> = Qq(5^3)
|
|
547
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
548
|
+
sage: S.<x> = k['x', Frob]
|
|
549
|
+
sage: K = S.fraction_field()
|
|
550
|
+
sage: K.is_exact()
|
|
551
|
+
False
|
|
552
|
+
"""
|
|
553
|
+
return self.base_ring().is_exact()
|
|
554
|
+
|
|
555
|
+
def is_sparse(self) -> bool:
|
|
556
|
+
r"""
|
|
557
|
+
Return ``True`` if the elements of this Ore function field are sparsely
|
|
558
|
+
represented.
|
|
559
|
+
|
|
560
|
+
.. WARNING::
|
|
561
|
+
|
|
562
|
+
Since sparse Ore polynomials are not yet implemented, this
|
|
563
|
+
function always returns ``False``.
|
|
564
|
+
|
|
565
|
+
EXAMPLES::
|
|
566
|
+
|
|
567
|
+
sage: # needs sage.rings.function_field sage.rings.real_mpfr
|
|
568
|
+
sage: R.<t> = RR[]
|
|
569
|
+
sage: sigma = R.hom([t+1])
|
|
570
|
+
sage: S.<x> = R['x', sigma]
|
|
571
|
+
sage: K = S.fraction_field()
|
|
572
|
+
sage: K.is_sparse()
|
|
573
|
+
False
|
|
574
|
+
"""
|
|
575
|
+
return self._ring.is_sparse()
|
|
576
|
+
|
|
577
|
+
def ngens(self) -> int:
|
|
578
|
+
r"""
|
|
579
|
+
Return the number of generators of this Ore function field,
|
|
580
|
+
which is `1`.
|
|
581
|
+
|
|
582
|
+
EXAMPLES::
|
|
583
|
+
|
|
584
|
+
sage: # needs sage.rings.function_field sage.rings.real_mpfr
|
|
585
|
+
sage: R.<t> = RR[]
|
|
586
|
+
sage: sigma = R.hom([t+1])
|
|
587
|
+
sage: S.<x> = R['x',sigma]
|
|
588
|
+
sage: K = S.fraction_field()
|
|
589
|
+
sage: K.ngens()
|
|
590
|
+
1
|
|
591
|
+
"""
|
|
592
|
+
return 1
|
|
593
|
+
|
|
594
|
+
def random_element(self, degree=2, monic=False, *args, **kwds):
|
|
595
|
+
r"""
|
|
596
|
+
Return a random Ore function in this field.
|
|
597
|
+
|
|
598
|
+
INPUT:
|
|
599
|
+
|
|
600
|
+
- ``degree`` -- (default: 2) an integer or a list of
|
|
601
|
+
two integers; the degrees of the denominator and numerator
|
|
602
|
+
|
|
603
|
+
- ``monic`` -- boolean (default: ``False``); if ``True``, return a monic
|
|
604
|
+
Ore function with monic numerator and denominator
|
|
605
|
+
|
|
606
|
+
- ``*args``, ``**kwds`` -- passed in to the :meth:`random_element`
|
|
607
|
+
method for the base ring
|
|
608
|
+
|
|
609
|
+
EXAMPLES::
|
|
610
|
+
|
|
611
|
+
sage: # needs sage.rings.finite_rings
|
|
612
|
+
sage: k.<t> = GF(5^3)
|
|
613
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
614
|
+
sage: S.<x> = k['x', Frob]
|
|
615
|
+
sage: K = S.fraction_field()
|
|
616
|
+
sage: K.random_element() # random
|
|
617
|
+
(x^2 + (2*t^2 + t + 1)*x + 2*t^2 + 2*t + 3)^(-1)
|
|
618
|
+
* ((2*t^2 + 3)*x^2 + (4*t^2 + t + 4)*x + 2*t^2 + 2)
|
|
619
|
+
sage: K.random_element(monic=True) # random
|
|
620
|
+
(x^2 + (4*t^2 + 3*t + 4)*x + 4*t^2 + t)^(-1)
|
|
621
|
+
* (x^2 + (2*t^2 + t + 3)*x + 3*t^2 + t + 2)
|
|
622
|
+
sage: K.random_element(degree=3) # random
|
|
623
|
+
(x^3 + (2*t^2 + 3)*x^2 + (2*t^2 + 4)*x + t + 3)^(-1)
|
|
624
|
+
* ((t + 4)*x^3 + (4*t^2 + 2*t + 2)*x^2 + (2*t^2 + 3*t + 3)*x + 3*t^2 + 3*t + 1)
|
|
625
|
+
sage: K.random_element(degree=[2,5]) # random
|
|
626
|
+
(x^2 + (4*t^2 + 2*t + 2)*x + 4*t^2 + t + 2)^(-1)
|
|
627
|
+
* ((3*t^2 + t + 1)*x^5 + (2*t^2 + 2*t)*x^4 + (t^2 + 2*t + 4)*x^3
|
|
628
|
+
+ (3*t^2 + 2*t)*x^2 + (t^2 + t + 4)*x)
|
|
629
|
+
"""
|
|
630
|
+
if isinstance(degree, list):
|
|
631
|
+
degdenom, degnum = degree
|
|
632
|
+
else:
|
|
633
|
+
degdenom = degnum = degree
|
|
634
|
+
numerator = self._ring.random_element(degnum, monic, *args, **kwds)
|
|
635
|
+
denominator = self._ring.random_element(degdenom, True, *args, **kwds)
|
|
636
|
+
return self(numerator, denominator)
|
|
637
|
+
|
|
638
|
+
def is_field(self, proof=False) -> bool:
|
|
639
|
+
r"""
|
|
640
|
+
Return always ``True`` since Ore function field are (skew) fields.
|
|
641
|
+
|
|
642
|
+
EXAMPLES::
|
|
643
|
+
|
|
644
|
+
sage: # needs sage.rings.finite_rings
|
|
645
|
+
sage: k.<a> = GF(5^3)
|
|
646
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
647
|
+
sage: S.<x> = k['x', Frob]
|
|
648
|
+
sage: K = S.fraction_field()
|
|
649
|
+
sage: S.is_field()
|
|
650
|
+
False
|
|
651
|
+
sage: K.is_field()
|
|
652
|
+
True
|
|
653
|
+
|
|
654
|
+
TESTS:
|
|
655
|
+
|
|
656
|
+
We check that :issue:`31470` is fixed::
|
|
657
|
+
|
|
658
|
+
sage: # needs sage.rings.finite_rings
|
|
659
|
+
sage: k.<a> = GF(5^3)
|
|
660
|
+
sage: S.<x> = k['x', k.frobenius_endomorphism()]
|
|
661
|
+
sage: K = S.fraction_field()
|
|
662
|
+
sage: zero_matrix(K, 2).row(0)
|
|
663
|
+
...
|
|
664
|
+
(0, 0)
|
|
665
|
+
"""
|
|
666
|
+
return True
|
|
667
|
+
|
|
668
|
+
def fraction_field(self):
|
|
669
|
+
r"""
|
|
670
|
+
Return the fraction field of this Ore function field,
|
|
671
|
+
i.e. this Ore function field itself.
|
|
672
|
+
|
|
673
|
+
EXAMPLES::
|
|
674
|
+
|
|
675
|
+
sage: R.<t> = QQ[]
|
|
676
|
+
sage: der = R.derivation()
|
|
677
|
+
sage: A.<d> = R['d', der]
|
|
678
|
+
sage: K = A.fraction_field(); K
|
|
679
|
+
Ore Function Field in d
|
|
680
|
+
over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
681
|
+
twisted by d/dt
|
|
682
|
+
sage: K.fraction_field()
|
|
683
|
+
Ore Function Field in d
|
|
684
|
+
over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
685
|
+
twisted by d/dt
|
|
686
|
+
sage: K.fraction_field() is K
|
|
687
|
+
True
|
|
688
|
+
"""
|
|
689
|
+
return self
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
# Special classes for twisting morphisms with finite order
|
|
693
|
+
##########################################################
|
|
694
|
+
|
|
695
|
+
class SectionOreFunctionCenterInjection(Section):
|
|
696
|
+
r"""
|
|
697
|
+
Section of the canonical injection of the center of a Ore
|
|
698
|
+
function field into this field
|
|
699
|
+
"""
|
|
700
|
+
def __init__(self, embed):
|
|
701
|
+
r"""
|
|
702
|
+
Initialize this map.
|
|
703
|
+
|
|
704
|
+
TESTS::
|
|
705
|
+
|
|
706
|
+
sage: # needs sage.rings.finite_rings
|
|
707
|
+
sage: k.<a> = GF(5^3)
|
|
708
|
+
sage: S.<x> = OrePolynomialRing(k, k.frobenius_endomorphism())
|
|
709
|
+
sage: K = S.fraction_field()
|
|
710
|
+
sage: Z = K.center()
|
|
711
|
+
sage: iota = K.coerce_map_from(Z)
|
|
712
|
+
sage: sigma = iota.section()
|
|
713
|
+
sage: TestSuite(sigma).run(skip=['_test_category'])
|
|
714
|
+
"""
|
|
715
|
+
Section.__init__(self, embed)
|
|
716
|
+
self._ringsection = embed._ringembed.section()
|
|
717
|
+
self._simplify = not embed._codomain._simplification
|
|
718
|
+
|
|
719
|
+
def _call_(self, x):
|
|
720
|
+
r"""
|
|
721
|
+
Return `x` viewed as an element of the center.
|
|
722
|
+
|
|
723
|
+
EXAMPLES::
|
|
724
|
+
|
|
725
|
+
sage: # needs sage.rings.finite_rings
|
|
726
|
+
sage: k.<a> = GF(5^3)
|
|
727
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
728
|
+
sage: K = S.fraction_field()
|
|
729
|
+
sage: Z = K.center()
|
|
730
|
+
sage: iota = K.coerce_map_from(Z)
|
|
731
|
+
sage: sigma = iota.section()
|
|
732
|
+
sage: sigma(1/x^3)
|
|
733
|
+
1/z
|
|
734
|
+
sage: sigma(1/x^2)
|
|
735
|
+
Traceback (most recent call last):
|
|
736
|
+
...
|
|
737
|
+
ValueError: x^(-2) is not in the center
|
|
738
|
+
"""
|
|
739
|
+
numerator = x._numerator
|
|
740
|
+
denominator = x._denominator
|
|
741
|
+
if self._simplify:
|
|
742
|
+
D = numerator.right_gcd(denominator)
|
|
743
|
+
numerator, _ = numerator.right_quo_rem(D)
|
|
744
|
+
denominator, _ = denominator.right_quo_rem(D)
|
|
745
|
+
try:
|
|
746
|
+
return self._ringsection(numerator) / self._ringsection(denominator)
|
|
747
|
+
except ValueError:
|
|
748
|
+
raise ValueError("%s is not in the center" % x)
|
|
749
|
+
|
|
750
|
+
def _richcmp_(self, right, op):
|
|
751
|
+
r"""
|
|
752
|
+
Compare this morphism with ``right``.
|
|
753
|
+
|
|
754
|
+
TESTS::
|
|
755
|
+
|
|
756
|
+
sage: # needs sage.rings.finite_rings
|
|
757
|
+
sage: k.<a> = GF(5^3)
|
|
758
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
759
|
+
sage: K = S.fraction_field()
|
|
760
|
+
sage: Z = K.center()
|
|
761
|
+
sage: iota = K.coerce_map_from(Z)
|
|
762
|
+
sage: sigma = iota.section()
|
|
763
|
+
sage: s = loads(dumps(sigma))
|
|
764
|
+
sage: s == sigma
|
|
765
|
+
True
|
|
766
|
+
sage: s is sigma
|
|
767
|
+
False
|
|
768
|
+
"""
|
|
769
|
+
if op == op_EQ:
|
|
770
|
+
return (self.domain() is right.domain()) and (self.codomain() is right.codomain())
|
|
771
|
+
return NotImplemented
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
class OreFunctionCenterInjection(RingHomomorphism):
|
|
775
|
+
r"""
|
|
776
|
+
Canonical injection of the center of a Ore function field
|
|
777
|
+
into this field.
|
|
778
|
+
"""
|
|
779
|
+
def __init__(self, domain, codomain, ringembed):
|
|
780
|
+
r"""
|
|
781
|
+
Initialize this morphism.
|
|
782
|
+
|
|
783
|
+
TESTS::
|
|
784
|
+
|
|
785
|
+
sage: # needs sage.rings.finite_rings
|
|
786
|
+
sage: k.<a> = GF(5^3)
|
|
787
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
788
|
+
sage: K = S.fraction_field()
|
|
789
|
+
sage: Z = K.center()
|
|
790
|
+
sage: iota = K.coerce_map_from(Z)
|
|
791
|
+
sage: TestSuite(iota).run(skip=['_test_category'])
|
|
792
|
+
"""
|
|
793
|
+
RingHomomorphism.__init__(self, Hom(domain, codomain))
|
|
794
|
+
self._codomain = codomain
|
|
795
|
+
self._ringembed = ringembed
|
|
796
|
+
self._section = SectionOreFunctionCenterInjection(self)
|
|
797
|
+
|
|
798
|
+
def _repr_(self):
|
|
799
|
+
r"""
|
|
800
|
+
Return a string representation of this morphism.
|
|
801
|
+
|
|
802
|
+
EXAMPLES::
|
|
803
|
+
|
|
804
|
+
sage: # needs sage.rings.finite_rings
|
|
805
|
+
sage: k.<a> = GF(5^3)
|
|
806
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
807
|
+
sage: K = S.fraction_field()
|
|
808
|
+
sage: Z = K.center()
|
|
809
|
+
sage: iota = K.coerce_map_from(Z)
|
|
810
|
+
sage: iota
|
|
811
|
+
Embedding of the center of Ore Function Field in x over Finite Field in a of size 5^3 twisted by a |--> a^5 into this field
|
|
812
|
+
sage: iota._repr_()
|
|
813
|
+
'Embedding of the center of Ore Function Field in x over Finite Field in a of size 5^3 twisted by a |--> a^5 into this field'
|
|
814
|
+
"""
|
|
815
|
+
return "Embedding of the center of %s into this field" % self._codomain
|
|
816
|
+
|
|
817
|
+
def _call_(self, x):
|
|
818
|
+
r"""
|
|
819
|
+
Return the image of `x` by this morphism.
|
|
820
|
+
|
|
821
|
+
TESTS::
|
|
822
|
+
|
|
823
|
+
sage: # needs sage.rings.finite_rings
|
|
824
|
+
sage: k.<a> = GF(5^3)
|
|
825
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
826
|
+
sage: K = S.fraction_field()
|
|
827
|
+
sage: Z.<z> = K.center()
|
|
828
|
+
sage: iota = K.coerce_map_from(Z)
|
|
829
|
+
sage: iota(1/(z+1))
|
|
830
|
+
(x^3 + 1)^(-1)
|
|
831
|
+
"""
|
|
832
|
+
numerator = self._ringembed(x.numerator())
|
|
833
|
+
denominator = self._ringembed(x.denominator())
|
|
834
|
+
return self._codomain(numerator, denominator, simplify=False)
|
|
835
|
+
|
|
836
|
+
def _richcmp_(self, right, op):
|
|
837
|
+
r"""
|
|
838
|
+
Compare this morphism with ``right``.
|
|
839
|
+
|
|
840
|
+
TESTS::
|
|
841
|
+
|
|
842
|
+
sage: # needs sage.rings.finite_rings
|
|
843
|
+
sage: k.<a> = GF(5^3)
|
|
844
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
845
|
+
sage: K = S.fraction_field()
|
|
846
|
+
sage: Z = K.center()
|
|
847
|
+
sage: iota = K.coerce_map_from(Z)
|
|
848
|
+
sage: i = loads(dumps(iota))
|
|
849
|
+
sage: i == iota
|
|
850
|
+
True
|
|
851
|
+
sage: i is iota
|
|
852
|
+
False
|
|
853
|
+
"""
|
|
854
|
+
if op == op_EQ:
|
|
855
|
+
return (self.domain() is right.domain()) and (self.codomain() is right.codomain())
|
|
856
|
+
return NotImplemented
|
|
857
|
+
|
|
858
|
+
def section(self):
|
|
859
|
+
r"""
|
|
860
|
+
Return a section of this morphism.
|
|
861
|
+
|
|
862
|
+
EXAMPLES::
|
|
863
|
+
|
|
864
|
+
sage: # needs sage.rings.finite_rings
|
|
865
|
+
sage: k.<a> = GF(5^3)
|
|
866
|
+
sage: S.<x> = SkewPolynomialRing(k, k.frobenius_endomorphism())
|
|
867
|
+
sage: K = S.fraction_field()
|
|
868
|
+
sage: Z = K.center()
|
|
869
|
+
sage: iota = K.coerce_map_from(Z)
|
|
870
|
+
sage: sigma = iota.section()
|
|
871
|
+
sage: sigma(x^3 / (x^6 + 1))
|
|
872
|
+
z/(z^2 + 1)
|
|
873
|
+
"""
|
|
874
|
+
return self._section
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
class OreFunctionField_with_large_center(OreFunctionField):
|
|
878
|
+
"""
|
|
879
|
+
A specialized class for Ore polynomial fields whose center has finite index.
|
|
880
|
+
"""
|
|
881
|
+
def __init__(self, ring, category=None):
|
|
882
|
+
r"""
|
|
883
|
+
Initialize this Ore function field.
|
|
884
|
+
|
|
885
|
+
TESTS::
|
|
886
|
+
|
|
887
|
+
sage: # needs sage.rings.finite_rings
|
|
888
|
+
sage: k.<t> = GF(5^3)
|
|
889
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
890
|
+
sage: S.<x> = k['x', Frob]
|
|
891
|
+
sage: K = S.fraction_field()
|
|
892
|
+
sage: TestSuite(K).run()
|
|
893
|
+
"""
|
|
894
|
+
if self.Element is None:
|
|
895
|
+
self.Element = OreFunction_with_large_center
|
|
896
|
+
OreFunctionField.__init__(self, ring, category)
|
|
897
|
+
self._center = {}
|
|
898
|
+
self._center_variable_name = 'z'
|
|
899
|
+
for i in range(WORKING_CENTER_MAX_TRIES):
|
|
900
|
+
try:
|
|
901
|
+
self._working_center = self.center()
|
|
902
|
+
self._center_variable_name = None
|
|
903
|
+
break
|
|
904
|
+
except ValueError:
|
|
905
|
+
self._center_variable_name = "z%s_" % i
|
|
906
|
+
if self._center_variable_name is not None:
|
|
907
|
+
raise NotImplementedError("unable to create the center")
|
|
908
|
+
|
|
909
|
+
def center(self, name=None, names=None, default=False):
|
|
910
|
+
r"""
|
|
911
|
+
Return the center of this Ore function field.
|
|
912
|
+
|
|
913
|
+
.. NOTE::
|
|
914
|
+
|
|
915
|
+
One can prove that the center is a field of rational functions
|
|
916
|
+
over a subfield of the base ring of this Ore function field.
|
|
917
|
+
|
|
918
|
+
INPUT:
|
|
919
|
+
|
|
920
|
+
- ``name`` -- string or ``None`` (default: ``None``);
|
|
921
|
+
the name for the central variable
|
|
922
|
+
|
|
923
|
+
- ``default`` -- boolean (default: ``False``); if ``True``,
|
|
924
|
+
set the default variable name for the center to ``name``
|
|
925
|
+
|
|
926
|
+
EXAMPLES::
|
|
927
|
+
|
|
928
|
+
sage: # needs sage.rings.finite_rings
|
|
929
|
+
sage: k.<t> = GF(5^3)
|
|
930
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
931
|
+
sage: S.<x> = k['x',Frob]
|
|
932
|
+
sage: K = S.fraction_field()
|
|
933
|
+
sage: Z = K.center(); Z
|
|
934
|
+
Fraction Field of Univariate Polynomial Ring in z over Finite Field of size 5
|
|
935
|
+
|
|
936
|
+
We can pass in another variable name::
|
|
937
|
+
|
|
938
|
+
sage: K.center(name='y') # needs sage.rings.finite_rings
|
|
939
|
+
Fraction Field of Univariate Polynomial Ring in y over Finite Field of size 5
|
|
940
|
+
|
|
941
|
+
or use the bracket notation::
|
|
942
|
+
|
|
943
|
+
sage: Zy.<y> = K.center(); Zy # needs sage.rings.finite_rings
|
|
944
|
+
Fraction Field of Univariate Polynomial Ring in y over Finite Field of size 5
|
|
945
|
+
|
|
946
|
+
A coercion map from the center to the Ore function field is set::
|
|
947
|
+
|
|
948
|
+
sage: K.has_coerce_map_from(Zy) # needs sage.rings.finite_rings
|
|
949
|
+
True
|
|
950
|
+
|
|
951
|
+
and pushout works::
|
|
952
|
+
|
|
953
|
+
sage: # needs sage.rings.finite_rings
|
|
954
|
+
sage: x.parent()
|
|
955
|
+
Ore Polynomial Ring in x over Finite Field in t of size 5^3 twisted by t |--> t^5
|
|
956
|
+
sage: y.parent()
|
|
957
|
+
Fraction Field of Univariate Polynomial Ring in y over Finite Field of size 5
|
|
958
|
+
sage: P = x + y; P
|
|
959
|
+
x^3 + x
|
|
960
|
+
sage: P.parent()
|
|
961
|
+
Ore Function Field in x over Finite Field in t of size 5^3 twisted by t |--> t^5
|
|
962
|
+
|
|
963
|
+
A conversion map in the reverse direction is also set::
|
|
964
|
+
|
|
965
|
+
sage: # needs sage.rings.finite_rings
|
|
966
|
+
sage: Zy(x^(-6) + 2)
|
|
967
|
+
(2*y^2 + 1)/y^2
|
|
968
|
+
sage: Zy(1/x^2)
|
|
969
|
+
Traceback (most recent call last):
|
|
970
|
+
...
|
|
971
|
+
ValueError: x^(-2) is not in the center
|
|
972
|
+
|
|
973
|
+
ABOUT THE DEFAULT NAME OF THE CENTRAL VARIABLE:
|
|
974
|
+
|
|
975
|
+
A priori, the default is ``z``.
|
|
976
|
+
|
|
977
|
+
However, a variable name is given the first time this method is
|
|
978
|
+
called, the given name become the default for the next calls::
|
|
979
|
+
|
|
980
|
+
sage: # needs sage.rings.finite_rings
|
|
981
|
+
sage: k.<t> = GF(11^3)
|
|
982
|
+
sage: phi = k.frobenius_endomorphism()
|
|
983
|
+
sage: S.<X> = k['X', phi]
|
|
984
|
+
sage: K = S.fraction_field()
|
|
985
|
+
sage: C.<u> = K.center() # first call
|
|
986
|
+
sage: C
|
|
987
|
+
Fraction Field of Univariate Polynomial Ring in u over Finite Field of size 11
|
|
988
|
+
sage: K.center() # second call: the variable name is still u
|
|
989
|
+
Fraction Field of Univariate Polynomial Ring in u over Finite Field of size 11
|
|
990
|
+
|
|
991
|
+
We can update the default variable name by passing in the argument
|
|
992
|
+
``default=True``::
|
|
993
|
+
|
|
994
|
+
sage: # needs sage.rings.finite_rings
|
|
995
|
+
sage: D.<v> = K.center(default=True)
|
|
996
|
+
sage: D
|
|
997
|
+
Fraction Field of Univariate Polynomial Ring in v over Finite Field of size 11
|
|
998
|
+
sage: K.center()
|
|
999
|
+
Fraction Field of Univariate Polynomial Ring in v over Finite Field of size 11
|
|
1000
|
+
"""
|
|
1001
|
+
if name is not None and names is not None:
|
|
1002
|
+
raise ValueError("you must specify the name of the variable")
|
|
1003
|
+
if names is None:
|
|
1004
|
+
if name is None:
|
|
1005
|
+
name = self._center_variable_name
|
|
1006
|
+
if name is None:
|
|
1007
|
+
name = 'z'
|
|
1008
|
+
names = (name,)
|
|
1009
|
+
names = normalize_names(1, names)
|
|
1010
|
+
name = names[0]
|
|
1011
|
+
if name in self._center:
|
|
1012
|
+
center = self._center[name]
|
|
1013
|
+
else:
|
|
1014
|
+
ring = self._ring
|
|
1015
|
+
ringcenter = ring.center(name, default=False)
|
|
1016
|
+
ringembed = ring.coerce_map_from(ringcenter)
|
|
1017
|
+
center = ringcenter.fraction_field()
|
|
1018
|
+
embed = OreFunctionCenterInjection(center, self, ringembed)
|
|
1019
|
+
try:
|
|
1020
|
+
assert not self.has_coerce_map_from(center)
|
|
1021
|
+
self.register_coercion(embed)
|
|
1022
|
+
center.register_conversion(embed.section())
|
|
1023
|
+
except AssertionError:
|
|
1024
|
+
raise ValueError("creation of coercion map fails; consider using another variable name")
|
|
1025
|
+
self._center[name] = center
|
|
1026
|
+
if default or (self._center_variable_name is None):
|
|
1027
|
+
self._center_variable_name = name
|
|
1028
|
+
return center
|