passagemath-modules 10.6.31rc3__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.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -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-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,544 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Orthogonal Linear Groups
|
|
4
|
+
|
|
5
|
+
The general orthogonal group `GO(n,R)` consists of all `n \times n`
|
|
6
|
+
matrices over the ring `R` preserving an `n`-ary positive definite
|
|
7
|
+
quadratic form. In cases where there are multiple non-isomorphic
|
|
8
|
+
quadratic forms, additional data needs to be specified to
|
|
9
|
+
disambiguate. The special orthogonal group is the normal subgroup of
|
|
10
|
+
matrices of determinant one.
|
|
11
|
+
|
|
12
|
+
In characteristics different from 2, a quadratic form is equivalent to
|
|
13
|
+
a bilinear symmetric form. Furthermore, over the real numbers a
|
|
14
|
+
positive definite quadratic form is equivalent to the diagonal
|
|
15
|
+
quadratic form, equivalent to the bilinear symmetric form defined by
|
|
16
|
+
the identity matrix. Hence, the orthogonal group `GO(n,\RR)` is the
|
|
17
|
+
group of orthogonal matrices in the usual sense.
|
|
18
|
+
|
|
19
|
+
In the case of a finite field and if the degree `n` is even, then
|
|
20
|
+
there are two inequivalent quadratic forms and a third parameter ``e``
|
|
21
|
+
must be specified to disambiguate these two possibilities. The index
|
|
22
|
+
of `SO(e,d,q)` in `GO(e,d,q)` is `2` if `q` is odd, but `SO(e,d,q) =
|
|
23
|
+
GO(e,d,q)` if `q` is even.)
|
|
24
|
+
|
|
25
|
+
.. WARNING::
|
|
26
|
+
|
|
27
|
+
GAP and Sage use different notations:
|
|
28
|
+
|
|
29
|
+
* GAP notation: The optional ``e`` comes first, that is, ``GO([e,]
|
|
30
|
+
d, q)``, ``SO([e,] d, q)``.
|
|
31
|
+
|
|
32
|
+
* Sage notation: The optional ``e`` comes last, the standard Python
|
|
33
|
+
convention: ``GO(d, GF(q), e=0)``, ``SO(d, GF(q), e=0)``.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: GO(3,7)
|
|
38
|
+
General Orthogonal Group of degree 3 over Finite Field of size 7
|
|
39
|
+
|
|
40
|
+
sage: G = SO(4, GF(7), 1); G
|
|
41
|
+
Special Orthogonal Group of degree 4 and form parameter 1
|
|
42
|
+
over Finite Field of size 7
|
|
43
|
+
|
|
44
|
+
sage: # needs sage.libs.gap
|
|
45
|
+
sage: G.random_element() # random
|
|
46
|
+
[4 3 5 2]
|
|
47
|
+
[6 6 4 0]
|
|
48
|
+
[0 4 6 0]
|
|
49
|
+
[4 4 5 1]
|
|
50
|
+
|
|
51
|
+
TESTS::
|
|
52
|
+
|
|
53
|
+
sage: G = GO(3, GF(5))
|
|
54
|
+
sage: latex(G)
|
|
55
|
+
\text{GO}_{3}(\Bold{F}_{5})
|
|
56
|
+
sage: G = SO(3, GF(5))
|
|
57
|
+
sage: latex(G)
|
|
58
|
+
\text{SO}_{3}(\Bold{F}_{5})
|
|
59
|
+
sage: G = SO(4, GF(5), 1)
|
|
60
|
+
sage: latex(G)
|
|
61
|
+
\text{SO}_{4}(\Bold{F}_{5}, +)
|
|
62
|
+
|
|
63
|
+
AUTHORS:
|
|
64
|
+
|
|
65
|
+
- David Joyner (2006-03): initial version
|
|
66
|
+
|
|
67
|
+
- David Joyner (2006-05): added examples, _latex_, __str__, gens,
|
|
68
|
+
as_matrix_group
|
|
69
|
+
|
|
70
|
+
- William Stein (2006-12-09): rewrite
|
|
71
|
+
|
|
72
|
+
- Volker Braun (2013-1) port to new Parent, libGAP, extreme refactoring.
|
|
73
|
+
|
|
74
|
+
- Sebastian Oehms (2018-8) add
|
|
75
|
+
:meth:`~sage.groups.matrix_gps.orthogonal.OrthogonalMatrixGroup_generic.invariant_form`
|
|
76
|
+
(as alias), ``_OG``, option for user defined invariant bilinear form,
|
|
77
|
+
and bug-fix in cmd-string for calling GAP (see :issue:`26028`)
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
# ****************************************************************************
|
|
81
|
+
# Copyright (C) 2006 David Joyner and William Stein
|
|
82
|
+
# 2009 Mike Hansen
|
|
83
|
+
# 2013 Volker Braun <vbraun.name@gmail.com>
|
|
84
|
+
# 2018 Sebastian Oehms
|
|
85
|
+
# 2018 Travis Scrimshaw
|
|
86
|
+
# 2023 Matthias Koeppe
|
|
87
|
+
#
|
|
88
|
+
# This program is free software: you can redistribute it and/or modify
|
|
89
|
+
# it under the terms of the GNU General Public License as published by
|
|
90
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
91
|
+
# (at your option) any later version.
|
|
92
|
+
# https://www.gnu.org/licenses/
|
|
93
|
+
# ****************************************************************************
|
|
94
|
+
|
|
95
|
+
from sage.rings.integer_ring import ZZ
|
|
96
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
97
|
+
from sage.misc.latex import latex
|
|
98
|
+
from sage.misc.cachefunc import cached_method
|
|
99
|
+
from sage.groups.matrix_gps.named_group import (
|
|
100
|
+
normalize_args_vectorspace, normalize_args_invariant_form,
|
|
101
|
+
NamedMatrixGroup_generic)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def normalize_args_e(degree, ring, e):
|
|
105
|
+
"""
|
|
106
|
+
Normalize the arguments that relate the choice of quadratic form
|
|
107
|
+
for special orthogonal groups over finite fields.
|
|
108
|
+
|
|
109
|
+
INPUT:
|
|
110
|
+
|
|
111
|
+
- ``degree`` -- integer; the degree of the affine group, that is,
|
|
112
|
+
the dimension of the affine space the group is acting on
|
|
113
|
+
|
|
114
|
+
- ``ring`` -- a ring; the base ring of the affine space
|
|
115
|
+
|
|
116
|
+
- ``e`` -- integer; one of `+1`, `0`, `-1`. Only relevant for
|
|
117
|
+
finite fields and if the degree is even. A parameter that
|
|
118
|
+
distinguishes inequivalent invariant forms.
|
|
119
|
+
|
|
120
|
+
OUTPUT: the integer ``e`` with values required by GAP
|
|
121
|
+
|
|
122
|
+
TESTS::
|
|
123
|
+
|
|
124
|
+
sage: from sage.groups.matrix_gps.orthogonal import normalize_args_e
|
|
125
|
+
sage: normalize_args_e(2, GF(3), +1)
|
|
126
|
+
1
|
|
127
|
+
sage: normalize_args_e(3, GF(3), 0)
|
|
128
|
+
0
|
|
129
|
+
sage: normalize_args_e(3, GF(3), +1)
|
|
130
|
+
0
|
|
131
|
+
sage: normalize_args_e(2, GF(3), 0)
|
|
132
|
+
Traceback (most recent call last):
|
|
133
|
+
...
|
|
134
|
+
ValueError: must have e=-1 or e=1 for even degree
|
|
135
|
+
"""
|
|
136
|
+
if isinstance(ring, FiniteField) and degree % 2 == 0:
|
|
137
|
+
if e not in (-1, +1):
|
|
138
|
+
raise ValueError('must have e=-1 or e=1 for even degree')
|
|
139
|
+
else:
|
|
140
|
+
e = 0
|
|
141
|
+
return ZZ(e)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
###############################################################################
|
|
145
|
+
# Orthogonal Group: common Code for both GO and SO
|
|
146
|
+
###############################################################################
|
|
147
|
+
|
|
148
|
+
def _OG(n, R, special, e=0, var='a', invariant_form=None):
|
|
149
|
+
r"""
|
|
150
|
+
This function is commonly used by the functions GO and SO to avoid
|
|
151
|
+
unnecessarily duplicated code. For documentation and examples see
|
|
152
|
+
the individual functions.
|
|
153
|
+
|
|
154
|
+
TESTS:
|
|
155
|
+
|
|
156
|
+
Check that :issue:`26028` is fixed::
|
|
157
|
+
|
|
158
|
+
sage: GO(3,25).order() # indirect doctest # needs sage.libs.gap sage.rings.finite_rings
|
|
159
|
+
31200
|
|
160
|
+
|
|
161
|
+
Check that :issue:`28054` is fixed::
|
|
162
|
+
|
|
163
|
+
sage: G = SO(2, GF(3), -1)
|
|
164
|
+
sage: m = G.invariant_form()
|
|
165
|
+
sage: G2 = SO(2, GF(3), 1, invariant_form=m)
|
|
166
|
+
Traceback (most recent call last):
|
|
167
|
+
...
|
|
168
|
+
NotImplementedError: invariant_form for finite groups is fixed by GAP
|
|
169
|
+
"""
|
|
170
|
+
prefix = 'General'
|
|
171
|
+
ltx_prefix = 'G'
|
|
172
|
+
if special:
|
|
173
|
+
prefix = 'Special'
|
|
174
|
+
ltx_prefix = 'S'
|
|
175
|
+
|
|
176
|
+
degree, ring = normalize_args_vectorspace(n, R, var=var)
|
|
177
|
+
e = normalize_args_e(degree, ring, e)
|
|
178
|
+
|
|
179
|
+
if invariant_form is not None:
|
|
180
|
+
if isinstance(ring, FiniteField):
|
|
181
|
+
raise NotImplementedError("invariant_form for finite groups is fixed by GAP")
|
|
182
|
+
|
|
183
|
+
if e == 0:
|
|
184
|
+
if invariant_form is not None:
|
|
185
|
+
invariant_form = normalize_args_invariant_form(ring, degree, invariant_form)
|
|
186
|
+
if not invariant_form.is_symmetric():
|
|
187
|
+
raise ValueError("invariant_form must be symmetric")
|
|
188
|
+
|
|
189
|
+
try:
|
|
190
|
+
if invariant_form.is_positive_definite():
|
|
191
|
+
inserted_text = "with respect to positive definite symmetric form"
|
|
192
|
+
else:
|
|
193
|
+
inserted_text = "with respect to non positive definite symmetric form"
|
|
194
|
+
except ValueError:
|
|
195
|
+
inserted_text = "with respect to symmetric form"
|
|
196
|
+
|
|
197
|
+
name = '{0} Orthogonal Group of degree {1} over {2} {3}\n{4}'.format(
|
|
198
|
+
prefix, degree, ring, inserted_text, invariant_form)
|
|
199
|
+
ltx = r'\text{{{0}O}}_{{{1}}}({2})\text{{ {3} }}{4}'.format(
|
|
200
|
+
ltx_prefix, degree, latex(ring), inserted_text,
|
|
201
|
+
latex(invariant_form))
|
|
202
|
+
else:
|
|
203
|
+
name = '{0} Orthogonal Group of degree {1} over {2}'.format(prefix, degree, ring)
|
|
204
|
+
ltx = r'\text{{{0}O}}_{{{1}}}({2})'.format(ltx_prefix, degree, latex(ring))
|
|
205
|
+
else:
|
|
206
|
+
name = '{0} Orthogonal Group of degree {1} and form parameter {2} over {3}'.format(prefix, degree, e, ring)
|
|
207
|
+
ltx = r'\text{{{0}O}}_{{{1}}}({2}, {3})'.format(ltx_prefix, degree,
|
|
208
|
+
latex(ring),
|
|
209
|
+
'+' if e == 1 else '-')
|
|
210
|
+
|
|
211
|
+
if isinstance(ring, FiniteField):
|
|
212
|
+
try:
|
|
213
|
+
from .orthogonal_gap import OrthogonalMatrixGroup_gap
|
|
214
|
+
except ImportError:
|
|
215
|
+
pass
|
|
216
|
+
else:
|
|
217
|
+
cmd = '{0}O({1}, {2}, {3})'.format(ltx_prefix, e, degree, ring.order())
|
|
218
|
+
return OrthogonalMatrixGroup_gap(degree, ring, False, name, ltx, cmd)
|
|
219
|
+
|
|
220
|
+
return OrthogonalMatrixGroup_generic(degree, ring, False, name, ltx, invariant_form=invariant_form)
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
########################################################################
|
|
224
|
+
# General Orthogonal Group
|
|
225
|
+
########################################################################
|
|
226
|
+
|
|
227
|
+
def GO(n, R, e=0, var='a', invariant_form=None):
|
|
228
|
+
r"""
|
|
229
|
+
Return the general orthogonal group.
|
|
230
|
+
|
|
231
|
+
The general orthogonal group `GO(n,R)` consists of all `n \times n`
|
|
232
|
+
matrices over the ring `R` preserving an `n`-ary positive definite
|
|
233
|
+
quadratic form. In cases where there are multiple non-isomorphic
|
|
234
|
+
quadratic forms, additional data needs to be specified to
|
|
235
|
+
disambiguate.
|
|
236
|
+
|
|
237
|
+
In the case of a finite field and if the degree `n` is even, then
|
|
238
|
+
there are two inequivalent quadratic forms and a third parameter
|
|
239
|
+
``e`` must be specified to disambiguate these two possibilities.
|
|
240
|
+
|
|
241
|
+
.. NOTE::
|
|
242
|
+
|
|
243
|
+
This group is also available via ``groups.matrix.GO()``.
|
|
244
|
+
|
|
245
|
+
INPUT:
|
|
246
|
+
|
|
247
|
+
- ``n`` -- integer; the degree
|
|
248
|
+
|
|
249
|
+
- ``R`` -- ring or an integer; if an integer is specified, the
|
|
250
|
+
corresponding finite field is used
|
|
251
|
+
|
|
252
|
+
- ``e`` -- ``+1`` or ``-1``, and ignored by default; only relevant
|
|
253
|
+
for finite fields and if the degree is even: a parameter that
|
|
254
|
+
distinguishes inequivalent invariant forms
|
|
255
|
+
|
|
256
|
+
- ``var`` -- (default: ``'a'``) variable used to
|
|
257
|
+
represent generator of the finite field, if needed
|
|
258
|
+
|
|
259
|
+
- ``invariant_form`` -- (optional) instances being accepted by
|
|
260
|
+
the matrix-constructor which define a `n \times n` square matrix
|
|
261
|
+
over ``R`` describing the symmetric form to be kept invariant
|
|
262
|
+
by the orthogonal group; the form is checked to be
|
|
263
|
+
non-degenerate and symmetric but not to be positive definite
|
|
264
|
+
|
|
265
|
+
OUTPUT: the general orthogonal group of given degree, base ring, and
|
|
266
|
+
choice of invariant form
|
|
267
|
+
|
|
268
|
+
EXAMPLES::
|
|
269
|
+
|
|
270
|
+
sage: GO(3, GF(7))
|
|
271
|
+
General Orthogonal Group of degree 3 over Finite Field of size 7
|
|
272
|
+
|
|
273
|
+
sage: # needs sage.libs.gap
|
|
274
|
+
sage: GO(3, GF(7)).order()
|
|
275
|
+
672
|
|
276
|
+
sage: GO(3, GF(7)).gens()
|
|
277
|
+
(
|
|
278
|
+
[3 0 0] [0 1 0]
|
|
279
|
+
[0 5 0] [1 6 6]
|
|
280
|
+
[0 0 1], [0 2 1]
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
Using the ``invariant_form`` option::
|
|
284
|
+
|
|
285
|
+
sage: m = matrix(QQ, 3, 3, [[0, 1, 0], [1, 0, 0], [0, 0, 3]])
|
|
286
|
+
sage: GO3 = GO(3, QQ)
|
|
287
|
+
sage: GO3m = GO(3, QQ, invariant_form=m)
|
|
288
|
+
sage: GO3 == GO3m
|
|
289
|
+
False
|
|
290
|
+
sage: GO3.invariant_form()
|
|
291
|
+
[1 0 0]
|
|
292
|
+
[0 1 0]
|
|
293
|
+
[0 0 1]
|
|
294
|
+
sage: GO3m.invariant_form()
|
|
295
|
+
[0 1 0]
|
|
296
|
+
[1 0 0]
|
|
297
|
+
[0 0 3]
|
|
298
|
+
sage: pm = Permutation([2,3,1]).to_matrix()
|
|
299
|
+
sage: g = GO3(pm); g in GO3; g
|
|
300
|
+
True
|
|
301
|
+
[0 0 1]
|
|
302
|
+
[1 0 0]
|
|
303
|
+
[0 1 0]
|
|
304
|
+
sage: GO3m(pm)
|
|
305
|
+
Traceback (most recent call last):
|
|
306
|
+
...
|
|
307
|
+
TypeError: matrix must be orthogonal with respect to the symmetric form
|
|
308
|
+
[0 1 0]
|
|
309
|
+
[1 0 0]
|
|
310
|
+
[0 0 3]
|
|
311
|
+
|
|
312
|
+
sage: GO(3,3, invariant_form=[[1,0,0], [0,2,0], [0,0,1]])
|
|
313
|
+
Traceback (most recent call last):
|
|
314
|
+
...
|
|
315
|
+
NotImplementedError: invariant_form for finite groups is fixed by GAP
|
|
316
|
+
sage: 5 + 5
|
|
317
|
+
10
|
|
318
|
+
sage: R.<x> = ZZ[]
|
|
319
|
+
sage: GO(2, R, invariant_form=[[x,0], [0,1]])
|
|
320
|
+
General Orthogonal Group of degree 2 over
|
|
321
|
+
Univariate Polynomial Ring in x over Integer Ring with respect to symmetric form
|
|
322
|
+
[x 0]
|
|
323
|
+
[0 1]
|
|
324
|
+
|
|
325
|
+
TESTS::
|
|
326
|
+
|
|
327
|
+
sage: # needs sage.libs.gap
|
|
328
|
+
sage: TestSuite(GO3).run()
|
|
329
|
+
sage: groups.matrix.GO(2, 3, e=-1)
|
|
330
|
+
General Orthogonal Group of degree 2 and form parameter -1 over Finite Field of size 3
|
|
331
|
+
"""
|
|
332
|
+
return _OG(n, R, False, e=e, var=var, invariant_form=invariant_form)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
########################################################################
|
|
336
|
+
# Special Orthogonal Group
|
|
337
|
+
########################################################################
|
|
338
|
+
|
|
339
|
+
def SO(n, R, e=None, var='a', invariant_form=None):
|
|
340
|
+
r"""
|
|
341
|
+
Return the special orthogonal group.
|
|
342
|
+
|
|
343
|
+
The special orthogonal group `GO(n,R)` consists of all `n \times n`
|
|
344
|
+
matrices with determinant one over the ring `R` preserving an
|
|
345
|
+
`n`-ary positive definite quadratic form. In cases where there are
|
|
346
|
+
multiple non-isomorphic quadratic forms, additional data needs to
|
|
347
|
+
be specified to disambiguate.
|
|
348
|
+
|
|
349
|
+
.. NOTE::
|
|
350
|
+
|
|
351
|
+
This group is also available via ``groups.matrix.SO()``.
|
|
352
|
+
|
|
353
|
+
INPUT:
|
|
354
|
+
|
|
355
|
+
- ``n`` -- integer; the degree
|
|
356
|
+
|
|
357
|
+
- ``R`` -- ring or an integer; if an integer is specified, the
|
|
358
|
+
corresponding finite field is used
|
|
359
|
+
|
|
360
|
+
- ``e`` -- ``+1`` or ``-1``, and ignored by default; only relevant
|
|
361
|
+
for finite fields and if the degree is even: a parameter that
|
|
362
|
+
distinguishes inequivalent invariant forms
|
|
363
|
+
|
|
364
|
+
- ``var`` -- (default: ``'a'``) variable used to
|
|
365
|
+
represent generator of the finite field, if needed
|
|
366
|
+
|
|
367
|
+
- ``invariant_form`` -- (optional) instances being accepted by
|
|
368
|
+
the matrix-constructor which define a `n \times n` square matrix
|
|
369
|
+
over ``R`` describing the symmetric form to be kept invariant
|
|
370
|
+
by the orthogonal group; the form is checked to be
|
|
371
|
+
non-degenerate and symmetric but not to be positive definite
|
|
372
|
+
|
|
373
|
+
OUTPUT: the special orthogonal group of given degree, base ring, and choice
|
|
374
|
+
of invariant form
|
|
375
|
+
|
|
376
|
+
EXAMPLES::
|
|
377
|
+
|
|
378
|
+
sage: G = SO(3,GF(5)); G
|
|
379
|
+
Special Orthogonal Group of degree 3 over Finite Field of size 5
|
|
380
|
+
|
|
381
|
+
sage: # needs sage.libs.gap
|
|
382
|
+
sage: G = SO(3,GF(5))
|
|
383
|
+
sage: G.gens()
|
|
384
|
+
(
|
|
385
|
+
[2 0 0] [3 2 3] [1 4 4]
|
|
386
|
+
[0 3 0] [0 2 0] [4 0 0]
|
|
387
|
+
[0 0 1], [0 3 1], [2 0 4]
|
|
388
|
+
)
|
|
389
|
+
sage: G.as_matrix_group()
|
|
390
|
+
Matrix group over Finite Field of size 5 with 3 generators (
|
|
391
|
+
[2 0 0] [3 2 3] [1 4 4]
|
|
392
|
+
[0 3 0] [0 2 0] [4 0 0]
|
|
393
|
+
[0 0 1], [0 3 1], [2 0 4]
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
Using the ``invariant_form`` option::
|
|
397
|
+
|
|
398
|
+
sage: # needs sage.rings.number_field
|
|
399
|
+
sage: CF3 = CyclotomicField(3); e3 = CF3.gen()
|
|
400
|
+
sage: m = matrix(CF3, 3, 3, [[1,e3,0], [e3,2,0], [0,0,1]])
|
|
401
|
+
sage: SO3 = SO(3, CF3)
|
|
402
|
+
sage: SO3m = SO(3, CF3, invariant_form=m)
|
|
403
|
+
sage: SO3 == SO3m
|
|
404
|
+
False
|
|
405
|
+
sage: SO3.invariant_form()
|
|
406
|
+
[1 0 0]
|
|
407
|
+
[0 1 0]
|
|
408
|
+
[0 0 1]
|
|
409
|
+
sage: SO3m.invariant_form()
|
|
410
|
+
[ 1 zeta3 0]
|
|
411
|
+
[zeta3 2 0]
|
|
412
|
+
[ 0 0 1]
|
|
413
|
+
sage: pm = Permutation([2,3,1]).to_matrix()
|
|
414
|
+
sage: g = SO3(pm); g in SO3; g
|
|
415
|
+
True
|
|
416
|
+
[0 0 1]
|
|
417
|
+
[1 0 0]
|
|
418
|
+
[0 1 0]
|
|
419
|
+
sage: SO3m(pm)
|
|
420
|
+
Traceback (most recent call last):
|
|
421
|
+
...
|
|
422
|
+
TypeError: matrix must be orthogonal with respect to the symmetric form
|
|
423
|
+
[ 1 zeta3 0]
|
|
424
|
+
[zeta3 2 0]
|
|
425
|
+
[ 0 0 1]
|
|
426
|
+
|
|
427
|
+
sage: SO(3, 5, invariant_form=[[1,0,0], [0,2,0], [0,0,3]])
|
|
428
|
+
Traceback (most recent call last):
|
|
429
|
+
...
|
|
430
|
+
NotImplementedError: invariant_form for finite groups is fixed by GAP
|
|
431
|
+
sage: 5+5
|
|
432
|
+
10
|
|
433
|
+
|
|
434
|
+
TESTS::
|
|
435
|
+
|
|
436
|
+
sage: TestSuite(SO3m).run() # needs sage.rings.number_field
|
|
437
|
+
sage: groups.matrix.SO(2, 3, e=1)
|
|
438
|
+
Special Orthogonal Group of degree 2 and form parameter 1 over Finite Field of size 3
|
|
439
|
+
"""
|
|
440
|
+
return _OG(n, R, True, e=e, var=var, invariant_form=invariant_form)
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
########################################################################
|
|
444
|
+
# Orthogonal Group class
|
|
445
|
+
########################################################################
|
|
446
|
+
|
|
447
|
+
class OrthogonalMatrixGroup_generic(NamedMatrixGroup_generic):
|
|
448
|
+
r"""
|
|
449
|
+
General Orthogonal Group over arbitrary rings.
|
|
450
|
+
|
|
451
|
+
EXAMPLES::
|
|
452
|
+
|
|
453
|
+
sage: G = GO(3, GF(7)); G
|
|
454
|
+
General Orthogonal Group of degree 3 over Finite Field of size 7
|
|
455
|
+
sage: latex(G)
|
|
456
|
+
\text{GO}_{3}(\Bold{F}_{7})
|
|
457
|
+
|
|
458
|
+
sage: G = SO(3, GF(5)); G
|
|
459
|
+
Special Orthogonal Group of degree 3 over Finite Field of size 5
|
|
460
|
+
sage: latex(G)
|
|
461
|
+
\text{SO}_{3}(\Bold{F}_{5})
|
|
462
|
+
|
|
463
|
+
sage: # needs sage.rings.number_field
|
|
464
|
+
sage: CF3 = CyclotomicField(3); e3 = CF3.gen()
|
|
465
|
+
sage: m = matrix(CF3, 3,3, [[1,e3,0],[e3,2,0],[0,0,1]])
|
|
466
|
+
sage: G = SO(3, CF3, invariant_form=m)
|
|
467
|
+
sage: latex(G)
|
|
468
|
+
\text{SO}_{3}(\Bold{Q}(\zeta_{3}))\text{ with respect to non positive definite symmetric form }\left(\begin{array}{rrr}
|
|
469
|
+
1 & \zeta_{3} & 0 \\
|
|
470
|
+
\zeta_{3} & 2 & 0 \\
|
|
471
|
+
0 & 0 & 1
|
|
472
|
+
\end{array}\right)
|
|
473
|
+
"""
|
|
474
|
+
|
|
475
|
+
@cached_method
|
|
476
|
+
def invariant_bilinear_form(self):
|
|
477
|
+
"""
|
|
478
|
+
Return the symmetric bilinear form preserved by ``self``.
|
|
479
|
+
|
|
480
|
+
OUTPUT: a matrix
|
|
481
|
+
|
|
482
|
+
EXAMPLES::
|
|
483
|
+
|
|
484
|
+
sage: # needs sage.libs.gap
|
|
485
|
+
sage: GO(2,3,+1).invariant_bilinear_form()
|
|
486
|
+
[0 1]
|
|
487
|
+
[1 0]
|
|
488
|
+
sage: GO(2,3,-1).invariant_bilinear_form()
|
|
489
|
+
[2 1]
|
|
490
|
+
[1 1]
|
|
491
|
+
sage: G = GO(4, QQ)
|
|
492
|
+
sage: G.invariant_bilinear_form()
|
|
493
|
+
[1 0 0 0]
|
|
494
|
+
[0 1 0 0]
|
|
495
|
+
[0 0 1 0]
|
|
496
|
+
[0 0 0 1]
|
|
497
|
+
sage: GO3m = GO(3, QQ, invariant_form=(1,0,0, 0,2,0, 0,0,3))
|
|
498
|
+
sage: GO3m.invariant_bilinear_form()
|
|
499
|
+
[1 0 0]
|
|
500
|
+
[0 2 0]
|
|
501
|
+
[0 0 3]
|
|
502
|
+
|
|
503
|
+
TESTS::
|
|
504
|
+
|
|
505
|
+
sage: GO3m.invariant_form() # needs sage.libs.gap
|
|
506
|
+
[1 0 0]
|
|
507
|
+
[0 2 0]
|
|
508
|
+
[0 0 3]
|
|
509
|
+
"""
|
|
510
|
+
if self._invariant_form is not None:
|
|
511
|
+
return self._invariant_form
|
|
512
|
+
|
|
513
|
+
from sage.matrix.constructor import identity_matrix
|
|
514
|
+
m = identity_matrix(self.base_ring(), self.degree())
|
|
515
|
+
m.set_immutable()
|
|
516
|
+
return m
|
|
517
|
+
|
|
518
|
+
invariant_quadratic_form = invariant_bilinear_form
|
|
519
|
+
# this is identical in the generic case
|
|
520
|
+
|
|
521
|
+
invariant_form = invariant_bilinear_form
|
|
522
|
+
# alias (analogues to symplectic and unitary cases)
|
|
523
|
+
|
|
524
|
+
def _check_matrix(self, x, *args):
|
|
525
|
+
"""
|
|
526
|
+
Check whether the matrix ``x`` is orthogonal.
|
|
527
|
+
|
|
528
|
+
See :meth:`~sage.groups.matrix_gps.matrix_group._check_matrix`
|
|
529
|
+
for details.
|
|
530
|
+
|
|
531
|
+
EXAMPLES::
|
|
532
|
+
|
|
533
|
+
sage: G = GO(4, GF(5), +1)
|
|
534
|
+
sage: G._check_matrix(G.an_element().matrix())
|
|
535
|
+
"""
|
|
536
|
+
if self._special and x.determinant() != 1:
|
|
537
|
+
raise TypeError('matrix must have determinant one')
|
|
538
|
+
F = self.invariant_bilinear_form()
|
|
539
|
+
if x * F * x.transpose() != F:
|
|
540
|
+
if F == self.one().matrix():
|
|
541
|
+
raise TypeError('matrix must be orthogonal')
|
|
542
|
+
else:
|
|
543
|
+
raise TypeError('matrix must be orthogonal with respect to the symmetric form\n%s' % (F))
|
|
544
|
+
# TODO: check that quadratic form is preserved in characteristic two
|