passagemath-objects 10.6.44__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.
- passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.6.44.dist-info/METADATA +115 -0
- passagemath_objects-10.6.44.dist-info/RECORD +280 -0
- passagemath_objects-10.6.44.dist-info/WHEEL +6 -0
- passagemath_objects-10.6.44.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 +2106 -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 +3290 -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 +275 -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,228 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
r"""
|
|
3
|
+
Facade Sets
|
|
4
|
+
|
|
5
|
+
For background, see :ref:`What is a facade set? <facade-sets>`.
|
|
6
|
+
"""
|
|
7
|
+
#*****************************************************************************
|
|
8
|
+
# Copyright (C) 2010-2011 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
9
|
+
#
|
|
10
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
11
|
+
# http://www.gnu.org/licenses/
|
|
12
|
+
#******************************************************************************
|
|
13
|
+
|
|
14
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class FacadeSets(CategoryWithAxiom):
|
|
18
|
+
def example(self, choice='subset'):
|
|
19
|
+
r"""
|
|
20
|
+
Return an example of facade set, as per
|
|
21
|
+
:meth:`Category.example()
|
|
22
|
+
<sage.categories.category.Category.example>`.
|
|
23
|
+
|
|
24
|
+
INPUT:
|
|
25
|
+
|
|
26
|
+
- ``choice`` -- 'union' or 'subset' (default: ``'subset'``)
|
|
27
|
+
|
|
28
|
+
EXAMPLES::
|
|
29
|
+
|
|
30
|
+
sage: Sets().Facade().example()
|
|
31
|
+
An example of facade set: the monoid of positive integers
|
|
32
|
+
sage: Sets().Facade().example(choice='union')
|
|
33
|
+
An example of a facade set: the integers completed by +-infinity
|
|
34
|
+
sage: Sets().Facade().example(choice='subset')
|
|
35
|
+
An example of facade set: the monoid of positive integers
|
|
36
|
+
"""
|
|
37
|
+
import sage.categories.examples.facade_sets as examples
|
|
38
|
+
if choice == "union":
|
|
39
|
+
return examples.IntegersCompletion()
|
|
40
|
+
elif choice == 'subset':
|
|
41
|
+
return examples.PositiveIntegerMonoid()
|
|
42
|
+
else:
|
|
43
|
+
raise TypeError("choice should be 'union' or 'subset'")
|
|
44
|
+
|
|
45
|
+
class ParentMethods:
|
|
46
|
+
|
|
47
|
+
def _element_constructor_(self, element):
|
|
48
|
+
"""
|
|
49
|
+
Coerce ``element`` into ``self``.
|
|
50
|
+
|
|
51
|
+
INPUT:
|
|
52
|
+
|
|
53
|
+
- ``element`` -- any object
|
|
54
|
+
|
|
55
|
+
This default implementation returns ``element`` if
|
|
56
|
+
``self`` is a facade for ``parent(element)``. Otherwise it
|
|
57
|
+
attempts in turn to coerce ``element`` into each parent
|
|
58
|
+
``self`` is a facade for.
|
|
59
|
+
|
|
60
|
+
This implementation is only valid for a facade parent
|
|
61
|
+
which models the full union of the parents it is a facade
|
|
62
|
+
for. Other facade parents should redefine
|
|
63
|
+
:meth:`element_constructor` appropriately.
|
|
64
|
+
|
|
65
|
+
EXAMPLES::
|
|
66
|
+
|
|
67
|
+
sage: S = Sets().Facade().example("union"); S
|
|
68
|
+
An example of a facade set: the integers completed by +-infinity
|
|
69
|
+
sage: S(1)
|
|
70
|
+
1
|
|
71
|
+
sage: S(1/2)
|
|
72
|
+
Traceback (most recent call last):
|
|
73
|
+
...
|
|
74
|
+
ValueError: Can't coerce `1/2` in any parent `An example of a facade set: the integers completed by +-infinity` is a facade for
|
|
75
|
+
sage: S(2/1)
|
|
76
|
+
2
|
|
77
|
+
sage: S(2/1).parent()
|
|
78
|
+
Integer Ring
|
|
79
|
+
sage: S(int(1))
|
|
80
|
+
1
|
|
81
|
+
sage: S(int(1)).parent()
|
|
82
|
+
Integer Ring
|
|
83
|
+
|
|
84
|
+
Facade parents that model strict subsets should redefine
|
|
85
|
+
:meth:`element_constructor`::
|
|
86
|
+
|
|
87
|
+
sage: S = Sets().Facade().example(); S
|
|
88
|
+
An example of facade set: the monoid of positive integers
|
|
89
|
+
sage: S(-1)
|
|
90
|
+
Traceback (most recent call last):
|
|
91
|
+
...
|
|
92
|
+
ValueError: %s should be positive
|
|
93
|
+
"""
|
|
94
|
+
if self.is_parent_of(element):
|
|
95
|
+
return element
|
|
96
|
+
else:
|
|
97
|
+
parents = self.facade_for()
|
|
98
|
+
if parents is True:
|
|
99
|
+
raise NotImplementedError
|
|
100
|
+
for parent in self.facade_for():
|
|
101
|
+
try:
|
|
102
|
+
return parent(element)
|
|
103
|
+
except Exception:
|
|
104
|
+
pass
|
|
105
|
+
raise ValueError("Can't coerce `%s` in any parent `%s` is a facade for" % (element, self))
|
|
106
|
+
|
|
107
|
+
def facade_for(self):
|
|
108
|
+
"""
|
|
109
|
+
Return the parents this set is a facade for.
|
|
110
|
+
|
|
111
|
+
This default implementation assumes that ``self`` has
|
|
112
|
+
an attribute ``_facade_for``, typically initialized by
|
|
113
|
+
:meth:`Parent.__init__`. If the attribute is not present, the method
|
|
114
|
+
raises a :exc:`NotImplementedError`.
|
|
115
|
+
|
|
116
|
+
EXAMPLES::
|
|
117
|
+
|
|
118
|
+
sage: S = Sets().Facade().example(); S
|
|
119
|
+
An example of facade set: the monoid of positive integers
|
|
120
|
+
sage: S.facade_for()
|
|
121
|
+
(Integer Ring,)
|
|
122
|
+
|
|
123
|
+
Check that :issue:`13801` is corrected::
|
|
124
|
+
|
|
125
|
+
sage: class A(Parent):
|
|
126
|
+
....: def __init__(self):
|
|
127
|
+
....: Parent.__init__(self, category=Sets(), facade=True)
|
|
128
|
+
sage: a = A()
|
|
129
|
+
sage: a.facade_for()
|
|
130
|
+
Traceback (most recent call last):
|
|
131
|
+
...
|
|
132
|
+
NotImplementedError: this parent did not specify which parents it is a facade for
|
|
133
|
+
"""
|
|
134
|
+
try:
|
|
135
|
+
return self._facade_for
|
|
136
|
+
except AttributeError:
|
|
137
|
+
raise NotImplementedError("this parent did not specify which parents it is a facade for")
|
|
138
|
+
|
|
139
|
+
def is_parent_of(self, element):
|
|
140
|
+
"""
|
|
141
|
+
Return whether ``self`` is the parent of ``element``.
|
|
142
|
+
|
|
143
|
+
INPUT:
|
|
144
|
+
|
|
145
|
+
- ``element`` -- any object
|
|
146
|
+
|
|
147
|
+
Since ``self`` is a facade domain, this actually tests
|
|
148
|
+
whether the parent of ``element`` is any of the parent
|
|
149
|
+
``self`` is a facade for.
|
|
150
|
+
|
|
151
|
+
EXAMPLES::
|
|
152
|
+
|
|
153
|
+
sage: S = Sets().Facade().example(); S
|
|
154
|
+
An example of facade set: the monoid of positive integers
|
|
155
|
+
sage: S.is_parent_of(1)
|
|
156
|
+
True
|
|
157
|
+
sage: S.is_parent_of(1/2)
|
|
158
|
+
False
|
|
159
|
+
|
|
160
|
+
This method differs from :meth:`__contains__` in two
|
|
161
|
+
ways. First, this does not take into account the fact
|
|
162
|
+
that ``self`` may be a strict subset of the parent(s)
|
|
163
|
+
it is a facade for::
|
|
164
|
+
|
|
165
|
+
sage: -1 in S, S.is_parent_of(-1)
|
|
166
|
+
(False, True)
|
|
167
|
+
|
|
168
|
+
Furthermore, there is no coercion attempted::
|
|
169
|
+
|
|
170
|
+
sage: int(1) in S, S.is_parent_of(int(1))
|
|
171
|
+
(True, False)
|
|
172
|
+
|
|
173
|
+
.. warning::
|
|
174
|
+
|
|
175
|
+
this implementation does not handle facade parents of facade
|
|
176
|
+
parents. Is this a feature we want generically?
|
|
177
|
+
"""
|
|
178
|
+
parents = self.facade_for()
|
|
179
|
+
if parents is True:
|
|
180
|
+
return True
|
|
181
|
+
from sage.structure.element import parent
|
|
182
|
+
return parent(element) in parents
|
|
183
|
+
|
|
184
|
+
def __contains__(self, element):
|
|
185
|
+
"""
|
|
186
|
+
Membership testing.
|
|
187
|
+
|
|
188
|
+
Returns whether ``element`` is in one of the parents
|
|
189
|
+
``self`` is a facade for.
|
|
190
|
+
|
|
191
|
+
.. warning::
|
|
192
|
+
|
|
193
|
+
this default implementation is currently
|
|
194
|
+
overridden by :meth:`Parent.__contains__`.
|
|
195
|
+
|
|
196
|
+
EXAMPLES::
|
|
197
|
+
|
|
198
|
+
sage: S = Sets().Facade().example("union"); S
|
|
199
|
+
An example of a facade set: the integers completed by +-infinity
|
|
200
|
+
sage: 1 in S, -5 in S, oo in S, -oo in S, int(1) in S, 2/1 in S
|
|
201
|
+
(True, True, True, True, True, True)
|
|
202
|
+
sage: 1/2 in S, "bla" in S
|
|
203
|
+
(False, False)
|
|
204
|
+
"""
|
|
205
|
+
return any(element in parent for parent in self.facade_for())
|
|
206
|
+
|
|
207
|
+
def _an_element_(self):
|
|
208
|
+
"""
|
|
209
|
+
Try to return an element of ``self``, as per
|
|
210
|
+
:meth:`Sets.ParentMethods.an_element`.
|
|
211
|
+
|
|
212
|
+
For each parent ``self`` is a facade for, this default
|
|
213
|
+
implementation tries the method ``an_element`` until it finds an
|
|
214
|
+
element in ``self``. If none is found, this raises a
|
|
215
|
+
:exc:`NotImplementedError`.
|
|
216
|
+
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: S = Sets().Facade().example(); S
|
|
220
|
+
An example of facade set: the monoid of positive integers
|
|
221
|
+
sage: S.an_element()
|
|
222
|
+
1
|
|
223
|
+
"""
|
|
224
|
+
for parent in self.facade_for():
|
|
225
|
+
x = parent.an_element()
|
|
226
|
+
if x in self:
|
|
227
|
+
return x
|
|
228
|
+
raise NotImplementedError
|
|
Binary file
|