passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,698 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.symbolic
|
|
3
|
+
"""
|
|
4
|
+
Numerical Integration
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Josh Kantor (2007-02): first version
|
|
9
|
+
|
|
10
|
+
- William Stein (2007-02): rewrite of docs, conventions, etc.
|
|
11
|
+
|
|
12
|
+
- Robert Bradshaw (2008-08): fast float integration
|
|
13
|
+
|
|
14
|
+
- Jeroen Demeyer (2011-11-23): :issue:`12047`: return 0 when the
|
|
15
|
+
integration interval is a point; reformat documentation and add to
|
|
16
|
+
the reference manual.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# ****************************************************************************
|
|
20
|
+
# Copyright (C) 2004,2005,2006,2007 Joshua Kantor <kantor.jm@gmail.com>
|
|
21
|
+
# Copyright (C) 2007 William Stein <wstein@gmail.com>
|
|
22
|
+
# Copyright (C) 2019 Vincent Klein <vinklein@gmail.com>
|
|
23
|
+
# Copyright (C) 2019 Vincent Delecroix <20100.delecroix@gmail.com>
|
|
24
|
+
#
|
|
25
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
26
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
27
|
+
# the License, or (at your option) any later version.
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
|
|
31
|
+
from cysignals.signals cimport sig_on, sig_off
|
|
32
|
+
from memory_allocator cimport MemoryAllocator
|
|
33
|
+
|
|
34
|
+
from sage.rings.real_double import RDF
|
|
35
|
+
from sage.libs.gsl.errno cimport gsl_set_error_handler_off
|
|
36
|
+
from sage.libs.gsl.integration cimport *
|
|
37
|
+
from sage.libs.gsl.monte cimport *
|
|
38
|
+
from sage.libs.gsl.rng cimport *
|
|
39
|
+
from sage.misc.sageinspect import sage_getargspec
|
|
40
|
+
from sage.ext.interpreters.wrapper_rdf cimport Wrapper_rdf
|
|
41
|
+
from sage.ext.fast_callable import fast_callable
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
cdef class PyFunctionWrapper:
|
|
45
|
+
cdef object the_function
|
|
46
|
+
cdef object the_parameters
|
|
47
|
+
cdef list lx
|
|
48
|
+
|
|
49
|
+
cdef class compiled_integrand:
|
|
50
|
+
cdef int c_f(self, double t) noexcept: # void *params):
|
|
51
|
+
return 0
|
|
52
|
+
|
|
53
|
+
cdef double c_f(double t, void *params) noexcept:
|
|
54
|
+
cdef double value
|
|
55
|
+
cdef PyFunctionWrapper wrapper
|
|
56
|
+
wrapper = <PyFunctionWrapper> params
|
|
57
|
+
try:
|
|
58
|
+
if len(wrapper.the_parameters) != 0:
|
|
59
|
+
value = wrapper.the_function(t, wrapper.the_parameters)
|
|
60
|
+
else:
|
|
61
|
+
value = wrapper.the_function(t)
|
|
62
|
+
except Exception as msg:
|
|
63
|
+
try:
|
|
64
|
+
if str(msg).strip():
|
|
65
|
+
print(msg)
|
|
66
|
+
else:
|
|
67
|
+
print(f"Unable to evaluate function at {t}")
|
|
68
|
+
except Exception:
|
|
69
|
+
pass
|
|
70
|
+
return 0
|
|
71
|
+
|
|
72
|
+
return value
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def numerical_integral(func, a, b=None,
|
|
76
|
+
algorithm='qag',
|
|
77
|
+
max_points=87, params=None, eps_abs=1e-6,
|
|
78
|
+
eps_rel=1e-6, rule=6):
|
|
79
|
+
r"""
|
|
80
|
+
Return the numerical integral of the function on the interval
|
|
81
|
+
from a to b and an error bound.
|
|
82
|
+
|
|
83
|
+
INPUT:
|
|
84
|
+
|
|
85
|
+
- ``a``, ``b`` -- the interval of integration, specified as two
|
|
86
|
+
numbers or as a tuple/list with the first element the lower bound
|
|
87
|
+
and the second element the upper bound. Use ``+Infinity`` and
|
|
88
|
+
``-Infinity`` for plus or minus infinity.
|
|
89
|
+
- ``algorithm`` -- valid choices are:
|
|
90
|
+
|
|
91
|
+
* 'qag' -- for an adaptive integration
|
|
92
|
+
* 'qags' -- for an adaptive integration with (integrable) singularities
|
|
93
|
+
* 'qng' -- for a non-adaptive Gauss-Kronrod (samples at a maximum of 87pts)
|
|
94
|
+
|
|
95
|
+
- ``max_points`` -- sets the maximum number of sample points
|
|
96
|
+
- ``params`` -- used to pass parameters to your function
|
|
97
|
+
- ``eps_abs``, ``eps_rel`` -- sets the absolute and relative error
|
|
98
|
+
tolerances which satisfies the relation ``|RESULT - I| <= max(eps_abs,
|
|
99
|
+
eps_rel * |I|)``, where ``I = \int_a^b f(x) d x``.
|
|
100
|
+
- ``rule`` -- this controls the Gauss-Kronrod rule used in the adaptive integration:
|
|
101
|
+
|
|
102
|
+
* rule=1 -- 15 point rule
|
|
103
|
+
* rule=2 -- 21 point rule
|
|
104
|
+
* rule=3 -- 31 point rule
|
|
105
|
+
* rule=4 -- 41 point rule
|
|
106
|
+
* rule=5 -- 51 point rule
|
|
107
|
+
* rule=6 -- 61 point rule
|
|
108
|
+
|
|
109
|
+
Higher key values are more accurate for smooth functions but lower
|
|
110
|
+
key values deal better with discontinuities.
|
|
111
|
+
|
|
112
|
+
OUTPUT:
|
|
113
|
+
|
|
114
|
+
A tuple whose first component is the answer and whose second
|
|
115
|
+
component is an error estimate.
|
|
116
|
+
|
|
117
|
+
REMARK:
|
|
118
|
+
|
|
119
|
+
There is also a method ``nintegral`` on symbolic expressions
|
|
120
|
+
that implements numerical integration using Maxima. It is potentially
|
|
121
|
+
very useful for symbolic expressions.
|
|
122
|
+
|
|
123
|
+
EXAMPLES:
|
|
124
|
+
|
|
125
|
+
To integrate the function `x^2` from 0 to 1, we do ::
|
|
126
|
+
|
|
127
|
+
sage: numerical_integral(x^2, 0, 1, max_points=100)
|
|
128
|
+
(0.3333333333333333, 3.700743415417188e-15)
|
|
129
|
+
|
|
130
|
+
To integrate the function `\sin(x)^3 + \sin(x)` we do ::
|
|
131
|
+
|
|
132
|
+
sage: numerical_integral(sin(x)^3 + sin(x), 0, pi)
|
|
133
|
+
(3.333333333333333, 3.700743415417188e-14)
|
|
134
|
+
|
|
135
|
+
The input can be any callable::
|
|
136
|
+
|
|
137
|
+
sage: numerical_integral(lambda x: sin(x)^3 + sin(x), 0, pi)
|
|
138
|
+
(3.333333333333333, 3.700743415417188e-14)
|
|
139
|
+
|
|
140
|
+
We check this with a symbolic integration::
|
|
141
|
+
|
|
142
|
+
sage: (sin(x)^3+sin(x)).integral(x,0,pi)
|
|
143
|
+
10/3
|
|
144
|
+
|
|
145
|
+
If we want to change the error tolerances and Gauss rule used::
|
|
146
|
+
|
|
147
|
+
sage: f = x^2
|
|
148
|
+
sage: numerical_integral(f, 0, 1, max_points=200, eps_abs=1e-7, eps_rel=1e-7, rule=4)
|
|
149
|
+
(0.3333333333333333, 3.700743415417188e-15)
|
|
150
|
+
|
|
151
|
+
For a Python function with parameters::
|
|
152
|
+
|
|
153
|
+
sage: f(x,a) = 1/(a+x^2)
|
|
154
|
+
sage: [numerical_integral(f, 1, 2, max_points=100, params=[n])[0] # abs tol 1.0e-6
|
|
155
|
+
....: for n in range(10)]
|
|
156
|
+
[0.5000000000000000,
|
|
157
|
+
0.3217505543966422,
|
|
158
|
+
0.24030098317248832,
|
|
159
|
+
0.19253082576711372,
|
|
160
|
+
0.1608752771983211,
|
|
161
|
+
0.138275456763492,
|
|
162
|
+
0.1212997593570257,
|
|
163
|
+
0.10806674191683492,
|
|
164
|
+
0.09745444625553161,
|
|
165
|
+
0.08875068305030848]
|
|
166
|
+
|
|
167
|
+
sage: y = var('y')
|
|
168
|
+
sage: numerical_integral(x*y, 0, 1)
|
|
169
|
+
Traceback (most recent call last):
|
|
170
|
+
...
|
|
171
|
+
ValueError: The function to be integrated depends on 2 variables (x, y),
|
|
172
|
+
and so cannot be integrated in one dimension. Please fix additional
|
|
173
|
+
variables with the 'params' argument
|
|
174
|
+
|
|
175
|
+
Note the parameters are always a tuple even if they have one component.
|
|
176
|
+
|
|
177
|
+
It is possible to integrate on infinite intervals as well by using
|
|
178
|
+
+Infinity or -Infinity in the interval argument. For example::
|
|
179
|
+
|
|
180
|
+
sage: f = exp(-x)
|
|
181
|
+
sage: numerical_integral(f, 0, +Infinity) # random output
|
|
182
|
+
(0.99999999999957279, 1.8429811298996553e-07)
|
|
183
|
+
|
|
184
|
+
Note the coercion to the real field RR, which prevents underflow::
|
|
185
|
+
|
|
186
|
+
sage: f = exp(-x**2)
|
|
187
|
+
sage: numerical_integral(f, -Infinity, +Infinity) # random output
|
|
188
|
+
(1.7724538509060035, 3.4295192165889879e-08)
|
|
189
|
+
|
|
190
|
+
One can integrate any real-valued callable function::
|
|
191
|
+
|
|
192
|
+
sage: numerical_integral(lambda x: abs(zeta(x)), [1.1,1.5]) # random output
|
|
193
|
+
(1.8488570602160455, 2.052643677492633e-14)
|
|
194
|
+
|
|
195
|
+
We can also numerically integrate symbolic expressions using either this
|
|
196
|
+
function (which uses GSL) or the native integration (which uses Maxima)::
|
|
197
|
+
|
|
198
|
+
sage: exp(-1/x).nintegral(x, 1, 2) # via maxima
|
|
199
|
+
(0.50479221787318..., 5.60431942934407...e-15, 21, 0)
|
|
200
|
+
sage: numerical_integral(exp(-1/x), 1, 2)
|
|
201
|
+
(0.50479221787318..., 5.60431942934407...e-15)
|
|
202
|
+
|
|
203
|
+
We can also integrate constant expressions::
|
|
204
|
+
|
|
205
|
+
sage: numerical_integral(2, 1, 7)
|
|
206
|
+
(12.0, 0.0)
|
|
207
|
+
|
|
208
|
+
If the interval of integration is a point, then the result is
|
|
209
|
+
always zero (this makes sense within the Lebesgue theory of
|
|
210
|
+
integration), see :issue:`12047`::
|
|
211
|
+
|
|
212
|
+
sage: numerical_integral(log, 0, 0)
|
|
213
|
+
(0.0, 0.0)
|
|
214
|
+
sage: numerical_integral(lambda x: sqrt(x), (-2.0, -2.0) )
|
|
215
|
+
(0.0, 0.0)
|
|
216
|
+
|
|
217
|
+
In the presence of integrable singularity, the default adaptive method might
|
|
218
|
+
fail and it is advised to use ``'qags'``::
|
|
219
|
+
|
|
220
|
+
sage: b = 1.81759643554688
|
|
221
|
+
sage: F(x) = sqrt((-x + b)/((x - 1.0)*x))
|
|
222
|
+
sage: numerical_integral(F, 1, b)
|
|
223
|
+
(inf, nan)
|
|
224
|
+
sage: numerical_integral(F, 1, b, algorithm='qags') # abs tol 1e-10
|
|
225
|
+
(1.1817104238446596, 3.387268288079781e-07)
|
|
226
|
+
|
|
227
|
+
AUTHORS:
|
|
228
|
+
|
|
229
|
+
- Josh Kantor
|
|
230
|
+
- William Stein
|
|
231
|
+
- Robert Bradshaw
|
|
232
|
+
- Jeroen Demeyer
|
|
233
|
+
|
|
234
|
+
ALGORITHM: Uses calls to the GSL (GNU Scientific Library) C library.
|
|
235
|
+
Documentation can be found in [GSL]_ chapter "Numerical Integration".
|
|
236
|
+
|
|
237
|
+
TESTS:
|
|
238
|
+
|
|
239
|
+
Make sure that constant Expressions, not merely uncallable arguments,
|
|
240
|
+
can be integrated (:issue:`10088`), at least if we can coerce them
|
|
241
|
+
to float::
|
|
242
|
+
|
|
243
|
+
sage: f, g = x, x-1
|
|
244
|
+
sage: numerical_integral(f-g, -2, 2)
|
|
245
|
+
(4.0, 0.0)
|
|
246
|
+
sage: numerical_integral(SR(2.5), 5, 20)
|
|
247
|
+
(37.5, 0.0)
|
|
248
|
+
sage: numerical_integral(SR(1+3j), 2, 3)
|
|
249
|
+
Traceback (most recent call last):
|
|
250
|
+
...
|
|
251
|
+
TypeError: unable to simplify to float approximation
|
|
252
|
+
|
|
253
|
+
Check for :issue:`15496`::
|
|
254
|
+
|
|
255
|
+
sage: f = x^2/exp(-1/(x^2+1))/(x^2+1)
|
|
256
|
+
sage: D = integrate(f,(x,-infinity,infinity),hold=True)
|
|
257
|
+
sage: D.n()
|
|
258
|
+
Traceback (most recent call last):
|
|
259
|
+
...
|
|
260
|
+
ValueError: integral does not converge at -infinity
|
|
261
|
+
|
|
262
|
+
Symbolic functions can be integrated as conveniently as symbolic
|
|
263
|
+
expressions, as in :issue:`15219`::
|
|
264
|
+
|
|
265
|
+
sage: h(x) = x
|
|
266
|
+
sage: numerical_integral(h,0,1)[0] # abs tol 1e-8
|
|
267
|
+
0.5
|
|
268
|
+
"""
|
|
269
|
+
cdef double abs_err # step size
|
|
270
|
+
cdef double result
|
|
271
|
+
cdef double _a, _b
|
|
272
|
+
cdef PyFunctionWrapper wrapper # struct to pass information into GSL C function
|
|
273
|
+
|
|
274
|
+
if b is None or isinstance(a, (list, tuple)):
|
|
275
|
+
b = a[1]
|
|
276
|
+
a = a[0]
|
|
277
|
+
|
|
278
|
+
# The integral over a point is always zero
|
|
279
|
+
if a == b:
|
|
280
|
+
return (0.0, 0.0)
|
|
281
|
+
|
|
282
|
+
if not callable(func):
|
|
283
|
+
# handle the constant case
|
|
284
|
+
return (((<double>b - <double>a) * <double>func), 0.0)
|
|
285
|
+
|
|
286
|
+
cdef gsl_function F
|
|
287
|
+
cdef gsl_integration_workspace* W
|
|
288
|
+
W = NULL
|
|
289
|
+
|
|
290
|
+
if params is None:
|
|
291
|
+
params = []
|
|
292
|
+
|
|
293
|
+
if True:
|
|
294
|
+
from sage.rings.infinity import Infinity
|
|
295
|
+
try:
|
|
296
|
+
if hasattr(func, 'arguments'):
|
|
297
|
+
vars = func.arguments()
|
|
298
|
+
else:
|
|
299
|
+
vars = func.variables()
|
|
300
|
+
except (AttributeError):
|
|
301
|
+
pass
|
|
302
|
+
else:
|
|
303
|
+
if not vars:
|
|
304
|
+
# handle the constant case
|
|
305
|
+
return (((<double>b - <double>a) * <double>func), 0.0)
|
|
306
|
+
if len(vars) != 1:
|
|
307
|
+
if len(params) + 1 != len(vars):
|
|
308
|
+
raise ValueError(("The function to be integrated depends on "
|
|
309
|
+
"{} variables {}, and so cannot be "
|
|
310
|
+
"integrated in one dimension. Please fix "
|
|
311
|
+
"additional variables with the 'params' "
|
|
312
|
+
"argument").format(len(vars), tuple(vars)))
|
|
313
|
+
|
|
314
|
+
to_sub = dict(zip(vars[1:], params))
|
|
315
|
+
func = func.subs(to_sub)
|
|
316
|
+
|
|
317
|
+
# sanity checks for integration up to infinity
|
|
318
|
+
v = str(vars[0])
|
|
319
|
+
if a is -Infinity:
|
|
320
|
+
try:
|
|
321
|
+
ell = func.limit(**{v: -Infinity})
|
|
322
|
+
except (AttributeError, ValueError):
|
|
323
|
+
pass
|
|
324
|
+
else:
|
|
325
|
+
if ell.is_numeric() and not ell.is_zero():
|
|
326
|
+
raise ValueError('integral does not converge at -infinity')
|
|
327
|
+
if b is Infinity:
|
|
328
|
+
try:
|
|
329
|
+
ell = func.limit(**{v: Infinity})
|
|
330
|
+
except (AttributeError, ValueError):
|
|
331
|
+
pass
|
|
332
|
+
else:
|
|
333
|
+
if ell.is_numeric() and not ell.is_zero():
|
|
334
|
+
raise ValueError('integral does not converge at infinity')
|
|
335
|
+
func = fast_callable(func, vars=[v], domain=float)
|
|
336
|
+
# `func` is now a function of one variable,
|
|
337
|
+
# so it no longer needs any parameters
|
|
338
|
+
params = []
|
|
339
|
+
|
|
340
|
+
if not isinstance(func, compiled_integrand):
|
|
341
|
+
wrapper = PyFunctionWrapper()
|
|
342
|
+
if func is not None:
|
|
343
|
+
wrapper.the_function = func
|
|
344
|
+
else:
|
|
345
|
+
raise ValueError("No integrand defined")
|
|
346
|
+
try:
|
|
347
|
+
if not params and len(sage_getargspec(wrapper.the_function)[0]) == 1:
|
|
348
|
+
wrapper.the_parameters = []
|
|
349
|
+
elif not params and len(sage_getargspec(wrapper.the_function)[0]) > 1:
|
|
350
|
+
raise ValueError("Integrand has parameters but no parameters specified")
|
|
351
|
+
elif params:
|
|
352
|
+
wrapper.the_parameters = params
|
|
353
|
+
except TypeError:
|
|
354
|
+
wrapper.the_function = eval("lambda x: func(x)", {'func': func})
|
|
355
|
+
wrapper.the_parameters = []
|
|
356
|
+
|
|
357
|
+
F.function = c_f
|
|
358
|
+
F.params = <void *> wrapper
|
|
359
|
+
|
|
360
|
+
cdef size_t n
|
|
361
|
+
n = max_points
|
|
362
|
+
|
|
363
|
+
gsl_set_error_handler_off()
|
|
364
|
+
|
|
365
|
+
if algorithm == "qng":
|
|
366
|
+
_a = a
|
|
367
|
+
_b = b
|
|
368
|
+
sig_on()
|
|
369
|
+
gsl_integration_qng(&F, _a, _b, eps_abs, eps_rel, &result, &abs_err, &n)
|
|
370
|
+
sig_off()
|
|
371
|
+
|
|
372
|
+
elif algorithm == "qag":
|
|
373
|
+
if a is -Infinity and b is +Infinity:
|
|
374
|
+
W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
|
|
375
|
+
sig_on()
|
|
376
|
+
gsl_integration_qagi(&F, eps_abs, eps_rel, n, W, &result, &abs_err)
|
|
377
|
+
sig_off()
|
|
378
|
+
|
|
379
|
+
elif a is -Infinity:
|
|
380
|
+
_b = b
|
|
381
|
+
W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
|
|
382
|
+
sig_on()
|
|
383
|
+
gsl_integration_qagil(&F, _b, eps_abs, eps_rel, n, W, &result, &abs_err)
|
|
384
|
+
sig_off()
|
|
385
|
+
|
|
386
|
+
elif b is +Infinity:
|
|
387
|
+
_a = a
|
|
388
|
+
W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
|
|
389
|
+
sig_on()
|
|
390
|
+
gsl_integration_qagiu(&F, _a, eps_abs, eps_rel, n, W, &result, &abs_err)
|
|
391
|
+
sig_off()
|
|
392
|
+
|
|
393
|
+
else:
|
|
394
|
+
_a = a
|
|
395
|
+
_b = b
|
|
396
|
+
W = <gsl_integration_workspace*> gsl_integration_workspace_alloc(n)
|
|
397
|
+
sig_on()
|
|
398
|
+
gsl_integration_qag(&F,_a,_b,eps_abs,eps_rel,n,rule,W,&result,&abs_err)
|
|
399
|
+
sig_off()
|
|
400
|
+
|
|
401
|
+
elif algorithm == "qags":
|
|
402
|
+
|
|
403
|
+
W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
|
|
404
|
+
sig_on()
|
|
405
|
+
_a = a
|
|
406
|
+
_b = b
|
|
407
|
+
gsl_integration_qags(&F, _a, _b, eps_abs, eps_rel, n, W, &result, &abs_err)
|
|
408
|
+
sig_off()
|
|
409
|
+
|
|
410
|
+
else:
|
|
411
|
+
raise TypeError("invalid integration algorithm")
|
|
412
|
+
|
|
413
|
+
if W != NULL:
|
|
414
|
+
gsl_integration_workspace_free(W)
|
|
415
|
+
|
|
416
|
+
return result, abs_err
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
cdef double c_monte_carlo_f(double *t, size_t dim, void *params) noexcept:
|
|
420
|
+
cdef double value
|
|
421
|
+
cdef PyFunctionWrapper wrapper
|
|
422
|
+
wrapper = <PyFunctionWrapper> params
|
|
423
|
+
|
|
424
|
+
for i in range(dim):
|
|
425
|
+
wrapper.lx[i] = t[i]
|
|
426
|
+
|
|
427
|
+
try:
|
|
428
|
+
if len(wrapper.the_parameters) != 0:
|
|
429
|
+
value = wrapper.the_function(*wrapper.lx, *wrapper.the_parameters)
|
|
430
|
+
else:
|
|
431
|
+
value = wrapper.the_function(*wrapper.lx)
|
|
432
|
+
except Exception as msg:
|
|
433
|
+
print(msg)
|
|
434
|
+
return 0
|
|
435
|
+
|
|
436
|
+
return value
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
cdef double c_monte_carlo_ff(double *x, size_t dim, void *params) noexcept:
|
|
440
|
+
cdef double result
|
|
441
|
+
(<Wrapper_rdf> params).call_c(x, &result)
|
|
442
|
+
return result
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
|
|
446
|
+
params=None):
|
|
447
|
+
"""
|
|
448
|
+
Integrate ``func`` by Monte-Carlo method.
|
|
449
|
+
|
|
450
|
+
Integrate ``func`` over the ``dim``-dimensional hypercubic region
|
|
451
|
+
defined by the lower and upper limits in the arrays ``xl`` and
|
|
452
|
+
``xu``, each of size ``dim``.
|
|
453
|
+
|
|
454
|
+
The integration uses a fixed number of function calls and obtains
|
|
455
|
+
random sampling points using the default gsl's random number generator.
|
|
456
|
+
|
|
457
|
+
ALGORITHM: Uses calls to the GSL (GNU Scientific Library) C library.
|
|
458
|
+
Documentation can be found in [GSL]_ chapter "Monte Carlo Integration".
|
|
459
|
+
|
|
460
|
+
INPUT:
|
|
461
|
+
|
|
462
|
+
- ``func`` -- the function to integrate
|
|
463
|
+
- ``params`` -- used to pass parameters to your function
|
|
464
|
+
- ``xl`` -- list of lower limits
|
|
465
|
+
- ``xu`` -- list of upper limits
|
|
466
|
+
- ``calls`` -- number of functions calls used
|
|
467
|
+
- ``algorithm`` -- valid choices are:
|
|
468
|
+
|
|
469
|
+
* 'plain' -- The plain Monte Carlo algorithm samples points randomly
|
|
470
|
+
from the integration region to estimate the integral and its error.
|
|
471
|
+
* 'miser' -- The MISER algorithm of Press and Farrar is based on
|
|
472
|
+
recursive stratified sampling
|
|
473
|
+
* 'vegas' -- The VEGAS algorithm of Lepage is based on importance
|
|
474
|
+
sampling.
|
|
475
|
+
|
|
476
|
+
OUTPUT:
|
|
477
|
+
|
|
478
|
+
A tuple whose first component is the approximated integral and whose second
|
|
479
|
+
component is an error estimate.
|
|
480
|
+
|
|
481
|
+
EXAMPLES::
|
|
482
|
+
|
|
483
|
+
sage: x, y = SR.var('x,y')
|
|
484
|
+
sage: monte_carlo_integral(x*y, [0,0], [2,2], 10000) # abs tol 0.1
|
|
485
|
+
(4.0, 0.0)
|
|
486
|
+
sage: integral(integral(x*y, (x,0,2)), (y,0,2))
|
|
487
|
+
4
|
|
488
|
+
|
|
489
|
+
An example with a parameter::
|
|
490
|
+
|
|
491
|
+
sage: x, y, z = SR.var('x,y,z')
|
|
492
|
+
sage: monte_carlo_integral(x*y*z, [0,0], [2,2], 10000, params=[1.2]) # abs tol 0.1
|
|
493
|
+
(4.8, 0.0)
|
|
494
|
+
|
|
495
|
+
Integral of a constant::
|
|
496
|
+
|
|
497
|
+
sage: monte_carlo_integral(3, [0,0], [2,2], 10000) # abs tol 0.1
|
|
498
|
+
(12, 0.0)
|
|
499
|
+
|
|
500
|
+
Test different algorithms::
|
|
501
|
+
|
|
502
|
+
sage: x, y, z = SR.var('x,y,z')
|
|
503
|
+
sage: f(x,y,z) = exp(z) * cos(x + sin(y))
|
|
504
|
+
sage: for algo in ['plain', 'miser', 'vegas']: # abs tol 0.01
|
|
505
|
+
....: monte_carlo_integral(f, [0,0,-1], [2,2,1], 10^6, algorithm=algo)
|
|
506
|
+
(-1.06, 0.01)
|
|
507
|
+
(-1.06, 0.01)
|
|
508
|
+
(-1.06, 0.01)
|
|
509
|
+
|
|
510
|
+
Tests with Python functions::
|
|
511
|
+
|
|
512
|
+
sage: def f(u, v): return u * v
|
|
513
|
+
sage: monte_carlo_integral(f, [0,0], [2,2], 10000) # abs tol 0.1
|
|
514
|
+
(4.0, 0.0)
|
|
515
|
+
sage: monte_carlo_integral(lambda u,v: u*v, [0,0], [2,2], 10000) # abs tol 0.1
|
|
516
|
+
(4.0, 0.0)
|
|
517
|
+
sage: def f(x1, x2, x3, x4): return x1*x2*x3*x4
|
|
518
|
+
sage: monte_carlo_integral(f, [0,0], [2,2], 1000, params=[0.6,2]) # abs tol 0.2
|
|
519
|
+
(4.8, 0.0)
|
|
520
|
+
|
|
521
|
+
TESTS::
|
|
522
|
+
|
|
523
|
+
sage: monte_carlo_integral(f, [0,0,0], [2,2], 10)
|
|
524
|
+
Traceback (most recent call last):
|
|
525
|
+
...
|
|
526
|
+
TypeError: xl and xu must be lists of floating point values of identical lengths
|
|
527
|
+
sage: monte_carlo_integral(f, [0,0], [2,2], 1, algorithm='unicorn')
|
|
528
|
+
Traceback (most recent call last):
|
|
529
|
+
...
|
|
530
|
+
ValueError: 'unicorn' is an invalid value for algorithm
|
|
531
|
+
sage: monte_carlo_integral(lambda x,y: y*x, [], [], 1)
|
|
532
|
+
Traceback (most recent call last):
|
|
533
|
+
...
|
|
534
|
+
NotImplementedError: 0 dimensional integration not available
|
|
535
|
+
sage: monte_carlo_integral(x*y, [0,0,0], [2,2,2], 1)
|
|
536
|
+
Traceback (most recent call last):
|
|
537
|
+
...
|
|
538
|
+
ValueError: The function to be integrated depends on 2 variables (x, y),
|
|
539
|
+
and so cannot be integrated in 3 dimensions. Please fix additional
|
|
540
|
+
variables with the 'params' argument
|
|
541
|
+
sage: def f(x, y): return x*y
|
|
542
|
+
sage: monte_carlo_integral(f, [0,0,0], [2,2,2], 100)
|
|
543
|
+
Traceback (most recent call last):
|
|
544
|
+
...
|
|
545
|
+
ValueError: The function to be integrated depends on 2 variables ('x', 'y'),
|
|
546
|
+
and so cannot be integrated in 3 dimensions. Please fix additional
|
|
547
|
+
variables with the 'params' argument
|
|
548
|
+
sage: monte_carlo_integral(x*y, [0], [2], 1)
|
|
549
|
+
Traceback (most recent call last):
|
|
550
|
+
...
|
|
551
|
+
ValueError: The function to be integrated depends on 2 variables (x, y),
|
|
552
|
+
and so cannot be integrated in 1 dimensions. Please add more items in
|
|
553
|
+
upper and lower limits
|
|
554
|
+
sage: monte_carlo_integral(f, [0], [2], 100)
|
|
555
|
+
Traceback (most recent call last):
|
|
556
|
+
...
|
|
557
|
+
ValueError: The function to be integrated depends on 2 variables ('x', 'y'),
|
|
558
|
+
and so cannot be integrated in 1 dimensions. Please add more items in
|
|
559
|
+
upper and lower limits
|
|
560
|
+
|
|
561
|
+
AUTHORS:
|
|
562
|
+
|
|
563
|
+
- Vincent Delecroix
|
|
564
|
+
- Vincent Klein
|
|
565
|
+
"""
|
|
566
|
+
cdef double result
|
|
567
|
+
cdef double abs_err
|
|
568
|
+
cdef gsl_monte_function F
|
|
569
|
+
cdef PyFunctionWrapper wrapper # struct to pass information into GSL Monte C function
|
|
570
|
+
cdef gsl_monte_plain_state* state_plain = NULL
|
|
571
|
+
cdef gsl_monte_miser_state* state_miser = NULL
|
|
572
|
+
cdef gsl_monte_vegas_state* state_vegas = NULL
|
|
573
|
+
cdef gsl_rng_type *type_rng
|
|
574
|
+
cdef gsl_rng *_rng
|
|
575
|
+
cdef size_t dim
|
|
576
|
+
cdef double *_xl
|
|
577
|
+
cdef double *_xu
|
|
578
|
+
cdef MemoryAllocator mem = MemoryAllocator()
|
|
579
|
+
|
|
580
|
+
if not isinstance(xl, (tuple, list)) or \
|
|
581
|
+
not isinstance(xu, (tuple, list)) or \
|
|
582
|
+
len(xl) != len(xu):
|
|
583
|
+
raise TypeError("xl and xu must be lists of floating point values of"
|
|
584
|
+
" identical lengths")
|
|
585
|
+
|
|
586
|
+
if algorithm not in ('plain', 'miser', 'vegas'):
|
|
587
|
+
raise ValueError("'{}' is an invalid value for algorithm".format(algorithm))
|
|
588
|
+
|
|
589
|
+
dim = len(xl)
|
|
590
|
+
if not dim:
|
|
591
|
+
raise NotImplementedError("0 dimensional integration not available")
|
|
592
|
+
|
|
593
|
+
if params is None:
|
|
594
|
+
params = []
|
|
595
|
+
|
|
596
|
+
# Initialize hypercubic region's lower and upper limits
|
|
597
|
+
_xl = <double *> mem.calloc(dim, sizeof(double))
|
|
598
|
+
_xu = <double *> mem.calloc(dim, sizeof(double))
|
|
599
|
+
for i in range(dim):
|
|
600
|
+
_xl[i] = <double> xl[i]
|
|
601
|
+
_xu[i] = <double> xu[i]
|
|
602
|
+
|
|
603
|
+
if not callable(func):
|
|
604
|
+
# constant. Note that all Expression objects are callable.
|
|
605
|
+
v = float(1)
|
|
606
|
+
for i in range(dim):
|
|
607
|
+
v *= _xu[i] - _xl[i]
|
|
608
|
+
return (v * <double?> func, 0.0)
|
|
609
|
+
|
|
610
|
+
elif not isinstance(func, Wrapper_rdf):
|
|
611
|
+
# func is either an Expression or another callable.
|
|
612
|
+
try:
|
|
613
|
+
vars = func.arguments()
|
|
614
|
+
except AttributeError:
|
|
615
|
+
try:
|
|
616
|
+
vars = func.variables()
|
|
617
|
+
except AttributeError:
|
|
618
|
+
vars = sage_getargspec(func)[0]
|
|
619
|
+
|
|
620
|
+
target_dim = dim + len(params)
|
|
621
|
+
if len(vars) < target_dim:
|
|
622
|
+
raise ValueError(("The function to be integrated depends on "
|
|
623
|
+
"{} variables {}, and so cannot be "
|
|
624
|
+
"integrated in {} dimensions. Please fix "
|
|
625
|
+
"additional variables with the 'params' "
|
|
626
|
+
"argument").format(len(vars), tuple(vars),
|
|
627
|
+
target_dim))
|
|
628
|
+
elif len(vars) > target_dim:
|
|
629
|
+
raise ValueError(("The function to be integrated depends on "
|
|
630
|
+
"{} variables {}, and so cannot be "
|
|
631
|
+
"integrated in {} dimensions. Please add "
|
|
632
|
+
"more items in upper and lower limits"
|
|
633
|
+
).format(len(vars), tuple(vars), target_dim))
|
|
634
|
+
|
|
635
|
+
from sage.structure.element import Expression
|
|
636
|
+
if isinstance(func, Expression):
|
|
637
|
+
if params:
|
|
638
|
+
to_sub = dict(zip(vars[-len(params):], params))
|
|
639
|
+
func = func.subs(to_sub)
|
|
640
|
+
vars = vars[:dim]
|
|
641
|
+
|
|
642
|
+
func = fast_callable(func, domain=RDF, vars=vars)
|
|
643
|
+
|
|
644
|
+
if isinstance(func, Wrapper_rdf):
|
|
645
|
+
F.dim = dim
|
|
646
|
+
F.f = c_monte_carlo_ff
|
|
647
|
+
F.params = <void *>func
|
|
648
|
+
else:
|
|
649
|
+
wrapper = PyFunctionWrapper()
|
|
650
|
+
wrapper.the_function = func
|
|
651
|
+
|
|
652
|
+
if not params and len(sage_getargspec(wrapper.the_function)[0]) == dim:
|
|
653
|
+
wrapper.the_parameters = []
|
|
654
|
+
elif not params and len(sage_getargspec(wrapper.the_function)[0]) > dim:
|
|
655
|
+
raise ValueError("Integrand has parameters but no parameters specified")
|
|
656
|
+
elif params:
|
|
657
|
+
wrapper.the_parameters = params
|
|
658
|
+
wrapper.lx = [None] * dim
|
|
659
|
+
|
|
660
|
+
F.dim = dim
|
|
661
|
+
F.f = c_monte_carlo_f
|
|
662
|
+
F.params = <void *> wrapper
|
|
663
|
+
|
|
664
|
+
try:
|
|
665
|
+
# Initialize the random number generator
|
|
666
|
+
gsl_rng_env_setup()
|
|
667
|
+
type_rng = gsl_rng_default
|
|
668
|
+
_rng = gsl_rng_alloc(type_rng)
|
|
669
|
+
|
|
670
|
+
if algorithm == 'plain':
|
|
671
|
+
state_plain = <gsl_monte_plain_state*> gsl_monte_plain_alloc(dim)
|
|
672
|
+
sig_on()
|
|
673
|
+
gsl_monte_plain_integrate(&F, _xl, _xu, dim, calls, _rng,
|
|
674
|
+
state_plain, &result, &abs_err)
|
|
675
|
+
sig_off()
|
|
676
|
+
elif algorithm == 'miser':
|
|
677
|
+
state_miser = <gsl_monte_miser_state*> gsl_monte_miser_alloc(dim)
|
|
678
|
+
sig_on()
|
|
679
|
+
gsl_monte_miser_integrate(&F, _xl, _xu, dim, calls, _rng,
|
|
680
|
+
state_miser, &result, &abs_err)
|
|
681
|
+
sig_off()
|
|
682
|
+
elif algorithm == 'vegas':
|
|
683
|
+
state_vegas = <gsl_monte_vegas_state*> gsl_monte_vegas_alloc(dim)
|
|
684
|
+
sig_on()
|
|
685
|
+
gsl_monte_vegas_integrate(&F, _xl, _xu, dim, calls, _rng,
|
|
686
|
+
state_vegas, &result, &abs_err)
|
|
687
|
+
sig_off()
|
|
688
|
+
finally:
|
|
689
|
+
gsl_rng_free(_rng)
|
|
690
|
+
|
|
691
|
+
if state_plain != NULL:
|
|
692
|
+
gsl_monte_plain_free(state_plain)
|
|
693
|
+
elif state_miser != NULL:
|
|
694
|
+
gsl_monte_miser_free(state_miser)
|
|
695
|
+
elif state_vegas != NULL:
|
|
696
|
+
gsl_monte_vegas_free(state_vegas)
|
|
697
|
+
|
|
698
|
+
return result, abs_err
|
|
Binary file
|