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.
Files changed (280) hide show
  1. passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
  2. passagemath_objects/__init__.py +3 -0
  3. passagemath_objects-10.6.44.dist-info/METADATA +115 -0
  4. passagemath_objects-10.6.44.dist-info/RECORD +280 -0
  5. passagemath_objects-10.6.44.dist-info/WHEEL +6 -0
  6. passagemath_objects-10.6.44.dist-info/top_level.txt +3 -0
  7. sage/all__sagemath_objects.py +37 -0
  8. sage/arith/all__sagemath_objects.py +5 -0
  9. sage/arith/long.pxd +411 -0
  10. sage/arith/numerical_approx.cpython-314t-darwin.so +0 -0
  11. sage/arith/numerical_approx.pxd +35 -0
  12. sage/arith/numerical_approx.pyx +75 -0
  13. sage/arith/power.cpython-314t-darwin.so +0 -0
  14. sage/arith/power.pxd +31 -0
  15. sage/arith/power.pyx +127 -0
  16. sage/categories/action.cpython-314t-darwin.so +0 -0
  17. sage/categories/action.pxd +29 -0
  18. sage/categories/action.pyx +641 -0
  19. sage/categories/algebra_functor.py +745 -0
  20. sage/categories/all__sagemath_objects.py +33 -0
  21. sage/categories/basic.py +62 -0
  22. sage/categories/cartesian_product.py +295 -0
  23. sage/categories/category.py +3401 -0
  24. sage/categories/category_cy_helper.cpython-314t-darwin.so +0 -0
  25. sage/categories/category_cy_helper.pxd +8 -0
  26. sage/categories/category_cy_helper.pyx +322 -0
  27. sage/categories/category_singleton.cpython-314t-darwin.so +0 -0
  28. sage/categories/category_singleton.pxd +3 -0
  29. sage/categories/category_singleton.pyx +342 -0
  30. sage/categories/category_types.py +637 -0
  31. sage/categories/category_with_axiom.py +2876 -0
  32. sage/categories/covariant_functorial_construction.py +703 -0
  33. sage/categories/facade_sets.py +228 -0
  34. sage/categories/functor.cpython-314t-darwin.so +0 -0
  35. sage/categories/functor.pxd +7 -0
  36. sage/categories/functor.pyx +691 -0
  37. sage/categories/homset.py +1338 -0
  38. sage/categories/homsets.py +364 -0
  39. sage/categories/isomorphic_objects.py +73 -0
  40. sage/categories/map.cpython-314t-darwin.so +0 -0
  41. sage/categories/map.pxd +34 -0
  42. sage/categories/map.pyx +2106 -0
  43. sage/categories/morphism.cpython-314t-darwin.so +0 -0
  44. sage/categories/morphism.pxd +14 -0
  45. sage/categories/morphism.pyx +895 -0
  46. sage/categories/objects.py +167 -0
  47. sage/categories/primer.py +1696 -0
  48. sage/categories/pushout.py +4834 -0
  49. sage/categories/quotients.py +64 -0
  50. sage/categories/realizations.py +200 -0
  51. sage/categories/sets_cat.py +3290 -0
  52. sage/categories/sets_with_partial_maps.py +52 -0
  53. sage/categories/subobjects.py +64 -0
  54. sage/categories/subquotients.py +21 -0
  55. sage/categories/with_realizations.py +311 -0
  56. sage/cpython/__init__.py +19 -0
  57. sage/cpython/_py2_random.py +619 -0
  58. sage/cpython/all.py +3 -0
  59. sage/cpython/atexit.cpython-314t-darwin.so +0 -0
  60. sage/cpython/atexit.pyx +269 -0
  61. sage/cpython/builtin_types.cpython-314t-darwin.so +0 -0
  62. sage/cpython/builtin_types.pyx +7 -0
  63. sage/cpython/cython_metaclass.cpython-314t-darwin.so +0 -0
  64. sage/cpython/cython_metaclass.h +117 -0
  65. sage/cpython/cython_metaclass.pxd +3 -0
  66. sage/cpython/cython_metaclass.pyx +130 -0
  67. sage/cpython/debug.cpython-314t-darwin.so +0 -0
  68. sage/cpython/debug.pyx +302 -0
  69. sage/cpython/dict_del_by_value.cpython-314t-darwin.so +0 -0
  70. sage/cpython/dict_del_by_value.pxd +9 -0
  71. sage/cpython/dict_del_by_value.pyx +191 -0
  72. sage/cpython/dict_internal.h +245 -0
  73. sage/cpython/getattr.cpython-314t-darwin.so +0 -0
  74. sage/cpython/getattr.pxd +9 -0
  75. sage/cpython/getattr.pyx +439 -0
  76. sage/cpython/pycore_long.h +97 -0
  77. sage/cpython/pycore_long.pxd +10 -0
  78. sage/cpython/python_debug.h +44 -0
  79. sage/cpython/python_debug.pxd +47 -0
  80. sage/cpython/pyx_visit.h +13 -0
  81. sage/cpython/string.cpython-314t-darwin.so +0 -0
  82. sage/cpython/string.pxd +76 -0
  83. sage/cpython/string.pyx +34 -0
  84. sage/cpython/string_impl.h +60 -0
  85. sage/cpython/type.cpython-314t-darwin.so +0 -0
  86. sage/cpython/type.pxd +2 -0
  87. sage/cpython/type.pyx +40 -0
  88. sage/cpython/wrapperdescr.pxd +67 -0
  89. sage/ext/all__sagemath_objects.py +3 -0
  90. sage/ext/ccobject.h +64 -0
  91. sage/ext/cplusplus.pxd +17 -0
  92. sage/ext/mod_int.h +30 -0
  93. sage/ext/mod_int.pxd +24 -0
  94. sage/ext/stdsage.pxd +39 -0
  95. sage/groups/all__sagemath_objects.py +1 -0
  96. sage/groups/group.cpython-314t-darwin.so +0 -0
  97. sage/groups/group.pxd +14 -0
  98. sage/groups/group.pyx +322 -0
  99. sage/groups/old.cpython-314t-darwin.so +0 -0
  100. sage/groups/old.pxd +14 -0
  101. sage/groups/old.pyx +219 -0
  102. sage/libs/all__sagemath_objects.py +3 -0
  103. sage/libs/gmp/__init__.py +1 -0
  104. sage/libs/gmp/all.pxd +6 -0
  105. sage/libs/gmp/binop.pxd +23 -0
  106. sage/libs/gmp/misc.pxd +8 -0
  107. sage/libs/gmp/mpf.pxd +88 -0
  108. sage/libs/gmp/mpn.pxd +57 -0
  109. sage/libs/gmp/mpq.pxd +57 -0
  110. sage/libs/gmp/mpz.pxd +202 -0
  111. sage/libs/gmp/pylong.cpython-314t-darwin.so +0 -0
  112. sage/libs/gmp/pylong.pxd +12 -0
  113. sage/libs/gmp/pylong.pyx +150 -0
  114. sage/libs/gmp/random.pxd +25 -0
  115. sage/libs/gmp/randomize.pxd +59 -0
  116. sage/libs/gmp/types.pxd +53 -0
  117. sage/libs/gmpxx.pxd +19 -0
  118. sage/misc/abstract_method.py +276 -0
  119. sage/misc/all__sagemath_objects.py +43 -0
  120. sage/misc/bindable_class.py +253 -0
  121. sage/misc/c3_controlled.cpython-314t-darwin.so +0 -0
  122. sage/misc/c3_controlled.pxd +2 -0
  123. sage/misc/c3_controlled.pyx +1402 -0
  124. sage/misc/cachefunc.cpython-314t-darwin.so +0 -0
  125. sage/misc/cachefunc.pxd +43 -0
  126. sage/misc/cachefunc.pyx +3781 -0
  127. sage/misc/call.py +188 -0
  128. sage/misc/classcall_metaclass.cpython-314t-darwin.so +0 -0
  129. sage/misc/classcall_metaclass.pxd +14 -0
  130. sage/misc/classcall_metaclass.pyx +599 -0
  131. sage/misc/constant_function.cpython-314t-darwin.so +0 -0
  132. sage/misc/constant_function.pyx +130 -0
  133. sage/misc/decorators.py +747 -0
  134. sage/misc/fast_methods.cpython-314t-darwin.so +0 -0
  135. sage/misc/fast_methods.pxd +20 -0
  136. sage/misc/fast_methods.pyx +351 -0
  137. sage/misc/flatten.py +90 -0
  138. sage/misc/fpickle.cpython-314t-darwin.so +0 -0
  139. sage/misc/fpickle.pyx +177 -0
  140. sage/misc/function_mangling.cpython-314t-darwin.so +0 -0
  141. sage/misc/function_mangling.pxd +11 -0
  142. sage/misc/function_mangling.pyx +308 -0
  143. sage/misc/inherit_comparison.cpython-314t-darwin.so +0 -0
  144. sage/misc/inherit_comparison.pxd +5 -0
  145. sage/misc/inherit_comparison.pyx +105 -0
  146. sage/misc/instancedoc.cpython-314t-darwin.so +0 -0
  147. sage/misc/instancedoc.pyx +331 -0
  148. sage/misc/lazy_attribute.cpython-314t-darwin.so +0 -0
  149. sage/misc/lazy_attribute.pyx +607 -0
  150. sage/misc/lazy_format.py +135 -0
  151. sage/misc/lazy_import.cpython-314t-darwin.so +0 -0
  152. sage/misc/lazy_import.pyx +1299 -0
  153. sage/misc/lazy_import_cache.py +36 -0
  154. sage/misc/lazy_list.cpython-314t-darwin.so +0 -0
  155. sage/misc/lazy_list.pxd +19 -0
  156. sage/misc/lazy_list.pyx +1187 -0
  157. sage/misc/lazy_string.cpython-314t-darwin.so +0 -0
  158. sage/misc/lazy_string.pxd +7 -0
  159. sage/misc/lazy_string.pyx +546 -0
  160. sage/misc/misc.py +1066 -0
  161. sage/misc/misc_c.cpython-314t-darwin.so +0 -0
  162. sage/misc/misc_c.pxd +3 -0
  163. sage/misc/misc_c.pyx +766 -0
  164. sage/misc/namespace_package.py +37 -0
  165. sage/misc/nested_class.cpython-314t-darwin.so +0 -0
  166. sage/misc/nested_class.pxd +3 -0
  167. sage/misc/nested_class.pyx +394 -0
  168. sage/misc/persist.cpython-314t-darwin.so +0 -0
  169. sage/misc/persist.pyx +1251 -0
  170. sage/misc/prandom.py +418 -0
  171. sage/misc/randstate.cpython-314t-darwin.so +0 -0
  172. sage/misc/randstate.pxd +30 -0
  173. sage/misc/randstate.pyx +1059 -0
  174. sage/misc/repr.py +203 -0
  175. sage/misc/reset.cpython-314t-darwin.so +0 -0
  176. sage/misc/reset.pyx +196 -0
  177. sage/misc/sage_ostools.cpython-314t-darwin.so +0 -0
  178. sage/misc/sage_ostools.pyx +323 -0
  179. sage/misc/sage_timeit.py +275 -0
  180. sage/misc/sage_timeit_class.cpython-314t-darwin.so +0 -0
  181. sage/misc/sage_timeit_class.pyx +120 -0
  182. sage/misc/sage_unittest.py +637 -0
  183. sage/misc/sageinspect.py +2768 -0
  184. sage/misc/session.cpython-314t-darwin.so +0 -0
  185. sage/misc/session.pyx +392 -0
  186. sage/misc/superseded.py +557 -0
  187. sage/misc/test_nested_class.py +228 -0
  188. sage/misc/timing.py +264 -0
  189. sage/misc/unknown.py +222 -0
  190. sage/misc/verbose.py +253 -0
  191. sage/misc/weak_dict.cpython-314t-darwin.so +0 -0
  192. sage/misc/weak_dict.pxd +15 -0
  193. sage/misc/weak_dict.pyx +1231 -0
  194. sage/modules/all__sagemath_objects.py +1 -0
  195. sage/modules/module.cpython-314t-darwin.so +0 -0
  196. sage/modules/module.pxd +5 -0
  197. sage/modules/module.pyx +329 -0
  198. sage/rings/all__sagemath_objects.py +3 -0
  199. sage/rings/integer_fake.h +22 -0
  200. sage/rings/integer_fake.pxd +55 -0
  201. sage/sets/all__sagemath_objects.py +3 -0
  202. sage/sets/pythonclass.cpython-314t-darwin.so +0 -0
  203. sage/sets/pythonclass.pxd +9 -0
  204. sage/sets/pythonclass.pyx +247 -0
  205. sage/structure/__init__.py +4 -0
  206. sage/structure/all.py +30 -0
  207. sage/structure/category_object.cpython-314t-darwin.so +0 -0
  208. sage/structure/category_object.pxd +28 -0
  209. sage/structure/category_object.pyx +1087 -0
  210. sage/structure/coerce.cpython-314t-darwin.so +0 -0
  211. sage/structure/coerce.pxd +44 -0
  212. sage/structure/coerce.pyx +2107 -0
  213. sage/structure/coerce_actions.cpython-314t-darwin.so +0 -0
  214. sage/structure/coerce_actions.pxd +27 -0
  215. sage/structure/coerce_actions.pyx +988 -0
  216. sage/structure/coerce_dict.cpython-314t-darwin.so +0 -0
  217. sage/structure/coerce_dict.pxd +51 -0
  218. sage/structure/coerce_dict.pyx +1557 -0
  219. sage/structure/coerce_exceptions.py +23 -0
  220. sage/structure/coerce_maps.cpython-314t-darwin.so +0 -0
  221. sage/structure/coerce_maps.pxd +28 -0
  222. sage/structure/coerce_maps.pyx +718 -0
  223. sage/structure/debug_options.cpython-314t-darwin.so +0 -0
  224. sage/structure/debug_options.pxd +6 -0
  225. sage/structure/debug_options.pyx +54 -0
  226. sage/structure/dynamic_class.py +541 -0
  227. sage/structure/element.cpython-314t-darwin.so +0 -0
  228. sage/structure/element.pxd +272 -0
  229. sage/structure/element.pyx +4772 -0
  230. sage/structure/element_wrapper.cpython-314t-darwin.so +0 -0
  231. sage/structure/element_wrapper.pxd +12 -0
  232. sage/structure/element_wrapper.pyx +582 -0
  233. sage/structure/factorization.py +1422 -0
  234. sage/structure/factorization_integer.py +105 -0
  235. sage/structure/factory.cpython-314t-darwin.so +0 -0
  236. sage/structure/factory.pyx +786 -0
  237. sage/structure/formal_sum.py +489 -0
  238. sage/structure/gens_py.py +73 -0
  239. sage/structure/global_options.py +1743 -0
  240. sage/structure/indexed_generators.py +863 -0
  241. sage/structure/list_clone.cpython-314t-darwin.so +0 -0
  242. sage/structure/list_clone.pxd +65 -0
  243. sage/structure/list_clone.pyx +1867 -0
  244. sage/structure/list_clone_demo.cpython-314t-darwin.so +0 -0
  245. sage/structure/list_clone_demo.pyx +248 -0
  246. sage/structure/list_clone_timings.py +179 -0
  247. sage/structure/list_clone_timings_cy.cpython-314t-darwin.so +0 -0
  248. sage/structure/list_clone_timings_cy.pyx +86 -0
  249. sage/structure/mutability.cpython-314t-darwin.so +0 -0
  250. sage/structure/mutability.pxd +21 -0
  251. sage/structure/mutability.pyx +348 -0
  252. sage/structure/nonexact.py +69 -0
  253. sage/structure/parent.cpython-314t-darwin.so +0 -0
  254. sage/structure/parent.pxd +112 -0
  255. sage/structure/parent.pyx +3093 -0
  256. sage/structure/parent_base.cpython-314t-darwin.so +0 -0
  257. sage/structure/parent_base.pxd +13 -0
  258. sage/structure/parent_base.pyx +44 -0
  259. sage/structure/parent_gens.cpython-314t-darwin.so +0 -0
  260. sage/structure/parent_gens.pxd +22 -0
  261. sage/structure/parent_gens.pyx +377 -0
  262. sage/structure/parent_old.cpython-314t-darwin.so +0 -0
  263. sage/structure/parent_old.pxd +25 -0
  264. sage/structure/parent_old.pyx +294 -0
  265. sage/structure/proof/__init__.py +1 -0
  266. sage/structure/proof/all.py +243 -0
  267. sage/structure/proof/proof.py +300 -0
  268. sage/structure/richcmp.cpython-314t-darwin.so +0 -0
  269. sage/structure/richcmp.pxd +213 -0
  270. sage/structure/richcmp.pyx +495 -0
  271. sage/structure/sage_object.cpython-314t-darwin.so +0 -0
  272. sage/structure/sage_object.pxd +3 -0
  273. sage/structure/sage_object.pyx +988 -0
  274. sage/structure/sage_object_test.py +19 -0
  275. sage/structure/sequence.py +937 -0
  276. sage/structure/set_factories.py +1178 -0
  277. sage/structure/set_factories_example.py +527 -0
  278. sage/structure/support_view.py +179 -0
  279. sage/structure/test_factory.py +56 -0
  280. 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)