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,820 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Set of homomorphisms between two schemes
|
|
4
|
+
|
|
5
|
+
For schemes `X` and `Y`, this module implements the set of morphisms
|
|
6
|
+
`\mathrm{Hom}(X,Y)`. This is done by :class:`SchemeHomset_generic`.
|
|
7
|
+
|
|
8
|
+
As a special case, the Hom-sets can also represent the points of a scheme.
|
|
9
|
+
Recall that the `K`-rational points of a scheme `X` over `k` can be identified
|
|
10
|
+
with the set of morphisms `\mathrm{Spec}(K) \to X`. In Sage the rational points
|
|
11
|
+
are implemented by such scheme morphisms. This is done by
|
|
12
|
+
:class:`SchemeHomset_points` and its subclasses.
|
|
13
|
+
|
|
14
|
+
.. NOTE::
|
|
15
|
+
|
|
16
|
+
You should not create the Hom-sets manually. Instead, use the
|
|
17
|
+
:meth:`~sage.structure.parent.Hom` method that is inherited by all
|
|
18
|
+
schemes.
|
|
19
|
+
|
|
20
|
+
AUTHORS:
|
|
21
|
+
|
|
22
|
+
- William Stein (2006): initial version.
|
|
23
|
+
|
|
24
|
+
- Volker Braun (2011-08-11): significant improvement and refactoring.
|
|
25
|
+
|
|
26
|
+
- Ben Hutz (June 2012): added support for projective ring
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
# *****************************************************************************
|
|
30
|
+
# Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
|
|
31
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
32
|
+
#
|
|
33
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
34
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
35
|
+
# the License, or (at your option) any later version.
|
|
36
|
+
# https://www.gnu.org/licenses/
|
|
37
|
+
# *****************************************************************************
|
|
38
|
+
|
|
39
|
+
from sage.categories.homset import HomsetWithBase
|
|
40
|
+
from sage.misc.lazy_import import lazy_import
|
|
41
|
+
from sage.structure.factory import UniqueFactory
|
|
42
|
+
from sage.structure.parent import Set_generic
|
|
43
|
+
|
|
44
|
+
from sage.rings.integer_ring import ZZ
|
|
45
|
+
from sage.rings.ring import CommutativeRing
|
|
46
|
+
from sage.categories.commutative_rings import CommutativeRings
|
|
47
|
+
|
|
48
|
+
from sage.schemes.generic.scheme import AffineScheme
|
|
49
|
+
from sage.schemes.generic.morphism import (
|
|
50
|
+
SchemeMorphism,
|
|
51
|
+
SchemeMorphism_structure_map,
|
|
52
|
+
SchemeMorphism_spec)
|
|
53
|
+
|
|
54
|
+
lazy_import('sage.schemes.affine.affine_space', 'AffineSpace_generic', as_='AffineSpace')
|
|
55
|
+
lazy_import('sage.schemes.generic.algebraic_scheme', 'AlgebraicScheme_subscheme')
|
|
56
|
+
lazy_import('sage.schemes.product_projective.space', 'ProductProjectiveSpaces_ring', as_='ProductProjectiveSpaces')
|
|
57
|
+
lazy_import('sage.schemes.projective.projective_space', 'ProjectiveSpace_ring', as_='ProjectiveSpace')
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def is_SchemeHomset(H):
|
|
61
|
+
r"""
|
|
62
|
+
Test whether ``H`` is a scheme Hom-set.
|
|
63
|
+
|
|
64
|
+
EXAMPLES::
|
|
65
|
+
|
|
66
|
+
sage: f = Spec(QQ).identity_morphism(); f
|
|
67
|
+
Scheme endomorphism of Spectrum of Rational Field
|
|
68
|
+
Defn: Identity map
|
|
69
|
+
sage: from sage.schemes.generic.homset import is_SchemeHomset
|
|
70
|
+
sage: is_SchemeHomset(f)
|
|
71
|
+
doctest:warning...
|
|
72
|
+
DeprecationWarning: The function is_SchemeHomset is deprecated; use 'isinstance(..., SchemeHomset_generic)' instead.
|
|
73
|
+
See https://github.com/sagemath/sage/issues/38022 for details.
|
|
74
|
+
False
|
|
75
|
+
sage: is_SchemeHomset(f.parent())
|
|
76
|
+
True
|
|
77
|
+
sage: is_SchemeHomset('a string')
|
|
78
|
+
False
|
|
79
|
+
"""
|
|
80
|
+
from sage.misc.superseded import deprecation
|
|
81
|
+
deprecation(38022, "The function is_SchemeHomset is deprecated; use 'isinstance(..., SchemeHomset_generic)' instead.")
|
|
82
|
+
return isinstance(H, SchemeHomset_generic)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# *******************************************************************
|
|
86
|
+
# Factory for Hom sets of schemes
|
|
87
|
+
# *******************************************************************
|
|
88
|
+
|
|
89
|
+
class SchemeHomsetFactory(UniqueFactory):
|
|
90
|
+
"""
|
|
91
|
+
Factory for Hom-sets of schemes.
|
|
92
|
+
|
|
93
|
+
EXAMPLES::
|
|
94
|
+
|
|
95
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
96
|
+
sage: A3 = AffineSpace(QQ, 3)
|
|
97
|
+
sage: Hom = A3.Hom(A2)
|
|
98
|
+
|
|
99
|
+
The Hom-sets are uniquely determined by domain and codomain::
|
|
100
|
+
|
|
101
|
+
sage: Hom is copy(Hom)
|
|
102
|
+
True
|
|
103
|
+
sage: Hom is A3.Hom(A2)
|
|
104
|
+
True
|
|
105
|
+
|
|
106
|
+
The Hom-sets are identical if the domains and codomains are
|
|
107
|
+
identical::
|
|
108
|
+
|
|
109
|
+
sage: loads(Hom.dumps()) is Hom
|
|
110
|
+
True
|
|
111
|
+
sage: A3_iso = AffineSpace(QQ, 3)
|
|
112
|
+
sage: A3_iso is A3
|
|
113
|
+
True
|
|
114
|
+
sage: Hom_iso = A3_iso.Hom(A2)
|
|
115
|
+
sage: Hom_iso is Hom
|
|
116
|
+
True
|
|
117
|
+
|
|
118
|
+
TESTS::
|
|
119
|
+
|
|
120
|
+
sage: Hom.base()
|
|
121
|
+
Rational Field
|
|
122
|
+
sage: Hom.base_ring()
|
|
123
|
+
Rational Field
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
def create_key_and_extra_args(self, X, Y, category=None, base=None,
|
|
127
|
+
check=True, as_point_homset=False):
|
|
128
|
+
"""
|
|
129
|
+
Create a key that uniquely determines the Hom-set.
|
|
130
|
+
|
|
131
|
+
INPUT:
|
|
132
|
+
|
|
133
|
+
- ``X`` -- a scheme; the domain of the morphisms
|
|
134
|
+
|
|
135
|
+
- ``Y`` -- a scheme; the codomain of the morphisms
|
|
136
|
+
|
|
137
|
+
- ``category`` -- a category for the Hom-sets (default: schemes over
|
|
138
|
+
given base)
|
|
139
|
+
|
|
140
|
+
- ``base`` -- a scheme or a ring; the base scheme of domain
|
|
141
|
+
and codomain schemes. If a ring is specified, the spectrum
|
|
142
|
+
of that ring will be used as base scheme.
|
|
143
|
+
|
|
144
|
+
- ``check`` -- boolean (default: ``True``)
|
|
145
|
+
|
|
146
|
+
EXAMPLES::
|
|
147
|
+
|
|
148
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
149
|
+
sage: A3 = AffineSpace(QQ, 3)
|
|
150
|
+
sage: A3.Hom(A2) # indirect doctest
|
|
151
|
+
Set of morphisms
|
|
152
|
+
From: Affine Space of dimension 3 over Rational Field
|
|
153
|
+
To: Affine Space of dimension 2 over Rational Field
|
|
154
|
+
sage: from sage.schemes.generic.homset import SchemeHomsetFactory
|
|
155
|
+
sage: SHOMfactory = SchemeHomsetFactory('test')
|
|
156
|
+
sage: key, extra = SHOMfactory.create_key_and_extra_args(A3, A2, check=False)
|
|
157
|
+
sage: key
|
|
158
|
+
(..., ..., Category of schemes over Rational Field, False)
|
|
159
|
+
sage: extra
|
|
160
|
+
{'X': Affine Space of dimension 3 over Rational Field,
|
|
161
|
+
'Y': Affine Space of dimension 2 over Rational Field,
|
|
162
|
+
'base_ring': Rational Field,
|
|
163
|
+
'check': False}
|
|
164
|
+
"""
|
|
165
|
+
_CommRings = CommutativeRings()
|
|
166
|
+
if X in _CommRings:
|
|
167
|
+
X = AffineScheme(X)
|
|
168
|
+
if Y in _CommRings:
|
|
169
|
+
Y = AffineScheme(Y)
|
|
170
|
+
if base is None:
|
|
171
|
+
from sage.structure.element import coercion_model
|
|
172
|
+
base = coercion_model.common_parent(X.base_ring(), Y.base_ring())
|
|
173
|
+
if isinstance(base, AffineScheme):
|
|
174
|
+
base_spec = base
|
|
175
|
+
base_ring = base.coordinate_ring()
|
|
176
|
+
elif base in _CommRings:
|
|
177
|
+
base_spec = AffineScheme(base)
|
|
178
|
+
base_ring = base
|
|
179
|
+
else:
|
|
180
|
+
raise ValueError('base must be a commutative ring or its spectrum')
|
|
181
|
+
if not category:
|
|
182
|
+
from sage.categories.schemes import Schemes
|
|
183
|
+
category = Schemes(base_spec)
|
|
184
|
+
key = (id(X), id(Y), category, as_point_homset)
|
|
185
|
+
extra = {'X':X, 'Y':Y, 'base_ring':base_ring, 'check':check}
|
|
186
|
+
return key, extra
|
|
187
|
+
|
|
188
|
+
def create_object(self, version, key, **extra_args):
|
|
189
|
+
"""
|
|
190
|
+
Create a :class:`SchemeHomset_generic`.
|
|
191
|
+
|
|
192
|
+
INPUT:
|
|
193
|
+
|
|
194
|
+
- ``version`` -- object version; currently not used
|
|
195
|
+
|
|
196
|
+
- ``key`` -- a key created by :meth:`create_key_and_extra_args`
|
|
197
|
+
|
|
198
|
+
- ``extra_args`` -- dictionary of extra keyword arguments
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
203
|
+
sage: A3 = AffineSpace(QQ, 3)
|
|
204
|
+
sage: A3.Hom(A2) is A3.Hom(A2) # indirect doctest
|
|
205
|
+
True
|
|
206
|
+
sage: from sage.schemes.generic.homset import SchemeHomsetFactory
|
|
207
|
+
sage: SHOMfactory = SchemeHomsetFactory('test')
|
|
208
|
+
sage: SHOMfactory.create_object(0, [id(A3), id(A2), A3.category(), False],
|
|
209
|
+
....: check=True, X=A3, Y=A2, base_ring=QQ)
|
|
210
|
+
Set of morphisms
|
|
211
|
+
From: Affine Space of dimension 3 over Rational Field
|
|
212
|
+
To: Affine Space of dimension 2 over Rational Field
|
|
213
|
+
"""
|
|
214
|
+
category = key[2]
|
|
215
|
+
X = extra_args.pop('X')
|
|
216
|
+
Y = extra_args.pop('Y')
|
|
217
|
+
base_ring = extra_args.pop('base_ring')
|
|
218
|
+
if len(key) >= 4 and key[3]: # as_point_homset=True
|
|
219
|
+
return Y._point_homset(X, Y, category=category, base=base_ring, **extra_args)
|
|
220
|
+
try:
|
|
221
|
+
return X._homset(X, Y, category=category, base=base_ring, **extra_args)
|
|
222
|
+
except AttributeError:
|
|
223
|
+
return SchemeHomset_generic(X, Y, category=category, base=base_ring, **extra_args)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
SchemeHomset = SchemeHomsetFactory('sage.schemes.generic.homset.SchemeHomset')
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# *******************************************************************
|
|
230
|
+
# Base class
|
|
231
|
+
# *******************************************************************
|
|
232
|
+
|
|
233
|
+
class SchemeHomset_generic(HomsetWithBase):
|
|
234
|
+
r"""
|
|
235
|
+
The base class for Hom-sets of schemes.
|
|
236
|
+
|
|
237
|
+
INPUT:
|
|
238
|
+
|
|
239
|
+
- ``X`` -- a scheme; the domain of the Hom-set
|
|
240
|
+
|
|
241
|
+
- ``Y`` -- a scheme; the codomain of the Hom-set
|
|
242
|
+
|
|
243
|
+
- ``category`` -- a category (optional); the category of the
|
|
244
|
+
Hom-set
|
|
245
|
+
|
|
246
|
+
- ``check`` -- boolean (default: ``True``); whether to
|
|
247
|
+
check the defining data for consistency
|
|
248
|
+
|
|
249
|
+
EXAMPLES::
|
|
250
|
+
|
|
251
|
+
sage: from sage.schemes.generic.homset import SchemeHomset_generic
|
|
252
|
+
sage: A2 = AffineSpace(QQ,2)
|
|
253
|
+
sage: Hom = SchemeHomset_generic(A2, A2); Hom
|
|
254
|
+
Set of morphisms
|
|
255
|
+
From: Affine Space of dimension 2 over Rational Field
|
|
256
|
+
To: Affine Space of dimension 2 over Rational Field
|
|
257
|
+
sage: Hom.category()
|
|
258
|
+
Category of endsets of schemes over Rational Field
|
|
259
|
+
"""
|
|
260
|
+
Element = SchemeMorphism
|
|
261
|
+
|
|
262
|
+
def __reduce__(self):
|
|
263
|
+
"""
|
|
264
|
+
Used in pickling.
|
|
265
|
+
|
|
266
|
+
EXAMPLES::
|
|
267
|
+
|
|
268
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
269
|
+
sage: A3 = AffineSpace(QQ, 3)
|
|
270
|
+
sage: Hom = A3.Hom(A2)
|
|
271
|
+
sage: loads(Hom.dumps()) == Hom
|
|
272
|
+
True
|
|
273
|
+
"""
|
|
274
|
+
return SchemeHomset, (self.domain(), self.codomain(), self.homset_category(),
|
|
275
|
+
self.base_ring(), False, False)
|
|
276
|
+
|
|
277
|
+
def __call__(self, *args, **kwds):
|
|
278
|
+
r"""
|
|
279
|
+
Make Hom-sets callable.
|
|
280
|
+
|
|
281
|
+
See the ``_call_()`` method of the derived class. All
|
|
282
|
+
arguments are handed through.
|
|
283
|
+
|
|
284
|
+
EXAMPLES::
|
|
285
|
+
|
|
286
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
287
|
+
sage: A2(4,5)
|
|
288
|
+
(4, 5)
|
|
289
|
+
"""
|
|
290
|
+
# Homset (base of HomsetWithBase) overrides __call__ @#$
|
|
291
|
+
return Set_generic.__call__(self, *args, **kwds)
|
|
292
|
+
|
|
293
|
+
def _repr_(self):
|
|
294
|
+
r"""
|
|
295
|
+
Return a string representation.
|
|
296
|
+
|
|
297
|
+
OUTPUT: string
|
|
298
|
+
|
|
299
|
+
EXAMPLES::
|
|
300
|
+
|
|
301
|
+
sage: A = AffineSpace(4, QQ)
|
|
302
|
+
sage: print(A.structure_morphism()._repr_())
|
|
303
|
+
Scheme morphism:
|
|
304
|
+
From: Affine Space of dimension 4 over Rational Field
|
|
305
|
+
To: Spectrum of Rational Field
|
|
306
|
+
Defn: Structure map
|
|
307
|
+
"""
|
|
308
|
+
s = 'Set of morphisms'
|
|
309
|
+
s += '\n From: %s' % self.domain()
|
|
310
|
+
s += '\n To: %s' % self.codomain()
|
|
311
|
+
return s
|
|
312
|
+
|
|
313
|
+
def natural_map(self):
|
|
314
|
+
r"""
|
|
315
|
+
Return a natural map in the Hom space.
|
|
316
|
+
|
|
317
|
+
OUTPUT:
|
|
318
|
+
|
|
319
|
+
A :class:`SchemeMorphism` if there is a natural map from
|
|
320
|
+
domain to codomain. Otherwise, a :exc:`NotImplementedError` is raised.
|
|
321
|
+
|
|
322
|
+
EXAMPLES::
|
|
323
|
+
|
|
324
|
+
sage: A = AffineSpace(4, QQ)
|
|
325
|
+
sage: A.structure_morphism() # indirect doctest
|
|
326
|
+
Scheme morphism:
|
|
327
|
+
From: Affine Space of dimension 4 over Rational Field
|
|
328
|
+
To: Spectrum of Rational Field
|
|
329
|
+
Defn: Structure map
|
|
330
|
+
"""
|
|
331
|
+
X = self.domain()
|
|
332
|
+
Y = self.codomain()
|
|
333
|
+
if isinstance(Y, AffineScheme) and Y.coordinate_ring() == X.base_ring():
|
|
334
|
+
return SchemeMorphism_structure_map(self)
|
|
335
|
+
raise NotImplementedError
|
|
336
|
+
|
|
337
|
+
def _element_constructor_(self, x, check=True):
|
|
338
|
+
"""
|
|
339
|
+
Construct a scheme morphism.
|
|
340
|
+
|
|
341
|
+
INPUT:
|
|
342
|
+
|
|
343
|
+
- ``x`` -- a ring morphism, or a list or a tuple that define a
|
|
344
|
+
ring morphism
|
|
345
|
+
|
|
346
|
+
- ``check`` -- boolean (default: ``True``); passed onto
|
|
347
|
+
functions called by this one to be more careful about input
|
|
348
|
+
argument type checking
|
|
349
|
+
|
|
350
|
+
EXAMPLES::
|
|
351
|
+
|
|
352
|
+
sage: f = ZZ.hom(QQ); f
|
|
353
|
+
Natural morphism:
|
|
354
|
+
From: Integer Ring
|
|
355
|
+
To: Rational Field
|
|
356
|
+
|
|
357
|
+
sage: H = Hom(Spec(QQ, ZZ), Spec(ZZ)); H
|
|
358
|
+
Set of morphisms
|
|
359
|
+
From: Spectrum of Rational Field
|
|
360
|
+
To: Spectrum of Integer Ring
|
|
361
|
+
|
|
362
|
+
sage: phi = H(f); phi
|
|
363
|
+
Affine Scheme morphism:
|
|
364
|
+
From: Spectrum of Rational Field
|
|
365
|
+
To: Spectrum of Integer Ring
|
|
366
|
+
Defn: Natural morphism:
|
|
367
|
+
From: Integer Ring
|
|
368
|
+
To: Rational Field
|
|
369
|
+
|
|
370
|
+
TESTS::
|
|
371
|
+
|
|
372
|
+
sage: H._element_constructor_(f)
|
|
373
|
+
Affine Scheme morphism:
|
|
374
|
+
From: Spectrum of Rational Field
|
|
375
|
+
To: Spectrum of Integer Ring
|
|
376
|
+
Defn: Natural morphism:
|
|
377
|
+
From: Integer Ring
|
|
378
|
+
To: Rational Field
|
|
379
|
+
|
|
380
|
+
We illustrate input type checking::
|
|
381
|
+
|
|
382
|
+
sage: R.<x,y> = QQ[]
|
|
383
|
+
sage: A.<x,y> = AffineSpace(R)
|
|
384
|
+
sage: C = A.subscheme(x*y - 1)
|
|
385
|
+
sage: H = C.Hom(C); H
|
|
386
|
+
Set of morphisms
|
|
387
|
+
From: Closed subscheme of Affine Space of dimension 2 over Rational Field
|
|
388
|
+
defined by: x*y - 1
|
|
389
|
+
To: Closed subscheme of Affine Space of dimension 2 over Rational Field
|
|
390
|
+
defined by: x*y - 1
|
|
391
|
+
sage: H(1)
|
|
392
|
+
Traceback (most recent call last):
|
|
393
|
+
...
|
|
394
|
+
TypeError: x must be a ring homomorphism, list or tuple
|
|
395
|
+
"""
|
|
396
|
+
if isinstance(x, (list, tuple)):
|
|
397
|
+
return self.domain()._morphism(self, x, check=check)
|
|
398
|
+
|
|
399
|
+
from sage.categories.map import Map
|
|
400
|
+
from sage.categories.rings import Rings
|
|
401
|
+
if isinstance(x, Map) and x.category_for().is_subcategory(Rings()):
|
|
402
|
+
# x is a morphism of Rings
|
|
403
|
+
return SchemeMorphism_spec(self, x, check=check)
|
|
404
|
+
|
|
405
|
+
raise TypeError("x must be a ring homomorphism, list or tuple")
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
# *******************************************************************
|
|
409
|
+
# Base class for points
|
|
410
|
+
# *******************************************************************
|
|
411
|
+
|
|
412
|
+
class SchemeHomset_points(SchemeHomset_generic):
|
|
413
|
+
r"""
|
|
414
|
+
Set of rational points of the scheme.
|
|
415
|
+
|
|
416
|
+
Recall that the `K`-rational points of a scheme `X` over `k` can be
|
|
417
|
+
identified with the set of morphisms `\mathrm{Spec}(K) \to X`. In Sage, the
|
|
418
|
+
rational points are implemented by such scheme morphisms.
|
|
419
|
+
|
|
420
|
+
If a scheme has a finite number of points, then the homset is
|
|
421
|
+
supposed to implement the Python iterator interface. See
|
|
422
|
+
:class:`~sage.schemes.toric.homset.SchemeHomset_points_toric_field`
|
|
423
|
+
for example.
|
|
424
|
+
|
|
425
|
+
INPUT:
|
|
426
|
+
|
|
427
|
+
See :class:`SchemeHomset_generic`.
|
|
428
|
+
|
|
429
|
+
EXAMPLES::
|
|
430
|
+
|
|
431
|
+
sage: from sage.schemes.generic.homset import SchemeHomset_points
|
|
432
|
+
sage: SchemeHomset_points(Spec(QQ), AffineSpace(ZZ,2))
|
|
433
|
+
Set of rational points of Affine Space of dimension 2 over Rational Field
|
|
434
|
+
"""
|
|
435
|
+
|
|
436
|
+
def __init__(self, X, Y, category=None, check=True, base=ZZ):
|
|
437
|
+
"""
|
|
438
|
+
Python constructor.
|
|
439
|
+
|
|
440
|
+
INPUT:
|
|
441
|
+
|
|
442
|
+
See :class:`SchemeHomset_generic`.
|
|
443
|
+
|
|
444
|
+
EXAMPLES::
|
|
445
|
+
|
|
446
|
+
sage: from sage.schemes.generic.homset import SchemeHomset_points
|
|
447
|
+
sage: SchemeHomset_points(Spec(QQ), AffineSpace(ZZ,2))
|
|
448
|
+
Set of rational points of Affine Space of dimension 2 over Rational Field
|
|
449
|
+
"""
|
|
450
|
+
if check and not isinstance(X, AffineScheme):
|
|
451
|
+
raise ValueError('The domain must be an affine scheme.')
|
|
452
|
+
SchemeHomset_generic.__init__(self, X, Y, category=category, check=check, base=base)
|
|
453
|
+
|
|
454
|
+
def __reduce__(self):
|
|
455
|
+
"""
|
|
456
|
+
Used in pickling.
|
|
457
|
+
|
|
458
|
+
EXAMPLES::
|
|
459
|
+
|
|
460
|
+
sage: A2 = AffineSpace(QQ, 2)
|
|
461
|
+
sage: Hom = A2(QQ)
|
|
462
|
+
sage: loads(Hom.dumps()) == Hom
|
|
463
|
+
True
|
|
464
|
+
"""
|
|
465
|
+
return SchemeHomset, (self.domain(), self.codomain(), self.homset_category(),
|
|
466
|
+
self.base_ring(), False, True)
|
|
467
|
+
|
|
468
|
+
def _coerce_map_from_(self, other):
|
|
469
|
+
r"""
|
|
470
|
+
Return true if ``other`` canonically coerces to ``self``.
|
|
471
|
+
|
|
472
|
+
EXAMPLES::
|
|
473
|
+
|
|
474
|
+
sage: R.<t> = QQ[]
|
|
475
|
+
sage: P = ProjectiveSpace(QQ, 1, 'x')
|
|
476
|
+
sage: P2 = ProjectiveSpace(R, 1, 'x')
|
|
477
|
+
sage: P2(R)._coerce_map_from_(P(QQ))
|
|
478
|
+
True
|
|
479
|
+
sage: P(QQ)._coerce_map_from_(P2(R))
|
|
480
|
+
False
|
|
481
|
+
|
|
482
|
+
::
|
|
483
|
+
|
|
484
|
+
sage: P = ProjectiveSpace(QQ, 1, 'x')
|
|
485
|
+
sage: P2 = ProjectiveSpace(CC, 1, 'y') # needs sage.rings.real_mpfr
|
|
486
|
+
sage: P2(CC)._coerce_map_from_(P(QQ)) # needs sage.rings.real_mpfr
|
|
487
|
+
False
|
|
488
|
+
|
|
489
|
+
::
|
|
490
|
+
|
|
491
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
492
|
+
sage: H = A.subscheme(z)
|
|
493
|
+
sage: L = A.subscheme([z, y + z])
|
|
494
|
+
sage: A(QQ)._coerce_map_from_(H(QQ))
|
|
495
|
+
True
|
|
496
|
+
sage: H(QQ)._coerce_map_from_(L(QQ)) # needs sage.libs.singular
|
|
497
|
+
True
|
|
498
|
+
sage: L(QQ).has_coerce_map_from(H(QQ)) # needs sage.libs.singular
|
|
499
|
+
False
|
|
500
|
+
sage: A(CC)._coerce_map_from_(H(QQ)) # needs sage.rings.real_mpfr
|
|
501
|
+
True
|
|
502
|
+
sage: H(CC)._coerce_map_from_(L(RR)) # needs sage.libs.singular sage.rings.real_mpfr
|
|
503
|
+
True
|
|
504
|
+
|
|
505
|
+
::
|
|
506
|
+
|
|
507
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
508
|
+
sage: A2.<u,v> = AffineSpace(QQ, 2)
|
|
509
|
+
sage: A(QQ).has_coerce_map_from(A2(QQ))
|
|
510
|
+
False
|
|
511
|
+
|
|
512
|
+
::
|
|
513
|
+
|
|
514
|
+
sage: A.<x,y> = AffineSpace(QQ, 2)
|
|
515
|
+
sage: P.<u,v,w> = ProjectiveSpace(QQ, 2)
|
|
516
|
+
sage: A(QQ).has_coerce_map_from(P(QQ))
|
|
517
|
+
False
|
|
518
|
+
|
|
519
|
+
::
|
|
520
|
+
|
|
521
|
+
sage: A = AffineSpace(QQ, 1)
|
|
522
|
+
sage: A(QQ)._coerce_map_from_(ZZ)
|
|
523
|
+
True
|
|
524
|
+
|
|
525
|
+
::
|
|
526
|
+
|
|
527
|
+
sage: PS = ProjectiveSpace(ZZ, 1, 'x')
|
|
528
|
+
sage: PS2 = ProjectiveSpace(Zp(7), 1, 'x') # needs sage.rings.padics
|
|
529
|
+
sage: PS(ZZ).has_coerce_map_from(PS2(Zp(7))) # needs sage.rings.padics
|
|
530
|
+
False
|
|
531
|
+
sage: PS2(Zp(7)).has_coerce_map_from(PS(ZZ)) # needs sage.rings.padics
|
|
532
|
+
True
|
|
533
|
+
|
|
534
|
+
::
|
|
535
|
+
|
|
536
|
+
sage: PP1 = ProductProjectiveSpaces(ZZ, [2,1], 'x')
|
|
537
|
+
sage: PP1(QQ)._coerce_map_from_(PP1(ZZ))
|
|
538
|
+
True
|
|
539
|
+
sage: PP2 = ProductProjectiveSpaces(QQ, [1,2], 'x')
|
|
540
|
+
sage: PP2(QQ)._coerce_map_from_(PP1(ZZ))
|
|
541
|
+
False
|
|
542
|
+
sage: PP3 = ProductProjectiveSpaces(QQ, [2,1], 'y')
|
|
543
|
+
sage: PP3(QQ)._coerce_map_from_(PP1(ZZ))
|
|
544
|
+
False
|
|
545
|
+
|
|
546
|
+
::
|
|
547
|
+
|
|
548
|
+
sage: # needs sage.rings.number_field
|
|
549
|
+
sage: K.<w> = QuadraticField(2)
|
|
550
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
551
|
+
sage: H = A.subscheme(z)
|
|
552
|
+
sage: A(K).has_coerce_map_from(H(QQ))
|
|
553
|
+
True
|
|
554
|
+
|
|
555
|
+
TESTS::
|
|
556
|
+
|
|
557
|
+
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
|
|
558
|
+
sage: X = P.subscheme([x - y])
|
|
559
|
+
sage: P(1,1) == X(1,1)
|
|
560
|
+
True
|
|
561
|
+
|
|
562
|
+
::
|
|
563
|
+
|
|
564
|
+
sage: A = AffineSpace(QQ, 1, 'x')
|
|
565
|
+
sage: AC = AffineSpace(CC, 1, 'x') # needs sage.rings.real_mpfr
|
|
566
|
+
sage: A(3/2) == AC(3/2) # needs sage.rings.real_mpfr
|
|
567
|
+
True
|
|
568
|
+
|
|
569
|
+
::
|
|
570
|
+
|
|
571
|
+
sage: A = AffineSpace(QQ, 1)
|
|
572
|
+
sage: A(0) == 0
|
|
573
|
+
True
|
|
574
|
+
"""
|
|
575
|
+
target = self.codomain()
|
|
576
|
+
# ring elements can be coerced to a space if we're affine dimension 1
|
|
577
|
+
# and the base rings are coercible
|
|
578
|
+
if isinstance(other, CommutativeRing):
|
|
579
|
+
try:
|
|
580
|
+
if (isinstance(target.ambient_space(), AffineSpace)
|
|
581
|
+
and target.ambient_space().dimension_relative() == 1):
|
|
582
|
+
return target.base_ring().has_coerce_map_from(other)
|
|
583
|
+
else:
|
|
584
|
+
return False
|
|
585
|
+
except AttributeError: # no .ambient_space
|
|
586
|
+
return False
|
|
587
|
+
elif isinstance(other, SchemeHomset_points):
|
|
588
|
+
# we are converting between scheme points
|
|
589
|
+
source = other.codomain()
|
|
590
|
+
if isinstance(target, AlgebraicScheme_subscheme):
|
|
591
|
+
# subscheme coerce when there is containment
|
|
592
|
+
if not isinstance(source, AlgebraicScheme_subscheme):
|
|
593
|
+
return False
|
|
594
|
+
if target.ambient_space() == source.ambient_space():
|
|
595
|
+
if all(g in source.defining_ideal()
|
|
596
|
+
for g in target.defining_polynomials()):
|
|
597
|
+
return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
|
|
598
|
+
else:
|
|
599
|
+
# if the target is an ambient space, we can coerce if the base rings coerce
|
|
600
|
+
# and they are the same type: affine, projective, etc and have the same
|
|
601
|
+
# variable names
|
|
602
|
+
try:
|
|
603
|
+
ta = target.ambient_space()
|
|
604
|
+
sa = source.ambient_space()
|
|
605
|
+
except AttributeError: #no .ambient_space
|
|
606
|
+
return False
|
|
607
|
+
#for projective and affine varieties, we check dimension
|
|
608
|
+
#and matching variable names
|
|
609
|
+
if ((isinstance(ta, ProjectiveSpace) and isinstance(sa, ProjectiveSpace))
|
|
610
|
+
or (isinstance(ta, AffineSpace) and isinstance(sa, AffineSpace))):
|
|
611
|
+
if (ta.variable_names() == sa.variable_names()):
|
|
612
|
+
return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
|
|
613
|
+
else:
|
|
614
|
+
return False
|
|
615
|
+
#for products of projective spaces, we check dimension of
|
|
616
|
+
#components and matching variable names
|
|
617
|
+
elif isinstance(ta, ProductProjectiveSpaces) and isinstance(sa, ProductProjectiveSpaces):
|
|
618
|
+
if (ta.dimension_relative_components() == sa.dimension_relative_components()) \
|
|
619
|
+
and (ta.variable_names() == sa.variable_names()):
|
|
620
|
+
return self.domain().coordinate_ring().has_coerce_map_from(other.domain().coordinate_ring())
|
|
621
|
+
else:
|
|
622
|
+
return False
|
|
623
|
+
|
|
624
|
+
def _element_constructor_(self, *v, **kwds):
|
|
625
|
+
"""
|
|
626
|
+
The element constructor.
|
|
627
|
+
|
|
628
|
+
INPUT:
|
|
629
|
+
|
|
630
|
+
- ``v`` -- anything that determines a scheme morphism in the
|
|
631
|
+
Hom-set
|
|
632
|
+
|
|
633
|
+
OUTPUT: the scheme morphism determined by ``v``
|
|
634
|
+
|
|
635
|
+
EXAMPLES::
|
|
636
|
+
|
|
637
|
+
sage: A2 = AffineSpace(ZZ, 2)
|
|
638
|
+
sage: F = GF(3)
|
|
639
|
+
sage: F_points = A2(F); type(F_points)
|
|
640
|
+
<class 'sage.schemes.affine.affine_homset.SchemeHomset_points_affine_with_category'>
|
|
641
|
+
sage: F_points([2,5])
|
|
642
|
+
(2, 2)
|
|
643
|
+
|
|
644
|
+
sage: # needs sage.rings.finite_rings
|
|
645
|
+
sage: P2 = ProjectiveSpace(GF(3), 2)
|
|
646
|
+
sage: F.<a> = GF(9, 'a')
|
|
647
|
+
sage: F_points = P2(F)
|
|
648
|
+
sage: type(F_points)
|
|
649
|
+
<class 'sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field_with_category'>
|
|
650
|
+
sage: F_points([4,2*a])
|
|
651
|
+
(1 : 2*a : 1)
|
|
652
|
+
|
|
653
|
+
TESTS::
|
|
654
|
+
|
|
655
|
+
sage: F_points._element_constructor_([4,2*a]) # needs sage.rings.finite_rings
|
|
656
|
+
(1 : 2*a : 1)
|
|
657
|
+
"""
|
|
658
|
+
if len(v) == 1:
|
|
659
|
+
v = v[0]
|
|
660
|
+
return self.extended_codomain()._point(self, v, **kwds)
|
|
661
|
+
|
|
662
|
+
def __iter__(self):
|
|
663
|
+
r"""
|
|
664
|
+
Return an iterator for the set of rational points on this scheme.
|
|
665
|
+
|
|
666
|
+
By default, this calls the :meth:`points` method, which is implemented
|
|
667
|
+
when the base ring is a field
|
|
668
|
+
|
|
669
|
+
- for affine homsets at :meth:`sage.schemes.affine.affine_homset.SchemeHomset_points_affine.points`;
|
|
670
|
+
- for projective homsets at :meth:`sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field.points`;
|
|
671
|
+
- and toric homsets at :meth:`sage.schemes.toric.homset.SchemeHomset_points_toric_field._enumerator`.
|
|
672
|
+
|
|
673
|
+
OUTPUT: iterator over points
|
|
674
|
+
|
|
675
|
+
TESTS::
|
|
676
|
+
|
|
677
|
+
sage: # needs sage.schemes
|
|
678
|
+
sage: E = EllipticCurve(GF(19), [1, 0])
|
|
679
|
+
sage: list(E.point_homset())
|
|
680
|
+
[(0 : 1 : 0), (0 : 0 : 1), (3 : 7 : 1), (3 : 12 : 1), (4 : 7 : 1),
|
|
681
|
+
(4 : 12 : 1), (5 : 4 : 1), (5 : 15 : 1), (8 : 8 : 1), (8 : 11 : 1),
|
|
682
|
+
(9 : 4 : 1), (9 : 15 : 1), (12 : 7 : 1), (12 : 12 : 1), (13 : 5 : 1),
|
|
683
|
+
(13 : 14 : 1), (17 : 3 : 1), (17 : 16 : 1), (18 : 6 : 1), (18 : 13 : 1)]
|
|
684
|
+
sage: _ == list(E)
|
|
685
|
+
True
|
|
686
|
+
sage: E.point_homset().cardinality()
|
|
687
|
+
20
|
|
688
|
+
|
|
689
|
+
::
|
|
690
|
+
|
|
691
|
+
sage: A.<x, y> = AffineSpace(2, GF(5))
|
|
692
|
+
sage: list(A.point_homset())
|
|
693
|
+
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4),
|
|
694
|
+
(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),
|
|
695
|
+
(2, 0), (2, 1), (2, 2), (2, 3), (2, 4),
|
|
696
|
+
(3, 0), (3, 1), (3, 2), (3, 3), (3, 4),
|
|
697
|
+
(4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
|
|
698
|
+
sage: _ == list(A)
|
|
699
|
+
True
|
|
700
|
+
sage: A.point_homset().cardinality()
|
|
701
|
+
25
|
|
702
|
+
|
|
703
|
+
::
|
|
704
|
+
|
|
705
|
+
sage: # needs sage.geometry.polyhedron sage.graphs
|
|
706
|
+
sage: P1 = toric_varieties.P1(base_ring=GF(3))
|
|
707
|
+
sage: list(P1.point_homset())
|
|
708
|
+
[[0 : 1], [1 : 0], [1 : 1], [1 : 2]]
|
|
709
|
+
sage: P1.point_homset().cardinality()
|
|
710
|
+
4
|
|
711
|
+
"""
|
|
712
|
+
yield from self.points()
|
|
713
|
+
|
|
714
|
+
def extended_codomain(self):
|
|
715
|
+
r"""
|
|
716
|
+
Return the codomain with extended base, if necessary.
|
|
717
|
+
|
|
718
|
+
OUTPUT:
|
|
719
|
+
|
|
720
|
+
The codomain scheme, with its base ring extended to the
|
|
721
|
+
codomain. That is, the codomain is of the form `\mathrm{Spec}(R)` and
|
|
722
|
+
the base ring of the domain is extended to `R`.
|
|
723
|
+
|
|
724
|
+
EXAMPLES::
|
|
725
|
+
|
|
726
|
+
sage: # needs sage.rings.number_field
|
|
727
|
+
sage: P2 = ProjectiveSpace(QQ, 2)
|
|
728
|
+
sage: x = polygen(ZZ, 'x')
|
|
729
|
+
sage: K.<a> = NumberField(x^2 + x - (3^3-3))
|
|
730
|
+
sage: K_points = P2(K); K_points
|
|
731
|
+
Set of rational points of Projective Space of dimension 2
|
|
732
|
+
over Number Field in a with defining polynomial x^2 + x - 24
|
|
733
|
+
sage: K_points.codomain()
|
|
734
|
+
Projective Space of dimension 2 over Rational Field
|
|
735
|
+
sage: K_points.extended_codomain()
|
|
736
|
+
Projective Space of dimension 2
|
|
737
|
+
over Number Field in a with defining polynomial x^2 + x - 24
|
|
738
|
+
"""
|
|
739
|
+
if '_extended_codomain' in self.__dict__:
|
|
740
|
+
return self._extended_codomain
|
|
741
|
+
R = self.domain().coordinate_ring()
|
|
742
|
+
if R is not self.codomain().base_ring():
|
|
743
|
+
X = self.codomain().base_extend(R)
|
|
744
|
+
else:
|
|
745
|
+
X = self.codomain()
|
|
746
|
+
self._extended_codomain = X
|
|
747
|
+
return X
|
|
748
|
+
|
|
749
|
+
def zero(self):
|
|
750
|
+
"""
|
|
751
|
+
Return the identity of the codomain with extended base, if necessary.
|
|
752
|
+
"""
|
|
753
|
+
return self.extended_codomain().zero()
|
|
754
|
+
|
|
755
|
+
def _repr_(self):
|
|
756
|
+
"""
|
|
757
|
+
Return a string representation of ``self``.
|
|
758
|
+
|
|
759
|
+
OUTPUT: string
|
|
760
|
+
|
|
761
|
+
EXAMPLES::
|
|
762
|
+
|
|
763
|
+
sage: P2 = ProjectiveSpace(ZZ, 2)
|
|
764
|
+
sage: P2(QQ)._repr_()
|
|
765
|
+
'Set of rational points of Projective Space of dimension 2 over Rational Field'
|
|
766
|
+
"""
|
|
767
|
+
return 'Set of rational points of '+str(self.extended_codomain())
|
|
768
|
+
|
|
769
|
+
def value_ring(self):
|
|
770
|
+
r"""
|
|
771
|
+
Return `R` for a point Hom-set `X(\mathrm{Spec}(R))`.
|
|
772
|
+
|
|
773
|
+
OUTPUT: a commutative ring
|
|
774
|
+
|
|
775
|
+
EXAMPLES::
|
|
776
|
+
|
|
777
|
+
sage: P2 = ProjectiveSpace(ZZ, 2)
|
|
778
|
+
sage: P2(QQ).value_ring()
|
|
779
|
+
Rational Field
|
|
780
|
+
"""
|
|
781
|
+
dom = self.domain()
|
|
782
|
+
if not isinstance(dom, AffineScheme):
|
|
783
|
+
raise ValueError("value rings are defined for affine domains only")
|
|
784
|
+
return dom.coordinate_ring()
|
|
785
|
+
|
|
786
|
+
def cardinality(self):
|
|
787
|
+
"""
|
|
788
|
+
Return the number of points.
|
|
789
|
+
|
|
790
|
+
OUTPUT: integer or infinity
|
|
791
|
+
|
|
792
|
+
EXAMPLES::
|
|
793
|
+
|
|
794
|
+
sage: toric_varieties.P2().point_set().cardinality() # needs palp sage.geometry.polyhedron sage.graphs
|
|
795
|
+
+Infinity
|
|
796
|
+
|
|
797
|
+
sage: P2 = toric_varieties.P2(base_ring=GF(3)) # needs palp sage.geometry.polyhedron sage.graphs
|
|
798
|
+
sage: P2.point_set().cardinality() # needs palp sage.geometry.polyhedron sage.graphs
|
|
799
|
+
13
|
|
800
|
+
"""
|
|
801
|
+
if hasattr(self, 'is_finite') and not self.is_finite():
|
|
802
|
+
from sage.rings.infinity import Infinity
|
|
803
|
+
return Infinity
|
|
804
|
+
return sum(ZZ.one() for point in self)
|
|
805
|
+
|
|
806
|
+
__len__ = cardinality
|
|
807
|
+
|
|
808
|
+
def list(self):
|
|
809
|
+
"""
|
|
810
|
+
Return a tuple containing all points.
|
|
811
|
+
|
|
812
|
+
OUTPUT: a tuple containing all points of the toric variety
|
|
813
|
+
|
|
814
|
+
EXAMPLES::
|
|
815
|
+
|
|
816
|
+
sage: P1 = toric_varieties.P1(base_ring=GF(3)) # needs palp sage.geometry.polyhedron sage.graphs
|
|
817
|
+
sage: P1.point_set().list() # needs palp sage.geometry.polyhedron sage.graphs
|
|
818
|
+
([0 : 1], [1 : 0], [1 : 1], [1 : 2])
|
|
819
|
+
"""
|
|
820
|
+
return tuple(self)
|