passagemath-objects 10.6.41__cp314-cp314t-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-objects might be problematic. Click here for more details.
- passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.6.41.dist-info/METADATA +115 -0
- passagemath_objects-10.6.41.dist-info/RECORD +280 -0
- passagemath_objects-10.6.41.dist-info/WHEEL +6 -0
- passagemath_objects-10.6.41.dist-info/top_level.txt +3 -0
- sage/all__sagemath_objects.py +37 -0
- sage/arith/all__sagemath_objects.py +5 -0
- sage/arith/long.pxd +411 -0
- sage/arith/numerical_approx.cpython-314t-darwin.so +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cpython-314t-darwin.so +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cpython-314t-darwin.so +0 -0
- sage/categories/action.pxd +29 -0
- sage/categories/action.pyx +641 -0
- sage/categories/algebra_functor.py +745 -0
- sage/categories/all__sagemath_objects.py +33 -0
- sage/categories/basic.py +62 -0
- sage/categories/cartesian_product.py +295 -0
- sage/categories/category.py +3401 -0
- sage/categories/category_cy_helper.cpython-314t-darwin.so +0 -0
- sage/categories/category_cy_helper.pxd +8 -0
- sage/categories/category_cy_helper.pyx +322 -0
- sage/categories/category_singleton.cpython-314t-darwin.so +0 -0
- sage/categories/category_singleton.pxd +3 -0
- sage/categories/category_singleton.pyx +342 -0
- sage/categories/category_types.py +637 -0
- sage/categories/category_with_axiom.py +2876 -0
- sage/categories/covariant_functorial_construction.py +703 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cpython-314t-darwin.so +0 -0
- sage/categories/functor.pxd +7 -0
- sage/categories/functor.pyx +691 -0
- sage/categories/homset.py +1338 -0
- sage/categories/homsets.py +364 -0
- sage/categories/isomorphic_objects.py +73 -0
- sage/categories/map.cpython-314t-darwin.so +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2112 -0
- sage/categories/morphism.cpython-314t-darwin.so +0 -0
- sage/categories/morphism.pxd +14 -0
- sage/categories/morphism.pyx +895 -0
- sage/categories/objects.py +167 -0
- sage/categories/primer.py +1696 -0
- sage/categories/pushout.py +4834 -0
- sage/categories/quotients.py +64 -0
- sage/categories/realizations.py +200 -0
- sage/categories/sets_cat.py +3228 -0
- sage/categories/sets_with_partial_maps.py +52 -0
- sage/categories/subobjects.py +64 -0
- sage/categories/subquotients.py +21 -0
- sage/categories/with_realizations.py +311 -0
- sage/cpython/__init__.py +19 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cpython-314t-darwin.so +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cpython-314t-darwin.so +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cpython-314t-darwin.so +0 -0
- sage/cpython/cython_metaclass.h +117 -0
- sage/cpython/cython_metaclass.pxd +3 -0
- sage/cpython/cython_metaclass.pyx +130 -0
- sage/cpython/debug.cpython-314t-darwin.so +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cpython-314t-darwin.so +0 -0
- sage/cpython/dict_del_by_value.pxd +9 -0
- sage/cpython/dict_del_by_value.pyx +191 -0
- sage/cpython/dict_internal.h +245 -0
- sage/cpython/getattr.cpython-314t-darwin.so +0 -0
- sage/cpython/getattr.pxd +9 -0
- sage/cpython/getattr.pyx +439 -0
- sage/cpython/pycore_long.h +97 -0
- sage/cpython/pycore_long.pxd +10 -0
- sage/cpython/python_debug.h +44 -0
- sage/cpython/python_debug.pxd +47 -0
- sage/cpython/pyx_visit.h +13 -0
- sage/cpython/string.cpython-314t-darwin.so +0 -0
- sage/cpython/string.pxd +76 -0
- sage/cpython/string.pyx +34 -0
- sage/cpython/string_impl.h +60 -0
- sage/cpython/type.cpython-314t-darwin.so +0 -0
- sage/cpython/type.pxd +2 -0
- sage/cpython/type.pyx +40 -0
- sage/cpython/wrapperdescr.pxd +67 -0
- sage/ext/all__sagemath_objects.py +3 -0
- sage/ext/ccobject.h +64 -0
- sage/ext/cplusplus.pxd +17 -0
- sage/ext/mod_int.h +30 -0
- sage/ext/mod_int.pxd +24 -0
- sage/ext/stdsage.pxd +39 -0
- sage/groups/all__sagemath_objects.py +1 -0
- sage/groups/group.cpython-314t-darwin.so +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +322 -0
- sage/groups/old.cpython-314t-darwin.so +0 -0
- sage/groups/old.pxd +14 -0
- sage/groups/old.pyx +219 -0
- sage/libs/all__sagemath_objects.py +3 -0
- sage/libs/gmp/__init__.py +1 -0
- sage/libs/gmp/all.pxd +6 -0
- sage/libs/gmp/binop.pxd +23 -0
- sage/libs/gmp/misc.pxd +8 -0
- sage/libs/gmp/mpf.pxd +88 -0
- sage/libs/gmp/mpn.pxd +57 -0
- sage/libs/gmp/mpq.pxd +57 -0
- sage/libs/gmp/mpz.pxd +202 -0
- sage/libs/gmp/pylong.cpython-314t-darwin.so +0 -0
- sage/libs/gmp/pylong.pxd +12 -0
- sage/libs/gmp/pylong.pyx +150 -0
- sage/libs/gmp/random.pxd +25 -0
- sage/libs/gmp/randomize.pxd +59 -0
- sage/libs/gmp/types.pxd +53 -0
- sage/libs/gmpxx.pxd +19 -0
- sage/misc/abstract_method.py +276 -0
- sage/misc/all__sagemath_objects.py +43 -0
- sage/misc/bindable_class.py +253 -0
- sage/misc/c3_controlled.cpython-314t-darwin.so +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cpython-314t-darwin.so +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3781 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cpython-314t-darwin.so +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cpython-314t-darwin.so +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +747 -0
- sage/misc/fast_methods.cpython-314t-darwin.so +0 -0
- sage/misc/fast_methods.pxd +20 -0
- sage/misc/fast_methods.pyx +351 -0
- sage/misc/flatten.py +90 -0
- sage/misc/fpickle.cpython-314t-darwin.so +0 -0
- sage/misc/fpickle.pyx +177 -0
- sage/misc/function_mangling.cpython-314t-darwin.so +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cpython-314t-darwin.so +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cpython-314t-darwin.so +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +135 -0
- sage/misc/lazy_import.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_import.pyx +1299 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_string.pxd +7 -0
- sage/misc/lazy_string.pyx +546 -0
- sage/misc/misc.py +1066 -0
- sage/misc/misc_c.cpython-314t-darwin.so +0 -0
- sage/misc/misc_c.pxd +3 -0
- sage/misc/misc_c.pyx +766 -0
- sage/misc/namespace_package.py +37 -0
- sage/misc/nested_class.cpython-314t-darwin.so +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cpython-314t-darwin.so +0 -0
- sage/misc/persist.pyx +1251 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cpython-314t-darwin.so +0 -0
- sage/misc/randstate.pxd +30 -0
- sage/misc/randstate.pyx +1059 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cpython-314t-darwin.so +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cpython-314t-darwin.so +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +276 -0
- sage/misc/sage_timeit_class.cpython-314t-darwin.so +0 -0
- sage/misc/sage_timeit_class.pyx +120 -0
- sage/misc/sage_unittest.py +637 -0
- sage/misc/sageinspect.py +2768 -0
- sage/misc/session.cpython-314t-darwin.so +0 -0
- sage/misc/session.pyx +392 -0
- sage/misc/superseded.py +557 -0
- sage/misc/test_nested_class.py +228 -0
- sage/misc/timing.py +264 -0
- sage/misc/unknown.py +222 -0
- sage/misc/verbose.py +253 -0
- sage/misc/weak_dict.cpython-314t-darwin.so +0 -0
- sage/misc/weak_dict.pxd +15 -0
- sage/misc/weak_dict.pyx +1231 -0
- sage/modules/all__sagemath_objects.py +1 -0
- sage/modules/module.cpython-314t-darwin.so +0 -0
- sage/modules/module.pxd +5 -0
- sage/modules/module.pyx +329 -0
- sage/rings/all__sagemath_objects.py +3 -0
- sage/rings/integer_fake.h +22 -0
- sage/rings/integer_fake.pxd +55 -0
- sage/sets/all__sagemath_objects.py +3 -0
- sage/sets/pythonclass.cpython-314t-darwin.so +0 -0
- sage/sets/pythonclass.pxd +9 -0
- sage/sets/pythonclass.pyx +247 -0
- sage/structure/__init__.py +4 -0
- sage/structure/all.py +30 -0
- sage/structure/category_object.cpython-314t-darwin.so +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1087 -0
- sage/structure/coerce.cpython-314t-darwin.so +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2107 -0
- sage/structure/coerce_actions.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_dict.pxd +51 -0
- sage/structure/coerce_dict.pyx +1557 -0
- sage/structure/coerce_exceptions.py +23 -0
- sage/structure/coerce_maps.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_maps.pxd +28 -0
- sage/structure/coerce_maps.pyx +718 -0
- sage/structure/debug_options.cpython-314t-darwin.so +0 -0
- sage/structure/debug_options.pxd +6 -0
- sage/structure/debug_options.pyx +54 -0
- sage/structure/dynamic_class.py +541 -0
- sage/structure/element.cpython-314t-darwin.so +0 -0
- sage/structure/element.pxd +272 -0
- sage/structure/element.pyx +4772 -0
- sage/structure/element_wrapper.cpython-314t-darwin.so +0 -0
- sage/structure/element_wrapper.pxd +12 -0
- sage/structure/element_wrapper.pyx +582 -0
- sage/structure/factorization.py +1422 -0
- sage/structure/factorization_integer.py +105 -0
- sage/structure/factory.cpython-314t-darwin.so +0 -0
- sage/structure/factory.pyx +786 -0
- sage/structure/formal_sum.py +489 -0
- sage/structure/gens_py.py +73 -0
- sage/structure/global_options.py +1743 -0
- sage/structure/indexed_generators.py +863 -0
- sage/structure/list_clone.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_demo.pyx +248 -0
- sage/structure/list_clone_timings.py +179 -0
- sage/structure/list_clone_timings_cy.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cpython-314t-darwin.so +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +348 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cpython-314t-darwin.so +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3093 -0
- sage/structure/parent_base.cpython-314t-darwin.so +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +44 -0
- sage/structure/parent_gens.cpython-314t-darwin.so +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +377 -0
- sage/structure/parent_old.cpython-314t-darwin.so +0 -0
- sage/structure/parent_old.pxd +25 -0
- sage/structure/parent_old.pyx +294 -0
- sage/structure/proof/__init__.py +1 -0
- sage/structure/proof/all.py +243 -0
- sage/structure/proof/proof.py +300 -0
- sage/structure/richcmp.cpython-314t-darwin.so +0 -0
- sage/structure/richcmp.pxd +213 -0
- sage/structure/richcmp.pyx +495 -0
- sage/structure/sage_object.cpython-314t-darwin.so +0 -0
- sage/structure/sage_object.pxd +3 -0
- sage/structure/sage_object.pyx +988 -0
- sage/structure/sage_object_test.py +19 -0
- sage/structure/sequence.py +937 -0
- sage/structure/set_factories.py +1178 -0
- sage/structure/set_factories_example.py +527 -0
- sage/structure/support_view.py +179 -0
- sage/structure/test_factory.py +56 -0
- sage/structure/unique_representation.py +1359 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
r"""
|
|
3
|
+
Homset categories
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2014 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# *****************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.misc.cachefunc import cached_method
|
|
13
|
+
from sage.categories.category import Category, JoinCategory, CategoryWithParameters
|
|
14
|
+
from sage.categories.category_singleton import Category_singleton
|
|
15
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
16
|
+
from sage.categories.covariant_functorial_construction import FunctorialConstructionCategory
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class HomsetsCategory(FunctorialConstructionCategory, CategoryWithParameters):
|
|
20
|
+
|
|
21
|
+
_functor_category = "Homsets"
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def default_super_categories(cls, category):
|
|
25
|
+
"""
|
|
26
|
+
Return the default super categories of ``category.Homsets()``.
|
|
27
|
+
|
|
28
|
+
INPUT:
|
|
29
|
+
|
|
30
|
+
- ``cls`` -- the category class for the functor `F`
|
|
31
|
+
- ``category`` -- a category `Cat`
|
|
32
|
+
|
|
33
|
+
OUTPUT: a category
|
|
34
|
+
|
|
35
|
+
As for the other functorial constructions, if ``category``
|
|
36
|
+
implements a nested ``Homsets`` class, this method is used in
|
|
37
|
+
combination with ``category.Homsets().extra_super_categories()``
|
|
38
|
+
to compute the super categories of ``category.Homsets()``.
|
|
39
|
+
|
|
40
|
+
EXAMPLES:
|
|
41
|
+
|
|
42
|
+
If ``category`` has one or more full super categories, then
|
|
43
|
+
the join of their respective homsets category is returned. In
|
|
44
|
+
this example, this join consists of a single category::
|
|
45
|
+
|
|
46
|
+
sage: from sage.categories.homsets import HomsetsCategory
|
|
47
|
+
sage: from sage.categories.additive_groups import AdditiveGroups
|
|
48
|
+
|
|
49
|
+
sage: C = AdditiveGroups()
|
|
50
|
+
sage: C.full_super_categories()
|
|
51
|
+
[Category of additive inverse additive unital additive magmas,
|
|
52
|
+
Category of additive monoids]
|
|
53
|
+
sage: H = HomsetsCategory.default_super_categories(C); H
|
|
54
|
+
Category of homsets of additive monoids
|
|
55
|
+
sage: type(H)
|
|
56
|
+
<class 'sage.categories.additive_monoids.AdditiveMonoids.Homsets_with_category'>
|
|
57
|
+
|
|
58
|
+
and, given that nothing specific is currently implemented for
|
|
59
|
+
homsets of additive groups, ``H`` is directly the category
|
|
60
|
+
thereof::
|
|
61
|
+
|
|
62
|
+
sage: C.Homsets()
|
|
63
|
+
Category of homsets of additive monoids
|
|
64
|
+
|
|
65
|
+
Similarly for rings: a ring homset is just a homset of unital
|
|
66
|
+
magmas and additive magmas::
|
|
67
|
+
|
|
68
|
+
sage: Rings().Homsets()
|
|
69
|
+
Category of homsets of unital magmas and additive unital additive magmas
|
|
70
|
+
|
|
71
|
+
Otherwise, if ``category`` implements a nested class
|
|
72
|
+
``Homsets``, this method returns the category of all homsets::
|
|
73
|
+
|
|
74
|
+
sage: AdditiveMagmas.Homsets
|
|
75
|
+
<class 'sage.categories.additive_magmas.AdditiveMagmas.Homsets'>
|
|
76
|
+
sage: HomsetsCategory.default_super_categories(AdditiveMagmas())
|
|
77
|
+
Category of homsets
|
|
78
|
+
|
|
79
|
+
which gives one of the super categories of
|
|
80
|
+
``category.Homsets()``::
|
|
81
|
+
|
|
82
|
+
sage: AdditiveMagmas().Homsets().super_categories()
|
|
83
|
+
[Category of additive magmas, Category of homsets]
|
|
84
|
+
sage: AdditiveMagmas().AdditiveUnital().Homsets().super_categories()
|
|
85
|
+
[Category of additive unital additive magmas, Category of homsets]
|
|
86
|
+
|
|
87
|
+
the other coming from ``category.Homsets().extra_super_categories()``::
|
|
88
|
+
|
|
89
|
+
sage: AdditiveMagmas().Homsets().extra_super_categories()
|
|
90
|
+
[Category of additive magmas]
|
|
91
|
+
|
|
92
|
+
Finally, as a last resort, this method returns a stub category
|
|
93
|
+
modelling the homsets of this category::
|
|
94
|
+
|
|
95
|
+
sage: hasattr(Posets, "Homsets")
|
|
96
|
+
False
|
|
97
|
+
sage: H = HomsetsCategory.default_super_categories(Posets()); H
|
|
98
|
+
Category of homsets of posets
|
|
99
|
+
sage: type(H)
|
|
100
|
+
<class 'sage.categories.homsets.HomsetsOf_with_category'>
|
|
101
|
+
sage: Posets().Homsets()
|
|
102
|
+
Category of homsets of posets
|
|
103
|
+
|
|
104
|
+
TESTS::
|
|
105
|
+
|
|
106
|
+
sage: Objects().Homsets().super_categories()
|
|
107
|
+
[Category of homsets]
|
|
108
|
+
sage: Sets().Homsets().super_categories()
|
|
109
|
+
[Category of homsets]
|
|
110
|
+
sage: (Magmas() & Posets()).Homsets().super_categories()
|
|
111
|
+
[Category of homsets]
|
|
112
|
+
"""
|
|
113
|
+
if category.full_super_categories():
|
|
114
|
+
return Category.join([getattr(cat, cls._functor_category)()
|
|
115
|
+
for cat in category.full_super_categories()])
|
|
116
|
+
else:
|
|
117
|
+
functor_category = getattr(category.__class__, cls._functor_category)
|
|
118
|
+
if isinstance(functor_category, type) and issubclass(functor_category, Category):
|
|
119
|
+
return Homsets()
|
|
120
|
+
else:
|
|
121
|
+
return HomsetsOf(Category.join(category.structure()))
|
|
122
|
+
|
|
123
|
+
def _test_homsets_category(self, **options):
|
|
124
|
+
r"""
|
|
125
|
+
Run generic tests on this homsets category.
|
|
126
|
+
|
|
127
|
+
.. SEEALSO:: :class:`TestSuite`.
|
|
128
|
+
|
|
129
|
+
EXAMPLES::
|
|
130
|
+
|
|
131
|
+
sage: Sets().Homsets()._test_homsets_category()
|
|
132
|
+
"""
|
|
133
|
+
# TODO: remove if unneeded
|
|
134
|
+
#from sage.categories.objects import Objects
|
|
135
|
+
#from sage.categories.sets_cat import Sets
|
|
136
|
+
tester = self._tester(**options)
|
|
137
|
+
tester.assertTrue(self.is_subcategory(Category.join(self.base_category().structure()).Homsets()))
|
|
138
|
+
tester.assertTrue(self.is_subcategory(Homsets()))
|
|
139
|
+
|
|
140
|
+
@cached_method
|
|
141
|
+
def base(self):
|
|
142
|
+
"""
|
|
143
|
+
If this homsets category is subcategory of a category with a base, return that base.
|
|
144
|
+
|
|
145
|
+
.. TODO:: Is this really useful?
|
|
146
|
+
|
|
147
|
+
EXAMPLES::
|
|
148
|
+
|
|
149
|
+
sage: ModulesWithBasis(ZZ).Homsets().base()
|
|
150
|
+
Integer Ring
|
|
151
|
+
"""
|
|
152
|
+
from sage.categories.category_types import Category_over_base
|
|
153
|
+
for C in self._all_super_categories_proper:
|
|
154
|
+
if isinstance(C,Category_over_base):
|
|
155
|
+
return C.base()
|
|
156
|
+
raise AttributeError("This hom category has no base")
|
|
157
|
+
|
|
158
|
+
def _make_named_class_key(self, name):
|
|
159
|
+
r"""
|
|
160
|
+
Return what the element/parent/... classes depend on.
|
|
161
|
+
|
|
162
|
+
.. SEEALSO::
|
|
163
|
+
|
|
164
|
+
- :meth:`CategoryWithParameters`
|
|
165
|
+
- :meth:`CategoryWithParameters._make_named_class_key`
|
|
166
|
+
|
|
167
|
+
TESTS::
|
|
168
|
+
|
|
169
|
+
sage: ModulesWithBasis(ZZ).Homsets()._make_named_class_key('parent_class')
|
|
170
|
+
<class 'sage.categories.modules_with_basis.ModulesWithBasis.parent_class'>
|
|
171
|
+
"""
|
|
172
|
+
return getattr(self.base_category(), name)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class HomsetsOf(HomsetsCategory):
|
|
176
|
+
"""
|
|
177
|
+
Default class for homsets of a category.
|
|
178
|
+
|
|
179
|
+
This is used when a category `C` defines some additional structure
|
|
180
|
+
but not a homset category of its own. Indeed, unlike for covariant
|
|
181
|
+
functorial constructions, we cannot represent the homset category
|
|
182
|
+
of `C` by just the join of the homset categories of its super
|
|
183
|
+
categories.
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: C = (Magmas() & Posets()).Homsets(); C
|
|
188
|
+
Category of homsets of magmas and posets
|
|
189
|
+
sage: type(C)
|
|
190
|
+
<class 'sage.categories.homsets.HomsetsOf_with_category'>
|
|
191
|
+
|
|
192
|
+
TESTS::
|
|
193
|
+
|
|
194
|
+
sage: TestSuite(C).run()
|
|
195
|
+
sage: C = Rings().Homsets()
|
|
196
|
+
sage: TestSuite(C).run(skip=['_test_category_graph'])
|
|
197
|
+
sage: TestSuite(C).run()
|
|
198
|
+
"""
|
|
199
|
+
_base_category_class = (Category,)
|
|
200
|
+
|
|
201
|
+
def _repr_object_names(self):
|
|
202
|
+
"""
|
|
203
|
+
EXAMPLES::
|
|
204
|
+
|
|
205
|
+
sage: Semigroups().Homsets()
|
|
206
|
+
Category of homsets of magmas
|
|
207
|
+
sage: (Magmas() & AdditiveMagmas() & Posets()).Homsets()
|
|
208
|
+
Category of homsets of magmas and additive magmas and posets
|
|
209
|
+
sage: Rings().Homsets()
|
|
210
|
+
Category of homsets of unital magmas and additive unital additive magmas
|
|
211
|
+
"""
|
|
212
|
+
base_category = self.base_category()
|
|
213
|
+
try:
|
|
214
|
+
object_names = base_category._repr_object_names()
|
|
215
|
+
except ValueError:
|
|
216
|
+
assert isinstance(base_category, JoinCategory)
|
|
217
|
+
object_names = ' and '.join(cat._repr_object_names() for cat in base_category.super_categories())
|
|
218
|
+
return "homsets of %s" % (object_names)
|
|
219
|
+
|
|
220
|
+
def super_categories(self):
|
|
221
|
+
r"""
|
|
222
|
+
Return the super categories of ``self``.
|
|
223
|
+
|
|
224
|
+
A stub homset category admits a single super category, namely
|
|
225
|
+
the category of all homsets.
|
|
226
|
+
|
|
227
|
+
EXAMPLES::
|
|
228
|
+
|
|
229
|
+
sage: C = (Magmas() & Posets()).Homsets(); C
|
|
230
|
+
Category of homsets of magmas and posets
|
|
231
|
+
sage: type(C)
|
|
232
|
+
<class 'sage.categories.homsets.HomsetsOf_with_category'>
|
|
233
|
+
sage: C.super_categories()
|
|
234
|
+
[Category of homsets]
|
|
235
|
+
"""
|
|
236
|
+
return [Homsets()]
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class Homsets(Category_singleton):
|
|
240
|
+
"""
|
|
241
|
+
The category of all homsets.
|
|
242
|
+
|
|
243
|
+
EXAMPLES::
|
|
244
|
+
|
|
245
|
+
sage: from sage.categories.homsets import Homsets
|
|
246
|
+
sage: Homsets()
|
|
247
|
+
Category of homsets
|
|
248
|
+
|
|
249
|
+
This is a subcategory of ``Sets()``::
|
|
250
|
+
|
|
251
|
+
sage: Homsets().super_categories()
|
|
252
|
+
[Category of sets]
|
|
253
|
+
|
|
254
|
+
By this, we assume that all homsets implemented in Sage are sets,
|
|
255
|
+
or equivalently that we only implement locally small categories.
|
|
256
|
+
See :wikipedia:`Category_(mathematics)`.
|
|
257
|
+
|
|
258
|
+
:issue:`17364`: every homset category shall be a subcategory of the
|
|
259
|
+
category of all homsets::
|
|
260
|
+
|
|
261
|
+
sage: Schemes().Homsets().is_subcategory(Homsets())
|
|
262
|
+
True
|
|
263
|
+
sage: AdditiveMagmas().Homsets().is_subcategory(Homsets())
|
|
264
|
+
True
|
|
265
|
+
sage: AdditiveMagmas().AdditiveUnital().Homsets().is_subcategory(Homsets())
|
|
266
|
+
True
|
|
267
|
+
|
|
268
|
+
This is tested in :meth:`HomsetsCategory._test_homsets_category`.
|
|
269
|
+
"""
|
|
270
|
+
def super_categories(self):
|
|
271
|
+
"""
|
|
272
|
+
Return the super categories of ``self``.
|
|
273
|
+
|
|
274
|
+
EXAMPLES::
|
|
275
|
+
|
|
276
|
+
sage: from sage.categories.homsets import Homsets
|
|
277
|
+
sage: Homsets()
|
|
278
|
+
Category of homsets
|
|
279
|
+
"""
|
|
280
|
+
from .sets_cat import Sets
|
|
281
|
+
return [Sets()]
|
|
282
|
+
|
|
283
|
+
class SubcategoryMethods:
|
|
284
|
+
|
|
285
|
+
def Endset(self):
|
|
286
|
+
"""
|
|
287
|
+
Return the subcategory of the homsets of ``self`` that are endomorphism sets.
|
|
288
|
+
|
|
289
|
+
EXAMPLES::
|
|
290
|
+
|
|
291
|
+
sage: Sets().Homsets().Endset()
|
|
292
|
+
Category of endsets of sets
|
|
293
|
+
|
|
294
|
+
sage: Posets().Homsets().Endset()
|
|
295
|
+
Category of endsets of posets
|
|
296
|
+
"""
|
|
297
|
+
return self._with_axiom("Endset")
|
|
298
|
+
|
|
299
|
+
class Endset(CategoryWithAxiom):
|
|
300
|
+
"""
|
|
301
|
+
The category of all endomorphism sets.
|
|
302
|
+
|
|
303
|
+
This category serves too purposes: making sure that the
|
|
304
|
+
``Endset`` axiom is implemented in the category where it's
|
|
305
|
+
defined, namely ``Homsets``, and specifying that ``Endsets``
|
|
306
|
+
are monoids.
|
|
307
|
+
|
|
308
|
+
EXAMPLES::
|
|
309
|
+
|
|
310
|
+
sage: from sage.categories.homsets import Homsets
|
|
311
|
+
sage: Homsets().Endset()
|
|
312
|
+
Category of endsets
|
|
313
|
+
"""
|
|
314
|
+
def extra_super_categories(self):
|
|
315
|
+
"""
|
|
316
|
+
Implement the fact that endsets are monoids.
|
|
317
|
+
|
|
318
|
+
.. SEEALSO:: :meth:`CategoryWithAxiom.extra_super_categories`
|
|
319
|
+
|
|
320
|
+
EXAMPLES::
|
|
321
|
+
|
|
322
|
+
sage: from sage.categories.homsets import Homsets
|
|
323
|
+
sage: Homsets().Endset().extra_super_categories()
|
|
324
|
+
[Category of monoids]
|
|
325
|
+
"""
|
|
326
|
+
from .monoids import Monoids
|
|
327
|
+
return [Monoids()]
|
|
328
|
+
|
|
329
|
+
class ParentMethods:
|
|
330
|
+
def is_endomorphism_set(self):
|
|
331
|
+
"""
|
|
332
|
+
Return ``True`` as ``self`` is in the category
|
|
333
|
+
of ``Endsets``.
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: P.<t> = ZZ[]
|
|
338
|
+
sage: E = End(P)
|
|
339
|
+
sage: E.is_endomorphism_set()
|
|
340
|
+
True
|
|
341
|
+
"""
|
|
342
|
+
return True
|
|
343
|
+
|
|
344
|
+
class ParentMethods:
|
|
345
|
+
def is_endomorphism_set(self):
|
|
346
|
+
"""
|
|
347
|
+
Return ``True`` if the domain and codomain of ``self`` are the same
|
|
348
|
+
object.
|
|
349
|
+
|
|
350
|
+
EXAMPLES::
|
|
351
|
+
|
|
352
|
+
sage: P.<t> = ZZ[]
|
|
353
|
+
sage: f = P.hom([1/2*t])
|
|
354
|
+
sage: f.parent().is_endomorphism_set()
|
|
355
|
+
False
|
|
356
|
+
sage: g = P.hom([2*t])
|
|
357
|
+
sage: g.parent().is_endomorphism_set()
|
|
358
|
+
True
|
|
359
|
+
"""
|
|
360
|
+
sD = self.domain()
|
|
361
|
+
sC = self.codomain()
|
|
362
|
+
if sC is None or sD is None:
|
|
363
|
+
raise RuntimeError("Domain or codomain of this homset have been deallocated")
|
|
364
|
+
return sD is sC
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
"""
|
|
3
|
+
Isomorphic Objects Functorial Construction
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Nicolas M. Thiery (2010): initial revision
|
|
8
|
+
"""
|
|
9
|
+
#*****************************************************************************
|
|
10
|
+
# Copyright (C) 2009 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
# http://www.gnu.org/licenses/
|
|
14
|
+
#*****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.categories.category import Category
|
|
17
|
+
from sage.categories.covariant_functorial_construction import RegressiveCovariantConstructionCategory
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class IsomorphicObjectsCategory(RegressiveCovariantConstructionCategory):
|
|
21
|
+
|
|
22
|
+
_functor_category = "IsomorphicObjects"
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def default_super_categories(cls, category):
|
|
26
|
+
"""
|
|
27
|
+
Return the default super categories of ``category.IsomorphicObjects()``.
|
|
28
|
+
|
|
29
|
+
Mathematical meaning: if `A` is the image of `B` by an
|
|
30
|
+
isomorphism in the category `C`, then `A` is both a subobject
|
|
31
|
+
of `B` and a quotient of `B` in the category `C`.
|
|
32
|
+
|
|
33
|
+
INPUT:
|
|
34
|
+
|
|
35
|
+
- ``cls`` -- the class ``IsomorphicObjectsCategory``
|
|
36
|
+
- ``category`` -- a category `Cat`
|
|
37
|
+
|
|
38
|
+
OUTPUT: a (join) category
|
|
39
|
+
|
|
40
|
+
In practice, this returns ``category.Subobjects()`` and
|
|
41
|
+
``category.Quotients()``, joined together with the result of the method
|
|
42
|
+
:meth:`RegressiveCovariantConstructionCategory.default_super_categories() <sage.categories.covariant_functorial_construction.RegressiveCovariantConstructionCategory.default_super_categories>`
|
|
43
|
+
(that is the join of ``category`` and
|
|
44
|
+
``cat.IsomorphicObjects()`` for each ``cat`` in the super
|
|
45
|
+
categories of ``category``).
|
|
46
|
+
|
|
47
|
+
EXAMPLES:
|
|
48
|
+
|
|
49
|
+
Consider ``category=Groups()``, which has ``cat=Monoids()`` as
|
|
50
|
+
super category. Then, the image of a group `G'` by a group
|
|
51
|
+
isomorphism is simultaneously a subgroup of `G`, a subquotient
|
|
52
|
+
of `G`, a group by itself, and the image of `G` by a monoid
|
|
53
|
+
isomorphism::
|
|
54
|
+
|
|
55
|
+
sage: Groups().IsomorphicObjects().super_categories()
|
|
56
|
+
[Category of groups,
|
|
57
|
+
Category of subquotients of monoids,
|
|
58
|
+
Category of quotients of semigroups,
|
|
59
|
+
Category of isomorphic objects of sets]
|
|
60
|
+
|
|
61
|
+
Mind the last item above: there is indeed currently nothing
|
|
62
|
+
implemented about isomorphic objects of monoids.
|
|
63
|
+
|
|
64
|
+
This resulted from the following call::
|
|
65
|
+
|
|
66
|
+
sage: sage.categories.isomorphic_objects.IsomorphicObjectsCategory.default_super_categories(Groups())
|
|
67
|
+
Join of Category of groups and
|
|
68
|
+
Category of subquotients of monoids and
|
|
69
|
+
Category of quotients of semigroups and
|
|
70
|
+
Category of isomorphic objects of sets
|
|
71
|
+
"""
|
|
72
|
+
return Category.join([category.Subobjects(), category.Quotients(),
|
|
73
|
+
super().default_super_categories(category)])
|
|
Binary file
|
sage/categories/map.pxd
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
from sage.structure.parent cimport Parent
|
|
3
|
+
from sage.structure.element cimport Element
|
|
4
|
+
|
|
5
|
+
cdef class Map(Element):
|
|
6
|
+
cdef object __weakref__
|
|
7
|
+
|
|
8
|
+
cdef public int _coerce_cost
|
|
9
|
+
# a rough measure of the cost of using this morphism in the coercion system.
|
|
10
|
+
# 10 by default, 100 if a DefaultCoercionMorphism, 10000 if inexact.
|
|
11
|
+
|
|
12
|
+
cdef _update_slots(self, dict)
|
|
13
|
+
cdef dict _extra_slots(self)
|
|
14
|
+
|
|
15
|
+
# these methods require x is an element of domain, and returns an element with parent codomain
|
|
16
|
+
cpdef Element _call_(self, x)
|
|
17
|
+
cpdef Element _call_with_args(self, x, args=*, kwds=*)
|
|
18
|
+
|
|
19
|
+
cdef public domain # will be either a weakref or a constant map
|
|
20
|
+
cdef public codomain # will be a constant map
|
|
21
|
+
cdef Parent _codomain # for accessing the codomain directly
|
|
22
|
+
cdef object _category_for # category in which this is a morphism
|
|
23
|
+
|
|
24
|
+
cdef public _repr_type_str
|
|
25
|
+
cdef public bint _is_coercion
|
|
26
|
+
|
|
27
|
+
cpdef _pow_int(self, n)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
cdef class Section(Map):
|
|
31
|
+
cdef Map _inverse
|
|
32
|
+
|
|
33
|
+
cdef class FormalCompositeMap(Map):
|
|
34
|
+
cdef __list
|