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,472 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Implementation of the command ``sage --fiximports``.
|
|
4
|
+
|
|
5
|
+
This file provides a tool to fix the modularization antipattern ``namespace_pkg_all_import``
|
|
6
|
+
reported by ``tox -e relint``. Sage library code should not import from ``sage.PAC.KAGE.all``
|
|
7
|
+
when ``sage.PAC.KAGE`` is an implicit namespace package.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
|
|
11
|
+
- Alex Chandler
|
|
12
|
+
- Matthias Köppe
|
|
13
|
+
|
|
14
|
+
INSTRUCTIONS:
|
|
15
|
+
|
|
16
|
+
To fix the above issue for all Python and Cython source files (``.py``, ``.pyx``, ``.pxi``) files in the ``src/sage`` directory,
|
|
17
|
+
run the following from a terminal in ``SAGE_ROOT`` ::
|
|
18
|
+
|
|
19
|
+
./sage -python src/sage/misc/replace_dot_all.py
|
|
20
|
+
|
|
21
|
+
or ::
|
|
22
|
+
|
|
23
|
+
./sage --fiximports
|
|
24
|
+
|
|
25
|
+
Running replace_dot_all.py will call the function :func:`walkdir_replace_dot_all` which walks through all Python and Cython source files
|
|
26
|
+
and replaces certain ``from sage.PAC.KAGE.all import something`` (those matching the pattern above)
|
|
27
|
+
with the correct ``import`` statement by applying the function :func:`~sage.misc.dev_tools.import_statements`.
|
|
28
|
+
|
|
29
|
+
The user can also pass subdirectories of ``src/sage`` or specific files to fix. For example ::
|
|
30
|
+
|
|
31
|
+
./sage -python src/sage/misc/replace_dot_all.py src/sage/arith
|
|
32
|
+
|
|
33
|
+
will fix all files in ``src/sage/arith`` and ::
|
|
34
|
+
|
|
35
|
+
./sage -python src/sage/misc/replace_dot_all.py src/sage/arith/functions.pyx
|
|
36
|
+
|
|
37
|
+
will fix the file ``src/sage/arith/functions.py``. The file extension is necessary in the case of a specific file. The user can also
|
|
38
|
+
pass the verbose flag ``-v`` to print out the files being fixed. For example ::
|
|
39
|
+
|
|
40
|
+
./sage -python src/sage/misc/replace_dot_all.py -v src/sage/arith
|
|
41
|
+
|
|
42
|
+
will fix all files in ``src/sage/arith`` and print out the unusual examples of ``import`` statements it finds.
|
|
43
|
+
|
|
44
|
+
In some rare cases, such as ``import`` statements appearing in doctests, the program will not be able to fix the ``import`` statement. The program will
|
|
45
|
+
print out the location of the file and the line number of the exceptional ``import`` statement. The user can then manually fix the ``import`` statement.
|
|
46
|
+
The program will also (usually) print out the suggested replacement for the ``import`` statement. The user can then copy and paste this replacement
|
|
47
|
+
into the file. In the cases a suggested replacement is not printed out, the user should use the function :func:`~sage.misc.dev_tools.import_statements`
|
|
48
|
+
to find the correct ``import`` statement.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
# ****************************************************************************
|
|
52
|
+
# Copyright (C) 2022-2023 Alex Chandler
|
|
53
|
+
# 2023 Matthias Koeppe
|
|
54
|
+
#
|
|
55
|
+
# This program is free software: you can redistribute it and/or modify
|
|
56
|
+
# it under the terms of the GNU General Public License as published by
|
|
57
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
58
|
+
# (at your option) any later version.
|
|
59
|
+
# https://www.gnu.org/licenses/
|
|
60
|
+
# ****************************************************************************
|
|
61
|
+
|
|
62
|
+
# Importing packages
|
|
63
|
+
|
|
64
|
+
from sage.misc.dev_tools import import_statements
|
|
65
|
+
import os
|
|
66
|
+
import re
|
|
67
|
+
import argparse
|
|
68
|
+
|
|
69
|
+
# We import this using __import__ so that "tox -e relint" does not complain about this source file.
|
|
70
|
+
__import__("sage.all", globals(), locals(), ["*"])
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# Keep in sync with SAGE_ROOT/src/.relint.yml (namespace_pkg_all_import)
|
|
74
|
+
|
|
75
|
+
default_package_regex = (r"sage("
|
|
76
|
+
r"|[.](arith|categories|combinat|crypto|databases|data_structures|dynamics|ext|game_theory|games|geometry|graphs|groups|interfaces|lfunctions|manifolds|matrix|matroids|misc|modules|monoids|numerical|probability|quadratic_forms|quivers|rings|sat|schemes|sets|stats|tensor)[a-z0-9_.]*|[.]libs"
|
|
77
|
+
r")[.]all")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Global variables
|
|
81
|
+
|
|
82
|
+
examples = list('ABCDEFGHIJ') # controls how we print out interesting examples to the console
|
|
83
|
+
interesting_examples = dict(zip(examples, [0]*len(examples)))
|
|
84
|
+
log_messages = ''
|
|
85
|
+
number_examples_to_print = 100 # controls how many examples we print out to the console (100 effectively allows all unusual examples to be printed)
|
|
86
|
+
numberFiles, numberFilesMatchingRegex, numberFilesChanged, numberStatementsReplaced = 0, 0, 0, 0 # to print report on number of files changed
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# Functions
|
|
90
|
+
|
|
91
|
+
def find_replacements(location, package_regex=None, verbose=False):
|
|
92
|
+
r"""
|
|
93
|
+
Locate the lines in the file at ``location`` which contain an ``import`` statement.
|
|
94
|
+
|
|
95
|
+
INPUT:
|
|
96
|
+
|
|
97
|
+
- ``location`` -- a file path
|
|
98
|
+
- ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
|
|
99
|
+
the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
|
|
100
|
+
- ``verbose`` -- a parameter which if used will issue print statements when interesting examples are found
|
|
101
|
+
|
|
102
|
+
OUTPUT:
|
|
103
|
+
|
|
104
|
+
an array [row_index,import_index,replaced_commands,lines_spanned (optional)] with entries
|
|
105
|
+
|
|
106
|
+
- ``row_index`` -- the row index (zero indexed) in the file which needs replacing
|
|
107
|
+
- ``import_index`` -- the index of row row_index which marks the beginning of the word ``import`` in the line
|
|
108
|
+
- ``replaced_commands`` -- the string which will replace the current line
|
|
109
|
+
- ``lines_spanned`` -- the number of lines the original statement spans
|
|
110
|
+
|
|
111
|
+
This output can be processed by the function :func:`process_line`.
|
|
112
|
+
|
|
113
|
+
EXAMPLES::
|
|
114
|
+
|
|
115
|
+
sage: # needs SAGE_SRC
|
|
116
|
+
sage: from sage.misc.replace_dot_all import *
|
|
117
|
+
sage: location = os.path.join(sage.env.SAGE_SRC, 'sage', 'plot', 'arc.py')
|
|
118
|
+
sage: find_replacements(location, package_regex='sage[.]plot[.]all', verbose=True)
|
|
119
|
+
[[..., ..., 'from sage.plot.graphics import Graphics']]
|
|
120
|
+
"""
|
|
121
|
+
if package_regex is None:
|
|
122
|
+
package_regex = default_package_regex
|
|
123
|
+
regex = r"from\s+" + package_regex + r"\s+import"
|
|
124
|
+
pattern = re.compile(regex)
|
|
125
|
+
replacements = []
|
|
126
|
+
global log_messages, interesting_examples
|
|
127
|
+
with open(location) as fp:
|
|
128
|
+
skip_line = False
|
|
129
|
+
lines = fp.readlines() # read all lines using readline()
|
|
130
|
+
row_index = 0
|
|
131
|
+
for row in lines: # iterate over all lines of python file
|
|
132
|
+
if pattern.search(row): # (match the regex also do not want to mess with documentation)
|
|
133
|
+
prefix = ''
|
|
134
|
+
if '*' in row or 'SAGE_ROOT' in row:
|
|
135
|
+
if verbose and interesting_examples['J'] < number_examples_to_print:
|
|
136
|
+
interesting_examples['J'] += 1
|
|
137
|
+
log_messages += (f'J. Match but no changes made (import statement uses *) at {location}:{row_index + 1}. '
|
|
138
|
+
f'Not applying any changes here.\n')
|
|
139
|
+
continue
|
|
140
|
+
elif not (row.lstrip()[0:4] == 'from'):
|
|
141
|
+
skip_line = True
|
|
142
|
+
if '"' not in row and "'" not in row:
|
|
143
|
+
print(f'\n'
|
|
144
|
+
f'NEED TO CHANGE MANUALLY \n'
|
|
145
|
+
f' Issue: line with import statement does not start with "from" \n'
|
|
146
|
+
f' Location: at {location} \n'
|
|
147
|
+
f' Line number: {row_index + 1}. \n'
|
|
148
|
+
f' Giving correct import statements:\n')
|
|
149
|
+
leading_space = 0
|
|
150
|
+
while len(row) > 0 and row[leading_space] == ' ' and leading_space < len(row)-1:
|
|
151
|
+
leading_space += 1
|
|
152
|
+
prefix_space = leading_space
|
|
153
|
+
while row[prefix_space:prefix_space+4] != 'from':
|
|
154
|
+
prefix_space += 1
|
|
155
|
+
prefix = row[leading_space:prefix_space]
|
|
156
|
+
row = row[prefix_space:]
|
|
157
|
+
else:
|
|
158
|
+
print(f'\n'
|
|
159
|
+
f'NEED TO CHANGE MANUALLY \n'
|
|
160
|
+
f' Issue: import statement does not start with "from" and contains quotation marks \n'
|
|
161
|
+
f' Location: at {location}:{row_index + 1}. \n'
|
|
162
|
+
f' Not able to suggest correct import statements. User must use the function import_statements().')
|
|
163
|
+
continue
|
|
164
|
+
# find() method returns -1 if the value is not found, or if found it returns index of the first occurrence of the substring
|
|
165
|
+
import_index = row.find('import ')
|
|
166
|
+
modules = ''
|
|
167
|
+
to_exec = row.strip() # the import statement itself which we will clean and call to import modules e.g. "import (aa as a, bb, cc as c)"
|
|
168
|
+
to_eval = row[import_index + 7:-1].strip() # tuple of modules in import statement but e.g. "(aa as a, bb, cc as c)" is saved as "(a,bb,c)"
|
|
169
|
+
to_eval_raw = row[import_index + 7:-1].strip() # same as to_eval but we don't get rid of " as " parts e.g. "(aa as a, bb, cc as c)"
|
|
170
|
+
span = 0 # keeps track of how many lines the import statement spans
|
|
171
|
+
|
|
172
|
+
if '(' in row: # for examples where we import a tuple of modules and the statement spans several lines
|
|
173
|
+
while ')' not in lines[row_index + span]: # finding the line which closes the import statement
|
|
174
|
+
span += 1
|
|
175
|
+
to_exec += lines[row_index + span].strip()
|
|
176
|
+
to_eval += lines[row_index + span].strip()
|
|
177
|
+
to_eval_raw += lines[row_index + span].strip()
|
|
178
|
+
if span and verbose: # useful to see these multiline examples for debugging
|
|
179
|
+
if " as " in to_eval_raw and interesting_examples['D'] < number_examples_to_print:
|
|
180
|
+
log_messages += f'D. Interesting example (spans multiple lines and has " as ") at {location}:{row_index + 1}\n'
|
|
181
|
+
interesting_examples['D'] += 1
|
|
182
|
+
elif interesting_examples['B'] < number_examples_to_print:
|
|
183
|
+
log_messages += f'B. Interesting example (spans multiple lines) at {location}:{row_index + 1}\n'
|
|
184
|
+
interesting_examples['B'] += 1
|
|
185
|
+
|
|
186
|
+
# if there is an "as" statement inside to_eval, we want to keep only the new name for the module e.g. "(aa as a, bb, cc as c)" becomes "(a,bb,c)"
|
|
187
|
+
while " as " in to_eval:
|
|
188
|
+
as_ind = to_eval.find(" as ")
|
|
189
|
+
j = as_ind - 1
|
|
190
|
+
while to_eval[j] not in [',', ' '] and j >= 0:
|
|
191
|
+
j -= 1
|
|
192
|
+
to_eval = to_eval[0:j+1] + to_eval[as_ind+4:]
|
|
193
|
+
|
|
194
|
+
try: # trying to execute the import statement so we can eval the modules and feed them to the function import_statements
|
|
195
|
+
to_exec = to_exec.replace("'", '').replace('"', '')
|
|
196
|
+
if (to_exec[-1] == ','):
|
|
197
|
+
to_exec = to_exec[:-1]
|
|
198
|
+
glob = dict()
|
|
199
|
+
exec(to_exec, glob)
|
|
200
|
+
except ModuleNotFoundError as err:
|
|
201
|
+
print(f'ModuleNotFoundError: {err} found when trying to execute {to_exec}')
|
|
202
|
+
except ImportError as err:
|
|
203
|
+
print(f'ImportError: {err} found when trying to execute {to_exec}')
|
|
204
|
+
|
|
205
|
+
try: # try to evaluate the list of module names to get a list of the modules themselves which we can call import_statements on
|
|
206
|
+
modules = eval(to_eval, glob)
|
|
207
|
+
except NameError as err:
|
|
208
|
+
print(f'NameError: {err} found when trying to evaluate {to_eval} at {location}:{row_index + 1}')
|
|
209
|
+
except SyntaxError as err:
|
|
210
|
+
print(f'SyntaxError: {err} found when trying to evaluate {to_eval} at {location}:{row_index + 1}')
|
|
211
|
+
|
|
212
|
+
# Need module to be a list of modules we are importing. If a single module was given, we make it a 1-element list.
|
|
213
|
+
if not isinstance(modules, tuple):
|
|
214
|
+
modules = [modules]
|
|
215
|
+
|
|
216
|
+
to_eval_list = to_eval.replace('(', '').replace(')', '').split(',') # convert comma separated string to_eval to a list
|
|
217
|
+
to_eval_list_raw = to_eval_raw.replace('(', '').replace(')', '').split(',') # convert comma separated string to_eval_raw to a list
|
|
218
|
+
to_eval_list_index = 0
|
|
219
|
+
|
|
220
|
+
change_to = ''
|
|
221
|
+
# constructs the appropriate replacement for the import statement and stores it (along with location data) in list replacements
|
|
222
|
+
for mod in modules:
|
|
223
|
+
postfix = ''
|
|
224
|
+
as_index = -1
|
|
225
|
+
# saves the callable name of module in variable postfix (e.g. for module "b" called by "bb as b" we set postfix = " as b")
|
|
226
|
+
if " as " in to_eval_list_raw[to_eval_list_index]:
|
|
227
|
+
if verbose and interesting_examples['C'] < number_examples_to_print:
|
|
228
|
+
log_messages += f'C. Interesting example (" as " in tuple import) at {location}:{row_index + 1}\n'
|
|
229
|
+
interesting_examples['C'] += 1
|
|
230
|
+
as_index = to_eval_list_raw[to_eval_list_index].index(" as ")
|
|
231
|
+
postfix = to_eval_list_raw[to_eval_list_index][as_index:]
|
|
232
|
+
new_import_statement = import_statements(mod, answer_as_str=True, verbose=False) # import statement for the current mod in the list module
|
|
233
|
+
import_index = new_import_statement.find('import')
|
|
234
|
+
new_mod_as_string = new_import_statement[import_index + 7:].strip() # the name for the module given by the function import_statements
|
|
235
|
+
if as_index >= 0:
|
|
236
|
+
# the name for the module as originally called in the document (when there is an " as " statement)
|
|
237
|
+
original_mod_string = to_eval_list_raw[to_eval_list_index].strip()[:as_index]
|
|
238
|
+
else:
|
|
239
|
+
original_mod_string = to_eval_list[to_eval_list_index].strip() # the name for the module as originally called in the document
|
|
240
|
+
if original_mod_string != new_mod_as_string: # if the names differ, we use the original name as it was called in the document
|
|
241
|
+
if verbose and interesting_examples['A'] < number_examples_to_print:
|
|
242
|
+
log_messages += (f'A. Interesting example (module has multiple names) at {location}:{row_index + 1}. '
|
|
243
|
+
f'Names: {original_mod_string}, {new_mod_as_string}. '
|
|
244
|
+
f'Replacing new {new_mod_as_string} by original {original_mod_string}.\n')
|
|
245
|
+
interesting_examples['A'] += 1
|
|
246
|
+
new_import_statement = new_import_statement.replace(' ' + new_mod_as_string, ' ' + new_mod_as_string + ' as ' + original_mod_string)
|
|
247
|
+
if " as " in postfix and interesting_examples['G'] < number_examples_to_print:
|
|
248
|
+
log_messages += (f'G. Interesting example (module has multiple names) at {location}:{row_index + 1}. '
|
|
249
|
+
f'Names: {original_mod_string}, {new_mod_as_string}. '
|
|
250
|
+
f'Replacing new {new_mod_as_string} by original {original_mod_string}.\n')
|
|
251
|
+
interesting_examples['G'] += 1
|
|
252
|
+
if len(postfix.strip()) > 0: # if module was called with " as " statement, we put that back in by adding the string "postfix"
|
|
253
|
+
# if " as " in new_import_statement locate the index of " as ", remove the end after this, and add the postfix there
|
|
254
|
+
if " as " in new_import_statement:
|
|
255
|
+
new_import_statement = new_import_statement[:new_import_statement.index(" as ")] + ' ' + postfix.strip()
|
|
256
|
+
else:
|
|
257
|
+
new_import_statement += (' ' + postfix.strip())
|
|
258
|
+
change_to += (prefix + new_import_statement + '\n')
|
|
259
|
+
to_eval_list_index += 1
|
|
260
|
+
# [:-1] on change_to gets rid of the last '\n' we added which adds an unnecessary new line
|
|
261
|
+
replacement = [row_index, import_index, change_to[:-1]].copy()
|
|
262
|
+
if span:
|
|
263
|
+
# if original statement spanned multiple lines, we store that information to signal that we need to skip lines
|
|
264
|
+
# as we read the document in the function make_replacements_in_file
|
|
265
|
+
replacement.append(span)
|
|
266
|
+
if not skip_line:
|
|
267
|
+
replacements.append(replacement)
|
|
268
|
+
row_index += 1
|
|
269
|
+
skip_line = False
|
|
270
|
+
# keeping track of the numbers of files changed and statements replaced
|
|
271
|
+
global numberStatementsReplaced, numberFilesChanged
|
|
272
|
+
numberStatementsReplaced += len(replacements)
|
|
273
|
+
if replacements:
|
|
274
|
+
numberFilesChanged += 1
|
|
275
|
+
return replacements
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def process_line(location, line, replacements, row_index, verbose=False):
|
|
279
|
+
r"""
|
|
280
|
+
Modify a single source code ``line`` according to the given ``replacements``.
|
|
281
|
+
|
|
282
|
+
INPUTS:
|
|
283
|
+
|
|
284
|
+
- ``location`` -- a file path; only used for logging
|
|
285
|
+
- ``line`` -- a source code line
|
|
286
|
+
- ``replacements`` -- the array output from :func:`find_replacements`
|
|
287
|
+
- ``row_index`` -- the line number where ``import`` appears
|
|
288
|
+
- ``verbose`` -- if ``True``, issue print statements when interesting
|
|
289
|
+
examples are found
|
|
290
|
+
|
|
291
|
+
OUTPUT: an array ``[new_line, replacements]`` with entries
|
|
292
|
+
|
|
293
|
+
- ``new_line`` -- the modified import statement (possibly now on several lines)
|
|
294
|
+
- ``replacements`` -- just returns the original replacements with its index 0 element removed if ``replacements`` is nonempty
|
|
295
|
+
|
|
296
|
+
EXAMPLES:
|
|
297
|
+
|
|
298
|
+
Replacing the first line which needs a replacement in the source file with filepath ``src/sage/plot/arc.py``::
|
|
299
|
+
|
|
300
|
+
sage: # needs SAGE_SRC
|
|
301
|
+
sage: from sage.misc.replace_dot_all import *
|
|
302
|
+
sage: location = os.path.join(sage.env.SAGE_SRC, 'sage', 'plot', 'arc.py')
|
|
303
|
+
sage: replacements = find_replacements(location, package_regex='sage[.]plot[.]all', verbose=True); replacements
|
|
304
|
+
[[477, 24, 'from sage.plot.graphics import Graphics']]
|
|
305
|
+
sage: with open(location, "r") as file:
|
|
306
|
+
....: lines = file.readlines()
|
|
307
|
+
sage: row_index, col_number, *_ = replacements[0]
|
|
308
|
+
sage: line = lines[row_index]
|
|
309
|
+
sage: print(line.rstrip())
|
|
310
|
+
from sage.plot.all import Graphics
|
|
311
|
+
sage: new_line, replacements = process_line(location, line, replacements, row_index)
|
|
312
|
+
sage: print(new_line)
|
|
313
|
+
from sage.plot.graphics import Graphics
|
|
314
|
+
sage: replacements
|
|
315
|
+
[]
|
|
316
|
+
"""
|
|
317
|
+
line = line.rstrip() # stripping line break
|
|
318
|
+
new_line = ''
|
|
319
|
+
global log_messages, interesting_examples
|
|
320
|
+
if len(replacements) == 0:
|
|
321
|
+
return line, replacements
|
|
322
|
+
if row_index == replacements[0][0]: # if line marked as containing .all
|
|
323
|
+
replacement = replacements.pop(0)
|
|
324
|
+
leading_space = 0
|
|
325
|
+
while line and line[leading_space] == ' ' and leading_space < len(line)-1:
|
|
326
|
+
leading_space += 1
|
|
327
|
+
new_line = ' '*leading_space + replacement[2] # adds leading space to first line (which may or may not start with 'from')
|
|
328
|
+
new_line = new_line.replace('\n', '\n'+' '*leading_space) # adds correct amount of indentation to the replacement at each line
|
|
329
|
+
# new_line = replacement[2].replace('from ',' '*leading_space + 'from ') # adds correct amount of indentation to the replacement at each line
|
|
330
|
+
if verbose and leading_space > 0:
|
|
331
|
+
if len(replacement) == 4 and interesting_examples['F'] < number_examples_to_print:
|
|
332
|
+
log_messages += f'F. Interesting example (has leading space and multiline) at {location}:{replacement[0] + 1}\n'
|
|
333
|
+
interesting_examples['F'] += 1
|
|
334
|
+
elif interesting_examples['E'] < number_examples_to_print:
|
|
335
|
+
log_messages += f'E. Interesting example (has leading space) at {location}:{replacement[0] + 1}\n'
|
|
336
|
+
interesting_examples['E'] += 1
|
|
337
|
+
|
|
338
|
+
else: # if line does not contain .all
|
|
339
|
+
new_line = line
|
|
340
|
+
return new_line, replacements
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def make_replacements_in_file(location, package_regex=None, verbose=False, output=None):
|
|
344
|
+
r"""
|
|
345
|
+
Replace ``import`` statements in the file with filepath "location".
|
|
346
|
+
|
|
347
|
+
INPUT:
|
|
348
|
+
|
|
349
|
+
- ``location`` -- a file path
|
|
350
|
+
- ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
|
|
351
|
+
the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
|
|
352
|
+
- ``verbose`` -- if ``True``, issue print statements when interesting examples are found
|
|
353
|
+
- ``output`` -- a file path; if ``None``, overwrite the file given by ``location``
|
|
354
|
+
|
|
355
|
+
EXAMPLES::
|
|
356
|
+
|
|
357
|
+
sage: from sage.misc.replace_dot_all import *
|
|
358
|
+
sage: import tempfile
|
|
359
|
+
sage: with tempfile.TemporaryDirectory() as d:
|
|
360
|
+
....: location = os.path.join(d, "input.py")
|
|
361
|
+
....: with open(location, "w") as input:
|
|
362
|
+
....: _ = input.write("from sage.plot.all import point2d\n")
|
|
363
|
+
....: _ = input.write("from sage.plot.line import line\n")
|
|
364
|
+
....: make_replacements_in_file(location, 'sage[.]plot[.]all', True)
|
|
365
|
+
....: with open(location, "r") as output:
|
|
366
|
+
....: for line in output:
|
|
367
|
+
....: print(line.strip())
|
|
368
|
+
from sage.plot.point import point2d
|
|
369
|
+
from sage.plot.line import line
|
|
370
|
+
"""
|
|
371
|
+
replacements = find_replacements(location, package_regex, verbose)
|
|
372
|
+
with open(location) as file:
|
|
373
|
+
lines = file.readlines()
|
|
374
|
+
replaced_content = ""
|
|
375
|
+
row_index = 0 # keeps track of the line number
|
|
376
|
+
while row_index < len(lines): # looping through the file
|
|
377
|
+
line = lines[row_index]
|
|
378
|
+
span = 0 # keeps track of number of lines import statement spans
|
|
379
|
+
if replacements and row_index == replacements[0][0] and len(replacements[0]) == 4:
|
|
380
|
+
span = replacements[0][3] # if import statement spans span lines
|
|
381
|
+
# returns the line if no replacements are needed and returns the processed line otherwise
|
|
382
|
+
new_line, replacements = process_line(location, line, replacements, row_index, verbose=verbose)
|
|
383
|
+
replaced_content += new_line + "\n" # concatenate the new string and add an end-line break
|
|
384
|
+
row_index += 1 + span
|
|
385
|
+
if output is None:
|
|
386
|
+
output = location
|
|
387
|
+
with open(output, "w") as write_file: # Open file in write mode
|
|
388
|
+
write_file.write(replaced_content) # overwriting the old file contents with the new/replaced content
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def walkdir_replace_dot_all(dir, file_regex=r'.*[.](py|pyx|pxi)$', package_regex=None, verbose=False, *,
|
|
392
|
+
excluded_file_regex=r'auto-methods|replace_dot_all'):
|
|
393
|
+
r"""
|
|
394
|
+
Replace ``import`` statements in the files in directory ``dir`` matching the regex pattern ``file_regex``.
|
|
395
|
+
|
|
396
|
+
INPUTS:
|
|
397
|
+
|
|
398
|
+
- ``dir`` -- a directory path
|
|
399
|
+
- ``file_regex`` -- a regular expression matching the file names to process
|
|
400
|
+
- ``package_regex`` -- (default: :obj:`default_package_regex`) a regular expression matching
|
|
401
|
+
the ``sage.PAC.KAGE.all`` package names from which we do not want to import.
|
|
402
|
+
- ``verbose`` -- if ``True``, print statements when interesting examples are found
|
|
403
|
+
- ``excluded_file_regex`` -- a regular expression matching the file names to exclude
|
|
404
|
+
|
|
405
|
+
EXAMPLES::
|
|
406
|
+
|
|
407
|
+
sage: # needs SAGE_SRC
|
|
408
|
+
sage: from sage.misc.replace_dot_all import *
|
|
409
|
+
sage: walkdir_replace_dot_all(os.path.join(sage.env.SAGE_SRC, 'sage')) # not tested
|
|
410
|
+
"""
|
|
411
|
+
global numberFiles, numberFilesMatchingRegex
|
|
412
|
+
file_regex = re.compile(file_regex)
|
|
413
|
+
excluded_file_regex = re.compile(excluded_file_regex)
|
|
414
|
+
for root, dirs, files in os.walk(dir, topdown=False):
|
|
415
|
+
for name in files:
|
|
416
|
+
numberFiles += 1
|
|
417
|
+
if file_regex.search(name) and not excluded_file_regex.search(name):
|
|
418
|
+
numberFilesMatchingRegex += 1
|
|
419
|
+
location = os.path.join(root, name)
|
|
420
|
+
make_replacements_in_file(location, package_regex, verbose)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
# ******************************************************** EXECUTES MAIN FUNCTION **********************************************************************
|
|
424
|
+
# this executes the main function in this file which writes over all import statements matching regex in files in specified location matching fileRegex:
|
|
425
|
+
if __name__ == "__main__":
|
|
426
|
+
# Create argument parser
|
|
427
|
+
parser = argparse.ArgumentParser()
|
|
428
|
+
# Optional arguments
|
|
429
|
+
parser.add_argument(
|
|
430
|
+
"location",
|
|
431
|
+
metavar='files or directories',
|
|
432
|
+
nargs='*',
|
|
433
|
+
help=("Names of source directories or source files. "
|
|
434
|
+
"If none given, walks through all files in src/sage."),
|
|
435
|
+
type=str)
|
|
436
|
+
parser.add_argument(
|
|
437
|
+
"-v", "--verbose",
|
|
438
|
+
help="Increase output verbosity. Shows locations of any unusual cases of import statements and the corresponding changes.",
|
|
439
|
+
action="store_true") # Parse arguments
|
|
440
|
+
args = parser.parse_args()
|
|
441
|
+
verbosity = args.verbose
|
|
442
|
+
# Declare regular expressions
|
|
443
|
+
file_regex = r'.*[.](py|pyx|pxi)$'
|
|
444
|
+
package_regex = None
|
|
445
|
+
# Execute the main function based on the specified location and verbosity
|
|
446
|
+
if not args.location:
|
|
447
|
+
from sage.env import SAGE_SRC
|
|
448
|
+
|
|
449
|
+
args.location = [os.path.join(SAGE_SRC, 'sage')]
|
|
450
|
+
try:
|
|
451
|
+
for location in args.location:
|
|
452
|
+
if not (location.endswith('.py') or location.endswith('.pxi')):
|
|
453
|
+
# Assume directory
|
|
454
|
+
walkdir_replace_dot_all(location, file_regex, package_regex, verbose=verbosity)
|
|
455
|
+
else:
|
|
456
|
+
# make replacements in file specified by location argument
|
|
457
|
+
make_replacements_in_file(location, package_regex, verbose=verbosity)
|
|
458
|
+
finally:
|
|
459
|
+
# Print report also when interrupted
|
|
460
|
+
if verbosity:
|
|
461
|
+
log_messages_split = sorted(log_messages.rstrip().split('\n'))
|
|
462
|
+
for i, message in enumerate(log_messages_split, start=1):
|
|
463
|
+
# add index to each line
|
|
464
|
+
print(f'{i}. {message.rstrip()}')
|
|
465
|
+
report = 'REPORT:\n'
|
|
466
|
+
report += f'Number of files checked: {numberFiles}\n'
|
|
467
|
+
report += f'Number of files matching regex: {numberFilesMatchingRegex}\n'
|
|
468
|
+
report += f'Number of files changed: {numberFilesChanged}\n'
|
|
469
|
+
report += f'Number of import statements replaced: {numberStatementsReplaced}'
|
|
470
|
+
print('*'*100 + '\n' + report + '\n' + '*'*100)
|
|
471
|
+
|
|
472
|
+
# ******************************************************************************************************************************************************
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Sphinx configuration shared by sage.misc.sphinxify and sage_docbuild
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2022 Matthias Koeppe <mkoeppe@math.ucdavis.edu>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from docutils import nodes
|
|
17
|
+
from docutils.transforms import Transform
|
|
18
|
+
from sphinx.ext.doctest import blankline_re
|
|
19
|
+
|
|
20
|
+
# The reST default role (used for this markup: `text`) to use for all documents.
|
|
21
|
+
default_role = 'math'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def process_docstring_aliases(app, what, name, obj, options, docstringlines):
|
|
25
|
+
"""
|
|
26
|
+
Change the docstrings for aliases to point to the original object.
|
|
27
|
+
"""
|
|
28
|
+
basename = name.rpartition('.')[2]
|
|
29
|
+
if hasattr(obj, '__name__') and obj.__name__ != basename:
|
|
30
|
+
docstringlines[:] = ['See :obj:`%s`.' % name]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def process_directives(app, what, name, obj, options, docstringlines):
|
|
34
|
+
"""
|
|
35
|
+
Remove 'nodetex' and other directives from the first line of any
|
|
36
|
+
docstring where they appear.
|
|
37
|
+
"""
|
|
38
|
+
if len(docstringlines) == 0:
|
|
39
|
+
return
|
|
40
|
+
first_line = docstringlines[0]
|
|
41
|
+
directives = [d.lower() for d in first_line.split(',')]
|
|
42
|
+
if 'nodetex' in directives:
|
|
43
|
+
docstringlines.pop(0)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def process_docstring_cython(app, what, name, obj, options, docstringlines):
|
|
47
|
+
"""
|
|
48
|
+
Remove Cython's filename and location embedding.
|
|
49
|
+
"""
|
|
50
|
+
if len(docstringlines) <= 1:
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
first_line = docstringlines[0]
|
|
54
|
+
if first_line.startswith('File:') and '(starting at' in first_line:
|
|
55
|
+
# Remove the first two lines
|
|
56
|
+
docstringlines.pop(0)
|
|
57
|
+
docstringlines.pop(0)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def process_docstring_module_title(app, what, name, obj, options, docstringlines):
|
|
61
|
+
"""
|
|
62
|
+
Removes the first line from the beginning of the module's docstring. This
|
|
63
|
+
corresponds to the title of the module's documentation page.
|
|
64
|
+
"""
|
|
65
|
+
if what != "module":
|
|
66
|
+
return
|
|
67
|
+
|
|
68
|
+
# Remove any additional blank lines at the beginning
|
|
69
|
+
title_removed = False
|
|
70
|
+
while len(docstringlines) > 1 and not title_removed:
|
|
71
|
+
if docstringlines[0].strip() != "":
|
|
72
|
+
title_removed = True
|
|
73
|
+
docstringlines.pop(0)
|
|
74
|
+
|
|
75
|
+
# Remove any additional blank lines at the beginning
|
|
76
|
+
while len(docstringlines) > 1:
|
|
77
|
+
if docstringlines[0].strip() == "":
|
|
78
|
+
docstringlines.pop(0)
|
|
79
|
+
else:
|
|
80
|
+
break
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def process_dollars(app, what, name, obj, options, docstringlines):
|
|
84
|
+
r"""
|
|
85
|
+
Replace dollar signs with backticks.
|
|
86
|
+
|
|
87
|
+
See sage.misc.sagedoc.process_dollars for more information.
|
|
88
|
+
"""
|
|
89
|
+
if len(docstringlines) and name.find("process_dollars") == -1:
|
|
90
|
+
from sage.misc.sagedoc import process_dollars as sagedoc_dollars
|
|
91
|
+
s = sagedoc_dollars("\n".join(docstringlines))
|
|
92
|
+
lines = s.split("\n")
|
|
93
|
+
for i in range(len(lines)):
|
|
94
|
+
docstringlines[i] = lines[i]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def process_inherited(app, what, name, obj, options, docstringlines):
|
|
98
|
+
"""
|
|
99
|
+
If we're including inherited members, omit their docstrings.
|
|
100
|
+
"""
|
|
101
|
+
if not options.get('inherited-members'):
|
|
102
|
+
return
|
|
103
|
+
|
|
104
|
+
if what in ['class', 'data', 'exception', 'function', 'module']:
|
|
105
|
+
return
|
|
106
|
+
|
|
107
|
+
name = name.split('.')[-1]
|
|
108
|
+
|
|
109
|
+
if what == 'method' and hasattr(obj, 'im_class'):
|
|
110
|
+
if name in obj.im_class.__dict__.keys():
|
|
111
|
+
return
|
|
112
|
+
|
|
113
|
+
if what == 'attribute' and hasattr(obj, '__objclass__'):
|
|
114
|
+
if name in obj.__objclass__.__dict__.keys():
|
|
115
|
+
return
|
|
116
|
+
|
|
117
|
+
for i in range(len(docstringlines)):
|
|
118
|
+
docstringlines.pop()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def skip_TESTS_block(app, what, name, obj, options, docstringlines):
|
|
122
|
+
"""
|
|
123
|
+
Skip blocks labeled "TESTS:".
|
|
124
|
+
|
|
125
|
+
See sage.misc.sagedoc.skip_TESTS_block for more information.
|
|
126
|
+
"""
|
|
127
|
+
from sage.misc.sagedoc import skip_TESTS_block as sagedoc_skip_TESTS
|
|
128
|
+
if not docstringlines:
|
|
129
|
+
# No docstring, so don't do anything. See Issue #19932.
|
|
130
|
+
return
|
|
131
|
+
s = sagedoc_skip_TESTS("\n".join(docstringlines))
|
|
132
|
+
lines = s.split("\n")
|
|
133
|
+
for i in range(len(lines)):
|
|
134
|
+
docstringlines[i] = lines[i]
|
|
135
|
+
while len(docstringlines) > len(lines):
|
|
136
|
+
del docstringlines[len(lines)]
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class SagemathTransform(Transform):
|
|
140
|
+
"""
|
|
141
|
+
Transform for code-blocks.
|
|
142
|
+
|
|
143
|
+
This allows Sphinx to treat code-blocks with prompt "sage:" as
|
|
144
|
+
associated with the pycon lexer, and in particular, to change
|
|
145
|
+
"<BLANKLINE>" to a blank line.
|
|
146
|
+
"""
|
|
147
|
+
default_priority = 500
|
|
148
|
+
|
|
149
|
+
def apply(self):
|
|
150
|
+
for node in self.document.traverse(nodes.literal_block):
|
|
151
|
+
if node.get('language') is None and node.astext().startswith('sage:'):
|
|
152
|
+
node['language'] = 'ipycon'
|
|
153
|
+
source = node.rawsource
|
|
154
|
+
source = blankline_re.sub('', source)
|
|
155
|
+
node.rawsource = source
|
|
156
|
+
node[:] = [nodes.Text(source)]
|
|
157
|
+
|
|
158
|
+
# This is only used by sage.misc.sphinxify
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def setup(app):
|
|
162
|
+
app.connect('autodoc-process-docstring', process_docstring_cython)
|
|
163
|
+
app.connect('autodoc-process-docstring', process_directives)
|
|
164
|
+
app.connect('autodoc-process-docstring', process_docstring_module_title)
|
|
165
|
+
app.connect('autodoc-process-docstring', process_dollars)
|
|
166
|
+
app.connect('autodoc-process-docstring', process_inherited)
|
|
167
|
+
app.connect('autodoc-process-docstring', skip_TESTS_block)
|
|
168
|
+
app.add_transform(SagemathTransform)
|