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,592 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Subschemes of affine space
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- David Kohel, William Stein (2005): initial version
|
|
8
|
+
|
|
9
|
+
- Ben Hutz (2013): affine subschemes
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
14
|
+
# Copyright (C) 2013 Ben Hutz <bn4941@gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
|
|
23
|
+
from sage.categories.fields import Fields
|
|
24
|
+
from sage.schemes.generic.algebraic_scheme import AlgebraicScheme_subscheme
|
|
25
|
+
|
|
26
|
+
from .affine_morphism import SchemeMorphism_polynomial_affine_subscheme_field
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AlgebraicScheme_subscheme_affine(AlgebraicScheme_subscheme):
|
|
30
|
+
r"""
|
|
31
|
+
An algebraic subscheme of affine space.
|
|
32
|
+
|
|
33
|
+
INPUT:
|
|
34
|
+
|
|
35
|
+
- ``A`` -- ambient affine space
|
|
36
|
+
|
|
37
|
+
- ``polynomials`` -- single polynomial, ideal or iterable of defining
|
|
38
|
+
polynomials
|
|
39
|
+
|
|
40
|
+
EXAMPLES::
|
|
41
|
+
|
|
42
|
+
sage: A3.<x, y, z> = AffineSpace(QQ, 3)
|
|
43
|
+
sage: A3.subscheme([x^2 - y*z])
|
|
44
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field defined by:
|
|
45
|
+
x^2 - y*z
|
|
46
|
+
|
|
47
|
+
TESTS::
|
|
48
|
+
|
|
49
|
+
sage: from sage.schemes.affine.affine_subscheme import AlgebraicScheme_subscheme_affine
|
|
50
|
+
sage: AlgebraicScheme_subscheme_affine(A3, [x^2 - y*z])
|
|
51
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field defined by:
|
|
52
|
+
x^2 - y*z
|
|
53
|
+
"""
|
|
54
|
+
def __init__(self, A, polynomials, embedding_center=None,
|
|
55
|
+
embedding_codomain=None, embedding_images=None):
|
|
56
|
+
"""
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
60
|
+
sage: A.subscheme([y^2 - x*z - x*y])
|
|
61
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field defined by:
|
|
62
|
+
-x*y + y^2 - x*z
|
|
63
|
+
"""
|
|
64
|
+
AlgebraicScheme_subscheme.__init__(self, A, polynomials)
|
|
65
|
+
if embedding_images is not None:
|
|
66
|
+
self._embedding_morphism = self.hom(embedding_images,
|
|
67
|
+
embedding_codomain)
|
|
68
|
+
elif A._ambient_projective_space is not None:
|
|
69
|
+
self._embedding_morphism = self.projective_embedding(
|
|
70
|
+
A._default_embedding_index, A._ambient_projective_space)
|
|
71
|
+
if embedding_center is not None:
|
|
72
|
+
self._embedding_center = self.point(embedding_center)
|
|
73
|
+
|
|
74
|
+
def _morphism(self, *args, **kwds):
|
|
75
|
+
r"""
|
|
76
|
+
A morphism between two schemes in your category, usually defined via
|
|
77
|
+
polynomials. Your morphism class should derive from
|
|
78
|
+
:class:`SchemeMorphism_polynomial`. These morphisms will usually be
|
|
79
|
+
elements of the Hom-set
|
|
80
|
+
:class:`~sage.schemes.generic.homset.SchemeHomset_generic`.
|
|
81
|
+
|
|
82
|
+
EXAMPLES::
|
|
83
|
+
|
|
84
|
+
sage: A3.<x,y,z> = AffineSpace(3, ZZ)
|
|
85
|
+
sage: A3._morphism(A3.Hom(A3), [x,y,z])
|
|
86
|
+
Scheme endomorphism of Affine Space of dimension 3 over Integer Ring
|
|
87
|
+
Defn: Defined on coordinates by sending (x, y, z) to
|
|
88
|
+
(x, y, z)
|
|
89
|
+
"""
|
|
90
|
+
return self.ambient_space()._morphism(*args, **kwds)
|
|
91
|
+
|
|
92
|
+
def dimension(self):
|
|
93
|
+
"""
|
|
94
|
+
Return the dimension of the affine algebraic subscheme.
|
|
95
|
+
|
|
96
|
+
EXAMPLES::
|
|
97
|
+
|
|
98
|
+
sage: # needs sage.libs.singular
|
|
99
|
+
sage: A.<x,y> = AffineSpace(2, QQ)
|
|
100
|
+
sage: A.subscheme([]).dimension()
|
|
101
|
+
2
|
|
102
|
+
sage: A.subscheme([x]).dimension()
|
|
103
|
+
1
|
|
104
|
+
sage: A.subscheme([x^5]).dimension()
|
|
105
|
+
1
|
|
106
|
+
sage: A.subscheme([x^2 + y^2 - 1]).dimension()
|
|
107
|
+
1
|
|
108
|
+
sage: A.subscheme([x*(x-1), y*(y-1)]).dimension()
|
|
109
|
+
0
|
|
110
|
+
|
|
111
|
+
Something less obvious::
|
|
112
|
+
|
|
113
|
+
sage: A.<x,y,z,w> = AffineSpace(4, QQ)
|
|
114
|
+
sage: X = A.subscheme([x^2, x^2*y^2 + z^2, z^2 - w^2, 10*x^2 + w^2 - z^2])
|
|
115
|
+
sage: X
|
|
116
|
+
Closed subscheme of Affine Space of dimension 4 over Rational Field defined by:
|
|
117
|
+
x^2,
|
|
118
|
+
x^2*y^2 + z^2,
|
|
119
|
+
z^2 - w^2,
|
|
120
|
+
10*x^2 - z^2 + w^2
|
|
121
|
+
sage: X.dimension() # needs sage.libs.singular
|
|
122
|
+
1
|
|
123
|
+
"""
|
|
124
|
+
try:
|
|
125
|
+
return self.__dimension
|
|
126
|
+
except AttributeError:
|
|
127
|
+
self.__dimension = self.defining_ideal().dimension()
|
|
128
|
+
return self.__dimension
|
|
129
|
+
|
|
130
|
+
def projective_embedding(self, i=None, PP=None):
|
|
131
|
+
"""
|
|
132
|
+
Return a morphism from this affine scheme into an ambient projective
|
|
133
|
+
space of the same dimension.
|
|
134
|
+
|
|
135
|
+
The codomain of this morphism is the projective closure of this affine
|
|
136
|
+
scheme in ``PP``, if given, or otherwise in a new projective space that
|
|
137
|
+
is constructed.
|
|
138
|
+
|
|
139
|
+
INPUT:
|
|
140
|
+
|
|
141
|
+
- ``i`` -- integer (default: dimension of self = last coordinate);
|
|
142
|
+
determines which projective embedding to compute. The embedding is
|
|
143
|
+
that which has a 1 in the `i`-th coordinate, numbered from 0.
|
|
144
|
+
|
|
145
|
+
- ``PP`` -- (default: ``None``) ambient projective space, i.e., ambient
|
|
146
|
+
space of codomain of morphism; this is constructed if it is not given
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: A.<x, y, z> = AffineSpace(3, ZZ)
|
|
151
|
+
sage: S = A.subscheme([x*y - z])
|
|
152
|
+
sage: S.projective_embedding() # needs sage.libs.singular
|
|
153
|
+
Scheme morphism:
|
|
154
|
+
From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
|
|
155
|
+
defined by: x*y - z
|
|
156
|
+
To: Closed subscheme of Projective Space of dimension 3 over Integer Ring
|
|
157
|
+
defined by: x0*x1 - x2*x3
|
|
158
|
+
Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
|
|
159
|
+
|
|
160
|
+
::
|
|
161
|
+
|
|
162
|
+
sage: A.<x, y, z> = AffineSpace(3, ZZ)
|
|
163
|
+
sage: P = ProjectiveSpace(3, ZZ, 'u')
|
|
164
|
+
sage: S = A.subscheme([x^2 - y*z])
|
|
165
|
+
sage: S.projective_embedding(1, P) # needs sage.libs.singular
|
|
166
|
+
Scheme morphism:
|
|
167
|
+
From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
|
|
168
|
+
defined by: x^2 - y*z
|
|
169
|
+
To: Closed subscheme of Projective Space of dimension 3 over Integer Ring
|
|
170
|
+
defined by: u0^2 - u2*u3
|
|
171
|
+
Defn: Defined on coordinates by sending (x, y, z) to (x : 1 : y : z)
|
|
172
|
+
|
|
173
|
+
::
|
|
174
|
+
|
|
175
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
176
|
+
sage: X = A.subscheme([y - x^2, z - x^3])
|
|
177
|
+
sage: X.projective_embedding() # needs sage.libs.singular
|
|
178
|
+
Scheme morphism:
|
|
179
|
+
From: Closed subscheme of Affine Space of dimension 3 over Rational Field
|
|
180
|
+
defined by: -x^2 + y, -x^3 + z
|
|
181
|
+
To: Closed subscheme of Projective Space of dimension 3 over Rational Field
|
|
182
|
+
defined by: x0^2 - x1*x3, x0*x1 - x2*x3, x1^2 - x0*x2
|
|
183
|
+
Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
|
|
184
|
+
|
|
185
|
+
When taking a closed subscheme of an affine space with a
|
|
186
|
+
projective embedding, the subscheme inherits the embedding::
|
|
187
|
+
|
|
188
|
+
sage: A.<u,v> = AffineSpace(2, QQ, default_embedding_index=1)
|
|
189
|
+
sage: X = A.subscheme(u - v) # needs sage.libs.singular
|
|
190
|
+
sage: X.projective_embedding() # needs sage.libs.singular
|
|
191
|
+
Scheme morphism:
|
|
192
|
+
From: Closed subscheme of Affine Space of dimension 2 over Rational Field
|
|
193
|
+
defined by: u - v
|
|
194
|
+
To: Closed subscheme of Projective Space of dimension 2 over Rational Field
|
|
195
|
+
defined by: x0 - x2
|
|
196
|
+
Defn: Defined on coordinates by sending (u, v) to (u : 1 : v)
|
|
197
|
+
sage: phi = X.projective_embedding() # needs sage.libs.singular
|
|
198
|
+
sage: psi = A.projective_embedding()
|
|
199
|
+
sage: phi(X(2, 2)) == psi(A(X(2, 2))) # needs sage.libs.singular
|
|
200
|
+
True
|
|
201
|
+
"""
|
|
202
|
+
AA = self.ambient_space()
|
|
203
|
+
n = AA.dimension_relative()
|
|
204
|
+
if i is None:
|
|
205
|
+
try:
|
|
206
|
+
return self._embedding_morphism
|
|
207
|
+
except AttributeError:
|
|
208
|
+
i = n
|
|
209
|
+
i = int(i)
|
|
210
|
+
if i < 0 or i > n:
|
|
211
|
+
raise ValueError("Argument i (=%s) must be between 0 and %s, inclusive" % (i, n))
|
|
212
|
+
try:
|
|
213
|
+
phi = self.__projective_embedding[i]
|
|
214
|
+
# assume that if you've passed in a new ambient projective space
|
|
215
|
+
# you want to override the existing embedding
|
|
216
|
+
if PP is None or phi.codomain().ambient_space() == PP:
|
|
217
|
+
return phi
|
|
218
|
+
except AttributeError:
|
|
219
|
+
self.__projective_embedding = {}
|
|
220
|
+
except KeyError:
|
|
221
|
+
pass
|
|
222
|
+
if PP is None:
|
|
223
|
+
PP = AA.projective_embedding(i).codomain()
|
|
224
|
+
elif PP.dimension_relative() != n:
|
|
225
|
+
raise ValueError("Projective Space must be of dimension %s" % (n))
|
|
226
|
+
PR = PP.coordinate_ring()
|
|
227
|
+
# Groebner basis w.r.t. a graded monomial order computed here to ensure
|
|
228
|
+
# after homogenization, the basis elements will generate the defining
|
|
229
|
+
# ideal of the projective closure of this affine subscheme
|
|
230
|
+
R = AA.coordinate_ring()
|
|
231
|
+
G = self.defining_ideal().groebner_basis()
|
|
232
|
+
v = list(PP.gens())
|
|
233
|
+
z = v.pop(i)
|
|
234
|
+
phi = R.hom(v, PR)
|
|
235
|
+
v.append(z)
|
|
236
|
+
X = PP.subscheme([phi(f).homogenize(i) for f in G])
|
|
237
|
+
v = list(R.gens())
|
|
238
|
+
v.insert(i, R(1))
|
|
239
|
+
phi = self.hom(v, X)
|
|
240
|
+
self.__projective_embedding[i] = phi
|
|
241
|
+
return phi
|
|
242
|
+
|
|
243
|
+
def projective_closure(self, i=None, PP=None):
|
|
244
|
+
r"""
|
|
245
|
+
Return the projective closure of this affine subscheme.
|
|
246
|
+
|
|
247
|
+
INPUT:
|
|
248
|
+
|
|
249
|
+
- ``i`` -- (default: ``None``) determines the embedding to use to
|
|
250
|
+
compute the projective closure of this affine subscheme. The
|
|
251
|
+
embedding used is the one which has a 1 in the i-th coordinate,
|
|
252
|
+
numbered from 0.
|
|
253
|
+
|
|
254
|
+
- ``PP`` -- (default: ``None``) ambient projective space, i.e., ambient
|
|
255
|
+
space of codomain of morphism; this is constructed if it is not given
|
|
256
|
+
|
|
257
|
+
OUTPUT: a projective subscheme
|
|
258
|
+
|
|
259
|
+
EXAMPLES::
|
|
260
|
+
|
|
261
|
+
sage: A.<x,y,z,w> = AffineSpace(QQ, 4)
|
|
262
|
+
sage: X = A.subscheme([x^2 - y, x*y - z, y^2 - w,
|
|
263
|
+
....: x*z - w, y*z - x*w, z^2 - y*w])
|
|
264
|
+
sage: X.projective_closure() # needs sage.libs.singular
|
|
265
|
+
Closed subscheme of Projective Space of dimension 4 over Rational Field
|
|
266
|
+
defined by:
|
|
267
|
+
x0^2 - x1*x4,
|
|
268
|
+
x0*x1 - x2*x4,
|
|
269
|
+
x1^2 - x3*x4,
|
|
270
|
+
x0*x2 - x3*x4,
|
|
271
|
+
x1*x2 - x0*x3,
|
|
272
|
+
x2^2 - x1*x3
|
|
273
|
+
|
|
274
|
+
::
|
|
275
|
+
|
|
276
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
277
|
+
sage: P.<a,b,c,d> = ProjectiveSpace(QQ, 3)
|
|
278
|
+
sage: X = A.subscheme([z - x^2 - y^2])
|
|
279
|
+
sage: X.projective_closure(1, P).ambient_space() == P # needs sage.libs.singular
|
|
280
|
+
True
|
|
281
|
+
"""
|
|
282
|
+
return self.projective_embedding(i, PP).codomain()
|
|
283
|
+
|
|
284
|
+
def is_smooth(self, point=None):
|
|
285
|
+
r"""
|
|
286
|
+
Test whether the algebraic subscheme is smooth.
|
|
287
|
+
|
|
288
|
+
INPUT:
|
|
289
|
+
|
|
290
|
+
- ``point`` -- a point or ``None`` (default). The point to
|
|
291
|
+
test smoothness at
|
|
292
|
+
|
|
293
|
+
OUTPUT:
|
|
294
|
+
|
|
295
|
+
boolean; if no point was specified, returns whether the
|
|
296
|
+
algebraic subscheme is smooth everywhere. Otherwise,
|
|
297
|
+
smoothness at the specified point is tested.
|
|
298
|
+
|
|
299
|
+
EXAMPLES::
|
|
300
|
+
|
|
301
|
+
sage: A2.<x,y> = AffineSpace(2, QQ)
|
|
302
|
+
sage: cuspidal_curve = A2.subscheme([y^2 - x^3])
|
|
303
|
+
sage: cuspidal_curve
|
|
304
|
+
Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:
|
|
305
|
+
-x^3 + y^2
|
|
306
|
+
sage: smooth_point = cuspidal_curve.point([1,1])
|
|
307
|
+
sage: smooth_point in cuspidal_curve
|
|
308
|
+
True
|
|
309
|
+
sage: singular_point = cuspidal_curve.point([0,0])
|
|
310
|
+
sage: singular_point in cuspidal_curve
|
|
311
|
+
True
|
|
312
|
+
sage: cuspidal_curve.is_smooth(smooth_point) # needs sage.libs.singular
|
|
313
|
+
True
|
|
314
|
+
sage: cuspidal_curve.is_smooth(singular_point) # needs sage.libs.singular
|
|
315
|
+
False
|
|
316
|
+
sage: cuspidal_curve.is_smooth() # needs sage.libs.singular
|
|
317
|
+
False
|
|
318
|
+
"""
|
|
319
|
+
R = self.ambient_space().coordinate_ring()
|
|
320
|
+
if point is not None:
|
|
321
|
+
self._check_satisfies_equations(point)
|
|
322
|
+
point_subs = dict(zip(R.gens(), point))
|
|
323
|
+
Jac = self.Jacobian().subs(point_subs)
|
|
324
|
+
return not Jac.is_zero()
|
|
325
|
+
|
|
326
|
+
# testing smoothness everywhere tends to be expensive
|
|
327
|
+
try:
|
|
328
|
+
return self._smooth
|
|
329
|
+
except AttributeError:
|
|
330
|
+
pass
|
|
331
|
+
sing_dim = self.Jacobian().dimension()
|
|
332
|
+
self._smooth = (sing_dim == -1)
|
|
333
|
+
return self._smooth
|
|
334
|
+
|
|
335
|
+
def intersection_multiplicity(self, X, P):
|
|
336
|
+
r"""
|
|
337
|
+
Return the intersection multiplicity of this subscheme and the subscheme ``X`` at the point ``P``.
|
|
338
|
+
|
|
339
|
+
The intersection of this subscheme with ``X`` must be proper, that is `\mathrm{codim}(self\cap
|
|
340
|
+
X) = \mathrm{codim}(self) + \mathrm{codim}(X)`, and must also be finite. We use Serre's Tor
|
|
341
|
+
formula to compute the intersection multiplicity. If `I`, `J` are the defining ideals of ``self``, ``X``,
|
|
342
|
+
respectively, then this is `\sum_{i=0}^{\infty}(-1)^i\mathrm{length}(\mathrm{Tor}_{\mathcal{O}_{A,p}}^{i}
|
|
343
|
+
(\mathcal{O}_{A,p}/I,\mathcal{O}_{A,p}/J))` where `A` is the affine ambient space of these subschemes.
|
|
344
|
+
|
|
345
|
+
INPUT:
|
|
346
|
+
|
|
347
|
+
- ``X`` -- subscheme in the same ambient space as this subscheme
|
|
348
|
+
|
|
349
|
+
- ``P`` -- a point in the intersection of this subscheme with ``X``
|
|
350
|
+
|
|
351
|
+
OUTPUT: integer
|
|
352
|
+
|
|
353
|
+
EXAMPLES::
|
|
354
|
+
|
|
355
|
+
sage: # needs sage.schemes
|
|
356
|
+
sage: A.<x,y> = AffineSpace(QQ, 2)
|
|
357
|
+
sage: C = Curve([y^2 - x^3 - x^2], A) # needs sage.libs.singular
|
|
358
|
+
sage: D = Curve([y^2 + x^3], A) # needs sage.libs.singular
|
|
359
|
+
sage: Q = A([0,0])
|
|
360
|
+
sage: C.intersection_multiplicity(D, Q) # needs sage.libs.singular
|
|
361
|
+
4
|
|
362
|
+
|
|
363
|
+
::
|
|
364
|
+
|
|
365
|
+
sage: # needs sage.rings.number_field
|
|
366
|
+
sage: R.<a> = QQ[]
|
|
367
|
+
sage: K.<b> = NumberField(a^6 - 3*a^5 + 5*a^4 - 5*a^3 + 5*a^2 - 3*a + 1)
|
|
368
|
+
sage: A.<x,y,z,w> = AffineSpace(K, 4)
|
|
369
|
+
sage: X = A.subscheme([x*y, y*z + 7, w^3 - x^3])
|
|
370
|
+
sage: Y = A.subscheme([x - z^3 + z + 1])
|
|
371
|
+
sage: Q = A([0,
|
|
372
|
+
....: -7*b^5 + 21*b^4 - 28*b^3 + 21*b^2 - 21*b + 14,
|
|
373
|
+
....: -b^5 + 2*b^4 - 3*b^3 + 2*b^2 - 2*b,
|
|
374
|
+
....: 0])
|
|
375
|
+
sage: X.intersection_multiplicity(Y, Q) # needs sage.libs.singular
|
|
376
|
+
3
|
|
377
|
+
|
|
378
|
+
::
|
|
379
|
+
|
|
380
|
+
sage: A.<x,y,z> = AffineSpace(QQ, 3)
|
|
381
|
+
sage: X = A.subscheme([z^2 - 1])
|
|
382
|
+
sage: Y = A.subscheme([z - 1, y - x^2])
|
|
383
|
+
sage: Q = A([1,1,1])
|
|
384
|
+
sage: X.intersection_multiplicity(Y, Q) # needs sage.libs.singular
|
|
385
|
+
Traceback (most recent call last):
|
|
386
|
+
...
|
|
387
|
+
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 3
|
|
388
|
+
over Rational Field defined by: z - 1, -x^2 + y) must be proper and finite
|
|
389
|
+
|
|
390
|
+
::
|
|
391
|
+
|
|
392
|
+
sage: A.<x,y,z,w,t> = AffineSpace(QQ, 5)
|
|
393
|
+
sage: X = A.subscheme([x*y, t^2*w, w^3*z])
|
|
394
|
+
sage: Y = A.subscheme([y*w + z])
|
|
395
|
+
sage: Q = A([0,0,0,0,0])
|
|
396
|
+
sage: X.intersection_multiplicity(Y, Q) # needs sage.libs.singular
|
|
397
|
+
Traceback (most recent call last):
|
|
398
|
+
...
|
|
399
|
+
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 5
|
|
400
|
+
over Rational Field defined by: y*w + z) must be proper and finite
|
|
401
|
+
"""
|
|
402
|
+
AA = self.ambient_space()
|
|
403
|
+
if AA != X.ambient_space():
|
|
404
|
+
raise TypeError("this subscheme and (=%s) must be defined in the same ambient space" % X)
|
|
405
|
+
W = self.intersection(X)
|
|
406
|
+
try:
|
|
407
|
+
W._check_satisfies_equations(P)
|
|
408
|
+
except TypeError:
|
|
409
|
+
raise TypeError("(=%s) must be a point in the intersection of this subscheme and (=%s)" % (P, X))
|
|
410
|
+
if AA.dimension() != self.dimension() + X.dimension() or W.dimension() != 0:
|
|
411
|
+
raise TypeError("the intersection of this subscheme and (=%s) must be proper and finite" % X)
|
|
412
|
+
I = self.defining_ideal()
|
|
413
|
+
J = X.defining_ideal()
|
|
414
|
+
# move P to the origin and localize
|
|
415
|
+
chng_coords = [AA.gens()[i] + P[i] for i in range(AA.dimension_relative())]
|
|
416
|
+
R = AA.coordinate_ring().change_ring(order='negdegrevlex')
|
|
417
|
+
Iloc = R.ideal([f(chng_coords) for f in I.gens()])
|
|
418
|
+
Jloc = R.ideal([f(chng_coords) for f in J.gens()])
|
|
419
|
+
# compute the intersection multiplicity with Serre's Tor formula using Singular
|
|
420
|
+
from sage.interfaces.singular import singular
|
|
421
|
+
singular.lib("homolog.lib")
|
|
422
|
+
i = 0
|
|
423
|
+
s = 0
|
|
424
|
+
t = sum(singular.Tor(i, Iloc, Jloc).std().hilb(2).sage())
|
|
425
|
+
while t != 0:
|
|
426
|
+
s += (-1)**i * t
|
|
427
|
+
i += 1
|
|
428
|
+
t = sum(singular.Tor(i, Iloc, Jloc).std().hilb(2).sage())
|
|
429
|
+
return s
|
|
430
|
+
|
|
431
|
+
def multiplicity(self, P):
|
|
432
|
+
r"""
|
|
433
|
+
Return the multiplicity of ``P`` on this subscheme.
|
|
434
|
+
|
|
435
|
+
This is computed as the multiplicity of the local ring of this subscheme corresponding to ``P``. This
|
|
436
|
+
subscheme must be defined over a field. An error is raised if ``P`` is not a point on this subscheme.
|
|
437
|
+
|
|
438
|
+
INPUT:
|
|
439
|
+
|
|
440
|
+
- ``P`` -- a point on this subscheme
|
|
441
|
+
|
|
442
|
+
OUTPUT: integer
|
|
443
|
+
|
|
444
|
+
EXAMPLES::
|
|
445
|
+
|
|
446
|
+
sage: A.<x,y,z,w> = AffineSpace(QQ, 4)
|
|
447
|
+
sage: X = A.subscheme([z*y - x^7, w - 2*z])
|
|
448
|
+
sage: Q1 = A([1,1/3,3,6])
|
|
449
|
+
sage: X.multiplicity(Q1) # needs sage.libs.singular
|
|
450
|
+
1
|
|
451
|
+
sage: Q2 = A([0,0,0,0])
|
|
452
|
+
sage: X.multiplicity(Q2) # needs sage.libs.singular
|
|
453
|
+
2
|
|
454
|
+
|
|
455
|
+
::
|
|
456
|
+
|
|
457
|
+
sage: A.<x,y,z,w,v> = AffineSpace(GF(23), 5)
|
|
458
|
+
sage: C = A.curve([x^8 - y, y^7 - z, z^3 - 1, w^5 - v^3]) # needs sage.libs.singular sage.schemes
|
|
459
|
+
sage: Q = A([22,1,1,0,0])
|
|
460
|
+
sage: C.multiplicity(Q) # needs sage.libs.singular sage.schemes
|
|
461
|
+
3
|
|
462
|
+
|
|
463
|
+
::
|
|
464
|
+
|
|
465
|
+
sage: # needs sage.rings.number_field
|
|
466
|
+
sage: K.<a> = QuadraticField(-1)
|
|
467
|
+
sage: A.<x,y,z,w,t> = AffineSpace(K, 5)
|
|
468
|
+
sage: X = A.subscheme([y^7 - x^2*z^5 + z^3*t^8 - x^2*y^4*z - t^8])
|
|
469
|
+
sage: Q1 = A([1,1,0,1,-1])
|
|
470
|
+
sage: X.multiplicity(Q1) # needs sage.libs.singular
|
|
471
|
+
1
|
|
472
|
+
sage: Q2 = A([0,0,0,-a,0])
|
|
473
|
+
sage: X.multiplicity(Q2) # needs sage.libs.singular
|
|
474
|
+
7
|
|
475
|
+
|
|
476
|
+
Check that :issue:`27479` is fixed::
|
|
477
|
+
|
|
478
|
+
sage: A1.<x> = AffineSpace(QQ, 1)
|
|
479
|
+
sage: X = A1.subscheme([x^1789 + x])
|
|
480
|
+
sage: Q = X([0])
|
|
481
|
+
sage: X.multiplicity(Q) # needs sage.libs.singular
|
|
482
|
+
1
|
|
483
|
+
"""
|
|
484
|
+
if self.base_ring() not in Fields():
|
|
485
|
+
raise TypeError("subscheme must be defined over a field")
|
|
486
|
+
|
|
487
|
+
# check whether P is a point on this subscheme
|
|
488
|
+
try:
|
|
489
|
+
P = self(P)
|
|
490
|
+
except TypeError:
|
|
491
|
+
raise TypeError("(=%s) is not a point on (=%s)" % (P, self))
|
|
492
|
+
|
|
493
|
+
from sage.interfaces.singular import singular
|
|
494
|
+
|
|
495
|
+
# Apply a linear change of coordinates to self so that P is sent to the origin
|
|
496
|
+
# and then compute the multiplicity of the local ring of the translated subscheme
|
|
497
|
+
# corresponding to the point (0,...,0)
|
|
498
|
+
AA = self.ambient_space()
|
|
499
|
+
chng_coords = [AA.gens()[i] + P[i] for i in range(AA.dimension_relative())]
|
|
500
|
+
R = AA.coordinate_ring().change_ring(order='negdegrevlex')
|
|
501
|
+
I = R.ideal([f(chng_coords) for f in self.defining_polynomials()])
|
|
502
|
+
return singular.mult(singular.std(I)).sage()
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
class AlgebraicScheme_subscheme_affine_field(AlgebraicScheme_subscheme_affine):
|
|
506
|
+
"""
|
|
507
|
+
Algebraic subschemes of projective spaces defined over fields.
|
|
508
|
+
"""
|
|
509
|
+
def _morphism(self, *args, **kwds):
|
|
510
|
+
r"""
|
|
511
|
+
Construct a morphism determined by action on points of ``self``.
|
|
512
|
+
|
|
513
|
+
TESTS::
|
|
514
|
+
|
|
515
|
+
sage: # needs sage.libs.singular
|
|
516
|
+
sage: A2.<x,y> = AffineSpace(QQ, 2)
|
|
517
|
+
sage: X = A2.subscheme(x - y)
|
|
518
|
+
sage: H = X.Hom(A2)
|
|
519
|
+
sage: H([x, x/y])
|
|
520
|
+
Scheme morphism:
|
|
521
|
+
From: Closed subscheme of Affine Space of dimension 2 over Rational Field
|
|
522
|
+
defined by: x - y
|
|
523
|
+
To: Affine Space of dimension 2 over Rational Field
|
|
524
|
+
Defn: Defined on coordinates by sending (x, y) to (x, x/y)
|
|
525
|
+
sage: P2 = ProjectiveSpace(QQ, 2)
|
|
526
|
+
sage: H = X.Hom(P2)
|
|
527
|
+
sage: H([x*y, x, y])
|
|
528
|
+
Scheme morphism:
|
|
529
|
+
From: Closed subscheme of Affine Space of dimension 2 over Rational Field
|
|
530
|
+
defined by: x - y
|
|
531
|
+
To: Projective Space of dimension 2 over Rational Field
|
|
532
|
+
Defn: Defined on coordinates by sending (x, y) to (x*y : x : y)
|
|
533
|
+
"""
|
|
534
|
+
return SchemeMorphism_polynomial_affine_subscheme_field(*args, **kwds)
|
|
535
|
+
|
|
536
|
+
def tangent_space(self, p):
|
|
537
|
+
"""
|
|
538
|
+
Return the tangent space at the point ``p``.
|
|
539
|
+
|
|
540
|
+
The points of the tangent space are the tangent vectors at ``p``.
|
|
541
|
+
|
|
542
|
+
INPUT:
|
|
543
|
+
|
|
544
|
+
- ``p`` -- a rational point
|
|
545
|
+
|
|
546
|
+
EXAMPLES::
|
|
547
|
+
|
|
548
|
+
sage: A3.<x,y,z> = AffineSpace(3, QQ)
|
|
549
|
+
sage: X = A3.subscheme(z - x*y)
|
|
550
|
+
sage: X.tangent_space(A3.origin()) # needs sage.libs.singular
|
|
551
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field
|
|
552
|
+
defined by:
|
|
553
|
+
z
|
|
554
|
+
sage: X.tangent_space(X(1,1,1)) # needs sage.libs.singular
|
|
555
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field
|
|
556
|
+
defined by:
|
|
557
|
+
-x - y + z
|
|
558
|
+
|
|
559
|
+
Tangent space at a point may have higher dimension than the dimension
|
|
560
|
+
of the point. ::
|
|
561
|
+
|
|
562
|
+
sage: # needs sage.libs.singular sage.schemes
|
|
563
|
+
sage: C = Curve([x + y + z, x^2 - y^2*z^2 + z^3])
|
|
564
|
+
sage: C.singular_points()
|
|
565
|
+
[(0, 0, 0)]
|
|
566
|
+
sage: p = C(0,0,0)
|
|
567
|
+
sage: C.tangent_space(p)
|
|
568
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field
|
|
569
|
+
defined by:
|
|
570
|
+
x + y + z
|
|
571
|
+
sage: _.dimension()
|
|
572
|
+
2
|
|
573
|
+
sage: q = C(1,0,-1)
|
|
574
|
+
sage: C.tangent_space(q)
|
|
575
|
+
Closed subscheme of Affine Space of dimension 3 over Rational Field
|
|
576
|
+
defined by:
|
|
577
|
+
x + y + z,
|
|
578
|
+
2*x + 3*z
|
|
579
|
+
sage: _.dimension()
|
|
580
|
+
1
|
|
581
|
+
"""
|
|
582
|
+
from sage.modules.free_module_element import vector
|
|
583
|
+
|
|
584
|
+
A = self.ambient_space()
|
|
585
|
+
R = A.coordinate_ring()
|
|
586
|
+
gens = R.gens()
|
|
587
|
+
|
|
588
|
+
J = self.Jacobian_matrix()
|
|
589
|
+
Jp = J.apply_map(lambda f: f.subs(dict(zip(gens, p))))
|
|
590
|
+
I = [f for f in Jp * vector(gens) if f]
|
|
591
|
+
|
|
592
|
+
return A.subscheme(R.ideal(I))
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""nodoctest
|
|
3
|
+
all.py -- export of affine to Sage
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# *****************************************************************************
|
|
7
|
+
#
|
|
8
|
+
# Sage: Open Source Mathematical Software
|
|
9
|
+
#
|
|
10
|
+
# Copyright (C) 2005 William Stein <wstein@gmail.com>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
#
|
|
14
|
+
# This code is distributed in the hope that it will be useful,
|
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
17
|
+
# General Public License for more details.
|
|
18
|
+
#
|
|
19
|
+
# The full text of the GPL is available at:
|
|
20
|
+
#
|
|
21
|
+
# https://www.gnu.org/licenses/
|
|
22
|
+
# *****************************************************************************
|
|
23
|
+
|
|
24
|
+
from sage.schemes.affine.affine_space import AffineSpace
|
|
25
|
+
from sage.schemes.affine.affine_rational_point import enum_affine_rational_field, enum_affine_finite_field
|