passagemath-categories 10.6.32__cp314-cp314t-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.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
sage/rings/tests.py
ADDED
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Tests for rings
|
|
4
|
+
|
|
5
|
+
TESTS::
|
|
6
|
+
|
|
7
|
+
sage: K.<x> = FractionField(QQ['x'])
|
|
8
|
+
sage: V.<z> = K[]
|
|
9
|
+
sage: x+z
|
|
10
|
+
z + x
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import sage.misc.prandom as random
|
|
14
|
+
|
|
15
|
+
from sage.misc.random_testing import random_testing
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def prime_finite_field():
|
|
19
|
+
"""
|
|
20
|
+
Create a random prime finite field with cardinality at most 10^20.
|
|
21
|
+
|
|
22
|
+
OUTPUT: a prime finite field
|
|
23
|
+
|
|
24
|
+
EXAMPLES::
|
|
25
|
+
|
|
26
|
+
sage: import sage.rings.tests
|
|
27
|
+
sage: K = sage.rings.tests.prime_finite_field(); K # needs sage.rings.finite_rings
|
|
28
|
+
Finite Field of size ...
|
|
29
|
+
sage: K.cardinality().is_prime() # needs sage.rings.finite_rings
|
|
30
|
+
True
|
|
31
|
+
"""
|
|
32
|
+
from sage.rings.integer_ring import ZZ
|
|
33
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
34
|
+
return GF(ZZ.random_element(x=2, y=10**20 - 12).next_prime())
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def finite_field():
|
|
38
|
+
"""
|
|
39
|
+
Create a random finite field with degree at most 20 and prime at most 10^6.
|
|
40
|
+
|
|
41
|
+
OUTPUT: a finite field
|
|
42
|
+
|
|
43
|
+
EXAMPLES::
|
|
44
|
+
|
|
45
|
+
sage: import sage.rings.tests
|
|
46
|
+
sage: K = sage.rings.tests.finite_field(); K # needs sage.rings.finite_rings
|
|
47
|
+
Finite Field...of size ...
|
|
48
|
+
sage: K.cardinality().is_prime_power() # needs sage.rings.finite_rings
|
|
49
|
+
True
|
|
50
|
+
sage: while K.cardinality().is_prime(): # needs sage.rings.finite_rings
|
|
51
|
+
....: K = sage.rings.tests.finite_field()
|
|
52
|
+
"""
|
|
53
|
+
from sage.rings.integer_ring import ZZ
|
|
54
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
55
|
+
p = ZZ.random_element(x=2, y=10**6 - 18).next_prime()
|
|
56
|
+
d = ZZ.random_element(x=1, y=20)
|
|
57
|
+
return GF(p**d, 'a')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def small_finite_field():
|
|
61
|
+
"""
|
|
62
|
+
Create a random finite field with cardinality at most 2^16.
|
|
63
|
+
|
|
64
|
+
OUTPUT: a finite field
|
|
65
|
+
|
|
66
|
+
EXAMPLES::
|
|
67
|
+
|
|
68
|
+
sage: # needs sage.rings.finite_rings
|
|
69
|
+
sage: import sage.rings.tests
|
|
70
|
+
sage: K = sage.rings.tests.small_finite_field(); K
|
|
71
|
+
Finite Field...of size ...
|
|
72
|
+
sage: q = K.cardinality()
|
|
73
|
+
sage: q.is_prime_power()
|
|
74
|
+
True
|
|
75
|
+
sage: q <= 2^16
|
|
76
|
+
True
|
|
77
|
+
"""
|
|
78
|
+
from sage.rings.integer_ring import ZZ
|
|
79
|
+
from sage.rings.finite_rings.finite_field_constructor import GF
|
|
80
|
+
while True:
|
|
81
|
+
q = ZZ.random_element(x=2, y=2**16)
|
|
82
|
+
if q.is_prime_power():
|
|
83
|
+
return GF(q, 'a')
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def integer_mod_ring():
|
|
87
|
+
"""
|
|
88
|
+
Return a random ring of integers modulo n with n at most 50000.
|
|
89
|
+
|
|
90
|
+
EXAMPLES::
|
|
91
|
+
|
|
92
|
+
sage: import sage.rings.tests
|
|
93
|
+
sage: R = sage.rings.tests.integer_mod_ring(); R
|
|
94
|
+
Ring of integers modulo ...
|
|
95
|
+
sage: R.cardinality() <= 50000
|
|
96
|
+
True
|
|
97
|
+
"""
|
|
98
|
+
from sage.rings.integer_ring import ZZ
|
|
99
|
+
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
|
|
100
|
+
n = ZZ.random_element(x=2, y=50000)
|
|
101
|
+
return IntegerModRing(n)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def padic_field():
|
|
105
|
+
"""
|
|
106
|
+
Return a random `p`-adic field modulo n with p at most 10000
|
|
107
|
+
and precision between 10 and 100.
|
|
108
|
+
|
|
109
|
+
EXAMPLES::
|
|
110
|
+
|
|
111
|
+
sage: import sage.rings.tests
|
|
112
|
+
sage: sage.rings.tests.padic_field() # needs sage.rings.padics
|
|
113
|
+
...-adic Field with capped relative precision ...
|
|
114
|
+
"""
|
|
115
|
+
from sage.rings.integer_ring import ZZ
|
|
116
|
+
from sage.rings.padics.factory import Qp
|
|
117
|
+
prec = ZZ.random_element(x=10, y=100)
|
|
118
|
+
p = ZZ.random_element(x=2, y=10**4 - 30).next_prime()
|
|
119
|
+
return Qp(p, prec)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def quadratic_number_field():
|
|
123
|
+
"""
|
|
124
|
+
Return a quadratic extension of QQ.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: import sage.rings.tests
|
|
129
|
+
sage: K = sage.rings.tests.quadratic_number_field(); K # needs sage.rings.number_field
|
|
130
|
+
Number Field in a with defining polynomial x^2 ... with a = ...
|
|
131
|
+
"""
|
|
132
|
+
from sage.rings.integer_ring import ZZ
|
|
133
|
+
from sage.rings.number_field.number_field import QuadraticField
|
|
134
|
+
while True:
|
|
135
|
+
d = ZZ.random_element(x=-10**5, y=10**5)
|
|
136
|
+
if not d.is_square():
|
|
137
|
+
return QuadraticField(d, 'a')
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def absolute_number_field(maxdeg=10):
|
|
141
|
+
"""
|
|
142
|
+
Return an absolute extension of QQ of degree at most 10.
|
|
143
|
+
|
|
144
|
+
EXAMPLES::
|
|
145
|
+
|
|
146
|
+
sage: import sage.rings.tests
|
|
147
|
+
sage: K = sage.rings.tests.absolute_number_field(); K # needs sage.rings.number_field
|
|
148
|
+
Number Field in a with defining polynomial ...
|
|
149
|
+
sage: K.degree() <= 10 # needs sage.rings.number_field
|
|
150
|
+
True
|
|
151
|
+
"""
|
|
152
|
+
from sage.rings.integer_ring import ZZ
|
|
153
|
+
from sage.rings.number_field.number_field import NumberField
|
|
154
|
+
R = ZZ['x']
|
|
155
|
+
while True:
|
|
156
|
+
f = R.random_element(degree=ZZ.random_element(x=1, y=maxdeg),
|
|
157
|
+
x=-100, y=100)
|
|
158
|
+
if f.degree() <= 0:
|
|
159
|
+
continue
|
|
160
|
+
f = f + R.gen()**(f.degree() + 1) # make monic
|
|
161
|
+
if f.is_irreducible():
|
|
162
|
+
return NumberField(f, 'a')
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def relative_number_field(n=2, maxdeg=2):
|
|
166
|
+
"""
|
|
167
|
+
Return a tower of at most n extensions each of degree at most maxdeg.
|
|
168
|
+
|
|
169
|
+
EXAMPLES::
|
|
170
|
+
|
|
171
|
+
sage: # needs sage.rings.number_field
|
|
172
|
+
sage: import sage.rings.tests
|
|
173
|
+
sage: K = sage.rings.tests.relative_number_field(3); K
|
|
174
|
+
Number Field in aaa with defining polynomial x^2 ... over its base field
|
|
175
|
+
sage: K.relative_degree()
|
|
176
|
+
2
|
|
177
|
+
sage: L = K.base_ring()
|
|
178
|
+
sage: L.relative_degree()
|
|
179
|
+
2
|
|
180
|
+
sage: M = L.base_ring()
|
|
181
|
+
sage: M.relative_degree()
|
|
182
|
+
2
|
|
183
|
+
sage: M.base_ring() is QQ
|
|
184
|
+
True
|
|
185
|
+
|
|
186
|
+
TESTS:
|
|
187
|
+
|
|
188
|
+
Check that :issue:`32117` is fixed::
|
|
189
|
+
|
|
190
|
+
sage: set_random_seed(3030)
|
|
191
|
+
sage: from sage.rings.tests import relative_number_field
|
|
192
|
+
sage: _ = relative_number_field(3) # needs sage.rings.number_field
|
|
193
|
+
"""
|
|
194
|
+
from sage.rings.integer_ring import ZZ
|
|
195
|
+
K = absolute_number_field(maxdeg)
|
|
196
|
+
n -= 1
|
|
197
|
+
var = 'aa'
|
|
198
|
+
R = ZZ['x']
|
|
199
|
+
R1 = K['x']
|
|
200
|
+
while n >= 1:
|
|
201
|
+
while True:
|
|
202
|
+
f = R.random_element(degree=ZZ.random_element(x=1, y=maxdeg),
|
|
203
|
+
x=-100, y=100)
|
|
204
|
+
if f.degree() <= 0:
|
|
205
|
+
continue
|
|
206
|
+
f = f * f.denominator() # bug trac #4781
|
|
207
|
+
f = f + R.gen()**maxdeg # make monic
|
|
208
|
+
if R1(f).is_irreducible():
|
|
209
|
+
break
|
|
210
|
+
K = K.extension(f, var)
|
|
211
|
+
R1 = K['x']
|
|
212
|
+
var += 'a'
|
|
213
|
+
n -= 1
|
|
214
|
+
return K
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def rings0():
|
|
218
|
+
"""
|
|
219
|
+
Return a list of pairs (f, desc), where f is a function that when
|
|
220
|
+
called creates a random ring of a certain representative type
|
|
221
|
+
described by desc.
|
|
222
|
+
|
|
223
|
+
RINGS:
|
|
224
|
+
|
|
225
|
+
- ZZ
|
|
226
|
+
- QQ
|
|
227
|
+
- ZZ/nZZ
|
|
228
|
+
- GF(p)
|
|
229
|
+
- GF(q)
|
|
230
|
+
- p-adic fields
|
|
231
|
+
- quadratic number fields
|
|
232
|
+
- absolute number fields
|
|
233
|
+
- relative number fields
|
|
234
|
+
|
|
235
|
+
EXAMPLES::
|
|
236
|
+
|
|
237
|
+
sage: import sage.rings.tests
|
|
238
|
+
sage: type(sage.rings.tests.rings0())
|
|
239
|
+
<... 'list'>
|
|
240
|
+
"""
|
|
241
|
+
from sage.rings.integer_ring import IntegerRing
|
|
242
|
+
from sage.rings.rational_field import RationalField
|
|
243
|
+
|
|
244
|
+
v = [(IntegerRing, 'ring of integers'),
|
|
245
|
+
(RationalField, 'field of rational numbers'),
|
|
246
|
+
(integer_mod_ring, 'integers modulo n for n at most 50000')]
|
|
247
|
+
try:
|
|
248
|
+
v += [(prime_finite_field, 'a prime finite field with cardinality at most 10^20'),
|
|
249
|
+
(finite_field, 'finite field with degree at most 20 and prime at most 10^6'),
|
|
250
|
+
(small_finite_field, 'finite field with cardinality at most 2^16')]
|
|
251
|
+
except ImportError:
|
|
252
|
+
pass
|
|
253
|
+
|
|
254
|
+
try:
|
|
255
|
+
v += [(padic_field, 'a p-adic field')]
|
|
256
|
+
except ImportError:
|
|
257
|
+
pass
|
|
258
|
+
|
|
259
|
+
try:
|
|
260
|
+
v += [(quadratic_number_field, 'a quadratic number field'),
|
|
261
|
+
(absolute_number_field, 'an absolute number field of degree at most 10'),
|
|
262
|
+
(relative_number_field, 'a tower of at most 2 extensions each of degree at most 2')]
|
|
263
|
+
except ImportError:
|
|
264
|
+
pass
|
|
265
|
+
|
|
266
|
+
return v
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def rings1():
|
|
270
|
+
"""
|
|
271
|
+
Return an iterator over random rings.
|
|
272
|
+
|
|
273
|
+
Return a list of pairs (f, desc), where f is a function that
|
|
274
|
+
outputs a random ring that takes a ring and possibly
|
|
275
|
+
some other data as constructor.
|
|
276
|
+
|
|
277
|
+
RINGS:
|
|
278
|
+
|
|
279
|
+
- polynomial ring in one variable over a rings0() ring.
|
|
280
|
+
- polynomial ring over a rings1() ring.
|
|
281
|
+
- multivariate polynomials
|
|
282
|
+
- power series rings in one variable over a rings0() ring.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: import sage.rings.tests
|
|
287
|
+
sage: type(sage.rings.tests.rings0())
|
|
288
|
+
<... 'list'>
|
|
289
|
+
"""
|
|
290
|
+
v = rings0()
|
|
291
|
+
X = random_rings(level=0)
|
|
292
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
293
|
+
from sage.rings.power_series_ring import PowerSeriesRing
|
|
294
|
+
from sage.rings.integer_ring import ZZ
|
|
295
|
+
|
|
296
|
+
v = [(lambda: PolynomialRing(next(X), names='x'),
|
|
297
|
+
'univariate polynomial ring over level 0 ring'),
|
|
298
|
+
(lambda: PowerSeriesRing(next(X), names='x'),
|
|
299
|
+
'univariate power series ring over level 0 ring')]
|
|
300
|
+
|
|
301
|
+
try:
|
|
302
|
+
from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing
|
|
303
|
+
except ImportError:
|
|
304
|
+
pass
|
|
305
|
+
else:
|
|
306
|
+
v += [(lambda: LaurentPolynomialRing(next(X), names='x'),
|
|
307
|
+
'univariate Laurent polynomial ring over level 0 ring')]
|
|
308
|
+
|
|
309
|
+
v += [(lambda: PolynomialRing(next(X), abs(ZZ.random_element(x=2, y=10)),
|
|
310
|
+
names='x'),
|
|
311
|
+
'multivariate polynomial ring in between 2 and 10 variables over a level 0 ring')]
|
|
312
|
+
|
|
313
|
+
return v
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
MAX_LEVEL = 99999
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def random_rings(level=MAX_LEVEL):
|
|
320
|
+
"""
|
|
321
|
+
Return an iterator over random rings up to the given "level" of complexity.
|
|
322
|
+
|
|
323
|
+
EXAMPLES::
|
|
324
|
+
|
|
325
|
+
sage: import sage.rings.tests
|
|
326
|
+
sage: type(sage.rings.tests.random_rings())
|
|
327
|
+
<... 'generator'>
|
|
328
|
+
"""
|
|
329
|
+
v = rings0()
|
|
330
|
+
if level >= 1:
|
|
331
|
+
v += rings1()
|
|
332
|
+
while True:
|
|
333
|
+
yield random.choice(v)[0]()
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
@random_testing
|
|
337
|
+
def test_random_elements(level=MAX_LEVEL, trials=1):
|
|
338
|
+
"""
|
|
339
|
+
Create random elements of random rings until a crash occurs, in
|
|
340
|
+
which case an exception is raised. Defaults to running a single
|
|
341
|
+
trial, but more can be specified. To run tests in an infinite
|
|
342
|
+
loop, you could use::
|
|
343
|
+
|
|
344
|
+
while True: test_random_elements(trials=100, print_seed=True)
|
|
345
|
+
|
|
346
|
+
INPUT:
|
|
347
|
+
|
|
348
|
+
- ``level`` -- (default: ``MAX_LEVEL``) controls the types of rings to use
|
|
349
|
+
- ``trials`` -- a positive integer (default: 1); the number of trials to run
|
|
350
|
+
- ``seed`` -- the random seed to use; if not specified, uses a truly random seed
|
|
351
|
+
- ``print_seed`` -- if ``True`` (default: ``False``), prints the random seed chosen
|
|
352
|
+
|
|
353
|
+
EXAMPLES::
|
|
354
|
+
|
|
355
|
+
sage: import sage.rings.tests
|
|
356
|
+
sage: sage.rings.tests.test_random_elements(trials=2, seed=0) # needs sage.rings.number_field
|
|
357
|
+
survived 0 tests
|
|
358
|
+
Rational Field
|
|
359
|
+
-1/2
|
|
360
|
+
----
|
|
361
|
+
survived 1 tests
|
|
362
|
+
Number Field in a with defining polynomial x^2 - 61891 with a = 248.7790184079036?
|
|
363
|
+
-6
|
|
364
|
+
----
|
|
365
|
+
|
|
366
|
+
sage: # needs sage.rings.finite_rings sage.rings.number_field sage.rings.padics
|
|
367
|
+
sage: sage.rings.tests.test_random_elements(trials=10)
|
|
368
|
+
survived 0 tests...
|
|
369
|
+
sage: sage.rings.tests.test_random_elements(trials=1000) # long time (5 seconds)
|
|
370
|
+
survived 0 tests...
|
|
371
|
+
"""
|
|
372
|
+
r = random_rings(level)
|
|
373
|
+
i = 0
|
|
374
|
+
for R in r:
|
|
375
|
+
print("survived %s tests" % i)
|
|
376
|
+
i += 1
|
|
377
|
+
print(R)
|
|
378
|
+
print(R.random_element())
|
|
379
|
+
print("----")
|
|
380
|
+
if i >= trials:
|
|
381
|
+
return
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
@random_testing
|
|
385
|
+
def test_random_arith(level=MAX_LEVEL, trials=1):
|
|
386
|
+
"""
|
|
387
|
+
Create random elements of random rings and do some arithmetic with them.
|
|
388
|
+
|
|
389
|
+
Repeats until a crash occurs, in which case an exception is
|
|
390
|
+
raised. Defaults to running a single trial, but more can be
|
|
391
|
+
specified. To run tests in an infinite loop, you could use::
|
|
392
|
+
|
|
393
|
+
while True: test_random_arith(trials=100, print_seed=True)
|
|
394
|
+
|
|
395
|
+
INPUT:
|
|
396
|
+
|
|
397
|
+
- ``level`` -- (default: ``MAX_LEVEL``) controls the types of rings to use
|
|
398
|
+
- ``trials`` -- positive integer (default: 1); the number of trials to run
|
|
399
|
+
- ``seed`` -- the random seed to use; if not specified, uses a truly random seed
|
|
400
|
+
- ``print_seed`` -- if ``True`` (default: ``False``), prints the random seed chosen
|
|
401
|
+
|
|
402
|
+
EXAMPLES::
|
|
403
|
+
|
|
404
|
+
sage: # needs sage.rings.finite_rings sage.rings.number_field sage.rings.padics
|
|
405
|
+
sage: import sage.rings.tests
|
|
406
|
+
sage: sage.rings.tests.test_random_arith(trials=2, seed=0)
|
|
407
|
+
survived 0 tests
|
|
408
|
+
Rational Field
|
|
409
|
+
-1/2 -1/95
|
|
410
|
+
49/95
|
|
411
|
+
survived 1 tests
|
|
412
|
+
Number Field in a with defining polynomial x^2 - 15083 with a = 122.81286577553673?
|
|
413
|
+
a -a - 1/2
|
|
414
|
+
3/2*a - 30163/2
|
|
415
|
+
sage: sage.rings.tests.test_random_arith(trials=10)
|
|
416
|
+
survived 0 tests...
|
|
417
|
+
sage: sage.rings.tests.test_random_arith(trials=1000) # long time (5 seconds?)
|
|
418
|
+
survived 0 tests...
|
|
419
|
+
"""
|
|
420
|
+
i = 0
|
|
421
|
+
for x in random_rings(level):
|
|
422
|
+
print("survived %s tests" % i)
|
|
423
|
+
i += 1
|
|
424
|
+
print(x)
|
|
425
|
+
a = x.random_element()
|
|
426
|
+
b = x.random_element()
|
|
427
|
+
print(a, b)
|
|
428
|
+
print(a * b + a - b + 1)
|
|
429
|
+
if i >= trials:
|
|
430
|
+
return
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
@random_testing
|
|
434
|
+
def test_karatsuba_multiplication(base_ring, maxdeg1, maxdeg2,
|
|
435
|
+
ref_mul=lambda f, g: f._mul_generic(g),
|
|
436
|
+
base_ring_random_elt_args=[],
|
|
437
|
+
numtests=10, verbose=False):
|
|
438
|
+
"""
|
|
439
|
+
Test univariate Karatsuba multiplication against other multiplication algorithms.
|
|
440
|
+
|
|
441
|
+
EXAMPLES:
|
|
442
|
+
|
|
443
|
+
First check that random tests are reproducible::
|
|
444
|
+
|
|
445
|
+
sage: from sage.rings.tests import test_karatsuba_multiplication
|
|
446
|
+
sage: test_karatsuba_multiplication(ZZ, 6, 5, verbose=True, seed=42)
|
|
447
|
+
test_karatsuba_multiplication: ring=Univariate Polynomial Ring in x over Integer Ring, threshold=2
|
|
448
|
+
(x^6 + 4*x^5 + 4*x^4 - 3*x^3 - x^2 - x)*(2*x^4 + 3*x^3 - 20*x^2 - 2*x + 1)
|
|
449
|
+
(4*x^5 + 16*x^2 + x - 41)*(x^2 + x - 1)
|
|
450
|
+
(8*x^2 + 2*x + 1)*(3)
|
|
451
|
+
(-4*x - 1)*(-8*x^2 - x)
|
|
452
|
+
(-x^6 - x^3 - x^2 + x + 1)*(2*x^3 - x + 3)
|
|
453
|
+
(-x^2 + x + 1)*(x^4 + x^3 - x^2 - x + 76)
|
|
454
|
+
(4*x^3 + x^2 + 6)*(-x^2 - 5*x)
|
|
455
|
+
(x + 4)*(-x + 5)
|
|
456
|
+
(-2*x)*(3*x^2 - x)
|
|
457
|
+
(x^6 + 21*x^5 + x^4 + 4*x^3 - x^2)*(14*x^4 + x^3 + 2*x^2 - 12*x)
|
|
458
|
+
|
|
459
|
+
Test Karatsuba multiplication of polynomials of small degree over some common rings::
|
|
460
|
+
|
|
461
|
+
sage: rings = [QQ]
|
|
462
|
+
sage: rings += [ZZ[I], ZZ[I, sqrt(2)]] # needs fpylll sage.rings.number_field sage.symbolic
|
|
463
|
+
sage: rings += [GF(49, 'a')] # needs sage.rings.finite_rings
|
|
464
|
+
sage: rings += [MatrixSpace(GF(17), 3)] # needs sage.modules
|
|
465
|
+
sage: for C in rings: # needs sage.modules
|
|
466
|
+
....: test_karatsuba_multiplication(C, 10, 10)
|
|
467
|
+
|
|
468
|
+
Zero-tests over ``QQbar`` are currently very slow, so we test only very small examples::
|
|
469
|
+
|
|
470
|
+
sage: test_karatsuba_multiplication(QQbar, 3, 3, numtests=2) # long time, needs sage.rings.number_field
|
|
471
|
+
|
|
472
|
+
Larger degrees (over ``ZZ``, using FLINT)::
|
|
473
|
+
|
|
474
|
+
sage: test_karatsuba_multiplication(ZZ, 1000, 1000,
|
|
475
|
+
....: ref_mul=lambda f,g: f*g,
|
|
476
|
+
....: base_ring_random_elt_args=[1000])
|
|
477
|
+
|
|
478
|
+
Some more aggressive tests::
|
|
479
|
+
|
|
480
|
+
sage: testrings = [ZZ[I, sqrt(2)], ZZ[I, sqrt(2), sqrt(3)]] # long time
|
|
481
|
+
sage: for C in testrings: # long time
|
|
482
|
+
....: test_karatsuba_multiplication(C, 100, 100)
|
|
483
|
+
sage: test_karatsuba_multiplication(ZZ, 10000, 10000, # long time
|
|
484
|
+
....: ref_mul=lambda f,g: f*g,
|
|
485
|
+
....: base_ring_random_elt_args=[100000])
|
|
486
|
+
"""
|
|
487
|
+
from sage.misc.prandom import randint
|
|
488
|
+
from sage.misc.sage_input import sage_input
|
|
489
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
490
|
+
threshold = randint(0, min(maxdeg1, maxdeg2))
|
|
491
|
+
R = PolynomialRing(base_ring, 'x')
|
|
492
|
+
if verbose:
|
|
493
|
+
print(f"test_karatsuba_multiplication: ring={R}, threshold={threshold}")
|
|
494
|
+
for _ in range(numtests):
|
|
495
|
+
f = R.random_element(randint(0, maxdeg1), False, *base_ring_random_elt_args)
|
|
496
|
+
g = R.random_element(randint(0, maxdeg2), False, *base_ring_random_elt_args)
|
|
497
|
+
if verbose:
|
|
498
|
+
print(" ({})*({})".format(f, g))
|
|
499
|
+
if ref_mul(f, g) - f._mul_karatsuba(g, threshold) != 0:
|
|
500
|
+
msg = "Multiplication failed for elements defined by\n"
|
|
501
|
+
msg += f"{sage_input(f)}\n"
|
|
502
|
+
msg += "and\n"
|
|
503
|
+
msg += f"{sage_input(g)}"
|
|
504
|
+
raise ValueError(msg)
|