passagemath-objects 10.6.46__cp314-cp314t-macosx_13_0_x86_64.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.

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.46.dist-info/METADATA +115 -0
  4. passagemath_objects-10.6.46.dist-info/RECORD +280 -0
  5. passagemath_objects-10.6.46.dist-info/WHEEL +6 -0
  6. passagemath_objects-10.6.46.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,13 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ ###############################################################################
3
+ # Sage: Open Source Mathematical Software
4
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
5
+ # Distributed under the terms of the GNU General Public License (GPL)
6
+ # The full text of the GPL is available at:
7
+ # https://www.gnu.org/licenses/
8
+ ###############################################################################
9
+
10
+ from sage.structure.parent_old cimport Parent as Parent_old
11
+
12
+ cdef class ParentWithBase(Parent_old):
13
+ pass
@@ -0,0 +1,44 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ r"""
3
+ Base class for old-style parent objects with a base ring
4
+ """
5
+ # ****************************************************************************
6
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ # https://www.gnu.org/licenses/
13
+ # ****************************************************************************
14
+
15
+ cimport sage.structure.parent as parent
16
+ from sage.structure.coerce_exceptions import CoercionException
17
+
18
+ cdef inline check_old_coerce(parent.Parent p):
19
+ if p._element_constructor is not None:
20
+ raise RuntimeError("%s still using old coercion framework" % p)
21
+
22
+
23
+ cdef class ParentWithBase(Parent_old):
24
+ """
25
+ This class is being deprecated, see parent.Parent for the new model.
26
+ """
27
+ def __init__(self, base, *args, **kwds):
28
+ Parent_old.__init__(self, *args, **kwds)
29
+ self._base = base
30
+
31
+ cdef _coerce_c_impl(self, x):
32
+ check_old_coerce(self)
33
+ from sage.misc.superseded import deprecation
34
+ deprecation(33497, "_coerce_c_impl is deprecated, use coerce instead")
35
+ if self._base is not self:
36
+ return self(self._base._coerce_(x))
37
+ else:
38
+ raise TypeError("No canonical coercion found.")
39
+
40
+ # Derived class *must* define base_extend.
41
+ def base_extend(self, X):
42
+ check_old_coerce(self)
43
+ raise CoercionException("BUG: the base_extend method must be defined for '%s' (class '%s')" %
44
+ (self, type(self)))
@@ -0,0 +1,22 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ """
3
+ Parent objects with generators
4
+ """
5
+
6
+ # ***************************************************************************
7
+ # Copyright (C) 2005, 2006 William Stein <wstein@gmail.com>
8
+ #
9
+ # This program is free software: you can redistribute it and/or modify
10
+ # it under the terms of the GNU General Public License as published by
11
+ # the Free Software Foundation, either version 2 of the License, or
12
+ # (at your option) any later version.
13
+ # https://www.gnu.org/licenses/
14
+ # ***************************************************************************
15
+
16
+ from sage.structure.parent_base cimport ParentWithBase
17
+
18
+
19
+ cdef class ParentWithGens(ParentWithBase):
20
+ cdef public object _gens
21
+ cdef public object _latex_names
22
+ cdef public object _list
@@ -0,0 +1,377 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ r"""
3
+ Base class for old-style parent objects with generators
4
+
5
+ .. NOTE::
6
+
7
+ This class is being deprecated, see
8
+ ``sage.structure.parent.Parent`` and
9
+ ``sage.structure.category_object.CategoryObject`` for the new
10
+ model.
11
+
12
+ Many parent objects in Sage are equipped with generators, which are
13
+ special elements of the object. For example, the polynomial ring
14
+ `\ZZ[x,y,z]` is generated by `x`, `y`, and `z`. In Sage the `i`-th
15
+ generator of an object ``X`` is obtained using the notation
16
+ ``X.gen(i)``. From the Sage interactive prompt, the shorthand
17
+ notation ``X.i`` is also allowed.
18
+
19
+ REQUIRED: A class that derives from ParentWithGens *must* define
20
+ the ngens() and gen(i) methods.
21
+
22
+ OPTIONAL: It is also good if they define gens() to return all gens,
23
+ but this is not necessary.
24
+
25
+ The ``gens`` function returns a tuple of all generators, the
26
+ ``ngens`` function returns the number of generators.
27
+
28
+ The ``_assign_names`` functions is for internal use only, and is
29
+ called when objects are created to set the generator names. It can
30
+ only be called once.
31
+
32
+ The following examples illustrate these functions in the context of
33
+ multivariate polynomial rings and free modules.
34
+
35
+ EXAMPLES::
36
+
37
+ sage: R = PolynomialRing(ZZ, 3, 'x')
38
+ sage: R.ngens()
39
+ 3
40
+ sage: R.gen(0)
41
+ x0
42
+ sage: R.gens()
43
+ (x0, x1, x2)
44
+ sage: R.variable_names()
45
+ ('x0', 'x1', 'x2')
46
+
47
+ This example illustrates generators for a free module over `\ZZ`.
48
+
49
+ ::
50
+
51
+ sage: # needs sage.modules
52
+ sage: M = FreeModule(ZZ, 4)
53
+ sage: M
54
+ Ambient free module of rank 4 over the principal ideal domain Integer Ring
55
+ sage: M.ngens()
56
+ 4
57
+ sage: M.gen(0)
58
+ (1, 0, 0, 0)
59
+ sage: M.gens()
60
+ ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1))
61
+ """
62
+
63
+ # ****************************************************************************
64
+ # Copyright (C) 2005, 2006 William Stein <wstein@gmail.com>
65
+ #
66
+ # This program is free software: you can redistribute it and/or modify
67
+ # it under the terms of the GNU General Public License as published by
68
+ # the Free Software Foundation, either version 2 of the License, or
69
+ # (at your option) any later version.
70
+ # https://www.gnu.org/licenses/
71
+ # ****************************************************************************
72
+
73
+ cimport sage.structure.parent as parent
74
+ cimport sage.structure.category_object as category_object
75
+
76
+
77
+ cdef inline check_old_coerce(parent.Parent p):
78
+ if p._element_constructor is not None:
79
+ raise RuntimeError("%s still using old coercion framework" % p)
80
+
81
+
82
+ cdef class ParentWithGens(ParentWithBase):
83
+ # Derived class *must* call __init__ and set the base!
84
+ def __init__(self, base, names=None, normalize=True, category=None):
85
+ """
86
+ EXAMPLES::
87
+
88
+ sage: from sage.structure.parent_gens import ParentWithGens
89
+ sage: class MyParent(ParentWithGens):
90
+ ....: def ngens(self): return 3
91
+ sage: P = MyParent(base=QQ, names='a,b,c', normalize=True, category=Groups())
92
+ sage: P.category()
93
+ Category of groups
94
+ sage: P._names
95
+ ('a', 'b', 'c')
96
+ """
97
+ self._base = base
98
+ self._assign_names(names=names, normalize=normalize)
99
+
100
+ ParentWithBase.__init__(self, base, category=category)
101
+
102
+ # Derived class *must* define ngens method.
103
+ def ngens(self):
104
+ check_old_coerce(self)
105
+ raise NotImplementedError("Number of generators not known.")
106
+
107
+ # Derived class *must* define gen method.
108
+ def gen(self, i=0):
109
+ check_old_coerce(self)
110
+ raise NotImplementedError("i-th generator not known.")
111
+
112
+ def gens(self):
113
+ """
114
+ Return a tuple whose entries are the generators for this
115
+ object, in order.
116
+ """
117
+ cdef int i
118
+ if self._gens is not None:
119
+ return self._gens
120
+ self._gens = tuple(self.gen(i) for i in range(self.ngens()))
121
+ return self._gens
122
+
123
+ def _assign_names(self, names=None, normalize=True):
124
+ """
125
+ Set the names of the generator of this object.
126
+
127
+ This can only be done once because objects with generators
128
+ are immutable, and is typically done during creation of the object.
129
+
130
+ EXAMPLES:
131
+
132
+ When we create this polynomial ring, self._assign_names is called by the constructor:
133
+
134
+ ::
135
+
136
+ sage: R = QQ['x,y,abc']; R
137
+ Multivariate Polynomial Ring in x, y, abc over Rational Field
138
+ sage: R.2
139
+ abc
140
+
141
+ We can't rename the variables::
142
+
143
+ sage: R._assign_names(['a','b','c'])
144
+ Traceback (most recent call last):
145
+ ...
146
+ ValueError: variable names cannot be changed after object creation.
147
+ """
148
+ if self._element_constructor is not None:
149
+ return parent.Parent._assign_names(self, names=names, normalize=normalize)
150
+ if names is None: return
151
+ if normalize:
152
+ names = category_object.normalize_names(self.ngens(), names)
153
+ if self._names is not None and names != self._names:
154
+ raise ValueError('variable names cannot be changed after object creation.')
155
+ if isinstance(names, str):
156
+ names = (names, ) # make it a tuple
157
+ elif not isinstance(names, tuple):
158
+ raise TypeError("names must be a tuple of strings")
159
+ self._names = names
160
+
161
+ #################################################################################
162
+ # Give all objects with generators a dictionary, so that attribute setting
163
+ # works. It would be nice if this functionality were standard in Pyrex,
164
+ # i.e., just define __dict__ as an attribute and all this code gets generated.
165
+ #################################################################################
166
+ def __getstate__(self):
167
+ if self._element_constructor is not None:
168
+ return parent.Parent.__getstate__(self)
169
+ d = []
170
+ try:
171
+ d = list(self.__dict__.copy().iteritems()) # so we can add elements
172
+ except AttributeError:
173
+ pass
174
+ d = dict(d)
175
+ d['_base'] = self._base
176
+ d['_gens'] = self._gens
177
+ d['_list'] = self._list
178
+ d['_names'] = self._names
179
+ d['_latex_names'] = self._latex_names
180
+
181
+ return d
182
+
183
+ def __setstate__(self, d):
184
+ if '_element_constructor' in d:
185
+ return parent.Parent.__setstate__(self, d)
186
+ try:
187
+ self.__dict__.update(d)
188
+ except (AttributeError,KeyError):
189
+ pass
190
+ self._base = d['_base']
191
+ self._gens = d['_gens']
192
+ self._list = d['_list']
193
+ self._names = d['_names']
194
+ self._latex_names = d['_latex_names']
195
+
196
+ ######################################################################
197
+ # Morphisms of objects with generators
198
+ ######################################################################
199
+
200
+ def hom(self, im_gens, codomain=None, base_map=None, category=None, check=True):
201
+ r"""
202
+ Return the unique homomorphism from ``self`` to codomain that
203
+ sends ``self.gens()`` to the entries of ``im_gens``
204
+ and induces the map ``base_map`` on the base ring.
205
+
206
+ This raises a :exc:`TypeError` if there is no such homomorphism.
207
+
208
+ INPUT:
209
+
210
+ - ``im_gens`` -- the images in the codomain of the generators of
211
+ this object under the homomorphism
212
+
213
+ - ``codomain`` -- the codomain of the homomorphism
214
+
215
+ - ``base_map`` -- a map from the base ring of the domain into something
216
+ that coerces into the codomain
217
+
218
+ - ``category`` -- the category of the resulting morphism
219
+
220
+ - ``check`` -- whether to verify that the images of generators extend
221
+ to define a map (using only canonical coercions)
222
+
223
+ OUTPUT: a homomorphism ``self --> codomain``
224
+
225
+ .. NOTE::
226
+
227
+ As a shortcut, one can also give an object X instead of
228
+ ``im_gens``, in which case return the (if it exists)
229
+ natural map to X.
230
+
231
+ EXAMPLES: Polynomial Ring
232
+ We first illustrate construction of a few homomorphisms
233
+ involving a polynomial ring.
234
+
235
+ ::
236
+
237
+ sage: R.<x> = PolynomialRing(ZZ)
238
+ sage: f = R.hom([5], QQ)
239
+ sage: f(x^2 - 19)
240
+ 6
241
+
242
+ sage: R.<x> = PolynomialRing(QQ)
243
+ sage: f = R.hom([5], GF(7))
244
+ Traceback (most recent call last):
245
+ ...
246
+ ValueError: relations do not all (canonically) map to 0
247
+ under map determined by images of generators
248
+
249
+ sage: # needs sage.rings.finite_rings
250
+ sage: R.<x> = PolynomialRing(GF(7))
251
+ sage: f = R.hom([3], GF(49, 'a'))
252
+ sage: f
253
+ Ring morphism:
254
+ From: Univariate Polynomial Ring in x over Finite Field of size 7
255
+ To: Finite Field in a of size 7^2
256
+ Defn: x |--> 3
257
+ sage: f(x + 6)
258
+ 2
259
+ sage: f(x^2 + 1)
260
+ 3
261
+
262
+ EXAMPLES: Natural morphism
263
+
264
+ ::
265
+
266
+ sage: f = ZZ.hom(GF(5))
267
+ sage: f(7)
268
+ 2
269
+ sage: f
270
+ Natural morphism:
271
+ From: Integer Ring
272
+ To: Finite Field of size 5
273
+
274
+ There might not be a natural morphism, in which case a
275
+ :exc:`TypeError` exception is raised.
276
+
277
+ ::
278
+
279
+ sage: QQ.hom(ZZ)
280
+ Traceback (most recent call last):
281
+ ...
282
+ TypeError: natural coercion morphism from Rational Field to Integer Ring not defined
283
+
284
+ You can specify a map on the base ring::
285
+
286
+ sage: # needs sage.rings.finite_rings
287
+ sage: k = GF(2)
288
+ sage: R.<a> = k[]
289
+ sage: l.<a> = k.extension(a^3 + a^2 + 1)
290
+ sage: R.<b> = l[]
291
+ sage: m.<b> = l.extension(b^2 + b + a)
292
+ sage: n.<z> = GF(2^6)
293
+ sage: m.hom([z^4 + z^3 + 1], base_map=l.hom([z^5 + z^4 + z^2]))
294
+ Ring morphism:
295
+ From: Univariate Quotient Polynomial Ring in b over
296
+ Finite Field in a of size 2^3 with modulus b^2 + b + a
297
+ To: Finite Field in z of size 2^6
298
+ Defn: b |--> z^4 + z^3 + 1
299
+ with map of base ring
300
+ """
301
+ if self._element_constructor is not None:
302
+ return parent.Parent.hom(self, im_gens, codomain, base_map=base_map, category=category, check=check)
303
+ if isinstance(im_gens, parent.Parent):
304
+ return self.Hom(im_gens).natural_map()
305
+ if codomain is None:
306
+ from sage.structure.all import Sequence
307
+ im_gens = Sequence(im_gens)
308
+ codomain = im_gens.universe()
309
+ kwds = {}
310
+ if check is not None:
311
+ kwds['check'] = check
312
+ if base_map is not None:
313
+ kwds['base_map'] = base_map
314
+ Hom_kwds = {} if category is None else {'category': category}
315
+ return self.Hom(codomain, **Hom_kwds)(im_gens, **kwds)
316
+
317
+
318
+ cdef class localvars:
319
+ r"""
320
+ Context manager for safely temporarily changing the variables
321
+ names of an object with generators.
322
+
323
+ Objects with named generators are globally unique in Sage.
324
+ Sometimes, though, it is very useful to be able to temporarily
325
+ display the generators differently. The new Python ``with``
326
+ statement and the localvars context manager make this easy and
327
+ safe (and fun!)
328
+
329
+ Suppose X is any object with generators. Write
330
+
331
+ ::
332
+
333
+ with localvars(X, names[, latex_names] [,normalize=False]):
334
+ some code
335
+ ...
336
+
337
+ and the indented code will be run as if the names in X are changed
338
+ to the new names. If you give normalize=True, then the names are
339
+ assumed to be a tuple of the correct number of strings.
340
+
341
+ EXAMPLES::
342
+
343
+ sage: R.<x,y> = PolynomialRing(QQ, 2)
344
+ sage: with localvars(R, 'z,w'):
345
+ ....: print(x^3 + y^3 - x*y)
346
+ z^3 + w^3 - z*w
347
+
348
+ .. NOTE::
349
+
350
+ I wrote this because it was needed to print elements of the
351
+ quotient of a ring R by an ideal I using the print function for
352
+ elements of R. See the code in
353
+ ``quotient_ring_element.pyx``.
354
+
355
+ AUTHOR:
356
+
357
+ - William Stein (2006-10-31)
358
+ """
359
+ cdef object _obj
360
+ cdef object _names
361
+ cdef object _latex_names
362
+ cdef object _orig
363
+
364
+ def __init__(self, obj, names, latex_names=None, normalize=True):
365
+ self._obj = obj
366
+ if normalize:
367
+ self._names = category_object.normalize_names(obj.ngens(), names)
368
+ self._latex_names = latex_names
369
+ else:
370
+ self._names = names
371
+ self._latex_names = latex_names
372
+
373
+ def __enter__(self):
374
+ self._orig = self._obj._temporarily_change_names(self._names, self._latex_names)
375
+
376
+ def __exit__(self, type, value, traceback):
377
+ self._obj._temporarily_change_names(self._orig[0], self._orig[1])
@@ -0,0 +1,25 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ # ****************************************************************************
3
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 2 of the License, or
8
+ # (at your option) any later version.
9
+ # https://www.gnu.org/licenses/
10
+ # ****************************************************************************
11
+
12
+ cimport sage.structure.parent as parent
13
+ from sage.structure.coerce_dict cimport MonoDict, TripleDict
14
+
15
+
16
+ cdef class Parent(parent.Parent):
17
+ # Cache for __has_coerce_map_from_c()
18
+ cdef MonoDict _has_coerce_map_from
19
+
20
+ cpdef _coerce_c(self, x)
21
+ cdef _coerce_c_impl(self, x)
22
+
23
+ cdef __coerce_map_from_c(self, S)
24
+ cdef __coerce_map_from_c_impl(self, S)
25
+ cdef __has_coerce_map_from_c(self, S)