passagemath-modules 10.5.46__cp310-cp310-macosx_14_0_arm64.whl → 10.6.20__cp310-cp310-macosx_14_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.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/METADATA +49 -44
- {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/RECORD +320 -314
- passagemath_modules.dylibs/libmpc.3.dylib +0 -0
- passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- sage/algebras/clifford_algebra.py +2 -2
- sage/algebras/clifford_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/clifford_algebra_element.pyx +4 -2
- sage/algebras/exterior_algebra_groebner.cpython-310-darwin.so +0 -0
- sage/algebras/exterior_algebra_groebner.pyx +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +83 -5
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +28 -3
- sage/algebras/finite_gca.py +1 -1
- sage/algebras/lie_algebras/bgg_dual_module.py +18 -11
- sage/algebras/lie_algebras/classical_lie_algebra.py +3 -3
- sage/algebras/lie_algebras/examples.py +2 -2
- sage/algebras/lie_algebras/free_lie_algebra.py +1 -1
- sage/algebras/lie_algebras/heisenberg.py +4 -4
- sage/algebras/lie_algebras/lie_algebra.py +1 -1
- sage/algebras/lie_algebras/lie_algebra_element.cpython-310-darwin.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +63 -27
- sage/algebras/lie_algebras/quotient.py +40 -29
- sage/algebras/lie_algebras/subalgebra.py +76 -53
- sage/algebras/lie_algebras/verma_module.py +1 -3
- sage/algebras/octonion_algebra.cpython-310-darwin.so +0 -0
- sage/algebras/octonion_algebra.pyx +1 -1
- sage/algebras/orlik_solomon.py +4 -4
- sage/algebras/orlik_terao.py +4 -4
- sage/algebras/steenrod/steenrod_algebra.py +37 -30
- sage/algebras/steenrod/steenrod_algebra_bases.py +2 -2
- sage/algebras/steenrod/steenrod_algebra_misc.py +4 -4
- sage/algebras/steenrod/steenrod_algebra_mult.py +2 -2
- sage/all__sagemath_modules.py +1 -0
- sage/calculus/integration.cpython-310-darwin.so +0 -0
- sage/calculus/integration.pyx +6 -5
- sage/calculus/interpolation.cpython-310-darwin.so +0 -0
- sage/calculus/interpolators.cpython-310-darwin.so +0 -0
- sage/calculus/ode.cpython-310-darwin.so +0 -0
- sage/calculus/ode.pxd +2 -2
- sage/calculus/ode.pyx +6 -4
- sage/calculus/riemann.cpython-310-darwin.so +0 -0
- sage/calculus/riemann.pyx +68 -48
- sage/calculus/transforms/dwt.cpython-310-darwin.so +0 -0
- sage/calculus/transforms/fft.cpython-310-darwin.so +0 -0
- sage/coding/ag_code_decoders.cpython-310-darwin.so +0 -0
- sage/coding/ag_code_decoders.pyx +31 -31
- sage/coding/binary_code.cpython-310-darwin.so +0 -0
- sage/coding/binary_code.pxd +6 -6
- sage/coding/binary_code.pyx +212 -173
- sage/coding/guruswami_sudan/utils.py +3 -5
- sage/coding/kasami_codes.cpython-310-darwin.so +0 -0
- sage/coding/kasami_codes.pyx +20 -24
- sage/coding/linear_code.py +2 -2
- sage/coding/linear_code_no_metric.py +5 -5
- sage/coding/linear_rank_metric.py +81 -19
- sage/combinat/free_module.py +22 -2
- sage/combinat/root_system/ambient_space.py +1 -1
- sage/combinat/root_system/associahedron.py +4 -4
- sage/combinat/root_system/braid_move_calculator.py +1 -1
- sage/combinat/root_system/braid_orbit.cpython-310-darwin.so +0 -0
- sage/combinat/root_system/branching_rules.py +2 -2
- sage/combinat/root_system/cartan_type.py +14 -14
- sage/combinat/root_system/coxeter_group.py +2 -2
- sage/combinat/root_system/coxeter_type.py +11 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +8 -8
- sage/combinat/root_system/fundamental_group.py +2 -4
- sage/combinat/root_system/hecke_algebra_representation.py +1 -1
- sage/combinat/root_system/pieri_factors.py +2 -2
- sage/combinat/root_system/root_lattice_realization_algebras.py +1 -1
- sage/combinat/root_system/root_lattice_realizations.py +1 -1
- sage/combinat/root_system/type_folded.py +3 -3
- sage/combinat/root_system/type_reducible.py +8 -7
- sage/combinat/root_system/type_super_A.py +2 -2
- sage/combinat/root_system/weight_lattice_realizations.py +9 -8
- sage/combinat/root_system/weyl_characters.py +1 -1
- sage/crypto/__init__.py +1 -0
- sage/crypto/block_cipher/des.py +1 -1
- sage/crypto/block_cipher/miniaes.py +3 -3
- sage/crypto/block_cipher/present.py +3 -3
- sage/crypto/block_cipher/sdes.py +3 -3
- sage/crypto/boolean_function.cpython-310-darwin.so +0 -0
- sage/crypto/boolean_function.pyx +22 -23
- sage/crypto/key_exchange/diffie_hellman.py +4 -9
- sage/crypto/mq/sr.py +1 -1
- sage/crypto/public_key/blum_goldwasser.py +3 -3
- sage/crypto/sbox.cpython-310-darwin.so +0 -0
- sage/crypto/sbox.pyx +1 -1
- sage/crypto/sboxes.py +22 -0
- sage/crypto/util.py +4 -6
- sage/ext/interpreters/__init__.py +1 -1
- sage/ext/interpreters/all__sagemath_modules.py +1 -1
- sage/ext/interpreters/wrapper_cc.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +5 -5
- sage/ext/interpreters/wrapper_cc.pyx +1 -1
- sage/ext/interpreters/wrapper_cdf.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +5 -7
- sage/ext/interpreters/wrapper_cdf.pyx +4 -10
- sage/ext/interpreters/wrapper_rdf.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +1 -1
- sage/ext/interpreters/wrapper_rdf.pyx +1 -1
- sage/ext/interpreters/wrapper_rr.cpython-310-darwin.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +5 -5
- sage/ext/interpreters/wrapper_rr.pyx +1 -2
- sage/geometry/toric_lattice.py +3 -3
- sage/geometry/toric_lattice_element.cpython-310-darwin.so +0 -0
- sage/groups/additive_abelian/additive_abelian_group.py +1 -1
- sage/groups/additive_abelian/qmodnz.py +4 -4
- sage/groups/matrix_gps/coxeter_group.py +17 -4
- sage/groups/matrix_gps/group_element.cpython-310-darwin.so +0 -0
- sage/groups/misc_gps/argument_groups.py +2 -2
- sage/groups/misc_gps/imaginary_groups.py +4 -4
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-310-darwin.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-310-darwin.so +0 -0
- sage/homology/chain_complex.py +0 -2
- sage/homology/hochschild_complex.py +3 -3
- sage/homology/homology_morphism.py +6 -6
- sage/homology/homology_vector_space_with_basis.py +1 -1
- sage/libs/gsl/array.cpython-310-darwin.so +0 -0
- sage/libs/mpmath/utils.cpython-310-darwin.so +0 -0
- sage/matrix/action.cpython-310-darwin.so +0 -0
- sage/matrix/args.cpython-310-darwin.so +0 -0
- sage/matrix/args.pyx +25 -10
- sage/matrix/benchmark.py +8 -4
- sage/matrix/compute_J_ideal.py +2 -2
- sage/matrix/constructor.cpython-310-darwin.so +0 -0
- sage/matrix/echelon_matrix.cpython-310-darwin.so +0 -0
- sage/matrix/echelon_matrix.pyx +1 -1
- sage/matrix/matrix0.cpython-310-darwin.so +0 -0
- sage/matrix/matrix0.pxd +3 -3
- sage/matrix/matrix0.pyx +7 -5
- sage/matrix/matrix1.cpython-310-darwin.so +0 -0
- sage/matrix/matrix1.pyx +87 -48
- sage/matrix/matrix2.cpython-310-darwin.so +0 -0
- sage/matrix/matrix2.pxd +3 -3
- sage/matrix/matrix2.pyx +758 -75
- sage/matrix/matrix_cdv.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_complex_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_complex_double_dense.pyx +1 -1
- sage/matrix/matrix_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_dense.pyx +2 -3
- sage/matrix/matrix_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_double_dense.pyx +11 -5
- sage/matrix/matrix_double_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_generic_sparse.pyx +1 -1
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_numpy_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_polynomial_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_polynomial_dense.pyx +952 -261
- sage/matrix/matrix_real_double_dense.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_sparse.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_sparse.pyx +2 -3
- sage/matrix/matrix_window.cpython-310-darwin.so +0 -0
- sage/matrix/matrix_window.pyx +2 -2
- sage/matrix/misc_mpfr.cpython-310-darwin.so +0 -0
- sage/matrix/operation_table.py +0 -2
- sage/matrix/special.py +4 -0
- sage/matrix/strassen.cpython-310-darwin.so +0 -0
- sage/matrix/strassen.pyx +1 -1
- sage/matroids/basis_exchange_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/basis_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/chow_ring.py +68 -65
- sage/matroids/chow_ring_ideal.py +41 -38
- sage/matroids/circuit_closures_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/circuits_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/database_matroids.py +16 -5
- sage/matroids/dual_matroid.py +2 -2
- sage/matroids/extension.cpython-310-darwin.so +0 -0
- sage/matroids/flats_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/gammoid.py +1 -1
- sage/matroids/graphic_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/graphic_matroid.pyx +3 -3
- sage/matroids/lean_matrix.cpython-310-darwin.so +0 -0
- sage/matroids/lean_matrix.pyx +22 -22
- sage/matroids/linear_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/linear_matroid.pyx +13 -13
- sage/matroids/matroid.cpython-310-darwin.so +0 -0
- sage/matroids/matroid.pyx +15 -15
- sage/matroids/matroids_plot_helpers.py +48 -46
- sage/matroids/minor_matroid.py +2 -2
- sage/matroids/set_system.cpython-310-darwin.so +0 -0
- sage/matroids/transversal_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/transversal_matroid.pyx +3 -3
- sage/matroids/union_matroid.cpython-310-darwin.so +0 -0
- sage/matroids/union_matroid.pyx +3 -0
- sage/matroids/unpickling.cpython-310-darwin.so +0 -0
- sage/matroids/utilities.py +2 -2
- sage/misc/c3.cpython-310-darwin.so +0 -0
- sage/misc/compat.py +1 -2
- sage/misc/pickle_old.cpython-310-darwin.so +0 -0
- sage/modules/diamond_cutting.py +117 -30
- sage/modules/fg_pid/fgp_module.py +3 -3
- sage/modules/filtered_vector_space.py +4 -4
- sage/modules/finite_submodule_iter.cpython-310-darwin.so +0 -0
- sage/modules/fp_graded/free_module.py +2 -2
- sage/modules/fp_graded/module.py +2 -2
- sage/modules/fp_graded/morphism.py +4 -4
- sage/modules/fp_graded/steenrod/morphism.py +1 -1
- sage/modules/free_module.py +144 -15
- sage/modules/free_module_element.cpython-310-darwin.so +0 -0
- sage/modules/free_module_element.pyx +4 -4
- sage/modules/free_module_integer.py +2 -2
- sage/modules/free_module_morphism.py +3 -3
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +24 -13
- sage/modules/matrix_morphism.py +9 -9
- sage/modules/multi_filtered_vector_space.py +4 -4
- 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 +11 -1
- sage/modules/submodule.py +1 -1
- sage/modules/torsion_quadratic_module.py +1 -1
- sage/modules/vector_complex_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_integer_sparse.pyx +4 -4
- sage/modules/vector_modn_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_modn_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_numpy_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_numpy_integer_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_dense.pyx +1 -1
- sage/modules/vector_rational_sparse.cpython-310-darwin.so +0 -0
- sage/modules/vector_rational_sparse.pyx +5 -5
- sage/modules/vector_real_double_dense.cpython-310-darwin.so +0 -0
- sage/modules/vector_space_morphism.py +2 -2
- sage/modules/with_basis/cell_module.py +17 -0
- sage/modules/with_basis/indexed_element.cpython-310-darwin.so +0 -0
- sage/modules/with_basis/indexed_element.pyx +1 -1
- sage/modules/with_basis/invariant.py +1 -1
- sage/modules/with_basis/representation.py +0 -1
- sage/modules/with_basis/subquotient.py +2 -2
- sage/numerical/gauss_legendre.cpython-310-darwin.so +0 -0
- sage/probability/probability_distribution.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/binary_qf.py +7 -7
- sage/quadratic_forms/bqf_class_group.py +26 -92
- sage/quadratic_forms/count_local_2.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/extras.py +1 -1
- sage/quadratic_forms/quadratic_form.py +5 -4
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +7 -4
- sage/quadratic_forms/quadratic_form__evaluate.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +10 -10
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +2 -2
- sage/quadratic_forms/ternary.cpython-310-darwin.so +0 -0
- sage/quadratic_forms/ternary_qf.py +50 -83
- sage/rings/complex_conversion.cpython-310-darwin.so +0 -0
- sage/rings/complex_double.cpython-310-darwin.so +0 -0
- sage/rings/complex_double.pxd +1 -0
- sage/rings/complex_double.pyx +37 -32
- sage/rings/complex_mpc.cpython-310-darwin.so +0 -0
- sage/rings/complex_mpc.pyx +27 -23
- sage/rings/complex_mpfr.cpython-310-darwin.so +0 -0
- sage/rings/complex_mpfr.pyx +11 -9
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +277 -21
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +10 -1
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1 -1
- sage/rings/function_field/drinfeld_modules/homset.py +1 -2
- sage/rings/function_field/drinfeld_modules/morphism.py +2 -2
- sage/rings/function_field/hermite_form_polynomial.cpython-310-darwin.so +0 -0
- sage/rings/function_field/khuri_makdisi.cpython-310-darwin.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +27 -25
- sage/rings/invariants/invariant_theory.py +61 -60
- sage/rings/invariants/reconstruction.py +8 -8
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/ore_function_element.py +1 -1
- sage/rings/polynomial/ore_polynomial_element.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +8 -8
- sage/rings/polynomial/ore_polynomial_ring.py +134 -17
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +3 -4
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-310-darwin.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +2 -5
- sage/rings/real_double_element_gsl.cpython-310-darwin.so +0 -0
- sage/rings/real_mpfr.cpython-310-darwin.so +0 -0
- sage/rings/real_mpfr.pyx +25 -7
- sage/rings/ring_extension.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension.pyx +4 -2
- sage/rings/ring_extension_conversion.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension_element.cpython-310-darwin.so +0 -0
- sage/rings/ring_extension_element.pyx +42 -0
- sage/rings/ring_extension_morphism.cpython-310-darwin.so +0 -0
- sage/schemes/projective/cohomology.py +2 -2
- sage/stats/basic_stats.py +9 -6
- sage/stats/distributions/dgs_misc.h +11 -4
- sage/stats/distributions/discrete_gaussian_integer.cpython-310-darwin.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +9 -7
- sage/stats/hmm/chmm.cpython-310-darwin.so +0 -0
- sage/stats/hmm/chmm.pyx +13 -13
- sage/stats/hmm/distributions.cpython-310-darwin.so +0 -0
- sage/stats/hmm/distributions.pxd +3 -3
- sage/stats/hmm/distributions.pyx +3 -3
- sage/stats/hmm/hmm.cpython-310-darwin.so +0 -0
- sage/stats/hmm/hmm.pxd +3 -3
- sage/stats/hmm/hmm.pyx +6 -6
- sage/stats/hmm/util.cpython-310-darwin.so +0 -0
- sage/stats/hmm/util.pyx +6 -6
- sage/stats/intlist.cpython-310-darwin.so +0 -0
- sage/stats/intlist.pxd +3 -3
- sage/stats/time_series.cpython-310-darwin.so +0 -0
- sage/tensor/modules/alternating_contr_tensor.py +3 -3
- sage/tensor/modules/comp.py +3 -3
- sage/tensor/modules/ext_pow_free_module.py +3 -3
- sage/tensor/modules/format_utilities.py +3 -3
- sage/tensor/modules/free_module_linear_group.py +3 -3
- sage/tensor/modules/free_module_morphism.py +0 -1
- sage/tensor/modules/tensor_free_module.py +3 -3
- sage/tensor/modules/tensor_free_submodule.py +1 -1
- sage/tensor/modules/tensor_free_submodule_basis.py +1 -1
- sage/tensor/modules/tensor_with_indices.py +5 -5
- {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/WHEEL +0 -0
- {passagemath_modules-10.5.46.dist-info → passagemath_modules-10.6.20.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Elements in Ore modules
|
|
4
|
+
|
|
5
|
+
AUTHOR:
|
|
6
|
+
|
|
7
|
+
- Xavier Caruso (2024-10)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# ***************************************************************************
|
|
11
|
+
# Copyright (C) 2024 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
12
|
+
#
|
|
13
|
+
# This program is free software: you can redistribute it and/or modify
|
|
14
|
+
# it under the terms of the GNU General Public License as published by
|
|
15
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
16
|
+
# (at your option) any later version.
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ***************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.misc.repr import repr_lincomb
|
|
21
|
+
from sage.modules.free_module_element import FreeModuleElement_generic_dense
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class OreModuleElement(FreeModuleElement_generic_dense):
|
|
25
|
+
r"""
|
|
26
|
+
A generic element of a Ore module.
|
|
27
|
+
"""
|
|
28
|
+
def _repr_(self):
|
|
29
|
+
r"""
|
|
30
|
+
Return a string representation of this element.
|
|
31
|
+
|
|
32
|
+
EXAMPLES::
|
|
33
|
+
|
|
34
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
35
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
36
|
+
sage: M.<v,w> = S.quotient_module((t+1)*X^2 + 1)
|
|
37
|
+
|
|
38
|
+
sage: v - w # indirect doctest
|
|
39
|
+
v - w
|
|
40
|
+
sage: w - v # indirect doctest
|
|
41
|
+
-v + w
|
|
42
|
+
sage: X^5*v # indirect doctest
|
|
43
|
+
((-4*t+2)/(t^4+4*t^3+6*t^2+4*t+1))*v + ((t-5)/(t^3+3*t^2+3*t+1))*w
|
|
44
|
+
"""
|
|
45
|
+
parent = self.parent()
|
|
46
|
+
names = parent._names
|
|
47
|
+
if parent._names is None:
|
|
48
|
+
return self.parent()._repr_element(self)
|
|
49
|
+
else:
|
|
50
|
+
return repr_lincomb([(names[i], self[i]) for i in range(len(names))])
|
|
51
|
+
|
|
52
|
+
def _latex_(self):
|
|
53
|
+
r"""
|
|
54
|
+
Return a LaTeX representation of this element.
|
|
55
|
+
|
|
56
|
+
EXAMPLES::
|
|
57
|
+
|
|
58
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
59
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
60
|
+
sage: M.<v,w> = S.quotient_module((t+1)*X^2 + 1)
|
|
61
|
+
|
|
62
|
+
sage: latex(v - w)
|
|
63
|
+
v - w
|
|
64
|
+
sage: latex(w - v)
|
|
65
|
+
-v + w
|
|
66
|
+
sage: latex(X^5*v)
|
|
67
|
+
\left(\frac{-4 t + 2}{t^{4} + 4 t^{3} + 6 t^{2} + 4 t + 1}\right) v + \left(\frac{t - 5}{t^{3} + 3 t^{2} + 3 t + 1}\right) w
|
|
68
|
+
"""
|
|
69
|
+
parent = self.parent()
|
|
70
|
+
if parent._names is None:
|
|
71
|
+
return self.parent()._latex_element(self)
|
|
72
|
+
else:
|
|
73
|
+
names = parent._latex_names
|
|
74
|
+
return repr_lincomb([(names[i], self[i]) for i in range(len(names))], is_latex=True)
|
|
75
|
+
|
|
76
|
+
def is_mutable(self) -> bool:
|
|
77
|
+
r"""
|
|
78
|
+
Always return ``False`` since elements in Ore modules
|
|
79
|
+
are all immutable.
|
|
80
|
+
|
|
81
|
+
EXAMPLES::
|
|
82
|
+
|
|
83
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
84
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
85
|
+
sage: M = S.quotient_module(X^2 + t)
|
|
86
|
+
|
|
87
|
+
sage: v, w = M.basis()
|
|
88
|
+
sage: v
|
|
89
|
+
(1, 0)
|
|
90
|
+
sage: v.is_mutable()
|
|
91
|
+
False
|
|
92
|
+
sage: v[1] = 1
|
|
93
|
+
Traceback (most recent call last):
|
|
94
|
+
...
|
|
95
|
+
ValueError: vectors in Ore modules are immutable
|
|
96
|
+
"""
|
|
97
|
+
return False
|
|
98
|
+
|
|
99
|
+
def __setitem__(self, i, v):
|
|
100
|
+
r"""
|
|
101
|
+
Always raise an error since elements in Ore modules are
|
|
102
|
+
all immutable.
|
|
103
|
+
|
|
104
|
+
TESTS::
|
|
105
|
+
|
|
106
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
107
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
108
|
+
sage: M.<v,w> = S.quotient_module(X^2 + t)
|
|
109
|
+
sage: w[1] = 0
|
|
110
|
+
Traceback (most recent call last):
|
|
111
|
+
...
|
|
112
|
+
ValueError: vectors in Ore modules are immutable
|
|
113
|
+
"""
|
|
114
|
+
raise ValueError("vectors in Ore modules are immutable")
|
|
115
|
+
|
|
116
|
+
def __hash__(self):
|
|
117
|
+
r"""
|
|
118
|
+
Return a hash of this element.
|
|
119
|
+
|
|
120
|
+
TESTS::
|
|
121
|
+
|
|
122
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
123
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
124
|
+
sage: M.<v,w> = S.quotient_module(X^2 + t)
|
|
125
|
+
sage: hash(v) # random
|
|
126
|
+
-5164621852614943976
|
|
127
|
+
sage: hash(w) # random
|
|
128
|
+
-1950498447580522560
|
|
129
|
+
"""
|
|
130
|
+
return hash(tuple(self))
|
|
131
|
+
|
|
132
|
+
def vector(self):
|
|
133
|
+
r"""
|
|
134
|
+
Return the coordinates vector of this element.
|
|
135
|
+
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
139
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
140
|
+
sage: M.<v,w> = S.quotient_module(X^2 + t)
|
|
141
|
+
sage: v.vector()
|
|
142
|
+
(1, 0)
|
|
143
|
+
|
|
144
|
+
We underline that this vector is not an element of the
|
|
145
|
+
Ore module; it lives in `K^2`. Compare::
|
|
146
|
+
|
|
147
|
+
sage: v.parent()
|
|
148
|
+
Ore module <v, w> over Fraction Field of Univariate Polynomial Ring in t over Rational Field twisted by d/dt
|
|
149
|
+
sage: v.vector().parent()
|
|
150
|
+
Vector space of dimension 2 over Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
151
|
+
"""
|
|
152
|
+
V = self.parent().module()
|
|
153
|
+
return V(self.list())
|
|
154
|
+
|
|
155
|
+
def image(self):
|
|
156
|
+
r"""
|
|
157
|
+
Return the image of this element by the pseudomorphism
|
|
158
|
+
defining the action of the Ore variable on this Ore module.
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: K.<t> = Frac(QQ['t'])
|
|
163
|
+
sage: S.<X> = OrePolynomialRing(K, K.derivation())
|
|
164
|
+
sage: M.<v,w> = S.quotient_module(X^2 + t)
|
|
165
|
+
sage: v.image()
|
|
166
|
+
w
|
|
167
|
+
sage: w.image()
|
|
168
|
+
-t*v
|
|
169
|
+
|
|
170
|
+
TESTS:
|
|
171
|
+
|
|
172
|
+
We check that this corresponds to the action of `X`::
|
|
173
|
+
|
|
174
|
+
sage: x = M.random_element()
|
|
175
|
+
sage: x.image() == X*x
|
|
176
|
+
True
|
|
177
|
+
"""
|
|
178
|
+
return self.parent()._pseudohom(self)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Space of morphisms between Ore modules
|
|
5
|
+
|
|
6
|
+
AUTHOR:
|
|
7
|
+
|
|
8
|
+
- Xavier Caruso (2024-10)
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ***************************************************************************
|
|
12
|
+
# Copyright (C) 2024 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
13
|
+
#
|
|
14
|
+
# This program is free software: you can redistribute it and/or modify
|
|
15
|
+
# it under the terms of the GNU General Public License as published by
|
|
16
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
17
|
+
# (at your option) any later version.
|
|
18
|
+
# https://www.gnu.org/licenses/
|
|
19
|
+
# ***************************************************************************
|
|
20
|
+
|
|
21
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
22
|
+
from sage.categories.homset import HomsetWithBase
|
|
23
|
+
from sage.matrix.matrix_space import MatrixSpace
|
|
24
|
+
|
|
25
|
+
from sage.modules.ore_module import OreModule
|
|
26
|
+
from sage.modules.ore_module_morphism import OreModuleMorphism
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class OreModule_homspace(UniqueRepresentation, HomsetWithBase):
|
|
30
|
+
r"""
|
|
31
|
+
Class for hom spaces between Ore modules.
|
|
32
|
+
"""
|
|
33
|
+
Element = OreModuleMorphism
|
|
34
|
+
|
|
35
|
+
def __init__(self, domain, codomain, category=None):
|
|
36
|
+
r"""
|
|
37
|
+
Initialize this homspace.
|
|
38
|
+
|
|
39
|
+
INPUT:
|
|
40
|
+
|
|
41
|
+
- ``domain`` -- a Ore module
|
|
42
|
+
|
|
43
|
+
- ``codomain`` -- a Ore module
|
|
44
|
+
|
|
45
|
+
- ``category`` (default: ``None``) -- the category in which
|
|
46
|
+
the morphisms are
|
|
47
|
+
|
|
48
|
+
TESTS::
|
|
49
|
+
|
|
50
|
+
sage: K.<z> = GF(7^2)
|
|
51
|
+
sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
|
|
52
|
+
sage: M = S.quotient_module(X + z)
|
|
53
|
+
sage: N = S.quotient_module(X^2 + z)
|
|
54
|
+
sage: Hom(M, N) # indirect doctest
|
|
55
|
+
Set of Morphisms
|
|
56
|
+
from Ore module of rank 1 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
57
|
+
to Ore module of rank 2 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
58
|
+
in Category of enumerated finite dimensional Ore modules with basis over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
59
|
+
sage: End(M) # indirect doctest
|
|
60
|
+
Set of Morphisms
|
|
61
|
+
from Ore module of rank 1 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
62
|
+
to Ore module of rank 1 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
63
|
+
in Category of enumerated finite dimensional Ore modules with basis over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
64
|
+
|
|
65
|
+
::
|
|
66
|
+
|
|
67
|
+
sage: V = M.module()
|
|
68
|
+
sage: Hom(M, V)
|
|
69
|
+
Traceback (most recent call last):
|
|
70
|
+
...
|
|
71
|
+
ValueError: codomain must be a Ore module
|
|
72
|
+
"""
|
|
73
|
+
if not isinstance(domain, OreModule):
|
|
74
|
+
raise ValueError("domain must be a Ore module")
|
|
75
|
+
if not isinstance(codomain, OreModule):
|
|
76
|
+
raise ValueError("codomain must be a Ore module")
|
|
77
|
+
if domain.ore_ring(action=False) is not codomain.ore_ring(action=False):
|
|
78
|
+
raise ValueError("domain and codomain must be defined over the same ring with same twisting maps")
|
|
79
|
+
super().__init__(domain, codomain, category)
|
|
80
|
+
base = domain.base_ring()
|
|
81
|
+
self._matrix_space = MatrixSpace(base, domain.dimension(), codomain.dimension())
|
|
82
|
+
|
|
83
|
+
def _element_constructor_(self, *args, **kwds):
|
|
84
|
+
r"""
|
|
85
|
+
Return a morphism in this homspace.
|
|
86
|
+
|
|
87
|
+
TESTS::
|
|
88
|
+
|
|
89
|
+
sage: K.<z> = GF(7^2)
|
|
90
|
+
sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
|
|
91
|
+
sage: M = S.quotient_module(X + z)
|
|
92
|
+
sage: H = End(M)
|
|
93
|
+
sage: H(2)
|
|
94
|
+
Ore module endomorphism of Ore module of rank 1 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
95
|
+
"""
|
|
96
|
+
return self.element_class(self, *args, **kwds)
|
|
97
|
+
|
|
98
|
+
def matrix_space(self):
|
|
99
|
+
r"""
|
|
100
|
+
Return the matrix space used to represent the
|
|
101
|
+
morphisms in this homspace.
|
|
102
|
+
|
|
103
|
+
EXAMPLES::
|
|
104
|
+
|
|
105
|
+
sage: K.<z> = GF(7^2)
|
|
106
|
+
sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
|
|
107
|
+
sage: M = S.quotient_module(X^3 + z*X + 1)
|
|
108
|
+
sage: End(M).matrix_space()
|
|
109
|
+
Full MatrixSpace of 3 by 3 dense matrices over Finite Field in z of size 7^2
|
|
110
|
+
|
|
111
|
+
::
|
|
112
|
+
|
|
113
|
+
sage: N = S.quotient_module(X^2 + z)
|
|
114
|
+
sage: Hom(M, N).matrix_space()
|
|
115
|
+
Full MatrixSpace of 3 by 2 dense matrices over Finite Field in z of size 7^2
|
|
116
|
+
"""
|
|
117
|
+
return self._matrix_space
|
|
118
|
+
|
|
119
|
+
def identity(self):
|
|
120
|
+
r"""
|
|
121
|
+
Return the identity morphism in this homspace.
|
|
122
|
+
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: K.<z> = GF(7^2)
|
|
126
|
+
sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
|
|
127
|
+
sage: M = S.quotient_module(X^3 + z*X + 1)
|
|
128
|
+
sage: End(M).identity()
|
|
129
|
+
Ore module endomorphism of Ore module of rank 3 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
130
|
+
"""
|
|
131
|
+
one = self.base_ring().one()
|
|
132
|
+
return self(one, check=False)
|
|
133
|
+
|
|
134
|
+
def zero(self):
|
|
135
|
+
r"""
|
|
136
|
+
Return the zero morphism in this homspace.
|
|
137
|
+
|
|
138
|
+
EXAMPLES::
|
|
139
|
+
|
|
140
|
+
sage: K.<z> = GF(7^2)
|
|
141
|
+
sage: S.<X> = OrePolynomialRing(K, K.frobenius_endomorphism())
|
|
142
|
+
sage: M = S.quotient_module(X^3 + z*X + 1)
|
|
143
|
+
sage: End(M).zero()
|
|
144
|
+
Ore module endomorphism of Ore module of rank 3 over Finite Field in z of size 7^2 twisted by z |--> z^7
|
|
145
|
+
"""
|
|
146
|
+
zero = self.base_ring().zero()
|
|
147
|
+
return self(zero, check=False)
|