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,406 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.graphs sage.combinat sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Supercrystals
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
#*****************************************************************************
|
|
8
|
+
# Copyright (C) 2017 Franco Saliola <saliola@gmail.com>
|
|
9
|
+
# 2017 Anne Schilling <anne at math.ucdavis.edu>
|
|
10
|
+
# 2019 Travis Scrimshaw <tcscrims at gmail.com>
|
|
11
|
+
#
|
|
12
|
+
# This program is free software: you can redistribute it and/or modify
|
|
13
|
+
# it under the terms of the GNU General Public License as published by
|
|
14
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
15
|
+
# (at your option) any later version.
|
|
16
|
+
# http://www.gnu.org/licenses/
|
|
17
|
+
#*****************************************************************************
|
|
18
|
+
|
|
19
|
+
from sage.misc.cachefunc import cached_method
|
|
20
|
+
from sage.categories.category_singleton import Category_singleton
|
|
21
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
22
|
+
from sage.categories.crystals import Crystals
|
|
23
|
+
from sage.categories.tensor import TensorProductsCategory
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SuperCrystals(Category_singleton):
|
|
27
|
+
def super_categories(self):
|
|
28
|
+
r"""
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: from sage.categories.supercrystals import SuperCrystals
|
|
32
|
+
sage: C = SuperCrystals()
|
|
33
|
+
sage: C.super_categories()
|
|
34
|
+
[Category of crystals]
|
|
35
|
+
"""
|
|
36
|
+
return [Crystals()]
|
|
37
|
+
|
|
38
|
+
class ParentMethods:
|
|
39
|
+
def tensor(self, *crystals, **options):
|
|
40
|
+
"""
|
|
41
|
+
Return the tensor product of ``self`` with the crystals ``B``.
|
|
42
|
+
|
|
43
|
+
EXAMPLES::
|
|
44
|
+
|
|
45
|
+
sage: B = crystals.Letters(['A',[1,2]])
|
|
46
|
+
sage: C = crystals.Tableaux(['A',[1,2]], shape = [2,1])
|
|
47
|
+
sage: T = C.tensor(B); T
|
|
48
|
+
Full tensor product of the crystals
|
|
49
|
+
[Crystal of BKK tableaux of shape [2, 1] of gl(2|3),
|
|
50
|
+
The crystal of letters for type ['A', [1, 2]]]
|
|
51
|
+
sage: S = B.tensor(C); S
|
|
52
|
+
Full tensor product of the crystals
|
|
53
|
+
[The crystal of letters for type ['A', [1, 2]],
|
|
54
|
+
Crystal of BKK tableaux of shape [2, 1] of gl(2|3)]
|
|
55
|
+
sage: G = T.digraph()
|
|
56
|
+
sage: H = S.digraph()
|
|
57
|
+
sage: G.is_isomorphic(H, edge_labels=True)
|
|
58
|
+
True
|
|
59
|
+
"""
|
|
60
|
+
cartan_type = self.cartan_type()
|
|
61
|
+
if any(c.cartan_type() != cartan_type for c in crystals):
|
|
62
|
+
raise ValueError("all crystals must be of the same Cartan type")
|
|
63
|
+
|
|
64
|
+
if cartan_type.letter == 'Q':
|
|
65
|
+
from sage.combinat.crystals.tensor_product import FullTensorProductOfQueerSuperCrystals
|
|
66
|
+
return FullTensorProductOfQueerSuperCrystals((self,) + tuple(crystals), **options)
|
|
67
|
+
else:
|
|
68
|
+
from sage.combinat.crystals.tensor_product import FullTensorProductOfSuperCrystals
|
|
69
|
+
return FullTensorProductOfSuperCrystals((self,) + tuple(crystals), **options)
|
|
70
|
+
|
|
71
|
+
class Finite(CategoryWithAxiom):
|
|
72
|
+
class ParentMethods:
|
|
73
|
+
@cached_method(key=lambda s,i: tuple(i) if i is not None else s.index_set())
|
|
74
|
+
def digraph(self, index_set=None):
|
|
75
|
+
r"""
|
|
76
|
+
Return the :class:`DiGraph` associated to ``self``.
|
|
77
|
+
|
|
78
|
+
EXAMPLES::
|
|
79
|
+
|
|
80
|
+
sage: B = crystals.Letters(['A', [1,3]])
|
|
81
|
+
sage: G = B.digraph(); G
|
|
82
|
+
Multi-digraph on 6 vertices
|
|
83
|
+
sage: Q = crystals.Letters(['Q',3])
|
|
84
|
+
sage: G = Q.digraph(); G
|
|
85
|
+
Multi-digraph on 3 vertices
|
|
86
|
+
sage: G.edges(sort=True)
|
|
87
|
+
[(1, 2, -1), (1, 2, 1), (2, 3, -2), (2, 3, 2)]
|
|
88
|
+
|
|
89
|
+
The edges of the crystal graph are by default colored using
|
|
90
|
+
blue for edge 1, red for edge 2, green for edge 3, and dashed with
|
|
91
|
+
the corresponding color for barred edges. Edge 0 is dotted black::
|
|
92
|
+
|
|
93
|
+
sage: view(G) # optional - dot2tex graphviz, not tested (opens external window)
|
|
94
|
+
"""
|
|
95
|
+
from sage.graphs.digraph import DiGraph
|
|
96
|
+
from sage.misc.latex import LatexExpr
|
|
97
|
+
from sage.combinat.root_system.cartan_type import CartanType
|
|
98
|
+
|
|
99
|
+
if index_set is None:
|
|
100
|
+
index_set = self.index_set()
|
|
101
|
+
|
|
102
|
+
G = DiGraph(multiedges=True)
|
|
103
|
+
G.add_vertices(self)
|
|
104
|
+
for i in index_set:
|
|
105
|
+
for x in G:
|
|
106
|
+
y = x.f(i)
|
|
107
|
+
if y is not None:
|
|
108
|
+
G.add_edge(x, y, i)
|
|
109
|
+
|
|
110
|
+
def edge_options(data):
|
|
111
|
+
u, v, l = data
|
|
112
|
+
edge_opts = { 'edge_string': '->', 'color': 'black' }
|
|
113
|
+
if l > 0:
|
|
114
|
+
edge_opts['color'] = CartanType._colors.get(l, 'black')
|
|
115
|
+
edge_opts['label'] = LatexExpr(str(l))
|
|
116
|
+
elif l < 0:
|
|
117
|
+
edge_opts['color'] = "dashed," + CartanType._colors.get(-l, 'black')
|
|
118
|
+
edge_opts['label'] = LatexExpr("\\overline{%s}" % str(-l))
|
|
119
|
+
else:
|
|
120
|
+
edge_opts['color'] = "dotted," + CartanType._colors.get(l, 'black')
|
|
121
|
+
edge_opts['label'] = LatexExpr(str(l))
|
|
122
|
+
return edge_opts
|
|
123
|
+
|
|
124
|
+
G.set_latex_options(format='dot2tex', edge_labels=True, edge_options=edge_options)
|
|
125
|
+
return G
|
|
126
|
+
|
|
127
|
+
def genuine_highest_weight_vectors(self):
|
|
128
|
+
r"""
|
|
129
|
+
Return the tuple of genuine highest weight elements of ``self``.
|
|
130
|
+
|
|
131
|
+
EXAMPLES::
|
|
132
|
+
|
|
133
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
134
|
+
sage: B.genuine_highest_weight_vectors()
|
|
135
|
+
(-2,)
|
|
136
|
+
|
|
137
|
+
sage: T = B.tensor(B)
|
|
138
|
+
sage: T.genuine_highest_weight_vectors()
|
|
139
|
+
([-2, -1], [-2, -2])
|
|
140
|
+
sage: s1, s2 = T.connected_components()
|
|
141
|
+
sage: s = s1 + s2
|
|
142
|
+
sage: s.genuine_highest_weight_vectors()
|
|
143
|
+
([-2, -1], [-2, -2])
|
|
144
|
+
"""
|
|
145
|
+
return tuple([x[0] for x in self._genuine_highest_lowest_weight_vectors()])
|
|
146
|
+
|
|
147
|
+
connected_components_generators = genuine_highest_weight_vectors
|
|
148
|
+
|
|
149
|
+
def connected_components(self):
|
|
150
|
+
r"""
|
|
151
|
+
Return the connected components of ``self`` as subcrystals.
|
|
152
|
+
|
|
153
|
+
EXAMPLES::
|
|
154
|
+
|
|
155
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
156
|
+
sage: B.connected_components()
|
|
157
|
+
[Subcrystal of The crystal of letters for type ['A', [1, 2]]]
|
|
158
|
+
|
|
159
|
+
sage: T = B.tensor(B)
|
|
160
|
+
sage: T.connected_components()
|
|
161
|
+
[Subcrystal of Full tensor product of the crystals
|
|
162
|
+
[The crystal of letters for type ['A', [1, 2]],
|
|
163
|
+
The crystal of letters for type ['A', [1, 2]]],
|
|
164
|
+
Subcrystal of Full tensor product of the crystals
|
|
165
|
+
[The crystal of letters for type ['A', [1, 2]],
|
|
166
|
+
The crystal of letters for type ['A', [1, 2]]]]
|
|
167
|
+
"""
|
|
168
|
+
category = SuperCrystals()
|
|
169
|
+
from sage.categories.regular_supercrystals import RegularSuperCrystals
|
|
170
|
+
if self in RegularSuperCrystals():
|
|
171
|
+
category = RegularSuperCrystals()
|
|
172
|
+
index_set = self.index_set()
|
|
173
|
+
cartan_type = self.cartan_type()
|
|
174
|
+
CCs = []
|
|
175
|
+
|
|
176
|
+
for mg in self.connected_components_generators():
|
|
177
|
+
if not isinstance(mg, tuple):
|
|
178
|
+
mg = (mg,)
|
|
179
|
+
subcrystal = self.subcrystal(generators=mg,
|
|
180
|
+
index_set=index_set,
|
|
181
|
+
cartan_type=cartan_type,
|
|
182
|
+
category=category)
|
|
183
|
+
CCs.append(subcrystal)
|
|
184
|
+
|
|
185
|
+
return CCs
|
|
186
|
+
|
|
187
|
+
def genuine_lowest_weight_vectors(self):
|
|
188
|
+
r"""
|
|
189
|
+
Return the tuple of genuine lowest weight elements of ``self``.
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
194
|
+
sage: B.genuine_lowest_weight_vectors()
|
|
195
|
+
(3,)
|
|
196
|
+
|
|
197
|
+
sage: T = B.tensor(B)
|
|
198
|
+
sage: T.genuine_lowest_weight_vectors()
|
|
199
|
+
([3, 3], [3, 2])
|
|
200
|
+
sage: s1, s2 = T.connected_components()
|
|
201
|
+
sage: s = s1 + s2
|
|
202
|
+
sage: s.genuine_lowest_weight_vectors()
|
|
203
|
+
([3, 3], [3, 2])
|
|
204
|
+
"""
|
|
205
|
+
return tuple([x[1] for x in self._genuine_highest_lowest_weight_vectors()])
|
|
206
|
+
|
|
207
|
+
@cached_method
|
|
208
|
+
def _genuine_highest_lowest_weight_vectors(self):
|
|
209
|
+
r"""
|
|
210
|
+
Return the genuine lowest and highest weight elements of ``self``.
|
|
211
|
+
|
|
212
|
+
EXAMPLES::
|
|
213
|
+
|
|
214
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
215
|
+
sage: B._genuine_highest_lowest_weight_vectors()
|
|
216
|
+
((-2, 3),)
|
|
217
|
+
|
|
218
|
+
sage: T = B.tensor(B)
|
|
219
|
+
sage: T._genuine_highest_lowest_weight_vectors()
|
|
220
|
+
(([-2, -1], [3, 3]), ([-2, -2], [3, 2]))
|
|
221
|
+
sage: s1, s2 = T.connected_components()
|
|
222
|
+
sage: s = s1 + s2
|
|
223
|
+
sage: s._genuine_highest_lowest_weight_vectors()
|
|
224
|
+
(([-2, -1], [3, 3]), ([-2, -2], [3, 2]))
|
|
225
|
+
|
|
226
|
+
An example with fake highest/lowest weight elements
|
|
227
|
+
from [BKK2000]_::
|
|
228
|
+
|
|
229
|
+
sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
|
|
230
|
+
sage: B._genuine_highest_lowest_weight_vectors()
|
|
231
|
+
(([[-2, -2, -2], [-1, -1], [1]], [[-1, 1, 2], [1, 2], [2]]),)
|
|
232
|
+
"""
|
|
233
|
+
X = []
|
|
234
|
+
for G in self.digraph().connected_components_subgraphs():
|
|
235
|
+
src = G.sources()
|
|
236
|
+
sinks = G.sinks()
|
|
237
|
+
max_dist = -1
|
|
238
|
+
pair = None
|
|
239
|
+
for s in src:
|
|
240
|
+
for t in sinks:
|
|
241
|
+
d = G.distance(s, t)
|
|
242
|
+
if d < float('inf') and d > max_dist:
|
|
243
|
+
pair = (s, t)
|
|
244
|
+
max_dist = d
|
|
245
|
+
X.append(pair)
|
|
246
|
+
return tuple(X)
|
|
247
|
+
|
|
248
|
+
def character(self):
|
|
249
|
+
"""
|
|
250
|
+
Return the character of ``self``.
|
|
251
|
+
|
|
252
|
+
.. TODO::
|
|
253
|
+
|
|
254
|
+
Once the `WeylCharacterRing` is implemented, make this
|
|
255
|
+
consistent with the implementation in
|
|
256
|
+
:meth:`sage.categories.classical_crystals.ClassicalCrystals.ParentMethods.character`.
|
|
257
|
+
|
|
258
|
+
EXAMPLES::
|
|
259
|
+
|
|
260
|
+
sage: B = crystals.Letters(['A',[1,2]])
|
|
261
|
+
sage: B.character()
|
|
262
|
+
B[(1, 0, 0, 0, 0)] + B[(0, 1, 0, 0, 0)] + B[(0, 0, 1, 0, 0)]
|
|
263
|
+
+ B[(0, 0, 0, 1, 0)] + B[(0, 0, 0, 0, 1)]
|
|
264
|
+
"""
|
|
265
|
+
from sage.rings.integer_ring import ZZ
|
|
266
|
+
A = self.weight_lattice_realization().algebra(ZZ)
|
|
267
|
+
return A.sum(A(x.weight()) for x in self)
|
|
268
|
+
|
|
269
|
+
@cached_method
|
|
270
|
+
def highest_weight_vectors(self):
|
|
271
|
+
"""
|
|
272
|
+
Return the highest weight vectors of ``self``.
|
|
273
|
+
|
|
274
|
+
EXAMPLES::
|
|
275
|
+
|
|
276
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
277
|
+
sage: B.highest_weight_vectors()
|
|
278
|
+
(-2,)
|
|
279
|
+
|
|
280
|
+
sage: T = B.tensor(B)
|
|
281
|
+
sage: T.highest_weight_vectors()
|
|
282
|
+
([-2, -2], [-2, -1])
|
|
283
|
+
|
|
284
|
+
We give an example from [BKK2000]_ that has fake
|
|
285
|
+
highest weight vectors::
|
|
286
|
+
|
|
287
|
+
sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
|
|
288
|
+
sage: B.highest_weight_vectors()
|
|
289
|
+
([[-2, -2, -2], [-1, -1], [1]],
|
|
290
|
+
[[-2, -2, -2], [-1, 2], [1]],
|
|
291
|
+
[[-2, -2, 2], [-1, -1], [1]])
|
|
292
|
+
sage: B.genuine_highest_weight_vectors()
|
|
293
|
+
([[-2, -2, -2], [-1, -1], [1]],)
|
|
294
|
+
"""
|
|
295
|
+
return tuple(self.digraph().sources())
|
|
296
|
+
|
|
297
|
+
@cached_method
|
|
298
|
+
def lowest_weight_vectors(self):
|
|
299
|
+
"""
|
|
300
|
+
Return the lowest weight vectors of ``self``.
|
|
301
|
+
|
|
302
|
+
EXAMPLES::
|
|
303
|
+
|
|
304
|
+
sage: B = crystals.Letters(['A', [1,2]])
|
|
305
|
+
sage: B.lowest_weight_vectors()
|
|
306
|
+
(3,)
|
|
307
|
+
|
|
308
|
+
sage: T = B.tensor(B)
|
|
309
|
+
sage: sorted(T.lowest_weight_vectors())
|
|
310
|
+
[[3, 2], [3, 3]]
|
|
311
|
+
|
|
312
|
+
We give an example from [BKK2000]_ that has fake
|
|
313
|
+
lowest weight vectors::
|
|
314
|
+
|
|
315
|
+
sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
|
|
316
|
+
sage: sorted(B.lowest_weight_vectors())
|
|
317
|
+
[[[-2, 1, 2], [-1, 2], [1]],
|
|
318
|
+
[[-2, 1, 2], [-1, 2], [2]],
|
|
319
|
+
[[-1, 1, 2], [1, 2], [2]]]
|
|
320
|
+
sage: B.genuine_lowest_weight_vectors()
|
|
321
|
+
([[-1, 1, 2], [1, 2], [2]],)
|
|
322
|
+
"""
|
|
323
|
+
return tuple(self.digraph().sinks())
|
|
324
|
+
|
|
325
|
+
class ElementMethods:
|
|
326
|
+
def is_genuine_highest_weight(self, index_set=None):
|
|
327
|
+
"""
|
|
328
|
+
Return whether ``self`` is a genuine highest weight element.
|
|
329
|
+
|
|
330
|
+
INPUT:
|
|
331
|
+
|
|
332
|
+
- ``index_set`` -- (optional) the index set of the (sub)crystal
|
|
333
|
+
on which to check
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
|
|
338
|
+
sage: for b in B.highest_weight_vectors():
|
|
339
|
+
....: print("{} {}".format(b, b.is_genuine_highest_weight()))
|
|
340
|
+
[[-2, -2, -2], [-1, -1], [1]] True
|
|
341
|
+
[[-2, -2, -2], [-1, 2], [1]] False
|
|
342
|
+
[[-2, -2, 2], [-1, -1], [1]] False
|
|
343
|
+
sage: [b for b in B if b.is_genuine_highest_weight([-1,0])]
|
|
344
|
+
[[[-2, -2, -2], [-1, -1], [1]],
|
|
345
|
+
[[-2, -2, -2], [-1, -1], [2]],
|
|
346
|
+
[[-2, -2, -2], [-1, 2], [2]],
|
|
347
|
+
[[-2, -2, 2], [-1, -1], [2]],
|
|
348
|
+
[[-2, -2, 2], [-1, 2], [2]],
|
|
349
|
+
[[-2, -2, -2], [-1, 2], [1]],
|
|
350
|
+
[[-2, -2, 2], [-1, -1], [1]],
|
|
351
|
+
[[-2, -2, 2], [-1, 2], [1]]]
|
|
352
|
+
"""
|
|
353
|
+
P = self.parent()
|
|
354
|
+
if index_set is None or set(index_set) == set(P.index_set()):
|
|
355
|
+
return self in P.genuine_highest_weight_vectors()
|
|
356
|
+
S = P.subcrystal(generators=P, index_set=index_set, category=P.category())
|
|
357
|
+
return any(self == x.value for x in S.genuine_highest_weight_vectors())
|
|
358
|
+
|
|
359
|
+
def is_genuine_lowest_weight(self, index_set=None):
|
|
360
|
+
"""
|
|
361
|
+
Return whether ``self`` is a genuine lowest weight element.
|
|
362
|
+
|
|
363
|
+
INPUT:
|
|
364
|
+
|
|
365
|
+
- ``index_set`` -- (optional) the index set of the (sub)crystal
|
|
366
|
+
on which to check
|
|
367
|
+
|
|
368
|
+
EXAMPLES::
|
|
369
|
+
|
|
370
|
+
sage: B = crystals.Tableaux(['A', [1,1]], shape=[3,2,1])
|
|
371
|
+
sage: for b in sorted(B.lowest_weight_vectors()):
|
|
372
|
+
....: print("{} {}".format(b, b.is_genuine_lowest_weight()))
|
|
373
|
+
[[-2, 1, 2], [-1, 2], [1]] False
|
|
374
|
+
[[-2, 1, 2], [-1, 2], [2]] False
|
|
375
|
+
[[-1, 1, 2], [1, 2], [2]] True
|
|
376
|
+
sage: [b for b in B if b.is_genuine_lowest_weight([-1,0])]
|
|
377
|
+
[[[-2, -1, 1], [-1, 1], [1]],
|
|
378
|
+
[[-2, -1, 1], [-1, 1], [2]],
|
|
379
|
+
[[-2, 1, 2], [-1, 1], [2]],
|
|
380
|
+
[[-2, 1, 2], [-1, 1], [1]],
|
|
381
|
+
[[-1, -1, 1], [1, 2], [2]],
|
|
382
|
+
[[-1, -1, 1], [1, 2], [1]],
|
|
383
|
+
[[-1, 1, 2], [1, 2], [2]],
|
|
384
|
+
[[-1, 1, 2], [1, 2], [1]]]
|
|
385
|
+
"""
|
|
386
|
+
P = self.parent()
|
|
387
|
+
if index_set is None or set(index_set) == set(P.index_set()):
|
|
388
|
+
return self in P.genuine_lowest_weight_vectors()
|
|
389
|
+
S = P.subcrystal(generators=P, index_set=index_set, category=P.category())
|
|
390
|
+
return any(self == x.value for x in S.genuine_lowest_weight_vectors())
|
|
391
|
+
|
|
392
|
+
class TensorProducts(TensorProductsCategory):
|
|
393
|
+
"""
|
|
394
|
+
The category of regular crystals constructed by tensor
|
|
395
|
+
product of regular crystals.
|
|
396
|
+
"""
|
|
397
|
+
@cached_method
|
|
398
|
+
def extra_super_categories(self):
|
|
399
|
+
"""
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: from sage.categories.supercrystals import SuperCrystals
|
|
403
|
+
sage: SuperCrystals().TensorProducts().extra_super_categories()
|
|
404
|
+
[Category of super crystals]
|
|
405
|
+
"""
|
|
406
|
+
return [self.base_category()]
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Tensor Product Functorial Construction
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Nicolas M. Thiéry (2008-2010): initial revision and refactorization
|
|
8
|
+
"""
|
|
9
|
+
# ****************************************************************************
|
|
10
|
+
# Copyright (C) 2008-2010 Nicolas M. Thiéry <nthiery at users.sf.net>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.categories.covariant_functorial_construction import CovariantFunctorialConstruction, CovariantConstructionCategory
|
|
17
|
+
from sage.typeset.unicode_characters import unicode_otimes
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TensorProductFunctor(CovariantFunctorialConstruction):
|
|
21
|
+
"""
|
|
22
|
+
A singleton class for the tensor functor.
|
|
23
|
+
|
|
24
|
+
This functor takes a collection of vector spaces (or modules with
|
|
25
|
+
basis), and constructs the tensor product of those vector spaces.
|
|
26
|
+
If this vector space is in a subcategory, say that of
|
|
27
|
+
``Algebras(QQ)``, it is automatically endowed with its natural
|
|
28
|
+
algebra structure, thanks to the category
|
|
29
|
+
``Algebras(QQ).TensorProducts()`` of tensor products of algebras.
|
|
30
|
+
For elements, it constructs the natural tensor product element in the
|
|
31
|
+
corresponding tensor product of their parents.
|
|
32
|
+
|
|
33
|
+
The tensor functor is covariant: if ``A`` is a subcategory of ``B``, then
|
|
34
|
+
``A.TensorProducts()`` is a subcategory of ``B.TensorProducts()`` (see
|
|
35
|
+
also
|
|
36
|
+
:class:`~sage.categories.covariant_functorial_construction.CovariantFunctorialConstruction`). Hence,
|
|
37
|
+
the role of ``Algebras(QQ).TensorProducts()`` is solely to provide
|
|
38
|
+
mathematical information and algorithms which are relevant to tensor
|
|
39
|
+
product of algebras.
|
|
40
|
+
|
|
41
|
+
Those are implemented in the nested class
|
|
42
|
+
:class:`~sage.categories.algebras.Algebras.TensorProducts`
|
|
43
|
+
of ``Algebras(QQ)``. This nested class is itself a subclass of
|
|
44
|
+
:class:`~sage.categories.tensor.TensorProductsCategory`.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
TESTS::
|
|
48
|
+
|
|
49
|
+
sage: TestSuite(tensor).run()
|
|
50
|
+
"""
|
|
51
|
+
_functor_name = "tensor"
|
|
52
|
+
_functor_category = "TensorProducts"
|
|
53
|
+
symbol = " # "
|
|
54
|
+
unicode_symbol = f" {unicode_otimes} "
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
tensor = TensorProductFunctor()
|
|
58
|
+
"""
|
|
59
|
+
The tensor product functorial construction
|
|
60
|
+
|
|
61
|
+
See :class:`TensorProductFunctor` for more information
|
|
62
|
+
|
|
63
|
+
EXAMPLES::
|
|
64
|
+
|
|
65
|
+
sage: tensor
|
|
66
|
+
The tensor functorial construction
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class TensorProductsCategory(CovariantConstructionCategory):
|
|
71
|
+
r"""
|
|
72
|
+
An abstract base class for all TensorProducts's categories.
|
|
73
|
+
|
|
74
|
+
TESTS::
|
|
75
|
+
|
|
76
|
+
sage: C = ModulesWithBasis(QQ).TensorProducts()
|
|
77
|
+
sage: C
|
|
78
|
+
Category of tensor products of vector spaces with basis over Rational Field
|
|
79
|
+
sage: C.base_category()
|
|
80
|
+
Category of vector spaces with basis over Rational Field
|
|
81
|
+
sage: latex(C)
|
|
82
|
+
\mathbf{TensorProducts}(\mathbf{WithBasis}_{\Bold{Q}})
|
|
83
|
+
sage: TestSuite(C).run()
|
|
84
|
+
"""
|
|
85
|
+
_functor_category = "TensorProducts"
|
|
86
|
+
|
|
87
|
+
def TensorProducts(self):
|
|
88
|
+
"""
|
|
89
|
+
Return the category of tensor products of objects of ``self``.
|
|
90
|
+
|
|
91
|
+
By associativity of tensor products, this is ``self`` (a tensor
|
|
92
|
+
product of tensor products of `Cat`'s is a tensor product of `Cat`'s)
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: ModulesWithBasis(QQ).TensorProducts().TensorProducts()
|
|
97
|
+
Category of tensor products of vector spaces with basis over Rational Field
|
|
98
|
+
"""
|
|
99
|
+
return self
|
|
100
|
+
|
|
101
|
+
def base(self):
|
|
102
|
+
"""
|
|
103
|
+
The base of a tensor product is the base (usually a ring) of the underlying category.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: ModulesWithBasis(ZZ).TensorProducts().base()
|
|
108
|
+
Integer Ring
|
|
109
|
+
"""
|
|
110
|
+
return self.base_category().base()
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Topological Spaces
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2015 Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#******************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.misc.cachefunc import cached_method
|
|
13
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
14
|
+
from sage.categories.cartesian_product import CartesianProductsCategory
|
|
15
|
+
from sage.categories.covariant_functorial_construction import RegressiveCovariantConstructionCategory
|
|
16
|
+
from sage.categories.sets_cat import Sets
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TopologicalSpacesCategory(RegressiveCovariantConstructionCategory):
|
|
20
|
+
|
|
21
|
+
_functor_category = "Topological"
|
|
22
|
+
|
|
23
|
+
def _repr_object_names(self):
|
|
24
|
+
"""
|
|
25
|
+
EXAMPLES::
|
|
26
|
+
|
|
27
|
+
sage: Groups().Topological() # indirect doctest
|
|
28
|
+
Category of topological groups
|
|
29
|
+
"""
|
|
30
|
+
return "topological {}".format(self.base_category()._repr_object_names())
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class TopologicalSpaces(TopologicalSpacesCategory):
|
|
34
|
+
"""
|
|
35
|
+
The category of topological spaces.
|
|
36
|
+
|
|
37
|
+
EXAMPLES::
|
|
38
|
+
|
|
39
|
+
sage: Sets().Topological()
|
|
40
|
+
Category of topological spaces
|
|
41
|
+
sage: Sets().Topological().super_categories()
|
|
42
|
+
[Category of sets]
|
|
43
|
+
|
|
44
|
+
The category of topological spaces defines the topological structure,
|
|
45
|
+
which shall be preserved by morphisms::
|
|
46
|
+
|
|
47
|
+
sage: Sets().Topological().additional_structure()
|
|
48
|
+
Category of topological spaces
|
|
49
|
+
|
|
50
|
+
TESTS::
|
|
51
|
+
|
|
52
|
+
sage: TestSuite(Sets().Topological()).run()
|
|
53
|
+
"""
|
|
54
|
+
# We must override the general object because the names don't match
|
|
55
|
+
_base_category_class = (Sets,)
|
|
56
|
+
|
|
57
|
+
def _repr_object_names(self):
|
|
58
|
+
"""
|
|
59
|
+
EXAMPLES::
|
|
60
|
+
|
|
61
|
+
sage: Sets().Topological() # indirect doctest
|
|
62
|
+
Category of topological spaces
|
|
63
|
+
"""
|
|
64
|
+
return "topological spaces"
|
|
65
|
+
|
|
66
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
67
|
+
def extra_super_categories(self):
|
|
68
|
+
r"""
|
|
69
|
+
Implement the fact that a (finite) Cartesian product of topological spaces is
|
|
70
|
+
a topological space.
|
|
71
|
+
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: from sage.categories.topological_spaces import TopologicalSpaces
|
|
75
|
+
sage: C = TopologicalSpaces().CartesianProducts()
|
|
76
|
+
sage: C.extra_super_categories()
|
|
77
|
+
[Category of topological spaces]
|
|
78
|
+
sage: C.super_categories()
|
|
79
|
+
[Category of Cartesian products of sets, Category of topological spaces]
|
|
80
|
+
sage: C.axioms()
|
|
81
|
+
frozenset()
|
|
82
|
+
"""
|
|
83
|
+
return [TopologicalSpaces()]
|
|
84
|
+
|
|
85
|
+
class SubcategoryMethods:
|
|
86
|
+
@cached_method
|
|
87
|
+
def Connected(self):
|
|
88
|
+
"""
|
|
89
|
+
Return the full subcategory of the connected objects of ``self``.
|
|
90
|
+
|
|
91
|
+
EXAMPLES::
|
|
92
|
+
|
|
93
|
+
sage: Sets().Topological().Connected()
|
|
94
|
+
Category of connected topological spaces
|
|
95
|
+
|
|
96
|
+
TESTS::
|
|
97
|
+
|
|
98
|
+
sage: TestSuite(Sets().Topological().Connected()).run()
|
|
99
|
+
sage: Sets().Topological().Connected.__module__
|
|
100
|
+
'sage.categories.topological_spaces'
|
|
101
|
+
"""
|
|
102
|
+
return self._with_axiom('Connected')
|
|
103
|
+
|
|
104
|
+
@cached_method
|
|
105
|
+
def Compact(self):
|
|
106
|
+
"""
|
|
107
|
+
Return the subcategory of the compact objects of ``self``.
|
|
108
|
+
|
|
109
|
+
EXAMPLES::
|
|
110
|
+
|
|
111
|
+
sage: Sets().Topological().Compact()
|
|
112
|
+
Category of compact topological spaces
|
|
113
|
+
|
|
114
|
+
TESTS::
|
|
115
|
+
|
|
116
|
+
sage: TestSuite(Sets().Topological().Compact()).run()
|
|
117
|
+
sage: Sets().Topological().Compact.__module__
|
|
118
|
+
'sage.categories.topological_spaces'
|
|
119
|
+
"""
|
|
120
|
+
return self._with_axiom('Compact')
|
|
121
|
+
|
|
122
|
+
class Connected(CategoryWithAxiom):
|
|
123
|
+
"""
|
|
124
|
+
The category of connected topological spaces.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
128
|
+
def extra_super_categories(self):
|
|
129
|
+
r"""
|
|
130
|
+
Implement the fact that a (finite) Cartesian product of connected
|
|
131
|
+
topological spaces is connected.
|
|
132
|
+
|
|
133
|
+
EXAMPLES::
|
|
134
|
+
|
|
135
|
+
sage: from sage.categories.topological_spaces import TopologicalSpaces
|
|
136
|
+
sage: C = TopologicalSpaces().Connected().CartesianProducts()
|
|
137
|
+
sage: C.extra_super_categories()
|
|
138
|
+
[Category of connected topological spaces]
|
|
139
|
+
sage: C.super_categories()
|
|
140
|
+
[Category of Cartesian products of topological spaces,
|
|
141
|
+
Category of connected topological spaces]
|
|
142
|
+
sage: C.axioms()
|
|
143
|
+
frozenset({'Connected'})
|
|
144
|
+
"""
|
|
145
|
+
return [TopologicalSpaces().Connected()]
|
|
146
|
+
|
|
147
|
+
class Compact(CategoryWithAxiom):
|
|
148
|
+
"""
|
|
149
|
+
The category of compact topological spaces.
|
|
150
|
+
"""
|
|
151
|
+
|
|
152
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
153
|
+
def extra_super_categories(self):
|
|
154
|
+
r"""
|
|
155
|
+
Implement the fact that a (finite) Cartesian product of compact
|
|
156
|
+
topological spaces is compact.
|
|
157
|
+
|
|
158
|
+
EXAMPLES::
|
|
159
|
+
|
|
160
|
+
sage: from sage.categories.topological_spaces import TopologicalSpaces
|
|
161
|
+
sage: C = TopologicalSpaces().Compact().CartesianProducts()
|
|
162
|
+
sage: C.extra_super_categories()
|
|
163
|
+
[Category of compact topological spaces]
|
|
164
|
+
sage: C.super_categories()
|
|
165
|
+
[Category of Cartesian products of topological spaces,
|
|
166
|
+
Category of compact topological spaces]
|
|
167
|
+
sage: C.axioms()
|
|
168
|
+
frozenset({'Compact'})
|
|
169
|
+
"""
|
|
170
|
+
return [TopologicalSpaces().Compact()]
|