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
sage/misc/repr.py ADDED
@@ -0,0 +1,203 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ """
3
+ Repr formatting support
4
+ """
5
+
6
+
7
+ def coeff_repr(c, is_latex=False):
8
+ r"""
9
+ String representing coefficients in a linear combination.
10
+
11
+ INPUT:
12
+
13
+ - ``c`` -- a coefficient (i.e., an element of a ring)
14
+
15
+ OUTPUT: string
16
+
17
+ EXAMPLES::
18
+
19
+ sage: from sage.misc.repr import coeff_repr
20
+ sage: coeff_repr(QQ(1/2))
21
+ '1/2'
22
+ sage: coeff_repr(-x^2) # needs sage.symbolic
23
+ '(-x^2)'
24
+ sage: coeff_repr(QQ(1/2), is_latex=True)
25
+ '\\frac{1}{2}'
26
+ sage: coeff_repr(-x^2, is_latex=True) # needs sage.symbolic
27
+ '\\left(-x^{2}\\right)'
28
+ """
29
+ if not is_latex:
30
+ try:
31
+ return c._coeff_repr()
32
+ except AttributeError:
33
+ pass
34
+ if isinstance(c, (int, float)):
35
+ return str(c)
36
+ if is_latex and hasattr(c, '_latex_'):
37
+ s = c._latex_()
38
+ else:
39
+ s = str(c).replace(' ', '')
40
+ if s.find("+") != -1 or s.find("-") != -1:
41
+ if is_latex:
42
+ return "\\left(%s\\right)" % s
43
+ else:
44
+ return "(%s)" % s
45
+ return s
46
+
47
+
48
+ def repr_lincomb(terms, is_latex=False, scalar_mult='*', strip_one=False,
49
+ repr_monomial=None, latex_scalar_mult=None):
50
+ """
51
+ Compute a string representation of a linear combination of some
52
+ formal symbols.
53
+
54
+ INPUT:
55
+
56
+ - ``terms`` -- list of terms, as pairs (support, coefficient)
57
+ - ``is_latex`` -- whether to produce latex (default: ``False``)
58
+ - ``scalar_mult`` -- string representing the multiplication (default: ``'*'``)
59
+ - ``latex_scalar_mult`` -- latex string representing the multiplication
60
+ (default: a space if ``scalar_mult`` is ``'*'``; otherwise ``scalar_mult``)
61
+ - ``coeffs`` -- for backward compatibility
62
+
63
+ EXAMPLES::
64
+
65
+ sage: repr_lincomb([('a',1), ('b',-2), ('c',3)])
66
+ 'a - 2*b + 3*c'
67
+ sage: repr_lincomb([('a',0), ('b',-2), ('c',3)])
68
+ '-2*b + 3*c'
69
+ sage: repr_lincomb([('a',0), ('b',2), ('c',3)])
70
+ '2*b + 3*c'
71
+ sage: repr_lincomb([('a',1), ('b',0), ('c',3)])
72
+ 'a + 3*c'
73
+ sage: repr_lincomb([('a',-1), ('b','2+3*x'), ('c',3)])
74
+ '-a + (2+3*x)*b + 3*c'
75
+ sage: repr_lincomb([('a', '1+x^2'), ('b', '2+3*x'), ('c', 3)])
76
+ '(1+x^2)*a + (2+3*x)*b + 3*c'
77
+ sage: repr_lincomb([('a', '1+x^2'), ('b', '-2+3*x'), ('c', 3)])
78
+ '(1+x^2)*a + (-2+3*x)*b + 3*c'
79
+ sage: repr_lincomb([('a', 1), ('b', -2), ('c', -3)])
80
+ 'a - 2*b - 3*c'
81
+ sage: t = PolynomialRing(RationalField(),'t').gen()
82
+ sage: repr_lincomb([('a', -t), ('s', t - 2), ('', t^2 + 2)])
83
+ '-t*a + (t-2)*s + (t^2+2)'
84
+
85
+ Examples for ``scalar_mult``::
86
+
87
+ sage: repr_lincomb([('a',1), ('b',2), ('c',3)], scalar_mult='*')
88
+ 'a + 2*b + 3*c'
89
+ sage: repr_lincomb([('a',2), ('b',0), ('c',-3)], scalar_mult='**')
90
+ '2**a - 3**c'
91
+ sage: repr_lincomb([('a',-1), ('b',2), ('c',3)], scalar_mult='**')
92
+ '-a + 2**b + 3**c'
93
+
94
+ Examples for ``scalar_mult`` and ``is_latex``::
95
+
96
+ sage: repr_lincomb([('a',-1), ('b',2), ('c',3)], is_latex=True)
97
+ '-a + 2 b + 3 c'
98
+ sage: repr_lincomb([('a',-1), ('b',-1), ('c',3)], is_latex=True, scalar_mult='*')
99
+ '-a - b + 3 c'
100
+ sage: repr_lincomb([('a',-1), ('b',2), ('c',-3)], is_latex=True, scalar_mult='**')
101
+ '-a + 2**b - 3**c'
102
+ sage: repr_lincomb([('a',-2), ('b',-1), ('c',-3)], is_latex=True, latex_scalar_mult='*')
103
+ '-2*a - b - 3*c'
104
+ sage: repr_lincomb([('a',-2), ('b',-1), ('c',-3)], is_latex=True, latex_scalar_mult='')
105
+ '-2a - b - 3c'
106
+
107
+ Examples for ``strip_one``::
108
+
109
+ sage: repr_lincomb([ ('a',1), (1,-2), ('3',3) ])
110
+ 'a - 2*1 + 3*3'
111
+ sage: repr_lincomb([ ('a',-1), (1,1), ('3',3) ])
112
+ '-a + 1 + 3*3'
113
+ sage: repr_lincomb([ ('a',1), (1,-2), ('3',3) ], strip_one = True)
114
+ 'a - 2 + 3*3'
115
+ sage: repr_lincomb([ ('a',-1), (1,1), ('3',3) ], strip_one = True)
116
+ '-a + 1 + 3*3'
117
+ sage: repr_lincomb([ ('a',1), (1,-1), ('3',3) ], strip_one = True)
118
+ 'a - 1 + 3*3'
119
+
120
+ Examples for ``repr_monomial``::
121
+
122
+ sage: repr_lincomb([('a',1), ('b',2), ('c',3)], repr_monomial = lambda s: s+"1")
123
+ 'a1 + 2*b1 + 3*c1'
124
+
125
+ TESTS:
126
+
127
+ Verify that :issue:`31672` is fixed::
128
+
129
+ sage: # needs sage.symbolic
130
+ sage: alpha = var("alpha")
131
+ sage: repr_lincomb([(x, alpha)], is_latex=True)
132
+ '\\alpha x'
133
+ sage: A.<psi> = PolynomialRing(QQ)
134
+ sage: B.<t> = FreeAlgebra(A) # needs sage.combinat sage.modules
135
+ sage: (psi * t)._latex_() # needs sage.combinat sage.modules
136
+ '\\psi t'
137
+ """
138
+ # Setting scalar_mult: symbol used for scalar multiplication
139
+ if is_latex:
140
+ if latex_scalar_mult is not None:
141
+ scalar_mult = latex_scalar_mult
142
+ elif scalar_mult == "*":
143
+ scalar_mult = " "
144
+
145
+ if repr_monomial is None:
146
+ if is_latex:
147
+
148
+ def repr_monomial(monomial):
149
+ return monomial._latex_() if hasattr(monomial, '_latex_') else str(monomial)
150
+ else:
151
+ repr_monomial = str
152
+
153
+ s = ""
154
+ first = True
155
+
156
+ if scalar_mult is None:
157
+ scalar_mult = "" if is_latex else "*"
158
+
159
+ for (monomial, c) in terms:
160
+ if c != 0:
161
+ coeff = coeff_repr(c)
162
+ negative = False
163
+ if len(coeff) and coeff[0] == "-":
164
+ negative = True
165
+ try:
166
+ if c < 0:
167
+ negative = True
168
+ except (NotImplementedError, TypeError):
169
+ # comparisons may not be implemented for some coefficients
170
+ pass
171
+ if negative:
172
+ coeff = coeff_repr(-c, is_latex)
173
+ else:
174
+ coeff = coeff_repr(c, is_latex)
175
+ if coeff == "1":
176
+ coeff = ""
177
+ if coeff != "0":
178
+ if negative:
179
+ if first:
180
+ sign = "-" # add trailing space?
181
+ else:
182
+ sign = " - "
183
+ else:
184
+ if first:
185
+ sign = ""
186
+ else:
187
+ sign = " + "
188
+ b = repr_monomial(monomial)
189
+ if len(b):
190
+ if coeff != "":
191
+ if b == "1" and strip_one:
192
+ b = ""
193
+ else:
194
+ b = scalar_mult + b
195
+ s += "%s%s%s" % (sign, coeff, b)
196
+ first = False
197
+ if first:
198
+ return "0"
199
+ # this can happen only if are only terms with coeff_repr(c) == "0"
200
+ # elif s == "":
201
+ # return "1" # is empty string representation invalid?
202
+ else:
203
+ return s
Binary file
sage/misc/reset.pyx ADDED
@@ -0,0 +1,196 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ # cython: old_style_globals=True
3
+ """
4
+ Interpreter reset
5
+ """
6
+ import sys
7
+
8
+ # Exclude these from the reset command.
9
+ # DATA, base64 -- needed by the notebook
10
+ # Add exit and quit to EXCLUDE to resolve Issue #22529 and Issue #16704
11
+ EXCLUDE = set(['sage_mode', '__DIR__', 'DIR', 'DATA', 'base64', 'exit', 'quit'])
12
+
13
+
14
+ def reset(vars=None, attached=False):
15
+ """
16
+ Delete all user-defined variables, reset all global variables
17
+ back to their default states, and reset all interfaces to other
18
+ computer algebra systems.
19
+
20
+ If vars is specified, just restore the value of vars and leave
21
+ all other variables alone (i.e., call restore).
22
+
23
+ Note that the variables in the set :obj:`sage.misc.reset.EXCLUDE` are
24
+ excluded from being reset.
25
+
26
+ INPUT:
27
+
28
+ - ``vars`` -- list or space or comma separated string (default:
29
+ ``None``); variables to restore
30
+
31
+ - ``attached`` -- boolean (default: ``False``); if ``vars`` is not ``None``,
32
+ whether to detach all attached files
33
+
34
+ EXAMPLES::
35
+
36
+ sage: x = 5
37
+ sage: reset()
38
+ sage: x # needs sage.symbolic
39
+ x
40
+
41
+ sage: fn = tmp_filename(ext='.py')
42
+ sage: sage.misc.reset.EXCLUDE.add('fn')
43
+ sage: with open(fn, 'w') as f:
44
+ ....: _ = f.write('a = 111')
45
+ sage: attach(fn)
46
+ sage: af = attached_files(); len(af)
47
+ 1
48
+ sage: af == [fn]
49
+ True
50
+ sage: reset()
51
+ sage: af = attached_files(); len(af)
52
+ 1
53
+ sage: reset(attached=True)
54
+ sage: af = attached_files(); len(af)
55
+ 0
56
+ sage: sage.misc.reset.EXCLUDE.remove('fn')
57
+
58
+ TESTS:
59
+
60
+ Confirm that assumptions do not survive a reset (:issue:`10855`)::
61
+
62
+ sage: # needs sage.symbolic
63
+ sage: assume(x > 3)
64
+ sage: assumptions()
65
+ [x > 3]
66
+ sage: bool(x > 3)
67
+ True
68
+ sage: reset()
69
+ sage: assumptions()
70
+ []
71
+ sage: bool(x > 3)
72
+ False
73
+ """
74
+ if vars is not None:
75
+ restore(vars)
76
+ return
77
+ G = globals() # this is the reason the code must be in Cython.
78
+ T = type(sys)
79
+ for k in list(G):
80
+ if k[0] != '_' and not isinstance(k, T) and k not in EXCLUDE:
81
+ try:
82
+ del G[k]
83
+ except KeyError:
84
+ pass
85
+ restore()
86
+ try:
87
+ from sage.symbolic.assumptions import forget
88
+ except ImportError:
89
+ pass
90
+ else:
91
+ forget()
92
+ reset_interfaces()
93
+ if attached:
94
+ import sage.repl.attach
95
+ sage.repl.attach.reset()
96
+
97
+
98
+ def restore(vars=None):
99
+ """
100
+ Restore predefined global variables to their default values.
101
+
102
+ INPUT:
103
+
104
+ - ``vars`` -- string or list (default: ``None``); if not ``None``, restores
105
+ just the given variables to the default value
106
+
107
+ EXAMPLES::
108
+
109
+ sage: x = 10; y = 15/3; QQ='red'
110
+ sage: QQ
111
+ 'red'
112
+ sage: restore('QQ')
113
+ sage: QQ
114
+ Rational Field
115
+ sage: x
116
+ 10
117
+ sage: y = var('y') # needs sage.symbolic
118
+ sage: restore('x y')
119
+ sage: x # needs sage.symbolic
120
+ x
121
+ sage: y
122
+ Traceback (most recent call last):
123
+ ...
124
+ NameError: name 'y' is not defined
125
+ sage: x = 10; y = 15/3; QQ='red'
126
+ sage: ww = 15
127
+ sage: restore()
128
+ sage: x, QQ, ww # needs sage.symbolic
129
+ (x, Rational Field, 15)
130
+ sage: restore('ww')
131
+ sage: ww
132
+ Traceback (most recent call last):
133
+ ...
134
+ NameError: name 'ww' is not defined
135
+ """
136
+ G = globals() # this is the reason the code must be in Cython.
137
+ if 'sage_mode' not in G:
138
+ try:
139
+ import sage.all as toplevel
140
+ except ImportError:
141
+ try:
142
+ import sage.all__sagemath_polyhedra as toplevel
143
+ except ImportError:
144
+ try:
145
+ import sage.all__sagemath_symbolics as toplevel
146
+ except ImportError:
147
+ try:
148
+ import sage.all__sagemath_modules as toplevel
149
+ except ImportError:
150
+ try:
151
+ import sage.all__sagemath_categories as toplevel
152
+ except ImportError:
153
+ import sage.all__sagemath_objects as toplevel
154
+ else:
155
+ mode = G['sage_mode']
156
+ if mode == 'cmdline':
157
+ import sage.all_cmdline as toplevel
158
+ else:
159
+ import sage.all as toplevel
160
+ D = toplevel.__dict__
161
+ _restore(G, D, vars)
162
+ try:
163
+ import sage.calculus.calculus
164
+ except ImportError:
165
+ pass
166
+ else:
167
+ _restore(sage.calculus.calculus.syms_cur, sage.calculus.calculus.syms_default, vars)
168
+
169
+
170
+ def _restore(G, D, vars):
171
+ if vars is None:
172
+ for k, v in D.iteritems():
173
+ G[k] = v
174
+ else:
175
+ if isinstance(vars, str):
176
+ if ',' in vars:
177
+ vars = vars.split(',')
178
+ else:
179
+ vars = vars.split()
180
+ for k in vars:
181
+ if k in D:
182
+ G[k] = D[k]
183
+ else:
184
+ try:
185
+ del G[k] # the default value was "unset"
186
+ except KeyError:
187
+ pass
188
+
189
+
190
+ def reset_interfaces():
191
+ try:
192
+ from sage.interfaces.quit import expect_quitall
193
+ except ImportError:
194
+ pass
195
+ else:
196
+ expect_quitall()