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,294 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
r"""
|
|
3
|
+
Base class for old-style parent objects
|
|
4
|
+
|
|
5
|
+
CLASS HIERARCHY:
|
|
6
|
+
|
|
7
|
+
SageObject
|
|
8
|
+
Parent
|
|
9
|
+
ParentWithBase
|
|
10
|
+
ParentWithGens
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
TESTS:
|
|
14
|
+
|
|
15
|
+
This came up in some subtle bug once::
|
|
16
|
+
|
|
17
|
+
sage: gp(2) + gap(3) # needs sage.libs.gap sage.libs.pari
|
|
18
|
+
5
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
23
|
+
#
|
|
24
|
+
# This program is free software: you can redistribute it and/or modify
|
|
25
|
+
# it under the terms of the GNU General Public License as published by
|
|
26
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
27
|
+
# (at your option) any later version.
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
from sage.misc.superseded import deprecation
|
|
31
|
+
from sage.misc.cachefunc import cached_method
|
|
32
|
+
from sage.structure.coerce cimport py_scalar_parent
|
|
33
|
+
from sage.ext.stdsage cimport HAS_DICTIONARY
|
|
34
|
+
from sage.sets.pythonclass cimport Set_PythonType, Set_PythonType_class
|
|
35
|
+
|
|
36
|
+
from cpython.object cimport *
|
|
37
|
+
from cpython.bool cimport *
|
|
38
|
+
|
|
39
|
+
cdef inline check_old_coerce(Parent p):
|
|
40
|
+
if p._element_constructor is not None:
|
|
41
|
+
raise RuntimeError("%s still using old coercion framework" % p)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
cdef class Parent(parent.Parent):
|
|
45
|
+
"""
|
|
46
|
+
Parents are the Sage / mathematical analogues of container objects
|
|
47
|
+
in computer science.
|
|
48
|
+
|
|
49
|
+
TESTS::
|
|
50
|
+
|
|
51
|
+
sage: # needs sage.modules
|
|
52
|
+
sage: V = VectorSpace(GF(2,'a'), 2)
|
|
53
|
+
sage: V.list()
|
|
54
|
+
[(0, 0), (1, 0), (0, 1), (1, 1)]
|
|
55
|
+
sage: MatrixSpace(GF(3), 1, 1).list()
|
|
56
|
+
[[0], [1], [2]]
|
|
57
|
+
sage: DirichletGroup(3).list() # needs sage.libs.pari sage.modular
|
|
58
|
+
[Dirichlet character modulo 3 of conductor 1 mapping 2 |--> 1,
|
|
59
|
+
Dirichlet character modulo 3 of conductor 3 mapping 2 |--> -1]
|
|
60
|
+
|
|
61
|
+
sage: # needs sage.rings.finite_rings
|
|
62
|
+
sage: K = GF(7^6,'a')
|
|
63
|
+
sage: K.list()[:10] # long time
|
|
64
|
+
[0, 1, 2, 3, 4, 5, 6, a, a + 1, a + 2]
|
|
65
|
+
sage: K.<a> = GF(4)
|
|
66
|
+
sage: K.list()
|
|
67
|
+
[0, a, a + 1, 1]
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __cinit__(self):
|
|
71
|
+
self._has_coerce_map_from = MonoDict()
|
|
72
|
+
|
|
73
|
+
def __init__(self, *, category=None):
|
|
74
|
+
self.init_coerce(False)
|
|
75
|
+
self._coerce_from_hash = MonoDict()
|
|
76
|
+
self._set_element_constructor()
|
|
77
|
+
if category is not None:
|
|
78
|
+
self._init_category_(category)
|
|
79
|
+
|
|
80
|
+
##########################################################
|
|
81
|
+
# New Coercion support functionality
|
|
82
|
+
##########################################################
|
|
83
|
+
|
|
84
|
+
cdef __coerce_map_from_c(self, S):
|
|
85
|
+
"""
|
|
86
|
+
EXAMPLES:
|
|
87
|
+
|
|
88
|
+
Check to make sure that we handle coerce maps from Python
|
|
89
|
+
native types correctly::
|
|
90
|
+
|
|
91
|
+
sage: QQ['q,t'].coerce_map_from(int)
|
|
92
|
+
Composite map:
|
|
93
|
+
From: Set of Python objects of class 'int'
|
|
94
|
+
To: Multivariate Polynomial Ring in q, t over Rational Field
|
|
95
|
+
Defn: Native morphism:
|
|
96
|
+
From: Set of Python objects of class 'int'
|
|
97
|
+
To: Rational Field
|
|
98
|
+
then
|
|
99
|
+
Polynomial base injection morphism:
|
|
100
|
+
From: Rational Field
|
|
101
|
+
To: Multivariate Polynomial Ring in q, t over Rational Field
|
|
102
|
+
"""
|
|
103
|
+
check_old_coerce(self)
|
|
104
|
+
if S is self:
|
|
105
|
+
from sage.categories.homset import Hom
|
|
106
|
+
return Hom(self, self).identity()
|
|
107
|
+
elif S == self:
|
|
108
|
+
# non-unique parents
|
|
109
|
+
from sage.categories.homset import Hom
|
|
110
|
+
from sage.categories.morphism import CallMorphism
|
|
111
|
+
return CallMorphism(Hom(S, self))
|
|
112
|
+
elif isinstance(S, Set_PythonType_class):
|
|
113
|
+
return self.__coerce_map_from_c(S._type)
|
|
114
|
+
if self._coerce_from_hash is None: # this is because parent.__init__() does not always get called
|
|
115
|
+
self.init_coerce()
|
|
116
|
+
cdef object ret
|
|
117
|
+
try:
|
|
118
|
+
ret = self._coerce_from_hash.get(S)
|
|
119
|
+
return ret
|
|
120
|
+
except KeyError:
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
mor = self.__coerce_map_from_c_impl(S)
|
|
124
|
+
import sage.categories.morphism
|
|
125
|
+
import sage.categories.map
|
|
126
|
+
if mor is True:
|
|
127
|
+
mor = sage.categories.morphism.CallMorphism(S, self)
|
|
128
|
+
elif mor is False:
|
|
129
|
+
mor = None
|
|
130
|
+
elif mor is not None and not isinstance(mor, sage.categories.map.Map):
|
|
131
|
+
raise AssertionError("__coerce_map_from_c_impl must return a boolean, None, or an explicit Map")
|
|
132
|
+
|
|
133
|
+
if mor is None and isinstance(S, type):
|
|
134
|
+
#Convert Python types to native Sage types
|
|
135
|
+
sage_type = py_scalar_parent(S)
|
|
136
|
+
if sage_type is None:
|
|
137
|
+
self._coerce_from_hash[S] = None
|
|
138
|
+
return None
|
|
139
|
+
mor = self.__coerce_map_from_c(sage_type)
|
|
140
|
+
if mor is not None:
|
|
141
|
+
mor = mor * sage_type._internal_coerce_map_from(S)
|
|
142
|
+
|
|
143
|
+
if mor is not None:
|
|
144
|
+
self._coerce_from_hash.set(S, mor) # TODO: if this is None, could it be non-None in the future?
|
|
145
|
+
|
|
146
|
+
return mor
|
|
147
|
+
|
|
148
|
+
cdef __coerce_map_from_c_impl(self, S):
|
|
149
|
+
check_old_coerce(self)
|
|
150
|
+
import sage.categories.morphism
|
|
151
|
+
from sage.categories.map import Map
|
|
152
|
+
from sage.categories.homset import Hom
|
|
153
|
+
cdef parent.Parent R
|
|
154
|
+
for mor in self._coerce_from_list:
|
|
155
|
+
if isinstance(mor, Map):
|
|
156
|
+
R = mor.domain()
|
|
157
|
+
else:
|
|
158
|
+
R = mor
|
|
159
|
+
mor = sage.categories.morphism.CallMorphism(Hom(R, self))
|
|
160
|
+
i = self._coerce_from_list.index(R)
|
|
161
|
+
self._coerce_from_list[i] = mor # cache in case we need it again
|
|
162
|
+
if R is S:
|
|
163
|
+
return mor
|
|
164
|
+
else:
|
|
165
|
+
connecting = R._internal_coerce_map_from(S)
|
|
166
|
+
if connecting is not None:
|
|
167
|
+
return mor * connecting
|
|
168
|
+
|
|
169
|
+
if self.__has_coerce_map_from_c(S):
|
|
170
|
+
if isinstance(S, type):
|
|
171
|
+
S = Set_PythonType(S)
|
|
172
|
+
return sage.categories.morphism.CallMorphism(Hom(S, self))
|
|
173
|
+
else:
|
|
174
|
+
return None
|
|
175
|
+
|
|
176
|
+
##############################################
|
|
177
|
+
# Coercion support functionality
|
|
178
|
+
##############################################
|
|
179
|
+
|
|
180
|
+
def _coerce_(self, x): # Call this from Python (do not override!)
|
|
181
|
+
if self._element_constructor is not None:
|
|
182
|
+
from sage.misc.superseded import deprecation
|
|
183
|
+
deprecation(33497, "_coerce_ is deprecated, use coerce instead")
|
|
184
|
+
return self.coerce(x)
|
|
185
|
+
check_old_coerce(self)
|
|
186
|
+
return self._coerce_c(x)
|
|
187
|
+
|
|
188
|
+
cpdef _coerce_c(self, x): # DO NOT OVERRIDE THIS (call it)
|
|
189
|
+
if self._element_constructor is not None:
|
|
190
|
+
from sage.misc.superseded import deprecation
|
|
191
|
+
deprecation(33497, "_coerce_c is deprecated, use coerce instead")
|
|
192
|
+
return self.coerce(x)
|
|
193
|
+
check_old_coerce(self)
|
|
194
|
+
try:
|
|
195
|
+
P = x.parent() # todo -- optimize
|
|
196
|
+
if P is self:
|
|
197
|
+
return x
|
|
198
|
+
except AttributeError as msg:
|
|
199
|
+
pass
|
|
200
|
+
if HAS_DICTIONARY(self):
|
|
201
|
+
return self._coerce_impl(x)
|
|
202
|
+
else:
|
|
203
|
+
return self._coerce_c_impl(x)
|
|
204
|
+
|
|
205
|
+
cdef _coerce_c_impl(self, x): # OVERRIDE THIS FOR CYTHON CLASSES
|
|
206
|
+
"""
|
|
207
|
+
Canonically coerce ``x`` in assuming that the parent of ``x`` is not
|
|
208
|
+
equal to ``self``.
|
|
209
|
+
"""
|
|
210
|
+
check_old_coerce(self)
|
|
211
|
+
raise TypeError
|
|
212
|
+
|
|
213
|
+
def _coerce_impl(self, x): # OVERRIDE THIS FOR PYTHON CLASSES
|
|
214
|
+
"""
|
|
215
|
+
Canonically coerce ``x`` in assuming that the parent of ``x`` is not
|
|
216
|
+
equal to ``self``.
|
|
217
|
+
"""
|
|
218
|
+
check_old_coerce(self)
|
|
219
|
+
return self._coerce_c_impl(x)
|
|
220
|
+
|
|
221
|
+
cdef __has_coerce_map_from_c(self, S):
|
|
222
|
+
check_old_coerce(self)
|
|
223
|
+
if self == S:
|
|
224
|
+
return True
|
|
225
|
+
try:
|
|
226
|
+
return self._has_coerce_map_from.get(S)
|
|
227
|
+
except KeyError:
|
|
228
|
+
pass
|
|
229
|
+
try:
|
|
230
|
+
self._coerce_c((<parent.Parent?>S).an_element())
|
|
231
|
+
except TypeError:
|
|
232
|
+
ans = False
|
|
233
|
+
else:
|
|
234
|
+
ans = True
|
|
235
|
+
self._has_coerce_map_from.set(S, ans)
|
|
236
|
+
return ans
|
|
237
|
+
|
|
238
|
+
###############################################################
|
|
239
|
+
# Coercion Compatibility Layer
|
|
240
|
+
###############################################################
|
|
241
|
+
cpdef _coerce_map_from_(self, S):
|
|
242
|
+
if self._element_constructor is None:
|
|
243
|
+
return self.__coerce_map_from_c(S)
|
|
244
|
+
else:
|
|
245
|
+
return parent.Parent._coerce_map_from_(self, S)
|
|
246
|
+
|
|
247
|
+
@cached_method
|
|
248
|
+
def _an_element_(self):
|
|
249
|
+
"""
|
|
250
|
+
Return an element of ``self``.
|
|
251
|
+
|
|
252
|
+
Want it in sufficient generality
|
|
253
|
+
that poorly-written functions will not work when they are not
|
|
254
|
+
supposed to. This is cached so does not have to be super fast.
|
|
255
|
+
"""
|
|
256
|
+
if self._element_constructor is not None:
|
|
257
|
+
return parent.Parent._an_element_(self)
|
|
258
|
+
|
|
259
|
+
check_old_coerce(self)
|
|
260
|
+
try:
|
|
261
|
+
return self.gen()
|
|
262
|
+
except (ValueError, AttributeError, TypeError):
|
|
263
|
+
pass
|
|
264
|
+
|
|
265
|
+
from sage.rings.infinity import infinity
|
|
266
|
+
for x in ['pi', 1.2, 2, 1, 0, infinity]:
|
|
267
|
+
try:
|
|
268
|
+
return self(x)
|
|
269
|
+
except (TypeError, ValueError):
|
|
270
|
+
pass
|
|
271
|
+
|
|
272
|
+
raise NotImplementedError(f"_an_element_ is not implemented for {self}")
|
|
273
|
+
|
|
274
|
+
cpdef _generic_convert_map(self, S, category=None):
|
|
275
|
+
r"""
|
|
276
|
+
Return a default conversion from ``S``.
|
|
277
|
+
|
|
278
|
+
EXAMPLES::
|
|
279
|
+
|
|
280
|
+
sage: R.<x,y> = QQ[]
|
|
281
|
+
sage: R._generic_convert_map(QQ).category_for()
|
|
282
|
+
Category of sets with partial maps
|
|
283
|
+
"""
|
|
284
|
+
if self._element_constructor is None:
|
|
285
|
+
if hasattr(self, '_element_constructor_'):
|
|
286
|
+
assert callable(self._element_constructor_)
|
|
287
|
+
self._element_constructor = self._element_constructor_
|
|
288
|
+
else:
|
|
289
|
+
from sage.categories.morphism import CallMorphism
|
|
290
|
+
from sage.categories.homset import Hom
|
|
291
|
+
if isinstance(S, type):
|
|
292
|
+
S = Set_PythonType(S)
|
|
293
|
+
return CallMorphism(Hom(S, self))
|
|
294
|
+
return parent.Parent._generic_convert_map(self, S, category)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
from sage.structure.proof.proof import WithProof
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def arithmetic(t=None):
|
|
6
|
+
"""
|
|
7
|
+
Controls the default proof strategy for integer arithmetic algorithms
|
|
8
|
+
(such as primality testing).
|
|
9
|
+
|
|
10
|
+
INPUT:
|
|
11
|
+
|
|
12
|
+
- ``t`` -- boolean or ``None``
|
|
13
|
+
|
|
14
|
+
OUTPUT:
|
|
15
|
+
|
|
16
|
+
If t is ``True``, requires integer arithmetic operations to (by
|
|
17
|
+
default) return results that are true unconditionally: the
|
|
18
|
+
correctness will not depend on an algorithm with a nonzero
|
|
19
|
+
probability of returning an incorrect answer or on the truth of
|
|
20
|
+
any unproven conjectures.
|
|
21
|
+
|
|
22
|
+
If t is ``False``, allows integer arithmetic operations to (by
|
|
23
|
+
default) return results that may depend on unproven conjectures or
|
|
24
|
+
on probabilistic algorithms. Such algorithms often have a
|
|
25
|
+
substantial speed improvement over those requiring proof.
|
|
26
|
+
|
|
27
|
+
If t is ``None``, returns the integer arithmetic proof status.
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: proof.arithmetic()
|
|
32
|
+
True
|
|
33
|
+
sage: proof.arithmetic(False)
|
|
34
|
+
sage: proof.arithmetic()
|
|
35
|
+
False
|
|
36
|
+
sage: proof.arithmetic(True)
|
|
37
|
+
sage: proof.arithmetic()
|
|
38
|
+
True
|
|
39
|
+
"""
|
|
40
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
41
|
+
return _proof_prefs.arithmetic(t)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def elliptic_curve(t=None):
|
|
45
|
+
"""
|
|
46
|
+
Controls the default proof strategy for elliptic curve algorithms.
|
|
47
|
+
|
|
48
|
+
INPUT:
|
|
49
|
+
|
|
50
|
+
- ``t`` -- boolean or ``None``
|
|
51
|
+
|
|
52
|
+
OUTPUT:
|
|
53
|
+
|
|
54
|
+
If t is ``True``, requires elliptic curve algorithms to (by
|
|
55
|
+
default) return results that are true unconditionally: the
|
|
56
|
+
correctness will not depend on an algorithm with a nonzero
|
|
57
|
+
probability of returning an incorrect answer or on the truth of
|
|
58
|
+
any unproven conjectures.
|
|
59
|
+
|
|
60
|
+
If t is ``False``, allows elliptic curve algorithms to (by
|
|
61
|
+
default) return results that may depend on unproven conjectures or
|
|
62
|
+
on probabilistic algorithms. Such algorithms often have a
|
|
63
|
+
substantial speed improvement over those requiring proof.
|
|
64
|
+
|
|
65
|
+
If t is ``None``, returns the current elliptic curve proof status.
|
|
66
|
+
|
|
67
|
+
EXAMPLES::
|
|
68
|
+
|
|
69
|
+
sage: proof.elliptic_curve()
|
|
70
|
+
True
|
|
71
|
+
sage: proof.elliptic_curve(False)
|
|
72
|
+
sage: proof.elliptic_curve()
|
|
73
|
+
False
|
|
74
|
+
sage: proof.elliptic_curve(True)
|
|
75
|
+
sage: proof.elliptic_curve()
|
|
76
|
+
True
|
|
77
|
+
"""
|
|
78
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
79
|
+
return _proof_prefs.elliptic_curve(t)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def linear_algebra(t=None):
|
|
83
|
+
"""
|
|
84
|
+
Controls the default proof strategy for linear algebra algorithms.
|
|
85
|
+
|
|
86
|
+
INPUT:
|
|
87
|
+
|
|
88
|
+
- ``t`` -- boolean or ``None``
|
|
89
|
+
|
|
90
|
+
OUTPUT:
|
|
91
|
+
|
|
92
|
+
If t is ``True``, requires linear algebra algorithms to (by
|
|
93
|
+
default) return results that are true unconditionally: the
|
|
94
|
+
correctness will not depend on an algorithm with a nonzero
|
|
95
|
+
probability of returning an incorrect answer or on the truth of
|
|
96
|
+
any unproven conjectures.
|
|
97
|
+
|
|
98
|
+
If t is ``False``, allows linear algebra algorithms to (by
|
|
99
|
+
default) return results that may depend on unproven conjectures or
|
|
100
|
+
on probabilistic algorithms. Such algorithms often have a
|
|
101
|
+
substantial speed improvement over those requiring proof.
|
|
102
|
+
|
|
103
|
+
If t is ``None``, returns the current linear algebra proof status.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: proof.linear_algebra()
|
|
108
|
+
True
|
|
109
|
+
sage: proof.linear_algebra(False)
|
|
110
|
+
sage: proof.linear_algebra()
|
|
111
|
+
False
|
|
112
|
+
sage: proof.linear_algebra(True)
|
|
113
|
+
sage: proof.linear_algebra()
|
|
114
|
+
True
|
|
115
|
+
"""
|
|
116
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
117
|
+
return _proof_prefs.linear_algebra(t)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def number_field(t=None):
|
|
121
|
+
"""
|
|
122
|
+
Controls the default proof strategy for number field algorithms.
|
|
123
|
+
|
|
124
|
+
INPUT:
|
|
125
|
+
|
|
126
|
+
- ``t`` -- boolean or ``None``
|
|
127
|
+
|
|
128
|
+
OUTPUT:
|
|
129
|
+
|
|
130
|
+
If t is ``True``, requires number field algorithms to (by default)
|
|
131
|
+
return results that are true unconditionally: the correctness will
|
|
132
|
+
not depend on an algorithm with a nonzero probability of returning
|
|
133
|
+
an incorrect answer or on the truth of any unproven conjectures.
|
|
134
|
+
|
|
135
|
+
If t is ``False``, allows number field algorithms to (by default)
|
|
136
|
+
return results that may depend on unproven conjectures or on
|
|
137
|
+
probabilistic algorithms. Such algorithms often have a
|
|
138
|
+
substantial speed improvement over those requiring proof.
|
|
139
|
+
|
|
140
|
+
If t is ``None``, returns the current number field proof status.
|
|
141
|
+
|
|
142
|
+
EXAMPLES::
|
|
143
|
+
|
|
144
|
+
sage: proof.number_field()
|
|
145
|
+
True
|
|
146
|
+
sage: proof.number_field(False)
|
|
147
|
+
sage: proof.number_field()
|
|
148
|
+
False
|
|
149
|
+
sage: proof.number_field(True)
|
|
150
|
+
sage: proof.number_field()
|
|
151
|
+
True
|
|
152
|
+
"""
|
|
153
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
154
|
+
return _proof_prefs.number_field(t)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def polynomial(t=None):
|
|
158
|
+
"""
|
|
159
|
+
Controls the default proof strategy for polynomial algorithms.
|
|
160
|
+
|
|
161
|
+
INPUT:
|
|
162
|
+
|
|
163
|
+
- ``t`` -- boolean or ``None``
|
|
164
|
+
|
|
165
|
+
OUTPUT:
|
|
166
|
+
|
|
167
|
+
If t is ``True``, requires polynomial algorithms to (by default)
|
|
168
|
+
return results that are true unconditionally: the correctness will
|
|
169
|
+
not depend on an algorithm with a nonzero probability of returning
|
|
170
|
+
an incorrect answer or on the truth of any unproven conjectures.
|
|
171
|
+
|
|
172
|
+
If t is ``False``, allows polynomial algorithms to (by default)
|
|
173
|
+
return results that may depend on unproven conjectures or on
|
|
174
|
+
probabilistic algorithms. Such algorithms often have a
|
|
175
|
+
substantial speed improvement over those requiring proof.
|
|
176
|
+
|
|
177
|
+
If t is ``None``, returns the current polynomial proof status.
|
|
178
|
+
|
|
179
|
+
EXAMPLES::
|
|
180
|
+
|
|
181
|
+
sage: proof.polynomial()
|
|
182
|
+
True
|
|
183
|
+
sage: proof.polynomial(False)
|
|
184
|
+
sage: proof.polynomial()
|
|
185
|
+
False
|
|
186
|
+
sage: proof.polynomial(True)
|
|
187
|
+
sage: proof.polynomial()
|
|
188
|
+
True
|
|
189
|
+
"""
|
|
190
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
191
|
+
return _proof_prefs.polynomial(t)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def all(t=None):
|
|
195
|
+
"""
|
|
196
|
+
Controls the default proof strategy throughout Sage.
|
|
197
|
+
|
|
198
|
+
INPUT:
|
|
199
|
+
|
|
200
|
+
- ``t`` -- boolean or ``None``
|
|
201
|
+
|
|
202
|
+
OUTPUT:
|
|
203
|
+
|
|
204
|
+
If t is ``True``, requires Sage algorithms to (by default) return
|
|
205
|
+
results that are true unconditionally: the correctness will not
|
|
206
|
+
depend on an algorithm with a nonzero probability of returning an
|
|
207
|
+
incorrect answer or on the truth of any unproven conjectures.
|
|
208
|
+
|
|
209
|
+
If t is ``False``, allows Sage algorithms to (by default) return
|
|
210
|
+
results that may depend on unproven conjectures or on
|
|
211
|
+
probabilistic algorithms. Such algorithms often have a
|
|
212
|
+
substantial speed improvement over those requiring proof.
|
|
213
|
+
|
|
214
|
+
If t is ``None``, returns the current global Sage proof status.
|
|
215
|
+
|
|
216
|
+
EXAMPLES::
|
|
217
|
+
|
|
218
|
+
sage: proof.all()
|
|
219
|
+
{'arithmetic': True,
|
|
220
|
+
'elliptic_curve': True,
|
|
221
|
+
'linear_algebra': True,
|
|
222
|
+
'number_field': True,
|
|
223
|
+
'other': True,
|
|
224
|
+
'polynomial': True}
|
|
225
|
+
sage: proof.number_field(False)
|
|
226
|
+
sage: proof.number_field()
|
|
227
|
+
False
|
|
228
|
+
sage: proof.all()
|
|
229
|
+
{'arithmetic': True,
|
|
230
|
+
'elliptic_curve': True,
|
|
231
|
+
'linear_algebra': True,
|
|
232
|
+
'number_field': False,
|
|
233
|
+
'other': True,
|
|
234
|
+
'polynomial': True}
|
|
235
|
+
sage: proof.number_field(True)
|
|
236
|
+
sage: proof.number_field()
|
|
237
|
+
True
|
|
238
|
+
"""
|
|
239
|
+
from sage.structure.proof.proof import _proof_prefs
|
|
240
|
+
if t is None:
|
|
241
|
+
return _proof_prefs._require_proof.copy()
|
|
242
|
+
for s in _proof_prefs._require_proof:
|
|
243
|
+
_proof_prefs._require_proof[s] = bool(t)
|