passagemath-categories 10.6.31rc3__cp314-cp314-macosx_13_0_arm64.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.31rc3.dist-info/METADATA +156 -0
- passagemath_categories-10.6.31rc3.dist-info/RECORD +717 -0
- passagemath_categories-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_categories-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_categories.dylibs/libgmp.10.dylib +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-314-darwin.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-314-darwin.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314-darwin.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314-darwin.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-314-darwin.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314-darwin.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314-darwin.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314-darwin.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7871 -0
- sage/rings/integer_ring.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2215 -0
- sage/rings/real_lazy.cpython-314-darwin.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314-darwin.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,466 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Subschemes of products of projective spaces
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Ben Hutz (2014): subschemes of Cartesian products of projective space
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
#*****************************************************************************
|
|
11
|
+
# Copyright (C) 2014 Ben Hutz <bn4941@gmail.com>
|
|
12
|
+
#
|
|
13
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
14
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
15
|
+
# the License, or (at your option) any later version.
|
|
16
|
+
# http://www.gnu.org/licenses/
|
|
17
|
+
#*****************************************************************************
|
|
18
|
+
|
|
19
|
+
from sage.misc.misc_c import prod
|
|
20
|
+
from sage.misc.cachefunc import cached_method
|
|
21
|
+
from sage.rings.fraction_field import FractionField
|
|
22
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
23
|
+
from sage.schemes.affine.affine_space import AffineSpace
|
|
24
|
+
from sage.schemes.projective.projective_subscheme import AlgebraicScheme_subscheme_projective
|
|
25
|
+
from sage.schemes.projective.projective_space import ProjectiveSpace
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AlgebraicScheme_subscheme_product_projective(AlgebraicScheme_subscheme_projective):
|
|
29
|
+
r"""
|
|
30
|
+
Construct an algebraic subscheme of a product of projective spaces.
|
|
31
|
+
|
|
32
|
+
.. WARNING::
|
|
33
|
+
|
|
34
|
+
You should not create objects of this class directly. The
|
|
35
|
+
preferred method to construct such subschemes is to use
|
|
36
|
+
:meth:`~sage.schemes.product_projective.subscheme`
|
|
37
|
+
method of :class:`Product of Projective Spaces
|
|
38
|
+
<sage.schemes.product_projective.space.ProductProjectiveSpaces_ring>`.
|
|
39
|
+
|
|
40
|
+
INPUT:
|
|
41
|
+
|
|
42
|
+
- ``A`` -- ambient :class:`Product of Projective Spaces
|
|
43
|
+
<sage.schemes.product_projective.space.ProductProjectiveSpaces_ring>`
|
|
44
|
+
|
|
45
|
+
- ``polynomials`` -- single polynomial, ideal or iterable of
|
|
46
|
+
defining multi-homogeneous polynomials
|
|
47
|
+
|
|
48
|
+
EXAMPLES::
|
|
49
|
+
|
|
50
|
+
sage: P.<x, y, u, v> = ProductProjectiveSpaces([1, 1], QQ)
|
|
51
|
+
sage: P.subscheme([u*x^2 - v*y*x])
|
|
52
|
+
Closed subscheme of Product of projective spaces P^1 x P^1 over Rational Field
|
|
53
|
+
defined by:
|
|
54
|
+
x^2*u - x*y*v
|
|
55
|
+
|
|
56
|
+
TESTS::
|
|
57
|
+
|
|
58
|
+
sage: from sage.schemes.product_projective.subscheme \
|
|
59
|
+
....: import AlgebraicScheme_subscheme_product_projective
|
|
60
|
+
sage: AlgebraicScheme_subscheme_product_projective(P, [u*x^2 - v*y*x])
|
|
61
|
+
Closed subscheme of Product of projective spaces P^1 x P^1
|
|
62
|
+
over Rational Field defined by:
|
|
63
|
+
x^2*u - x*y*v
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
@cached_method
|
|
67
|
+
def segre_embedding(self, PP=None):
|
|
68
|
+
r"""
|
|
69
|
+
Return the Segre embedding of this subscheme into the appropriate projective
|
|
70
|
+
space.
|
|
71
|
+
|
|
72
|
+
INPUT:
|
|
73
|
+
|
|
74
|
+
- ``PP`` -- (default: ``None``) ambient image projective space;
|
|
75
|
+
this is constructed if it is not given
|
|
76
|
+
|
|
77
|
+
OUTPUT: hom from this subscheme to the appropriate subscheme of projective space
|
|
78
|
+
|
|
79
|
+
EXAMPLES::
|
|
80
|
+
|
|
81
|
+
sage: X.<x,y,z,w,u,v> = ProductProjectiveSpaces([2, 2], QQ)
|
|
82
|
+
sage: P = ProjectiveSpace(QQ, 8, 't')
|
|
83
|
+
sage: L = (-w - v)*x + (-w*y - u*z)
|
|
84
|
+
sage: Q = ((-u*w - v^2)*x^2 + ((-w^2 - u*w + (-u*v - u^2))*y + (-w^2 - u*v)*z)*x
|
|
85
|
+
....: + ((-w^2 - u*w - u^2)*y^2 + (-u*w - v^2)*z*y + (-w^2 + (-v - u)*w)*z^2))
|
|
86
|
+
sage: W = X.subscheme([L,Q])
|
|
87
|
+
sage: phi = W.segre_embedding(P) # needs sage.libs.singular
|
|
88
|
+
sage: phi.codomain().ambient_space() == P # needs sage.libs.singular
|
|
89
|
+
True
|
|
90
|
+
|
|
91
|
+
::
|
|
92
|
+
|
|
93
|
+
sage: PP.<x,y,u,v,s,t> = ProductProjectiveSpaces([1, 1, 1], CC) # needs sage.rings.real_mpfr
|
|
94
|
+
sage: PP.subscheme([]).segre_embedding() # needs sage.libs.singular sage.rings.real_mpfr
|
|
95
|
+
Scheme morphism:
|
|
96
|
+
From: Closed subscheme of Product of projective spaces P^1 x P^1 x P^1
|
|
97
|
+
over Complex Field with 53 bits of precision defined by:
|
|
98
|
+
(no polynomials)
|
|
99
|
+
To: Closed subscheme of Projective Space of dimension 7
|
|
100
|
+
over Complex Field with 53 bits of precision defined by:
|
|
101
|
+
-u5*u6 + u4*u7, -u3*u6 + u2*u7, -u3*u4 + u2*u5,
|
|
102
|
+
-u3*u5 + u1*u7, -u3*u4 + u1*u6, -u3*u4 + u0*u7,
|
|
103
|
+
-u2*u4 + u0*u6, -u1*u4 + u0*u5, -u1*u2 + u0*u3
|
|
104
|
+
Defn: Defined by sending (x : y , u : v , s : t) to
|
|
105
|
+
(x*u*s : x*u*t : x*v*s : x*v*t : y*u*s : y*u*t : y*v*s : y*v*t).
|
|
106
|
+
|
|
107
|
+
::
|
|
108
|
+
|
|
109
|
+
sage: PP.<x,y,z,u,v,s,t> = ProductProjectiveSpaces([2, 1, 1], ZZ)
|
|
110
|
+
sage: PP.subscheme([x^3, u - v, s^2 - t^2]).segre_embedding() # needs sage.libs.singular
|
|
111
|
+
Scheme morphism:
|
|
112
|
+
From: Closed subscheme of Product of projective spaces P^2 x P^1 x P^1
|
|
113
|
+
over Integer Ring defined by:
|
|
114
|
+
x^3, u - v, s^2 - t^2
|
|
115
|
+
To: Closed subscheme of Projective Space of dimension 11
|
|
116
|
+
over Integer Ring defined by:
|
|
117
|
+
u10^2 - u11^2, u9 - u11, u8 - u10,
|
|
118
|
+
-u7*u10 + u6*u11, u6*u10 - u7*u11, u6^2 - u7^2,
|
|
119
|
+
u5 - u7, u4 - u6, u3^3,
|
|
120
|
+
-u3*u10 + u2*u11, u2*u10 - u3*u11, -u3*u6 + u2*u7,
|
|
121
|
+
u2*u6 - u3*u7, u2*u3^2, u2^2 - u3^2,
|
|
122
|
+
u1 - u3, u0 - u2
|
|
123
|
+
Defn: Defined by sending (x : y : z , u : v , s : t) to
|
|
124
|
+
(x*u*s : x*u*t : x*v*s : x*v*t : y*u*s : y*u*t : y*v*s : y*v*t
|
|
125
|
+
: z*u*s : z*u*t : z*v*s : z*v*t).
|
|
126
|
+
"""
|
|
127
|
+
AS = self.ambient_space()
|
|
128
|
+
CR = AS.coordinate_ring()
|
|
129
|
+
N = AS.dimension_relative_components()
|
|
130
|
+
M = prod([n+1 for n in N]) - 1
|
|
131
|
+
|
|
132
|
+
vars = list(AS.coordinate_ring().variable_names()) + ['u' + str(i) for i in range(M+1)]
|
|
133
|
+
R = PolynomialRing(AS.base_ring(), AS.ngens()+M+1, vars, order='lex')
|
|
134
|
+
|
|
135
|
+
#set-up the elimination for the segre embedding
|
|
136
|
+
mapping = []
|
|
137
|
+
k = AS.ngens()
|
|
138
|
+
index = AS.num_components()*[0]
|
|
139
|
+
for count in range(M + 1):
|
|
140
|
+
mapping.append(R.gen(k+count)-prod([CR(AS[i].gen(index[i])) for i in range(len(index))]))
|
|
141
|
+
for i in range(len(index)-1, -1, -1):
|
|
142
|
+
if index[i] == N[i]:
|
|
143
|
+
index[i] = 0
|
|
144
|
+
else:
|
|
145
|
+
index[i] += 1
|
|
146
|
+
break #only increment once
|
|
147
|
+
|
|
148
|
+
#change the defining ideal of the subscheme into the variables
|
|
149
|
+
I = R.ideal(list(self.defining_polynomials()) + mapping)
|
|
150
|
+
J = I.groebner_basis()
|
|
151
|
+
s = set(R.gens()[:AS.ngens()])
|
|
152
|
+
n = len(J)-1
|
|
153
|
+
L = []
|
|
154
|
+
while s.isdisjoint(J[n].variables()):
|
|
155
|
+
L.append(J[n])
|
|
156
|
+
n = n-1
|
|
157
|
+
|
|
158
|
+
#create new subscheme
|
|
159
|
+
if PP is None:
|
|
160
|
+
PS = ProjectiveSpace(self.base_ring(), M, R.gens()[AS.ngens():])
|
|
161
|
+
Y = PS.subscheme(L)
|
|
162
|
+
else:
|
|
163
|
+
if PP.dimension_relative() != M:
|
|
164
|
+
raise ValueError("projective space %s must be dimension %s") % (PP, M)
|
|
165
|
+
S = PP.coordinate_ring()
|
|
166
|
+
psi = R.hom([0]*k + list(S.gens()), S)
|
|
167
|
+
L = [psi(l) for l in L]
|
|
168
|
+
Y = PP.subscheme(L)
|
|
169
|
+
|
|
170
|
+
#create embedding for points
|
|
171
|
+
mapping = []
|
|
172
|
+
index = AS.num_components()*[0]
|
|
173
|
+
for count in range(M + 1):
|
|
174
|
+
mapping.append(prod([CR(AS[i].gen(index[i])) for i in range(len(index))]))
|
|
175
|
+
for i in range(len(index)-1, -1, -1):
|
|
176
|
+
if index[i] == N[i]:
|
|
177
|
+
index[i] = 0
|
|
178
|
+
else:
|
|
179
|
+
index[i] += 1
|
|
180
|
+
break #only increment once
|
|
181
|
+
phi = self.hom(mapping, Y)
|
|
182
|
+
|
|
183
|
+
return phi
|
|
184
|
+
|
|
185
|
+
def dimension(self):
|
|
186
|
+
r"""
|
|
187
|
+
Return the dimension of the algebraic subscheme.
|
|
188
|
+
|
|
189
|
+
OUTPUT: integer
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: X.<x,y,z,w,u,v> = ProductProjectiveSpaces([2, 2], QQ)
|
|
194
|
+
sage: L = (-w - v)*x + (-w*y - u*z)
|
|
195
|
+
sage: Q = ((-u*w - v^2)*x^2 + ((-w^2 - u*w + (-u*v - u^2))*y + (-w^2 - u*v)*z)*x
|
|
196
|
+
....: + ((-w^2 - u*w - u^2)*y^2 + (-u*w - v^2)*z*y + (-w^2 + (-v - u)*w)*z^2))
|
|
197
|
+
sage: W = X.subscheme([L, Q])
|
|
198
|
+
sage: W.dimension() # needs sage.libs.singular
|
|
199
|
+
2
|
|
200
|
+
|
|
201
|
+
::
|
|
202
|
+
|
|
203
|
+
sage: PP.<x,y,z,u,v,s,t> = ProductProjectiveSpaces([2, 1, 1], QQ)
|
|
204
|
+
sage: X = PP.subscheme([x^3, x^5 + y^5, z^6, x*u - v*y, s^2 - t^2])
|
|
205
|
+
sage: X.dimension() # needs sage.libs.singular
|
|
206
|
+
-1
|
|
207
|
+
|
|
208
|
+
::
|
|
209
|
+
|
|
210
|
+
sage: PP = ProductProjectiveSpaces([2, 1, 3], CC, 't') # needs sage.rings.real_mpfr
|
|
211
|
+
sage: PP.subscheme([]).dimension() # needs sage.libs.singular sage.rings.real_mpfr
|
|
212
|
+
6
|
|
213
|
+
|
|
214
|
+
::
|
|
215
|
+
|
|
216
|
+
sage: PP = ProductProjectiveSpaces([1, 3, 1], ZZ, 't')
|
|
217
|
+
sage: PP.subscheme([]).dimension() # needs sage.libs.singular
|
|
218
|
+
5
|
|
219
|
+
|
|
220
|
+
::
|
|
221
|
+
|
|
222
|
+
sage: PP.<x,y,u,v,s,t> = ProductProjectiveSpaces([1,1,1], CC) # needs sage.rings.real_mpfr
|
|
223
|
+
sage: X = PP.subscheme([x^2 - y^2, u - v, s^2 - t^2]) # needs sage.libs.singular sage.rings.real_mpfr
|
|
224
|
+
sage: X.dimension() # needs sage.libs.singular sage.rings.real_mpfr
|
|
225
|
+
0
|
|
226
|
+
"""
|
|
227
|
+
try:
|
|
228
|
+
return self.__dimension
|
|
229
|
+
except AttributeError:
|
|
230
|
+
try:
|
|
231
|
+
#move to field to compute radical
|
|
232
|
+
X = self.change_ring(FractionField(self.base_ring()))
|
|
233
|
+
PP = X.ambient_space()
|
|
234
|
+
I = X.defining_ideal().radical()
|
|
235
|
+
#check if the irrelevant ideal of any component is in the radical
|
|
236
|
+
if any(all(t in I for t in PS.gens())
|
|
237
|
+
for PS in PP.components()):
|
|
238
|
+
self.__dimension = -1
|
|
239
|
+
else:
|
|
240
|
+
self.__dimension = I.dimension() - PP.num_components()
|
|
241
|
+
except TypeError: #cannot compute radical for this base ring
|
|
242
|
+
phi = self.segre_embedding()
|
|
243
|
+
self.__dimension = phi.codomain().defining_ideal().dimension() - 1
|
|
244
|
+
return self.__dimension
|
|
245
|
+
|
|
246
|
+
def is_smooth(self, point=None):
|
|
247
|
+
r"""
|
|
248
|
+
Test whether the algebraic subscheme is smooth.
|
|
249
|
+
|
|
250
|
+
EXAMPLES::
|
|
251
|
+
|
|
252
|
+
sage: X.<x,y,z,w,u,v> = ProductProjectiveSpaces([2, 2],QQ)
|
|
253
|
+
sage: L = (-w - v)*x + (-w*y - u*z)
|
|
254
|
+
sage: Q = ((-u*w - v^2)*x^2 + ((-w^2 - u*w + (-u*v - u^2))*y + (-w^2 - u*v)*z)*x
|
|
255
|
+
....: + ((-w^2 - u*w - u^2)*y^2 + (-u*w - v^2)*z*y + (-w^2 + (-v - u)*w)*z^2))
|
|
256
|
+
sage: W = X.subscheme([L, Q])
|
|
257
|
+
sage: W.is_smooth()
|
|
258
|
+
Traceback (most recent call last):
|
|
259
|
+
...
|
|
260
|
+
NotImplementedError: Not Implemented
|
|
261
|
+
"""
|
|
262
|
+
raise NotImplementedError("Not Implemented")
|
|
263
|
+
|
|
264
|
+
def affine_patch(self, I, return_embedding=False):
|
|
265
|
+
r"""
|
|
266
|
+
Return the `I`-th affine patch of this projective scheme
|
|
267
|
+
where `I` is a multi-index.
|
|
268
|
+
|
|
269
|
+
INPUT:
|
|
270
|
+
|
|
271
|
+
- ``I`` -- list or tuple of positive integers
|
|
272
|
+
|
|
273
|
+
- ``return_embedding`` -- boolean; if ``True`` the projective embedding
|
|
274
|
+
is also returned
|
|
275
|
+
|
|
276
|
+
OUTPUT:
|
|
277
|
+
|
|
278
|
+
- An affine algebraic scheme
|
|
279
|
+
|
|
280
|
+
- An embedding into a product of projective space (optional)
|
|
281
|
+
|
|
282
|
+
EXAMPLES::
|
|
283
|
+
|
|
284
|
+
sage: PP.<x,y,z,w,u,v> = ProductProjectiveSpaces([3, 1],QQ)
|
|
285
|
+
sage: W = PP.subscheme([y^2*z - x^3, z^2 - w^2, u^3 - v^3])
|
|
286
|
+
sage: W.affine_patch([0, 1], True)
|
|
287
|
+
(Closed subscheme of Affine Space of dimension 4 over Rational Field defined by:
|
|
288
|
+
x0^2*x1 - 1,
|
|
289
|
+
x1^2 - x2^2,
|
|
290
|
+
x3^3 - 1,
|
|
291
|
+
Scheme morphism:
|
|
292
|
+
From: Closed subscheme of Affine Space of dimension 4
|
|
293
|
+
over Rational Field defined by: x0^2*x1 - 1, x1^2 - x2^2, x3^3 - 1
|
|
294
|
+
To: Closed subscheme of Product of projective spaces P^3 x P^1
|
|
295
|
+
over Rational Field defined by: -x^3 + y^2*z, z^2 - w^2, u^3 - v^3
|
|
296
|
+
Defn: Defined on coordinates by sending (x0, x1, x2, x3) to
|
|
297
|
+
(1 : x0 : x1 : x2 , x3 : 1))
|
|
298
|
+
"""
|
|
299
|
+
if not isinstance(I, (list, tuple)):
|
|
300
|
+
raise TypeError('The argument I=%s must be a list or tuple of positive integers' % I)
|
|
301
|
+
PP = self.ambient_space()
|
|
302
|
+
N = PP.dimension_relative_components()
|
|
303
|
+
if len(I) != len(N):
|
|
304
|
+
raise ValueError('The argument I=%s must have %s entries' % (I,len(N)))
|
|
305
|
+
I = tuple([int(i) for i in I]) # implicit type checking
|
|
306
|
+
for i in range(len(I)):
|
|
307
|
+
if I[i] < 0 or I[i] > N[i]:
|
|
308
|
+
raise ValueError("Argument i (= %s) must be between 0 and %s." % (I[i], N[i]))
|
|
309
|
+
#see if we've already created this affine patch
|
|
310
|
+
try:
|
|
311
|
+
if return_embedding:
|
|
312
|
+
return self.__affine_patches[I]
|
|
313
|
+
else:
|
|
314
|
+
return self.__affine_patches[I][0]
|
|
315
|
+
except AttributeError:
|
|
316
|
+
self.__affine_patches = {}
|
|
317
|
+
except KeyError:
|
|
318
|
+
pass
|
|
319
|
+
AA = AffineSpace(PP.base_ring(),sum(N),'x')
|
|
320
|
+
v = list(AA.gens())
|
|
321
|
+
# create the projective embedding
|
|
322
|
+
index = 0
|
|
323
|
+
for i in range(len(I)):
|
|
324
|
+
v.insert(index+I[i],1)
|
|
325
|
+
index += N[i]+1
|
|
326
|
+
phi = AA.hom(v,self)
|
|
327
|
+
#find the image of the subscheme
|
|
328
|
+
polys = self.defining_polynomials()
|
|
329
|
+
xi = phi.defining_polynomials()
|
|
330
|
+
U = AA.subscheme([ f(xi) for f in polys ])
|
|
331
|
+
phi = U.hom(v,self)
|
|
332
|
+
self.__affine_patches.update({I:(U,phi)})
|
|
333
|
+
if return_embedding:
|
|
334
|
+
return U,phi
|
|
335
|
+
else:
|
|
336
|
+
return U
|
|
337
|
+
|
|
338
|
+
def intersection_multiplicity(self, X, P):
|
|
339
|
+
r"""
|
|
340
|
+
Return the intersection multiplicity of this subscheme and the
|
|
341
|
+
subscheme ``X`` at the point ``P``.
|
|
342
|
+
|
|
343
|
+
This uses the intersection_multiplicity function for affine subschemes
|
|
344
|
+
on affine patches of this subscheme and ``X`` that contain ``P``.
|
|
345
|
+
|
|
346
|
+
INPUT:
|
|
347
|
+
|
|
348
|
+
- ``X`` -- subscheme in the same ambient space as this subscheme
|
|
349
|
+
|
|
350
|
+
- ``P`` -- a point in the intersection of this subscheme with ``X``
|
|
351
|
+
|
|
352
|
+
OUTPUT: integer
|
|
353
|
+
|
|
354
|
+
EXAMPLES:
|
|
355
|
+
|
|
356
|
+
Multiplicity of a fixed point of the map `z^2 + \frac{1}{4}`::
|
|
357
|
+
|
|
358
|
+
sage: PP.<x,y,u,v> = ProductProjectiveSpaces(QQ, [1, 1])
|
|
359
|
+
sage: G = PP.subscheme([(x^2 + 1/4*y^2)*v - y^2*u])
|
|
360
|
+
sage: D = PP.subscheme([x*v - y*u])
|
|
361
|
+
sage: sorted(G.intersection(D).rational_points()) # needs sage.libs.singular
|
|
362
|
+
[(1/2 : 1 , 1/2 : 1), (1 : 0 , 1 : 0)]
|
|
363
|
+
sage: Q = PP([1/2,1,1/2,1])
|
|
364
|
+
sage: G.intersection_multiplicity(D, Q) # needs sage.libs.singular
|
|
365
|
+
2
|
|
366
|
+
|
|
367
|
+
::
|
|
368
|
+
|
|
369
|
+
sage: # needs sage.rings.finite_rings
|
|
370
|
+
sage: F.<a> = GF(4)
|
|
371
|
+
sage: PP.<x,y,z,u,v,w> = ProductProjectiveSpaces(F, [2, 2])
|
|
372
|
+
sage: X = PP.subscheme([z^5 + 3*x*y^4 + 8*y^5, u^2 - v^2])
|
|
373
|
+
sage: Y = PP.subscheme([x^6 + z^6, w*z - v*y])
|
|
374
|
+
sage: Q = PP([a,a+1,1,a,a,1])
|
|
375
|
+
sage: X.intersection_multiplicity(Y, Q) # needs sage.libs.singular
|
|
376
|
+
16
|
|
377
|
+
|
|
378
|
+
::
|
|
379
|
+
|
|
380
|
+
sage: PP.<x,y,z,u,v,w> = ProductProjectiveSpaces(QQ, [2, 2])
|
|
381
|
+
sage: X = PP.subscheme([x^2*u^3 + y*z*u*v^2, x - y])
|
|
382
|
+
sage: Y = PP.subscheme([u^3 - w^3, x*v - y*w, z^3*w^2 - y^3*u*v])
|
|
383
|
+
sage: Q = PP([0,0,1,0,1,0])
|
|
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 4
|
|
388
|
+
over Rational Field defined by: x2^3 - x3^3, -x1*x3 + x0, -x1^3*x2 + x3^2) must be proper and finite
|
|
389
|
+
"""
|
|
390
|
+
PP = self.ambient_space()
|
|
391
|
+
try:
|
|
392
|
+
PP(P)
|
|
393
|
+
except TypeError:
|
|
394
|
+
raise TypeError("(=%s) must be a point in the ambient space of this subscheme and (=%s)" % (P,X))
|
|
395
|
+
# find an affine chart of the ambient space of this subscheme that contains P
|
|
396
|
+
indices = []
|
|
397
|
+
aff_pt = []
|
|
398
|
+
for i in range(PP.num_components()):
|
|
399
|
+
Q = P[i]
|
|
400
|
+
j = 0
|
|
401
|
+
while Q[j] == 0:
|
|
402
|
+
j = j + 1
|
|
403
|
+
indices.append(j)
|
|
404
|
+
T = list(Q)
|
|
405
|
+
t = T.pop(j)
|
|
406
|
+
aff_pt.extend([1/t*T[k] for k in range(PP.components()[i].dimension_relative())])
|
|
407
|
+
X1 = self.affine_patch(indices)
|
|
408
|
+
X2 = X.affine_patch(indices)
|
|
409
|
+
return X1.intersection_multiplicity(X2, X1.ambient_space()(aff_pt))
|
|
410
|
+
|
|
411
|
+
def multiplicity(self, P):
|
|
412
|
+
r"""
|
|
413
|
+
Return the multiplicity of ``P`` on this subscheme.
|
|
414
|
+
|
|
415
|
+
This is computed as the multiplicity of the corresponding point on an affine patch of this subscheme
|
|
416
|
+
that contains ``P``. This subscheme must be defined over a field. An error is returned if ``P``
|
|
417
|
+
not a point on this subscheme.
|
|
418
|
+
|
|
419
|
+
INPUT:
|
|
420
|
+
|
|
421
|
+
- ``P`` -- a point on this subscheme
|
|
422
|
+
|
|
423
|
+
OUTPUT: integer
|
|
424
|
+
|
|
425
|
+
EXAMPLES::
|
|
426
|
+
|
|
427
|
+
sage: PP.<x,y,z,w> = ProductProjectiveSpaces(QQ, [1, 1])
|
|
428
|
+
sage: X = PP.subscheme([x^4*z^3 - y^4*w^3])
|
|
429
|
+
sage: Q1 = PP([1,1,1,1])
|
|
430
|
+
sage: X.multiplicity(Q1) # needs sage.libs.singular
|
|
431
|
+
1
|
|
432
|
+
sage: Q2 = PP([0,1,1,0])
|
|
433
|
+
sage: X.multiplicity(Q2) # needs sage.libs.singular
|
|
434
|
+
3
|
|
435
|
+
|
|
436
|
+
::
|
|
437
|
+
|
|
438
|
+
sage: PP.<x,y,z,w,u> = ProductProjectiveSpaces(GF(11), [1,2])
|
|
439
|
+
sage: X = PP.subscheme([x^7*u - y^7*z, u^6*x^2 - w^3*z^3*x*y - w^6*y^2])
|
|
440
|
+
sage: Q1 = PP([1,0,10,1,0])
|
|
441
|
+
sage: X.multiplicity(Q1) # needs sage.libs.singular sage.rings.finite_rings
|
|
442
|
+
1
|
|
443
|
+
sage: Q2 = PP([1,0,1,0,0])
|
|
444
|
+
sage: X.multiplicity(Q2) # needs sage.libs.singular sage.rings.finite_rings
|
|
445
|
+
4
|
|
446
|
+
"""
|
|
447
|
+
PP = self.ambient_space()
|
|
448
|
+
try:
|
|
449
|
+
PP(P)
|
|
450
|
+
except TypeError:
|
|
451
|
+
raise TypeError("(={}) must be a point in the ambient space of this "
|
|
452
|
+
"subscheme and (={})".format(P, self))
|
|
453
|
+
# find an affine chart of the ambient space of this subscheme that contains P
|
|
454
|
+
indices = []
|
|
455
|
+
aff_pt = []
|
|
456
|
+
for i in range(PP.num_components()):
|
|
457
|
+
Q = P[i]
|
|
458
|
+
j = 0
|
|
459
|
+
while Q[j] == 0:
|
|
460
|
+
j = j + 1
|
|
461
|
+
indices.append(j)
|
|
462
|
+
T = list(Q)
|
|
463
|
+
t = T.pop(j)
|
|
464
|
+
aff_pt.extend([1/t*T[k] for k in range(PP.components()[i].dimension_relative())])
|
|
465
|
+
X = self.affine_patch(indices)
|
|
466
|
+
return X.multiplicity(X.ambient_space()(aff_pt))
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""nodoctest
|
|
3
|
+
all.py -- export of projective schemes 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.projective.projective_space import ProjectiveSpace, is_ProjectiveSpace
|