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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
The Spec functor
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- William Stein (2006): initial implementation
|
|
8
|
+
|
|
9
|
+
- Peter Bruin (2014): rewrite Spec as a functor
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ******************************************************************************
|
|
13
|
+
# Copyright (C) 2006 William Stein
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
# https://www.gnu.org/licenses/
|
|
16
|
+
# ******************************************************************************
|
|
17
|
+
|
|
18
|
+
from sage.categories.functor import Functor
|
|
19
|
+
from sage.rings.integer_ring import ZZ
|
|
20
|
+
from sage.schemes.generic.scheme import AffineScheme
|
|
21
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def Spec(R, S=None):
|
|
25
|
+
r"""
|
|
26
|
+
Apply the Spec functor to `R`.
|
|
27
|
+
|
|
28
|
+
INPUT:
|
|
29
|
+
|
|
30
|
+
- ``R`` -- either a commutative ring or a ring homomorphism
|
|
31
|
+
|
|
32
|
+
- ``S`` -- a commutative ring (optional), the base ring
|
|
33
|
+
|
|
34
|
+
OUTPUT:
|
|
35
|
+
|
|
36
|
+
- ``AffineScheme`` -- the affine scheme `\mathrm{Spec}(R)`
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: Spec(QQ)
|
|
41
|
+
Spectrum of Rational Field
|
|
42
|
+
sage: Spec(PolynomialRing(QQ, 'x'))
|
|
43
|
+
Spectrum of Univariate Polynomial Ring in x over Rational Field
|
|
44
|
+
sage: Spec(PolynomialRing(QQ, 'x', 3))
|
|
45
|
+
Spectrum of Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
|
|
46
|
+
sage: X = Spec(PolynomialRing(GF(49,'a'), 3, 'x')); X # needs sage.rings.finite_rings
|
|
47
|
+
Spectrum of Multivariate Polynomial Ring in x0, x1, x2
|
|
48
|
+
over Finite Field in a of size 7^2
|
|
49
|
+
sage: TestSuite(X).run() # needs sage.rings.finite_rings
|
|
50
|
+
|
|
51
|
+
Applying ``Spec`` twice to the same ring gives identical output
|
|
52
|
+
(see :issue:`17008`)::
|
|
53
|
+
|
|
54
|
+
sage: A = Spec(ZZ); B = Spec(ZZ)
|
|
55
|
+
sage: A is B
|
|
56
|
+
True
|
|
57
|
+
|
|
58
|
+
A :exc:`TypeError` is raised if the input is not a commutative ring::
|
|
59
|
+
|
|
60
|
+
sage: Spec(5)
|
|
61
|
+
Traceback (most recent call last):
|
|
62
|
+
...
|
|
63
|
+
TypeError: x (=5) is not in Category of commutative rings
|
|
64
|
+
sage: Spec(FreeAlgebra(QQ, 2, 'x')) # needs sage.combinat sage.modules
|
|
65
|
+
Traceback (most recent call last):
|
|
66
|
+
...
|
|
67
|
+
TypeError: x (=Free Algebra on 2 generators (x0, x1) over Rational Field)
|
|
68
|
+
is not in Category of commutative rings
|
|
69
|
+
|
|
70
|
+
TESTS::
|
|
71
|
+
|
|
72
|
+
sage: X = Spec(ZZ)
|
|
73
|
+
sage: X
|
|
74
|
+
Spectrum of Integer Ring
|
|
75
|
+
sage: X.base_scheme()
|
|
76
|
+
Spectrum of Integer Ring
|
|
77
|
+
sage: X.base_ring()
|
|
78
|
+
Integer Ring
|
|
79
|
+
sage: X.dimension()
|
|
80
|
+
1
|
|
81
|
+
sage: Spec(QQ, QQ).base_scheme()
|
|
82
|
+
Spectrum of Rational Field
|
|
83
|
+
sage: Spec(RDF, QQ).base_scheme()
|
|
84
|
+
Spectrum of Rational Field
|
|
85
|
+
"""
|
|
86
|
+
return SpecFunctor(S)(R)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class SpecFunctor(Functor, UniqueRepresentation):
|
|
90
|
+
"""
|
|
91
|
+
The Spec functor.
|
|
92
|
+
"""
|
|
93
|
+
def __init__(self, base_ring=None):
|
|
94
|
+
"""
|
|
95
|
+
EXAMPLES::
|
|
96
|
+
|
|
97
|
+
sage: from sage.schemes.generic.spec import SpecFunctor
|
|
98
|
+
sage: SpecFunctor()
|
|
99
|
+
Spec functor from Category of commutative rings to Category of schemes
|
|
100
|
+
sage: SpecFunctor(QQ)
|
|
101
|
+
Spec functor from Category of commutative rings to
|
|
102
|
+
Category of schemes over Rational Field
|
|
103
|
+
"""
|
|
104
|
+
from sage.categories.commutative_rings import CommutativeRings
|
|
105
|
+
from sage.categories.schemes import Schemes
|
|
106
|
+
|
|
107
|
+
if base_ring is None:
|
|
108
|
+
domain = CommutativeRings()
|
|
109
|
+
codomain = Schemes()
|
|
110
|
+
elif base_ring in CommutativeRings():
|
|
111
|
+
# We would like to use CommutativeAlgebras(base_ring) as
|
|
112
|
+
# the domain; we use CommutativeRings() instead because
|
|
113
|
+
# currently many algebras are not yet considered to be in
|
|
114
|
+
# CommutativeAlgebras(base_ring) by the category framework.
|
|
115
|
+
domain = CommutativeRings()
|
|
116
|
+
codomain = Schemes(AffineScheme(base_ring))
|
|
117
|
+
else:
|
|
118
|
+
raise TypeError('base (= {}) must be a commutative ring'.format(base_ring))
|
|
119
|
+
self._base_ring = base_ring
|
|
120
|
+
super().__init__(domain, codomain)
|
|
121
|
+
|
|
122
|
+
def _repr_(self):
|
|
123
|
+
"""
|
|
124
|
+
Return a string representation of ``self``.
|
|
125
|
+
|
|
126
|
+
EXAMPLES::
|
|
127
|
+
|
|
128
|
+
sage: from sage.schemes.generic.spec import SpecFunctor
|
|
129
|
+
sage: SpecFunctor(QQ)
|
|
130
|
+
Spec functor from Category of commutative rings to
|
|
131
|
+
Category of schemes over Rational Field
|
|
132
|
+
"""
|
|
133
|
+
return 'Spec functor from {} to {}'.format(self.domain(), self.codomain())
|
|
134
|
+
|
|
135
|
+
def _latex_(self):
|
|
136
|
+
r"""
|
|
137
|
+
Return a LaTeX representation of ``self``.
|
|
138
|
+
|
|
139
|
+
EXAMPLES::
|
|
140
|
+
|
|
141
|
+
sage: from sage.schemes.generic.spec import SpecFunctor
|
|
142
|
+
sage: latex(SpecFunctor())
|
|
143
|
+
\mathrm{Spec}\colon \mathbf{CommutativeRings} \longrightarrow \mathbf{Schemes}
|
|
144
|
+
"""
|
|
145
|
+
return r'\mathrm{{Spec}}\colon {} \longrightarrow {}'.format(
|
|
146
|
+
self.domain()._latex_(), self.codomain()._latex_())
|
|
147
|
+
|
|
148
|
+
def _apply_functor(self, A):
|
|
149
|
+
"""
|
|
150
|
+
Apply the Spec functor to the commutative ring ``A``.
|
|
151
|
+
|
|
152
|
+
EXAMPLES::
|
|
153
|
+
|
|
154
|
+
sage: from sage.schemes.generic.spec import SpecFunctor
|
|
155
|
+
sage: F = SpecFunctor()
|
|
156
|
+
sage: F(RR) # indirect doctest # needs sage.rings.real_mpfr
|
|
157
|
+
Spectrum of Real Field with 53 bits of precision
|
|
158
|
+
"""
|
|
159
|
+
# The second argument of AffineScheme defaults to None.
|
|
160
|
+
# However, AffineScheme has unique representation, so there is
|
|
161
|
+
# a difference between calling it with or without explicitly
|
|
162
|
+
# giving this argument.
|
|
163
|
+
if self._base_ring is None:
|
|
164
|
+
return AffineScheme(A)
|
|
165
|
+
return AffineScheme(A, self._base_ring)
|
|
166
|
+
|
|
167
|
+
def _apply_functor_to_morphism(self, f):
|
|
168
|
+
"""
|
|
169
|
+
Apply the Spec functor to the ring homomorphism ``f``.
|
|
170
|
+
|
|
171
|
+
EXAMPLES::
|
|
172
|
+
|
|
173
|
+
sage: from sage.schemes.generic.spec import SpecFunctor
|
|
174
|
+
sage: F = SpecFunctor(GF(7))
|
|
175
|
+
sage: A.<x, y> = GF(7)[]
|
|
176
|
+
sage: B.<t> = GF(7)[]
|
|
177
|
+
sage: f = A.hom((t^2, t^3))
|
|
178
|
+
sage: Spec(f) # indirect doctest
|
|
179
|
+
Affine Scheme morphism:
|
|
180
|
+
From: Spectrum of Univariate Polynomial Ring in t over Finite Field of size 7
|
|
181
|
+
To: Spectrum of Multivariate Polynomial Ring in x, y over Finite Field of size 7
|
|
182
|
+
Defn: Ring morphism:
|
|
183
|
+
From: Multivariate Polynomial Ring in x, y over Finite Field of size 7
|
|
184
|
+
To: Univariate Polynomial Ring in t over Finite Field of size 7
|
|
185
|
+
Defn: x |--> t^2
|
|
186
|
+
y |--> t^3
|
|
187
|
+
"""
|
|
188
|
+
A = f.domain()
|
|
189
|
+
B = f.codomain()
|
|
190
|
+
return self(B).hom(f, self(A))
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
SpecZ = Spec(ZZ)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# Compatibility with older versions of this module
|
|
197
|
+
|
|
198
|
+
from sage.misc.persist import register_unpickle_override
|
|
199
|
+
register_unpickle_override('sage.schemes.generic.spec', 'Spec', AffineScheme)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
from sage.misc.lazy_import import lazy_import
|
|
3
|
+
|
|
4
|
+
lazy_import('sage.schemes.product_projective.space', 'ProductProjectiveSpaces')
|
|
5
|
+
lazy_import('sage.schemes.product_projective.space', 'is_ProductProjectiveSpaces')
|
|
6
|
+
del lazy_import
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Set of homomorphisms
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Volker Braun and Ben Hutz (2014): initial version
|
|
8
|
+
|
|
9
|
+
- Raghukul Raman (2018): code cleanup and added support for rational field
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
#*****************************************************************************
|
|
13
|
+
# Copyright (C) 2014 Volker Braun <vbraun.name@gmail.com>
|
|
14
|
+
# Ben Hutz <bn4941@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
18
|
+
# the License, or (at your option) any later version.
|
|
19
|
+
# http://www.gnu.org/licenses/
|
|
20
|
+
#*****************************************************************************
|
|
21
|
+
|
|
22
|
+
from sage.categories.fields import Fields
|
|
23
|
+
from sage.categories.number_fields import NumberFields
|
|
24
|
+
from sage.misc.mrange import xmrange
|
|
25
|
+
from sage.misc.misc_c import prod
|
|
26
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
27
|
+
from sage.rings.rational_field import RationalField
|
|
28
|
+
from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme
|
|
29
|
+
from sage.schemes.generic.homset import SchemeHomset_points
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class SchemeHomset_points_product_projective_spaces_ring(SchemeHomset_points):
|
|
33
|
+
r"""
|
|
34
|
+
Set of rational points of a product of projective spaces.
|
|
35
|
+
|
|
36
|
+
INPUT: See :class:`~sage.schemes.generic.homset.SchemeHomset_generic`.
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: from sage.schemes.product_projective.homset import SchemeHomset_points_product_projective_spaces_ring
|
|
41
|
+
sage: SchemeHomset_points_product_projective_spaces_ring(
|
|
42
|
+
....: Spec(QQ), ProductProjectiveSpaces([1, 1], QQ, 'z'))
|
|
43
|
+
Set of rational points of Product of projective spaces P^1 x P^1 over Rational Field
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def _element_constructor_(self, v, **kwds):
|
|
47
|
+
r"""
|
|
48
|
+
The element constructor.
|
|
49
|
+
|
|
50
|
+
INPUT:
|
|
51
|
+
|
|
52
|
+
- ``v`` -- anything that determines a scheme morphism in the Hom-set
|
|
53
|
+
|
|
54
|
+
OUTPUT: the scheme morphism determined by ``v``
|
|
55
|
+
|
|
56
|
+
EXAMPLES::
|
|
57
|
+
|
|
58
|
+
sage: P = ProductProjectiveSpaces([1, 1], ZZ, 'z')
|
|
59
|
+
sage: Q = P([4, 6, 6, 2]); Q
|
|
60
|
+
(4 : 6 , 6 : 2)
|
|
61
|
+
sage: type(Q)
|
|
62
|
+
<class 'sage.schemes.product_projective.point.ProductProjectiveSpaces_point_ring'>
|
|
63
|
+
sage: P(QQ)._element_constructor_([4, 2, 2, 0])
|
|
64
|
+
(4 : 2 , 2 : 0)
|
|
65
|
+
"""
|
|
66
|
+
return self.codomain()._point(self, v, **kwds)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class SchemeHomset_points_product_projective_spaces_field(SchemeHomset_points_product_projective_spaces_ring):
|
|
70
|
+
def points(self, **kwds):
|
|
71
|
+
r"""
|
|
72
|
+
Return some or all rational points of a projective scheme.
|
|
73
|
+
|
|
74
|
+
Over a finite field, all points are returned. Over an infinite field, all points satisfying the bound
|
|
75
|
+
are returned. For a zero-dimensional subscheme, all points are returned regardless of whether the base
|
|
76
|
+
ring is a field or not.
|
|
77
|
+
|
|
78
|
+
For number fields, this uses the
|
|
79
|
+
Doyle-Krumm algorithm 4 (algorithm 5 for imaginary quadratic) for
|
|
80
|
+
computing algebraic numbers up to a given height [DK2013]_ or
|
|
81
|
+
uses the chinese remainder theorem and points modulo primes
|
|
82
|
+
for larger bounds.
|
|
83
|
+
|
|
84
|
+
The algorithm requires floating point arithmetic, so the user is
|
|
85
|
+
allowed to specify the precision for such calculations.
|
|
86
|
+
Additionally, due to floating point issues, points
|
|
87
|
+
slightly larger than the bound may be returned. This can be controlled
|
|
88
|
+
by lowering the tolerance.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
INPUT:
|
|
92
|
+
|
|
93
|
+
- ``bound`` -- a real number
|
|
94
|
+
|
|
95
|
+
- ``tolerance`` -- a rational number in (0,1] used in Doyle-Krumm
|
|
96
|
+
algorithm 4
|
|
97
|
+
|
|
98
|
+
- ``precision`` -- the precision to use for computing the elements of
|
|
99
|
+
bounded height of number fields
|
|
100
|
+
|
|
101
|
+
- ``algorithm`` -- either ``'sieve'`` or ``'enumerate'`` algorithms can
|
|
102
|
+
be used over `\QQ`. If not specified, ``'enumerate'`` is used only
|
|
103
|
+
for small height bounds
|
|
104
|
+
|
|
105
|
+
OUTPUT: list of rational points of the projective scheme
|
|
106
|
+
|
|
107
|
+
EXAMPLES::
|
|
108
|
+
|
|
109
|
+
sage: P.<x,y,z,w> = ProductProjectiveSpaces([1, 1], QQ)
|
|
110
|
+
sage: X = P.subscheme([x - y, z^2 - 2*w^2])
|
|
111
|
+
sage: X(P.base_ring()).points() # needs sage.libs.singular
|
|
112
|
+
[]
|
|
113
|
+
|
|
114
|
+
::
|
|
115
|
+
|
|
116
|
+
sage: u = QQ['u'].0
|
|
117
|
+
sage: K = NumberField(u^2 - 2, 'v') # needs sage.rings.number_field
|
|
118
|
+
sage: P.<x,y,z,w> = ProductProjectiveSpaces([1, 1], K) # needs sage.rings.number_field
|
|
119
|
+
sage: X = P.subscheme([x^2 - y^2, z^2 - 2*w^2])
|
|
120
|
+
sage: sorted(X(P.base_ring()).points()) # needs sage.libs.singular sage.rings.number_field
|
|
121
|
+
[(-1 : 1 , -v : 1), (-1 : 1 , v : 1), (1 : 1 , -v : 1), (1 : 1 , v : 1)]
|
|
122
|
+
|
|
123
|
+
::
|
|
124
|
+
|
|
125
|
+
sage: u = QQ['u'].0
|
|
126
|
+
sage: K = NumberField(u^2 + 1, 'v') # needs sage.rings.number_field
|
|
127
|
+
sage: P.<x,y,z,w> = ProductProjectiveSpaces([1, 1], K) # needs sage.rings.number_field
|
|
128
|
+
sage: P(K).points(bound=1) # needs sage.libs.singular sage.rings.number_field
|
|
129
|
+
[(-1 : 1 , -1 : 1), (-1 : 1 , -v : 1), (-1 : 1 , 0 : 1), (-1 : 1 , v : 1),
|
|
130
|
+
(-1 : 1 , 1 : 0), (-1 : 1 , 1 : 1), (-v : 1 , -1 : 1), (-v : 1 , -v : 1),
|
|
131
|
+
(-v : 1 , 0 : 1), (-v : 1 , v : 1), (-v : 1 , 1 : 0), (-v : 1 , 1 : 1),
|
|
132
|
+
(0 : 1 , -1 : 1), (0 : 1 , -v : 1), (0 : 1 , 0 : 1), (0 : 1 , v : 1),
|
|
133
|
+
(0 : 1 , 1 : 0), (0 : 1 , 1 : 1), (v : 1 , -1 : 1), (v : 1 , -v : 1),
|
|
134
|
+
(v : 1 , 0 : 1), (v : 1 , v : 1), (v : 1 , 1 : 0), (v : 1 , 1 : 1),
|
|
135
|
+
(1 : 0 , -1 : 1), (1 : 0 , -v : 1), (1 : 0 , 0 : 1), (1 : 0 , v : 1),
|
|
136
|
+
(1 : 0 , 1 : 0), (1 : 0 , 1 : 1), (1 : 1 , -1 : 1), (1 : 1 , -v : 1),
|
|
137
|
+
(1 : 1 , 0 : 1), (1 : 1 , v : 1), (1 : 1 , 1 : 0), (1 : 1 , 1 : 1)]
|
|
138
|
+
|
|
139
|
+
::
|
|
140
|
+
|
|
141
|
+
sage: P.<x,y,z,u,v> = ProductProjectiveSpaces([2, 1], GF(3))
|
|
142
|
+
sage: P(P.base_ring()).points()
|
|
143
|
+
[(0 : 0 : 1 , 0 : 1), (0 : 0 : 1 , 1 : 0), (0 : 0 : 1 , 1 : 1), (0 : 0 : 1 , 2 : 1),
|
|
144
|
+
(0 : 1 : 0 , 0 : 1), (0 : 1 : 0 , 1 : 0), (0 : 1 : 0 , 1 : 1), (0 : 1 : 0 , 2 : 1),
|
|
145
|
+
(0 : 1 : 1 , 0 : 1), (0 : 1 : 1 , 1 : 0), (0 : 1 : 1 , 1 : 1), (0 : 1 : 1 , 2 : 1),
|
|
146
|
+
(0 : 2 : 1 , 0 : 1), (0 : 2 : 1 , 1 : 0), (0 : 2 : 1 , 1 : 1), (0 : 2 : 1 , 2 : 1),
|
|
147
|
+
(1 : 0 : 0 , 0 : 1), (1 : 0 : 0 , 1 : 0), (1 : 0 : 0 , 1 : 1), (1 : 0 : 0 , 2 : 1),
|
|
148
|
+
(1 : 0 : 1 , 0 : 1), (1 : 0 : 1 , 1 : 0), (1 : 0 : 1 , 1 : 1), (1 : 0 : 1 , 2 : 1),
|
|
149
|
+
(1 : 1 : 0 , 0 : 1), (1 : 1 : 0 , 1 : 0), (1 : 1 : 0 , 1 : 1), (1 : 1 : 0 , 2 : 1),
|
|
150
|
+
(1 : 1 : 1 , 0 : 1), (1 : 1 : 1 , 1 : 0), (1 : 1 : 1 , 1 : 1), (1 : 1 : 1 , 2 : 1),
|
|
151
|
+
(1 : 2 : 1 , 0 : 1), (1 : 2 : 1 , 1 : 0), (1 : 2 : 1 , 1 : 1), (1 : 2 : 1 , 2 : 1),
|
|
152
|
+
(2 : 0 : 1 , 0 : 1), (2 : 0 : 1 , 1 : 0), (2 : 0 : 1 , 1 : 1), (2 : 0 : 1 , 2 : 1),
|
|
153
|
+
(2 : 1 : 0 , 0 : 1), (2 : 1 : 0 , 1 : 0), (2 : 1 : 0 , 1 : 1), (2 : 1 : 0 , 2 : 1),
|
|
154
|
+
(2 : 1 : 1 , 0 : 1), (2 : 1 : 1 , 1 : 0), (2 : 1 : 1 , 1 : 1), (2 : 1 : 1 , 2 : 1),
|
|
155
|
+
(2 : 2 : 1 , 0 : 1), (2 : 2 : 1 , 1 : 0), (2 : 2 : 1 , 1 : 1), (2 : 2 : 1 , 2 : 1)]
|
|
156
|
+
|
|
157
|
+
::
|
|
158
|
+
|
|
159
|
+
sage: PP.<x,y,z,u,v> = ProductProjectiveSpaces([2, 1], QQ)
|
|
160
|
+
sage: X = PP.subscheme([x + y, u*u - v*u])
|
|
161
|
+
sage: X.rational_points(bound=2) # needs sage.libs.singular
|
|
162
|
+
[(-2 : 2 : 1 , 0 : 1),
|
|
163
|
+
(-2 : 2 : 1 , 1 : 1),
|
|
164
|
+
(-1 : 1 : 0 , 0 : 1),
|
|
165
|
+
(-1 : 1 : 0 , 1 : 1),
|
|
166
|
+
(-1 : 1 : 1 , 0 : 1),
|
|
167
|
+
(-1 : 1 : 1 , 1 : 1),
|
|
168
|
+
(-1/2 : 1/2 : 1 , 0 : 1),
|
|
169
|
+
(-1/2 : 1/2 : 1 , 1 : 1),
|
|
170
|
+
(0 : 0 : 1 , 0 : 1),
|
|
171
|
+
(0 : 0 : 1 , 1 : 1),
|
|
172
|
+
(1/2 : -1/2 : 1 , 0 : 1),
|
|
173
|
+
(1/2 : -1/2 : 1 , 1 : 1),
|
|
174
|
+
(1 : -1 : 1 , 0 : 1),
|
|
175
|
+
(1 : -1 : 1 , 1 : 1),
|
|
176
|
+
(2 : -2 : 1 , 0 : 1),
|
|
177
|
+
(2 : -2 : 1 , 1 : 1)]
|
|
178
|
+
|
|
179
|
+
better to enumerate with low codimension::
|
|
180
|
+
|
|
181
|
+
sage: PP.<x,y,z,u,v,a,b,c> = ProductProjectiveSpaces([2, 1, 2], QQ)
|
|
182
|
+
sage: X = PP.subscheme([x*u^2*a, b*z*u*v, z*v^2*c])
|
|
183
|
+
sage: len(X.rational_points(bound=1, algorithm='enumerate')) # needs sage.libs.singular
|
|
184
|
+
232
|
|
185
|
+
"""
|
|
186
|
+
B = kwds.pop('bound', 0)
|
|
187
|
+
X = self.codomain()
|
|
188
|
+
|
|
189
|
+
from sage.schemes.product_projective.space import ProductProjectiveSpaces_ring
|
|
190
|
+
if not isinstance(X, ProductProjectiveSpaces_ring) and X.base_ring() in Fields():
|
|
191
|
+
# no points
|
|
192
|
+
if X.dimension() == -1:
|
|
193
|
+
return []
|
|
194
|
+
# if X is zero-dimensional
|
|
195
|
+
if X.dimension() == 0:
|
|
196
|
+
points = set()
|
|
197
|
+
# find points from all possible affine patches
|
|
198
|
+
for I in xmrange([n + 1 for n in X.ambient_space().dimension_relative_components()]):
|
|
199
|
+
Y, phi = X.affine_patch(I, True)
|
|
200
|
+
aff_points = Y.rational_points()
|
|
201
|
+
for PP in aff_points:
|
|
202
|
+
points.add(phi(PP))
|
|
203
|
+
return list(points)
|
|
204
|
+
R = self.value_ring()
|
|
205
|
+
points = []
|
|
206
|
+
if isinstance(R, RationalField):
|
|
207
|
+
if not B > 0:
|
|
208
|
+
raise TypeError("a positive bound B (= %s) must be specified" % B)
|
|
209
|
+
alg = kwds.pop('algorithm', None)
|
|
210
|
+
if alg is None:
|
|
211
|
+
# sieve should only be called for subschemes and if the bound is not very small
|
|
212
|
+
N = prod([k+1 for k in X.ambient_space().dimension_relative_components()])
|
|
213
|
+
if isinstance(X, AlgebraicScheme_subscheme) and B**N > 5000:
|
|
214
|
+
from sage.schemes.product_projective.rational_point import sieve
|
|
215
|
+
return sieve(X, B)
|
|
216
|
+
else:
|
|
217
|
+
from sage.schemes.product_projective.rational_point import enum_product_projective_rational_field
|
|
218
|
+
return enum_product_projective_rational_field(self, B)
|
|
219
|
+
elif alg == 'sieve':
|
|
220
|
+
from sage.schemes.product_projective.rational_point import sieve
|
|
221
|
+
return sieve(X, B)
|
|
222
|
+
elif alg == 'enumerate':
|
|
223
|
+
from sage.schemes.product_projective.rational_point import enum_product_projective_rational_field
|
|
224
|
+
return enum_product_projective_rational_field(self, B)
|
|
225
|
+
else:
|
|
226
|
+
raise ValueError("algorithm must be 'sieve' or 'enumerate'")
|
|
227
|
+
elif R in NumberFields():
|
|
228
|
+
if not B > 0:
|
|
229
|
+
raise TypeError("a positive bound B (= %s) must be specified" % B)
|
|
230
|
+
from sage.schemes.product_projective.rational_point import enum_product_projective_number_field
|
|
231
|
+
return enum_product_projective_number_field(self, bound=B)
|
|
232
|
+
elif isinstance(R, FiniteField):
|
|
233
|
+
from sage.schemes.product_projective.rational_point import enum_product_projective_finite_field
|
|
234
|
+
return enum_product_projective_finite_field(self)
|
|
235
|
+
else:
|
|
236
|
+
raise TypeError("unable to enumerate points over %s" % R)
|