passagemath-modules 10.6.31__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-ecd7067e.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
/* sage_setup: distribution = sagemath-modules
|
|
2
|
+
*/
|
|
3
|
+
/**
|
|
4
|
+
Discrete Gaussians over the Integers.
|
|
5
|
+
|
|
6
|
+
A discrete Gaussian distribution on the Integers is a distribution where the
|
|
7
|
+
integer `x` is sampled with probability proportional to `exp(-(x-c)²/(2σ²))`.
|
|
8
|
+
It is denoted by `D_{σ,c}` where `σ` is the width parameter (close to the
|
|
9
|
+
standard deviation) and `c` is the center.
|
|
10
|
+
|
|
11
|
+
AVAILABLE ALGORITHMS:
|
|
12
|
+
|
|
13
|
+
- ``DGS_DISC_GAUSS_UNIFORM_TABLE`` -- classical rejection sampling, sampling
|
|
14
|
+
from the uniform distribution and accepted with probability proportional to
|
|
15
|
+
`\exp(-(x-c)²/(2σ²))` where `\exp(-(x-c)²/(2σ²))` is precomputed and
|
|
16
|
+
stored in a table. Any real-valued `c` is supported.
|
|
17
|
+
|
|
18
|
+
- ``DGS_DISC_GAUSS_UNIFORM_LOGTABLE`` -- samples are drawn from a uniform
|
|
19
|
+
distribution and accepted with probability proportional to
|
|
20
|
+
`\exp(-(x-c)²/(2σ²))` where `\exp(-(x-c)²/(2σ²))` is computed using
|
|
21
|
+
logarithmically many calls to Bernoulli distributions. Only integer-valued
|
|
22
|
+
`c` are supported.
|
|
23
|
+
|
|
24
|
+
- ``DGS_DISC_GAUSS_UNIFORM_ONLINE`` -- samples are drawn from a uniform
|
|
25
|
+
distribution and accepted with probability proportional to
|
|
26
|
+
`\exp(-(x-c)²/(2σ²))` where `\exp(-(x-c)²/(2σ²))` is computed in each
|
|
27
|
+
invocation. Typically this is very slow. Any real-valued `c` is accepted.
|
|
28
|
+
|
|
29
|
+
- ``DGS_DISC_SIGMA2_LOGTABLE`` -- samples are drawn from an easily samplable
|
|
30
|
+
distribution with `σ = k·σ₂` where `σ₂ := \sqrt{1/(2\log 2)}` and
|
|
31
|
+
accepted with probability proportional to `\exp(-(x-c)²/(2σ²))` where
|
|
32
|
+
`\exp(-(x-c)²/(2σ²))` is computed using logarithmically many calls to
|
|
33
|
+
Bernoulli distributions (but no calls to `\exp`). Note that this sampler
|
|
34
|
+
adjusts sigma to match `σ₂·k` for some integer `k`. Only integer-valued
|
|
35
|
+
`c` are supported.
|
|
36
|
+
|
|
37
|
+
AVAILABLE PRECISIONS:
|
|
38
|
+
|
|
39
|
+
- ``mp`` -- multi-precision using MPFR, cf. ``dgs_gauss_mp.c``
|
|
40
|
+
|
|
41
|
+
- ``dp`` -- double precision using machine doubles, cf. ``dgs_gauss_dp.c``
|
|
42
|
+
|
|
43
|
+
For readers unfamiliar with the implemented algorithms it makes sense to start
|
|
44
|
+
with ``dgs_gauss_dp.c`` which implements the same algorithms as
|
|
45
|
+
``dgs_gauss_mp.c`` should be easier to read.
|
|
46
|
+
|
|
47
|
+
TYPICAL USAGE::
|
|
48
|
+
|
|
49
|
+
dgs_disc_gauss_dp_t *D = dgs_disc_gauss_dp_init(<sigma>, <c>, <tau>, <algorithm>);
|
|
50
|
+
D->call(D); // as often as needed
|
|
51
|
+
dgs_disc_gauss_dp_clear(D);
|
|
52
|
+
|
|
53
|
+
.. author:: Martin R. Albrecht <martinralbrecht+dgs@googlemail.com>
|
|
54
|
+
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/******************************************************************************
|
|
58
|
+
*
|
|
59
|
+
* DGS - Discrete Gaussian Samplers
|
|
60
|
+
*
|
|
61
|
+
* Copyright (c) 2014, Martin Albrecht <martinralbrecht+dgs@googlemail.com>
|
|
62
|
+
* All rights reserved.
|
|
63
|
+
*
|
|
64
|
+
* Redistribution and use in source and binary forms, with or without
|
|
65
|
+
* modification, are permitted provided that the following conditions are met:
|
|
66
|
+
*
|
|
67
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
68
|
+
* list of conditions and the following disclaimer.
|
|
69
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
70
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
71
|
+
* and/or other materials provided with the distribution.
|
|
72
|
+
*
|
|
73
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
74
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
75
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
76
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
77
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
78
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
79
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
80
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
81
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
82
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
83
|
+
*
|
|
84
|
+
* The views and conclusions contained in the software and documentation are
|
|
85
|
+
* those of the authors and should not be interpreted as representing official
|
|
86
|
+
* policies, either expressed or implied, of the FreeBSD Project.
|
|
87
|
+
******************************************************************************/
|
|
88
|
+
|
|
89
|
+
#ifndef DGS_GAUSS__H
|
|
90
|
+
#define DGS_GAUSS__H
|
|
91
|
+
|
|
92
|
+
#include "dgs_bern.h"
|
|
93
|
+
|
|
94
|
+
/** UTILITY FUNCTIONS **/
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
We consider a double ``x`` an integer if ``fmod(x,1.0) <= DGS_DISC_GAUSS_INTEGER_CUTOFF``
|
|
98
|
+
|
|
99
|
+
.. NOTE::
|
|
100
|
+
|
|
101
|
+
it is okay put 0.0 here as for typical inputs the above inequality holds
|
|
102
|
+
exactly
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
#define DGS_DISC_GAUSS_INTEGER_CUTOFF 0.0
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
We consider two doubles ``x`` and ``y`` equal if ``abs(x-y) <= DGS_DISC_GAUSS_EQUAL_DIFF``
|
|
109
|
+
|
|
110
|
+
.. NOTE::
|
|
111
|
+
|
|
112
|
+
the value picked here is somewhat arbitrary
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
#define DGS_DISC_GAUSS_EQUAL_DIFF 0.001
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
typedef enum {
|
|
119
|
+
DGS_DISC_GAUSS_UNIFORM_ONLINE = 0x1, //<call dgs_disc_gauss_mp_call_uniform_online
|
|
120
|
+
DGS_DISC_GAUSS_UNIFORM_TABLE = 0x2, //<call dgs_disc_gauss_mp_call_uniform_table
|
|
121
|
+
DGS_DISC_GAUSS_UNIFORM_LOGTABLE = 0x3, //<call dgs_disc_gauss_mp_call_uniform_logtable
|
|
122
|
+
DGS_DISC_GAUSS_SIGMA2_LOGTABLE = 0x7, //<call dgs_disc_gauss_mp_call_sigma2_logtable
|
|
123
|
+
} dgs_disc_gauss_alg_t;
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
Discrete Gaussian `D_{σ₂,0}` with `σ₂ := sqrt(1/(2·log(2)))`.
|
|
128
|
+
|
|
129
|
+
Return integer `x` with probability
|
|
130
|
+
|
|
131
|
+
`ρ_{σ,c}(x) = exp(-(x-c)²/(2σ₂²))/exp(-(\ZZ-c)²/(2σ₂²))`
|
|
132
|
+
|
|
133
|
+
where `exp(-(\ZZ-c)²/(2σ₂²)) ≈ \sum_{i=-τσ₂}^{τσ₂} exp(-(i-c)²/(2σ₂²))` is the
|
|
134
|
+
probability for all of the integers.
|
|
135
|
+
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
typedef struct {
|
|
139
|
+
dgs_bern_uniform_t *B; //< Bernoulli sub-samplers
|
|
140
|
+
} dgs_disc_gauss_sigma2p_t;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
Create a new sampler for `D_{σ₂,0}`.
|
|
144
|
+
*/
|
|
145
|
+
|
|
146
|
+
dgs_disc_gauss_sigma2p_t *dgs_disc_gauss_sigma2p_init(void);
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
Return an ``mpz_t`` sampled from `D_{σ₂,0}`.
|
|
150
|
+
|
|
151
|
+
:param rop: target value.
|
|
152
|
+
:param self: discrete Gaussian sampler.
|
|
153
|
+
:param state: entropy pool.
|
|
154
|
+
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
void dgs_disc_gauss_sigma2p_mp_call(mpz_t rop, dgs_disc_gauss_sigma2p_t *self, gmp_randstate_t state);
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
Return a ``long`` sampled from `D_{σ₂,0}`.
|
|
161
|
+
|
|
162
|
+
:param rop: target value.
|
|
163
|
+
:param self: discrete Gaussian sampler.
|
|
164
|
+
:param state: entropy pool.
|
|
165
|
+
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
long dgs_disc_gauss_sigma2p_dp_call(dgs_disc_gauss_sigma2p_t *self);
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
Free `D_{σ₂,0}` sampler.
|
|
172
|
+
|
|
173
|
+
:param self: discrete Gaussian sampler state.
|
|
174
|
+
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
void dgs_disc_gauss_sigma2p_clear(dgs_disc_gauss_sigma2p_t *self);
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
Double-precision Discrete Gaussians `D_{σ,c}`
|
|
181
|
+
|
|
182
|
+
Return integer `x` with probability
|
|
183
|
+
|
|
184
|
+
`ρ_{σ,c}(x) = exp(-(x-c)²/(2σ²))/exp(-(\ZZ-c)²/(2σ²))`
|
|
185
|
+
|
|
186
|
+
where `exp(-(\ZZ-c)²/(2σ²)) ≈ \sum_{i=-τσ}^{τσ} exp(-(i-c)²/(2σ²))` is the
|
|
187
|
+
probability for all of the integers.
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
struct _dgs_disc_gauss_mp_t;
|
|
191
|
+
|
|
192
|
+
typedef struct _dgs_disc_gauss_dp_t {
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
The width parameter `σ`, i.e. samples are accepted with probability
|
|
196
|
+
proportional to `\exp(-(x-c)²/(2σ²))`
|
|
197
|
+
*/
|
|
198
|
+
|
|
199
|
+
double sigma;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
The mean of the distribution `c`. The value of `c` does not have to be an
|
|
203
|
+
integer. However, some algorithms only support integer-valued `c`.
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
double c;
|
|
207
|
+
double c_r; //< `c_r := c % 1`
|
|
208
|
+
long c_z; //< c_z := c - (c_r)
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
Cutoff `τ`, samples outside the range `(⌊c⌉-⌈στ⌉,...,⌊c⌉+⌈στ⌉)` are
|
|
212
|
+
considered to have probability zero. This bound applies to algorithms
|
|
213
|
+
which sample from the uniform distribution.
|
|
214
|
+
*/
|
|
215
|
+
|
|
216
|
+
size_t tau;
|
|
217
|
+
|
|
218
|
+
dgs_disc_gauss_alg_t algorithm; //< which algorithm to use
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
We use a uniform Bernoulli to decide signs.
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
dgs_bern_uniform_t *B;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
To realize rejection sampling, we call `B_{exp(-(x·x)/(2σ²))}` and accept
|
|
228
|
+
if it returns 1.
|
|
229
|
+
|
|
230
|
+
Used when ``DGS_DISC_GAUSS_UNIFORM_LOGTABLE`` or
|
|
231
|
+
``DGS_DISC_GAUSS_SIGMA2_LOGTABLE`` is set.
|
|
232
|
+
*/
|
|
233
|
+
|
|
234
|
+
dgs_bern_exp_dp_t *Bexp;
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
`\D_{σ₂,0}` which is easily sampable`
|
|
238
|
+
|
|
239
|
+
Used when ``DGS_DISC_GAUSS_SIGMA2_LOGTABLE`` is set.
|
|
240
|
+
*/
|
|
241
|
+
|
|
242
|
+
dgs_disc_gauss_sigma2p_t *D2;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
Return an ``long`` sampled from this sampler
|
|
246
|
+
|
|
247
|
+
:param rop: target value.
|
|
248
|
+
:param self: discrete Gaussian sampler.
|
|
249
|
+
:param state: entropy pool.
|
|
250
|
+
|
|
251
|
+
*/
|
|
252
|
+
|
|
253
|
+
long (*call)(struct _dgs_disc_gauss_dp_t *self);
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
We sample ``x`` with ``abs(x) < upper_bound`` in
|
|
257
|
+
``DGS_DISC_GAUSS_UNIFORM_ONLINE``, ``DGS_DISC_GAUSS_UNIFORM_TABLE`` and
|
|
258
|
+
``DGS_DISC_GAUSS_UNIFORM_LOGTABLE``.
|
|
259
|
+
*/
|
|
260
|
+
|
|
261
|
+
long upper_bound;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
We sample ``x`` with ``abs(x) <= upper_bound - 1`` in
|
|
265
|
+
``DGS_DISC_GAUSS_UNIFORM_ONLINE``, ``DGS_DISC_GAUSS_UNIFORM_TABLE`` and
|
|
266
|
+
``DGS_DISC_GAUSS_UNIFORM_LOGTABLE``.
|
|
267
|
+
*/
|
|
268
|
+
|
|
269
|
+
long upper_bound_minus_one;
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
There are ``2*upper_bound -1`` elements in the range
|
|
273
|
+
``-upper_bound+1,...,upper_bound-1``.
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
long two_upper_bound_minus_one;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
The multiplier `k` when we sample from `D_{k·σ₂,c}` in
|
|
280
|
+
``DGS_DISC_GAUSS_SIGMA2_LOGTABLE``.
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
long k;
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
Precomputed `-1/(2σ²)`.
|
|
288
|
+
*/
|
|
289
|
+
|
|
290
|
+
double f;
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
Precomputed values for `exp(-(x-2)²/(2σ²))` in
|
|
294
|
+
``DGS_DISC_GAUSS_UNIFORM_TABLE``
|
|
295
|
+
*/
|
|
296
|
+
|
|
297
|
+
double *rho;
|
|
298
|
+
} dgs_disc_gauss_dp_t;
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
Create a new double-precision discrete Gaussian sampler.
|
|
302
|
+
|
|
303
|
+
:param sigma: width parameter `σ`
|
|
304
|
+
:param c: center `c`
|
|
305
|
+
:param tau: cutoff `τ`
|
|
306
|
+
:param algorithm: algorithm to use.
|
|
307
|
+
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
dgs_disc_gauss_dp_t *dgs_disc_gauss_dp_init(double sigma, double c, size_t tau, dgs_disc_gauss_alg_t algorithm);
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
Sample from ``dgs_disc_gauss_dp_t`` by rejection sampling using the uniform distribution
|
|
314
|
+
|
|
315
|
+
:param self: Discrete Gaussian sampler
|
|
316
|
+
|
|
317
|
+
*/
|
|
318
|
+
|
|
319
|
+
long dgs_disc_gauss_dp_call_uniform_online(dgs_disc_gauss_dp_t *self);
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
Sample from ``dgs_disc_gauss_dp_t`` by rejection sampling using the uniform
|
|
323
|
+
distribution and tabulated ``exp()`` evaluations.
|
|
324
|
+
|
|
325
|
+
:param self: discrete Gaussian sampler
|
|
326
|
+
|
|
327
|
+
.. NOTE::
|
|
328
|
+
|
|
329
|
+
`c` must be an integer in this algorithm
|
|
330
|
+
*/
|
|
331
|
+
|
|
332
|
+
long dgs_disc_gauss_dp_call_uniform_table(dgs_disc_gauss_dp_t *self);
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
Sample from ``dgs_disc_gauss_dp_t`` by rejection sampling using the uniform
|
|
336
|
+
distribution and tabulated ``exp()`` evaluations.
|
|
337
|
+
|
|
338
|
+
:param self: discrete Gaussian sampler
|
|
339
|
+
|
|
340
|
+
.. NOTE::
|
|
341
|
+
|
|
342
|
+
This function makes no assumptions about `c` but requires more resources
|
|
343
|
+
than ``dgs_disc_gauss_dp_call_uniform_table()``.
|
|
344
|
+
*/
|
|
345
|
+
|
|
346
|
+
long dgs_disc_gauss_dp_call_uniform_table_offset(dgs_disc_gauss_dp_t *self);
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
Sample from ``dgs_disc_gauss_dp_t`` by rejection sampling using the uniform
|
|
351
|
+
distribution replacing all ``exp()`` calls with calls to Bernoulli
|
|
352
|
+
distributions.
|
|
353
|
+
|
|
354
|
+
:param self: discrete Gaussian sampler
|
|
355
|
+
|
|
356
|
+
.. NOTE::
|
|
357
|
+
|
|
358
|
+
`c` must be an integer in this algorithm
|
|
359
|
+
*/
|
|
360
|
+
|
|
361
|
+
long dgs_disc_gauss_dp_call_uniform_logtable(dgs_disc_gauss_dp_t *self);
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
Sample from ``dgs_disc_gauss_dp_t`` by rejection sampling using the
|
|
365
|
+
``D_{k·σ₂,0}` distribution replacing all ``exp()`` calls with calls to
|
|
366
|
+
Bernoulli distributions.
|
|
367
|
+
|
|
368
|
+
:param self: discrete Gaussian sampler
|
|
369
|
+
|
|
370
|
+
.. NOTE::
|
|
371
|
+
|
|
372
|
+
`c` must be an integer in this algorithm
|
|
373
|
+
|
|
374
|
+
*/
|
|
375
|
+
|
|
376
|
+
long dgs_disc_gauss_dp_call_sigma2_logtable(dgs_disc_gauss_dp_t *self);
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
The uniform Bernoulli sampler which is used to decide signs caches bits for
|
|
380
|
+
performance reasons. This functions clears this cache of random bits.
|
|
381
|
+
|
|
382
|
+
:param self: discrete Gaussian sampler
|
|
383
|
+
|
|
384
|
+
*/
|
|
385
|
+
|
|
386
|
+
static inline void dgs_disc_gauss_dp_flush_cache(dgs_disc_gauss_dp_t *self) {
|
|
387
|
+
self->B->count = self->B->length;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
Free memory.
|
|
392
|
+
|
|
393
|
+
:param self: discrete Gaussian sadpler
|
|
394
|
+
|
|
395
|
+
*/
|
|
396
|
+
|
|
397
|
+
void dgs_disc_gauss_dp_clear(dgs_disc_gauss_dp_t *self);
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
Multi-precision Discrete Gaussians `D_{σ,c}`
|
|
402
|
+
|
|
403
|
+
Return integer `x` with probability
|
|
404
|
+
|
|
405
|
+
`ρ_{σ,c}(x) = exp(-(x-c)²/(2σ²))/exp(-(\ZZ-c)²/(2σ²))`
|
|
406
|
+
|
|
407
|
+
where `exp(-(\ZZ-c)²/(2σ²)) ≈ \sum_{i=-τσ}^{τσ} exp(-(i-c)²/(2σ^²))` is the
|
|
408
|
+
probability for all of the integers.
|
|
409
|
+
|
|
410
|
+
*/
|
|
411
|
+
|
|
412
|
+
typedef struct _dgs_disc_gauss_mp_t {
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
The width parameter `σ`, i.e. samples are accepted with probability
|
|
416
|
+
proportional to `\exp(-(x-c)²/(2σ²))`
|
|
417
|
+
*/
|
|
418
|
+
|
|
419
|
+
mpfr_t sigma;
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
The mean of the distribution `c`. The value of `c` does not have to be an
|
|
423
|
+
integer. However, some algorithms only support integer-valued `c`.
|
|
424
|
+
*/
|
|
425
|
+
|
|
426
|
+
mpfr_t c;
|
|
427
|
+
|
|
428
|
+
mpfr_t c_r; //< `c_r := c % 1`
|
|
429
|
+
mpz_t c_z; //< c_z := c - (c_r)
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
Cutoff `τ`, samples outside the range `(⌊c⌉-⌈στ⌉,...,⌊c⌉+⌈στ⌉)` are
|
|
433
|
+
considered to have probability zero. This bound applies to algorithms
|
|
434
|
+
which sample from the uniform distribution.
|
|
435
|
+
*/
|
|
436
|
+
|
|
437
|
+
size_t tau;
|
|
438
|
+
|
|
439
|
+
dgs_disc_gauss_alg_t algorithm; //< which algorithm to use
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
We use a uniform Bernoulli to decide signs.
|
|
443
|
+
*/
|
|
444
|
+
|
|
445
|
+
dgs_bern_uniform_t *B;
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
To realize rejection sampling, we call `B_{exp(-(x·x)/(2σ²))}` and accept
|
|
449
|
+
if it returns 1.
|
|
450
|
+
|
|
451
|
+
Used when ``DGS_DISC_GAUSS_UNIFORM_LOGTABLE`` or
|
|
452
|
+
``DGS_DISC_GAUSS_SIGMA2_LOGTABLE`` is set.
|
|
453
|
+
*/
|
|
454
|
+
|
|
455
|
+
dgs_bern_exp_mp_t *Bexp;
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
`D_{σ₂,0}` which is easily sampable`
|
|
460
|
+
|
|
461
|
+
Used when ``DGS_DISC_GAUSS_SIGMA2_LOGTABLE`` is set.
|
|
462
|
+
*/
|
|
463
|
+
|
|
464
|
+
dgs_disc_gauss_sigma2p_t *D2;
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
Return an ``mpz_t`` sampled from this sampler
|
|
468
|
+
|
|
469
|
+
:param rop: target value.
|
|
470
|
+
:param self: discrete Gaussian sampler.
|
|
471
|
+
:param state: entropy pool.
|
|
472
|
+
|
|
473
|
+
*/
|
|
474
|
+
|
|
475
|
+
void (*call)(mpz_t rop, struct _dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
We sample ``x`` with ``abs(x) < upper_bound`` in
|
|
479
|
+
``DGS_DISC_GAUSS_UNIFORM_ONLINE``, ``DGS_DISC_GAUSS_UNIFORM_TABLE`` and
|
|
480
|
+
``DGS_DISC_GAUSS_UNIFORM_LOGTABLE``.
|
|
481
|
+
*/
|
|
482
|
+
|
|
483
|
+
mpz_t upper_bound;
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
We sample ``x`` with ``abs(x) <= upper_bound - 1`` in
|
|
487
|
+
``DGS_DISC_GAUSS_UNIFORM_ONLINE``, ``DGS_DISC_GAUSS_UNIFORM_TABLE`` and
|
|
488
|
+
``DGS_DISC_GAUSS_UNIFORM_LOGTABLE``.
|
|
489
|
+
*/
|
|
490
|
+
|
|
491
|
+
mpz_t upper_bound_minus_one;
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
There are ``2*upper_bound -1`` elements in the range
|
|
495
|
+
``-upper_bound+1,...,upper_bound-1``.
|
|
496
|
+
*/
|
|
497
|
+
|
|
498
|
+
mpz_t two_upper_bound_minus_one;
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
The multiplier `k` when we sample from `D_{k·σ₂,c}` in
|
|
502
|
+
``DGS_DISC_GAUSS_SIGMA2_LOGTABLE``.
|
|
503
|
+
*/
|
|
504
|
+
|
|
505
|
+
mpz_t k;
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
Precomputed `-1/(2σ²)`.
|
|
509
|
+
*/
|
|
510
|
+
|
|
511
|
+
mpfr_t f;
|
|
512
|
+
|
|
513
|
+
mpz_t x; //< space for temporary integer
|
|
514
|
+
mpz_t y_z; //< space for temporary integer
|
|
515
|
+
mpz_t x2; // space for temporary integer
|
|
516
|
+
mpfr_t y; // space for temporary rational number
|
|
517
|
+
mpfr_t z; // space for temporary rational number
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
Precomputed values for `exp(-(x-c)²/(2σ²))` in
|
|
521
|
+
``DGS_DISC_GAUSS_UNIFORM_TABLE``
|
|
522
|
+
*/
|
|
523
|
+
|
|
524
|
+
mpfr_t *rho;
|
|
525
|
+
|
|
526
|
+
} dgs_disc_gauss_mp_t;
|
|
527
|
+
|
|
528
|
+
dgs_disc_gauss_mp_t *dgs_disc_gauss_mp_init(mpfr_t sigma, mpfr_t c, size_t tau, dgs_disc_gauss_alg_t algorithm);
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
Sample from ``dgs_disc_gauss_mp_t`` by rejection sampling using the uniform
|
|
532
|
+
distribution and tabulated ``exp()`` evaluations.
|
|
533
|
+
|
|
534
|
+
:param self: discrete Gaussian sampler
|
|
535
|
+
|
|
536
|
+
.. NOTE::
|
|
537
|
+
|
|
538
|
+
`c` must be an integer in this algorithm
|
|
539
|
+
|
|
540
|
+
*/
|
|
541
|
+
|
|
542
|
+
void dgs_disc_gauss_mp_call_uniform_table(mpz_t rop, dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
Sample from ``dgs_disc_gauss_mp_t`` by rejection sampling using the uniform
|
|
546
|
+
distribution and tabulated ``exp()`` evaluations.
|
|
547
|
+
|
|
548
|
+
:param self: discrete Gaussian sampler
|
|
549
|
+
|
|
550
|
+
.. NOTE::
|
|
551
|
+
|
|
552
|
+
This function makes no assumptions about `c` but requires more resources
|
|
553
|
+
than ``dgs_disc_gauss_dp_call_uniform_table()``.
|
|
554
|
+
|
|
555
|
+
*/
|
|
556
|
+
|
|
557
|
+
void dgs_disc_gauss_mp_call_uniform_table_offset(mpz_t rop, dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
Sample from ``dgs_disc_gauss_mp_t`` by rejection sampling using the uniform
|
|
561
|
+
distribution replacing all ``exp()`` calls with call to Bernoulli distributions.
|
|
562
|
+
|
|
563
|
+
:param self: discrete Gaussian sampler
|
|
564
|
+
|
|
565
|
+
.. NOTE::
|
|
566
|
+
|
|
567
|
+
`c` must be an integer in this algorithm
|
|
568
|
+
*/
|
|
569
|
+
|
|
570
|
+
void dgs_disc_gauss_mp_call_uniform_logtable(mpz_t rop, dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
Sample from ``dgs_disc_gauss_mp_t`` by rejection sampling using the uniform distribution.
|
|
574
|
+
|
|
575
|
+
:param self: discrete Gaussian sampler
|
|
576
|
+
|
|
577
|
+
*/
|
|
578
|
+
|
|
579
|
+
void dgs_disc_gauss_mp_call_uniform_online(mpz_t rop, dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
Sample from ``dgs_disc_gauss_mp_t`` by rejection sampling using the `D_{k·σ₂,0}`
|
|
583
|
+
distribution replacing all ``exp()`` calls with call to Bernoulli distributions.
|
|
584
|
+
|
|
585
|
+
:param self: Discrete Gaussian sampler
|
|
586
|
+
|
|
587
|
+
.. NOTE::
|
|
588
|
+
|
|
589
|
+
`c` must be an integer in this algorithm.
|
|
590
|
+
*/
|
|
591
|
+
|
|
592
|
+
void dgs_disc_gauss_mp_call_sigma2_logtable(mpz_t rop, dgs_disc_gauss_mp_t *self, gmp_randstate_t state);
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
Clear cache of random bits.
|
|
596
|
+
|
|
597
|
+
:param self: discrete Gaussian sampler
|
|
598
|
+
|
|
599
|
+
*/
|
|
600
|
+
|
|
601
|
+
static inline void dgs_disc_gauss_mp_flush_cache(dgs_disc_gauss_mp_t *self) {
|
|
602
|
+
self->B->count = self->B->length;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
Free memory.
|
|
607
|
+
|
|
608
|
+
:param self: discrete Gaussian sadpler
|
|
609
|
+
|
|
610
|
+
*/
|
|
611
|
+
|
|
612
|
+
void dgs_disc_gauss_mp_clear(dgs_disc_gauss_mp_t *self);
|
|
613
|
+
|
|
614
|
+
#endif //DGS_GAUSS__H
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/* sage_setup: distribution = sagemath-modules
|
|
2
|
+
*/
|
|
3
|
+
/**
|
|
4
|
+
* \file dgs_misc.h
|
|
5
|
+
*
|
|
6
|
+
* \author Martin Albrecht <martinralbrecht+dgs@googlemail.com>
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/******************************************************************************
|
|
10
|
+
*
|
|
11
|
+
* DGS - Discrete Gaussian Samplers
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2014, Martin Albrecht <martinralbrecht+dgs@googlemail.com>
|
|
14
|
+
* All rights reserved.
|
|
15
|
+
*
|
|
16
|
+
* Redistribution and use in source and binary forms, with or without
|
|
17
|
+
* modification, are permitted provided that the following conditions are met:
|
|
18
|
+
*
|
|
19
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
20
|
+
* list of conditions and the following disclaimer.
|
|
21
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
22
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
23
|
+
* and/or other materials provided with the distribution.
|
|
24
|
+
*
|
|
25
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
26
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
27
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
28
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
29
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
30
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
31
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
32
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
33
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
34
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
35
|
+
*
|
|
36
|
+
* The views and conclusions contained in the software and documentation are
|
|
37
|
+
* those of the authors and should not be interpreted as representing official
|
|
38
|
+
* policies, either expressed or implied, of the FreeBSD Project.
|
|
39
|
+
******************************************************************************/
|
|
40
|
+
#ifndef DGS_MISC__H
|
|
41
|
+
#define DGS_MISC__H
|
|
42
|
+
|
|
43
|
+
#include <stddef.h>
|
|
44
|
+
#include <stdlib.h>
|
|
45
|
+
#include <assert.h>
|
|
46
|
+
#include <stdio.h>
|
|
47
|
+
#include <stdarg.h>
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* \brief Macro to help with branch prediction.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
#ifdef __GNUC__
|
|
54
|
+
#define __DGS_LIKELY(cond) __builtin_expect ((cond) != 0, 1)
|
|
55
|
+
#else
|
|
56
|
+
#define __DGS_LIKELY(cond) (cond)
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* \brief Macro to help with branch prediction.
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
#ifdef __GNUC__
|
|
64
|
+
#define __DGS_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0)
|
|
65
|
+
#else
|
|
66
|
+
#define __DGS_UNLIKELY(cond) (cond)
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
static int const dgs_radix = sizeof(unsigned long)<<3;
|
|
70
|
+
static unsigned long const dgs_ffff = -1;
|
|
71
|
+
|
|
72
|
+
#define __DGS_LSB_BITMASK(n) (dgs_ffff >> (dgs_radix - (n)) % dgs_radix)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
static inline unsigned long _dgs_randomb_libc(size_t nbits) {
|
|
76
|
+
size_t n = __DGS_LSB_BITMASK(nbits);
|
|
77
|
+
assert(((RAND_MAX | (RAND_MAX >> 1)) == RAND_MAX));
|
|
78
|
+
if (__DGS_LIKELY(n <= RAND_MAX))
|
|
79
|
+
return rand() & n;
|
|
80
|
+
assert(RAND_MAX >= __DGS_LSB_BITMASK(22));
|
|
81
|
+
unsigned long pool = (((unsigned long)rand()) << 0) ^ (((unsigned long)rand()) << 22) ^ (((unsigned long)rand()) << 44);
|
|
82
|
+
return pool & n;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static inline unsigned long _dgs_randomm_libc(unsigned long n) {
|
|
86
|
+
assert(n < RAND_MAX);
|
|
87
|
+
long r;
|
|
88
|
+
unsigned long k = RAND_MAX/n;
|
|
89
|
+
do {
|
|
90
|
+
r = rand();
|
|
91
|
+
} while (r >= k*n);
|
|
92
|
+
return r%n;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
static inline void dgs_die(const char *msg, ...) {
|
|
96
|
+
va_list lst;
|
|
97
|
+
va_start(lst, msg);
|
|
98
|
+
vfprintf(stderr, msg, lst);
|
|
99
|
+
fprintf(stderr, "\n");
|
|
100
|
+
va_end(lst);
|
|
101
|
+
abort();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
#endif //DGS_MISC__H
|