passagemath-modules 10.6.31__cp314-cp314-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
- passagemath_modules.dylibs/libgfortran.5.dylib +0 -0
- passagemath_modules.dylibs/libgmp.10.dylib +0 -0
- passagemath_modules.dylibs/libgsl.28.dylib +0 -0
- passagemath_modules.dylibs/libmpc.3.dylib +0 -0
- passagemath_modules.dylibs/libmpfr.6.dylib +0 -0
- passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- passagemath_modules.dylibs/libquadmath.0.dylib +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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-darwin.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-darwin.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-darwin.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-darwin.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-darwin.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-darwin.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-darwin.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-darwin.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-darwin.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-darwin.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-darwin.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-darwin.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-darwin.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-darwin.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-darwin.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-darwin.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-darwin.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-darwin.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-darwin.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-darwin.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-darwin.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-darwin.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-darwin.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-darwin.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-darwin.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-darwin.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-darwin.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-darwin.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-darwin.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-darwin.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-darwin.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-darwin.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-darwin.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-darwin.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-darwin.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-darwin.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,820 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Drinfeld module morphisms
|
|
5
|
+
|
|
6
|
+
This module provides the class
|
|
7
|
+
:class:`sage.rings.function_fields.drinfeld_module.morphism.DrinfeldModuleMorphism`.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
- Antoine Leudière (2022-04)
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
# *****************************************************************************
|
|
14
|
+
# Copyright (C) 2022 Antoine Leudière <antoine.leudiere@inria.fr>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# http://www.gnu.org/licenses/
|
|
21
|
+
# *****************************************************************************
|
|
22
|
+
|
|
23
|
+
from sage.misc.inherit_comparison import InheritComparisonClasscallMetaclass
|
|
24
|
+
from sage.misc.latex import latex
|
|
25
|
+
from sage.categories.morphism import Morphism
|
|
26
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
27
|
+
from sage.structure.element import coerce_binop
|
|
28
|
+
|
|
29
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
30
|
+
from sage.matrix.constructor import matrix
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DrinfeldModuleMorphism(Morphism, UniqueRepresentation,
|
|
34
|
+
metaclass=InheritComparisonClasscallMetaclass):
|
|
35
|
+
r"""
|
|
36
|
+
This class represents Drinfeld `\mathbb{F}_q[T]`-module morphisms.
|
|
37
|
+
|
|
38
|
+
Let `\phi` and `\psi` be two Drinfeld `\mathbb{F}_q[T]`-modules over
|
|
39
|
+
a field `K`. A *morphism of Drinfeld modules* `\phi \to \psi` is an
|
|
40
|
+
Ore polynomial `f \in K\{\tau\}` such that `f \phi_a = \psi_a f` for
|
|
41
|
+
every `a \in \mathbb{F}_q[T]`. In our case, this is equivalent to `f
|
|
42
|
+
\phi_T = \psi_T f`. An *isogeny* is a nonzero morphism.
|
|
43
|
+
|
|
44
|
+
To create a morphism object, the user should never explicitly
|
|
45
|
+
instantiate :class:`DrinfeldModuleMorphism`, but rather call the
|
|
46
|
+
parent homset with the defining Ore polynomial::
|
|
47
|
+
|
|
48
|
+
sage: Fq = GF(4)
|
|
49
|
+
sage: A.<T> = Fq[]
|
|
50
|
+
sage: K.<z> = Fq.extension(3)
|
|
51
|
+
sage: phi = DrinfeldModule(A, [z, z^2 + z, z^2 + z])
|
|
52
|
+
sage: t = phi.ore_polring().gen()
|
|
53
|
+
sage: ore_pol = t + z^5 + z^3 + z + 1
|
|
54
|
+
sage: psi = phi.velu(ore_pol)
|
|
55
|
+
sage: morphism = Hom(phi, psi)(ore_pol)
|
|
56
|
+
sage: morphism
|
|
57
|
+
Drinfeld Module morphism:
|
|
58
|
+
From: Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
|
|
59
|
+
To: Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
|
|
60
|
+
Defn: t + z^5 + z^3 + z + 1
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
The given Ore polynomial must indeed define a morphism::
|
|
64
|
+
|
|
65
|
+
sage: morphism = Hom(phi, psi)(1)
|
|
66
|
+
Traceback (most recent call last):
|
|
67
|
+
...
|
|
68
|
+
ValueError: Ore polynomial does not define a morphism
|
|
69
|
+
|
|
70
|
+
One can get basic data on the morphism::
|
|
71
|
+
|
|
72
|
+
sage: morphism.domain()
|
|
73
|
+
Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
|
|
74
|
+
sage: morphism.domain() is phi
|
|
75
|
+
True
|
|
76
|
+
|
|
77
|
+
sage: morphism.codomain()
|
|
78
|
+
Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
|
|
79
|
+
sage: morphism.codomain() is psi
|
|
80
|
+
True
|
|
81
|
+
|
|
82
|
+
::
|
|
83
|
+
|
|
84
|
+
sage: morphism.ore_polynomial()
|
|
85
|
+
t + z^5 + z^3 + z + 1
|
|
86
|
+
sage: morphism.ore_polynomial() is ore_pol
|
|
87
|
+
True
|
|
88
|
+
|
|
89
|
+
One can check various properties::
|
|
90
|
+
|
|
91
|
+
sage: morphism.is_zero()
|
|
92
|
+
False
|
|
93
|
+
sage: morphism.is_isogeny()
|
|
94
|
+
True
|
|
95
|
+
sage: morphism.is_endomorphism()
|
|
96
|
+
False
|
|
97
|
+
sage: morphism.is_isomorphism()
|
|
98
|
+
False
|
|
99
|
+
|
|
100
|
+
TESTS::
|
|
101
|
+
|
|
102
|
+
sage: morphism.parent() is Hom(phi, psi)
|
|
103
|
+
True
|
|
104
|
+
sage: Hom(phi, psi)(morphism) == morphism
|
|
105
|
+
True
|
|
106
|
+
|
|
107
|
+
::
|
|
108
|
+
|
|
109
|
+
sage: phi.frobenius_endomorphism().parent() == End(phi)
|
|
110
|
+
True
|
|
111
|
+
sage: End(phi)(0).parent() == End(phi)
|
|
112
|
+
True
|
|
113
|
+
|
|
114
|
+
For the sake of completeness, we explain how the user can directly
|
|
115
|
+
instantiate the class, even though this should never be explicitly
|
|
116
|
+
done::
|
|
117
|
+
|
|
118
|
+
sage: from sage.rings.function_field.drinfeld_modules.morphism import DrinfeldModuleMorphism
|
|
119
|
+
sage: DrinfeldModuleMorphism(Hom(phi, psi), ore_pol)
|
|
120
|
+
Drinfeld Module morphism:
|
|
121
|
+
From: Drinfeld module defined by T |--> (z^2 + z)*t^2 + (z^2 + z)*t + z
|
|
122
|
+
To: Drinfeld module defined by T |--> (z^5 + z^2 + z + 1)*t^2 + (z^4 + z + 1)*t + z
|
|
123
|
+
Defn: t + z^5 + z^3 + z + 1
|
|
124
|
+
sage: DrinfeldModuleMorphism(Hom(phi, psi), ore_pol) is morphism
|
|
125
|
+
True
|
|
126
|
+
"""
|
|
127
|
+
@staticmethod
|
|
128
|
+
def __classcall_private__(cls, parent, x):
|
|
129
|
+
"""
|
|
130
|
+
Create the morphism.
|
|
131
|
+
|
|
132
|
+
INPUT:
|
|
133
|
+
|
|
134
|
+
- ``cls`` -- the class ``DrinfeldModuleMorphism``
|
|
135
|
+
|
|
136
|
+
- ``parent`` -- the Drinfeld module homset
|
|
137
|
+
|
|
138
|
+
- ``x`` -- a morphism of Drinfeld modules or an element
|
|
139
|
+
(either an Ore polynomial or an element in the base
|
|
140
|
+
ring) defining it
|
|
141
|
+
|
|
142
|
+
TESTS::
|
|
143
|
+
|
|
144
|
+
sage: Fq = GF(2)
|
|
145
|
+
sage: A.<T> = Fq[]
|
|
146
|
+
sage: K.<z6> = Fq.extension(6)
|
|
147
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
148
|
+
sage: End(phi)(T + 1)
|
|
149
|
+
Endomorphism of Drinfeld module defined by T |--> t^2 + t + z6
|
|
150
|
+
Defn: t^2 + t + z6 + 1
|
|
151
|
+
|
|
152
|
+
::
|
|
153
|
+
|
|
154
|
+
sage: t = phi.ore_polring().gen()
|
|
155
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
156
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
157
|
+
sage: morphism is Hom(phi, psi)(morphism)
|
|
158
|
+
True
|
|
159
|
+
|
|
160
|
+
::
|
|
161
|
+
|
|
162
|
+
sage: from sage.rings.function_field.drinfeld_modules.morphism import DrinfeldModuleMorphism
|
|
163
|
+
sage: morphism = DrinfeldModuleMorphism(Sets(), t + 1)
|
|
164
|
+
Traceback (most recent call last):
|
|
165
|
+
...
|
|
166
|
+
TypeError: parent should be a DrinfeldModuleHomset
|
|
167
|
+
"""
|
|
168
|
+
from sage.rings.function_field.drinfeld_modules.homset import DrinfeldModuleHomset
|
|
169
|
+
if not isinstance(parent, DrinfeldModuleHomset):
|
|
170
|
+
raise TypeError('parent should be a DrinfeldModuleHomset')
|
|
171
|
+
domain = parent.domain()
|
|
172
|
+
codomain = parent.codomain()
|
|
173
|
+
A = domain.category().function_ring()
|
|
174
|
+
# NOTE: it used to be x.parent() is parent, but this was False.
|
|
175
|
+
# DrinfeldModuleHomset inherits Homset, which does NOT inherit
|
|
176
|
+
# UniqueRepresentation
|
|
177
|
+
if x.parent() == parent:
|
|
178
|
+
# x is a DrinfeldModuleMorphism
|
|
179
|
+
ore_pol = x.ore_polynomial()
|
|
180
|
+
elif domain is codomain and A.has_coerce_map_from(x.parent()):
|
|
181
|
+
# x is in the function field; we return the endomorphism phi_x
|
|
182
|
+
ore_pol = domain(A(x))
|
|
183
|
+
else:
|
|
184
|
+
# x is an Ore polynomial
|
|
185
|
+
ore_pol = domain.ore_polring()(x)
|
|
186
|
+
if ore_pol * domain.gen() != codomain.gen() * ore_pol:
|
|
187
|
+
raise ValueError('Ore polynomial does not define a morphism')
|
|
188
|
+
return cls.__classcall__(cls, parent, ore_pol)
|
|
189
|
+
|
|
190
|
+
def __init__(self, parent, ore_pol):
|
|
191
|
+
r"""
|
|
192
|
+
Initialize ``self``.
|
|
193
|
+
|
|
194
|
+
INPUT:
|
|
195
|
+
|
|
196
|
+
- ``parent`` -- the Drinfeld module homset
|
|
197
|
+
|
|
198
|
+
- ``ore_pol`` -- the Ore polynomial that defines the morphism
|
|
199
|
+
|
|
200
|
+
TESTS::
|
|
201
|
+
|
|
202
|
+
sage: Fq = GF(2)
|
|
203
|
+
sage: A.<T> = Fq[]
|
|
204
|
+
sage: K.<z6> = Fq.extension(6)
|
|
205
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
206
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
207
|
+
sage: t = phi.ore_polring().gen()
|
|
208
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
209
|
+
sage: morphism._domain is phi
|
|
210
|
+
True
|
|
211
|
+
sage: morphism._codomain is psi
|
|
212
|
+
True
|
|
213
|
+
sage: morphism._ore_polynomial == t + z6^5 + z6^2 + 1
|
|
214
|
+
True
|
|
215
|
+
"""
|
|
216
|
+
super().__init__(parent)
|
|
217
|
+
self._domain = parent.domain()
|
|
218
|
+
self._codomain = parent.codomain()
|
|
219
|
+
self._ore_polynomial = ore_pol
|
|
220
|
+
|
|
221
|
+
def _latex_(self):
|
|
222
|
+
r"""
|
|
223
|
+
Return a LaTeX representation of the morphism.
|
|
224
|
+
|
|
225
|
+
EXAMPLES::
|
|
226
|
+
|
|
227
|
+
sage: Fq = GF(2)
|
|
228
|
+
sage: A.<T> = Fq[]
|
|
229
|
+
sage: K.<z6> = Fq.extension(6)
|
|
230
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
231
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
232
|
+
sage: t = phi.ore_polring().gen()
|
|
233
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
234
|
+
sage: latex(morphism)
|
|
235
|
+
t + z_{6}^{5} + z_{6}^{2} + 1
|
|
236
|
+
"""
|
|
237
|
+
return f'{latex(self._ore_polynomial)}'
|
|
238
|
+
|
|
239
|
+
def _repr_(self):
|
|
240
|
+
r"""
|
|
241
|
+
Return a string representation of the morphism.
|
|
242
|
+
|
|
243
|
+
EXAMPLES::
|
|
244
|
+
|
|
245
|
+
sage: Fq = GF(2)
|
|
246
|
+
sage: A.<T> = Fq[]
|
|
247
|
+
sage: K.<z6> = Fq.extension(6)
|
|
248
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
249
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
250
|
+
sage: t = phi.ore_polring().gen()
|
|
251
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
252
|
+
sage: morphism
|
|
253
|
+
Drinfeld Module morphism:
|
|
254
|
+
From: Drinfeld module defined by T |--> t^2 + t + z6
|
|
255
|
+
To: Drinfeld module defined by T |--> t^2 + (z6^4 + z6^2 + 1)*t + z6
|
|
256
|
+
Defn: t + z6^5 + z6^2 + 1
|
|
257
|
+
"""
|
|
258
|
+
if self.is_identity():
|
|
259
|
+
return f'Identity morphism of {self._domain}'
|
|
260
|
+
elif self.is_endomorphism():
|
|
261
|
+
return f'Endomorphism of {self._domain}\n' \
|
|
262
|
+
f' Defn: {self._ore_polynomial}'
|
|
263
|
+
else:
|
|
264
|
+
return f'Drinfeld Module morphism:\n' \
|
|
265
|
+
f' From: {self._domain}\n' \
|
|
266
|
+
f' To: {self._codomain}\n' \
|
|
267
|
+
f' Defn: {self._ore_polynomial}'
|
|
268
|
+
|
|
269
|
+
def __hash__(self):
|
|
270
|
+
r"""
|
|
271
|
+
Return a hash of ``self``.
|
|
272
|
+
|
|
273
|
+
EXAMPLES::
|
|
274
|
+
|
|
275
|
+
sage: Fq = GF(2)
|
|
276
|
+
sage: A.<T> = Fq[]
|
|
277
|
+
sage: K.<z6> = Fq.extension(6)
|
|
278
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
279
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
280
|
+
sage: t = phi.ore_polring().gen()
|
|
281
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
282
|
+
sage: hash(morphism) # random
|
|
283
|
+
-4214883752078138009
|
|
284
|
+
"""
|
|
285
|
+
return hash((self._domain, self._codomain, self._ore_polynomial))
|
|
286
|
+
|
|
287
|
+
def is_zero(self):
|
|
288
|
+
r"""
|
|
289
|
+
Return ``True`` whether the morphism is the zero morphism.
|
|
290
|
+
|
|
291
|
+
EXAMPLES::
|
|
292
|
+
|
|
293
|
+
sage: Fq = GF(2)
|
|
294
|
+
sage: A.<T> = Fq[]
|
|
295
|
+
sage: K.<z6> = Fq.extension(6)
|
|
296
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
297
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
298
|
+
sage: t = phi.ore_polring().gen()
|
|
299
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
300
|
+
sage: morphism.is_zero()
|
|
301
|
+
False
|
|
302
|
+
|
|
303
|
+
::
|
|
304
|
+
|
|
305
|
+
sage: zero_morphism = End(phi)(0)
|
|
306
|
+
sage: zero_morphism.is_zero()
|
|
307
|
+
True
|
|
308
|
+
"""
|
|
309
|
+
return self._ore_polynomial.is_zero()
|
|
310
|
+
|
|
311
|
+
def is_identity(self):
|
|
312
|
+
r"""
|
|
313
|
+
Return ``True`` whether the morphism is the identity morphism.
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: Fq = GF(2)
|
|
318
|
+
sage: A.<T> = Fq[]
|
|
319
|
+
sage: K.<z6> = Fq.extension(6)
|
|
320
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
321
|
+
sage: morphism = End(phi)(1)
|
|
322
|
+
sage: morphism.is_identity()
|
|
323
|
+
True
|
|
324
|
+
|
|
325
|
+
::
|
|
326
|
+
|
|
327
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
328
|
+
sage: t = phi.ore_polring().gen()
|
|
329
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
330
|
+
sage: morphism.is_identity()
|
|
331
|
+
False
|
|
332
|
+
"""
|
|
333
|
+
return self._ore_polynomial == 1
|
|
334
|
+
|
|
335
|
+
def is_isogeny(self):
|
|
336
|
+
r"""
|
|
337
|
+
Return ``True`` whether the morphism is an isogeny.
|
|
338
|
+
|
|
339
|
+
EXAMPLES::
|
|
340
|
+
|
|
341
|
+
sage: Fq = GF(2)
|
|
342
|
+
sage: A.<T> = Fq[]
|
|
343
|
+
sage: K.<z6> = Fq.extension(6)
|
|
344
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
345
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
346
|
+
sage: t = phi.ore_polring().gen()
|
|
347
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
348
|
+
sage: morphism.is_isogeny()
|
|
349
|
+
True
|
|
350
|
+
|
|
351
|
+
::
|
|
352
|
+
|
|
353
|
+
sage: zero_morphism = End(phi)(0)
|
|
354
|
+
sage: zero_morphism.is_isogeny()
|
|
355
|
+
False
|
|
356
|
+
|
|
357
|
+
::
|
|
358
|
+
|
|
359
|
+
sage: identity_morphism = End(phi)(1)
|
|
360
|
+
sage: identity_morphism.is_isogeny()
|
|
361
|
+
True
|
|
362
|
+
|
|
363
|
+
::
|
|
364
|
+
|
|
365
|
+
sage: frobenius_endomorphism = phi.frobenius_endomorphism()
|
|
366
|
+
sage: frobenius_endomorphism.is_isogeny()
|
|
367
|
+
True
|
|
368
|
+
"""
|
|
369
|
+
return not self.is_zero()
|
|
370
|
+
|
|
371
|
+
def is_isomorphism(self):
|
|
372
|
+
r"""
|
|
373
|
+
Return ``True`` whether the morphism is an isomorphism.
|
|
374
|
+
|
|
375
|
+
EXAMPLES::
|
|
376
|
+
|
|
377
|
+
sage: Fq = GF(2)
|
|
378
|
+
sage: A.<T> = Fq[]
|
|
379
|
+
sage: K.<z6> = Fq.extension(6)
|
|
380
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
381
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
382
|
+
sage: t = phi.ore_polring().gen()
|
|
383
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
384
|
+
sage: morphism.is_isomorphism()
|
|
385
|
+
False
|
|
386
|
+
|
|
387
|
+
::
|
|
388
|
+
|
|
389
|
+
sage: zero_morphism = End(phi)(0)
|
|
390
|
+
sage: zero_morphism.is_isomorphism()
|
|
391
|
+
False
|
|
392
|
+
|
|
393
|
+
::
|
|
394
|
+
|
|
395
|
+
sage: identity_morphism = End(phi)(1)
|
|
396
|
+
sage: identity_morphism.is_isomorphism()
|
|
397
|
+
True
|
|
398
|
+
|
|
399
|
+
::
|
|
400
|
+
|
|
401
|
+
sage: frobenius_endomorphism = phi.frobenius_endomorphism()
|
|
402
|
+
sage: frobenius_endomorphism.is_isomorphism()
|
|
403
|
+
False
|
|
404
|
+
"""
|
|
405
|
+
return self.is_isogeny() and self._ore_polynomial.degree() == 0
|
|
406
|
+
|
|
407
|
+
def ore_polynomial(self):
|
|
408
|
+
r"""
|
|
409
|
+
Return the Ore polynomial that defines the morphism.
|
|
410
|
+
|
|
411
|
+
EXAMPLES::
|
|
412
|
+
|
|
413
|
+
sage: Fq = GF(2)
|
|
414
|
+
sage: A.<T> = Fq[]
|
|
415
|
+
sage: K.<z6> = Fq.extension(6)
|
|
416
|
+
sage: phi = DrinfeldModule(A, [z6, 1, 1])
|
|
417
|
+
sage: psi = DrinfeldModule(A, [z6, z6^4 + z6^2 + 1, 1])
|
|
418
|
+
sage: t = phi.ore_polring().gen()
|
|
419
|
+
sage: morphism = Hom(phi, psi)(t + z6^5 + z6^2 + 1)
|
|
420
|
+
sage: ore_pol = morphism.ore_polynomial()
|
|
421
|
+
sage: ore_pol
|
|
422
|
+
t + z6^5 + z6^2 + 1
|
|
423
|
+
|
|
424
|
+
::
|
|
425
|
+
|
|
426
|
+
sage: ore_pol * phi(T) == psi(T) * ore_pol
|
|
427
|
+
True
|
|
428
|
+
"""
|
|
429
|
+
return self._ore_polynomial
|
|
430
|
+
|
|
431
|
+
@coerce_binop
|
|
432
|
+
def __add__(self, other):
|
|
433
|
+
r"""
|
|
434
|
+
Return the sum of this morphism and ``other``.
|
|
435
|
+
|
|
436
|
+
INPUT:
|
|
437
|
+
|
|
438
|
+
- ``other`` -- a morphism of Drinfeld modules in the
|
|
439
|
+
same category
|
|
440
|
+
|
|
441
|
+
TESTS::
|
|
442
|
+
|
|
443
|
+
sage: Fq = GF(5)
|
|
444
|
+
sage: A.<T> = Fq[]
|
|
445
|
+
sage: K.<z> = Fq.extension(3)
|
|
446
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
|
|
447
|
+
sage: t = phi.ore_variable()
|
|
448
|
+
sage: f = phi.hom(t + 1)
|
|
449
|
+
sage: g = T * f
|
|
450
|
+
sage: f + g # indirect doctest
|
|
451
|
+
Drinfeld Module morphism:
|
|
452
|
+
From: Drinfeld module defined by T |--> z*t^3 + t^2 + z
|
|
453
|
+
To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
|
|
454
|
+
Defn: (2*z^2 + 4*z + 4)*t^4 + (z + 1)*t^3 + t^2 + (2*z^2 + 4*z)*t + z + 1
|
|
455
|
+
|
|
456
|
+
We check that coercion from the function ring works::
|
|
457
|
+
|
|
458
|
+
sage: F = phi.frobenius_endomorphism()
|
|
459
|
+
sage: F + T
|
|
460
|
+
Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z
|
|
461
|
+
Defn: (z + 1)*t^3 + t^2 + z
|
|
462
|
+
"""
|
|
463
|
+
return self.parent()(self.ore_polynomial() + other.ore_polynomial())
|
|
464
|
+
|
|
465
|
+
def _composition_(self, other, H):
|
|
466
|
+
r"""
|
|
467
|
+
Return the composite of this morphism and ``other``.
|
|
468
|
+
|
|
469
|
+
EXAMPLES::
|
|
470
|
+
|
|
471
|
+
sage: Fq = GF(2)
|
|
472
|
+
sage: A.<T> = Fq[]
|
|
473
|
+
sage: K.<z> = Fq.extension(3)
|
|
474
|
+
sage: phi = DrinfeldModule(A, [z, 1, z, z^2])
|
|
475
|
+
sage: f = phi.frobenius_endomorphism()
|
|
476
|
+
sage: f
|
|
477
|
+
Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
478
|
+
Defn: t^3
|
|
479
|
+
sage: f * f # indirect doctest
|
|
480
|
+
Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
481
|
+
Defn: t^6
|
|
482
|
+
"""
|
|
483
|
+
return H(self.ore_polynomial() * other.ore_polynomial())
|
|
484
|
+
|
|
485
|
+
def inverse(self):
|
|
486
|
+
r"""
|
|
487
|
+
Return the inverse of this morphism.
|
|
488
|
+
|
|
489
|
+
Only morphisms defined by constant nonzero Ore
|
|
490
|
+
polynomials are invertible.
|
|
491
|
+
|
|
492
|
+
EXAMPLES::
|
|
493
|
+
|
|
494
|
+
sage: Fq = GF(5)
|
|
495
|
+
sage: A.<T> = Fq[]
|
|
496
|
+
sage: K.<z> = Fq.extension(3)
|
|
497
|
+
sage: phi = DrinfeldModule(A, [z, 1, z, z^2])
|
|
498
|
+
sage: f = phi.hom(2); f
|
|
499
|
+
Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
500
|
+
Defn: 2
|
|
501
|
+
sage: f.inverse()
|
|
502
|
+
Endomorphism of Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
503
|
+
Defn: 3
|
|
504
|
+
|
|
505
|
+
Inversion of general isomorphisms between different Drinfeld modules
|
|
506
|
+
also works::
|
|
507
|
+
|
|
508
|
+
sage: g = phi.hom(z); g
|
|
509
|
+
Drinfeld Module morphism:
|
|
510
|
+
From: Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
511
|
+
To: Drinfeld module defined by T |--> z^2*t^3 + (z^2 + 2*z + 3)*t^2 + (z^2 + 3*z)*t + z
|
|
512
|
+
Defn: z
|
|
513
|
+
sage: g.inverse()
|
|
514
|
+
Drinfeld Module morphism:
|
|
515
|
+
From: Drinfeld module defined by T |--> z^2*t^3 + (z^2 + 2*z + 3)*t^2 + (z^2 + 3*z)*t + z
|
|
516
|
+
To: Drinfeld module defined by T |--> z^2*t^3 + z*t^2 + t + z
|
|
517
|
+
Defn: 3*z^2 + 4
|
|
518
|
+
|
|
519
|
+
When the morphism is not invertible, an error is raised::
|
|
520
|
+
|
|
521
|
+
sage: F = phi.frobenius_endomorphism()
|
|
522
|
+
sage: F.inverse()
|
|
523
|
+
Traceback (most recent call last):
|
|
524
|
+
...
|
|
525
|
+
ZeroDivisionError: this morphism is not invertible
|
|
526
|
+
"""
|
|
527
|
+
return self.__invert__()
|
|
528
|
+
|
|
529
|
+
def __invert__(self):
|
|
530
|
+
r"""
|
|
531
|
+
Return the inverse of this morphism.
|
|
532
|
+
|
|
533
|
+
TESTS::
|
|
534
|
+
|
|
535
|
+
sage: Fq = GF(5)
|
|
536
|
+
sage: A.<T> = Fq[]
|
|
537
|
+
sage: K.<z> = Fq.extension(3)
|
|
538
|
+
sage: coeffs = [z] + [K.random_element() for _ in range(10)]
|
|
539
|
+
sage: phi = DrinfeldModule(A, coeffs)
|
|
540
|
+
sage: a = K.random_element()
|
|
541
|
+
sage: while a.is_zero():
|
|
542
|
+
....: a = K.random_element()
|
|
543
|
+
sage: f = phi.hom(a)
|
|
544
|
+
sage: g = ~f
|
|
545
|
+
sage: (f*g).is_identity()
|
|
546
|
+
True
|
|
547
|
+
sage: (g*f).is_identity()
|
|
548
|
+
True
|
|
549
|
+
"""
|
|
550
|
+
if not self.is_isomorphism():
|
|
551
|
+
raise ZeroDivisionError("this morphism is not invertible")
|
|
552
|
+
H = self.codomain().Hom(self.domain())
|
|
553
|
+
return H(~(self.ore_polynomial()[0]))
|
|
554
|
+
|
|
555
|
+
def _motive_matrix(self):
|
|
556
|
+
r"""
|
|
557
|
+
Return the matrix giving the action of this morphism
|
|
558
|
+
on the motives of the underlying Drinfeld modules.
|
|
559
|
+
|
|
560
|
+
For internal use. Do not call this method directly.
|
|
561
|
+
|
|
562
|
+
EXAMPLES::
|
|
563
|
+
|
|
564
|
+
sage: Fq = GF(5)
|
|
565
|
+
sage: A.<T> = Fq[]
|
|
566
|
+
sage: K.<z> = Fq.extension(3)
|
|
567
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1])
|
|
568
|
+
sage: t = phi.ore_variable()
|
|
569
|
+
sage: u = t^2 + (2*z^2 + 3*z + 3)*t + (2*z + 3)
|
|
570
|
+
sage: f = phi.hom(u)
|
|
571
|
+
sage: f._motive_matrix()
|
|
572
|
+
[ T + 3 + z 3 + 3*z + 2*z^2]
|
|
573
|
+
[(1 + z + z^2)*T + 3 + 2*z - z^2 T + 2 - z + 2*z^2]
|
|
574
|
+
"""
|
|
575
|
+
phi = self.domain()
|
|
576
|
+
phiT = phi.gen()
|
|
577
|
+
r = phiT.degree()
|
|
578
|
+
K = phi.base_over_constants_field()
|
|
579
|
+
S = phi.ore_polring()
|
|
580
|
+
Frob = S.twisting_morphism()
|
|
581
|
+
KT = PolynomialRing(K, name='T')
|
|
582
|
+
|
|
583
|
+
# The first row:
|
|
584
|
+
# we write u = u0 + u1*phiT + u2*phiT^2 + ...
|
|
585
|
+
u = self.ore_polynomial()
|
|
586
|
+
us = [ ]
|
|
587
|
+
while not u.is_zero():
|
|
588
|
+
u, ui = u.right_quo_rem(phiT)
|
|
589
|
+
us.append(ui)
|
|
590
|
+
l = len(us)
|
|
591
|
+
row = [KT([us[i][j] for i in range(l)]) for j in range(r)]
|
|
592
|
+
rows = [row]
|
|
593
|
+
|
|
594
|
+
# The next rows:
|
|
595
|
+
# each row is obtained from the previous one by
|
|
596
|
+
# applying the semi-linear transformation f |-> t*f
|
|
597
|
+
inv = K(phiT[r]).inverse()
|
|
598
|
+
B = inv * phiT
|
|
599
|
+
T = KT.gen()
|
|
600
|
+
for i in range(1, r):
|
|
601
|
+
twist = [c.map_coefficients(Frob) for c in row]
|
|
602
|
+
row = [(inv*T - B[0]) * twist[-1]]
|
|
603
|
+
row += [twist[j-1] - B[j]*twist[-1] for j in range(1, r)]
|
|
604
|
+
rows.append(row)
|
|
605
|
+
|
|
606
|
+
return matrix(KT, rows)
|
|
607
|
+
|
|
608
|
+
def norm(self, ideal=True):
|
|
609
|
+
r"""
|
|
610
|
+
Return the norm of this isogeny.
|
|
611
|
+
|
|
612
|
+
INPUT:
|
|
613
|
+
|
|
614
|
+
- ``ideal`` -- boolean (default: ``True``); if ``True``, return the
|
|
615
|
+
norm as an ideal in the function ring of the Drinfeld modules; if
|
|
616
|
+
``False``, return the norm as an element in this function ring (only
|
|
617
|
+
relevant for endomorphisms)
|
|
618
|
+
|
|
619
|
+
EXAMPLES::
|
|
620
|
+
|
|
621
|
+
sage: Fq = GF(5)
|
|
622
|
+
sage: A.<T> = Fq[]
|
|
623
|
+
sage: K.<z> = Fq.extension(3)
|
|
624
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
|
|
625
|
+
sage: t = phi.ore_variable()
|
|
626
|
+
sage: f = phi.hom(t + 1)
|
|
627
|
+
sage: f.norm()
|
|
628
|
+
Principal ideal (T + 4) of Univariate Polynomial Ring in T over Finite Field of size 5
|
|
629
|
+
|
|
630
|
+
The norm of the Frobenius endomorphism is equal to the characteristic::
|
|
631
|
+
|
|
632
|
+
sage: F = phi.frobenius_endomorphism()
|
|
633
|
+
sage: F.norm()
|
|
634
|
+
Principal ideal (T^3 + 3*T + 3) of Univariate Polynomial Ring in T over Finite Field of size 5
|
|
635
|
+
sage: phi.characteristic()
|
|
636
|
+
T^3 + 3*T + 3
|
|
637
|
+
|
|
638
|
+
For `a` in the underlying function ring, the norm of the
|
|
639
|
+
endomorphism given by `\phi_a` is `a^r` where `r` is the rank::
|
|
640
|
+
|
|
641
|
+
sage: g = phi.hom(T)
|
|
642
|
+
sage: g.norm()
|
|
643
|
+
Principal ideal (T^3) of Univariate Polynomial Ring in T over Finite Field of size 5
|
|
644
|
+
|
|
645
|
+
sage: h = phi.hom(T+1)
|
|
646
|
+
sage: h.norm()
|
|
647
|
+
Principal ideal (T^3 + 3*T^2 + 3*T + 1) of Univariate Polynomial Ring in T over Finite Field of size 5
|
|
648
|
+
|
|
649
|
+
For endomorphisms, the norm is not an ideal of `A` but it makes
|
|
650
|
+
sense as an actual element of `A`. We can get this element by passing
|
|
651
|
+
in the argument ``ideal=False``::
|
|
652
|
+
|
|
653
|
+
sage: phi.hom(2*T).norm(ideal=False)
|
|
654
|
+
3*T^3
|
|
655
|
+
|
|
656
|
+
sage: f.norm(ideal=False)
|
|
657
|
+
Traceback (most recent call last):
|
|
658
|
+
...
|
|
659
|
+
ValueError: norm is defined as an actual element only for endomorphisms
|
|
660
|
+
"""
|
|
661
|
+
nu = self._motive_matrix().det()
|
|
662
|
+
# We cast to A
|
|
663
|
+
A = self.domain().function_ring()
|
|
664
|
+
if ideal:
|
|
665
|
+
nu = A([c.in_base() for c in nu.monic().list()])
|
|
666
|
+
return A.ideal(nu)
|
|
667
|
+
elif self.domain() is self.codomain():
|
|
668
|
+
return A([c.in_base() for c in nu.list()])
|
|
669
|
+
else:
|
|
670
|
+
raise ValueError("norm is defined as an actual element only for endomorphisms")
|
|
671
|
+
|
|
672
|
+
def dual_isogeny(self):
|
|
673
|
+
r"""
|
|
674
|
+
Return a dual isogeny to this morphism.
|
|
675
|
+
|
|
676
|
+
By definition, a dual isogeny of `f : \phi \to \psi` is an
|
|
677
|
+
isogeny `g : \psi \to \phi` such that the composite `g \circ f`
|
|
678
|
+
is the multiplication by a generator of the norm of `f`.
|
|
679
|
+
|
|
680
|
+
EXAMPLES::
|
|
681
|
+
|
|
682
|
+
sage: Fq = GF(5)
|
|
683
|
+
sage: A.<T> = Fq[]
|
|
684
|
+
sage: K.<z> = Fq.extension(3)
|
|
685
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
|
|
686
|
+
sage: t = phi.ore_variable()
|
|
687
|
+
sage: f = phi.hom(t + 1)
|
|
688
|
+
sage: f
|
|
689
|
+
Drinfeld Module morphism:
|
|
690
|
+
From: Drinfeld module defined by T |--> z*t^3 + t^2 + z
|
|
691
|
+
To: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
|
|
692
|
+
Defn: t + 1
|
|
693
|
+
sage: g = f.dual_isogeny()
|
|
694
|
+
sage: g
|
|
695
|
+
Drinfeld Module morphism:
|
|
696
|
+
From: Drinfeld module defined by T |--> (2*z^2 + 4*z + 4)*t^3 + (3*z^2 + 2*z + 2)*t^2 + (2*z^2 + 3*z + 4)*t + z
|
|
697
|
+
To: Drinfeld module defined by T |--> z*t^3 + t^2 + z
|
|
698
|
+
Defn: z*t^2 + (4*z + 1)*t + z + 4
|
|
699
|
+
|
|
700
|
+
We check that `f \circ g` (resp. `g \circ f`) is the multiplication
|
|
701
|
+
by the norm of `f`::
|
|
702
|
+
|
|
703
|
+
sage: a = f.norm().gen(); a
|
|
704
|
+
T + 4
|
|
705
|
+
sage: g * f == phi.hom(a)
|
|
706
|
+
True
|
|
707
|
+
|
|
708
|
+
sage: psi = f.codomain()
|
|
709
|
+
sage: f * g == psi.hom(a)
|
|
710
|
+
True
|
|
711
|
+
|
|
712
|
+
TESTS::
|
|
713
|
+
|
|
714
|
+
sage: zero = phi.hom(0)
|
|
715
|
+
sage: zero.dual_isogeny()
|
|
716
|
+
Traceback (most recent call last):
|
|
717
|
+
...
|
|
718
|
+
ValueError: the dual isogeny of the zero morphism is not defined
|
|
719
|
+
"""
|
|
720
|
+
if not self.is_isogeny():
|
|
721
|
+
raise ValueError("the dual isogeny of the zero morphism is not defined")
|
|
722
|
+
nu = self._motive_matrix().det().monic()
|
|
723
|
+
A = self.domain().function_ring()
|
|
724
|
+
nu = A([c.in_base() for c in nu.list()])
|
|
725
|
+
dual = self.domain()(nu) // self.ore_polynomial()
|
|
726
|
+
return self.codomain().hom(dual, codomain=self.domain())
|
|
727
|
+
|
|
728
|
+
def characteristic_polynomial(self, var='X'):
|
|
729
|
+
r"""
|
|
730
|
+
Return the characteristic polynomial of this endomorphism.
|
|
731
|
+
|
|
732
|
+
INPUT:
|
|
733
|
+
|
|
734
|
+
- ``var`` -- string (default: ``X``), the name of the
|
|
735
|
+
variable of the characteristic polynomial
|
|
736
|
+
|
|
737
|
+
EXAMPLES::
|
|
738
|
+
|
|
739
|
+
sage: Fq = GF(5)
|
|
740
|
+
sage: A.<T> = Fq[]
|
|
741
|
+
sage: K.<z> = Fq.extension(3)
|
|
742
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
|
|
743
|
+
|
|
744
|
+
sage: f = phi.frobenius_endomorphism()
|
|
745
|
+
sage: f.characteristic_polynomial()
|
|
746
|
+
X^3 + (T + 1)*X^2 + (2*T + 3)*X + 2*T^3 + T + 1
|
|
747
|
+
|
|
748
|
+
We verify, on an example, that the characteristic polynomial
|
|
749
|
+
of a morphism corresponding to `\phi_a` is `(X-a)^r` where `r`
|
|
750
|
+
is the rank::
|
|
751
|
+
|
|
752
|
+
sage: g = phi.hom(T^2 + 1)
|
|
753
|
+
sage: chi = g.characteristic_polynomial()
|
|
754
|
+
sage: chi.factor() # needs sage.libs.singular
|
|
755
|
+
(X + 4*T^2 + 4)^3
|
|
756
|
+
|
|
757
|
+
An example with another variable name::
|
|
758
|
+
|
|
759
|
+
sage: f.characteristic_polynomial(var='Y')
|
|
760
|
+
Y^3 + (T + 1)*Y^2 + (2*T + 3)*Y + 2*T^3 + T + 1
|
|
761
|
+
|
|
762
|
+
TESTS::
|
|
763
|
+
|
|
764
|
+
sage: t = phi.ore_variable()
|
|
765
|
+
sage: isog = phi.hom(t + 1)
|
|
766
|
+
sage: isog.characteristic_polynomial()
|
|
767
|
+
Traceback (most recent call last):
|
|
768
|
+
...
|
|
769
|
+
ValueError: characteristic polynomial is only defined for endomorphisms
|
|
770
|
+
"""
|
|
771
|
+
if self.domain() is not self.codomain():
|
|
772
|
+
raise ValueError("characteristic polynomial is only defined for endomorphisms")
|
|
773
|
+
P = self._motive_matrix().charpoly()
|
|
774
|
+
# We cast to the correct parent
|
|
775
|
+
A = self.domain().function_ring()
|
|
776
|
+
parent = PolynomialRing(A, name=var)
|
|
777
|
+
return parent([A([c.in_base() for c in co.list()]) for co in P.list()])
|
|
778
|
+
|
|
779
|
+
def charpoly(self, var='X'):
|
|
780
|
+
r"""
|
|
781
|
+
Return the characteristic polynomial of this endomorphism.
|
|
782
|
+
|
|
783
|
+
INPUT:
|
|
784
|
+
|
|
785
|
+
- ``var`` -- string (default: ``'X'``); the name of the
|
|
786
|
+
variable of the characteristic polynomial
|
|
787
|
+
|
|
788
|
+
EXAMPLES::
|
|
789
|
+
|
|
790
|
+
sage: Fq = GF(5)
|
|
791
|
+
sage: A.<T> = Fq[]
|
|
792
|
+
sage: K.<z> = Fq.extension(3)
|
|
793
|
+
sage: phi = DrinfeldModule(A, [z, 0, 1, z])
|
|
794
|
+
|
|
795
|
+
sage: f = phi.frobenius_endomorphism()
|
|
796
|
+
sage: chi = f.charpoly()
|
|
797
|
+
sage: chi
|
|
798
|
+
X^3 + (T + 1)*X^2 + (2*T + 3)*X + 2*T^3 + T + 1
|
|
799
|
+
|
|
800
|
+
We check that the characteristic polynomial annihilates the
|
|
801
|
+
morphism (Cayley-Hamilton's theorem)::
|
|
802
|
+
|
|
803
|
+
sage: chi(f)
|
|
804
|
+
Endomorphism of Drinfeld module defined by T |--> z*t^3 + t^2 + z
|
|
805
|
+
Defn: 0
|
|
806
|
+
|
|
807
|
+
We verify, on an example, that the characteristic polynomial
|
|
808
|
+
of the morphism corresponding to `\phi_a` is `(X-a)^r` where `r`
|
|
809
|
+
is the rank::
|
|
810
|
+
|
|
811
|
+
sage: g = phi.hom(T^2 + 1)
|
|
812
|
+
sage: g.charpoly().factor() # needs sage.libs.singular
|
|
813
|
+
(X + 4*T^2 + 4)^3
|
|
814
|
+
|
|
815
|
+
An example with another variable name::
|
|
816
|
+
|
|
817
|
+
sage: f.charpoly(var='Y')
|
|
818
|
+
Y^3 + (T + 1)*Y^2 + (2*T + 3)*Y + 2*T^3 + T + 1
|
|
819
|
+
"""
|
|
820
|
+
return self.characteristic_polynomial(var)
|