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,525 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Subsets of a Universe Defined by Predicates
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2021 Matthias Koeppe
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.structure.category_object import normalize_names
|
|
17
|
+
from sage.structure.parent import Parent, Set_generic
|
|
18
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
19
|
+
from sage.categories.sets_cat import Sets
|
|
20
|
+
from sage.categories.enumerated_sets import EnumeratedSets
|
|
21
|
+
from sage.misc.cachefunc import cached_method
|
|
22
|
+
from sage.combinat.subset import uniq
|
|
23
|
+
from sage.structure.element import Expression
|
|
24
|
+
from .set import Set, Set_base, Set_boolean_operators, Set_add_sub_operators
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ConditionSet(Set_generic, Set_base, Set_boolean_operators, Set_add_sub_operators,
|
|
28
|
+
UniqueRepresentation):
|
|
29
|
+
r"""
|
|
30
|
+
Set of elements of a universe that satisfy given predicates.
|
|
31
|
+
|
|
32
|
+
INPUT:
|
|
33
|
+
|
|
34
|
+
- ``universe`` -- set
|
|
35
|
+
|
|
36
|
+
- ``*predicates`` -- callables
|
|
37
|
+
|
|
38
|
+
- ``vars`` or ``names`` -- (default: inferred from ``predicates`` if any predicate is
|
|
39
|
+
an element of a :class:`~sage.symbolic.callable.CallableSymbolicExpressionRing_class`)
|
|
40
|
+
variables or names of variables
|
|
41
|
+
|
|
42
|
+
- ``category`` -- (default: inferred from ``universe``) a category
|
|
43
|
+
|
|
44
|
+
EXAMPLES::
|
|
45
|
+
|
|
46
|
+
sage: Evens = ConditionSet(ZZ, is_even); Evens
|
|
47
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) }
|
|
48
|
+
sage: 2 in Evens
|
|
49
|
+
True
|
|
50
|
+
sage: 3 in Evens
|
|
51
|
+
False
|
|
52
|
+
sage: 2.0 in Evens
|
|
53
|
+
True
|
|
54
|
+
|
|
55
|
+
sage: Odds = ConditionSet(ZZ, is_odd); Odds
|
|
56
|
+
{ x ∈ Integer Ring : <function is_odd at 0x...>(x) }
|
|
57
|
+
sage: EvensAndOdds = Evens | Odds; EvensAndOdds
|
|
58
|
+
Set-theoretic union of
|
|
59
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) } and
|
|
60
|
+
{ x ∈ Integer Ring : <function is_odd at 0x...>(x) }
|
|
61
|
+
sage: 5 in EvensAndOdds
|
|
62
|
+
True
|
|
63
|
+
sage: 7/2 in EvensAndOdds
|
|
64
|
+
False
|
|
65
|
+
|
|
66
|
+
sage: var('y') # needs sage.symbolic
|
|
67
|
+
y
|
|
68
|
+
sage: SmallOdds = ConditionSet(ZZ, is_odd, abs(y) <= 11, vars=[y]); SmallOdds # needs sage.symbolic
|
|
69
|
+
{ y ∈ Integer Ring : abs(y) <= 11, <function is_odd at 0x...>(y) }
|
|
70
|
+
|
|
71
|
+
sage: # needs sage.geometry.polyhedron
|
|
72
|
+
sage: P = polytopes.cube(); P
|
|
73
|
+
A 3-dimensional polyhedron in ZZ^3 defined as the convex hull of 8 vertices
|
|
74
|
+
sage: P.rename('P')
|
|
75
|
+
sage: P_inter_B = ConditionSet(P, lambda x: x.norm() < 1.2); P_inter_B
|
|
76
|
+
{ x ∈ P : <function <lambda> at 0x...>(x) }
|
|
77
|
+
sage: vector([1, 0, 0]) in P_inter_B
|
|
78
|
+
True
|
|
79
|
+
sage: vector([1, 1, 1]) in P_inter_B # needs sage.symbolic
|
|
80
|
+
False
|
|
81
|
+
|
|
82
|
+
sage: # needs sage.symbolic
|
|
83
|
+
sage: predicate(x, y, z) = sqrt(x^2 + y^2 + z^2) < 1.2; predicate
|
|
84
|
+
(x, y, z) |--> sqrt(x^2 + y^2 + z^2) < 1.20000000000000
|
|
85
|
+
sage: P_inter_B_again = ConditionSet(P, predicate); P_inter_B_again # needs sage.geometry.polyhedron
|
|
86
|
+
{ (x, y, z) ∈ P : sqrt(x^2 + y^2 + z^2) < 1.20000000000000 }
|
|
87
|
+
sage: vector([1, 0, 0]) in P_inter_B_again # needs sage.geometry.polyhedron
|
|
88
|
+
True
|
|
89
|
+
sage: vector([1, 1, 1]) in P_inter_B_again # needs sage.geometry.polyhedron
|
|
90
|
+
False
|
|
91
|
+
|
|
92
|
+
Iterating over subsets determined by predicates::
|
|
93
|
+
|
|
94
|
+
sage: Odds = ConditionSet(ZZ, is_odd); Odds
|
|
95
|
+
{ x ∈ Integer Ring : <function is_odd at 0x...>(x) }
|
|
96
|
+
sage: list(Odds.iterator_range(stop=6))
|
|
97
|
+
[1, -1, 3, -3, 5, -5]
|
|
98
|
+
|
|
99
|
+
sage: R = IntegerModRing(8)
|
|
100
|
+
sage: R_primes = ConditionSet(R, is_prime); R_primes
|
|
101
|
+
{ x ∈ Ring of integers modulo 8 : <function is_prime at 0x...>(x) }
|
|
102
|
+
sage: R_primes.is_finite()
|
|
103
|
+
True
|
|
104
|
+
sage: list(R_primes)
|
|
105
|
+
[2, 6]
|
|
106
|
+
|
|
107
|
+
Using ``ConditionSet`` without predicates provides a way of attaching variable names
|
|
108
|
+
to a set::
|
|
109
|
+
|
|
110
|
+
sage: Z3 = ConditionSet(ZZ^3, vars=['x', 'y', 'z']); Z3 # needs sage.modules
|
|
111
|
+
{ (x, y, z) ∈ Ambient free module of rank 3
|
|
112
|
+
over the principal ideal domain Integer Ring }
|
|
113
|
+
sage: Z3.variable_names() # needs sage.modules
|
|
114
|
+
('x', 'y', 'z')
|
|
115
|
+
sage: Z3.arguments() # needs sage.modules sage.symbolic
|
|
116
|
+
(x, y, z)
|
|
117
|
+
|
|
118
|
+
sage: Q4.<a, b, c, d> = ConditionSet(QQ^4); Q4 # needs sage.modules sage.symbolic
|
|
119
|
+
{ (a, b, c, d) ∈ Vector space of dimension 4 over Rational Field }
|
|
120
|
+
sage: Q4.variable_names() # needs sage.modules sage.symbolic
|
|
121
|
+
('a', 'b', 'c', 'd')
|
|
122
|
+
sage: Q4.arguments() # needs sage.modules sage.symbolic
|
|
123
|
+
(a, b, c, d)
|
|
124
|
+
|
|
125
|
+
TESTS::
|
|
126
|
+
|
|
127
|
+
sage: TestSuite(P_inter_B).run(skip='_test_pickling') # cannot pickle lambdas # needs sage.geometry.polyhedron
|
|
128
|
+
sage: TestSuite(P_inter_B_again).run() # needs sage.geometry.polyhedron sage.symbolic
|
|
129
|
+
"""
|
|
130
|
+
@staticmethod
|
|
131
|
+
def __classcall_private__(cls, universe, *predicates, vars=None, names=None, category=None):
|
|
132
|
+
r"""
|
|
133
|
+
Normalize init arguments.
|
|
134
|
+
|
|
135
|
+
TESTS::
|
|
136
|
+
|
|
137
|
+
sage: ConditionSet(ZZ, names=["x"]) is ConditionSet(ZZ, names=x) # needs sage.symbolic
|
|
138
|
+
True
|
|
139
|
+
sage: ConditionSet(RR, x > 0, names=x) is ConditionSet(RR, (x > 0).function(x)) # needs sage.symbolic
|
|
140
|
+
True
|
|
141
|
+
"""
|
|
142
|
+
if category is None:
|
|
143
|
+
category = Sets()
|
|
144
|
+
if isinstance(universe, Parent):
|
|
145
|
+
if universe in Sets().Finite():
|
|
146
|
+
category &= Sets().Finite()
|
|
147
|
+
if universe in EnumeratedSets():
|
|
148
|
+
category &= EnumeratedSets()
|
|
149
|
+
|
|
150
|
+
if vars is not None:
|
|
151
|
+
if names is not None:
|
|
152
|
+
raise ValueError('cannot use names and vars at the same time; they are aliases')
|
|
153
|
+
names, vars = vars, None
|
|
154
|
+
|
|
155
|
+
if names is not None:
|
|
156
|
+
names = normalize_names(-1, names)
|
|
157
|
+
|
|
158
|
+
callable_symbolic_predicates = []
|
|
159
|
+
other_predicates = []
|
|
160
|
+
|
|
161
|
+
for predicate in predicates:
|
|
162
|
+
if isinstance(predicate, Expression) and predicate.is_callable():
|
|
163
|
+
if names is None:
|
|
164
|
+
names = tuple(str(var) for var in predicate.args())
|
|
165
|
+
elif len(names) != len(predicate.args()):
|
|
166
|
+
raise TypeError('mismatch in number of arguments')
|
|
167
|
+
if vars is None:
|
|
168
|
+
vars = predicate.args()
|
|
169
|
+
callable_symbolic_predicates.append(predicate)
|
|
170
|
+
elif isinstance(predicate, Expression):
|
|
171
|
+
if names is None:
|
|
172
|
+
raise TypeError('use callable symbolic expressions or provide variable names')
|
|
173
|
+
if vars is None:
|
|
174
|
+
from sage.symbolic.ring import SR
|
|
175
|
+
vars = tuple(SR.var(name) for name in names)
|
|
176
|
+
callable_symbolic_predicates.append(predicate.function(*vars))
|
|
177
|
+
else:
|
|
178
|
+
other_predicates.append(predicate)
|
|
179
|
+
|
|
180
|
+
predicates = list(uniq(callable_symbolic_predicates + other_predicates))
|
|
181
|
+
|
|
182
|
+
if not other_predicates and not callable_symbolic_predicates:
|
|
183
|
+
if names is None and category is None:
|
|
184
|
+
# No conditions, no variable names, no category, just use Set.
|
|
185
|
+
return Set(universe)
|
|
186
|
+
|
|
187
|
+
if any(predicate.args() != vars
|
|
188
|
+
for predicate in callable_symbolic_predicates):
|
|
189
|
+
# TODO: Implement safe renaming of the arguments of a callable symbolic expressions
|
|
190
|
+
raise NotImplementedError('all callable symbolic expressions must use the same arguments')
|
|
191
|
+
|
|
192
|
+
if names is None:
|
|
193
|
+
names = ("x",)
|
|
194
|
+
return super().__classcall__(cls, universe, *predicates,
|
|
195
|
+
names=names, category=category)
|
|
196
|
+
|
|
197
|
+
def __init__(self, universe, *predicates, names=None, category=None):
|
|
198
|
+
r"""
|
|
199
|
+
TESTS::
|
|
200
|
+
|
|
201
|
+
sage: Evens = ConditionSet(ZZ, is_even); Evens
|
|
202
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) }
|
|
203
|
+
sage: TestSuite(Evens).run()
|
|
204
|
+
"""
|
|
205
|
+
self._universe = universe
|
|
206
|
+
self._predicates = predicates
|
|
207
|
+
facade = None
|
|
208
|
+
if isinstance(universe, Parent):
|
|
209
|
+
facade = universe
|
|
210
|
+
super().__init__(facade=facade, category=category,
|
|
211
|
+
names=names, normalize=False) # names already normalized by classcall
|
|
212
|
+
|
|
213
|
+
def _first_ngens(self, n):
|
|
214
|
+
r"""
|
|
215
|
+
Return the list of variables.
|
|
216
|
+
|
|
217
|
+
This is useful only for the use of Sage preparser::
|
|
218
|
+
|
|
219
|
+
sage: preparse("Q3.<x,y,z> = ConditionSet(QQ^3)")
|
|
220
|
+
"Q3 = ConditionSet(QQ**Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = Q3._first_ngens(3)"
|
|
221
|
+
"""
|
|
222
|
+
return self.arguments()
|
|
223
|
+
|
|
224
|
+
def _repr_(self):
|
|
225
|
+
"""
|
|
226
|
+
Print representation of this set.
|
|
227
|
+
|
|
228
|
+
EXAMPLES::
|
|
229
|
+
|
|
230
|
+
sage: var('t') # parameter # needs sage.symbolic
|
|
231
|
+
t
|
|
232
|
+
sage: ZeroDimButNotNullary = ConditionSet(ZZ^0, t > 0, vars=("q")) # needs sage.symbolic
|
|
233
|
+
sage: ZeroDimButNotNullary._repr_() # needs sage.symbolic
|
|
234
|
+
'{ q ∈ Ambient free module of rank 0
|
|
235
|
+
over the principal ideal domain Integer Ring : t > 0 }'
|
|
236
|
+
"""
|
|
237
|
+
s = "{ "
|
|
238
|
+
names = self.variable_names()
|
|
239
|
+
comma_sep_names = ", ".join(str(name) for name in names)
|
|
240
|
+
if len(names) == 1:
|
|
241
|
+
s += f"{comma_sep_names}"
|
|
242
|
+
else:
|
|
243
|
+
s += f"({comma_sep_names})"
|
|
244
|
+
universe = self._universe
|
|
245
|
+
s += f" ∈ {universe}"
|
|
246
|
+
sep = " : "
|
|
247
|
+
for predicate in self._predicates:
|
|
248
|
+
s += sep + self._repr_condition(predicate)
|
|
249
|
+
sep = ", "
|
|
250
|
+
s += " }"
|
|
251
|
+
return s
|
|
252
|
+
|
|
253
|
+
@cached_method
|
|
254
|
+
def _repr_condition(self, predicate):
|
|
255
|
+
"""
|
|
256
|
+
Format the predicate, applied to the arguments.
|
|
257
|
+
|
|
258
|
+
EXAMPLES::
|
|
259
|
+
|
|
260
|
+
sage: Evens = ConditionSet(ZZ, is_even)
|
|
261
|
+
sage: Evens._repr_condition(is_even)
|
|
262
|
+
'<function is_even at 0x...>(x)'
|
|
263
|
+
|
|
264
|
+
sage: # needs sage.symbolic
|
|
265
|
+
sage: BigSin = ConditionSet(RR, sin(x) > 0.9, vars=[x])
|
|
266
|
+
sage: BigSin._repr_condition(BigSin._predicates[0])
|
|
267
|
+
'sin(x) > 0.900000000000000'
|
|
268
|
+
sage: var('t') # parameter
|
|
269
|
+
t
|
|
270
|
+
sage: ZeroDimButNotNullary = ConditionSet(ZZ^0, t > 0, vars=("q"))
|
|
271
|
+
sage: ZeroDimButNotNullary._repr_condition(ZeroDimButNotNullary._predicates[0])
|
|
272
|
+
't > 0'
|
|
273
|
+
"""
|
|
274
|
+
if isinstance(predicate, Expression) and predicate.is_callable():
|
|
275
|
+
args = self.arguments()
|
|
276
|
+
if len(args) == 1:
|
|
277
|
+
args = args[0]
|
|
278
|
+
condition = self._call_predicate(predicate, args)
|
|
279
|
+
return str(condition)
|
|
280
|
+
comma_sep_names = ", ".join(str(name)
|
|
281
|
+
for name in self.variable_names())
|
|
282
|
+
return f"{predicate}({comma_sep_names})"
|
|
283
|
+
|
|
284
|
+
@cached_method
|
|
285
|
+
def arguments(self):
|
|
286
|
+
"""
|
|
287
|
+
Return the variables of ``self`` as elements of the symbolic ring.
|
|
288
|
+
|
|
289
|
+
EXAMPLES::
|
|
290
|
+
|
|
291
|
+
sage: Odds = ConditionSet(ZZ, is_odd); Odds
|
|
292
|
+
{ x ∈ Integer Ring : <function is_odd at 0x...>(x) }
|
|
293
|
+
sage: args = Odds.arguments(); args # needs sage.symbolic
|
|
294
|
+
(x,)
|
|
295
|
+
sage: args[0].parent() # needs sage.symbolic
|
|
296
|
+
Symbolic Ring
|
|
297
|
+
"""
|
|
298
|
+
from sage.symbolic.ring import SR
|
|
299
|
+
return SR.var(self.variable_names())
|
|
300
|
+
|
|
301
|
+
def _element_constructor_(self, *args, **kwds):
|
|
302
|
+
"""
|
|
303
|
+
Construct an element of the set.
|
|
304
|
+
|
|
305
|
+
This element constructor raises an error if the element does not
|
|
306
|
+
satisfy the predicates.
|
|
307
|
+
|
|
308
|
+
EXAMPLES::
|
|
309
|
+
|
|
310
|
+
sage: Evens = ConditionSet(ZZ, is_even); Evens
|
|
311
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) }
|
|
312
|
+
sage: element_two = Evens(2r); element_two
|
|
313
|
+
2
|
|
314
|
+
sage: element_two.parent()
|
|
315
|
+
Integer Ring
|
|
316
|
+
sage: element_too = Evens(2.0); element_too
|
|
317
|
+
2
|
|
318
|
+
sage: element_too.parent()
|
|
319
|
+
Integer Ring
|
|
320
|
+
sage: Evens(3)
|
|
321
|
+
Traceback (most recent call last):
|
|
322
|
+
...
|
|
323
|
+
ValueError: 3 does not satisfy the condition
|
|
324
|
+
"""
|
|
325
|
+
try:
|
|
326
|
+
universe_element_constructor = self._universe._element_constructor_
|
|
327
|
+
except AttributeError:
|
|
328
|
+
if len(args) != 1 or kwds:
|
|
329
|
+
raise ValueError('element constructor only takes 1 argument')
|
|
330
|
+
element = args[0]
|
|
331
|
+
if element not in self._universe:
|
|
332
|
+
raise ValueError(f'{element} is not an element of the universe')
|
|
333
|
+
else:
|
|
334
|
+
element = universe_element_constructor(*args, **kwds)
|
|
335
|
+
if not all(self._call_predicate(predicate, element)
|
|
336
|
+
for predicate in self._predicates):
|
|
337
|
+
raise ValueError(f'{element} does not satisfy the condition')
|
|
338
|
+
return element
|
|
339
|
+
|
|
340
|
+
def _call_predicate(self, predicate, element):
|
|
341
|
+
r"""
|
|
342
|
+
Call ``predicate`` on an ``element`` of the universe of ``self``.
|
|
343
|
+
|
|
344
|
+
TESTS::
|
|
345
|
+
|
|
346
|
+
sage: # needs sage.modules sage.symbolic
|
|
347
|
+
sage: TripleDigits = ZZ^3
|
|
348
|
+
sage: predicate(x, y, z) = sqrt(x^2 + y^2 + z^2) < 12; predicate
|
|
349
|
+
(x, y, z) |--> sqrt(x^2 + y^2 + z^2) < 12
|
|
350
|
+
sage: SmallTriples = ConditionSet(ZZ^3, predicate); SmallTriples
|
|
351
|
+
{ (x, y, z) ∈ Ambient free module of rank 3 over the principal
|
|
352
|
+
ideal domain Integer Ring : sqrt(x^2 + y^2 + z^2) < 12 }
|
|
353
|
+
sage: predicate = SmallTriples._predicates[0]
|
|
354
|
+
sage: element = TripleDigits((1, 2, 3))
|
|
355
|
+
sage: SmallTriples._call_predicate(predicate, element)
|
|
356
|
+
sqrt(14) < 12
|
|
357
|
+
|
|
358
|
+
sage: # needs sage.modules sage.symbolic
|
|
359
|
+
sage: var('t')
|
|
360
|
+
t
|
|
361
|
+
sage: TinyUniverse = ZZ^0
|
|
362
|
+
sage: Nullary = ConditionSet(TinyUniverse, t > 0, vars=())
|
|
363
|
+
sage: predicate = Nullary._predicates[0]
|
|
364
|
+
sage: element = TinyUniverse(0)
|
|
365
|
+
sage: Nullary._call_predicate(predicate, element)
|
|
366
|
+
t > 0
|
|
367
|
+
"""
|
|
368
|
+
if isinstance(predicate, Expression) and predicate.is_callable():
|
|
369
|
+
if len(predicate.arguments()) != 1:
|
|
370
|
+
return predicate(*element)
|
|
371
|
+
return predicate(element)
|
|
372
|
+
|
|
373
|
+
def _an_element_(self):
|
|
374
|
+
r"""
|
|
375
|
+
Return an element of ``self``.
|
|
376
|
+
|
|
377
|
+
This may raise :exc:`NotImplementedError`.
|
|
378
|
+
|
|
379
|
+
TESTS::
|
|
380
|
+
|
|
381
|
+
sage: # needs sage.modules sage.symbolic
|
|
382
|
+
sage: TripleDigits = ZZ^3
|
|
383
|
+
sage: predicate(x, y, z) = sqrt(x^2 + y^2 + z^2) < 12; predicate
|
|
384
|
+
(x, y, z) |--> sqrt(x^2 + y^2 + z^2) < 12
|
|
385
|
+
sage: SmallTriples = ConditionSet(ZZ^3, predicate); SmallTriples
|
|
386
|
+
{ (x, y, z) ∈ Ambient free module of rank 3 over the principal
|
|
387
|
+
ideal domain Integer Ring : sqrt(x^2 + y^2 + z^2) < 12 }
|
|
388
|
+
sage: SmallTriples.an_element() # indirect doctest
|
|
389
|
+
(1, 0, 0)
|
|
390
|
+
"""
|
|
391
|
+
for element in self._universe.some_elements():
|
|
392
|
+
if element in self:
|
|
393
|
+
return element
|
|
394
|
+
raise NotImplementedError
|
|
395
|
+
|
|
396
|
+
def ambient(self):
|
|
397
|
+
r"""
|
|
398
|
+
Return the universe of ``self``.
|
|
399
|
+
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: Evens = ConditionSet(ZZ, is_even); Evens
|
|
403
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) }
|
|
404
|
+
sage: Evens.ambient()
|
|
405
|
+
Integer Ring
|
|
406
|
+
"""
|
|
407
|
+
return self._universe
|
|
408
|
+
|
|
409
|
+
@cached_method
|
|
410
|
+
def _sympy_(self):
|
|
411
|
+
r"""
|
|
412
|
+
Return an instance of a subclass of SymPy ``Set`` corresponding to ``self``.
|
|
413
|
+
|
|
414
|
+
EXAMPLES::
|
|
415
|
+
|
|
416
|
+
sage: # needs sympy sage.modules sage.symbolic
|
|
417
|
+
sage: predicate(x, y, z) = sqrt(x^2 + y^2 + z^2) < 12; predicate
|
|
418
|
+
(x, y, z) |--> sqrt(x^2 + y^2 + z^2) < 12
|
|
419
|
+
sage: SmallTriples = ConditionSet(ZZ^3, predicate); SmallTriples
|
|
420
|
+
{ (x, y, z) ∈ Ambient free module of rank 3 over the principal
|
|
421
|
+
ideal domain Integer Ring : sqrt(x^2 + y^2 + z^2) < 12 }
|
|
422
|
+
sage: ST = SmallTriples._sympy_(); ST
|
|
423
|
+
ConditionSet((x, y, z), sqrt(x**2 + y**2 + z**2) < 12,
|
|
424
|
+
ProductSet(Integers, Integers, Integers))
|
|
425
|
+
sage: (1, 3, 5) in ST
|
|
426
|
+
True
|
|
427
|
+
sage: (5, 7, 9) in ST
|
|
428
|
+
False
|
|
429
|
+
sage: Interval = ConditionSet(RR, x >= -7, x <= 4, vars=[x]); Interval
|
|
430
|
+
{ x ∈ Real Field with 53 bits of precision : x >= -7, x <= 4 }
|
|
431
|
+
sage: Interval._sympy_()
|
|
432
|
+
ConditionSet(x, (x >= -7) & (x <= 4),
|
|
433
|
+
SageSet(Real Field with 53 bits of precision))
|
|
434
|
+
|
|
435
|
+
If a predicate is not symbolic, we fall back to creating a wrapper::
|
|
436
|
+
|
|
437
|
+
sage: Evens = ConditionSet(ZZ, is_even); Evens
|
|
438
|
+
{ x ∈ Integer Ring : <function is_even at 0x...>(x) }
|
|
439
|
+
sage: Evens._sympy_() # needs sympy sage.symbolic
|
|
440
|
+
SageSet({ x ∈ Integer Ring : <function is_even at 0x...>(x) })
|
|
441
|
+
"""
|
|
442
|
+
from sage.interfaces.sympy import sympy_init
|
|
443
|
+
sympy_init()
|
|
444
|
+
import sympy
|
|
445
|
+
|
|
446
|
+
args = self.arguments()
|
|
447
|
+
single_arg = len(args) == 1
|
|
448
|
+
if single_arg:
|
|
449
|
+
args = args[0]
|
|
450
|
+
|
|
451
|
+
try:
|
|
452
|
+
conditions = [self._call_predicate(predicate, args)
|
|
453
|
+
for predicate in self._predicates]
|
|
454
|
+
|
|
455
|
+
sym = tuple(x._sympy_() for x in self.arguments())
|
|
456
|
+
if single_arg:
|
|
457
|
+
sym = sym[0]
|
|
458
|
+
result = sympy.ConditionSet(sym,
|
|
459
|
+
sympy.And(*[condition._sympy_()
|
|
460
|
+
for condition in conditions]),
|
|
461
|
+
base_set=self._universe._sympy_())
|
|
462
|
+
result._sage_object = self
|
|
463
|
+
return result
|
|
464
|
+
except TypeError:
|
|
465
|
+
# Fall back to creating a wrapper
|
|
466
|
+
return super()._sympy_()
|
|
467
|
+
|
|
468
|
+
def intersection(self, X):
|
|
469
|
+
r"""
|
|
470
|
+
Return the intersection of ``self`` and ``X``.
|
|
471
|
+
|
|
472
|
+
EXAMPLES::
|
|
473
|
+
|
|
474
|
+
sage: # needs sage.modules sage.symbolic
|
|
475
|
+
sage: in_small_oblong(x, y) = x^2 + 3 * y^2 <= 42
|
|
476
|
+
sage: SmallOblongUniverse = ConditionSet(QQ^2, in_small_oblong)
|
|
477
|
+
sage: SmallOblongUniverse
|
|
478
|
+
{ (x, y) ∈ Vector space of dimension 2
|
|
479
|
+
over Rational Field : x^2 + 3*y^2 <= 42 }
|
|
480
|
+
sage: parity_check(x, y) = abs(sin(pi/2*(x + y))) < 1/1000
|
|
481
|
+
sage: EvenUniverse = ConditionSet(ZZ^2, parity_check); EvenUniverse
|
|
482
|
+
{ (x, y) ∈ Ambient free module of rank 2 over the principal ideal
|
|
483
|
+
domain Integer Ring : abs(sin(1/2*pi*x + 1/2*pi*y)) < (1/1000) }
|
|
484
|
+
sage: SmallOblongUniverse & EvenUniverse
|
|
485
|
+
{ (x, y) ∈ Free module of degree 2 and rank 2 over Integer Ring
|
|
486
|
+
Echelon basis matrix:
|
|
487
|
+
[1 0]
|
|
488
|
+
[0 1] : x^2 + 3*y^2 <= 42, abs(sin(1/2*pi*x + 1/2*pi*y)) < (1/1000) }
|
|
489
|
+
|
|
490
|
+
Combining two ``ConditionSet``s with different formal variables works correctly.
|
|
491
|
+
The formal variables of the intersection are taken from ``self``::
|
|
492
|
+
|
|
493
|
+
sage: # needs sage.modules sage.symbolic
|
|
494
|
+
sage: SmallMirrorUniverse = ConditionSet(QQ^2, in_small_oblong,
|
|
495
|
+
....: vars=(y, x))
|
|
496
|
+
sage: SmallMirrorUniverse
|
|
497
|
+
{ (y, x) ∈ Vector space of dimension 2
|
|
498
|
+
over Rational Field : 3*x^2 + y^2 <= 42 }
|
|
499
|
+
sage: SmallOblongUniverse & SmallMirrorUniverse
|
|
500
|
+
{ (x, y) ∈ Vector space of dimension 2
|
|
501
|
+
over Rational Field : x^2 + 3*y^2 <= 42 }
|
|
502
|
+
sage: SmallMirrorUniverse & SmallOblongUniverse
|
|
503
|
+
{ (y, x) ∈ Vector space of dimension 2
|
|
504
|
+
over Rational Field : 3*x^2 + y^2 <= 42 }
|
|
505
|
+
"""
|
|
506
|
+
if isinstance(X, ConditionSet):
|
|
507
|
+
return ConditionSet(self.ambient().intersection(X.ambient()),
|
|
508
|
+
*(self._predicates + X._predicates),
|
|
509
|
+
vars=self.arguments())
|
|
510
|
+
return super().intersection(X)
|
|
511
|
+
|
|
512
|
+
def __iter__(self):
|
|
513
|
+
r"""
|
|
514
|
+
Iterate over ``self``.
|
|
515
|
+
|
|
516
|
+
TESTS::
|
|
517
|
+
|
|
518
|
+
sage: Odds = ConditionSet(ZZ, is_odd); Odds
|
|
519
|
+
{ x ∈ Integer Ring : <function is_odd at 0x...>(x) }
|
|
520
|
+
sage: list(Odds.iterator_range(stop=6))
|
|
521
|
+
[1, -1, 3, -3, 5, -5]
|
|
522
|
+
"""
|
|
523
|
+
for x in self._universe:
|
|
524
|
+
if x in self:
|
|
525
|
+
yield x
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# ****************************************************************************
|
|
3
|
+
# Copyright (C) 2009 Sébastien Labbé <slabqc at gmail.com>
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.groups.perm_gps.partn_ref.data_structures cimport OrbitPartition
|
|
13
|
+
from sage.structure.sage_object cimport SageObject
|
|
14
|
+
|
|
15
|
+
cpdef DisjointSet(arg)
|
|
16
|
+
|
|
17
|
+
cdef class DisjointSet_class(SageObject):
|
|
18
|
+
cdef OrbitPartition *_nodes
|
|
19
|
+
cpdef cardinality(self)
|
|
20
|
+
cpdef number_of_subsets(self)
|
|
21
|
+
|
|
22
|
+
cdef class DisjointSet_of_integers(DisjointSet_class):
|
|
23
|
+
cpdef int find(self, int i) except -1
|
|
24
|
+
cpdef void union(self, int i, int j) except *
|
|
25
|
+
cpdef root_to_elements_dict(self)
|
|
26
|
+
cpdef element_to_root_dict(self)
|
|
27
|
+
cpdef to_digraph(self)
|
|
28
|
+
|
|
29
|
+
cdef class DisjointSet_of_hashables(DisjointSet_class):
|
|
30
|
+
cdef list _int_to_el
|
|
31
|
+
cdef dict _el_to_int
|
|
32
|
+
cpdef find(self, e)
|
|
33
|
+
cpdef void union(self, e, f) except *
|
|
34
|
+
cpdef root_to_elements_dict(self)
|
|
35
|
+
cpdef element_to_root_dict(self)
|
|
36
|
+
cpdef to_digraph(self)
|