passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +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-aarch64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,997 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Clifford algebra elements
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2013-09-06): Initial version
|
|
9
|
+
- Trevor Karn (2022-07-10): Rewrite multiplication using bitsets
|
|
10
|
+
"""
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2022 Trevor K. Karn <karnx018 at umn.edu>
|
|
13
|
+
# (C) 2022 Travis Scrimshaw <tcscrims at gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# This program is free software: you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of the GNU General Public License as published by
|
|
17
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
18
|
+
# (at your option) any later version.
|
|
19
|
+
# https://www.gnu.org/licenses/
|
|
20
|
+
# ****************************************************************************
|
|
21
|
+
from copy import copy
|
|
22
|
+
|
|
23
|
+
from sage.structure.parent cimport Parent
|
|
24
|
+
from sage.data_structures.bitset cimport Bitset
|
|
25
|
+
from sage.algebras.weyl_algebra import repr_from_monomials
|
|
26
|
+
from sage.data_structures.blas_dict cimport scal
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
cdef class CliffordAlgebraElement(IndexedFreeModuleElement):
|
|
30
|
+
"""
|
|
31
|
+
An element in a Clifford algebra.
|
|
32
|
+
|
|
33
|
+
TESTS::
|
|
34
|
+
|
|
35
|
+
sage: Q = QuadraticForm(ZZ, 3, [1, 2, 3, 4, 5, 6])
|
|
36
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
37
|
+
sage: elt = ((x^3-z)*x + y)^2
|
|
38
|
+
sage: TestSuite(elt).run()
|
|
39
|
+
"""
|
|
40
|
+
def _repr_(self):
|
|
41
|
+
"""
|
|
42
|
+
Return a string representation of ``self``.
|
|
43
|
+
|
|
44
|
+
TESTS::
|
|
45
|
+
|
|
46
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
47
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
48
|
+
sage: ((x^3-z)*x + y)^2
|
|
49
|
+
-2*x*y*z - x*z + 5*x - 4*y + 2*z + 2
|
|
50
|
+
sage: Cl.zero()
|
|
51
|
+
0
|
|
52
|
+
"""
|
|
53
|
+
return repr_from_monomials(self.list(), self._parent._repr_term)
|
|
54
|
+
|
|
55
|
+
def _latex_(self):
|
|
56
|
+
r"""
|
|
57
|
+
Return a `\LaTeX` representation of ``self``.
|
|
58
|
+
|
|
59
|
+
TESTS::
|
|
60
|
+
|
|
61
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
62
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
63
|
+
sage: latex( ((x^3-z)*x + y)^2 )
|
|
64
|
+
-2 x y z - x z + 5 x - 4 y + 2 z + 2
|
|
65
|
+
sage: Cl.<x0,x1,x2> = CliffordAlgebra(Q)
|
|
66
|
+
sage: latex( (x1 - x2)*x0 + 5*x0*x1*x2 )
|
|
67
|
+
5 x_{0} x_{1} x_{2} - x_{0} x_{1} + x_{0} x_{2} - 1
|
|
68
|
+
"""
|
|
69
|
+
return repr_from_monomials(self.list(), self._parent._latex_term, True)
|
|
70
|
+
|
|
71
|
+
cdef _mul_(self, other):
|
|
72
|
+
"""
|
|
73
|
+
Return ``self`` multiplied by ``other``.
|
|
74
|
+
|
|
75
|
+
INPUT:
|
|
76
|
+
|
|
77
|
+
- ``other`` -- element of the same Clifford algebra as ``self``
|
|
78
|
+
|
|
79
|
+
EXAMPLES::
|
|
80
|
+
|
|
81
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
82
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
83
|
+
sage: (x^3 - z*y)*x*(y*z + x*y*z)
|
|
84
|
+
x*y*z + y*z - 24*x + 12*y + 2*z - 24
|
|
85
|
+
sage: y*x
|
|
86
|
+
-x*y + 2
|
|
87
|
+
sage: z*x
|
|
88
|
+
-x*z + 3
|
|
89
|
+
sage: z*z
|
|
90
|
+
6
|
|
91
|
+
sage: x*0
|
|
92
|
+
0
|
|
93
|
+
sage: 0*x
|
|
94
|
+
0
|
|
95
|
+
|
|
96
|
+
:issue:`34707`::
|
|
97
|
+
|
|
98
|
+
sage: Q = QuadraticForm(QQ, 2, [0,5,0])
|
|
99
|
+
sage: C.<p,q> = CliffordAlgebra(Q)
|
|
100
|
+
sage: (q * p) * q
|
|
101
|
+
5*q
|
|
102
|
+
sage: q * (p * q)
|
|
103
|
+
5*q
|
|
104
|
+
"""
|
|
105
|
+
Q = self._parent._quadratic_form
|
|
106
|
+
zero = self._parent._base.zero()
|
|
107
|
+
cdef dict next_level, cur, d = {}
|
|
108
|
+
cdef FrozenBitset ml, mr, t
|
|
109
|
+
cdef Py_ssize_t i, j
|
|
110
|
+
cdef CliffordAlgebraElement rhs = <CliffordAlgebraElement> other
|
|
111
|
+
|
|
112
|
+
# Special case when multiplying by 0
|
|
113
|
+
if not self._monomial_coefficients:
|
|
114
|
+
return self
|
|
115
|
+
if not rhs._monomial_coefficients:
|
|
116
|
+
return rhs
|
|
117
|
+
|
|
118
|
+
# Special case when multiplying by an element of the base ring
|
|
119
|
+
if len(self._monomial_coefficients) == 1:
|
|
120
|
+
ml, cl = next(iter(self._monomial_coefficients.items()))
|
|
121
|
+
if ml.isempty():
|
|
122
|
+
return rhs._mul_term_self(ml, cl)
|
|
123
|
+
if len(rhs._monomial_coefficients) == 1:
|
|
124
|
+
mr, cr = next(iter(rhs._monomial_coefficients.items()))
|
|
125
|
+
if mr.isempty():
|
|
126
|
+
return self._mul_self_term(mr, cr)
|
|
127
|
+
|
|
128
|
+
for ml, cl in self:
|
|
129
|
+
# Distribute the current term ``cl`` * ``ml`` over ``other``.
|
|
130
|
+
cur = copy(other._monomial_coefficients) # The current distribution of the term
|
|
131
|
+
for i in reversed(ml):
|
|
132
|
+
# Distribute the current factor ``e[i]`` (the ``i``-th
|
|
133
|
+
# element of the standard basis).
|
|
134
|
+
next_level = {}
|
|
135
|
+
# At the end of the following for-loop, ``next`` will be
|
|
136
|
+
# the dictionary describing the element
|
|
137
|
+
# ``e[i]`` * (the element described by the dictionary ``cur``)
|
|
138
|
+
# (where ``e[i]`` is the ``i``-th standard basis vector).
|
|
139
|
+
for mr, cr in cur.items():
|
|
140
|
+
|
|
141
|
+
# Commute the factor as necessary until we are in order
|
|
142
|
+
for j in mr:
|
|
143
|
+
if i <= j:
|
|
144
|
+
break
|
|
145
|
+
# Add the additional term from the commutation
|
|
146
|
+
# get a non-frozen bitset to manipulate
|
|
147
|
+
t = Bitset(mr) # a mutable copy
|
|
148
|
+
t.discard(j)
|
|
149
|
+
t = FrozenBitset(t)
|
|
150
|
+
next_level[t] = next_level.get(t, zero) + cr * Q[i, j]
|
|
151
|
+
# Note: ``Q[i,j] == Q(e[i]+e[j]) - Q(e[i]) - Q(e[j])`` for
|
|
152
|
+
# ``i != j``, where ``e[k]`` is the ``k``-th standard
|
|
153
|
+
# basis vector.
|
|
154
|
+
cr = -cr
|
|
155
|
+
if next_level[t] == zero:
|
|
156
|
+
del next_level[t]
|
|
157
|
+
|
|
158
|
+
# Check to see if we have a squared term or not
|
|
159
|
+
mr = Bitset(mr) # temporarily mutable
|
|
160
|
+
if i in mr:
|
|
161
|
+
mr.discard(i)
|
|
162
|
+
cr *= Q[i, i]
|
|
163
|
+
# Note: ``Q[i,i] == Q(e[i])`` where ``e[i]`` is the
|
|
164
|
+
# ``i``-th standard basis vector.
|
|
165
|
+
else:
|
|
166
|
+
# mr is implicitly sorted
|
|
167
|
+
mr.add(i)
|
|
168
|
+
mr = FrozenBitset(mr) # refreeze it
|
|
169
|
+
next_level[mr] = next_level.get(mr, zero) + cr
|
|
170
|
+
if next_level[mr] == zero:
|
|
171
|
+
del next_level[mr]
|
|
172
|
+
cur = next_level
|
|
173
|
+
|
|
174
|
+
# Add the distributed terms to the total
|
|
175
|
+
for index, coeff in cur.items():
|
|
176
|
+
d[index] = d.get(index, zero) + cl * coeff
|
|
177
|
+
if d[index] == zero:
|
|
178
|
+
del d[index]
|
|
179
|
+
|
|
180
|
+
return self.__class__(self.parent(), d)
|
|
181
|
+
|
|
182
|
+
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff):
|
|
183
|
+
r"""
|
|
184
|
+
Multiply ``self * term`` with the ``term`` having support ``supp``
|
|
185
|
+
and coefficient ``coeff``.
|
|
186
|
+
|
|
187
|
+
EXAMPLES::
|
|
188
|
+
|
|
189
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
190
|
+
sage: r = sum(E.basis())
|
|
191
|
+
sage: x * y # indirect doctest
|
|
192
|
+
x*y
|
|
193
|
+
sage: y * x # indirect doctest
|
|
194
|
+
-x*y
|
|
195
|
+
sage: r * x # indirect doctest
|
|
196
|
+
x*y*z - x*y - x*z + x
|
|
197
|
+
sage: r * -x # indirect doctest
|
|
198
|
+
-x*y*z + x*y + x*z - x
|
|
199
|
+
sage: r * (2*x) # indirect doctest
|
|
200
|
+
2*x*y*z - 2*x*y - 2*x*z + 2*x
|
|
201
|
+
sage: r * y # indirect doctest
|
|
202
|
+
-x*y*z + x*y - y*z + y
|
|
203
|
+
sage: r * z # indirect doctest
|
|
204
|
+
x*y*z + x*z + y*z + z
|
|
205
|
+
sage: r * (x*y) # indirect doctest
|
|
206
|
+
x*y*z + x*y
|
|
207
|
+
sage: r * (-x*y) # indirect doctest
|
|
208
|
+
-x*y*z - x*y
|
|
209
|
+
sage: r * (x*y*z) # indirect doctest
|
|
210
|
+
x*y*z
|
|
211
|
+
sage: r * 1 == r # indirect doctest
|
|
212
|
+
True
|
|
213
|
+
sage: r * -1 == -r # indirect doctest
|
|
214
|
+
True
|
|
215
|
+
sage: r * 2 # indirect doctest
|
|
216
|
+
2*x*y*z + 2*x*y + 2*x*z + 2*y*z + 2*x + 2*y + 2*z + 2
|
|
217
|
+
"""
|
|
218
|
+
if supp.isempty(): # Multiplication by a base ring element
|
|
219
|
+
if coeff == self._parent._base.one():
|
|
220
|
+
return self
|
|
221
|
+
if coeff == -self._parent._base.one():
|
|
222
|
+
return self._neg_()
|
|
223
|
+
|
|
224
|
+
return type(self)(self._parent,
|
|
225
|
+
scal(coeff, self._monomial_coefficients,
|
|
226
|
+
factor_on_left=False))
|
|
227
|
+
|
|
228
|
+
return type(self)(self._parent, {supp: coeff}) * self
|
|
229
|
+
|
|
230
|
+
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff):
|
|
231
|
+
r"""
|
|
232
|
+
Multiply ``term * self`` with the ``term`` having support ``supp``
|
|
233
|
+
and coefficient ``coeff``.
|
|
234
|
+
"""
|
|
235
|
+
if supp.isempty(): # Multiplication by a base ring element
|
|
236
|
+
if coeff == self._parent._base.one():
|
|
237
|
+
return self
|
|
238
|
+
if coeff == -self._parent._base.one():
|
|
239
|
+
return self._neg_()
|
|
240
|
+
|
|
241
|
+
return type(self)(self._parent,
|
|
242
|
+
scal(coeff, self._monomial_coefficients,
|
|
243
|
+
factor_on_left=True))
|
|
244
|
+
|
|
245
|
+
return type(self)(self._parent, {supp: coeff}) * self
|
|
246
|
+
|
|
247
|
+
def list(self):
|
|
248
|
+
"""
|
|
249
|
+
Return the list of monomials and their coefficients in ``self``
|
|
250
|
+
(as a list of `2`-tuples, each of which has the form
|
|
251
|
+
``(monomial, coefficient)``).
|
|
252
|
+
|
|
253
|
+
EXAMPLES::
|
|
254
|
+
|
|
255
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
256
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
257
|
+
sage: elt = 5*x + y
|
|
258
|
+
sage: elt.list()
|
|
259
|
+
[(1, 5), (01, 1)]
|
|
260
|
+
"""
|
|
261
|
+
return sorted(self._monomial_coefficients.items(), key=lambda m: (-len(m[0]), list(m[0])))
|
|
262
|
+
|
|
263
|
+
def support(self):
|
|
264
|
+
"""
|
|
265
|
+
Return the support of ``self``.
|
|
266
|
+
|
|
267
|
+
This is the list of all monomials which appear with nonzero
|
|
268
|
+
coefficient in ``self``.
|
|
269
|
+
|
|
270
|
+
EXAMPLES::
|
|
271
|
+
|
|
272
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
273
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
274
|
+
sage: elt = 5*x + y
|
|
275
|
+
sage: elt.support()
|
|
276
|
+
[1, 01]
|
|
277
|
+
"""
|
|
278
|
+
return sorted(self._monomial_coefficients, key=lambda x: (-len(x), list(x)))
|
|
279
|
+
|
|
280
|
+
def reflection(self):
|
|
281
|
+
r"""
|
|
282
|
+
Return the image of the reflection automorphism on ``self``.
|
|
283
|
+
|
|
284
|
+
The *reflection automorphism* of a Clifford algebra is defined
|
|
285
|
+
as the linear endomorphism of this algebra which maps
|
|
286
|
+
|
|
287
|
+
.. MATH::
|
|
288
|
+
|
|
289
|
+
x_1 \wedge x_2 \wedge \cdots \wedge x_m \mapsto
|
|
290
|
+
(-1)^m x_1 \wedge x_2 \wedge \cdots \wedge x_m.
|
|
291
|
+
|
|
292
|
+
It is an algebra automorphism of the Clifford algebra.
|
|
293
|
+
|
|
294
|
+
:meth:`degree_negation` is an alias for :meth:`reflection`.
|
|
295
|
+
|
|
296
|
+
EXAMPLES::
|
|
297
|
+
|
|
298
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
299
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
300
|
+
sage: elt = 5*x + y + x*z
|
|
301
|
+
sage: r = elt.reflection(); r
|
|
302
|
+
x*z - 5*x - y
|
|
303
|
+
sage: r.reflection() == elt
|
|
304
|
+
True
|
|
305
|
+
|
|
306
|
+
TESTS:
|
|
307
|
+
|
|
308
|
+
We check that the reflection is an involution::
|
|
309
|
+
|
|
310
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
311
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
312
|
+
sage: all(x.reflection().reflection() == x for x in Cl.basis())
|
|
313
|
+
True
|
|
314
|
+
"""
|
|
315
|
+
return self.__class__(self._parent,
|
|
316
|
+
{m: (-1)**len(m) * c for m, c in self})
|
|
317
|
+
|
|
318
|
+
degree_negation = reflection
|
|
319
|
+
|
|
320
|
+
def transpose(self):
|
|
321
|
+
r"""
|
|
322
|
+
Return the transpose of ``self``.
|
|
323
|
+
|
|
324
|
+
The transpose is an anti-algebra involution of a Clifford algebra
|
|
325
|
+
and is defined (using linearity) by
|
|
326
|
+
|
|
327
|
+
.. MATH::
|
|
328
|
+
|
|
329
|
+
x_1 \wedge x_2 \wedge \cdots \wedge x_m \mapsto
|
|
330
|
+
x_m \wedge \cdots \wedge x_2 \wedge x_1.
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
335
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
336
|
+
sage: elt = 5*x + y + x*z
|
|
337
|
+
sage: t = elt.transpose(); t
|
|
338
|
+
-x*z + 5*x + y + 3
|
|
339
|
+
sage: t.transpose() == elt
|
|
340
|
+
True
|
|
341
|
+
sage: Cl.one().transpose()
|
|
342
|
+
1
|
|
343
|
+
|
|
344
|
+
TESTS:
|
|
345
|
+
|
|
346
|
+
We check that the transpose is an involution::
|
|
347
|
+
|
|
348
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
349
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
350
|
+
sage: all(x.transpose().transpose() == x for x in Cl.basis())
|
|
351
|
+
True
|
|
352
|
+
|
|
353
|
+
Zero is sent to zero::
|
|
354
|
+
|
|
355
|
+
sage: Cl.zero().transpose() == Cl.zero()
|
|
356
|
+
True
|
|
357
|
+
"""
|
|
358
|
+
P = self._parent
|
|
359
|
+
if not self._monomial_coefficients:
|
|
360
|
+
return P.zero()
|
|
361
|
+
g = P.gens()
|
|
362
|
+
return P.sum(c * P.prod(g[i] for i in reversed(m)) for m, c in self)
|
|
363
|
+
|
|
364
|
+
def conjugate(self):
|
|
365
|
+
r"""
|
|
366
|
+
Return the Clifford conjugate of ``self``.
|
|
367
|
+
|
|
368
|
+
The Clifford conjugate of an element `x` of a Clifford algebra is
|
|
369
|
+
defined as
|
|
370
|
+
|
|
371
|
+
.. MATH::
|
|
372
|
+
|
|
373
|
+
\bar{x} := \alpha(x^t) = \alpha(x)^t
|
|
374
|
+
|
|
375
|
+
where `\alpha` denotes the :meth:`reflection <reflection>`
|
|
376
|
+
automorphism and `t` the :meth:`transposition <transpose>`.
|
|
377
|
+
|
|
378
|
+
EXAMPLES::
|
|
379
|
+
|
|
380
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
381
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
382
|
+
sage: elt = 5*x + y + x*z
|
|
383
|
+
sage: c = elt.conjugate(); c
|
|
384
|
+
-x*z - 5*x - y + 3
|
|
385
|
+
sage: c.conjugate() == elt
|
|
386
|
+
True
|
|
387
|
+
|
|
388
|
+
TESTS:
|
|
389
|
+
|
|
390
|
+
We check that the conjugate is an involution::
|
|
391
|
+
|
|
392
|
+
sage: Q = QuadraticForm(ZZ, 3, [1,2,3,4,5,6])
|
|
393
|
+
sage: Cl.<x,y,z> = CliffordAlgebra(Q)
|
|
394
|
+
sage: all(x.conjugate().conjugate() == x for x in Cl.basis())
|
|
395
|
+
True
|
|
396
|
+
"""
|
|
397
|
+
return self.reflection().transpose()
|
|
398
|
+
|
|
399
|
+
clifford_conjugate = conjugate
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
cdef class ExteriorAlgebraElement(CliffordAlgebraElement):
|
|
403
|
+
"""
|
|
404
|
+
An element of an exterior algebra.
|
|
405
|
+
"""
|
|
406
|
+
cdef _mul_(self, other):
|
|
407
|
+
"""
|
|
408
|
+
Return ``self`` multiplied by ``other``.
|
|
409
|
+
|
|
410
|
+
INPUT:
|
|
411
|
+
|
|
412
|
+
- ``other`` -- element of the same exterior algebra as ``self``
|
|
413
|
+
|
|
414
|
+
EXAMPLES::
|
|
415
|
+
|
|
416
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
417
|
+
sage: x*y
|
|
418
|
+
x*y
|
|
419
|
+
sage: y*x
|
|
420
|
+
-x*y
|
|
421
|
+
sage: z*y*x
|
|
422
|
+
-x*y*z
|
|
423
|
+
sage: (x*z)*y
|
|
424
|
+
-x*y*z
|
|
425
|
+
sage: (3*x + y)^2
|
|
426
|
+
0
|
|
427
|
+
sage: (x - 3*y + z/3)^2
|
|
428
|
+
0
|
|
429
|
+
sage: (x+y) * (y+z)
|
|
430
|
+
x*y + x*z + y*z
|
|
431
|
+
|
|
432
|
+
sage: E.<x,y,z,w> = ExteriorAlgebra(QQ)
|
|
433
|
+
sage: (x * y) * (w * z)
|
|
434
|
+
-x*y*z*w
|
|
435
|
+
sage: x * y * w * z
|
|
436
|
+
-x*y*z*w
|
|
437
|
+
sage: (z * w) * (x * y)
|
|
438
|
+
x*y*z*w
|
|
439
|
+
|
|
440
|
+
sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
|
|
441
|
+
sage: r = sum(E.basis())
|
|
442
|
+
sage: r*r
|
|
443
|
+
4*a*b*c*d + 4*a*b*c + 4*a*b*d + 4*a*c*d + 4*b*c*d
|
|
444
|
+
+ 2*a*b + 2*a*c + 2*a*d + 2*b*c + 2*b*d + 2*c*d
|
|
445
|
+
+ 2*a + 2*b + 2*c + 2*d + 1
|
|
446
|
+
"""
|
|
447
|
+
cdef Parent P = self._parent
|
|
448
|
+
zero = P._base.zero()
|
|
449
|
+
cdef dict d
|
|
450
|
+
cdef ExteriorAlgebraElement rhs = <ExteriorAlgebraElement> other
|
|
451
|
+
cdef list to_remove
|
|
452
|
+
|
|
453
|
+
cdef FrozenBitset ml, mr, t
|
|
454
|
+
cdef Py_ssize_t n, num_cross, tot_cross, i, j
|
|
455
|
+
|
|
456
|
+
# Special case: one of them is zero
|
|
457
|
+
if not self._monomial_coefficients:
|
|
458
|
+
return self
|
|
459
|
+
if not rhs._monomial_coefficients:
|
|
460
|
+
return rhs
|
|
461
|
+
|
|
462
|
+
# Special case: other is a single term
|
|
463
|
+
if len(rhs._monomial_coefficients) == 1:
|
|
464
|
+
mr, cr = next(iter(rhs._monomial_coefficients.items()))
|
|
465
|
+
return self._mul_self_term(mr, cr)
|
|
466
|
+
|
|
467
|
+
# Special case: self is a single term
|
|
468
|
+
if len(self._monomial_coefficients) == 1:
|
|
469
|
+
ml, cl = next(iter(self._monomial_coefficients.items()))
|
|
470
|
+
return rhs._mul_term_self(ml, cl)
|
|
471
|
+
|
|
472
|
+
# Do some special processing for the constant monomial in ml
|
|
473
|
+
ml = FrozenBitset()
|
|
474
|
+
if ml in self._monomial_coefficients:
|
|
475
|
+
const_coeff = self._monomial_coefficients[ml]
|
|
476
|
+
d = dict(rhs._monomial_coefficients) # Make a shallow copy
|
|
477
|
+
to_remove = []
|
|
478
|
+
if const_coeff != P._base.one():
|
|
479
|
+
for k in d:
|
|
480
|
+
d[k] *= const_coeff
|
|
481
|
+
if not d[k]: # there might be zero divisors
|
|
482
|
+
to_remove.append(k)
|
|
483
|
+
for k in to_remove:
|
|
484
|
+
del d[k]
|
|
485
|
+
else:
|
|
486
|
+
d = {}
|
|
487
|
+
|
|
488
|
+
n = P.ngens()
|
|
489
|
+
for ml, cl in self._monomial_coefficients.items():
|
|
490
|
+
# ml for "monomial on the left"
|
|
491
|
+
if ml.isempty(): # We already handled the trivial element
|
|
492
|
+
continue
|
|
493
|
+
for mr, cr in rhs._monomial_coefficients.items():
|
|
494
|
+
# mr for "monomial on the right"
|
|
495
|
+
if mr.isempty():
|
|
496
|
+
t = ml
|
|
497
|
+
else:
|
|
498
|
+
if not ml.isdisjoint(mr):
|
|
499
|
+
# if they intersect nontrivially, move along.
|
|
500
|
+
continue
|
|
501
|
+
t = <FrozenBitset> ml._union(mr)
|
|
502
|
+
it = iter(mr)
|
|
503
|
+
j = next(it)
|
|
504
|
+
|
|
505
|
+
num_cross = 0 # keep track of the number of signs
|
|
506
|
+
tot_cross = 0
|
|
507
|
+
for i in ml:
|
|
508
|
+
while i > j:
|
|
509
|
+
num_cross += 1
|
|
510
|
+
try:
|
|
511
|
+
j = next(it)
|
|
512
|
+
except StopIteration:
|
|
513
|
+
j = n + 1
|
|
514
|
+
tot_cross += num_cross
|
|
515
|
+
if tot_cross % 2:
|
|
516
|
+
cr = -cr
|
|
517
|
+
|
|
518
|
+
val = d.get(t, zero) + cl * cr
|
|
519
|
+
if not val:
|
|
520
|
+
del d[t]
|
|
521
|
+
else:
|
|
522
|
+
d[t] = val
|
|
523
|
+
|
|
524
|
+
return self.__class__(P, d)
|
|
525
|
+
|
|
526
|
+
cdef CliffordAlgebraElement _mul_self_term(self, FrozenBitset supp, coeff):
|
|
527
|
+
r"""
|
|
528
|
+
Multiply ``self * term`` with the ``term`` having support ``supp``
|
|
529
|
+
and coefficient ``coeff``.
|
|
530
|
+
|
|
531
|
+
EXAMPLES::
|
|
532
|
+
|
|
533
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
534
|
+
sage: r = sum(E.basis())
|
|
535
|
+
sage: x * y # indirect doctest
|
|
536
|
+
x*y
|
|
537
|
+
sage: y * x # indirect doctest
|
|
538
|
+
-x*y
|
|
539
|
+
sage: r * x # indirect doctest
|
|
540
|
+
x*y*z - x*y - x*z + x
|
|
541
|
+
sage: r * -x # indirect doctest
|
|
542
|
+
-x*y*z + x*y + x*z - x
|
|
543
|
+
sage: r * (2*x) # indirect doctest
|
|
544
|
+
2*x*y*z - 2*x*y - 2*x*z + 2*x
|
|
545
|
+
sage: r * y # indirect doctest
|
|
546
|
+
-x*y*z + x*y - y*z + y
|
|
547
|
+
sage: r * z # indirect doctest
|
|
548
|
+
x*y*z + x*z + y*z + z
|
|
549
|
+
sage: r * (x*y) # indirect doctest
|
|
550
|
+
x*y*z + x*y
|
|
551
|
+
sage: r * (-x*y) # indirect doctest
|
|
552
|
+
-x*y*z - x*y
|
|
553
|
+
sage: r * (x*y*z) # indirect doctest
|
|
554
|
+
x*y*z
|
|
555
|
+
sage: r * 1 == r # indirect doctest
|
|
556
|
+
True
|
|
557
|
+
sage: r * -1 == -r # indirect doctest
|
|
558
|
+
True
|
|
559
|
+
sage: r * 2 # indirect doctest
|
|
560
|
+
2*x*y*z + 2*x*y + 2*x*z + 2*y*z + 2*x + 2*y + 2*z + 2
|
|
561
|
+
"""
|
|
562
|
+
cdef dict d
|
|
563
|
+
cdef list to_remove
|
|
564
|
+
cdef Py_ssize_t num_cross, tot_cross, i, j
|
|
565
|
+
cdef FrozenBitset ml
|
|
566
|
+
|
|
567
|
+
if supp.isempty(): # Multiplication by a base ring element
|
|
568
|
+
if coeff == self._parent._base.one():
|
|
569
|
+
return self
|
|
570
|
+
if coeff == -self._parent._base.one():
|
|
571
|
+
return self._neg_()
|
|
572
|
+
|
|
573
|
+
return type(self)(self._parent,
|
|
574
|
+
scal(coeff, self._monomial_coefficients,
|
|
575
|
+
factor_on_left=False))
|
|
576
|
+
|
|
577
|
+
n = self._parent.ngens()
|
|
578
|
+
d = {}
|
|
579
|
+
for ml, cl in self._monomial_coefficients.items():
|
|
580
|
+
# ml for "monomial on the left"
|
|
581
|
+
if not ml.isdisjoint(supp):
|
|
582
|
+
# if they intersect nontrivially, move along.
|
|
583
|
+
continue
|
|
584
|
+
t = <FrozenBitset> ml._union(supp)
|
|
585
|
+
it = iter(supp)
|
|
586
|
+
j = next(it)
|
|
587
|
+
|
|
588
|
+
num_cross = 0 # keep track of the number of signs
|
|
589
|
+
tot_cross = 0
|
|
590
|
+
for i in ml:
|
|
591
|
+
while i > j:
|
|
592
|
+
num_cross += 1
|
|
593
|
+
try:
|
|
594
|
+
j = next(it)
|
|
595
|
+
except StopIteration:
|
|
596
|
+
j = n + 1
|
|
597
|
+
tot_cross += num_cross
|
|
598
|
+
if tot_cross % 2:
|
|
599
|
+
d[t] = -cl
|
|
600
|
+
else:
|
|
601
|
+
d[t] = cl
|
|
602
|
+
|
|
603
|
+
if coeff == -self._parent._base.one():
|
|
604
|
+
for k in d:
|
|
605
|
+
d[k] = -d[k]
|
|
606
|
+
elif coeff != self._parent._base.one():
|
|
607
|
+
to_remove = []
|
|
608
|
+
for k in d:
|
|
609
|
+
d[k] *= coeff
|
|
610
|
+
if not d[k]: # there might be zero divisors
|
|
611
|
+
to_remove.append(k)
|
|
612
|
+
for k in to_remove:
|
|
613
|
+
del d[k]
|
|
614
|
+
return type(self)(self._parent, d)
|
|
615
|
+
|
|
616
|
+
cdef CliffordAlgebraElement _mul_term_self(self, FrozenBitset supp, coeff):
|
|
617
|
+
r"""
|
|
618
|
+
Multiply ``term * self`` with the ``term`` having support ``supp``
|
|
619
|
+
and coefficient ``coeff``.
|
|
620
|
+
|
|
621
|
+
EXAMPLES::
|
|
622
|
+
|
|
623
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
624
|
+
sage: r = sum(E.basis())
|
|
625
|
+
sage: x * r # indirect doctest
|
|
626
|
+
x*y*z + x*y + x*z + x
|
|
627
|
+
sage: (-x) * r # indirect doctest
|
|
628
|
+
-x*y*z - x*y - x*z - x
|
|
629
|
+
sage: (2*x) * r # indirect doctest
|
|
630
|
+
2*x*y*z + 2*x*y + 2*x*z + 2*x
|
|
631
|
+
sage: y * r # indirect doctest
|
|
632
|
+
-x*y*z - x*y + y*z + y
|
|
633
|
+
sage: z * r # indirect doctest
|
|
634
|
+
x*y*z - x*z - y*z + z
|
|
635
|
+
sage: (x*y) * r # indirect doctest
|
|
636
|
+
x*y*z + x*y
|
|
637
|
+
sage: (-x*y) * r # indirect doctest
|
|
638
|
+
-x*y*z - x*y
|
|
639
|
+
sage: (x*y*z) * r # indirect doctest
|
|
640
|
+
x*y*z
|
|
641
|
+
sage: 1 * r == r # indirect doctest
|
|
642
|
+
True
|
|
643
|
+
sage: -1 * r == -r # indirect doctest
|
|
644
|
+
True
|
|
645
|
+
sage: 2 * r # indirect doctest
|
|
646
|
+
2*x*y*z + 2*x*y + 2*x*z + 2*y*z + 2*x + 2*y + 2*z + 2
|
|
647
|
+
"""
|
|
648
|
+
cdef dict d
|
|
649
|
+
cdef list to_remove
|
|
650
|
+
cdef Py_ssize_t n, num_cross, tot_cross, i, j
|
|
651
|
+
cdef FrozenBitset mr, t
|
|
652
|
+
|
|
653
|
+
if supp.isempty(): # Multiplication by a base ring element
|
|
654
|
+
if coeff == self._parent._base.one():
|
|
655
|
+
return self
|
|
656
|
+
if coeff == -self._parent._base.one():
|
|
657
|
+
return self._neg_()
|
|
658
|
+
|
|
659
|
+
return type(self)(self._parent,
|
|
660
|
+
scal(coeff, self._monomial_coefficients,
|
|
661
|
+
factor_on_left=True))
|
|
662
|
+
|
|
663
|
+
n = self._parent.ngens()
|
|
664
|
+
d = {}
|
|
665
|
+
mr = FrozenBitset()
|
|
666
|
+
# We need to special case the constant coefficient
|
|
667
|
+
const_coeff = None
|
|
668
|
+
if mr in self._monomial_coefficients:
|
|
669
|
+
const_coeff = self._monomial_coefficients.pop(mr)
|
|
670
|
+
d[supp] = const_coeff
|
|
671
|
+
|
|
672
|
+
for mr, cr in self._monomial_coefficients.items():
|
|
673
|
+
# mr for "monomial on the right"
|
|
674
|
+
if not supp.isdisjoint(mr):
|
|
675
|
+
# if they intersect nontrivially, move along.
|
|
676
|
+
continue
|
|
677
|
+
t = <FrozenBitset> supp._union(mr)
|
|
678
|
+
it = iter(mr)
|
|
679
|
+
j = next(it) # We assume mr is non-empty here
|
|
680
|
+
|
|
681
|
+
num_cross = 0 # keep track of the number of signs
|
|
682
|
+
tot_cross = 0
|
|
683
|
+
for i in supp:
|
|
684
|
+
while i > j:
|
|
685
|
+
num_cross += 1
|
|
686
|
+
try:
|
|
687
|
+
j = next(it)
|
|
688
|
+
except StopIteration:
|
|
689
|
+
j = n + 1
|
|
690
|
+
tot_cross += num_cross
|
|
691
|
+
if tot_cross % 2:
|
|
692
|
+
d[t] = -cr
|
|
693
|
+
else:
|
|
694
|
+
d[t] = cr
|
|
695
|
+
|
|
696
|
+
if coeff == -self._parent._base.one():
|
|
697
|
+
for k in d:
|
|
698
|
+
d[k] = -d[k]
|
|
699
|
+
elif coeff != self._parent._base.one():
|
|
700
|
+
to_remove = []
|
|
701
|
+
for k in d:
|
|
702
|
+
d[k] = coeff * d[k] # This will work for non-commutative base rings
|
|
703
|
+
if not d[k]: # there might be zero divisors
|
|
704
|
+
to_remove.append(k)
|
|
705
|
+
for k in to_remove:
|
|
706
|
+
del d[k]
|
|
707
|
+
|
|
708
|
+
# Add back the constant coefficient since we removed it for the special case
|
|
709
|
+
if const_coeff is not None:
|
|
710
|
+
self._monomial_coefficients[FrozenBitset()] = const_coeff
|
|
711
|
+
return type(self)(self._parent, d)
|
|
712
|
+
|
|
713
|
+
def reduce(self, I, left=True):
|
|
714
|
+
r"""
|
|
715
|
+
Reduce ``self`` with respect to the elements in ``I``.
|
|
716
|
+
|
|
717
|
+
INPUT:
|
|
718
|
+
|
|
719
|
+
- ``I`` -- list of exterior algebra elements or an ideal
|
|
720
|
+
- ``left`` -- boolean; if reduce as a left ideal (``True``)
|
|
721
|
+
or right ideal (``False``), ignored if ``I`` is an ideal
|
|
722
|
+
|
|
723
|
+
EXAMPLES::
|
|
724
|
+
|
|
725
|
+
sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
|
|
726
|
+
sage: f = (a + b*c) * d
|
|
727
|
+
sage: f.reduce([a + b*c], True)
|
|
728
|
+
2*a*d
|
|
729
|
+
sage: f.reduce([a + b*c], False)
|
|
730
|
+
0
|
|
731
|
+
|
|
732
|
+
sage: I = E.ideal([a + b*c])
|
|
733
|
+
sage: f.reduce(I)
|
|
734
|
+
0
|
|
735
|
+
"""
|
|
736
|
+
from sage.algebras.clifford_algebra import ExteriorAlgebraIdeal
|
|
737
|
+
if isinstance(I, ExteriorAlgebraIdeal):
|
|
738
|
+
return I.reduce(self)
|
|
739
|
+
|
|
740
|
+
f = self
|
|
741
|
+
E = self._parent
|
|
742
|
+
|
|
743
|
+
cdef FrozenBitset lm, s
|
|
744
|
+
for g in I:
|
|
745
|
+
lm = g.leading_support()
|
|
746
|
+
reduction = True
|
|
747
|
+
while reduction:
|
|
748
|
+
supp = f.support()
|
|
749
|
+
reduction = False
|
|
750
|
+
for s in supp:
|
|
751
|
+
if lm <= s:
|
|
752
|
+
reduction = True
|
|
753
|
+
mon = E.monomial(s - lm)
|
|
754
|
+
if left:
|
|
755
|
+
gp = mon * g
|
|
756
|
+
f = f - f[s] / gp[s] * gp
|
|
757
|
+
else:
|
|
758
|
+
gp = g * mon
|
|
759
|
+
f = f - f[s] / gp[s] * gp
|
|
760
|
+
break
|
|
761
|
+
return f
|
|
762
|
+
|
|
763
|
+
def interior_product(self, x):
|
|
764
|
+
r"""
|
|
765
|
+
Return the interior product (also known as antiderivation) of
|
|
766
|
+
``self`` with respect to ``x`` (that is, the element
|
|
767
|
+
`\iota_{x}(\text{self})` of the exterior algebra).
|
|
768
|
+
|
|
769
|
+
If `V` is an `R`-module, and if `\alpha` is a fixed element of
|
|
770
|
+
`V^*`, then the *interior product* with respect to `\alpha` is
|
|
771
|
+
an `R`-linear map
|
|
772
|
+
`i_{\alpha} \colon \Lambda(V) \to \Lambda(V)`, determined by
|
|
773
|
+
the following requirements:
|
|
774
|
+
|
|
775
|
+
- `i_{\alpha}(v) = \alpha(v)` for all `v \in V = \Lambda^1(V)`,
|
|
776
|
+
- it is a graded derivation of degree `-1`: all `x` and `y`
|
|
777
|
+
in `\Lambda(V)` satisfy
|
|
778
|
+
|
|
779
|
+
.. MATH::
|
|
780
|
+
|
|
781
|
+
i_{\alpha}(x \wedge y) = (i_{\alpha} x) \wedge y
|
|
782
|
+
+ (-1)^{\deg x} x \wedge (i_{\alpha} y).
|
|
783
|
+
|
|
784
|
+
It can be shown that this map `i_{\alpha}` is graded of
|
|
785
|
+
degree `-1` (that is, sends `\Lambda^k(V)` into
|
|
786
|
+
`\Lambda^{k-1}(V)` for every `k`).
|
|
787
|
+
|
|
788
|
+
When `V` is a finite free `R`-module, the interior product can
|
|
789
|
+
also be defined by
|
|
790
|
+
|
|
791
|
+
.. MATH::
|
|
792
|
+
|
|
793
|
+
(i_{\alpha} \omega)(u_1, \ldots, u_k)
|
|
794
|
+
= \omega(\alpha, u_1, \ldots, u_k),
|
|
795
|
+
|
|
796
|
+
where `\omega \in \Lambda^k(V)` is thought of as an
|
|
797
|
+
alternating multilinear mapping from
|
|
798
|
+
`V^* \times \cdots \times V^*` to `R`.
|
|
799
|
+
|
|
800
|
+
Since Sage is only dealing with exterior powers of modules
|
|
801
|
+
of the form `R^d` for some nonnegative integer `d`, the
|
|
802
|
+
element `\alpha \in V^*` can be thought of as an element of
|
|
803
|
+
`V` (by identifying the standard basis of `V = R^d` with its
|
|
804
|
+
dual basis). This is how `\alpha` should be passed to this
|
|
805
|
+
method.
|
|
806
|
+
|
|
807
|
+
We then extend the interior product to all
|
|
808
|
+
`\alpha \in \Lambda (V^*)` by
|
|
809
|
+
|
|
810
|
+
.. MATH::
|
|
811
|
+
|
|
812
|
+
i_{\beta \wedge \gamma} = i_{\gamma} \circ i_{\beta}.
|
|
813
|
+
|
|
814
|
+
INPUT:
|
|
815
|
+
|
|
816
|
+
- ``x`` -- element of (or coercing into) `\Lambda^1(V)`
|
|
817
|
+
(for example, an element of `V`); this plays the role of
|
|
818
|
+
`\alpha` in the above definition
|
|
819
|
+
|
|
820
|
+
EXAMPLES::
|
|
821
|
+
|
|
822
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
823
|
+
sage: x.interior_product(x)
|
|
824
|
+
1
|
|
825
|
+
sage: (x + x*y).interior_product(2*y)
|
|
826
|
+
-2*x
|
|
827
|
+
sage: (x*z + x*y*z).interior_product(2*y - x)
|
|
828
|
+
-2*x*z - y*z - z
|
|
829
|
+
sage: x.interior_product(E.one())
|
|
830
|
+
x
|
|
831
|
+
sage: E.one().interior_product(x)
|
|
832
|
+
0
|
|
833
|
+
sage: x.interior_product(E.zero())
|
|
834
|
+
0
|
|
835
|
+
sage: E.zero().interior_product(x)
|
|
836
|
+
0
|
|
837
|
+
|
|
838
|
+
REFERENCES:
|
|
839
|
+
|
|
840
|
+
- :wikipedia:`Exterior_algebra#Interior_product`
|
|
841
|
+
"""
|
|
842
|
+
P = self._parent
|
|
843
|
+
return P.sum([c * cx * P.interior_product_on_basis(m, mx)
|
|
844
|
+
for m, c in self for mx, cx in x])
|
|
845
|
+
|
|
846
|
+
antiderivation = interior_product
|
|
847
|
+
|
|
848
|
+
def hodge_dual(self):
|
|
849
|
+
r"""
|
|
850
|
+
Return the Hodge dual of ``self``.
|
|
851
|
+
|
|
852
|
+
The Hodge dual of an element `\alpha` of the exterior algebra is
|
|
853
|
+
defined as `i_{\alpha} \sigma`, where `\sigma` is the volume
|
|
854
|
+
form
|
|
855
|
+
(:meth:`~sage.algebras.clifford_algebra.ExteriorAlgebra.volume_form`)
|
|
856
|
+
and `i_{\alpha}` denotes the antiderivation function with
|
|
857
|
+
respect to `\alpha` (see :meth:`interior_product` for the
|
|
858
|
+
definition of this).
|
|
859
|
+
|
|
860
|
+
.. NOTE::
|
|
861
|
+
|
|
862
|
+
The Hodge dual of the Hodge dual of a homogeneous element
|
|
863
|
+
`p` of `\Lambda(V)` equals `(-1)^{k(n-k)} p`, where
|
|
864
|
+
`n = \dim V` and `k = \deg(p) = |p|`.
|
|
865
|
+
|
|
866
|
+
EXAMPLES::
|
|
867
|
+
|
|
868
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
869
|
+
sage: x.hodge_dual()
|
|
870
|
+
y*z
|
|
871
|
+
sage: (x*z).hodge_dual()
|
|
872
|
+
-y
|
|
873
|
+
sage: (x*y*z).hodge_dual()
|
|
874
|
+
1
|
|
875
|
+
sage: [a.hodge_dual().hodge_dual() for a in E.basis()]
|
|
876
|
+
[1, x, y, z, x*y, x*z, y*z, x*y*z]
|
|
877
|
+
sage: (x + x*y).hodge_dual()
|
|
878
|
+
y*z + z
|
|
879
|
+
sage: (x*z + x*y*z).hodge_dual()
|
|
880
|
+
-y + 1
|
|
881
|
+
sage: E = ExteriorAlgebra(QQ, 'wxyz')
|
|
882
|
+
sage: [a.hodge_dual().hodge_dual() for a in E.basis()]
|
|
883
|
+
[1, -w, -x, -y, -z, w*x, w*y, w*z, x*y, x*z, y*z,
|
|
884
|
+
-w*x*y, -w*x*z, -w*y*z, -x*y*z, w*x*y*z]
|
|
885
|
+
"""
|
|
886
|
+
volume_form = self._parent.volume_form()
|
|
887
|
+
return volume_form.interior_product(self)
|
|
888
|
+
|
|
889
|
+
def constant_coefficient(self):
|
|
890
|
+
"""
|
|
891
|
+
Return the constant coefficient of ``self``.
|
|
892
|
+
|
|
893
|
+
.. TODO::
|
|
894
|
+
|
|
895
|
+
Define a similar method for general Clifford algebras once
|
|
896
|
+
the morphism to exterior algebras is implemented.
|
|
897
|
+
|
|
898
|
+
EXAMPLES::
|
|
899
|
+
|
|
900
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
901
|
+
sage: elt = 5*x + y + x*z + 10
|
|
902
|
+
sage: elt.constant_coefficient()
|
|
903
|
+
10
|
|
904
|
+
sage: x.constant_coefficient()
|
|
905
|
+
0
|
|
906
|
+
"""
|
|
907
|
+
return self._monomial_coefficients.get(self._parent.one_basis(),
|
|
908
|
+
self._parent._base.zero())
|
|
909
|
+
|
|
910
|
+
def scalar(self, other):
|
|
911
|
+
r"""
|
|
912
|
+
Return the standard scalar product of ``self`` with ``other``.
|
|
913
|
+
|
|
914
|
+
The standard scalar product of `x, y \in \Lambda(V)` is
|
|
915
|
+
defined by `\langle x, y \rangle = \langle x^t y \rangle`, where
|
|
916
|
+
`\langle a \rangle` denotes the degree-0 term of `a`, and where
|
|
917
|
+
`x^t` denotes the transpose
|
|
918
|
+
(:meth:`~sage.algebras.clifford_algebra.CliffordAlgebraElement.transpose`)
|
|
919
|
+
of `x`.
|
|
920
|
+
|
|
921
|
+
.. TODO::
|
|
922
|
+
|
|
923
|
+
Define a similar method for general Clifford algebras once
|
|
924
|
+
the morphism to exterior algebras is implemented.
|
|
925
|
+
|
|
926
|
+
EXAMPLES::
|
|
927
|
+
|
|
928
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
929
|
+
sage: elt = 5*x + y + x*z
|
|
930
|
+
sage: elt.scalar(z + 2*x)
|
|
931
|
+
0
|
|
932
|
+
sage: elt.transpose() * (z + 2*x)
|
|
933
|
+
-2*x*y + 5*x*z + y*z
|
|
934
|
+
"""
|
|
935
|
+
return (self.transpose() * other).constant_coefficient()
|
|
936
|
+
|
|
937
|
+
cdef class CohomologyRAAGElement(CliffordAlgebraElement):
|
|
938
|
+
"""
|
|
939
|
+
An element in the cohomology of a right-angled Artin group.
|
|
940
|
+
|
|
941
|
+
.. SEEALSO::
|
|
942
|
+
|
|
943
|
+
:class:`~sage.groups.raag.CohomologyRAAG`
|
|
944
|
+
"""
|
|
945
|
+
cdef _mul_(self, other):
|
|
946
|
+
"""
|
|
947
|
+
Return ``self`` multiplied by ``other``.
|
|
948
|
+
|
|
949
|
+
EXAMPLES::
|
|
950
|
+
|
|
951
|
+
sage: # needs sage.graphs sage.groups
|
|
952
|
+
sage: C4 = graphs.CycleGraph(4)
|
|
953
|
+
sage: A = groups.misc.RightAngledArtin(C4)
|
|
954
|
+
sage: H = A.cohomology()
|
|
955
|
+
sage: b = sum(H.basis())
|
|
956
|
+
sage: b * b
|
|
957
|
+
2*e0*e2 + 2*e1*e3 + 2*e0 + 2*e1 + 2*e2 + 2*e3 + 1
|
|
958
|
+
"""
|
|
959
|
+
zero = self._parent._base.zero()
|
|
960
|
+
cdef frozenset I = frozenset(self._parent._indices)
|
|
961
|
+
cdef dict d = {}
|
|
962
|
+
cdef list t
|
|
963
|
+
cdef tuple tp
|
|
964
|
+
cdef tuple ml, mr
|
|
965
|
+
cdef Py_ssize_t pos, i, j
|
|
966
|
+
cdef bint negate
|
|
967
|
+
|
|
968
|
+
for ml, cl in self._monomial_coefficients.items():
|
|
969
|
+
for mr, cr in other._monomial_coefficients.items():
|
|
970
|
+
# Create the next term
|
|
971
|
+
tp = tuple(sorted(mr + ml))
|
|
972
|
+
if any(tp[i] == tp[i+1] for i in range(len(tp)-1)): # e_i ^ e_i = 0
|
|
973
|
+
continue
|
|
974
|
+
if tp not in I:
|
|
975
|
+
# not an independent set, so this term is also 0
|
|
976
|
+
continue
|
|
977
|
+
|
|
978
|
+
t = list(mr)
|
|
979
|
+
negate = False
|
|
980
|
+
for i in reversed(ml):
|
|
981
|
+
pos = 0
|
|
982
|
+
for j in t:
|
|
983
|
+
assert i != j
|
|
984
|
+
if i < j:
|
|
985
|
+
break
|
|
986
|
+
pos += 1
|
|
987
|
+
negate = not negate
|
|
988
|
+
t.insert(pos, i)
|
|
989
|
+
|
|
990
|
+
if negate:
|
|
991
|
+
cr = -cr
|
|
992
|
+
|
|
993
|
+
d[tp] = d.get(tp, zero) + cl * cr
|
|
994
|
+
if d[tp] == zero:
|
|
995
|
+
del d[tp]
|
|
996
|
+
|
|
997
|
+
return self.__class__(self._parent, d)
|