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
|
Binary file
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Discrete Wavelet Transform
|
|
4
|
+
|
|
5
|
+
Wraps ``GSL's gsl_wavelet_transform_forward()``,
|
|
6
|
+
and ``gsl_wavelet_transform_inverse()`` and creates plot methods.
|
|
7
|
+
|
|
8
|
+
AUTHOR:
|
|
9
|
+
|
|
10
|
+
- Josh Kantor (2006-10-07) - initial version
|
|
11
|
+
- David Joyner (2006-10-09) - minor changes to docstrings and examples.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
# Copyright (C) 2006 Joshua Kantor <jkantor@math.washington.edu>
|
|
16
|
+
#
|
|
17
|
+
# This program is free software: you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of the GNU General Public License as published by
|
|
19
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
20
|
+
# (at your option) any later version.
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def WaveletTransform(n, wavelet_type, wavelet_k):
|
|
26
|
+
r"""
|
|
27
|
+
This function initializes an GSLDoubleArray of length n which
|
|
28
|
+
can perform a discrete wavelet transform.
|
|
29
|
+
|
|
30
|
+
INPUT:
|
|
31
|
+
|
|
32
|
+
- ``n`` -- a power of 2
|
|
33
|
+
- ``T`` -- the data in the GSLDoubleArray must be real
|
|
34
|
+
- ``wavelet_type`` -- the name of the type of wavelet, valid choices are:
|
|
35
|
+
|
|
36
|
+
* ``'daubechies'``
|
|
37
|
+
* ``'daubechies_centered'``
|
|
38
|
+
* ``'haar'``
|
|
39
|
+
* ``'haar_centered'``
|
|
40
|
+
* ``'bspline'``
|
|
41
|
+
* ``'bspline_centered'``
|
|
42
|
+
|
|
43
|
+
For daubechies wavelets, ``wavelet_k`` specifies a daubechie wavelet
|
|
44
|
+
with `k/2` vanishing moments. `k = 4,6,...,20` for `k` even are the
|
|
45
|
+
only ones implemented.
|
|
46
|
+
|
|
47
|
+
For Haar wavelets, ``wavelet_k`` must be 2.
|
|
48
|
+
|
|
49
|
+
For bspline wavelets, ``wavelet_k`` of `103,105,202,204,206,208,301,
|
|
50
|
+
305,307,309` will give biorthogonal B-spline wavelets of order `(i,j)`
|
|
51
|
+
where ``wavelet_k`` is `100*i+j`.
|
|
52
|
+
The wavelet transform uses `J = \log_2(n)` levels.
|
|
53
|
+
|
|
54
|
+
OUTPUT:
|
|
55
|
+
|
|
56
|
+
An array of the form
|
|
57
|
+
`(s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0}, \ldots, d_{J-1,2^{J-1}-1})`
|
|
58
|
+
for `d_{j,k}` the detail coefficients of level `j`.
|
|
59
|
+
The centered forms align the coefficients of the sub-bands on edges.
|
|
60
|
+
|
|
61
|
+
EXAMPLES::
|
|
62
|
+
|
|
63
|
+
sage: a = WaveletTransform(128,'daubechies',4)
|
|
64
|
+
sage: for i in range(1, 11):
|
|
65
|
+
....: a[i] = 1
|
|
66
|
+
....: a[128-i] = 1
|
|
67
|
+
sage: a.plot().show(ymin=0) # needs sage.plot
|
|
68
|
+
sage: a.forward_transform()
|
|
69
|
+
sage: a.plot().show() # needs sage.plot
|
|
70
|
+
sage: a = WaveletTransform(128,'haar',2)
|
|
71
|
+
sage: for i in range(1, 11): a[i] = 1; a[128-i] = 1
|
|
72
|
+
sage: a.forward_transform()
|
|
73
|
+
sage: a.plot().show(ymin=0) # needs sage.plot
|
|
74
|
+
sage: a = WaveletTransform(128,'bspline_centered',103)
|
|
75
|
+
sage: for i in range(1, 11): a[i] = 1; a[100+i] = 1
|
|
76
|
+
sage: a.forward_transform()
|
|
77
|
+
sage: a.plot().show(ymin=0) # needs sage.plot
|
|
78
|
+
|
|
79
|
+
This example gives a simple example of wavelet compression::
|
|
80
|
+
|
|
81
|
+
sage: # needs sage.symbolic
|
|
82
|
+
sage: a = DWT(2048,'daubechies',6)
|
|
83
|
+
sage: for i in range(2048): a[i]=float(sin((i*5/2048)**2))
|
|
84
|
+
sage: a.plot().show() # long time (7s on sage.math, 2011), needs sage.plot
|
|
85
|
+
sage: a.forward_transform()
|
|
86
|
+
sage: for i in range(1800): a[2048-i-1] = 0
|
|
87
|
+
sage: a.backward_transform()
|
|
88
|
+
sage: a.plot().show() # long time (7s on sage.math, 2011), needs sage.plot
|
|
89
|
+
"""
|
|
90
|
+
cdef size_t _n, _k
|
|
91
|
+
_n = int(n)
|
|
92
|
+
if _n < 0:
|
|
93
|
+
raise ValueError("n must be nonnegative.")
|
|
94
|
+
_k = int(wavelet_k)
|
|
95
|
+
if not is2pow(_n):
|
|
96
|
+
raise NotImplementedError("discrete wavelet transform only implemented when n is a 2-power")
|
|
97
|
+
return DiscreteWaveletTransform(_n,1,wavelet_type,_k)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
DWT = WaveletTransform
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
cdef class DiscreteWaveletTransform(GSLDoubleArray):
|
|
104
|
+
"""
|
|
105
|
+
Discrete wavelet transform class.
|
|
106
|
+
"""
|
|
107
|
+
def __cinit__(self, size_t n, size_t stride, wavelet_type, size_t wavelet_k):
|
|
108
|
+
self.wavelet = NULL
|
|
109
|
+
self.workspace = NULL
|
|
110
|
+
|
|
111
|
+
def __init__(self, size_t n, size_t stride, wavelet_type, size_t wavelet_k):
|
|
112
|
+
if not is2pow(n):
|
|
113
|
+
raise NotImplementedError("discrete wavelet transform only implemented when n is a 2-power")
|
|
114
|
+
GSLDoubleArray.__init__(self,n,stride)
|
|
115
|
+
if wavelet_type=="daubechies":
|
|
116
|
+
self.wavelet = <gsl_wavelet*> gsl_wavelet_alloc(gsl_wavelet_daubechies, wavelet_k)
|
|
117
|
+
elif wavelet_type == "daubechies_centered":
|
|
118
|
+
self.wavelet = <gsl_wavelet*> gsl_wavelet_alloc(gsl_wavelet_daubechies_centered,wavelet_k)
|
|
119
|
+
elif wavelet_type == "haar":
|
|
120
|
+
self.wavelet = <gsl_wavelet *> gsl_wavelet_alloc(gsl_wavelet_haar,wavelet_k)
|
|
121
|
+
elif wavelet_type == "haar_centered":
|
|
122
|
+
self.wavelet = <gsl_wavelet*> gsl_wavelet_alloc(gsl_wavelet_haar_centered,wavelet_k)
|
|
123
|
+
elif wavelet_type == "bspline":
|
|
124
|
+
self.wavelet = <gsl_wavelet*> gsl_wavelet_alloc(gsl_wavelet_bspline,wavelet_k)
|
|
125
|
+
elif wavelet_type == "bspline_centered":
|
|
126
|
+
self.wavelet = <gsl_wavelet*> gsl_wavelet_alloc(gsl_wavelet_bspline_centered,wavelet_k)
|
|
127
|
+
self.workspace = <gsl_wavelet_workspace*> gsl_wavelet_workspace_alloc(n)
|
|
128
|
+
|
|
129
|
+
def __dealloc__(self):
|
|
130
|
+
if self.wavelet != NULL:
|
|
131
|
+
gsl_wavelet_free(self.wavelet)
|
|
132
|
+
gsl_wavelet_workspace_free(self.workspace)
|
|
133
|
+
|
|
134
|
+
def forward_transform(self):
|
|
135
|
+
gsl_wavelet_transform_forward(self.wavelet,self.data,self.stride,self.n,self.workspace)
|
|
136
|
+
|
|
137
|
+
def backward_transform(self):
|
|
138
|
+
gsl_wavelet_transform_inverse(self.wavelet,self.data,self.stride,self.n,self.workspace)
|
|
139
|
+
|
|
140
|
+
def plot(self, xmin=None, xmax=None, **args):
|
|
141
|
+
from sage.plot.point import point
|
|
142
|
+
|
|
143
|
+
cdef int i
|
|
144
|
+
cdef double x
|
|
145
|
+
v = []
|
|
146
|
+
if xmin is None:
|
|
147
|
+
x_min = 0
|
|
148
|
+
if xmax is None:
|
|
149
|
+
x_max = self.n
|
|
150
|
+
for i in range(x_min, x_max):
|
|
151
|
+
x = self.data[i]
|
|
152
|
+
if i > 0:
|
|
153
|
+
v.append(point([(i, x)], hue=(1, 1, 1), **args))
|
|
154
|
+
return sum(v)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def is2pow(unsigned int n):
|
|
158
|
+
while n and not n % 2:
|
|
159
|
+
n = n >> 1
|
|
160
|
+
return n == 1
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
from sage.libs.gsl.fft cimport *
|
|
3
|
+
|
|
4
|
+
cdef class FastFourierTransform_base:
|
|
5
|
+
pass
|
|
6
|
+
|
|
7
|
+
cdef class FastFourierTransform_complex(FastFourierTransform_base):
|
|
8
|
+
cdef double * data
|
|
9
|
+
cdef size_t n
|
|
10
|
+
cdef size_t stride
|
|
11
|
+
cdef gsl_fft_complex_wavetable * wt
|
|
12
|
+
cdef gsl_fft_complex_workspace * mem
|
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Fast Fourier Transforms Using GSL
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- William Stein (2006-9): initial file (radix2)
|
|
8
|
+
- D. Joyner (2006-10): Minor modifications (from radix2 to general case\
|
|
9
|
+
and some documentation).
|
|
10
|
+
- M. Hansen (2013-3): Fix radix2 backwards transformation
|
|
11
|
+
- L.F. Tabera Alonso (2013-3): Documentation
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
16
|
+
#
|
|
17
|
+
# This program is free software: you can redistribute it and/or modify
|
|
18
|
+
# it under the terms of the GNU General Public License as published by
|
|
19
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
20
|
+
# (at your option) any later version.
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
|
|
24
|
+
from cysignals.memory cimport sig_malloc, sig_free
|
|
25
|
+
|
|
26
|
+
from sage.rings.integer import Integer
|
|
27
|
+
from sage.rings.complex_mpfr import ComplexNumber
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def FastFourierTransform(size, base_ring=None):
|
|
31
|
+
"""
|
|
32
|
+
Create an array for fast Fourier transform conversion using gsl.
|
|
33
|
+
|
|
34
|
+
INPUT:
|
|
35
|
+
|
|
36
|
+
- ``size`` -- the size of the array
|
|
37
|
+
- ``base_ring`` -- unused (2013-03)
|
|
38
|
+
|
|
39
|
+
EXAMPLES:
|
|
40
|
+
|
|
41
|
+
We create an array of the desired size::
|
|
42
|
+
|
|
43
|
+
sage: a = FastFourierTransform(8)
|
|
44
|
+
sage: a
|
|
45
|
+
[(0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0), (0.0, 0.0)]
|
|
46
|
+
|
|
47
|
+
Now, set the values of the array::
|
|
48
|
+
|
|
49
|
+
sage: for i in range(8): a[i] = i + 1
|
|
50
|
+
sage: a
|
|
51
|
+
[(1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0), (6.0, 0.0), (7.0, 0.0), (8.0, 0.0)]
|
|
52
|
+
|
|
53
|
+
We can perform the forward Fourier transform on the array::
|
|
54
|
+
|
|
55
|
+
sage: a.forward_transform()
|
|
56
|
+
sage: a #abs tol 1e-2
|
|
57
|
+
[(36.0, 0.0), (-4.00, 9.65), (-4.0, 4.0), (-4.0, 1.65), (-4.0, 0.0), (-4.0, -1.65), (-4.0, -4.0), (-4.0, -9.65)]
|
|
58
|
+
|
|
59
|
+
And backwards::
|
|
60
|
+
|
|
61
|
+
sage: a.backward_transform()
|
|
62
|
+
sage: a #abs tol 1e-2
|
|
63
|
+
[(8.0, 0.0), (16.0, 0.0), (24.0, 0.0), (32.0, 0.0), (40.0, 0.0), (48.0, 0.0), (56.0, 0.0), (64.0, 0.0)]
|
|
64
|
+
|
|
65
|
+
Other example::
|
|
66
|
+
|
|
67
|
+
sage: a = FastFourierTransform(128)
|
|
68
|
+
sage: for i in range(1, 11):
|
|
69
|
+
....: a[i] = 1
|
|
70
|
+
....: a[128-i] = 1
|
|
71
|
+
sage: a[:6:2]
|
|
72
|
+
[(0.0, 0.0), (1.0, 0.0), (1.0, 0.0)]
|
|
73
|
+
sage: a.plot().show(ymin=0) # needs sage.plot
|
|
74
|
+
sage: a.forward_transform()
|
|
75
|
+
sage: a.plot().show() # needs sage.plot
|
|
76
|
+
"""
|
|
77
|
+
return FastFourierTransform_complex(int(size))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
FFT = FastFourierTransform
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
cdef class FastFourierTransform_base:
|
|
84
|
+
pass
|
|
85
|
+
|
|
86
|
+
cdef class FastFourierTransform_complex(FastFourierTransform_base):
|
|
87
|
+
"""
|
|
88
|
+
Wrapper class for GSL's fast Fourier transform.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
def __init__(self, size_t n, size_t stride=1):
|
|
92
|
+
"""
|
|
93
|
+
Create an array-like object of fixed size that will contain the vector to
|
|
94
|
+
apply the Fast Fourier Transform.
|
|
95
|
+
|
|
96
|
+
INPUT:
|
|
97
|
+
|
|
98
|
+
- ``n`` -- integer, the size of the array
|
|
99
|
+
- ``stride`` -- the stride to be applied when manipulating the array
|
|
100
|
+
|
|
101
|
+
EXAMPLES::
|
|
102
|
+
|
|
103
|
+
sage: a = FastFourierTransform(1) # indirect doctest
|
|
104
|
+
sage: a
|
|
105
|
+
[(0.0, 0.0)]
|
|
106
|
+
"""
|
|
107
|
+
self.n = n
|
|
108
|
+
self.stride = stride
|
|
109
|
+
self.data = <double*>sig_malloc(sizeof(double)*(2*n))
|
|
110
|
+
cdef int i
|
|
111
|
+
for i in range(2 * n):
|
|
112
|
+
self.data[i] = 0
|
|
113
|
+
|
|
114
|
+
def __dealloc__(self):
|
|
115
|
+
"""
|
|
116
|
+
Frees allocated memory.
|
|
117
|
+
|
|
118
|
+
EXAMPLES::
|
|
119
|
+
|
|
120
|
+
sage: a = FastFourierTransform(128)
|
|
121
|
+
sage: del a
|
|
122
|
+
"""
|
|
123
|
+
sig_free(self.data)
|
|
124
|
+
|
|
125
|
+
def __len__(self):
|
|
126
|
+
"""
|
|
127
|
+
Return the size of the array.
|
|
128
|
+
|
|
129
|
+
OUTPUT: the size of the array
|
|
130
|
+
|
|
131
|
+
EXAMPLES::
|
|
132
|
+
|
|
133
|
+
sage: a = FastFourierTransform(48)
|
|
134
|
+
sage: len(a)
|
|
135
|
+
48
|
|
136
|
+
"""
|
|
137
|
+
return self.n
|
|
138
|
+
|
|
139
|
+
def __setitem__(self, size_t i, xy):
|
|
140
|
+
"""
|
|
141
|
+
Assign a value to an index of the array.
|
|
142
|
+
|
|
143
|
+
Currently the input has to be en element that can be coerced
|
|
144
|
+
to ``float`` or a ``ComplexNumber`` element.
|
|
145
|
+
|
|
146
|
+
INPUT:
|
|
147
|
+
|
|
148
|
+
- ``i`` -- integer; the index
|
|
149
|
+
- ``xy`` -- an object to store as `i`-th element of the array ``self[i]``
|
|
150
|
+
|
|
151
|
+
EXAMPLES::
|
|
152
|
+
|
|
153
|
+
sage: # needs sage.rings.mpfr sage.symbolic
|
|
154
|
+
sage: I = CC(I)
|
|
155
|
+
sage: a = FastFourierTransform(4)
|
|
156
|
+
sage: a[0] = 1
|
|
157
|
+
sage: a[1] = I
|
|
158
|
+
sage: a[2] = 1+I
|
|
159
|
+
sage: a[3] = (2,2)
|
|
160
|
+
sage: a
|
|
161
|
+
[(1.0, 0.0), (0.0, 1.0), (1.0, 1.0), (2.0, 2.0)]
|
|
162
|
+
sage: I = CDF(I)
|
|
163
|
+
sage: a[1] = I
|
|
164
|
+
Traceback (most recent call last):
|
|
165
|
+
...
|
|
166
|
+
TypeError: unable to convert 1.0*I to float; use abs() or real_part() as desired
|
|
167
|
+
|
|
168
|
+
TESTS:
|
|
169
|
+
|
|
170
|
+
Verify that :issue:`10758` is fixed. ::
|
|
171
|
+
|
|
172
|
+
sage: F = FFT(1)
|
|
173
|
+
sage: F[0] = (1,1)
|
|
174
|
+
sage: F[0] = 1
|
|
175
|
+
sage: F[0]
|
|
176
|
+
(1.0, 0.0)
|
|
177
|
+
"""
|
|
178
|
+
# just set real for now
|
|
179
|
+
if i < 0 or i >= self.n:
|
|
180
|
+
raise IndexError
|
|
181
|
+
if isinstance(xy, (tuple, ComplexNumber)):
|
|
182
|
+
self.data[2*i] = xy[0]
|
|
183
|
+
self.data[2*i+1] = xy[1]
|
|
184
|
+
else:
|
|
185
|
+
self.data[2*i] = xy
|
|
186
|
+
self.data[2*i+1] = 0
|
|
187
|
+
|
|
188
|
+
def __getitem__(self, i):
|
|
189
|
+
"""
|
|
190
|
+
Get the `i`-th element of the array.
|
|
191
|
+
|
|
192
|
+
INPUT:
|
|
193
|
+
|
|
194
|
+
- ``i`` -- integer
|
|
195
|
+
|
|
196
|
+
OUTPUT: the `i`-th element of the array ``self[i]``
|
|
197
|
+
|
|
198
|
+
EXAMPLES::
|
|
199
|
+
|
|
200
|
+
sage: a = FastFourierTransform(4)
|
|
201
|
+
sage: a[0]
|
|
202
|
+
(0.0, 0.0)
|
|
203
|
+
sage: a[0] = 1
|
|
204
|
+
sage: a[0] == (1,0)
|
|
205
|
+
True
|
|
206
|
+
"""
|
|
207
|
+
if isinstance(i, slice):
|
|
208
|
+
start, stop, step = i.indices(self.n)
|
|
209
|
+
return list(self)[start:stop:step]
|
|
210
|
+
else:
|
|
211
|
+
if i < 0 or i >= self.n:
|
|
212
|
+
raise IndexError
|
|
213
|
+
return self.data[2*i], self.data[2*i+1]
|
|
214
|
+
|
|
215
|
+
def __repr__(self):
|
|
216
|
+
"""
|
|
217
|
+
String representation of the array.
|
|
218
|
+
|
|
219
|
+
OUTPUT:
|
|
220
|
+
|
|
221
|
+
- A string representing this array. The complex numbers are
|
|
222
|
+
presented as a tuple of two float elements.
|
|
223
|
+
|
|
224
|
+
EXAMPLES::
|
|
225
|
+
|
|
226
|
+
sage: a = FastFourierTransform(4)
|
|
227
|
+
sage: for i in range(4): a[i] = i
|
|
228
|
+
sage: a
|
|
229
|
+
[(0.0, 0.0), (1.0, 0.0), (2.0, 0.0), (3.0, 0.0)]
|
|
230
|
+
"""
|
|
231
|
+
return str(list(self))
|
|
232
|
+
|
|
233
|
+
def _plot_polar(self, xmin, xmax, **args):
|
|
234
|
+
"""
|
|
235
|
+
Plot a slice of the array using polar coordinates.
|
|
236
|
+
|
|
237
|
+
INPUT:
|
|
238
|
+
|
|
239
|
+
- ``xmin`` -- the lower bound of the slice to plot
|
|
240
|
+
- ``xmax`` -- the upper bound of the slice to plot
|
|
241
|
+
- ``**args`` -- passed on to the line plotting function
|
|
242
|
+
|
|
243
|
+
OUTPUT: a plot of the array interpreting each element as polar coordinates
|
|
244
|
+
|
|
245
|
+
This method should not be called directly. See :meth:`plot` for the details.
|
|
246
|
+
|
|
247
|
+
EXAMPLES::
|
|
248
|
+
|
|
249
|
+
sage: a = FastFourierTransform(4)
|
|
250
|
+
sage: a._plot_polar(0,2) # needs sage.plot sage.symbolic
|
|
251
|
+
Graphics object consisting of 2 graphics primitives
|
|
252
|
+
"""
|
|
253
|
+
from sage.plot.point import point
|
|
254
|
+
from sage.symbolic.constants import pi, I
|
|
255
|
+
|
|
256
|
+
cdef int i
|
|
257
|
+
v = []
|
|
258
|
+
|
|
259
|
+
pi = pi.n()
|
|
260
|
+
I = I.n()
|
|
261
|
+
s = 1/(3*pi) # so arg gets scaled between -1/3 and 1/3.
|
|
262
|
+
|
|
263
|
+
for i in range(xmin, xmax):
|
|
264
|
+
z = self.data[2*i] + I*self.data[2*i+1]
|
|
265
|
+
mag = z.abs()
|
|
266
|
+
arg = z.arg()*s
|
|
267
|
+
v.append(point((i, mag), hue=arg, **args))
|
|
268
|
+
return sum(v)
|
|
269
|
+
|
|
270
|
+
def _plot_rect(self, xmin, xmax, **args):
|
|
271
|
+
"""
|
|
272
|
+
Plot a slice of the array.
|
|
273
|
+
|
|
274
|
+
INPUT:
|
|
275
|
+
|
|
276
|
+
- ``xmin`` -- the lower bound of the slice to plot
|
|
277
|
+
- ``xmax`` -- the upper bound of the slice to plot
|
|
278
|
+
- ``**args`` -- passed on to the line plotting function
|
|
279
|
+
|
|
280
|
+
OUTPUT: a plot of the array
|
|
281
|
+
|
|
282
|
+
This method should not be called directly. See :meth:`plot` for the details.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: a = FastFourierTransform(4)
|
|
287
|
+
sage: a._plot_rect(0,3) # needs sage.plot
|
|
288
|
+
Graphics object consisting of 3 graphics primitives
|
|
289
|
+
"""
|
|
290
|
+
from sage.plot.point import point
|
|
291
|
+
|
|
292
|
+
cdef int i
|
|
293
|
+
cdef double x, h
|
|
294
|
+
v = []
|
|
295
|
+
|
|
296
|
+
for i in range(xmin, xmax):
|
|
297
|
+
x = self.data[2*i]
|
|
298
|
+
h = self.data[2*i+1]
|
|
299
|
+
v.append(point((i, x), hue=h, **args))
|
|
300
|
+
return sum(v)
|
|
301
|
+
|
|
302
|
+
def plot(self, style='rect', xmin=None, xmax=None, **args):
|
|
303
|
+
"""
|
|
304
|
+
Plot a slice of the array.
|
|
305
|
+
|
|
306
|
+
- ``style`` -- style of the plot, options are ``'rect'`` or ``'polar'``
|
|
307
|
+
|
|
308
|
+
- ``'rect'`` -- height represents real part, color represents
|
|
309
|
+
imaginary part
|
|
310
|
+
- ``'polar'`` -- height represents absolute value, color
|
|
311
|
+
represents argument
|
|
312
|
+
|
|
313
|
+
- ``xmin`` -- the lower bound of the slice to plot; 0 by default
|
|
314
|
+
- ``xmax`` -- the upper bound of the slice to plot; ``len(self)`` by default
|
|
315
|
+
- ``**args`` -- passed on to the line plotting function
|
|
316
|
+
|
|
317
|
+
OUTPUT: a plot of the array
|
|
318
|
+
|
|
319
|
+
EXAMPLES::
|
|
320
|
+
|
|
321
|
+
sage: # needs sage.plot
|
|
322
|
+
sage: a = FastFourierTransform(16)
|
|
323
|
+
sage: for i in range(16): a[i] = (random(),random())
|
|
324
|
+
sage: A = plot(a)
|
|
325
|
+
sage: B = plot(a, style='polar') # needs sage.symbolic
|
|
326
|
+
sage: type(A)
|
|
327
|
+
<class 'sage.plot.graphics.Graphics'>
|
|
328
|
+
sage: type(B) # needs sage.symbolic
|
|
329
|
+
<class 'sage.plot.graphics.Graphics'>
|
|
330
|
+
sage: a = FastFourierTransform(125)
|
|
331
|
+
sage: b = FastFourierTransform(125)
|
|
332
|
+
sage: for i in range(1, 60): a[i]=1
|
|
333
|
+
sage: for i in range(1, 60): b[i]=1
|
|
334
|
+
sage: a.forward_transform()
|
|
335
|
+
sage: a.inverse_transform()
|
|
336
|
+
sage: a.plot() + b.plot()
|
|
337
|
+
Graphics object consisting of 250 graphics primitives
|
|
338
|
+
"""
|
|
339
|
+
if xmin is None:
|
|
340
|
+
xmin = 0
|
|
341
|
+
else:
|
|
342
|
+
xmin = int(xmin)
|
|
343
|
+
if xmax is None:
|
|
344
|
+
xmax = self.n
|
|
345
|
+
else:
|
|
346
|
+
xmax = int(xmax)
|
|
347
|
+
if style == 'rect':
|
|
348
|
+
return self._plot_rect(xmin, xmax, **args)
|
|
349
|
+
elif style == 'polar':
|
|
350
|
+
return self._plot_polar(xmin, xmax, **args)
|
|
351
|
+
else:
|
|
352
|
+
raise ValueError("unknown style '%s'" % style)
|
|
353
|
+
|
|
354
|
+
def forward_transform(self):
|
|
355
|
+
"""
|
|
356
|
+
Compute the in-place forward Fourier transform of this data
|
|
357
|
+
using the Cooley-Tukey algorithm.
|
|
358
|
+
|
|
359
|
+
OUTPUT: none, the transformation is done in-place
|
|
360
|
+
|
|
361
|
+
If the number of sample points in the input is a power of 2 then the
|
|
362
|
+
gsl function ``gsl_fft_complex_radix2_forward`` is automatically called.
|
|
363
|
+
Otherwise, ``gsl_fft_complex_forward`` is called.
|
|
364
|
+
|
|
365
|
+
EXAMPLES::
|
|
366
|
+
|
|
367
|
+
sage: a = FastFourierTransform(4)
|
|
368
|
+
sage: for i in range(4): a[i] = i
|
|
369
|
+
sage: a.forward_transform()
|
|
370
|
+
sage: a #abs tol 1e-2
|
|
371
|
+
[(6.0, 0.0), (-2.0, 2.0), (-2.0, 0.0), (-2.0, -2.0)]
|
|
372
|
+
"""
|
|
373
|
+
cdef gsl_fft_complex_wavetable * wt
|
|
374
|
+
cdef gsl_fft_complex_workspace * mem
|
|
375
|
+
N = Integer(self.n)
|
|
376
|
+
e = N.exact_log(2)
|
|
377
|
+
if N==2**e:
|
|
378
|
+
gsl_fft_complex_radix2_forward(self.data, self.stride, self.n)
|
|
379
|
+
else:
|
|
380
|
+
mem = gsl_fft_complex_workspace_alloc(self.n)
|
|
381
|
+
wt = gsl_fft_complex_wavetable_alloc(self.n)
|
|
382
|
+
gsl_fft_complex_forward(self.data, self.stride, self.n, wt, mem)
|
|
383
|
+
gsl_fft_complex_workspace_free(mem)
|
|
384
|
+
gsl_fft_complex_wavetable_free(wt)
|
|
385
|
+
|
|
386
|
+
def inverse_transform(self):
|
|
387
|
+
"""
|
|
388
|
+
Compute the in-place inverse Fourier transform of this data
|
|
389
|
+
using the Cooley-Tukey algorithm.
|
|
390
|
+
|
|
391
|
+
OUTPUT: none, the transformation is done in-place
|
|
392
|
+
|
|
393
|
+
If the number of sample points in the input is a power of 2 then the
|
|
394
|
+
function ``gsl_fft_complex_radix2_inverse`` is automatically called.
|
|
395
|
+
Otherwise, ``gsl_fft_complex_inverse`` is called.
|
|
396
|
+
|
|
397
|
+
This transform is normalized so ``f.forward_transform().inverse_transform() == f``
|
|
398
|
+
modulo round-off errors. See also :meth:`backward_transform`.
|
|
399
|
+
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: a = FastFourierTransform(125)
|
|
403
|
+
sage: b = FastFourierTransform(125)
|
|
404
|
+
sage: for i in range(1, 60): a[i]=1
|
|
405
|
+
sage: for i in range(1, 60): b[i]=1
|
|
406
|
+
sage: a.forward_transform()
|
|
407
|
+
sage: a.inverse_transform()
|
|
408
|
+
sage: a.plot() + b.plot() # needs sage.plot
|
|
409
|
+
Graphics object consisting of 250 graphics primitives
|
|
410
|
+
sage: abs(sum([CDF(a[i])-CDF(b[i]) for i in range(125)])) < 2**-16
|
|
411
|
+
True
|
|
412
|
+
|
|
413
|
+
Here we check it with a power of two::
|
|
414
|
+
|
|
415
|
+
sage: a = FastFourierTransform(128)
|
|
416
|
+
sage: b = FastFourierTransform(128)
|
|
417
|
+
sage: for i in range(1, 60): a[i]=1
|
|
418
|
+
sage: for i in range(1, 60): b[i]=1
|
|
419
|
+
sage: a.forward_transform()
|
|
420
|
+
sage: a.inverse_transform()
|
|
421
|
+
sage: a.plot() + b.plot() # needs sage.plot
|
|
422
|
+
Graphics object consisting of 256 graphics primitives
|
|
423
|
+
"""
|
|
424
|
+
cdef gsl_fft_complex_wavetable * wt
|
|
425
|
+
cdef gsl_fft_complex_workspace * mem
|
|
426
|
+
N = Integer(self.n)
|
|
427
|
+
e = N.exact_log(2)
|
|
428
|
+
if N==2**e:
|
|
429
|
+
gsl_fft_complex_radix2_inverse(self.data, self.stride, self.n)
|
|
430
|
+
else:
|
|
431
|
+
mem = gsl_fft_complex_workspace_alloc(self.n)
|
|
432
|
+
wt = gsl_fft_complex_wavetable_alloc(self.n)
|
|
433
|
+
gsl_fft_complex_inverse(self.data, self.stride, self.n, wt, mem)
|
|
434
|
+
gsl_fft_complex_workspace_free(mem)
|
|
435
|
+
gsl_fft_complex_wavetable_free(wt)
|
|
436
|
+
|
|
437
|
+
def backward_transform(self):
|
|
438
|
+
"""
|
|
439
|
+
Compute the in-place backwards Fourier transform of this data
|
|
440
|
+
using the Cooley-Tukey algorithm.
|
|
441
|
+
|
|
442
|
+
OUTPUT: none, the transformation is done in-place
|
|
443
|
+
|
|
444
|
+
This is the same as :meth:`inverse_transform` but lacks normalization
|
|
445
|
+
so that ``f.forward_transform().backward_transform() == n*f``. Where
|
|
446
|
+
``n`` is the size of the array.
|
|
447
|
+
|
|
448
|
+
EXAMPLES::
|
|
449
|
+
|
|
450
|
+
sage: a = FastFourierTransform(125)
|
|
451
|
+
sage: b = FastFourierTransform(125)
|
|
452
|
+
sage: for i in range(1, 60): a[i]=1
|
|
453
|
+
sage: for i in range(1, 60): b[i]=1
|
|
454
|
+
sage: a.forward_transform()
|
|
455
|
+
sage: a.backward_transform()
|
|
456
|
+
sage: (a.plot() + b.plot()).show(ymin=0) # long time (2s on sage.math, 2011), needs sage.plot
|
|
457
|
+
sage: abs(sum([CDF(a[i])/125-CDF(b[i]) for i in range(125)])) < 2**-16
|
|
458
|
+
True
|
|
459
|
+
|
|
460
|
+
Here we check it with a power of two::
|
|
461
|
+
|
|
462
|
+
sage: a = FastFourierTransform(128)
|
|
463
|
+
sage: b = FastFourierTransform(128)
|
|
464
|
+
sage: for i in range(1, 60): a[i]=1
|
|
465
|
+
sage: for i in range(1, 60): b[i]=1
|
|
466
|
+
sage: a.forward_transform()
|
|
467
|
+
sage: a.backward_transform()
|
|
468
|
+
sage: (a.plot() + b.plot()).show(ymin=0) # needs sage.plot
|
|
469
|
+
"""
|
|
470
|
+
cdef gsl_fft_complex_wavetable * wt
|
|
471
|
+
cdef gsl_fft_complex_workspace * mem
|
|
472
|
+
N = Integer(self.n)
|
|
473
|
+
e = N.exact_log(2)
|
|
474
|
+
if N==2**e:
|
|
475
|
+
gsl_fft_complex_radix2_backward(self.data, self.stride, self.n)
|
|
476
|
+
else:
|
|
477
|
+
mem = gsl_fft_complex_workspace_alloc(self.n)
|
|
478
|
+
wt = gsl_fft_complex_wavetable_alloc(self.n)
|
|
479
|
+
gsl_fft_complex_backward(self.data, self.stride, self.n, wt, mem)
|
|
480
|
+
gsl_fft_complex_workspace_free(mem)
|
|
481
|
+
gsl_fft_complex_wavetable_free(wt)
|
|
482
|
+
|
|
483
|
+
cdef class FourierTransform_complex:
|
|
484
|
+
pass
|
|
485
|
+
|
|
486
|
+
cdef class FourierTransform_real:
|
|
487
|
+
pass
|