passagemath-modules 10.5.32__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.32.dist-info → passagemath_modules-10.6.20.dist-info}/METADATA +51 -46
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/RECORD +333 -323
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/WHEEL +1 -1
- passagemath_modules.dylibs/libgcc_s.1.1.dylib +0 -0
- passagemath_modules.dylibs/libgfortran.5.dylib +0 -0
- passagemath_modules.dylibs/libgsl.28.dylib +0 -0
- passagemath_modules.dylibs/libmpc.3.dylib +0 -0
- passagemath_modules.dylibs/libopenblasp-r0.3.29.dylib +0 -0
- passagemath_modules.dylibs/libquadmath.0.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 +65 -28
- 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/cartesian_product.py +1 -1
- sage/combinat/free_module.py +22 -2
- sage/combinat/root_system/all.py +1 -1
- 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 +2 -2
- sage/combinat/root_system/braid_orbit.cpython-310-darwin.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +1 -1
- sage/combinat/root_system/branching_rules.py +3 -3
- sage/combinat/root_system/cartan_type.py +14 -14
- sage/combinat/root_system/coxeter_group.py +3 -3
- sage/combinat/root_system/coxeter_matrix.py +1 -1
- sage/combinat/root_system/coxeter_type.py +12 -1
- sage/combinat/root_system/extended_affine_weyl_group.py +9 -9
- sage/combinat/root_system/fundamental_group.py +3 -5
- sage/combinat/root_system/hecke_algebra_representation.py +1 -1
- sage/combinat/root_system/integrable_representations.py +1 -1
- sage/combinat/root_system/pieri_factors.py +3 -3
- 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 +2 -2
- 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 +1261 -63
- 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 +6 -7
- 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 +5 -1
- 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 +162 -26
- 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 +11 -11
- 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/cfinite_sequence.py +16 -17
- 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 -11
- 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/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/basic_stats.py +17 -15
- 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.dylibs/libopenblas_armv8p-r0.3.28.dylib +0 -0
- {passagemath_modules-10.5.32.dist-info → passagemath_modules-10.6.20.dist-info}/top_level.txt +0 -0
|
@@ -23,7 +23,6 @@ from cpython.object cimport Py_EQ, Py_NE, Py_GT, Py_GE
|
|
|
23
23
|
from sage.misc.repr import repr_lincomb
|
|
24
24
|
from sage.structure.element cimport have_same_parent, parent
|
|
25
25
|
from sage.structure.coerce cimport coercion_model
|
|
26
|
-
from sage.cpython.wrapperdescr cimport wrapperdescr_fastcall
|
|
27
26
|
from sage.structure.element_wrapper cimport ElementWrapper
|
|
28
27
|
from sage.structure.richcmp cimport richcmp, richcmp_not_equal
|
|
29
28
|
from sage.data_structures.blas_dict cimport axpy, add, negate, scal
|
|
@@ -67,11 +66,28 @@ cdef class LieAlgebraElement(IndexedFreeModuleElement):
|
|
|
67
66
|
"""
|
|
68
67
|
try:
|
|
69
68
|
# Try the normal coercion first
|
|
70
|
-
return
|
|
71
|
-
left, (right,), <object>NULL)
|
|
69
|
+
return IndexedFreeModuleElement.__mul__(left, right)
|
|
72
70
|
except TypeError:
|
|
73
71
|
pass
|
|
74
72
|
|
|
73
|
+
try:
|
|
74
|
+
# Handle the case of right multiplication by scalar
|
|
75
|
+
if isinstance(left, IndexedFreeModuleElement):
|
|
76
|
+
R = (<IndexedFreeModuleElement>left)._parent._base
|
|
77
|
+
x = R.coerce(right)
|
|
78
|
+
return IndexedFreeModuleElement.__mul__(left, x)
|
|
79
|
+
except (TypeError, KeyError):
|
|
80
|
+
pass
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
# Handle the case of left multiplication by scalar
|
|
84
|
+
if isinstance(right, IndexedFreeModuleElement):
|
|
85
|
+
R = (<IndexedFreeModuleElement>right)._parent._base
|
|
86
|
+
x = R.coerce(left)
|
|
87
|
+
return IndexedFreeModuleElement.__mul__(x, right)
|
|
88
|
+
except (TypeError, KeyError):
|
|
89
|
+
pass
|
|
90
|
+
|
|
75
91
|
# Lift up to the UEA and try multiplication there
|
|
76
92
|
# We will eventually want to lift stuff up anyways,
|
|
77
93
|
# so just do it here.
|
|
@@ -117,7 +133,7 @@ cdef class LieAlgebraElement(IndexedFreeModuleElement):
|
|
|
117
133
|
s = codomain.zero()
|
|
118
134
|
if not self: # If we are 0
|
|
119
135
|
return s
|
|
120
|
-
names = self.
|
|
136
|
+
names = self._parent.variable_names()
|
|
121
137
|
if base_map is None:
|
|
122
138
|
def base_map(x):
|
|
123
139
|
return x
|
|
@@ -192,10 +208,10 @@ cdef class LieAlgebraElementWrapper(ElementWrapper):
|
|
|
192
208
|
The next doctests show similar behavior, although on elements of
|
|
193
209
|
other classes::
|
|
194
210
|
|
|
211
|
+
sage: # needs sage.graphs
|
|
195
212
|
sage: L = lie_algebras.three_dimensional_by_rank(QQ, 3)
|
|
196
213
|
sage: L.bracket(L.gen(0), L.gen(1)) == -L.bracket(L.gen(1), L.gen(0))
|
|
197
214
|
True
|
|
198
|
-
|
|
199
215
|
sage: L = lie_algebras.three_dimensional_by_rank(QQ, 1)
|
|
200
216
|
sage: L.bracket(L.gen(0), L.gen(1)) == -L.bracket(L.gen(1), L.gen(0))
|
|
201
217
|
True
|
|
@@ -353,11 +369,28 @@ cdef class LieAlgebraElementWrapper(ElementWrapper):
|
|
|
353
369
|
"""
|
|
354
370
|
try:
|
|
355
371
|
# Try the normal coercion first
|
|
356
|
-
return
|
|
357
|
-
left, (right,), <object>NULL)
|
|
372
|
+
return ElementWrapper.__mul__(left, right)
|
|
358
373
|
except TypeError:
|
|
359
374
|
pass
|
|
360
375
|
|
|
376
|
+
try:
|
|
377
|
+
# Handle the case of right multiplication by scalar
|
|
378
|
+
if isinstance(left, LieAlgebraElementWrapper):
|
|
379
|
+
R = (<LieAlgebraElementWrapper>left)._parent._base
|
|
380
|
+
x = R.coerce(right)
|
|
381
|
+
return ElementWrapper.__mul__(left, x)
|
|
382
|
+
except (TypeError, KeyError):
|
|
383
|
+
pass
|
|
384
|
+
|
|
385
|
+
try:
|
|
386
|
+
# Handle the case of left multiplication by scalar
|
|
387
|
+
if isinstance(right, LieAlgebraElementWrapper):
|
|
388
|
+
R = (<LieAlgebraElementWrapper>right)._parent._base
|
|
389
|
+
x = R.coerce(left)
|
|
390
|
+
return ElementWrapper.__mul__(x, right)
|
|
391
|
+
except (TypeError, KeyError):
|
|
392
|
+
pass
|
|
393
|
+
|
|
361
394
|
# Lift up to the UEA and try multiplication there
|
|
362
395
|
# We will eventually want to lift stuff up anyways,
|
|
363
396
|
# so just do it here.
|
|
@@ -517,10 +550,12 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
517
550
|
|
|
518
551
|
sage: L.<X,Y,Z> = LieAlgebra(QQ, {('X','Y'): {'Z': 1}})
|
|
519
552
|
sage: S = L.subalgebra([X, Y])
|
|
553
|
+
sage: S.indices()
|
|
554
|
+
{'X', 'Y', 'Z'}
|
|
520
555
|
sage: el = S(2*Y + 9*Z)
|
|
521
|
-
sage: el[
|
|
556
|
+
sage: el['Y']
|
|
522
557
|
2
|
|
523
|
-
sage: el[
|
|
558
|
+
sage: el['Z']
|
|
524
559
|
9
|
|
525
560
|
"""
|
|
526
561
|
if self._monomial_coefficients is None:
|
|
@@ -529,7 +564,7 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
529
564
|
try:
|
|
530
565
|
return self._monomial_coefficients[i]
|
|
531
566
|
except KeyError:
|
|
532
|
-
return self.
|
|
567
|
+
return self._parent.base_ring().zero()
|
|
533
568
|
|
|
534
569
|
def _bracket_(self, x):
|
|
535
570
|
"""
|
|
@@ -561,12 +596,12 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
561
596
|
sage: L.<X,Y,Z> = LieAlgebra(ZZ, {('X','Y'): {'Z': 3}})
|
|
562
597
|
sage: S = L.subalgebra([X, Y])
|
|
563
598
|
sage: S.basis()
|
|
564
|
-
|
|
599
|
+
Finite family {'X': X, 'Y': Y, 'Z': 3*Z}
|
|
565
600
|
sage: S(2*Y + 9*Z).to_vector()
|
|
566
601
|
(0, 2, 9)
|
|
567
602
|
sage: S2 = L.subalgebra([Y, Z])
|
|
568
603
|
sage: S2.basis()
|
|
569
|
-
|
|
604
|
+
Finite family {'Y': Y, 'Z': Z}
|
|
570
605
|
sage: S2(2*Y + 9*Z).to_vector()
|
|
571
606
|
(0, 2, 9)
|
|
572
607
|
|
|
@@ -601,17 +636,18 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
601
636
|
sage: L.<X,Y,Z> = LieAlgebra(ZZ, {('X','Y'): {'Z': 3}})
|
|
602
637
|
sage: S = L.subalgebra([X, Y])
|
|
603
638
|
sage: S(2*Y + 9*Z).monomial_coefficients()
|
|
604
|
-
{
|
|
639
|
+
{'Y': 2, 'Z': 3}
|
|
605
640
|
sage: S2 = L.subalgebra([Y, Z])
|
|
606
641
|
sage: S2(2*Y + 9*Z).monomial_coefficients()
|
|
607
|
-
{
|
|
642
|
+
{'Y': 2, 'Z': 9}
|
|
608
643
|
"""
|
|
609
644
|
cdef Py_ssize_t k
|
|
645
|
+
indices = self._parent._indices
|
|
610
646
|
if self._monomial_coefficients is None:
|
|
611
|
-
sm = self.
|
|
647
|
+
sm = self._parent.module()
|
|
612
648
|
v = sm.coordinate_vector(self.to_vector())
|
|
613
|
-
self._monomial_coefficients = {k: v[k]
|
|
614
|
-
if v[k]}
|
|
649
|
+
self._monomial_coefficients = {indices[k]: v[k]
|
|
650
|
+
for k in range(len(v)) if v[k]}
|
|
615
651
|
if copy:
|
|
616
652
|
return dict(self._monomial_coefficients)
|
|
617
653
|
return self._monomial_coefficients
|
|
@@ -627,13 +663,13 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
627
663
|
sage: a = S(2*Y + 12*Z)
|
|
628
664
|
sage: b = S(X + 2*Y)
|
|
629
665
|
sage: (a + b).monomial_coefficients()
|
|
630
|
-
{
|
|
666
|
+
{'X': 1, 'Y': 4, 'Z': 4}
|
|
631
667
|
sage: a.monomial_coefficients() # We set a._monomial_coefficients
|
|
632
|
-
{
|
|
668
|
+
{'Y': 2, 'Z': 4}
|
|
633
669
|
sage: b.monomial_coefficients() # We set b._monomial_coefficients
|
|
634
|
-
{
|
|
670
|
+
{'X': 1, 'Y': 2}
|
|
635
671
|
sage: (a + b).monomial_coefficients() # This is now computed from a and b
|
|
636
|
-
{
|
|
672
|
+
{'X': 1, 'Y': 4, 'Z': 4}
|
|
637
673
|
"""
|
|
638
674
|
cdef LieSubalgebraElementWrapper ret, other = <LieSubalgebraElementWrapper> right
|
|
639
675
|
ret = type(self)(self._parent, self.value + other.value)
|
|
@@ -653,13 +689,13 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
653
689
|
sage: a = S(2*Y + 12*Z)
|
|
654
690
|
sage: b = S(X + 2*Y)
|
|
655
691
|
sage: (a - b).monomial_coefficients()
|
|
656
|
-
{
|
|
692
|
+
{'X': -1, 'Z': 4}
|
|
657
693
|
sage: a.monomial_coefficients() # We set a._monomial_coefficients
|
|
658
|
-
{
|
|
694
|
+
{'Y': 2, 'Z': 4}
|
|
659
695
|
sage: b.monomial_coefficients() # We set b._monomial_coefficients
|
|
660
|
-
{
|
|
696
|
+
{'X': 1, 'Y': 2}
|
|
661
697
|
sage: (a - b).monomial_coefficients() # This is now computed from a and b
|
|
662
|
-
{
|
|
698
|
+
{'X': -1, 'Z': 4}
|
|
663
699
|
"""
|
|
664
700
|
cdef LieSubalgebraElementWrapper ret, other = <LieSubalgebraElementWrapper> right
|
|
665
701
|
ret = type(self)(self._parent, self.value - other.value)
|
|
@@ -678,11 +714,11 @@ cdef class LieSubalgebraElementWrapper(LieAlgebraElementWrapper):
|
|
|
678
714
|
sage: S = L.subalgebra([X, Y])
|
|
679
715
|
sage: a = S(2*Y + 12*Z)
|
|
680
716
|
sage: (2*a).monomial_coefficients()
|
|
681
|
-
{
|
|
717
|
+
{'Y': 4, 'Z': 8}
|
|
682
718
|
sage: a.monomial_coefficients() # We set a._monomial_coefficients
|
|
683
|
-
{
|
|
719
|
+
{'Y': 2, 'Z': 4}
|
|
684
720
|
sage: (2*a).monomial_coefficients() # This is now computed from a
|
|
685
|
-
{
|
|
721
|
+
{'Y': 4, 'Z': 8}
|
|
686
722
|
"""
|
|
687
723
|
# This was copied and IDK if it still applies (TCS):
|
|
688
724
|
# With the current design, the coercion model does not have
|
|
@@ -972,6 +1008,7 @@ cdef class UntwistedAffineLieAlgebraElement(Element):
|
|
|
972
1008
|
|
|
973
1009
|
EXAMPLES::
|
|
974
1010
|
|
|
1011
|
+
sage: # needs sage.graphs
|
|
975
1012
|
sage: L = lie_algebras.Affine(QQ, ['B', 3, 1])
|
|
976
1013
|
sage: elt = L.an_element()
|
|
977
1014
|
sage: elt._repr_generic(str, str, lambda t: "T^{}".format(t), '.', '(x)')
|
|
@@ -23,6 +23,7 @@ from sage.algebras.lie_algebras.subalgebra import LieSubalgebra_finite_dimension
|
|
|
23
23
|
from sage.categories.homset import Hom
|
|
24
24
|
from sage.categories.lie_algebras import LieAlgebras
|
|
25
25
|
from sage.categories.morphism import SetMorphism
|
|
26
|
+
from sage.structure.element import Element
|
|
26
27
|
from sage.structure.indexed_generators import standardize_names_index_set
|
|
27
28
|
|
|
28
29
|
|
|
@@ -161,7 +162,7 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
161
162
|
sage: L.<c,b,a> = LieAlgebra(QQ, abelian=True)
|
|
162
163
|
sage: I2 = L.ideal([a+b, a+c], order=sorted)
|
|
163
164
|
sage: I2.basis()
|
|
164
|
-
|
|
165
|
+
Finite family {'b': b + a, 'c': c + a}
|
|
165
166
|
sage: Q = L.quotient(I2)
|
|
166
167
|
sage: Q.basis()
|
|
167
168
|
Finite family {'a': a}
|
|
@@ -174,40 +175,44 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
174
175
|
2
|
|
175
176
|
sage: TestSuite(K).run()
|
|
176
177
|
"""
|
|
177
|
-
|
|
178
178
|
@staticmethod
|
|
179
|
-
def __classcall_private__(cls, I,
|
|
180
|
-
|
|
179
|
+
def __classcall_private__(cls, ambient, I, names=None, index_set=None,
|
|
180
|
+
index_set_mapping=None, category=None):
|
|
181
181
|
r"""
|
|
182
182
|
Normalize input to ensure a unique representation.
|
|
183
183
|
|
|
184
|
-
EXAMPLES
|
|
185
|
-
|
|
186
|
-
Specifying the ambient Lie algebra is not necessary::
|
|
184
|
+
EXAMPLES::
|
|
187
185
|
|
|
188
186
|
sage: from sage.algebras.lie_algebras.quotient import LieQuotient_finite_dimensional_with_basis
|
|
189
187
|
sage: L.<X,Y> = LieAlgebra(QQ, {('X','Y'): {'X': 1}})
|
|
190
|
-
sage: Q1 = LieQuotient_finite_dimensional_with_basis(
|
|
191
|
-
sage: Q2 = LieQuotient_finite_dimensional_with_basis(X)
|
|
192
|
-
sage: Q1 is Q2
|
|
193
|
-
True
|
|
188
|
+
sage: Q1 = LieQuotient_finite_dimensional_with_basis(L, X)
|
|
194
189
|
|
|
195
190
|
Variable names are extracted from the ambient Lie algebra by default::
|
|
196
191
|
|
|
192
|
+
sage: Q2 = LieQuotient_finite_dimensional_with_basis(L, X, index_set=['Y'])
|
|
193
|
+
sage: Q1 is Q2
|
|
194
|
+
True
|
|
197
195
|
sage: Q3 = L.quotient(X, names=['Y'])
|
|
198
196
|
sage: Q1 is Q3
|
|
199
197
|
True
|
|
198
|
+
|
|
199
|
+
Check that quotients are properly constructed for ideals of
|
|
200
|
+
subalgebras (:issue:`40137`)::
|
|
201
|
+
|
|
202
|
+
sage: L.<a,b,c,d> = LieAlgebra(QQ, {('a','b'): {'c': 1, 'd':1}, ('a','c'): {'b':1}})
|
|
203
|
+
sage: A = L.ideal([b,c,d])
|
|
204
|
+
sage: B = L.ideal([c+d])
|
|
205
|
+
sage: Q = A.quotient(B); Q
|
|
206
|
+
Lie algebra quotient L/I of dimension 1 over Rational Field where
|
|
207
|
+
L: Ideal (b, c, d) of Lie algebra on 4 generators (a, b, c, d) over Rational Field
|
|
208
|
+
I: Ideal (b, c + d)
|
|
209
|
+
sage: Q.dimension() == A.dimension() - B.dimension()
|
|
210
|
+
True
|
|
200
211
|
"""
|
|
201
212
|
if not isinstance(I, LieSubalgebra_finite_dimensional_with_basis):
|
|
202
|
-
# assume I is an element or list of elements of some lie algebra
|
|
203
|
-
if ambient is None:
|
|
204
|
-
if not isinstance(I, (list, tuple)):
|
|
205
|
-
ambient = I.parent()
|
|
206
|
-
else:
|
|
207
|
-
ambient = I[0].parent()
|
|
208
213
|
I = ambient.ideal(I)
|
|
209
|
-
if ambient
|
|
210
|
-
|
|
214
|
+
if I.is_ideal(ambient):
|
|
215
|
+
I = ambient.ideal(I)
|
|
211
216
|
|
|
212
217
|
if not ambient.base_ring().is_field():
|
|
213
218
|
raise NotImplementedError("quotients over non-fields "
|
|
@@ -216,12 +221,16 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
216
221
|
# extract an index set from a complementary basis to the ideal
|
|
217
222
|
I_supp = [X.leading_support() for X in I.leading_monomials()]
|
|
218
223
|
inv = ambient.basis().inverse_family()
|
|
219
|
-
|
|
220
|
-
|
|
224
|
+
IA = I.ambient()
|
|
225
|
+
B = ambient.basis()
|
|
226
|
+
if index_set_mapping is None:
|
|
227
|
+
index_set_mapping = [(IA(B[k]).leading_support(key=I._order), k) for k in B.keys()]
|
|
228
|
+
if index_set is None:
|
|
229
|
+
index_set = [i[0] for i in index_set_mapping if i[0] not in I_supp]
|
|
221
230
|
|
|
222
231
|
if names is None:
|
|
223
232
|
try:
|
|
224
|
-
amb_names = dict(zip(
|
|
233
|
+
amb_names = dict(zip([i[1] for i in index_set_mapping], ambient.variable_names()))
|
|
225
234
|
names = [amb_names[i] for i in index_set]
|
|
226
235
|
except (ValueError, KeyError):
|
|
227
236
|
# ambient has not assigned variable names
|
|
@@ -234,16 +243,16 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
234
243
|
names = ['%s_%d' % (names, k + 1)
|
|
235
244
|
for k in range(len(index_set))]
|
|
236
245
|
names, index_set = standardize_names_index_set(names, index_set)
|
|
246
|
+
index_set_mapping = tuple([i for i in index_set_mapping if i[0] not in I_supp])
|
|
237
247
|
|
|
238
248
|
cat = LieAlgebras(ambient.base_ring()).FiniteDimensional().WithBasis()
|
|
239
249
|
if ambient in LieAlgebras(ambient.base_ring()).Nilpotent():
|
|
240
250
|
cat = cat.Nilpotent()
|
|
241
251
|
category = cat.Subquotients().or_subcategory(category)
|
|
252
|
+
return super().__classcall__(cls, ambient, I, names, index_set,
|
|
253
|
+
index_set_mapping, category=category)
|
|
242
254
|
|
|
243
|
-
|
|
244
|
-
category=category)
|
|
245
|
-
|
|
246
|
-
def __init__(self, I, L, names, index_set, category=None):
|
|
255
|
+
def __init__(self, L, I, names, index_set, index_set_mapping, category=None):
|
|
247
256
|
r"""
|
|
248
257
|
Initialize ``self``.
|
|
249
258
|
|
|
@@ -257,8 +266,10 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
257
266
|
sage: TestSuite(K).run()
|
|
258
267
|
"""
|
|
259
268
|
B = L.basis()
|
|
260
|
-
|
|
261
|
-
|
|
269
|
+
IA = I.ambient()
|
|
270
|
+
self._index_set_mapping = dict(index_set_mapping)
|
|
271
|
+
sm = L.module().submodule_with_basis([I.reduce(B[k]).to_vector()
|
|
272
|
+
for k in self._index_set_mapping.values()])
|
|
262
273
|
SB = [L.from_vector(b) for b in sm.basis()]
|
|
263
274
|
|
|
264
275
|
# compute and normalize structural coefficients for the quotient
|
|
@@ -370,7 +381,7 @@ class LieQuotient_finite_dimensional_with_basis(LieAlgebraWithStructureCoefficie
|
|
|
370
381
|
"""
|
|
371
382
|
L = self.ambient()
|
|
372
383
|
B = L.basis()
|
|
373
|
-
return L.sum(ck * B[ik] for ik, ck in X)
|
|
384
|
+
return L.sum(ck * B[self._index_set_mapping[ik]] for ik, ck in X)
|
|
374
385
|
|
|
375
386
|
def retract(self, X):
|
|
376
387
|
r"""
|