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,718 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Set of homomorphisms between two projective schemes
|
|
4
|
+
|
|
5
|
+
For schemes `X` and `Y`, this module implements the set of morphisms
|
|
6
|
+
`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
|
|
9
|
+
scheme. Recall that the `K`-rational points of a scheme `X` over `k`
|
|
10
|
+
can be identified with the set of morphisms `Spec(K) \to X`. In Sage
|
|
11
|
+
the rational points are implemented by such scheme morphisms. This is
|
|
12
|
+
done by :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
|
+
- Ben Hutz (2018): add numerical point support
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
# *****************************************************************************
|
|
32
|
+
# Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
|
|
33
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
34
|
+
#
|
|
35
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
36
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
37
|
+
# the License, or (at your option) any later version.
|
|
38
|
+
# http://www.gnu.org/licenses/
|
|
39
|
+
# *****************************************************************************
|
|
40
|
+
|
|
41
|
+
from copy import copy
|
|
42
|
+
|
|
43
|
+
from sage.categories.fields import Fields
|
|
44
|
+
from sage.categories.number_fields import NumberFields
|
|
45
|
+
from sage.misc.lazy_import import lazy_import
|
|
46
|
+
from sage.misc.verbose import verbose
|
|
47
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
48
|
+
from sage.rings.integer_ring import ZZ
|
|
49
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
50
|
+
from sage.rings.rational_field import RationalField
|
|
51
|
+
from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme
|
|
52
|
+
from sage.schemes.generic.homset import SchemeHomset_points, SchemeHomset_generic
|
|
53
|
+
|
|
54
|
+
lazy_import('sage.rings.cc', 'CC')
|
|
55
|
+
lazy_import('sage.rings.real_mpfr', 'RR')
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# *******************************************************************
|
|
59
|
+
# Projective varieties
|
|
60
|
+
# *******************************************************************
|
|
61
|
+
|
|
62
|
+
class SchemeHomset_points_projective_field(SchemeHomset_points):
|
|
63
|
+
"""
|
|
64
|
+
Set of rational points of a projective variety over a field.
|
|
65
|
+
|
|
66
|
+
INPUT:
|
|
67
|
+
|
|
68
|
+
See :class:`SchemeHomset_generic`.
|
|
69
|
+
|
|
70
|
+
EXAMPLES::
|
|
71
|
+
|
|
72
|
+
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field
|
|
73
|
+
sage: SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,2))
|
|
74
|
+
Set of rational points of Projective Space of dimension 2 over Rational Field
|
|
75
|
+
"""
|
|
76
|
+
def points(self, **kwds):
|
|
77
|
+
"""
|
|
78
|
+
Return some or all rational points of a projective scheme.
|
|
79
|
+
|
|
80
|
+
For dimension 0 subschemes points are determined through a groebner
|
|
81
|
+
basis calculation. For schemes or subschemes with dimension greater than 1
|
|
82
|
+
points are determined through enumeration up to the specified bound.
|
|
83
|
+
|
|
84
|
+
INPUT: keyword arguments:
|
|
85
|
+
|
|
86
|
+
- ``bound`` -- real number (default: 0); the bound for the coordinates
|
|
87
|
+
for subschemes with dimension at least 1
|
|
88
|
+
|
|
89
|
+
- ``precision`` -- integer (default: 53); the precision to use to
|
|
90
|
+
compute the elements of bounded height for number fields
|
|
91
|
+
|
|
92
|
+
- ``point_tolerance`` -- positive real number (default: `10^{-10}`);
|
|
93
|
+
for numerically inexact fields, two points are considered the same
|
|
94
|
+
if their coordinates are within tolerance
|
|
95
|
+
|
|
96
|
+
- ``zero_tolerance`` -- positive real number (default: `10^{-10}`);
|
|
97
|
+
for numerically inexact fields, points are on the subscheme if they
|
|
98
|
+
satisfy the equations to within tolerance
|
|
99
|
+
|
|
100
|
+
- ``tolerance`` -- a rational number in (0,1] used in Doyle-Krumm
|
|
101
|
+
algorithm-4 for enumeration over number fields
|
|
102
|
+
|
|
103
|
+
OUTPUT: list of rational points of a projective scheme
|
|
104
|
+
|
|
105
|
+
.. WARNING::
|
|
106
|
+
|
|
107
|
+
For numerically inexact fields such as ComplexField or RealField the
|
|
108
|
+
list of points returned is very likely to be incomplete. It may also
|
|
109
|
+
contain repeated points due to tolerances.
|
|
110
|
+
|
|
111
|
+
EXAMPLES::
|
|
112
|
+
|
|
113
|
+
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
|
|
114
|
+
sage: P(QQ).points(bound=4)
|
|
115
|
+
[(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1),
|
|
116
|
+
(-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1),
|
|
117
|
+
(1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1),
|
|
118
|
+
(4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]
|
|
119
|
+
|
|
120
|
+
::
|
|
121
|
+
|
|
122
|
+
sage: u = QQ['u'].0
|
|
123
|
+
sage: K.<v> = NumberField(u^2 + 3) # needs sage.rings.number_field
|
|
124
|
+
sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field
|
|
125
|
+
sage: len(P(K).points(bound=1.8)) # needs sage.rings.number_field
|
|
126
|
+
309
|
|
127
|
+
|
|
128
|
+
::
|
|
129
|
+
|
|
130
|
+
sage: P1 = ProjectiveSpace(GF(2), 1)
|
|
131
|
+
sage: F.<a> = GF(4, 'a') # needs sage.rings.finite_rings
|
|
132
|
+
sage: P1(F).points() # needs sage.libs.singular sage.rings.finite_rings
|
|
133
|
+
[(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]
|
|
134
|
+
|
|
135
|
+
::
|
|
136
|
+
|
|
137
|
+
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
138
|
+
sage: E = P.subscheme([(y^3-y*z^2) - (x^3-x*z^2), (y^3-y*z^2) + (x^3-x*z^2)])
|
|
139
|
+
sage: E(P.base_ring()).points() # needs sage.libs.singular
|
|
140
|
+
[(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1),
|
|
141
|
+
(0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]
|
|
142
|
+
|
|
143
|
+
::
|
|
144
|
+
|
|
145
|
+
sage: # needs sage.rings.real_mpfr
|
|
146
|
+
sage: P.<x,y,z> = ProjectiveSpace(CC, 2)
|
|
147
|
+
sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
|
|
148
|
+
sage: L = E(P.base_ring()).points(); sorted(L, key=str) # needs sage.libs.singular
|
|
149
|
+
verbose 0 (...: projective_homset.py, points) Warning: computations in
|
|
150
|
+
the numerical fields are inexact;points may be computed partially or incorrectly.
|
|
151
|
+
[(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
|
|
152
|
+
(-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000),
|
|
153
|
+
(-1.00000000000000*I : 0.000000000000000 : 1.00000000000000),
|
|
154
|
+
(0.000000000000000 : 0.000000000000000 : 1.00000000000000),
|
|
155
|
+
(1.00000000000000 : 1.00000000000000 : 0.000000000000000),
|
|
156
|
+
(1.00000000000000*I : 0.000000000000000 : 1.00000000000000)]
|
|
157
|
+
sage: L[0].codomain() # needs sage.libs.singular
|
|
158
|
+
Projective Space of dimension 2 over Complex Field with 53 bits of precision
|
|
159
|
+
|
|
160
|
+
::
|
|
161
|
+
|
|
162
|
+
sage: # needs sage.rings.complex_double
|
|
163
|
+
sage: P.<x,y,z> = ProjectiveSpace(CDF, 2)
|
|
164
|
+
sage: E = P.subscheme([y^2 + x^2 + z^2, x*y*z])
|
|
165
|
+
sage: len(E(P.base_ring()).points()) # needs sage.libs.singular
|
|
166
|
+
verbose 0 (...: projective_homset.py, points) Warning: computations in
|
|
167
|
+
the numerical fields are inexact;points may be computed partially or incorrectly.
|
|
168
|
+
6
|
|
169
|
+
"""
|
|
170
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace_ring
|
|
171
|
+
X = self.codomain()
|
|
172
|
+
if not isinstance(X, ProjectiveSpace_ring) and X.base_ring() in Fields():
|
|
173
|
+
if hasattr(X.base_ring(), 'precision'):
|
|
174
|
+
numerical = True
|
|
175
|
+
verbose("Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly.", level=0)
|
|
176
|
+
pt_tol = RR(kwds.pop('point_tolerance', 10**(-10)))
|
|
177
|
+
zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
|
|
178
|
+
if pt_tol <= 0 or zero_tol <= 0:
|
|
179
|
+
raise ValueError("tolerance must be positive")
|
|
180
|
+
else:
|
|
181
|
+
numerical = False
|
|
182
|
+
#Then it must be a subscheme
|
|
183
|
+
dim_ideal = X.defining_ideal().dimension()
|
|
184
|
+
if dim_ideal < 1: # no points
|
|
185
|
+
return []
|
|
186
|
+
if dim_ideal == 1: # if X zero-dimensional
|
|
187
|
+
rat_points = set()
|
|
188
|
+
PS = X.ambient_space()
|
|
189
|
+
N = PS.dimension_relative()
|
|
190
|
+
BR = X.base_ring()
|
|
191
|
+
#need a lexicographic ordering for elimination
|
|
192
|
+
R = PolynomialRing(BR, N + 1, PS.variable_names(), order='lex')
|
|
193
|
+
I = R.ideal(X.defining_polynomials())
|
|
194
|
+
I0 = R.ideal(0)
|
|
195
|
+
#Determine the points through elimination
|
|
196
|
+
#This is much faster than using the I.variety() function on each affine chart.
|
|
197
|
+
for k in range(N + 1):
|
|
198
|
+
#create the elimination ideal for the kth affine patch
|
|
199
|
+
G = I.substitute({R.gen(k):1}).groebner_basis()
|
|
200
|
+
if G != [1]:
|
|
201
|
+
P = {}
|
|
202
|
+
#keep track that we know the kth coordinate is 1
|
|
203
|
+
P.update({R.gen(k):1})
|
|
204
|
+
points = [P]
|
|
205
|
+
#work backwards from solving each equation for the possible
|
|
206
|
+
#values of the next coordinate
|
|
207
|
+
for i in range(len(G) - 1, -1, -1):
|
|
208
|
+
new_points = []
|
|
209
|
+
good = 0
|
|
210
|
+
for P in points:
|
|
211
|
+
#substitute in our dictionary entry that has the values
|
|
212
|
+
#of coordinates known so far. This results in a single
|
|
213
|
+
#variable polynomial (by elimination)
|
|
214
|
+
L = G[i].substitute(P)
|
|
215
|
+
if R(L).degree() > 0:
|
|
216
|
+
if numerical:
|
|
217
|
+
for pol in L.univariate_polynomial().roots(multiplicities=False):
|
|
218
|
+
good = 1
|
|
219
|
+
r = L.variables()[0]
|
|
220
|
+
varindex = R.gens().index(r)
|
|
221
|
+
P.update({R.gen(varindex):pol})
|
|
222
|
+
new_points.append(copy(P))
|
|
223
|
+
else:
|
|
224
|
+
L = L.factor()
|
|
225
|
+
#the linear factors give the possible rational values of
|
|
226
|
+
#this coordinate
|
|
227
|
+
for pol, pow in L:
|
|
228
|
+
if pol.degree() == 1 and len(pol.variables()) == 1:
|
|
229
|
+
good = 1
|
|
230
|
+
r = pol.variables()[0]
|
|
231
|
+
varindex = R.gens().index(r)
|
|
232
|
+
#add this coordinates information to
|
|
233
|
+
#each dictionary entry
|
|
234
|
+
P.update({R.gen(varindex):-pol.constant_coefficient() / pol.monomial_coefficient(r)})
|
|
235
|
+
new_points.append(copy(P))
|
|
236
|
+
else:
|
|
237
|
+
new_points.append(P)
|
|
238
|
+
good = 1
|
|
239
|
+
if good:
|
|
240
|
+
points = new_points
|
|
241
|
+
#the dictionary entries now have values for all coordinates
|
|
242
|
+
#they are the rational solutions to the equations
|
|
243
|
+
#make them into projective points
|
|
244
|
+
for i in range(len(points)):
|
|
245
|
+
if numerical:
|
|
246
|
+
if len(points[i]) == N + 1:
|
|
247
|
+
S = PS([points[i][R.gen(j)] for j in range(N + 1)])
|
|
248
|
+
S.normalize_coordinates()
|
|
249
|
+
if all(g(list(S)) < zero_tol for g in X.defining_polynomials()):
|
|
250
|
+
rat_points.add(S)
|
|
251
|
+
else:
|
|
252
|
+
if len(points[i]) == N + 1 and I.subs(points[i]) == I0:
|
|
253
|
+
S = X([points[i][R.gen(j)] for j in range(N + 1)])
|
|
254
|
+
S.normalize_coordinates()
|
|
255
|
+
rat_points.add(S)
|
|
256
|
+
|
|
257
|
+
# remove duplicate element using tolerance
|
|
258
|
+
if numerical:
|
|
259
|
+
dupl_points = list(rat_points)
|
|
260
|
+
for i in range(len(dupl_points)):
|
|
261
|
+
u = dupl_points[i]
|
|
262
|
+
for j in range(i+1, len(dupl_points)):
|
|
263
|
+
v = dupl_points[j]
|
|
264
|
+
if all((u[k] - v[k]).abs() < pt_tol
|
|
265
|
+
for k in range(len(u))):
|
|
266
|
+
rat_points.remove(u)
|
|
267
|
+
break
|
|
268
|
+
|
|
269
|
+
rat_points = sorted(rat_points)
|
|
270
|
+
return rat_points
|
|
271
|
+
R = self.value_ring()
|
|
272
|
+
B = kwds.pop('bound', 0)
|
|
273
|
+
tol = kwds.pop('tolerance', 1e-2)
|
|
274
|
+
prec = kwds.pop('precision', 53)
|
|
275
|
+
if isinstance(R, RationalField):
|
|
276
|
+
if not B > 0:
|
|
277
|
+
raise TypeError("a positive bound B (= %s) must be specified" % B)
|
|
278
|
+
if isinstance(X, AlgebraicScheme_subscheme): # sieve should only be called for subschemes
|
|
279
|
+
from sage.schemes.projective.projective_rational_point import sieve
|
|
280
|
+
return sieve(X, B)
|
|
281
|
+
else:
|
|
282
|
+
from sage.schemes.projective.projective_rational_point import enum_projective_rational_field
|
|
283
|
+
return enum_projective_rational_field(self, B)
|
|
284
|
+
elif R in NumberFields():
|
|
285
|
+
if not B > 0:
|
|
286
|
+
raise TypeError("a positive bound B (= %s) must be specified" % B)
|
|
287
|
+
from sage.schemes.projective.projective_rational_point import enum_projective_number_field
|
|
288
|
+
return enum_projective_number_field(self, bound=B, tolerance=tol, precision=prec)
|
|
289
|
+
elif isinstance(R, FiniteField):
|
|
290
|
+
from sage.schemes.projective.projective_rational_point import enum_projective_finite_field
|
|
291
|
+
return enum_projective_finite_field(self.extended_codomain())
|
|
292
|
+
else:
|
|
293
|
+
raise TypeError("unable to enumerate points over %s" % R)
|
|
294
|
+
|
|
295
|
+
def numerical_points(self, F=None, **kwds):
|
|
296
|
+
"""
|
|
297
|
+
Return some or all numerical approximations of rational points of a projective scheme.
|
|
298
|
+
|
|
299
|
+
This is for dimension 0 subschemes only and the points are determined
|
|
300
|
+
through a groebner calculation over the base ring and then numerically
|
|
301
|
+
approximating the roots of the resulting polynomials. If the base ring
|
|
302
|
+
is a number field, the embedding into ``F`` must be known.
|
|
303
|
+
|
|
304
|
+
INPUT:
|
|
305
|
+
|
|
306
|
+
- ``F`` -- numerical ring
|
|
307
|
+
|
|
308
|
+
kwds:
|
|
309
|
+
|
|
310
|
+
- ``point_tolerance`` -- positive real number (default: `10^{-10}`).
|
|
311
|
+
For numerically inexact fields, two points are considered the same
|
|
312
|
+
if their coordinates are within tolerance.
|
|
313
|
+
|
|
314
|
+
- ``zero_tolerance`` -- positive real number (default: `10^{-10}`).
|
|
315
|
+
For numerically inexact fields, points are on the subscheme if they
|
|
316
|
+
satisfy the equations to within tolerance.
|
|
317
|
+
|
|
318
|
+
OUTPUT: list of points in the ambient space
|
|
319
|
+
|
|
320
|
+
.. WARNING::
|
|
321
|
+
|
|
322
|
+
For numerically inexact fields the list of points returned may contain repeated
|
|
323
|
+
or be missing points due to tolerance.
|
|
324
|
+
|
|
325
|
+
EXAMPLES::
|
|
326
|
+
|
|
327
|
+
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
328
|
+
sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
|
|
329
|
+
sage: L = E(QQ).numerical_points(F=RR); L # needs sage.libs.singular
|
|
330
|
+
[(0.000000000000000 : 0.000000000000000 : 1.00000000000000),
|
|
331
|
+
(1.00000000000000 : 1.00000000000000 : 0.000000000000000)]
|
|
332
|
+
sage: L[0].codomain() # needs sage.libs.singular
|
|
333
|
+
Projective Space of dimension 2 over Real Field with 53 bits of precision
|
|
334
|
+
|
|
335
|
+
::
|
|
336
|
+
|
|
337
|
+
sage: S.<a> = QQ[]
|
|
338
|
+
sage: K.<v> = NumberField(a^5 - 7, embedding=CC(7)**(1/5)) # needs sage.rings.number_field
|
|
339
|
+
sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field
|
|
340
|
+
sage: X = P.subscheme([x^2 - v^2*z^2, y - v*z]) # needs sage.rings.number_field
|
|
341
|
+
sage: len(X(K).numerical_points(F=CDF)) # needs sage.libs.singular sage.rings.number_field
|
|
342
|
+
2
|
|
343
|
+
|
|
344
|
+
::
|
|
345
|
+
|
|
346
|
+
sage: P.<x1, x2, x3> = ProjectiveSpace(QQ, 2)
|
|
347
|
+
sage: E = P.subscheme([3000*x1^50 + 9875643*x2^2*x3^48 + 12334545*x2^50, x1 + x2])
|
|
348
|
+
sage: len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=1e-6)) # needs sage.libs.singular
|
|
349
|
+
49
|
|
350
|
+
|
|
351
|
+
TESTS::
|
|
352
|
+
|
|
353
|
+
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
354
|
+
sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
|
|
355
|
+
sage: E(QQ).numerical_points(F=CDF, point_tolerance=-1) # needs sage.libs.singular
|
|
356
|
+
Traceback (most recent call last):
|
|
357
|
+
...
|
|
358
|
+
ValueError: tolerance must be positive
|
|
359
|
+
|
|
360
|
+
::
|
|
361
|
+
|
|
362
|
+
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
363
|
+
sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
|
|
364
|
+
sage: E(QQ).numerical_points(F=CC, zero_tolerance=-1) # needs sage.libs.singular
|
|
365
|
+
Traceback (most recent call last):
|
|
366
|
+
...
|
|
367
|
+
ValueError: tolerance must be positive
|
|
368
|
+
|
|
369
|
+
::
|
|
370
|
+
|
|
371
|
+
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2)
|
|
372
|
+
sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z])
|
|
373
|
+
sage: E(QQ).numerical_points(F=QQbar) # needs sage.rings.number_field
|
|
374
|
+
Traceback (most recent call last):
|
|
375
|
+
...
|
|
376
|
+
TypeError: F must be a numerical field
|
|
377
|
+
"""
|
|
378
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace_ring
|
|
379
|
+
if F is None:
|
|
380
|
+
F = CC
|
|
381
|
+
if F not in Fields() or not hasattr(F, 'precision'):
|
|
382
|
+
raise TypeError('F must be a numerical field')
|
|
383
|
+
X = self.codomain()
|
|
384
|
+
if X.base_ring() not in NumberFields():
|
|
385
|
+
raise TypeError('base ring must be a number field')
|
|
386
|
+
|
|
387
|
+
PP = X.ambient_space().change_ring(F)
|
|
388
|
+
if not isinstance(X, ProjectiveSpace_ring) and X.base_ring() in Fields():
|
|
389
|
+
#Then it must be a subscheme
|
|
390
|
+
dim_ideal = X.defining_ideal().dimension()
|
|
391
|
+
if dim_ideal < 1: # no points
|
|
392
|
+
return []
|
|
393
|
+
if dim_ideal == 1: # if X zero-dimensional
|
|
394
|
+
pt_tol = RR(kwds.pop('point_tolerance', 10**(-10)))
|
|
395
|
+
zero_tol = RR(kwds.pop('zero_tolerance', 10**(-10)))
|
|
396
|
+
if pt_tol <= 0 or zero_tol <= 0:
|
|
397
|
+
raise ValueError("tolerance must be positive")
|
|
398
|
+
rat_points = set()
|
|
399
|
+
PS = X.ambient_space()
|
|
400
|
+
N = PS.dimension_relative()
|
|
401
|
+
BR = X.base_ring()
|
|
402
|
+
#need a lexicographic ordering for elimination
|
|
403
|
+
R = PolynomialRing(BR, N + 1, PS.variable_names(), order='lex')
|
|
404
|
+
RF = R.change_ring(F)
|
|
405
|
+
I = R.ideal(X.defining_polynomials())
|
|
406
|
+
#Determine the points through elimination
|
|
407
|
+
#This is much faster than using the I.variety() function on each affine chart.
|
|
408
|
+
for k in range(N + 1):
|
|
409
|
+
#create the elimination ideal for the kth affine patch
|
|
410
|
+
G = I.substitute({R.gen(k):1}).groebner_basis()
|
|
411
|
+
G = [RF(g) for g in G]
|
|
412
|
+
if G != [1]:
|
|
413
|
+
P = {}
|
|
414
|
+
#keep track that we know the kth coordinate is 1
|
|
415
|
+
P.update({RF.gen(k):1})
|
|
416
|
+
points = [P]
|
|
417
|
+
#work backwards from solving each equation for the possible
|
|
418
|
+
#values of the next coordinate
|
|
419
|
+
for i in range(len(G) - 1, -1, -1):
|
|
420
|
+
new_points = []
|
|
421
|
+
good = 0
|
|
422
|
+
for P in points:
|
|
423
|
+
#substitute in our dictionary entry that has the values
|
|
424
|
+
#of coordinates known so far. This results in a single
|
|
425
|
+
#variable polynomial (by elimination)
|
|
426
|
+
L = G[i].substitute(P)
|
|
427
|
+
if len(RF(L).variables()) == 1:
|
|
428
|
+
for pol in L.univariate_polynomial().roots(ring=F, multiplicities=False):
|
|
429
|
+
r = L.variables()[0]
|
|
430
|
+
varindex = RF.gens().index(r)
|
|
431
|
+
P.update({RF.gen(varindex):pol})
|
|
432
|
+
new_points.append(copy(P))
|
|
433
|
+
good = 1
|
|
434
|
+
else:
|
|
435
|
+
new_points.append(P)
|
|
436
|
+
good = 1
|
|
437
|
+
if good:
|
|
438
|
+
points = new_points
|
|
439
|
+
#the dictionary entries now have values for all coordinates
|
|
440
|
+
#they are approximate solutions to the equations
|
|
441
|
+
#make them into projective points
|
|
442
|
+
polys = [g.change_ring(F) for g in X.defining_polynomials()]
|
|
443
|
+
for i in range(len(points)):
|
|
444
|
+
if len(points[i]) == N + 1:
|
|
445
|
+
S = PP([points[i][RF.gen(j)] for j in range(N + 1)])
|
|
446
|
+
S.normalize_coordinates()
|
|
447
|
+
if all(g(list(S)) < zero_tol for g in polys):
|
|
448
|
+
rat_points.add(S)
|
|
449
|
+
# remove duplicate element using tolerance
|
|
450
|
+
#since they are normalized we can just compare coefficients
|
|
451
|
+
dupl_points = list(rat_points)
|
|
452
|
+
for i in range(len(dupl_points)):
|
|
453
|
+
u = dupl_points[i]
|
|
454
|
+
for j in range(i+1, len(dupl_points)):
|
|
455
|
+
v = dupl_points[j]
|
|
456
|
+
if all((u[k] - v[k]).abs() < pt_tol
|
|
457
|
+
for k in range(len(u))):
|
|
458
|
+
rat_points.remove(u)
|
|
459
|
+
break
|
|
460
|
+
|
|
461
|
+
rat_points = sorted(rat_points)
|
|
462
|
+
return rat_points
|
|
463
|
+
raise NotImplementedError('numerical approximation of points only for dimension 0 subschemes')
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
class SchemeHomset_points_projective_ring(SchemeHomset_points):
|
|
467
|
+
"""
|
|
468
|
+
Set of rational points of a projective variety over a commutative ring.
|
|
469
|
+
|
|
470
|
+
INPUT:
|
|
471
|
+
|
|
472
|
+
See :class:`SchemeHomset_generic`.
|
|
473
|
+
|
|
474
|
+
EXAMPLES::
|
|
475
|
+
|
|
476
|
+
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
|
|
477
|
+
sage: SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,2))
|
|
478
|
+
Set of rational points of Projective Space of dimension 2 over Integer Ring
|
|
479
|
+
"""
|
|
480
|
+
|
|
481
|
+
def points(self, B=0):
|
|
482
|
+
"""
|
|
483
|
+
Return some or all rational points of a projective scheme.
|
|
484
|
+
|
|
485
|
+
INPUT:
|
|
486
|
+
|
|
487
|
+
- ``B`` -- integer (default: 0); the bound for the coordinates
|
|
488
|
+
|
|
489
|
+
EXAMPLES::
|
|
490
|
+
|
|
491
|
+
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring
|
|
492
|
+
sage: H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, 2))
|
|
493
|
+
sage: H.points(3)
|
|
494
|
+
[(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1),
|
|
495
|
+
(0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3),
|
|
496
|
+
(0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3),
|
|
497
|
+
(1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2),
|
|
498
|
+
(1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0),
|
|
499
|
+
(1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2),
|
|
500
|
+
(1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3),
|
|
501
|
+
(1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2),
|
|
502
|
+
(1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1),
|
|
503
|
+
(1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0),
|
|
504
|
+
(1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1),
|
|
505
|
+
(1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3),
|
|
506
|
+
(2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2),
|
|
507
|
+
(2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3),
|
|
508
|
+
(2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1),
|
|
509
|
+
(2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1),
|
|
510
|
+
(2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1),
|
|
511
|
+
(2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3),
|
|
512
|
+
(2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2),
|
|
513
|
+
(2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2),
|
|
514
|
+
(3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1),
|
|
515
|
+
(3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1),
|
|
516
|
+
(3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2),
|
|
517
|
+
(3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2),
|
|
518
|
+
(3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3),
|
|
519
|
+
(3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3),
|
|
520
|
+
(3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]
|
|
521
|
+
"""
|
|
522
|
+
R = self.value_ring()
|
|
523
|
+
if R == ZZ:
|
|
524
|
+
if not B > 0:
|
|
525
|
+
raise TypeError("a positive bound B (= %s) must be specified" % B)
|
|
526
|
+
from sage.schemes.projective.projective_rational_point import enum_projective_rational_field
|
|
527
|
+
return enum_projective_rational_field(self,B)
|
|
528
|
+
else:
|
|
529
|
+
raise TypeError("unable to enumerate points over %s" % R)
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
class SchemeHomset_polynomial_projective_space(SchemeHomset_generic):
|
|
533
|
+
"""
|
|
534
|
+
Set of morphisms of a projective space.
|
|
535
|
+
|
|
536
|
+
EXAMPLES::
|
|
537
|
+
|
|
538
|
+
sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
|
|
539
|
+
sage: Hom(P, P)
|
|
540
|
+
Set of morphisms
|
|
541
|
+
From: Projective Space of dimension 2 over Rational Field
|
|
542
|
+
To: Projective Space of dimension 2 over Rational Field
|
|
543
|
+
"""
|
|
544
|
+
def identity(self):
|
|
545
|
+
"""
|
|
546
|
+
Return the identity morphism of this hom-set.
|
|
547
|
+
|
|
548
|
+
EXAMPLES::
|
|
549
|
+
|
|
550
|
+
sage: P.<x,y,z> = ProjectiveSpace(2, QQ)
|
|
551
|
+
sage: Hom(P, P)
|
|
552
|
+
Set of morphisms
|
|
553
|
+
From: Projective Space of dimension 2 over Rational Field
|
|
554
|
+
To: Projective Space of dimension 2 over Rational Field
|
|
555
|
+
sage: _.identity()
|
|
556
|
+
Scheme endomorphism of Projective Space of dimension 2 over Rational Field
|
|
557
|
+
Defn: Identity map
|
|
558
|
+
"""
|
|
559
|
+
if self.is_endomorphism_set():
|
|
560
|
+
from sage.schemes.generic.morphism import SchemeMorphism_polynomial_id
|
|
561
|
+
return SchemeMorphism_polynomial_id(self.domain())
|
|
562
|
+
raise TypeError("identity map is only defined for endomorphisms")
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
# *******************************************************************
|
|
566
|
+
# Abelian varieties
|
|
567
|
+
# *******************************************************************
|
|
568
|
+
|
|
569
|
+
class SchemeHomset_points_abelian_variety_field(SchemeHomset_points_projective_field):
|
|
570
|
+
r"""
|
|
571
|
+
Set of rational points of an Abelian variety.
|
|
572
|
+
|
|
573
|
+
INPUT:
|
|
574
|
+
|
|
575
|
+
See :class:`SchemeHomset_generic`.
|
|
576
|
+
|
|
577
|
+
TESTS:
|
|
578
|
+
|
|
579
|
+
The bug reported at :issue:`1785` is fixed::
|
|
580
|
+
|
|
581
|
+
sage: # needs database_cremona_mini_ellcurve sage.rings.number_field sage.schemes
|
|
582
|
+
sage: x = polygen(ZZ, 'x')
|
|
583
|
+
sage: K.<a> = NumberField(x^2 + x - (3^3-3))
|
|
584
|
+
sage: E = EllipticCurve('37a')
|
|
585
|
+
sage: X = E(K)
|
|
586
|
+
sage: X
|
|
587
|
+
Abelian group of points on
|
|
588
|
+
Elliptic Curve defined by y^2 + y = x^3 + (-1)*x
|
|
589
|
+
over Number Field in a with defining polynomial x^2 + x - 24
|
|
590
|
+
sage: P = X([3,a])
|
|
591
|
+
sage: P
|
|
592
|
+
(3 : a : 1)
|
|
593
|
+
sage: P in E
|
|
594
|
+
False
|
|
595
|
+
sage: P in E.base_extend(K)
|
|
596
|
+
True
|
|
597
|
+
sage: P in X.codomain()
|
|
598
|
+
False
|
|
599
|
+
sage: P in X.extended_codomain()
|
|
600
|
+
True
|
|
601
|
+
|
|
602
|
+
Check for :issue:`11982`::
|
|
603
|
+
|
|
604
|
+
sage: P2.<x,y,z> = ProjectiveSpace(QQ,2)
|
|
605
|
+
sage: d = 7
|
|
606
|
+
sage: C = Curve(x^3 + y^3 - d*z^3) # needs sage.schemes
|
|
607
|
+
sage: E = EllipticCurve([0,-432*d^2]) # needs sage.schemes
|
|
608
|
+
sage: transformation = [(36*d*z-y)/(72*d), (36*d*z+y)/(72*d), x/(12*d)]
|
|
609
|
+
sage: phi = E.hom(transformation, C); phi # needs sage.schemes
|
|
610
|
+
Scheme morphism:
|
|
611
|
+
From: Elliptic Curve defined by y^2 = x^3 - 21168 over Rational Field
|
|
612
|
+
To: Projective Plane Curve over Rational Field defined by x^3 + y^3 - 7*z^3
|
|
613
|
+
Defn: Defined on coordinates by sending (x : y : z) to
|
|
614
|
+
(-1/504*y + 1/2*z : 1/504*y + 1/2*z : 1/84*x)
|
|
615
|
+
"""
|
|
616
|
+
|
|
617
|
+
def _element_constructor_(self, *v, **kwds):
|
|
618
|
+
"""
|
|
619
|
+
The element constructor.
|
|
620
|
+
|
|
621
|
+
INPUT:
|
|
622
|
+
|
|
623
|
+
- ``v`` -- anything that determines a scheme morphism in the Hom-set
|
|
624
|
+
|
|
625
|
+
OUTPUT: the scheme morphism determined by ``v``
|
|
626
|
+
|
|
627
|
+
EXAMPLES::
|
|
628
|
+
|
|
629
|
+
sage: # needs database_cremona_mini_ellcurve sage.schemes
|
|
630
|
+
sage: E = EllipticCurve('37a')
|
|
631
|
+
sage: X = E(QQ)
|
|
632
|
+
sage: P = X([0,1,0]); P
|
|
633
|
+
(0 : 1 : 0)
|
|
634
|
+
sage: type(P)
|
|
635
|
+
<class 'sage.schemes.elliptic_curves.ell_point.EllipticCurvePoint_number_field'>
|
|
636
|
+
|
|
637
|
+
TESTS::
|
|
638
|
+
|
|
639
|
+
sage: X._element_constructor_([0,1,0]) # needs database_cremona_mini_ellcurve sage.schemes
|
|
640
|
+
(0 : 1 : 0)
|
|
641
|
+
"""
|
|
642
|
+
if len(v) == 1:
|
|
643
|
+
v = v[0]
|
|
644
|
+
if v == 0:
|
|
645
|
+
return self.zero()
|
|
646
|
+
return self.codomain()._point(self.extended_codomain(), v, **kwds)
|
|
647
|
+
|
|
648
|
+
def _repr_(self):
|
|
649
|
+
"""
|
|
650
|
+
Return a string representation of this homset.
|
|
651
|
+
|
|
652
|
+
OUTPUT: string
|
|
653
|
+
|
|
654
|
+
EXAMPLES::
|
|
655
|
+
|
|
656
|
+
sage: # needs database_cremona_mini_ellcurve sage.schemes
|
|
657
|
+
sage: E = EllipticCurve('37a')
|
|
658
|
+
sage: X = E(QQ)
|
|
659
|
+
sage: X._repr_()
|
|
660
|
+
'Abelian group of points on Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field'
|
|
661
|
+
"""
|
|
662
|
+
s = 'Abelian group of points on ' + str(self.extended_codomain())
|
|
663
|
+
return s
|
|
664
|
+
|
|
665
|
+
def base_extend(self, R):
|
|
666
|
+
"""
|
|
667
|
+
Extend the base ring.
|
|
668
|
+
|
|
669
|
+
This is currently not implemented except for the trivial case
|
|
670
|
+
``R==ZZ``.
|
|
671
|
+
|
|
672
|
+
INPUT:
|
|
673
|
+
|
|
674
|
+
- ``R`` -- a ring
|
|
675
|
+
|
|
676
|
+
EXAMPLES::
|
|
677
|
+
|
|
678
|
+
sage: # needs database_cremona_mini_ellcurve sage.schemes
|
|
679
|
+
sage: E = EllipticCurve('37a')
|
|
680
|
+
sage: Hom = E.point_homset(); Hom
|
|
681
|
+
Abelian group of points on Elliptic Curve defined
|
|
682
|
+
by y^2 + y = x^3 - x over Rational Field
|
|
683
|
+
sage: Hom.base_ring()
|
|
684
|
+
Rational Field
|
|
685
|
+
sage: Hom.base_extend(QQ)
|
|
686
|
+
Traceback (most recent call last):
|
|
687
|
+
...
|
|
688
|
+
NotImplementedError: Abelian variety point sets are not
|
|
689
|
+
implemented as modules over rings other than ZZ
|
|
690
|
+
"""
|
|
691
|
+
if R is not ZZ:
|
|
692
|
+
raise NotImplementedError('Abelian variety point sets are not '
|
|
693
|
+
'implemented as modules over rings other than ZZ')
|
|
694
|
+
return self
|
|
695
|
+
|
|
696
|
+
def zero(self):
|
|
697
|
+
r"""
|
|
698
|
+
Return the neutral element in this group of points.
|
|
699
|
+
|
|
700
|
+
EXAMPLES::
|
|
701
|
+
|
|
702
|
+
sage: # needs sage.schemes
|
|
703
|
+
sage: S = EllipticCurve(GF(5), [1,1]).point_homset()
|
|
704
|
+
sage: S.zero()
|
|
705
|
+
(0 : 1 : 0)
|
|
706
|
+
sage: S = EllipticCurve(Zmod(15), [1,1]).point_homset()
|
|
707
|
+
sage: S.zero()
|
|
708
|
+
(0 : 1 : 0)
|
|
709
|
+
"""
|
|
710
|
+
return self.codomain()(0)
|
|
711
|
+
|
|
712
|
+
_an_element_ = zero
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
from sage.misc.persist import register_unpickle_override
|
|
716
|
+
register_unpickle_override('sage.schemes.generic.homset',
|
|
717
|
+
'SchemeHomsetModule_abelian_variety_coordinates_field',
|
|
718
|
+
SchemeHomset_points_abelian_variety_field)
|