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
sage/calculus/ode.pyx
ADDED
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Solving ODE numerically by GSL
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Joshua Kantor (2004-2006)
|
|
8
|
+
|
|
9
|
+
- Robert Marik (2010 - fixed docstrings)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2004,2005,2006 Joshua Kantor <kantor.jm@gmail.com>
|
|
14
|
+
#
|
|
15
|
+
# This program is free software: you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of the GNU General Public License as published by
|
|
17
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
18
|
+
# (at your option) any later version.
|
|
19
|
+
# https://www.gnu.org/licenses/
|
|
20
|
+
# ****************************************************************************
|
|
21
|
+
|
|
22
|
+
from cysignals.memory cimport sig_malloc, sig_free
|
|
23
|
+
from cysignals.signals cimport sig_on, sig_off
|
|
24
|
+
|
|
25
|
+
from sage.misc.sageinspect import sage_getargspec
|
|
26
|
+
from sage.libs.gsl.types cimport *
|
|
27
|
+
from sage.libs.gsl.odeiv cimport *
|
|
28
|
+
import sage.calculus.interpolation
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
cdef class PyFunctionWrapper:
|
|
32
|
+
cdef object the_function
|
|
33
|
+
cdef object the_jacobian
|
|
34
|
+
cdef object the_parameters
|
|
35
|
+
cdef int y_n
|
|
36
|
+
|
|
37
|
+
cdef set_yn(self, x):
|
|
38
|
+
self.y_n = x
|
|
39
|
+
|
|
40
|
+
cdef class ode_system:
|
|
41
|
+
cdef int c_j(self, double t, double *y, double *dfdy, double *dfdt) noexcept:
|
|
42
|
+
return 0
|
|
43
|
+
|
|
44
|
+
cdef int c_f(self, double t, double* y, double* dydt) noexcept:
|
|
45
|
+
return 0
|
|
46
|
+
|
|
47
|
+
cdef int c_jac_compiled(double t, const double *y, double *dfdy, double *dfdt, void *params) noexcept:
|
|
48
|
+
cdef int status
|
|
49
|
+
cdef ode_system wrapper
|
|
50
|
+
wrapper = <ode_system> params
|
|
51
|
+
status = wrapper.c_j(t, y, dfdy, dfdt) # Could add parameters
|
|
52
|
+
return status
|
|
53
|
+
|
|
54
|
+
cdef int c_f_compiled(double t, const double *y, double *dydt, void *params) noexcept:
|
|
55
|
+
cdef int status
|
|
56
|
+
cdef ode_system wrapper
|
|
57
|
+
wrapper = <ode_system> params
|
|
58
|
+
status = wrapper.c_f(t, y, dydt) # Could add parameters
|
|
59
|
+
return status
|
|
60
|
+
|
|
61
|
+
cdef int c_jac(double t, const double *y, double *dfdy, double *dfdt, void *params) noexcept:
|
|
62
|
+
cdef int i
|
|
63
|
+
cdef int j
|
|
64
|
+
cdef int y_n
|
|
65
|
+
cdef PyFunctionWrapper wrapper
|
|
66
|
+
wrapper = <PyFunctionWrapper > params
|
|
67
|
+
y_n = wrapper.y_n
|
|
68
|
+
y_list = [y[i] for i in range(y_n)]
|
|
69
|
+
try:
|
|
70
|
+
if len(wrapper.the_parameters) == 0:
|
|
71
|
+
jac_list = wrapper.the_jacobian(t, y_list)
|
|
72
|
+
else:
|
|
73
|
+
jac_list = wrapper.the_jacobian(t, y_list, wrapper.the_parameters)
|
|
74
|
+
for i in range(y_n):
|
|
75
|
+
for j in range(y_n):
|
|
76
|
+
dfdy[i * y_n + j] = jac_list[i][j]
|
|
77
|
+
|
|
78
|
+
for i in range(y_n):
|
|
79
|
+
dfdt[i] = jac_list[y_n][i]
|
|
80
|
+
|
|
81
|
+
return GSL_SUCCESS
|
|
82
|
+
except Exception:
|
|
83
|
+
return -1
|
|
84
|
+
|
|
85
|
+
cdef int c_f(double t, const double *y, double *dydt, void *params) noexcept:
|
|
86
|
+
cdef int i
|
|
87
|
+
cdef int y_n
|
|
88
|
+
|
|
89
|
+
cdef PyFunctionWrapper wrapper
|
|
90
|
+
wrapper = <PyFunctionWrapper> params
|
|
91
|
+
y_n = wrapper.y_n
|
|
92
|
+
y_list = []
|
|
93
|
+
for i in range(y_n):
|
|
94
|
+
y_list.append(y[i])
|
|
95
|
+
try:
|
|
96
|
+
if len(wrapper.the_parameters) != 0:
|
|
97
|
+
dydt_list = wrapper.the_function(t, y_list, wrapper.the_parameters)
|
|
98
|
+
else:
|
|
99
|
+
dydt_list = wrapper.the_function(t, y_list)
|
|
100
|
+
for i in range(y_n):
|
|
101
|
+
dydt[i] = dydt_list[i]
|
|
102
|
+
return GSL_SUCCESS
|
|
103
|
+
except Exception:
|
|
104
|
+
return -1
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class ode_solver():
|
|
108
|
+
r"""
|
|
109
|
+
:meth:`ode_solver` is a class that wraps the GSL library's ode solver routines.
|
|
110
|
+
|
|
111
|
+
To use it, instantiate the class::
|
|
112
|
+
|
|
113
|
+
sage: T = ode_solver()
|
|
114
|
+
|
|
115
|
+
To solve a system of the form `dy_i/dt=f_i(t,y)`, you must
|
|
116
|
+
supply a vector or tuple/list valued function ``f`` representing
|
|
117
|
+
`f_i`. The functions `f` and the jacobian should have the
|
|
118
|
+
form ``foo(t,y)`` or ``foo(t,y,params)``. ``params`` which is
|
|
119
|
+
optional allows for your function to depend on one or a tuple of
|
|
120
|
+
parameters. Note if you use it, ``params`` must be a tuple even
|
|
121
|
+
if it only has one component. For example if you wanted to solve
|
|
122
|
+
`y''+y=0`, you would need to write it as a first order system::
|
|
123
|
+
|
|
124
|
+
y_0' = y_1
|
|
125
|
+
y_1' = -y_0
|
|
126
|
+
|
|
127
|
+
In code::
|
|
128
|
+
|
|
129
|
+
sage: f = lambda t, y: [y[1], -y[0]]
|
|
130
|
+
sage: T.function = f
|
|
131
|
+
|
|
132
|
+
For some algorithms, the jacobian must be supplied as well, the
|
|
133
|
+
form of this should be a function returning a list of lists of the
|
|
134
|
+
form ``[ [df_1/dy_1,...,df_1/dy_n], ...,
|
|
135
|
+
[df_n/dy_1,...,df_n,dy_n], [df_1/dt,...,df_n/dt] ]``.
|
|
136
|
+
|
|
137
|
+
There are examples below, if your jacobian was the function
|
|
138
|
+
``my_jacobian`` you would do::
|
|
139
|
+
|
|
140
|
+
sage: T.jacobian = my_jacobian # not tested, since it doesn't make sense to test this
|
|
141
|
+
|
|
142
|
+
There are a variety of algorithms available for different types of systems. Possible algorithms are
|
|
143
|
+
|
|
144
|
+
- ``'rkf45'`` -- Runge-Kutta-Fehlberg (4,5)
|
|
145
|
+
|
|
146
|
+
- ``'rk2'`` -- embedded Runge-Kutta (2,3)
|
|
147
|
+
|
|
148
|
+
- ``'rk4'`` -- `4`-th order classical Runge-Kutta
|
|
149
|
+
|
|
150
|
+
- ``'rk8pd'`` -- Runge-Kutta Prince-Dormand (8,9)
|
|
151
|
+
|
|
152
|
+
- ``'rk2imp'`` -- implicit 2nd order Runge-Kutta at gaussian points
|
|
153
|
+
|
|
154
|
+
- ``'rk4imp'`` -- implicit `4`-th order Runge-Kutta at gaussian points
|
|
155
|
+
|
|
156
|
+
- ``'bsimp'`` -- implicit Burlisch-Stoer (requires jacobian)
|
|
157
|
+
|
|
158
|
+
- ``'gear1'`` -- M=1 implicit gear
|
|
159
|
+
|
|
160
|
+
- ``'gear2'`` -- M=2 implicit gear
|
|
161
|
+
|
|
162
|
+
The default algorithm is ``'rkf45'``. If you instead wanted to use
|
|
163
|
+
``'bsimp'`` you would do::
|
|
164
|
+
|
|
165
|
+
sage: T.algorithm = "bsimp"
|
|
166
|
+
|
|
167
|
+
The user should supply initial conditions in ``y_0``. For example if
|
|
168
|
+
your initial conditions are `y_0=1, y_1=1`, do::
|
|
169
|
+
|
|
170
|
+
sage: T.y_0 = [1,1]
|
|
171
|
+
|
|
172
|
+
The actual solver is invoked by the method :meth:`ode_solve`. It
|
|
173
|
+
has arguments ``t_span``, ``y_0``, ``num_points``, ``params``.
|
|
174
|
+
``y_0`` must be supplied either as an argument or above by
|
|
175
|
+
assignment. Params which are optional and only necessary if your
|
|
176
|
+
system uses ``params`` can be supplied to ``ode_solve`` or by
|
|
177
|
+
assignment.
|
|
178
|
+
|
|
179
|
+
``t_span`` is the time interval on which to solve the ode. There
|
|
180
|
+
are two ways to specify ``t_span``:
|
|
181
|
+
|
|
182
|
+
* If ``num_points`` is not specified, then the sequence ``t_span``
|
|
183
|
+
is used as the time points for the solution. Note that the
|
|
184
|
+
first element ``t_span[0]`` is the initial time, where the
|
|
185
|
+
initial condition ``y_0`` is the specified solution, and
|
|
186
|
+
subsequent elements are the ones where the solution is computed.
|
|
187
|
+
|
|
188
|
+
* If ``num_points`` is specified and ``t_span`` is a sequence with
|
|
189
|
+
just 2 elements, then these are the starting and ending times,
|
|
190
|
+
and the solution will be computed at ``num_points`` equally
|
|
191
|
+
spaced points between ``t_span[0]`` and ``t_span[1]``. The
|
|
192
|
+
initial condition is also included in the output so that
|
|
193
|
+
``num_points + 1`` total points are returned. E.g. if ``t_span
|
|
194
|
+
= [0.0, 1.0]`` and ``num_points = 10``, then solution is
|
|
195
|
+
returned at the 11 time points ``[0.0, 0.1, 0.2, 0.3, 0.4, 0.5,
|
|
196
|
+
0.6, 0.7, 0.8, 0.9, 1.0]``.
|
|
197
|
+
|
|
198
|
+
(Note that if ``num_points`` is specified and ``t_span`` is not
|
|
199
|
+
length 2 then ``t_span`` are used as the time points and
|
|
200
|
+
``num_points`` is ignored.)
|
|
201
|
+
|
|
202
|
+
Error is estimated via the expression ``D_i =
|
|
203
|
+
error_abs*s_i+error_rel*(a|y_i|+a_dydt*h*|y_i'|)``. The user can
|
|
204
|
+
specify
|
|
205
|
+
|
|
206
|
+
- ``error_abs`` (1e-10 by default),
|
|
207
|
+
- ``error_rel`` (1e-10 by default),
|
|
208
|
+
- ``a`` (1 by default),
|
|
209
|
+
- ``a_dydt`` (0 by default) and
|
|
210
|
+
- ``s_i`` (as ``scaling_abs`` which should be a tuple and is 1 in all
|
|
211
|
+
components by default).
|
|
212
|
+
|
|
213
|
+
If you specify one of ``a`` or ``a_dydt``
|
|
214
|
+
you must specify the other. You may specify ``a`` and ``a_dydt``
|
|
215
|
+
without ``scaling_abs`` (which will be taken =1 be default).
|
|
216
|
+
``h`` is the initial step size, which is 1e-2 by default.
|
|
217
|
+
|
|
218
|
+
``ode_solve`` solves the solution as a list of tuples of the form,
|
|
219
|
+
``[ (t_0,[y_1,...,y_n]),(t_1,[y_1,...,y_n]),...,(t_n,[y_1,...,y_n])]``.
|
|
220
|
+
|
|
221
|
+
This data is stored in the variable solutions::
|
|
222
|
+
|
|
223
|
+
sage: T.solution # not tested
|
|
224
|
+
|
|
225
|
+
EXAMPLES:
|
|
226
|
+
|
|
227
|
+
Consider solving the Van der Pol oscillator `x''(t) +
|
|
228
|
+
ux'(t)(x(t)^2-1)+x(t)=0` between `t=0` and `t= 100`. As a first
|
|
229
|
+
order system it is `x'=y`, `y'=-x+uy(1-x^2)`. Let us take `u=10`
|
|
230
|
+
and use initial conditions `(x,y)=(1,0)` and use the Runge-Kutta
|
|
231
|
+
Prince-Dormand algorithm. ::
|
|
232
|
+
|
|
233
|
+
sage: def f_1(t, y, params):
|
|
234
|
+
....: return [y[1], -y[0] - params[0]*y[1]*(y[0]**2-1.0)]
|
|
235
|
+
|
|
236
|
+
sage: def j_1(t, y, params):
|
|
237
|
+
....: return [[0.0, 1.0],
|
|
238
|
+
....: [-2.0*params[0]*y[0]*y[1] - 1.0, -params[0]*(y[0]*y[0]-1.0)],
|
|
239
|
+
....: [0.0, 0.0]]
|
|
240
|
+
|
|
241
|
+
sage: T = ode_solver()
|
|
242
|
+
sage: T.algorithm = "rk8pd"
|
|
243
|
+
sage: T.function = f_1
|
|
244
|
+
sage: T.jacobian = j_1
|
|
245
|
+
sage: T.ode_solve(y_0=[1,0], t_span=[0,100], params=[10.0], num_points=1000)
|
|
246
|
+
sage: import tempfile
|
|
247
|
+
sage: with tempfile.NamedTemporaryFile(suffix='.png') as f: # needs sage.plot
|
|
248
|
+
....: T.plot_solution(filename=f.name)
|
|
249
|
+
|
|
250
|
+
The solver line is equivalent to::
|
|
251
|
+
|
|
252
|
+
sage: T.ode_solve(y_0=[1,0], t_span=[x/10.0 for x in range(1000)], params=[10.0])
|
|
253
|
+
|
|
254
|
+
Let's try a system::
|
|
255
|
+
|
|
256
|
+
y_0'=y_1*y_2
|
|
257
|
+
y_1'=-y_0*y_2
|
|
258
|
+
y_2'=-.51*y_0*y_1
|
|
259
|
+
|
|
260
|
+
We will not use the jacobian this time and will change the
|
|
261
|
+
error tolerances. ::
|
|
262
|
+
|
|
263
|
+
sage: g_1 = lambda t,y: [y[1]*y[2], -y[0]*y[2], -0.51*y[0]*y[1]]
|
|
264
|
+
sage: T.function = g_1
|
|
265
|
+
sage: T.y_0 = [0,1,1]
|
|
266
|
+
sage: T.scale_abs = [1e-4, 1e-4, 1e-5]
|
|
267
|
+
sage: T.error_rel = 1e-4
|
|
268
|
+
sage: T.ode_solve(t_span=[0,12], num_points=100)
|
|
269
|
+
|
|
270
|
+
By default ``T.plot_solution()`` plots the `y_0`; to plot general `y_i`, use::
|
|
271
|
+
|
|
272
|
+
sage: with tempfile.NamedTemporaryFile(suffix='.png') as f: # needs sage.plot
|
|
273
|
+
....: T.plot_solution(i=0, filename=f.name)
|
|
274
|
+
....: T.plot_solution(i=1, filename=f.name)
|
|
275
|
+
....: T.plot_solution(i=2, filename=f.name)
|
|
276
|
+
|
|
277
|
+
The method interpolate_solution will return a spline interpolation
|
|
278
|
+
through the points found by the solver. By default, `y_0` is
|
|
279
|
+
interpolated. You can interpolate `y_i` through the keyword
|
|
280
|
+
argument ``i``. ::
|
|
281
|
+
|
|
282
|
+
sage: f = T.interpolate_solution()
|
|
283
|
+
sage: plot(f,0,12).show() # needs sage.plot
|
|
284
|
+
sage: f = T.interpolate_solution(i=1)
|
|
285
|
+
sage: plot(f,0,12).show() # needs sage.plot
|
|
286
|
+
sage: f = T.interpolate_solution(i=2)
|
|
287
|
+
sage: plot(f,0,12).show() # needs sage.plot
|
|
288
|
+
sage: f = T.interpolate_solution()
|
|
289
|
+
sage: from math import pi
|
|
290
|
+
sage: f(pi)
|
|
291
|
+
0.5379...
|
|
292
|
+
|
|
293
|
+
The solver attributes may also be set up using arguments to
|
|
294
|
+
ode_solver. The previous example can be rewritten as::
|
|
295
|
+
|
|
296
|
+
sage: T = ode_solver(g_1, y_0=[0,1,1], scale_abs=[1e-4,1e-4,1e-5],
|
|
297
|
+
....: error_rel=1e-4, algorithm='rk8pd')
|
|
298
|
+
sage: T.ode_solve(t_span=[0,12], num_points=100)
|
|
299
|
+
sage: f = T.interpolate_solution()
|
|
300
|
+
sage: f(pi)
|
|
301
|
+
0.5379...
|
|
302
|
+
|
|
303
|
+
Unfortunately because Python functions are used, this solver
|
|
304
|
+
is slow on systems that require many function evaluations. It
|
|
305
|
+
is possible to pass a compiled function by deriving from the
|
|
306
|
+
class :class:`ode_system` and overloading ``c_f`` and ``c_j`` with C
|
|
307
|
+
functions that specify the system. The following will work in the
|
|
308
|
+
notebook:
|
|
309
|
+
|
|
310
|
+
.. code-block:: cython
|
|
311
|
+
|
|
312
|
+
%cython
|
|
313
|
+
cimport sage.calculus.ode
|
|
314
|
+
import sage.calculus.ode
|
|
315
|
+
from sage.libs.gsl.all cimport *
|
|
316
|
+
|
|
317
|
+
cdef class van_der_pol(sage.calculus.ode.ode_system):
|
|
318
|
+
cdef int c_f(self, double t, double *y, double *dydt):
|
|
319
|
+
dydt[0]=y[1]
|
|
320
|
+
dydt[1]=-y[0]-1000*y[1]*(y[0]*y[0]-1)
|
|
321
|
+
return GSL_SUCCESS
|
|
322
|
+
cdef int c_j(self, double t, double *y, double *dfdy, double *dfdt):
|
|
323
|
+
dfdy[0]=0
|
|
324
|
+
dfdy[1]=1.0
|
|
325
|
+
dfdy[2]=-2.0*1000*y[0]*y[1]-1.0
|
|
326
|
+
dfdy[3]=-1000*(y[0]*y[0]-1.0)
|
|
327
|
+
dfdt[0]=0
|
|
328
|
+
dfdt[1]=0
|
|
329
|
+
return GSL_SUCCESS
|
|
330
|
+
|
|
331
|
+
After executing the above block of code you can do the
|
|
332
|
+
following (WARNING: the following is *not* automatically
|
|
333
|
+
doctested)::
|
|
334
|
+
|
|
335
|
+
sage: # not tested
|
|
336
|
+
sage: T = ode_solver()
|
|
337
|
+
sage: T.algorithm = "bsimp"
|
|
338
|
+
sage: vander = van_der_pol()
|
|
339
|
+
sage: T.function = vander
|
|
340
|
+
sage: T.ode_solve(y_0=[1, 0], t_span=[0, 2000],
|
|
341
|
+
....: num_points=1000)
|
|
342
|
+
sage: from tempfile import NamedTemporaryFile
|
|
343
|
+
sage: with NamedTemporaryFile(suffix='.png') as f:
|
|
344
|
+
....: T.plot_solution(i=0, filename=f.name)
|
|
345
|
+
"""
|
|
346
|
+
def __init__(self, function=None, jacobian=None, h=1e-2, error_abs=1e-10,
|
|
347
|
+
error_rel=1e-10, a=False, a_dydt=False, scale_abs=False,
|
|
348
|
+
algorithm='rkf45', y_0=None, t_span=None, params=None):
|
|
349
|
+
self.function = function
|
|
350
|
+
self.jacobian = jacobian
|
|
351
|
+
self.h = h
|
|
352
|
+
self.error_abs = error_abs
|
|
353
|
+
self.error_rel = error_rel
|
|
354
|
+
self.a = a
|
|
355
|
+
self.a_dydt = a_dydt
|
|
356
|
+
self.scale_abs = scale_abs
|
|
357
|
+
self.algorithm = algorithm
|
|
358
|
+
self.y_0 = y_0
|
|
359
|
+
self.t_span = t_span
|
|
360
|
+
self.params = [] if params is None else params
|
|
361
|
+
self.solution = []
|
|
362
|
+
|
|
363
|
+
def __setattr__(self, name, value):
|
|
364
|
+
if hasattr(self, 'solution'):
|
|
365
|
+
object.__setattr__(self, 'solution', [])
|
|
366
|
+
object.__setattr__(self, name, value)
|
|
367
|
+
|
|
368
|
+
def interpolate_solution(self, i=0):
|
|
369
|
+
pts = [(t, y[i]) for t, y in self.solution]
|
|
370
|
+
return sage.calculus.interpolation.spline(pts)
|
|
371
|
+
|
|
372
|
+
def plot_solution(self, i=0, filename=None, interpolate=False, **kwds):
|
|
373
|
+
r"""
|
|
374
|
+
Plot a one dimensional projection of the solution.
|
|
375
|
+
|
|
376
|
+
INPUT:
|
|
377
|
+
|
|
378
|
+
- ``i`` -- nonnegative integer; composant of the projection
|
|
379
|
+
|
|
380
|
+
- ``filename`` -- string or ``None``; whether to plot the picture or
|
|
381
|
+
save it in a file
|
|
382
|
+
|
|
383
|
+
- ``interpolate`` -- whether to interpolate between the points of the
|
|
384
|
+
discretized solution
|
|
385
|
+
|
|
386
|
+
- additional keywords are passed to the graphics primitive
|
|
387
|
+
|
|
388
|
+
EXAMPLES::
|
|
389
|
+
|
|
390
|
+
sage: T = ode_solver()
|
|
391
|
+
sage: T.function = lambda t,y: [cos(y[0]) * sin(t)]
|
|
392
|
+
sage: T.jacobian = lambda t,y: [[-sin(y[0]) * sin(t)]]
|
|
393
|
+
sage: T.ode_solve(y_0=[1],t_span=[0,20],num_points=1000)
|
|
394
|
+
sage: T.plot_solution() # needs sage.plot
|
|
395
|
+
|
|
396
|
+
And with some options::
|
|
397
|
+
|
|
398
|
+
sage: T.plot_solution(color='red', axes_labels=["t", "x(t)"]) # needs sage.plot
|
|
399
|
+
"""
|
|
400
|
+
if interpolate:
|
|
401
|
+
from sage.plot.line import line2d
|
|
402
|
+
pts = self.interpolate_solution(i)
|
|
403
|
+
G = line2d(pts, **kwds)
|
|
404
|
+
else:
|
|
405
|
+
pts = [(t, y[i]) for t, y in self.solution]
|
|
406
|
+
from sage.plot.point import point2d
|
|
407
|
+
G = point2d([(t, y[i]) for t, y in self.solution], **kwds)
|
|
408
|
+
if filename is None:
|
|
409
|
+
G.show()
|
|
410
|
+
else:
|
|
411
|
+
G.save(filename=filename)
|
|
412
|
+
|
|
413
|
+
def ode_solve(self, t_span=False, y_0=False, num_points=False, params=None):
|
|
414
|
+
cdef double h # step size
|
|
415
|
+
h = self.h
|
|
416
|
+
cdef int i
|
|
417
|
+
cdef int j
|
|
418
|
+
cdef int type
|
|
419
|
+
cdef int dim
|
|
420
|
+
cdef PyFunctionWrapper wrapper # struct to pass information into GSL C function
|
|
421
|
+
self.params = [] if params is None else params
|
|
422
|
+
|
|
423
|
+
if t_span:
|
|
424
|
+
self.t_span = t_span
|
|
425
|
+
if y_0:
|
|
426
|
+
self.y_0 = y_0
|
|
427
|
+
|
|
428
|
+
dim = len(self.y_0)
|
|
429
|
+
type = isinstance(self.function, ode_system)
|
|
430
|
+
if type == 0:
|
|
431
|
+
wrapper = PyFunctionWrapper()
|
|
432
|
+
if self.function is not None:
|
|
433
|
+
wrapper.the_function = self.function
|
|
434
|
+
else:
|
|
435
|
+
raise ValueError("ODE system not yet defined")
|
|
436
|
+
if self.jacobian is None:
|
|
437
|
+
wrapper.the_jacobian = None
|
|
438
|
+
else:
|
|
439
|
+
wrapper.the_jacobian = self.jacobian
|
|
440
|
+
if self.params == [] and len(sage_getargspec(wrapper.the_function)[0]) == 2:
|
|
441
|
+
wrapper.the_parameters = []
|
|
442
|
+
elif self.params == [] and len(sage_getargspec(wrapper.the_function)[0]) > 2:
|
|
443
|
+
raise ValueError("ODE system has a parameter but no parameters specified")
|
|
444
|
+
elif self.params != []:
|
|
445
|
+
wrapper.the_parameters = self.params
|
|
446
|
+
wrapper.y_n = dim
|
|
447
|
+
|
|
448
|
+
cdef double t
|
|
449
|
+
cdef double t_end
|
|
450
|
+
cdef double *y
|
|
451
|
+
cdef double * scale_abs_array
|
|
452
|
+
scale_abs_array=NULL
|
|
453
|
+
|
|
454
|
+
y = <double*> sig_malloc(sizeof(double) * dim)
|
|
455
|
+
if y == NULL:
|
|
456
|
+
raise MemoryError("error allocating memory")
|
|
457
|
+
result = []
|
|
458
|
+
v = [0] * dim
|
|
459
|
+
cdef gsl_odeiv_step_type * T
|
|
460
|
+
|
|
461
|
+
for i in range(dim): # copy initial conditions into C array
|
|
462
|
+
y[i] = self.y_0[i]
|
|
463
|
+
|
|
464
|
+
if self.algorithm == "rkf45":
|
|
465
|
+
T = gsl_odeiv_step_rkf45
|
|
466
|
+
elif self.algorithm == "rk2":
|
|
467
|
+
T = gsl_odeiv_step_rk2
|
|
468
|
+
elif self.algorithm == "rk4":
|
|
469
|
+
T = gsl_odeiv_step_rk4
|
|
470
|
+
elif self.algorithm == "rkck":
|
|
471
|
+
T = gsl_odeiv_step_rkck
|
|
472
|
+
elif self.algorithm == "rk8pd":
|
|
473
|
+
T = gsl_odeiv_step_rk8pd
|
|
474
|
+
elif self.algorithm == "rk2imp":
|
|
475
|
+
T = gsl_odeiv_step_rk2imp
|
|
476
|
+
elif self.algorithm == "rk4imp":
|
|
477
|
+
T = gsl_odeiv_step_rk4imp
|
|
478
|
+
elif self.algorithm == "bsimp":
|
|
479
|
+
T = gsl_odeiv_step_bsimp
|
|
480
|
+
if not type and self.jacobian is None:
|
|
481
|
+
raise TypeError("The jacobian must be provided for the implicit Burlisch-Stoer method")
|
|
482
|
+
elif self.algorithm == "gear1":
|
|
483
|
+
T = gsl_odeiv_step_gear1
|
|
484
|
+
elif self.algorithm == "gear2":
|
|
485
|
+
T = gsl_odeiv_step_gear2
|
|
486
|
+
else:
|
|
487
|
+
raise TypeError("algorithm not valid")
|
|
488
|
+
|
|
489
|
+
cdef gsl_odeiv_step * s
|
|
490
|
+
s = gsl_odeiv_step_alloc(T, dim)
|
|
491
|
+
if s == NULL:
|
|
492
|
+
sig_free(y)
|
|
493
|
+
raise MemoryError("error setting up solver")
|
|
494
|
+
|
|
495
|
+
cdef gsl_odeiv_control * c
|
|
496
|
+
|
|
497
|
+
if not self.a and not self.a_dydt:
|
|
498
|
+
c = gsl_odeiv_control_y_new(self.error_abs, self.error_rel)
|
|
499
|
+
elif self.a and self.a_dydt:
|
|
500
|
+
if not self.scale_abs:
|
|
501
|
+
c = gsl_odeiv_control_standard_new(self.error_abs, self.error_rel, self.a, self.a_dydt)
|
|
502
|
+
elif hasattr(self.scale_abs, '__len__'):
|
|
503
|
+
if len(self.scale_abs) == dim:
|
|
504
|
+
scale_abs_array = <double *> sig_malloc(dim * sizeof(double))
|
|
505
|
+
for i in range(dim):
|
|
506
|
+
scale_abs_array[i] = self.scale_abs[i]
|
|
507
|
+
c = gsl_odeiv_control_scaled_new(self.error_abs, self.error_rel, self.a, self.a_dydt, scale_abs_array, dim)
|
|
508
|
+
|
|
509
|
+
if c == NULL:
|
|
510
|
+
gsl_odeiv_control_free(c)
|
|
511
|
+
gsl_odeiv_step_free(s)
|
|
512
|
+
sig_free(y)
|
|
513
|
+
sig_free(scale_abs_array)
|
|
514
|
+
raise MemoryError("error setting up solver")
|
|
515
|
+
|
|
516
|
+
cdef gsl_odeiv_evolve * e
|
|
517
|
+
e = gsl_odeiv_evolve_alloc(dim)
|
|
518
|
+
|
|
519
|
+
if e == NULL:
|
|
520
|
+
gsl_odeiv_control_free(c)
|
|
521
|
+
gsl_odeiv_step_free(s)
|
|
522
|
+
sig_free(y)
|
|
523
|
+
sig_free(scale_abs_array)
|
|
524
|
+
raise MemoryError("error setting up solver")
|
|
525
|
+
|
|
526
|
+
cdef gsl_odeiv_system sys
|
|
527
|
+
if type: # The user has passed a class with a compiled function, use that for the system
|
|
528
|
+
sys.function = c_f_compiled
|
|
529
|
+
sys.jacobian = c_jac_compiled
|
|
530
|
+
# (<ode_system>self.function).the_parameters = self.params
|
|
531
|
+
sys.params = <void *> self.function
|
|
532
|
+
else: # The user passed a python function.
|
|
533
|
+
sys.function = c_f
|
|
534
|
+
sys.jacobian = c_jac
|
|
535
|
+
sys.params = <void *> wrapper
|
|
536
|
+
sys.dimension = dim
|
|
537
|
+
|
|
538
|
+
cdef int status
|
|
539
|
+
import copy
|
|
540
|
+
cdef int n
|
|
541
|
+
|
|
542
|
+
if len(self.t_span) == 2 and num_points:
|
|
543
|
+
try:
|
|
544
|
+
n = num_points
|
|
545
|
+
except TypeError:
|
|
546
|
+
gsl_odeiv_evolve_free(e)
|
|
547
|
+
gsl_odeiv_control_free(c)
|
|
548
|
+
gsl_odeiv_step_free(s)
|
|
549
|
+
sig_free(y)
|
|
550
|
+
sig_free(scale_abs_array)
|
|
551
|
+
raise TypeError("numpoints must be integer")
|
|
552
|
+
result.append((self.t_span[0], self.y_0))
|
|
553
|
+
delta = (self.t_span[1] - self.t_span[0]) / (1.0 * num_points)
|
|
554
|
+
t = self.t_span[0]
|
|
555
|
+
t_end = self.t_span[0] + delta
|
|
556
|
+
for i in range(1, n + 1):
|
|
557
|
+
while t < t_end:
|
|
558
|
+
try:
|
|
559
|
+
sig_on()
|
|
560
|
+
status = gsl_odeiv_evolve_apply(e, c, s, &sys, &t, t_end, &h, y)
|
|
561
|
+
sig_off()
|
|
562
|
+
if status != GSL_SUCCESS:
|
|
563
|
+
raise RuntimeError
|
|
564
|
+
except RuntimeError:
|
|
565
|
+
gsl_odeiv_evolve_free(e)
|
|
566
|
+
gsl_odeiv_control_free(c)
|
|
567
|
+
gsl_odeiv_step_free(s)
|
|
568
|
+
sig_free(y)
|
|
569
|
+
sig_free(scale_abs_array)
|
|
570
|
+
raise ValueError("error solving")
|
|
571
|
+
|
|
572
|
+
for j in range(dim):
|
|
573
|
+
v[j] = <double> y[j]
|
|
574
|
+
result.append((t, copy.copy(v)))
|
|
575
|
+
t = t_end
|
|
576
|
+
t_end = t + delta
|
|
577
|
+
|
|
578
|
+
else:
|
|
579
|
+
n = len(self.t_span)
|
|
580
|
+
result.append((self.t_span[0], self.y_0))
|
|
581
|
+
t = self.t_span[0]
|
|
582
|
+
for i in range(1, n):
|
|
583
|
+
t_end = self.t_span[i]
|
|
584
|
+
while t < t_end:
|
|
585
|
+
try:
|
|
586
|
+
sig_on()
|
|
587
|
+
status = gsl_odeiv_evolve_apply(e, c, s, &sys, &t, t_end, &h, y)
|
|
588
|
+
sig_off()
|
|
589
|
+
if status != GSL_SUCCESS:
|
|
590
|
+
raise RuntimeError
|
|
591
|
+
except RuntimeError:
|
|
592
|
+
gsl_odeiv_evolve_free(e)
|
|
593
|
+
gsl_odeiv_control_free(c)
|
|
594
|
+
gsl_odeiv_step_free(s)
|
|
595
|
+
sig_free(y)
|
|
596
|
+
sig_free(scale_abs_array)
|
|
597
|
+
raise ValueError("error solving")
|
|
598
|
+
|
|
599
|
+
for j in range(dim):
|
|
600
|
+
v[j] = <double> y[j]
|
|
601
|
+
result.append((t, copy.copy(v)))
|
|
602
|
+
|
|
603
|
+
t = self.t_span[i]
|
|
604
|
+
|
|
605
|
+
gsl_odeiv_evolve_free(e)
|
|
606
|
+
gsl_odeiv_control_free(c)
|
|
607
|
+
gsl_odeiv_step_free(s)
|
|
608
|
+
sig_free(y)
|
|
609
|
+
sig_free(scale_abs_array)
|
|
610
|
+
self.solution = result
|
|
Binary file
|