passagemath-modules 10.6.31__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31.dist-info/RECORD +808 -0
- passagemath_modules-10.6.31.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-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-x86_64-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,1264 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Quantum-valued polynomial rings
|
|
4
|
+
|
|
5
|
+
This provides a `q`-analogue of the :class:`~sage.rings.polynomials.integer_valued_polynomials.IntegerValuedPolynomialRing`.
|
|
6
|
+
|
|
7
|
+
AUTHORS:
|
|
8
|
+
|
|
9
|
+
- Frédéric Chapoton (2024-03): Initial version
|
|
10
|
+
"""
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2024 Frédéric Chapoton <chapoton-math-unistra-fr>
|
|
13
|
+
#
|
|
14
|
+
# This program is free software: you can redistribute it and/or modify
|
|
15
|
+
# it under the terms of the GNU General Public License as published by
|
|
16
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
17
|
+
# (at your option) any later version.
|
|
18
|
+
# https://www.gnu.org/licenses/
|
|
19
|
+
# ****************************************************************************
|
|
20
|
+
from sage.arith.misc import binomial
|
|
21
|
+
from sage.categories.algebras import Algebras
|
|
22
|
+
from sage.categories.realizations import Category_realization_of_parent
|
|
23
|
+
from sage.categories.rings import Rings
|
|
24
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
25
|
+
from sage.combinat.q_analogues import q_binomial, q_int
|
|
26
|
+
from sage.data_structures.blas_dict import linear_combination
|
|
27
|
+
from sage.matrix.constructor import matrix
|
|
28
|
+
from sage.misc.bindable_class import BindableClass
|
|
29
|
+
from sage.misc.cachefunc import cached_method
|
|
30
|
+
from sage.modules.free_module_element import vector
|
|
31
|
+
from sage.rings.integer_ring import ZZ
|
|
32
|
+
from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
|
|
33
|
+
from sage.rings.polynomial.polynomial_ring import polygen
|
|
34
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
35
|
+
from sage.rings.rational_field import QQ
|
|
36
|
+
from sage.sets.family import Family
|
|
37
|
+
from sage.sets.non_negative_integers import NonNegativeIntegers
|
|
38
|
+
from sage.structure.element import parent
|
|
39
|
+
from sage.structure.parent import Parent
|
|
40
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def q_int_x(n, q=None):
|
|
44
|
+
"""
|
|
45
|
+
Return the interpolating polynomial of `q`-integers.
|
|
46
|
+
|
|
47
|
+
INPUT:
|
|
48
|
+
|
|
49
|
+
- ``n`` -- a positive integer
|
|
50
|
+
|
|
51
|
+
- ``q`` -- optional variable
|
|
52
|
+
|
|
53
|
+
EXAMPLES::
|
|
54
|
+
|
|
55
|
+
sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_int_x
|
|
56
|
+
sage: q_int_x(3)
|
|
57
|
+
q^2*x + q + 1
|
|
58
|
+
|
|
59
|
+
TESTS::
|
|
60
|
+
|
|
61
|
+
sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_int_x
|
|
62
|
+
sage: q_int_x(3, 1)
|
|
63
|
+
x + 2
|
|
64
|
+
"""
|
|
65
|
+
if q is None:
|
|
66
|
+
ring_q = PolynomialRing(ZZ, 'q')
|
|
67
|
+
q = ring_q.gen()
|
|
68
|
+
else:
|
|
69
|
+
ring_q = q.parent()
|
|
70
|
+
x = polygen(ring_q, 'x')
|
|
71
|
+
return q_int(n - 1, q) + q**(n - 1) * x
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def q_binomial_x(m, n, q=None):
|
|
75
|
+
r"""
|
|
76
|
+
Return a `q`-analogue of ``binomial(m + x, n)``.
|
|
77
|
+
|
|
78
|
+
When evaluated at the `q`-integer `[k]_q`, this gives
|
|
79
|
+
the usual `q`-binomial coefficient `[m + k, n]_q`.
|
|
80
|
+
|
|
81
|
+
INPUT:
|
|
82
|
+
|
|
83
|
+
- ``m`` and ``n`` -- positive integers
|
|
84
|
+
|
|
85
|
+
- ``q`` -- optional variable
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: from sage.combinat.q_analogues import q_int
|
|
90
|
+
sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_binomial_x, q_int_x
|
|
91
|
+
sage: q_binomial_x(4,2)(0) == q_binomial(4,2)
|
|
92
|
+
True
|
|
93
|
+
sage: q_binomial_x(3,2)(1) == q_binomial(4,2)
|
|
94
|
+
True
|
|
95
|
+
sage: q_binomial_x(3,1) == q_int_x(4)
|
|
96
|
+
True
|
|
97
|
+
sage: q_binomial_x(2,0).parent()
|
|
98
|
+
Univariate Polynomial Ring in x over Fraction Field of
|
|
99
|
+
Univariate Polynomial Ring in q over Integer Ring
|
|
100
|
+
|
|
101
|
+
TESTS::
|
|
102
|
+
|
|
103
|
+
sage: from sage.rings.polynomial.q_integer_valued_polynomials import q_binomial_x
|
|
104
|
+
sage: q_binomial_x(4,2,1)
|
|
105
|
+
1/2*x^2 + 7/2*x + 6
|
|
106
|
+
"""
|
|
107
|
+
if q is None:
|
|
108
|
+
ring_q = PolynomialRing(ZZ, 'q')
|
|
109
|
+
else:
|
|
110
|
+
ring_q = q.parent()
|
|
111
|
+
ring = PolynomialRing(ring_q.fraction_field(), 'x')
|
|
112
|
+
if n == 0:
|
|
113
|
+
return ring.one()
|
|
114
|
+
return ring.prod(q_int_x(m + 2 - i, q) / q_int(i, q)
|
|
115
|
+
for i in range(1, n + 1))
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class QuantumValuedPolynomialRing(UniqueRepresentation, Parent):
|
|
119
|
+
r"""
|
|
120
|
+
The quantum-valued polynomial ring over a base ring.
|
|
121
|
+
|
|
122
|
+
Quantum-valued polynomial rings are commutative and associative
|
|
123
|
+
algebras, with a basis indexed by nonnegative integers.
|
|
124
|
+
|
|
125
|
+
The elements are polynomials in one variable `x` with coefficients in
|
|
126
|
+
the field of rational functions in `q`, such that the value at
|
|
127
|
+
every nonegative `q`-integer is a polynomial in `q`.
|
|
128
|
+
|
|
129
|
+
This algebra is endowed with two bases, named ``B`` or ``Binomial``
|
|
130
|
+
and ``S`` or ``Shifted``.
|
|
131
|
+
|
|
132
|
+
INPUT:
|
|
133
|
+
|
|
134
|
+
- ``R`` -- commutative ring
|
|
135
|
+
|
|
136
|
+
- ``q`` -- optional variable
|
|
137
|
+
|
|
138
|
+
There are two possible input formats:
|
|
139
|
+
|
|
140
|
+
- If the argument ``q`` is not given, then the ring ``R`` is
|
|
141
|
+
taken as a base ring and the ring of Laurent polynomials in `q`
|
|
142
|
+
over ``R`` is built and used.
|
|
143
|
+
|
|
144
|
+
- If the argument ``q`` is given, then it should belong to the ring ``R``
|
|
145
|
+
and be invertible in this ring.
|
|
146
|
+
|
|
147
|
+
EXAMPLES::
|
|
148
|
+
|
|
149
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S(); F
|
|
150
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
151
|
+
in the shifted basis
|
|
152
|
+
|
|
153
|
+
sage: F.gen()
|
|
154
|
+
S[1]
|
|
155
|
+
|
|
156
|
+
sage: S = QuantumValuedPolynomialRing(ZZ); S
|
|
157
|
+
Quantum-Valued Polynomial Ring over Integer Ring
|
|
158
|
+
sage: S.base_ring()
|
|
159
|
+
Univariate Laurent Polynomial Ring in q over Integer Ring
|
|
160
|
+
|
|
161
|
+
Quantum-valued polynomial rings commute with their base ring::
|
|
162
|
+
|
|
163
|
+
sage: K = QuantumValuedPolynomialRing(QQ).S()
|
|
164
|
+
sage: a = K.gen()
|
|
165
|
+
sage: c = K.monomial(2)
|
|
166
|
+
|
|
167
|
+
Quantum-valued polynomial rings are commutative::
|
|
168
|
+
|
|
169
|
+
sage: c^3 * a == c * a * c * c
|
|
170
|
+
True
|
|
171
|
+
|
|
172
|
+
We can also manipulate elements in the basis and coerce elements from our
|
|
173
|
+
base field::
|
|
174
|
+
|
|
175
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S()
|
|
176
|
+
sage: B = F.basis()
|
|
177
|
+
sage: B[2] * B[3]
|
|
178
|
+
(q^-5+q^-4+q^-3)*S[3] - (q^-6+2*q^-5+3*q^-4+3*q^-3+2*q^-2+q^-1)*S[4]
|
|
179
|
+
+ (q^-6+q^-5+2*q^-4+2*q^-3+2*q^-2+q^-1+1)*S[5]
|
|
180
|
+
sage: 1 - B[2] * B[2] / 2
|
|
181
|
+
S[0] - (1/2*q^-3)*S[2] + (1/2*q^-4+q^-3+q^-2+1/2*q^-1)*S[3]
|
|
182
|
+
- (1/2*q^-4+1/2*q^-3+q^-2+1/2*q^-1+1/2)*S[4]
|
|
183
|
+
"""
|
|
184
|
+
@staticmethod
|
|
185
|
+
def __classcall_private__(cls, R, q=None) -> None:
|
|
186
|
+
"""
|
|
187
|
+
Normalize the input.
|
|
188
|
+
|
|
189
|
+
EXAMPLES::
|
|
190
|
+
|
|
191
|
+
sage: q = LaurentPolynomialRing(QQ, 'q').gen()
|
|
192
|
+
sage: F1 = QuantumValuedPolynomialRing(QQ)
|
|
193
|
+
sage: F2 = QuantumValuedPolynomialRing(q.parent(), q)
|
|
194
|
+
sage: F1 is F2
|
|
195
|
+
True
|
|
196
|
+
"""
|
|
197
|
+
if R not in Rings().Commutative():
|
|
198
|
+
msg = "argument R must be a commutative ring"
|
|
199
|
+
raise TypeError(msg)
|
|
200
|
+
|
|
201
|
+
if q is None:
|
|
202
|
+
laurent = LaurentPolynomialRing(R, 'q')
|
|
203
|
+
q = laurent.gen()
|
|
204
|
+
else:
|
|
205
|
+
laurent = q.parent()
|
|
206
|
+
return super().__classcall__(cls, laurent, q)
|
|
207
|
+
|
|
208
|
+
def __init__(self, R, q) -> None:
|
|
209
|
+
r"""
|
|
210
|
+
Initialize ``self``.
|
|
211
|
+
|
|
212
|
+
EXAMPLES::
|
|
213
|
+
|
|
214
|
+
sage: F = QuantumValuedPolynomialRing(QQ); F
|
|
215
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
216
|
+
sage: TestSuite(F).run()
|
|
217
|
+
|
|
218
|
+
sage: F = QuantumValuedPolynomialRing(QQ, 1); F
|
|
219
|
+
Quantum-Valued Polynomial Ring over Integer Ring
|
|
220
|
+
sage: TestSuite(F).run()
|
|
221
|
+
|
|
222
|
+
TESTS::
|
|
223
|
+
|
|
224
|
+
sage: QuantumValuedPolynomialRing(24)
|
|
225
|
+
Traceback (most recent call last):
|
|
226
|
+
...
|
|
227
|
+
TypeError: argument R must be a commutative ring
|
|
228
|
+
"""
|
|
229
|
+
self._ground_ring = R.base_ring()
|
|
230
|
+
self._q = q
|
|
231
|
+
cat = Algebras(R).Commutative().WithBasis()
|
|
232
|
+
Parent.__init__(self, base=R, category=cat.WithRealizations())
|
|
233
|
+
|
|
234
|
+
_shorthands = ["B", "S"]
|
|
235
|
+
|
|
236
|
+
def _repr_(self) -> str:
|
|
237
|
+
r"""
|
|
238
|
+
Return the string representation.
|
|
239
|
+
|
|
240
|
+
EXAMPLES::
|
|
241
|
+
|
|
242
|
+
sage: F = QuantumValuedPolynomialRing(QQ)
|
|
243
|
+
sage: F # indirect doctest
|
|
244
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
245
|
+
|
|
246
|
+
sage: QuantumValuedPolynomialRing(ZZ)
|
|
247
|
+
Quantum-Valued Polynomial Ring over Integer Ring
|
|
248
|
+
"""
|
|
249
|
+
base = self.base_ring().base_ring()
|
|
250
|
+
return f"Quantum-Valued Polynomial Ring over {base}"
|
|
251
|
+
|
|
252
|
+
def a_realization(self):
|
|
253
|
+
"""
|
|
254
|
+
Return a default realization.
|
|
255
|
+
|
|
256
|
+
The Shifted realization is chosen.
|
|
257
|
+
|
|
258
|
+
EXAMPLES::
|
|
259
|
+
|
|
260
|
+
sage: QuantumValuedPolynomialRing(QQ).a_realization()
|
|
261
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
262
|
+
in the shifted basis
|
|
263
|
+
"""
|
|
264
|
+
return self.Shifted()
|
|
265
|
+
|
|
266
|
+
class Bases(Category_realization_of_parent):
|
|
267
|
+
def super_categories(self) -> list:
|
|
268
|
+
r"""
|
|
269
|
+
Return the super-categories of ``self``.
|
|
270
|
+
|
|
271
|
+
EXAMPLES::
|
|
272
|
+
|
|
273
|
+
sage: A = QuantumValuedPolynomialRing(QQ); A
|
|
274
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
275
|
+
sage: C = A.Bases(); C
|
|
276
|
+
Category of bases of Quantum-Valued Polynomial Ring
|
|
277
|
+
over Rational Field
|
|
278
|
+
sage: C.super_categories()
|
|
279
|
+
[Category of realizations of Quantum-Valued Polynomial Ring
|
|
280
|
+
over Rational Field,
|
|
281
|
+
Join of Category of algebras with basis
|
|
282
|
+
over Univariate Laurent Polynomial Ring in q over Rational Field and
|
|
283
|
+
Category of filtered algebras
|
|
284
|
+
over Univariate Laurent Polynomial Ring in q over Rational Field and
|
|
285
|
+
Category of commutative algebras
|
|
286
|
+
over Univariate Laurent Polynomial Ring in q over Rational Field and
|
|
287
|
+
Category of realizations of unital magmas]
|
|
288
|
+
"""
|
|
289
|
+
A = self.base()
|
|
290
|
+
category = Algebras(A.base_ring()).Commutative().Filtered()
|
|
291
|
+
return [A.Realizations(),
|
|
292
|
+
category.Realizations().WithBasis()]
|
|
293
|
+
|
|
294
|
+
class ParentMethods:
|
|
295
|
+
def ground_ring(self):
|
|
296
|
+
"""
|
|
297
|
+
Return the ring of coefficients.
|
|
298
|
+
|
|
299
|
+
This ring is not supposed to contain the variable `q`.
|
|
300
|
+
|
|
301
|
+
EXAMPLES::
|
|
302
|
+
|
|
303
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
304
|
+
sage: A.ground_ring()
|
|
305
|
+
Rational Field
|
|
306
|
+
"""
|
|
307
|
+
return self.realization_of()._ground_ring
|
|
308
|
+
|
|
309
|
+
def _repr_(self) -> str:
|
|
310
|
+
r"""
|
|
311
|
+
EXAMPLES::
|
|
312
|
+
|
|
313
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S()
|
|
314
|
+
sage: F # indirect doctest
|
|
315
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
316
|
+
in the shifted basis
|
|
317
|
+
"""
|
|
318
|
+
real = self.realization_of()
|
|
319
|
+
return f"{real} in the {self._realization_name()} basis"
|
|
320
|
+
|
|
321
|
+
@cached_method
|
|
322
|
+
def one_basis(self):
|
|
323
|
+
r"""
|
|
324
|
+
Return the number 0, which index the unit of this algebra.
|
|
325
|
+
|
|
326
|
+
EXAMPLES::
|
|
327
|
+
|
|
328
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
329
|
+
sage: A.one_basis()
|
|
330
|
+
0
|
|
331
|
+
sage: A.one()
|
|
332
|
+
S[0]
|
|
333
|
+
"""
|
|
334
|
+
return self.basis().keys()(0)
|
|
335
|
+
|
|
336
|
+
def q(self):
|
|
337
|
+
"""
|
|
338
|
+
Return the variable `q`.
|
|
339
|
+
|
|
340
|
+
EXAMPLES::
|
|
341
|
+
|
|
342
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
343
|
+
sage: A.q()
|
|
344
|
+
q
|
|
345
|
+
"""
|
|
346
|
+
return self.realization_of()._q
|
|
347
|
+
|
|
348
|
+
def degree_on_basis(self, m):
|
|
349
|
+
r"""
|
|
350
|
+
Return the degree of the basis element indexed by ``m``.
|
|
351
|
+
|
|
352
|
+
EXAMPLES::
|
|
353
|
+
|
|
354
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
355
|
+
sage: A.degree_on_basis(4)
|
|
356
|
+
4
|
|
357
|
+
"""
|
|
358
|
+
return ZZ(m)
|
|
359
|
+
|
|
360
|
+
def from_polynomial(self, p):
|
|
361
|
+
r"""
|
|
362
|
+
Convert a polynomial into the ring of quantum-valued polynomials.
|
|
363
|
+
|
|
364
|
+
This raises a :exc:`ValueError` if this is not possible.
|
|
365
|
+
|
|
366
|
+
INPUT:
|
|
367
|
+
|
|
368
|
+
- ``p`` -- a polynomial in ``x`` with coefficients in ``QQ(q)``
|
|
369
|
+
|
|
370
|
+
EXAMPLES::
|
|
371
|
+
|
|
372
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S()
|
|
373
|
+
sage: S = A.basis()
|
|
374
|
+
sage: A.from_polynomial((S[1]).polynomial())
|
|
375
|
+
S[1]
|
|
376
|
+
sage: A.from_polynomial((S[2]+2*S[3]).polynomial())
|
|
377
|
+
S[2] + 2*S[3]
|
|
378
|
+
|
|
379
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).B()
|
|
380
|
+
sage: B = A.basis()
|
|
381
|
+
sage: A.from_polynomial((B[1]).polynomial())
|
|
382
|
+
B[1]
|
|
383
|
+
sage: A.from_polynomial((B[2]+2*B[3]).polynomial())
|
|
384
|
+
B[2] + 2*B[3]
|
|
385
|
+
|
|
386
|
+
TESTS::
|
|
387
|
+
|
|
388
|
+
sage: A = QuantumValuedPolynomialRing(QQ).B()
|
|
389
|
+
sage: q = polygen(QQ,'q')
|
|
390
|
+
sage: x = polygen(q.parent(),'x')
|
|
391
|
+
sage: A.from_polynomial(x**2/(q+1)+1)
|
|
392
|
+
Traceback (most recent call last):
|
|
393
|
+
...
|
|
394
|
+
ValueError: not a polynomial with integer values : 1/(q + 1) is not a Laurent polynomial
|
|
395
|
+
"""
|
|
396
|
+
B = self.basis()
|
|
397
|
+
poly = self._poly
|
|
398
|
+
laurent_polys = self.base_ring()
|
|
399
|
+
remain = p.change_variable_name('x')
|
|
400
|
+
result = self.zero()
|
|
401
|
+
while remain:
|
|
402
|
+
N = remain.degree()
|
|
403
|
+
base_N = poly(N)
|
|
404
|
+
top_coeff = remain.leading_coefficient() / base_N.lc()
|
|
405
|
+
denom = top_coeff.denominator()
|
|
406
|
+
if denom.is_term():
|
|
407
|
+
numer = top_coeff.numerator()
|
|
408
|
+
top_coeff_laurent = laurent_polys(numer) / laurent_polys(denom)
|
|
409
|
+
else:
|
|
410
|
+
msg = 'not a polynomial with integer values :'
|
|
411
|
+
msg += f' {top_coeff} is not a Laurent polynomial'
|
|
412
|
+
raise ValueError(msg)
|
|
413
|
+
remain += -top_coeff * base_N
|
|
414
|
+
result += top_coeff_laurent * B[N]
|
|
415
|
+
return result
|
|
416
|
+
|
|
417
|
+
def gen(self, i=0):
|
|
418
|
+
r"""
|
|
419
|
+
Return the generator of the algebra.
|
|
420
|
+
|
|
421
|
+
The optional argument is ignored.
|
|
422
|
+
|
|
423
|
+
EXAMPLES::
|
|
424
|
+
|
|
425
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
426
|
+
sage: F.gen()
|
|
427
|
+
S[1]
|
|
428
|
+
"""
|
|
429
|
+
return self.basis()[1]
|
|
430
|
+
|
|
431
|
+
@cached_method
|
|
432
|
+
def algebra_generators(self):
|
|
433
|
+
r"""
|
|
434
|
+
Return the generators of this algebra.
|
|
435
|
+
|
|
436
|
+
EXAMPLES::
|
|
437
|
+
|
|
438
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S(); A
|
|
439
|
+
Quantum-Valued Polynomial Ring over Integer Ring
|
|
440
|
+
in the shifted basis
|
|
441
|
+
sage: A.algebra_generators()
|
|
442
|
+
Family (S[1],)
|
|
443
|
+
"""
|
|
444
|
+
return Family([self.basis()[1]])
|
|
445
|
+
|
|
446
|
+
gens = algebra_generators
|
|
447
|
+
|
|
448
|
+
class ElementMethods:
|
|
449
|
+
def __call__(self, v):
|
|
450
|
+
"""
|
|
451
|
+
Return the evaluation at some value ``v``.
|
|
452
|
+
|
|
453
|
+
EXAMPLES::
|
|
454
|
+
|
|
455
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
456
|
+
sage: B = F.gen()
|
|
457
|
+
sage: f = B**2+4*B+6
|
|
458
|
+
sage: f(1/3)
|
|
459
|
+
(q^2 + 18*q + 99)/9
|
|
460
|
+
|
|
461
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).B()
|
|
462
|
+
sage: B = F.gen()
|
|
463
|
+
sage: f = F.monomial(2)+4*B+6
|
|
464
|
+
sage: f(1/3)
|
|
465
|
+
(66*q^2 + 66*q - 2)/(9*q^2 + 9*q)
|
|
466
|
+
"""
|
|
467
|
+
return self.polynomial()(v)
|
|
468
|
+
|
|
469
|
+
def polynomial(self):
|
|
470
|
+
"""
|
|
471
|
+
Convert to a polynomial in `x`.
|
|
472
|
+
|
|
473
|
+
EXAMPLES::
|
|
474
|
+
|
|
475
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
476
|
+
sage: S = F.gen()
|
|
477
|
+
sage: (S+1).polynomial()
|
|
478
|
+
q*x + 2
|
|
479
|
+
|
|
480
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).B()
|
|
481
|
+
sage: B = F.gen()
|
|
482
|
+
sage: (B+1).polynomial()
|
|
483
|
+
x + 1
|
|
484
|
+
|
|
485
|
+
TESTS::
|
|
486
|
+
|
|
487
|
+
sage: F.zero().polynomial().parent()
|
|
488
|
+
Univariate Polynomial Ring in x over Fraction Field
|
|
489
|
+
of Univariate Polynomial Ring in q over Integer Ring
|
|
490
|
+
"""
|
|
491
|
+
ring = self.parent().ground_ring()
|
|
492
|
+
fractions = PolynomialRing(ring, 'q').fraction_field()
|
|
493
|
+
R = PolynomialRing(fractions, 'x')
|
|
494
|
+
p = self.parent()._poly
|
|
495
|
+
return R.sum(c * p(i) for i, c in self)
|
|
496
|
+
|
|
497
|
+
def shift(self, j=1):
|
|
498
|
+
"""
|
|
499
|
+
Shift all indices by `j`.
|
|
500
|
+
|
|
501
|
+
INPUT:
|
|
502
|
+
|
|
503
|
+
- `j` -- integer (default 1)
|
|
504
|
+
|
|
505
|
+
In the binomial basis, the shift by 1 corresponds to
|
|
506
|
+
a summation operator from `0` to `x`.
|
|
507
|
+
|
|
508
|
+
EXAMPLES::
|
|
509
|
+
|
|
510
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
511
|
+
sage: B = F.gen()
|
|
512
|
+
sage: (B+1).shift()
|
|
513
|
+
S[1] + S[2]
|
|
514
|
+
"""
|
|
515
|
+
A = self.parent()
|
|
516
|
+
return A._from_dict({A._indices(i + j): c for i, c in self})
|
|
517
|
+
|
|
518
|
+
def sum_of_coefficients(self):
|
|
519
|
+
"""
|
|
520
|
+
Return the sum of coefficients.
|
|
521
|
+
|
|
522
|
+
In the shifted basis, this is the evaluation at `x=0`.
|
|
523
|
+
|
|
524
|
+
EXAMPLES::
|
|
525
|
+
|
|
526
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
527
|
+
sage: B = F.basis()
|
|
528
|
+
sage: (B[2]*B[4]).sum_of_coefficients()
|
|
529
|
+
1
|
|
530
|
+
"""
|
|
531
|
+
R = self.parent().base_ring()
|
|
532
|
+
return R.sum(self._monomial_coefficients.values())
|
|
533
|
+
|
|
534
|
+
class Shifted(CombinatorialFreeModule, BindableClass):
|
|
535
|
+
r"""
|
|
536
|
+
The quantum-valued polynomial ring in the shifted basis.
|
|
537
|
+
|
|
538
|
+
The basis used here is given by `S[i] = \genfrac{[}{]}{0pt}{}{i+x}{i}_q` for `i \in \NN`.
|
|
539
|
+
|
|
540
|
+
Assuming `n_1 \leq n_2`, the product of two monomials `S[n_1] \cdot S[n_2]`
|
|
541
|
+
is given by the sum
|
|
542
|
+
|
|
543
|
+
.. MATH::
|
|
544
|
+
|
|
545
|
+
\sum_{k=0}^{n_1} (-1)^k q^{\binom{k}{2} - n_1 * n_2} \genfrac{[}{]}{0pt}{}{n_1}{k}_q \genfrac{[}{]}{0pt}{}{n_1+n_2-k}{n_1}_q S[n_1 + n_2 - k].
|
|
546
|
+
"""
|
|
547
|
+
def __init__(self, A):
|
|
548
|
+
r"""
|
|
549
|
+
Initialize ``self``.
|
|
550
|
+
|
|
551
|
+
EXAMPLES::
|
|
552
|
+
|
|
553
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S(); F
|
|
554
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
555
|
+
in the shifted basis
|
|
556
|
+
sage: TestSuite(F).run() # not tested
|
|
557
|
+
"""
|
|
558
|
+
CombinatorialFreeModule.__init__(self, A.base_ring(),
|
|
559
|
+
NonNegativeIntegers(),
|
|
560
|
+
category=A.Bases(),
|
|
561
|
+
prefix="S",
|
|
562
|
+
latex_prefix=r"\mathbb{S}")
|
|
563
|
+
|
|
564
|
+
def _an_element_(self):
|
|
565
|
+
"""
|
|
566
|
+
Return a small element of ``self``.
|
|
567
|
+
|
|
568
|
+
EXAMPLES::
|
|
569
|
+
|
|
570
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S()
|
|
571
|
+
sage: F.an_element()
|
|
572
|
+
2*S[0] + 4*S[2]
|
|
573
|
+
"""
|
|
574
|
+
NonNeg = self.basis().keys()
|
|
575
|
+
ring = self.base_ring()
|
|
576
|
+
return self.element_class(self, {NonNeg(0): ring(2),
|
|
577
|
+
NonNeg(2): ring(4)})
|
|
578
|
+
|
|
579
|
+
def _realization_name(self) -> str:
|
|
580
|
+
r"""
|
|
581
|
+
TESTS::
|
|
582
|
+
|
|
583
|
+
sage: F = QuantumValuedPolynomialRing(QQ).S()
|
|
584
|
+
sage: F._realization_name()
|
|
585
|
+
'shifted'
|
|
586
|
+
"""
|
|
587
|
+
return "shifted"
|
|
588
|
+
|
|
589
|
+
def product_on_basis(self, n1, n2):
|
|
590
|
+
r"""
|
|
591
|
+
Return the product of basis elements ``n1`` and ``n2``.
|
|
592
|
+
|
|
593
|
+
INPUT:
|
|
594
|
+
|
|
595
|
+
- ``n1``, ``n2`` -- integers
|
|
596
|
+
|
|
597
|
+
EXAMPLES::
|
|
598
|
+
|
|
599
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
600
|
+
sage: A.product_on_basis(0, 1)
|
|
601
|
+
S[1]
|
|
602
|
+
"""
|
|
603
|
+
i = ZZ(n1)
|
|
604
|
+
j = ZZ(n2)
|
|
605
|
+
if j < i:
|
|
606
|
+
j, i = i, j
|
|
607
|
+
q = self.q()
|
|
608
|
+
return self._from_dict({i + j - k: (-1)**k
|
|
609
|
+
* q_binomial(i, k)
|
|
610
|
+
* q_binomial(i + j - k, i)
|
|
611
|
+
* q**(binomial(k, 2) - i * j)
|
|
612
|
+
for k in range(i + 1)})
|
|
613
|
+
|
|
614
|
+
def _from_binomial_basis(self, i):
|
|
615
|
+
"""
|
|
616
|
+
Convert from the ``binomial(x,k)`` basis.
|
|
617
|
+
|
|
618
|
+
INPUT:
|
|
619
|
+
|
|
620
|
+
- ``i`` -- an integer
|
|
621
|
+
|
|
622
|
+
EXAMPLES::
|
|
623
|
+
|
|
624
|
+
sage: S = QuantumValuedPolynomialRing(ZZ).S()
|
|
625
|
+
sage: B = QuantumValuedPolynomialRing(ZZ).B()
|
|
626
|
+
sage: b = B.basis()
|
|
627
|
+
sage: S(b[3]+1) # indirect doctest
|
|
628
|
+
-(q^-6-1)*S[0] + (q^-8+q^-7+q^-6)*S[1]
|
|
629
|
+
- (q^-9+q^-8+q^-7)*S[2] + (q^-9)*S[3]
|
|
630
|
+
sage: B(_)
|
|
631
|
+
B[0] + B[3]
|
|
632
|
+
"""
|
|
633
|
+
i = ZZ(i)
|
|
634
|
+
R = self.base_ring()
|
|
635
|
+
q = self.q()
|
|
636
|
+
return self._from_dict({k: R((-1)**(i - k) * q_binomial(i, k))
|
|
637
|
+
* q**(-i**2 + binomial(i - k, 2))
|
|
638
|
+
for k in range(i + 1)})
|
|
639
|
+
|
|
640
|
+
def from_h_vector(self, hv):
|
|
641
|
+
"""
|
|
642
|
+
Convert from some `h`-vector.
|
|
643
|
+
|
|
644
|
+
EXAMPLES::
|
|
645
|
+
|
|
646
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S()
|
|
647
|
+
sage: B = A.basis()
|
|
648
|
+
sage: ex = B[2] + B[3]
|
|
649
|
+
sage: A.from_h_vector(ex.h_vector())
|
|
650
|
+
S[2] + S[3]
|
|
651
|
+
|
|
652
|
+
sage: q = A.base_ring().gen()
|
|
653
|
+
sage: ex = B[2] + q*B[3]
|
|
654
|
+
sage: A.from_h_vector(ex.h_vector())
|
|
655
|
+
S[2] + q*S[3]
|
|
656
|
+
"""
|
|
657
|
+
B = self.basis()
|
|
658
|
+
ring = self.base_ring()
|
|
659
|
+
q = self.q()
|
|
660
|
+
d = len(hv) - 1
|
|
661
|
+
m = matrix(ring, d + 1, d + 1,
|
|
662
|
+
[(-1)**(d - j) * q_binomial(d - i, d - j, q) *
|
|
663
|
+
q**(-d * (d - i) + binomial(d - j, 2))
|
|
664
|
+
for j in range(d + 1)
|
|
665
|
+
for i in range(d + 1)])
|
|
666
|
+
v = vector(ring, [hv[i] for i in range(d + 1)])
|
|
667
|
+
return sum(ring(c) * B[i] for i, c in enumerate(m * v))
|
|
668
|
+
|
|
669
|
+
def _element_constructor_(self, x):
|
|
670
|
+
r"""
|
|
671
|
+
Convert ``x`` into ``self``.
|
|
672
|
+
|
|
673
|
+
INPUT:
|
|
674
|
+
|
|
675
|
+
- ``x`` -- an element of the base ring or something convertible
|
|
676
|
+
|
|
677
|
+
EXAMPLES::
|
|
678
|
+
|
|
679
|
+
sage: R = QuantumValuedPolynomialRing(QQ).S()
|
|
680
|
+
sage: x = R.gen()
|
|
681
|
+
sage: R(3)
|
|
682
|
+
3*S[0]
|
|
683
|
+
sage: R(x)
|
|
684
|
+
S[1]
|
|
685
|
+
"""
|
|
686
|
+
P = parent(x)
|
|
687
|
+
if isinstance(P, QuantumValuedPolynomialRing.Shifted):
|
|
688
|
+
if P is self:
|
|
689
|
+
return x
|
|
690
|
+
if P is not self.base_ring():
|
|
691
|
+
return self.element_class(self, x.monomial_coefficients())
|
|
692
|
+
|
|
693
|
+
# ok, not a quantum-valued polynomial ring element
|
|
694
|
+
R = self.base_ring()
|
|
695
|
+
# coercion via base ring
|
|
696
|
+
x = R(x)
|
|
697
|
+
if not x:
|
|
698
|
+
return self.element_class(self, {})
|
|
699
|
+
return self.from_base_ring_from_one_basis(x)
|
|
700
|
+
|
|
701
|
+
def _coerce_map_from_(self, R) -> bool:
|
|
702
|
+
r"""
|
|
703
|
+
Return whether there is a coercion from ``R`` into ``self``.
|
|
704
|
+
|
|
705
|
+
INPUT:
|
|
706
|
+
|
|
707
|
+
- ``R`` -- a commutative ring
|
|
708
|
+
|
|
709
|
+
The things that coerce into ``self`` are
|
|
710
|
+
|
|
711
|
+
- Quantum-Valued Polynomial Rings over a base
|
|
712
|
+
with a coercion map into ``self.base_ring()``.
|
|
713
|
+
|
|
714
|
+
- Anything with a coercion into ``self.base_ring()``.
|
|
715
|
+
|
|
716
|
+
EXAMPLES::
|
|
717
|
+
|
|
718
|
+
sage: F = QuantumValuedPolynomialRing(GF(7)).S(); F
|
|
719
|
+
Quantum-Valued Polynomial Ring over Finite Field of size 7
|
|
720
|
+
in the shifted basis
|
|
721
|
+
|
|
722
|
+
Elements of the quantum-valued polynomial ring canonically coerce in::
|
|
723
|
+
|
|
724
|
+
sage: x = F.gen()
|
|
725
|
+
sage: F.coerce(x*x) # indirect doctest
|
|
726
|
+
(6*q^-1)*S[1] + (q^-1+1)*S[2]
|
|
727
|
+
|
|
728
|
+
Elements of the integers coerce in, since there is a coerce map
|
|
729
|
+
from `\ZZ` to GF(7)::
|
|
730
|
+
|
|
731
|
+
sage: F.coerce(1) # indirect doctest
|
|
732
|
+
S[0]
|
|
733
|
+
|
|
734
|
+
There is no coerce map from `\QQ` to `\GF{7}`::
|
|
735
|
+
|
|
736
|
+
sage: F.coerce(2/3) # indirect doctest
|
|
737
|
+
Traceback (most recent call last):
|
|
738
|
+
...
|
|
739
|
+
TypeError: no canonical coercion from Rational Field to
|
|
740
|
+
Quantum-Valued Polynomial Ring over Finite Field of size 7
|
|
741
|
+
in the shifted basis
|
|
742
|
+
|
|
743
|
+
Elements of the base ring coerce in::
|
|
744
|
+
|
|
745
|
+
sage: F.coerce(GF(7)(5))
|
|
746
|
+
5*S[0]
|
|
747
|
+
|
|
748
|
+
The quantum-valued polynomial ring over `\ZZ` on `x` coerces in, since
|
|
749
|
+
`\ZZ` coerces to `\GF{7}`::
|
|
750
|
+
|
|
751
|
+
sage: G = QuantumValuedPolynomialRing(ZZ).S()
|
|
752
|
+
sage: Gx = G.gen()
|
|
753
|
+
sage: z = F.coerce(Gx**2); z
|
|
754
|
+
-(q^-1)*S[1] + (q^-1+1)*S[2]
|
|
755
|
+
sage: z.parent() is F
|
|
756
|
+
True
|
|
757
|
+
|
|
758
|
+
However, `\GF{7}` does not coerce to `\ZZ`, so the shuffle
|
|
759
|
+
algebra over `\GF{7}` does not coerce to the one over `\ZZ`::
|
|
760
|
+
|
|
761
|
+
sage: G.coerce(x^3+x)
|
|
762
|
+
Traceback (most recent call last):
|
|
763
|
+
...
|
|
764
|
+
TypeError: no canonical coercion from Quantum-Valued Polynomial
|
|
765
|
+
Ring over Finite Field of size 7 in the shifted basis
|
|
766
|
+
to Quantum-Valued Polynomial Ring over Integer Ring
|
|
767
|
+
in the shifted basis
|
|
768
|
+
|
|
769
|
+
TESTS::
|
|
770
|
+
|
|
771
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
772
|
+
sage: G = QuantumValuedPolynomialRing(QQ).S()
|
|
773
|
+
sage: H = QuantumValuedPolynomialRing(ZZ).S()
|
|
774
|
+
sage: F._coerce_map_from_(G)
|
|
775
|
+
False
|
|
776
|
+
sage: G._coerce_map_from_(F)
|
|
777
|
+
True
|
|
778
|
+
sage: F._coerce_map_from_(H)
|
|
779
|
+
True
|
|
780
|
+
sage: F._coerce_map_from_(QQ)
|
|
781
|
+
False
|
|
782
|
+
sage: G._coerce_map_from_(QQ)
|
|
783
|
+
True
|
|
784
|
+
sage: F.has_coerce_map_from(PolynomialRing(ZZ, 'x'))
|
|
785
|
+
False
|
|
786
|
+
"""
|
|
787
|
+
# quantum-valued polynomial rings in the same variable
|
|
788
|
+
# over any base that coerces in:
|
|
789
|
+
if isinstance(R, QuantumValuedPolynomialRing.Shifted):
|
|
790
|
+
return self.base_ring().has_coerce_map_from(R.base_ring())
|
|
791
|
+
if isinstance(R, QuantumValuedPolynomialRing.Binomial):
|
|
792
|
+
return R.module_morphism(self._from_binomial_basis,
|
|
793
|
+
codomain=self)
|
|
794
|
+
return self.base_ring().has_coerce_map_from(R)
|
|
795
|
+
|
|
796
|
+
def _poly(self, i):
|
|
797
|
+
"""
|
|
798
|
+
Convert the basis element `S[i]` to a polynomial.
|
|
799
|
+
|
|
800
|
+
INPUT:
|
|
801
|
+
|
|
802
|
+
- ``i`` -- an integer
|
|
803
|
+
|
|
804
|
+
EXAMPLES::
|
|
805
|
+
|
|
806
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
807
|
+
sage: F._poly(4).factor() # needs sage.libs.singular
|
|
808
|
+
(1/(q^6 + 3*q^5 + 5*q^4 + 6*q^3 + 5*q^2 + 3*q + 1)) *
|
|
809
|
+
(q*x + 1) * (q^2*x + q + 1) * (q^3*x + q^2 + q + 1) *
|
|
810
|
+
(q^4*x + q^3 + q^2 + q + 1)
|
|
811
|
+
"""
|
|
812
|
+
return q_binomial_x(i, i)
|
|
813
|
+
|
|
814
|
+
class Element(CombinatorialFreeModule.Element):
|
|
815
|
+
def umbra(self):
|
|
816
|
+
"""
|
|
817
|
+
Return the Bernoulli umbra.
|
|
818
|
+
|
|
819
|
+
This is the derivative at `-1` of the shift by one.
|
|
820
|
+
|
|
821
|
+
This is related to Carlitz's `q`-Bernoulli numbers.
|
|
822
|
+
|
|
823
|
+
.. SEEALSO:: :meth:`derivative_at_minus_one`
|
|
824
|
+
|
|
825
|
+
EXAMPLES::
|
|
826
|
+
|
|
827
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
828
|
+
sage: B = F.gen()
|
|
829
|
+
sage: (B+1).umbra()
|
|
830
|
+
(q + 2)/(q + 1)
|
|
831
|
+
"""
|
|
832
|
+
return self.shift().derivative_at_minus_one()
|
|
833
|
+
|
|
834
|
+
def variable_shift(self, k=1):
|
|
835
|
+
r"""
|
|
836
|
+
Return the image by the shift on variables.
|
|
837
|
+
|
|
838
|
+
The shift is the substitution operator
|
|
839
|
+
|
|
840
|
+
.. MATH::
|
|
841
|
+
|
|
842
|
+
x \mapsto q x + 1.
|
|
843
|
+
|
|
844
|
+
INPUT:
|
|
845
|
+
|
|
846
|
+
- `k` -- integer (default: 1)
|
|
847
|
+
|
|
848
|
+
EXAMPLES::
|
|
849
|
+
|
|
850
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S()
|
|
851
|
+
sage: S = A.basis()
|
|
852
|
+
sage: S[5].variable_shift()
|
|
853
|
+
S[0] + q*S[1] + q^2*S[2] + q^3*S[3] + q^4*S[4] + q^5*S[5]
|
|
854
|
+
|
|
855
|
+
sage: S[5].variable_shift(-1)
|
|
856
|
+
-(q^-5)*S[4] + (q^-5)*S[5]
|
|
857
|
+
|
|
858
|
+
TESTS::
|
|
859
|
+
|
|
860
|
+
sage: S[5].variable_shift(0)
|
|
861
|
+
S[5]
|
|
862
|
+
sage: S[5].variable_shift().variable_shift(-1)
|
|
863
|
+
S[5]
|
|
864
|
+
sage: S[5].variable_shift(2).variable_shift(-2)
|
|
865
|
+
S[5]
|
|
866
|
+
sage: S[3].variable_shift(-2)
|
|
867
|
+
(q^-5)*S[1] - (q^-6+q^-5)*S[2] + (q^-6)*S[3]
|
|
868
|
+
"""
|
|
869
|
+
if k == 0:
|
|
870
|
+
return self
|
|
871
|
+
|
|
872
|
+
A = self.parent()
|
|
873
|
+
q = A.q()
|
|
874
|
+
|
|
875
|
+
def on_basis(n):
|
|
876
|
+
return {A._indices(j): q**(k * j)
|
|
877
|
+
* q_binomial(k + n - 1 - j, n - j)
|
|
878
|
+
for j in range(n + 1)}
|
|
879
|
+
|
|
880
|
+
mc = self._monomial_coefficients
|
|
881
|
+
ret = linear_combination((on_basis(index), coeff)
|
|
882
|
+
for index, coeff in mc.items())
|
|
883
|
+
return A.element_class(A, ret)
|
|
884
|
+
|
|
885
|
+
def derivative_at_minus_one(self):
|
|
886
|
+
"""
|
|
887
|
+
Return the 'derivative' at -1.
|
|
888
|
+
|
|
889
|
+
.. SEEALSO:: :meth:`umbra`
|
|
890
|
+
|
|
891
|
+
EXAMPLES::
|
|
892
|
+
|
|
893
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).S()
|
|
894
|
+
sage: B = F.gen()
|
|
895
|
+
sage: (B+1).derivative_at_minus_one()
|
|
896
|
+
1
|
|
897
|
+
"""
|
|
898
|
+
ring = q_int(1).parent()
|
|
899
|
+
return ring.sum(c / q_int(i) for i, c in self if i > 0)
|
|
900
|
+
|
|
901
|
+
def h_vector(self):
|
|
902
|
+
"""
|
|
903
|
+
Return the numerator of the generating series of values.
|
|
904
|
+
|
|
905
|
+
If ``self`` is an Ehrhart polynomial, this is the h-vector.
|
|
906
|
+
|
|
907
|
+
.. SEEALSO:: :meth:`h_polynomial`, :meth:`fraction`
|
|
908
|
+
|
|
909
|
+
EXAMPLES::
|
|
910
|
+
|
|
911
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S()
|
|
912
|
+
sage: ex = A.basis()[4]
|
|
913
|
+
sage: ex.h_vector()
|
|
914
|
+
(0, 0, 0, 0, 1)
|
|
915
|
+
|
|
916
|
+
sage: q = polygen(QQ,'q')
|
|
917
|
+
sage: x = polygen(q.parent(),'x')
|
|
918
|
+
sage: ex = A.from_polynomial((1+q*x)**3)
|
|
919
|
+
sage: ex.h_vector()
|
|
920
|
+
(0, q^3, 2*q + 2*q^2, 1)
|
|
921
|
+
"""
|
|
922
|
+
d = max(self.support())
|
|
923
|
+
ring = self.parent().base_ring()
|
|
924
|
+
q = self.parent().q()
|
|
925
|
+
|
|
926
|
+
def fn(j, i):
|
|
927
|
+
return ((-1)**(d - j) *
|
|
928
|
+
q**(binomial(d - j + i + 1, 2) -
|
|
929
|
+
binomial(i + 1, 2)) *
|
|
930
|
+
q_binomial(d - i, d - j))
|
|
931
|
+
m = matrix(ring, d + 1, d + 1, fn)
|
|
932
|
+
v = vector(ring, [self.coefficient(i) for i in range(d + 1)])
|
|
933
|
+
return m * v
|
|
934
|
+
|
|
935
|
+
def h_polynomial(self):
|
|
936
|
+
"""
|
|
937
|
+
Return the `h`-vector as a polynomial.
|
|
938
|
+
|
|
939
|
+
.. SEEALSO:: :meth:`h_vector`, :meth:`fraction`
|
|
940
|
+
|
|
941
|
+
EXAMPLES::
|
|
942
|
+
|
|
943
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).S()
|
|
944
|
+
sage: q = polygen(ZZ,'q')
|
|
945
|
+
sage: x = polygen(q.parent(),'x')
|
|
946
|
+
sage: ex = A.from_polynomial((1+q*x)**3)
|
|
947
|
+
sage: ex.h_polynomial()
|
|
948
|
+
z^3 + (2*q + 2*q^2)*z^2 + q^3*z
|
|
949
|
+
"""
|
|
950
|
+
ring = PolynomialRing(self.parent().base_ring(), 'z')
|
|
951
|
+
return ring(list(self.h_vector()))
|
|
952
|
+
|
|
953
|
+
def fraction(self):
|
|
954
|
+
"""
|
|
955
|
+
Return the generating series of values as a fraction.
|
|
956
|
+
|
|
957
|
+
.. SEEALSO:: :meth:`h_vector`, :meth:`h_polynomial`
|
|
958
|
+
|
|
959
|
+
EXAMPLES::
|
|
960
|
+
|
|
961
|
+
sage: A = QuantumValuedPolynomialRing(QQ).S()
|
|
962
|
+
sage: ex = A.basis()[4]
|
|
963
|
+
sage: ex.fraction().factor() # needs sage.libs.singular
|
|
964
|
+
(-1) * (t - 1)^-1 * (q*t - 1)^-1 * (q^2*t - 1)^-1 * (q^3*t - 1)^-1 * (q^4*t - 1)^-1
|
|
965
|
+
|
|
966
|
+
sage: q = polygen(QQ,'q')
|
|
967
|
+
sage: x = polygen(q.parent(), 'x')
|
|
968
|
+
sage: ex = A.from_polynomial((1+q*x)**3)
|
|
969
|
+
sage: ex.fraction().factor() # needs sage.libs.singular
|
|
970
|
+
(t - 1)^-1 * (q*t - 1)^-1 * (q^2*t - 1)^-1 * (q^3*t - 1)^-1 * (q^3*t^2 + 2*q^2*t + 2*q*t + 1)
|
|
971
|
+
sage: ex.fraction().numerator() # needs sage.libs.singular
|
|
972
|
+
q^3*t^2 + 2*q^2*t + 2*q*t + 1
|
|
973
|
+
"""
|
|
974
|
+
v = self.h_vector()
|
|
975
|
+
d = len(v)
|
|
976
|
+
R = PolynomialRing(QQ, 'q,t')
|
|
977
|
+
frac_R = R.fraction_field()
|
|
978
|
+
q, t = R.gens()
|
|
979
|
+
denom = R.prod(1 - q**i * t for i in range(d))
|
|
980
|
+
numer = sum(frac_R(v[i]) * t**(d - 1 - i) for i in range(d))
|
|
981
|
+
return numer / denom
|
|
982
|
+
|
|
983
|
+
S = Shifted
|
|
984
|
+
|
|
985
|
+
# ===== Another basis for the same algebra =====
|
|
986
|
+
|
|
987
|
+
class Binomial(CombinatorialFreeModule, BindableClass):
|
|
988
|
+
r"""
|
|
989
|
+
The quantum-valued polynomial ring in the binomial basis.
|
|
990
|
+
|
|
991
|
+
The basis used here is given by `B[i] = \genfrac{[}{]}{0pt}{}{x}{i}_q` for `i \in \NN`.
|
|
992
|
+
|
|
993
|
+
Assuming `n_1 \leq n_2`, the product of two monomials `B[n_1] \cdot B[n_2]`
|
|
994
|
+
is given by the sum
|
|
995
|
+
|
|
996
|
+
.. MATH::
|
|
997
|
+
|
|
998
|
+
\sum_{k=0}^{n_1} q^{(k-n_1)(k-n_2)} \genfrac{[}{]}{0pt}{}{n_1}{k}_q \genfrac{[}{]}{0pt}{}{n_1+n_2-k}{n_1}_q B[n_1 + n_2 - k].
|
|
999
|
+
"""
|
|
1000
|
+
def __init__(self, A) -> None:
|
|
1001
|
+
r"""
|
|
1002
|
+
Initialize ``self``.
|
|
1003
|
+
|
|
1004
|
+
EXAMPLES::
|
|
1005
|
+
|
|
1006
|
+
sage: F = QuantumValuedPolynomialRing(QQ).B(); F
|
|
1007
|
+
Quantum-Valued Polynomial Ring over Rational Field
|
|
1008
|
+
in the binomial basis
|
|
1009
|
+
sage: TestSuite(F).run() # not tested
|
|
1010
|
+
"""
|
|
1011
|
+
CombinatorialFreeModule.__init__(self, A.base_ring(),
|
|
1012
|
+
NonNegativeIntegers(),
|
|
1013
|
+
category=A.Bases(),
|
|
1014
|
+
prefix="B",
|
|
1015
|
+
latex_prefix=r"\mathbb{B}")
|
|
1016
|
+
|
|
1017
|
+
def _realization_name(self) -> str:
|
|
1018
|
+
r"""
|
|
1019
|
+
TESTS::
|
|
1020
|
+
|
|
1021
|
+
sage: F = QuantumValuedPolynomialRing(QQ).B()
|
|
1022
|
+
sage: F._realization_name()
|
|
1023
|
+
'binomial'
|
|
1024
|
+
"""
|
|
1025
|
+
return "binomial"
|
|
1026
|
+
|
|
1027
|
+
def product_on_basis(self, n1, n2):
|
|
1028
|
+
r"""
|
|
1029
|
+
Return the product of basis elements ``n1`` and ``n2``.
|
|
1030
|
+
|
|
1031
|
+
INPUT:
|
|
1032
|
+
|
|
1033
|
+
- ``n1``, ``n2`` -- integers
|
|
1034
|
+
|
|
1035
|
+
The formula is taken from Theorem 3.4 in [HaHo2017]_.
|
|
1036
|
+
|
|
1037
|
+
EXAMPLES::
|
|
1038
|
+
|
|
1039
|
+
sage: A = QuantumValuedPolynomialRing(QQ).B()
|
|
1040
|
+
sage: A.product_on_basis(0, 1)
|
|
1041
|
+
B[1]
|
|
1042
|
+
"""
|
|
1043
|
+
i = ZZ(n1)
|
|
1044
|
+
j = ZZ(n2)
|
|
1045
|
+
if j < i:
|
|
1046
|
+
j, i = i, j
|
|
1047
|
+
|
|
1048
|
+
q = self.q()
|
|
1049
|
+
return self._from_dict({i + j - k:
|
|
1050
|
+
q_binomial(i, k)
|
|
1051
|
+
* q_binomial(i + j - k, i)
|
|
1052
|
+
* q**((k - i) * (k - j))
|
|
1053
|
+
for k in range(i + 1)})
|
|
1054
|
+
|
|
1055
|
+
def _from_shifted_basis(self, i):
|
|
1056
|
+
"""
|
|
1057
|
+
Convert from the shifted binomial(x+k,k) basis.
|
|
1058
|
+
|
|
1059
|
+
INPUT:
|
|
1060
|
+
|
|
1061
|
+
- ``i`` -- an integer
|
|
1062
|
+
|
|
1063
|
+
EXAMPLES::
|
|
1064
|
+
|
|
1065
|
+
sage: S = QuantumValuedPolynomialRing(ZZ).S()
|
|
1066
|
+
sage: B = QuantumValuedPolynomialRing(ZZ).B()
|
|
1067
|
+
sage: s = S.basis()
|
|
1068
|
+
sage: B(s[3]+1) # indirect doctest
|
|
1069
|
+
2*B[0] + (q+q^2+q^3)*B[1] + (q^4+q^5+q^6)*B[2] + q^9*B[3]
|
|
1070
|
+
sage: S(_)
|
|
1071
|
+
S[0] + S[3]
|
|
1072
|
+
"""
|
|
1073
|
+
i = ZZ(i)
|
|
1074
|
+
R = self.base_ring()
|
|
1075
|
+
q = self.q()
|
|
1076
|
+
return self._from_dict({k: R(q_binomial(i, k))
|
|
1077
|
+
* q**(k**2)
|
|
1078
|
+
for k in range(i + 1)})
|
|
1079
|
+
|
|
1080
|
+
def _element_constructor_(self, x):
|
|
1081
|
+
r"""
|
|
1082
|
+
Convert ``x`` into ``self``.
|
|
1083
|
+
|
|
1084
|
+
EXAMPLES::
|
|
1085
|
+
|
|
1086
|
+
sage: R = QuantumValuedPolynomialRing(QQ).B()
|
|
1087
|
+
sage: x = R.gen()
|
|
1088
|
+
sage: R(3)
|
|
1089
|
+
3*B[0]
|
|
1090
|
+
sage: R(x)
|
|
1091
|
+
B[1]
|
|
1092
|
+
"""
|
|
1093
|
+
P = x.parent()
|
|
1094
|
+
if isinstance(P, QuantumValuedPolynomialRing.Binomial):
|
|
1095
|
+
if P is self:
|
|
1096
|
+
return x
|
|
1097
|
+
if P is not self.base_ring():
|
|
1098
|
+
return self.element_class(self, x.monomial_coefficients())
|
|
1099
|
+
|
|
1100
|
+
# ok, not a quantum-valued polynomial ring element
|
|
1101
|
+
R = self.base_ring()
|
|
1102
|
+
# coercion via base ring
|
|
1103
|
+
x = R(x)
|
|
1104
|
+
if not x:
|
|
1105
|
+
return self.element_class(self, {})
|
|
1106
|
+
return self.from_base_ring_from_one_basis(x)
|
|
1107
|
+
|
|
1108
|
+
def _coerce_map_from_(self, R):
|
|
1109
|
+
r"""
|
|
1110
|
+
Return whether there is a coercion from ``R`` into ``self``.
|
|
1111
|
+
|
|
1112
|
+
INPUT:
|
|
1113
|
+
|
|
1114
|
+
- ``R`` -- a commutative ring
|
|
1115
|
+
|
|
1116
|
+
The things that coerce into ``self`` are
|
|
1117
|
+
|
|
1118
|
+
- Quantum-Valued Polynomial Rings over a base
|
|
1119
|
+
with a coercion map into ``self.base_ring()``.
|
|
1120
|
+
|
|
1121
|
+
- Anything with a coercion into ``self.base_ring()``.
|
|
1122
|
+
|
|
1123
|
+
EXAMPLES::
|
|
1124
|
+
|
|
1125
|
+
sage: F = QuantumValuedPolynomialRing(GF(7)).B(); F
|
|
1126
|
+
Quantum-Valued Polynomial Ring over Finite Field of size 7
|
|
1127
|
+
in the binomial basis
|
|
1128
|
+
|
|
1129
|
+
Elements of the integer-valued polynomial ring canonically coerce
|
|
1130
|
+
in::
|
|
1131
|
+
|
|
1132
|
+
sage: x = F.gen()
|
|
1133
|
+
sage: F.coerce(x*x) # indirect doctest
|
|
1134
|
+
B[1] + (q+q^2)*B[2]
|
|
1135
|
+
|
|
1136
|
+
Elements of the integers coerce in, since there is a coerce map
|
|
1137
|
+
from `\ZZ` to `\GF(7)`::
|
|
1138
|
+
|
|
1139
|
+
sage: F.coerce(1) # indirect doctest
|
|
1140
|
+
B[0]
|
|
1141
|
+
|
|
1142
|
+
There is no coerce map from `\QQ` to `\GF{7}`::
|
|
1143
|
+
|
|
1144
|
+
sage: F.coerce(2/3) # indirect doctest
|
|
1145
|
+
Traceback (most recent call last):
|
|
1146
|
+
...
|
|
1147
|
+
TypeError: no canonical coercion from Rational Field to
|
|
1148
|
+
Quantum-Valued Polynomial Ring over Finite Field of size 7
|
|
1149
|
+
in the binomial basis
|
|
1150
|
+
|
|
1151
|
+
Elements of the base ring coerce in::
|
|
1152
|
+
|
|
1153
|
+
sage: F.coerce(GF(7)(5))
|
|
1154
|
+
5*B[0]
|
|
1155
|
+
|
|
1156
|
+
The integer-valued polynomial ring over `\ZZ` on `x` coerces in,
|
|
1157
|
+
since `\ZZ` coerces to `\GF{7}`::
|
|
1158
|
+
|
|
1159
|
+
sage: G = QuantumValuedPolynomialRing(ZZ).B()
|
|
1160
|
+
sage: Gx = G.gen()
|
|
1161
|
+
sage: z = F.coerce(Gx**2); z
|
|
1162
|
+
B[1] + (q+q^2)*B[2]
|
|
1163
|
+
sage: z.parent() is F
|
|
1164
|
+
True
|
|
1165
|
+
|
|
1166
|
+
However, `\GF{7}` does not coerce to `\ZZ`, so the
|
|
1167
|
+
integer-valued polynomial algebra over `\GF{7}` does not
|
|
1168
|
+
coerce to the one over `\ZZ`::
|
|
1169
|
+
|
|
1170
|
+
sage: G.coerce(x^3+x)
|
|
1171
|
+
Traceback (most recent call last):
|
|
1172
|
+
...
|
|
1173
|
+
TypeError: no canonical coercion from
|
|
1174
|
+
Quantum-Valued Polynomial Ring over Finite Field of size 7
|
|
1175
|
+
in the binomial basis to Quantum-Valued Polynomial Ring
|
|
1176
|
+
over Integer Ring in the binomial basis
|
|
1177
|
+
|
|
1178
|
+
TESTS::
|
|
1179
|
+
|
|
1180
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).B()
|
|
1181
|
+
sage: G = QuantumValuedPolynomialRing(QQ).B()
|
|
1182
|
+
sage: H = QuantumValuedPolynomialRing(ZZ).B()
|
|
1183
|
+
sage: F._coerce_map_from_(G)
|
|
1184
|
+
False
|
|
1185
|
+
sage: G._coerce_map_from_(F)
|
|
1186
|
+
True
|
|
1187
|
+
sage: F._coerce_map_from_(H)
|
|
1188
|
+
True
|
|
1189
|
+
sage: F._coerce_map_from_(QQ)
|
|
1190
|
+
False
|
|
1191
|
+
sage: G._coerce_map_from_(QQ)
|
|
1192
|
+
True
|
|
1193
|
+
sage: F.has_coerce_map_from(PolynomialRing(ZZ,'x'))
|
|
1194
|
+
False
|
|
1195
|
+
"""
|
|
1196
|
+
# quantum-valued polynomial rings over any base
|
|
1197
|
+
# that coerces in:
|
|
1198
|
+
if isinstance(R, QuantumValuedPolynomialRing.Binomial):
|
|
1199
|
+
return self.base_ring().has_coerce_map_from(R.base_ring())
|
|
1200
|
+
if isinstance(R, QuantumValuedPolynomialRing.Shifted):
|
|
1201
|
+
return R.module_morphism(self._from_shifted_basis,
|
|
1202
|
+
codomain=self)
|
|
1203
|
+
return self.base_ring().has_coerce_map_from(R)
|
|
1204
|
+
|
|
1205
|
+
def _poly(self, i):
|
|
1206
|
+
"""
|
|
1207
|
+
Convert the basis element `B[i]` to a polynomial.
|
|
1208
|
+
|
|
1209
|
+
INPUT:
|
|
1210
|
+
|
|
1211
|
+
- ``i`` -- an integer
|
|
1212
|
+
|
|
1213
|
+
EXAMPLES::
|
|
1214
|
+
|
|
1215
|
+
sage: F = QuantumValuedPolynomialRing(ZZ).B()
|
|
1216
|
+
sage: F._poly(4).factor() # needs sage.libs.singular
|
|
1217
|
+
(1/(q^12 + 3*q^11 + 5*q^10 + 6*q^9 + 5*q^8 + 3*q^7 + q^6)) *
|
|
1218
|
+
(x - 1) * x * (x - q - 1) * (x - q^2 - q - 1)
|
|
1219
|
+
"""
|
|
1220
|
+
return q_binomial_x(0, i)
|
|
1221
|
+
|
|
1222
|
+
class Element(CombinatorialFreeModule.Element):
|
|
1223
|
+
def variable_shift(self, k=1):
|
|
1224
|
+
r"""
|
|
1225
|
+
Return the image by the shift of variables.
|
|
1226
|
+
|
|
1227
|
+
On polynomials, the action for `k=1` is the shift
|
|
1228
|
+
on variables `x \mapsto 1 + qx`.
|
|
1229
|
+
|
|
1230
|
+
This implementation follows formula (5.5) in [HaHo2017]_.
|
|
1231
|
+
|
|
1232
|
+
INPUT:
|
|
1233
|
+
|
|
1234
|
+
- `k` -- nonnegative integer (default: 1)
|
|
1235
|
+
|
|
1236
|
+
EXAMPLES::
|
|
1237
|
+
|
|
1238
|
+
sage: A = QuantumValuedPolynomialRing(ZZ).B()
|
|
1239
|
+
sage: B = A.basis()
|
|
1240
|
+
sage: B[5].variable_shift()
|
|
1241
|
+
B[4] + q^5*B[5]
|
|
1242
|
+
|
|
1243
|
+
TESTS::
|
|
1244
|
+
|
|
1245
|
+
sage: B[5].variable_shift(0)
|
|
1246
|
+
B[5]
|
|
1247
|
+
"""
|
|
1248
|
+
if k == 0:
|
|
1249
|
+
return self
|
|
1250
|
+
|
|
1251
|
+
A = self.parent()
|
|
1252
|
+
q = A.q()
|
|
1253
|
+
|
|
1254
|
+
def on_basis(n):
|
|
1255
|
+
return {A._indices(j): q**((k + j - n) * j)
|
|
1256
|
+
* q_binomial(k, n - j)
|
|
1257
|
+
for j in range(n + 1)}
|
|
1258
|
+
|
|
1259
|
+
mc = self._monomial_coefficients
|
|
1260
|
+
ret = linear_combination((on_basis(index), coeff)
|
|
1261
|
+
for index, coeff in mc.items())
|
|
1262
|
+
return A.element_class(A, ret)
|
|
1263
|
+
|
|
1264
|
+
B = Binomial
|