passagemath-objects 10.8.1a3__cp314-cp314-win_amd64.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 (283) hide show
  1. passagemath_objects/__init__.py +3 -0
  2. passagemath_objects-10.8.1a3.dist-info/DELVEWHEEL +2 -0
  3. passagemath_objects-10.8.1a3.dist-info/METADATA +114 -0
  4. passagemath_objects-10.8.1a3.dist-info/RECORD +283 -0
  5. passagemath_objects-10.8.1a3.dist-info/WHEEL +5 -0
  6. passagemath_objects-10.8.1a3.dist-info/top_level.txt +3 -0
  7. passagemath_objects.libs/libgmp-10-60021eeab4282b29024e43b2b1412b53.dll +0 -0
  8. sage/all__sagemath_objects.py +46 -0
  9. sage/arith/all__sagemath_objects.py +5 -0
  10. sage/arith/long.pxd +411 -0
  11. sage/arith/numerical_approx.cp314-win_amd64.pyd +0 -0
  12. sage/arith/numerical_approx.pxd +35 -0
  13. sage/arith/numerical_approx.pyx +75 -0
  14. sage/arith/power.cp314-win_amd64.pyd +0 -0
  15. sage/arith/power.pxd +31 -0
  16. sage/arith/power.pyx +127 -0
  17. sage/categories/action.cp314-win_amd64.pyd +0 -0
  18. sage/categories/action.pxd +29 -0
  19. sage/categories/action.pyx +641 -0
  20. sage/categories/algebra_functor.py +745 -0
  21. sage/categories/all__sagemath_objects.py +33 -0
  22. sage/categories/basic.py +71 -0
  23. sage/categories/cartesian_product.py +292 -0
  24. sage/categories/category.py +3379 -0
  25. sage/categories/category_cy_helper.cp314-win_amd64.pyd +0 -0
  26. sage/categories/category_cy_helper.pxd +8 -0
  27. sage/categories/category_cy_helper.pyx +322 -0
  28. sage/categories/category_singleton.cp314-win_amd64.pyd +0 -0
  29. sage/categories/category_singleton.pxd +3 -0
  30. sage/categories/category_singleton.pyx +343 -0
  31. sage/categories/category_types.py +637 -0
  32. sage/categories/category_with_axiom.py +2889 -0
  33. sage/categories/covariant_functorial_construction.py +700 -0
  34. sage/categories/facade_sets.py +228 -0
  35. sage/categories/functor.cp314-win_amd64.pyd +0 -0
  36. sage/categories/functor.pxd +7 -0
  37. sage/categories/functor.pyx +659 -0
  38. sage/categories/homset.py +1289 -0
  39. sage/categories/homsets.py +364 -0
  40. sage/categories/isomorphic_objects.py +73 -0
  41. sage/categories/map.cp314-win_amd64.pyd +0 -0
  42. sage/categories/map.pxd +34 -0
  43. sage/categories/map.pyx +2106 -0
  44. sage/categories/morphism.cp314-win_amd64.pyd +0 -0
  45. sage/categories/morphism.pxd +14 -0
  46. sage/categories/morphism.pyx +895 -0
  47. sage/categories/objects.py +167 -0
  48. sage/categories/primer.py +1695 -0
  49. sage/categories/pushout.py +4847 -0
  50. sage/categories/quotients.py +64 -0
  51. sage/categories/realizations.py +200 -0
  52. sage/categories/sets_cat.py +3305 -0
  53. sage/categories/sets_with_partial_maps.py +52 -0
  54. sage/categories/subobjects.py +64 -0
  55. sage/categories/subquotients.py +21 -0
  56. sage/categories/with_realizations.py +311 -0
  57. sage/cpython/__init__.py +22 -0
  58. sage/cpython/_py2_random.py +619 -0
  59. sage/cpython/all.py +3 -0
  60. sage/cpython/atexit.cp314-win_amd64.pyd +0 -0
  61. sage/cpython/atexit.pyx +269 -0
  62. sage/cpython/builtin_types.cp314-win_amd64.pyd +0 -0
  63. sage/cpython/builtin_types.pyx +7 -0
  64. sage/cpython/cython_metaclass.cp314-win_amd64.pyd +0 -0
  65. sage/cpython/cython_metaclass.h +117 -0
  66. sage/cpython/cython_metaclass.pxd +3 -0
  67. sage/cpython/cython_metaclass.pyx +130 -0
  68. sage/cpython/debug.cp314-win_amd64.pyd +0 -0
  69. sage/cpython/debug.pyx +302 -0
  70. sage/cpython/dict_del_by_value.cp314-win_amd64.pyd +0 -0
  71. sage/cpython/dict_del_by_value.pxd +9 -0
  72. sage/cpython/dict_del_by_value.pyx +191 -0
  73. sage/cpython/dict_internal.h +80 -0
  74. sage/cpython/getattr.cp314-win_amd64.pyd +0 -0
  75. sage/cpython/getattr.pxd +9 -0
  76. sage/cpython/getattr.pyx +439 -0
  77. sage/cpython/pycore_long.h +97 -0
  78. sage/cpython/pycore_long.pxd +10 -0
  79. sage/cpython/python_debug.h +44 -0
  80. sage/cpython/python_debug.pxd +47 -0
  81. sage/cpython/pyx_visit.h +13 -0
  82. sage/cpython/string.cp314-win_amd64.pyd +0 -0
  83. sage/cpython/string.pxd +76 -0
  84. sage/cpython/string.pyx +34 -0
  85. sage/cpython/string_impl.h +60 -0
  86. sage/cpython/type.cp314-win_amd64.pyd +0 -0
  87. sage/cpython/type.pxd +2 -0
  88. sage/cpython/type.pyx +40 -0
  89. sage/cpython/wrapperdescr.pxd +67 -0
  90. sage/ext/all__sagemath_objects.py +3 -0
  91. sage/ext/ccobject.h +64 -0
  92. sage/ext/cplusplus.pxd +17 -0
  93. sage/ext/mod_int.h +30 -0
  94. sage/ext/mod_int.pxd +24 -0
  95. sage/ext/stdsage.pxd +39 -0
  96. sage/groups/all__sagemath_objects.py +1 -0
  97. sage/groups/group.cp314-win_amd64.pyd +0 -0
  98. sage/groups/group.pxd +14 -0
  99. sage/groups/group.pyx +296 -0
  100. sage/groups/old.cp314-win_amd64.pyd +0 -0
  101. sage/groups/old.pxd +14 -0
  102. sage/groups/old.pyx +219 -0
  103. sage/libs/all__sagemath_objects.py +3 -0
  104. sage/libs/gmp/__init__.py +1 -0
  105. sage/libs/gmp/all.pxd +6 -0
  106. sage/libs/gmp/binop.pxd +23 -0
  107. sage/libs/gmp/misc.pxd +8 -0
  108. sage/libs/gmp/mpf.pxd +88 -0
  109. sage/libs/gmp/mpn.pxd +57 -0
  110. sage/libs/gmp/mpq.pxd +57 -0
  111. sage/libs/gmp/mpz.pxd +202 -0
  112. sage/libs/gmp/pylong.cp314-win_amd64.pyd +0 -0
  113. sage/libs/gmp/pylong.pxd +12 -0
  114. sage/libs/gmp/pylong.pyx +150 -0
  115. sage/libs/gmp/random.pxd +25 -0
  116. sage/libs/gmp/randomize.pxd +59 -0
  117. sage/libs/gmp/types.pxd +53 -0
  118. sage/libs/gmpxx.pxd +19 -0
  119. sage/misc/abstract_method.py +276 -0
  120. sage/misc/all__sagemath_objects.py +43 -0
  121. sage/misc/bindable_class.py +253 -0
  122. sage/misc/c3_controlled.cp314-win_amd64.pyd +0 -0
  123. sage/misc/c3_controlled.pxd +2 -0
  124. sage/misc/c3_controlled.pyx +1402 -0
  125. sage/misc/cachefunc.cp314-win_amd64.pyd +0 -0
  126. sage/misc/cachefunc.pxd +43 -0
  127. sage/misc/cachefunc.pyx +3801 -0
  128. sage/misc/call.py +188 -0
  129. sage/misc/classcall_metaclass.cp314-win_amd64.pyd +0 -0
  130. sage/misc/classcall_metaclass.pxd +14 -0
  131. sage/misc/classcall_metaclass.pyx +599 -0
  132. sage/misc/constant_function.cp314-win_amd64.pyd +0 -0
  133. sage/misc/constant_function.pyx +130 -0
  134. sage/misc/decorators.py +739 -0
  135. sage/misc/fast_methods.cp314-win_amd64.pyd +0 -0
  136. sage/misc/fast_methods.pxd +20 -0
  137. sage/misc/fast_methods.pyx +351 -0
  138. sage/misc/flatten.py +90 -0
  139. sage/misc/fpickle.cp314-win_amd64.pyd +0 -0
  140. sage/misc/fpickle.pyx +176 -0
  141. sage/misc/function_mangling.cp314-win_amd64.pyd +0 -0
  142. sage/misc/function_mangling.pxd +11 -0
  143. sage/misc/function_mangling.pyx +308 -0
  144. sage/misc/inherit_comparison.cp314-win_amd64.pyd +0 -0
  145. sage/misc/inherit_comparison.pxd +5 -0
  146. sage/misc/inherit_comparison.pyx +105 -0
  147. sage/misc/instancedoc.cp314-win_amd64.pyd +0 -0
  148. sage/misc/instancedoc.pyx +331 -0
  149. sage/misc/lazy_attribute.cp314-win_amd64.pyd +0 -0
  150. sage/misc/lazy_attribute.pyx +607 -0
  151. sage/misc/lazy_format.py +132 -0
  152. sage/misc/lazy_import.cp314-win_amd64.pyd +0 -0
  153. sage/misc/lazy_import.pxd +13 -0
  154. sage/misc/lazy_import.pyx +1307 -0
  155. sage/misc/lazy_import_cache.py +36 -0
  156. sage/misc/lazy_list.cp314-win_amd64.pyd +0 -0
  157. sage/misc/lazy_list.pxd +19 -0
  158. sage/misc/lazy_list.pyx +1187 -0
  159. sage/misc/lazy_string.cp314-win_amd64.pyd +0 -0
  160. sage/misc/lazy_string.pxd +7 -0
  161. sage/misc/lazy_string.pyx +546 -0
  162. sage/misc/misc.py +980 -0
  163. sage/misc/misc_c.cp314-win_amd64.pyd +0 -0
  164. sage/misc/misc_c.pxd +3 -0
  165. sage/misc/misc_c.pyx +765 -0
  166. sage/misc/namespace_package.py +37 -0
  167. sage/misc/nested_class.cp314-win_amd64.pyd +0 -0
  168. sage/misc/nested_class.pxd +3 -0
  169. sage/misc/nested_class.pyx +394 -0
  170. sage/misc/persist.cp314-win_amd64.pyd +0 -0
  171. sage/misc/persist.pyx +1279 -0
  172. sage/misc/prandom.py +418 -0
  173. sage/misc/randstate.cp314-win_amd64.pyd +0 -0
  174. sage/misc/randstate.pxd +31 -0
  175. sage/misc/randstate.pyx +1096 -0
  176. sage/misc/repr.py +203 -0
  177. sage/misc/reset.cp314-win_amd64.pyd +0 -0
  178. sage/misc/reset.pyx +196 -0
  179. sage/misc/sage_ostools.cp314-win_amd64.pyd +0 -0
  180. sage/misc/sage_ostools.pyx +323 -0
  181. sage/misc/sage_timeit.py +275 -0
  182. sage/misc/sage_timeit_class.cp314-win_amd64.pyd +0 -0
  183. sage/misc/sage_timeit_class.pyx +120 -0
  184. sage/misc/sage_unittest.py +639 -0
  185. sage/misc/sageinspect.py +2792 -0
  186. sage/misc/session.cp314-win_amd64.pyd +0 -0
  187. sage/misc/session.pyx +392 -0
  188. sage/misc/superseded.py +576 -0
  189. sage/misc/test_nested_class.py +228 -0
  190. sage/misc/timing.py +264 -0
  191. sage/misc/unknown.py +222 -0
  192. sage/misc/verbose.py +253 -0
  193. sage/misc/weak_dict.cp314-win_amd64.pyd +0 -0
  194. sage/misc/weak_dict.pxd +15 -0
  195. sage/misc/weak_dict.pyx +1197 -0
  196. sage/modules/all__sagemath_objects.py +1 -0
  197. sage/modules/module.cp314-win_amd64.pyd +0 -0
  198. sage/modules/module.pxd +5 -0
  199. sage/modules/module.pyx +329 -0
  200. sage/rings/all__sagemath_objects.py +3 -0
  201. sage/rings/integer_fake.h +22 -0
  202. sage/rings/integer_fake.pxd +55 -0
  203. sage/rings/integer_fake.pyi +8 -0
  204. sage/sets/all__sagemath_objects.py +3 -0
  205. sage/sets/pythonclass.cp314-win_amd64.pyd +0 -0
  206. sage/sets/pythonclass.pxd +9 -0
  207. sage/sets/pythonclass.pyx +247 -0
  208. sage/structure/__init__.py +13 -0
  209. sage/structure/all.py +30 -0
  210. sage/structure/category_object.cp314-win_amd64.pyd +0 -0
  211. sage/structure/category_object.pxd +28 -0
  212. sage/structure/category_object.pyx +1090 -0
  213. sage/structure/coerce.cp314-win_amd64.pyd +0 -0
  214. sage/structure/coerce.pxd +44 -0
  215. sage/structure/coerce.pyx +2113 -0
  216. sage/structure/coerce_actions.cp314-win_amd64.pyd +0 -0
  217. sage/structure/coerce_actions.pxd +27 -0
  218. sage/structure/coerce_actions.pyx +988 -0
  219. sage/structure/coerce_dict.cp314-win_amd64.pyd +0 -0
  220. sage/structure/coerce_dict.pxd +51 -0
  221. sage/structure/coerce_dict.pyx +1557 -0
  222. sage/structure/coerce_exceptions.py +23 -0
  223. sage/structure/coerce_maps.cp314-win_amd64.pyd +0 -0
  224. sage/structure/coerce_maps.pxd +24 -0
  225. sage/structure/coerce_maps.pyx +656 -0
  226. sage/structure/debug_options.cp314-win_amd64.pyd +0 -0
  227. sage/structure/debug_options.pxd +6 -0
  228. sage/structure/debug_options.pyx +54 -0
  229. sage/structure/dynamic_class.py +541 -0
  230. sage/structure/element.cp314-win_amd64.pyd +0 -0
  231. sage/structure/element.pxd +271 -0
  232. sage/structure/element.pyx +4584 -0
  233. sage/structure/element_wrapper.cp314-win_amd64.pyd +0 -0
  234. sage/structure/element_wrapper.pxd +12 -0
  235. sage/structure/element_wrapper.pyx +582 -0
  236. sage/structure/factorization.py +1457 -0
  237. sage/structure/factorization_integer.py +154 -0
  238. sage/structure/factory.cp314-win_amd64.pyd +0 -0
  239. sage/structure/factory.pyx +863 -0
  240. sage/structure/formal_sum.py +489 -0
  241. sage/structure/gens_py.py +73 -0
  242. sage/structure/global_options.py +1725 -0
  243. sage/structure/indexed_generators.py +863 -0
  244. sage/structure/list_clone.cp314-win_amd64.pyd +0 -0
  245. sage/structure/list_clone.pxd +65 -0
  246. sage/structure/list_clone.pyx +1867 -0
  247. sage/structure/list_clone_demo.cp314-win_amd64.pyd +0 -0
  248. sage/structure/list_clone_demo.pyx +248 -0
  249. sage/structure/list_clone_timings.py +179 -0
  250. sage/structure/list_clone_timings_cy.cp314-win_amd64.pyd +0 -0
  251. sage/structure/list_clone_timings_cy.pyx +86 -0
  252. sage/structure/mutability.cp314-win_amd64.pyd +0 -0
  253. sage/structure/mutability.pxd +21 -0
  254. sage/structure/mutability.pyx +346 -0
  255. sage/structure/nonexact.py +69 -0
  256. sage/structure/parent.cp314-win_amd64.pyd +0 -0
  257. sage/structure/parent.pxd +112 -0
  258. sage/structure/parent.pyx +3087 -0
  259. sage/structure/parent_base.cp314-win_amd64.pyd +0 -0
  260. sage/structure/parent_base.pxd +13 -0
  261. sage/structure/parent_base.pyx +35 -0
  262. sage/structure/parent_gens.cp314-win_amd64.pyd +0 -0
  263. sage/structure/parent_gens.pxd +22 -0
  264. sage/structure/parent_gens.pyx +374 -0
  265. sage/structure/parent_old.cp314-win_amd64.pyd +0 -0
  266. sage/structure/parent_old.pxd +24 -0
  267. sage/structure/parent_old.pyx +278 -0
  268. sage/structure/proof/__init__.py +1 -0
  269. sage/structure/proof/all.py +243 -0
  270. sage/structure/proof/proof.py +300 -0
  271. sage/structure/richcmp.cp314-win_amd64.pyd +0 -0
  272. sage/structure/richcmp.pxd +212 -0
  273. sage/structure/richcmp.pyx +494 -0
  274. sage/structure/sage_object.cp314-win_amd64.pyd +0 -0
  275. sage/structure/sage_object.pxd +3 -0
  276. sage/structure/sage_object.pyx +1088 -0
  277. sage/structure/sage_object_test.py +19 -0
  278. sage/structure/sequence.py +937 -0
  279. sage/structure/set_factories.py +1178 -0
  280. sage/structure/set_factories_example.py +527 -0
  281. sage/structure/support_view.py +164 -0
  282. sage/structure/test_factory.py +56 -0
  283. sage/structure/unique_representation.py +1443 -0
sage/groups/group.pyx ADDED
@@ -0,0 +1,296 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ """
3
+ Base class for groups
4
+ """
5
+
6
+ # ****************************************************************************
7
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # This code is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # The full text of the GPL is available at:
17
+ #
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+ from sage.rings.infinity import infinity
21
+ from sage.structure.parent cimport Parent
22
+
23
+
24
+ cdef class Group(Parent):
25
+ """
26
+ Base class for all groups.
27
+
28
+ TESTS::
29
+
30
+ sage: from sage.groups.group import Group
31
+ sage: G = Group()
32
+ sage: TestSuite(G).run(skip = ["_test_an_element",\
33
+ ....: "_test_associativity",\
34
+ ....: "_test_elements",\
35
+ ....: "_test_elements_eq_reflexive",\
36
+ ....: "_test_elements_eq_symmetric",\
37
+ ....: "_test_elements_eq_transitive",\
38
+ ....: "_test_elements_neq",\
39
+ ....: "_test_inverse",\
40
+ ....: "_test_one",\
41
+ ....: "_test_pickling",\
42
+ ....: "_test_prod",\
43
+ ....: "_test_some_elements"])
44
+
45
+ Generic groups have very little functionality::
46
+
47
+ sage: 4 in G
48
+ Traceback (most recent call last):
49
+ ...
50
+ NotImplementedError: cannot construct elements of <sage.groups.group.Group object at ...>
51
+ """
52
+ def __init__(self, base=None, category=None):
53
+ """
54
+ The Python constructor.
55
+
56
+ TESTS::
57
+
58
+ sage: from sage.groups.group import Group
59
+ sage: G = Group()
60
+ sage: G.category()
61
+ Category of groups
62
+ sage: G = Group(category=Groups()) # todo: do the same test with some subcategory of Groups when there will exist one
63
+ sage: G.category()
64
+ Category of groups
65
+ sage: G = Group(category=CommutativeAdditiveGroups())
66
+ Traceback (most recent call last):
67
+ ...
68
+ ValueError: (Category of commutative additive groups,) is not a subcategory of Category of groups
69
+ sage: G._repr_option('element_is_atomic')
70
+ False
71
+
72
+ Check for :issue:`8119`::
73
+
74
+ sage: # needs sage.groups
75
+ sage: G = SymmetricGroup(2)
76
+ sage: h = hash(G)
77
+ sage: G.rename('S2')
78
+ sage: h == hash(G)
79
+ True
80
+ """
81
+ from sage.categories.groups import Groups
82
+ if category is None:
83
+ category = Groups()
84
+ else:
85
+ if not isinstance(category, tuple):
86
+ category = (category,)
87
+ if not any(cat.is_subcategory(Groups()) for cat in category):
88
+ raise ValueError("%s is not a subcategory of %s" % (category, Groups()))
89
+ Parent.__init__(self, base=base, category=category)
90
+
91
+ def is_abelian(self) -> bool:
92
+ """
93
+ Test whether this group is abelian.
94
+
95
+ EXAMPLES::
96
+
97
+ sage: from sage.groups.group import Group
98
+ sage: G = Group()
99
+ sage: G.is_abelian()
100
+ Traceback (most recent call last):
101
+ ...
102
+ NotImplementedError
103
+ """
104
+ raise NotImplementedError
105
+
106
+ def is_commutative(self) -> bool:
107
+ r"""
108
+ Test whether this group is commutative.
109
+
110
+ This is an alias for is_abelian, largely to make groups work
111
+ well with the Factorization class.
112
+
113
+ (Note for developers: Derived classes should override is_abelian, not
114
+ is_commutative.)
115
+
116
+ EXAMPLES::
117
+
118
+ sage: SL(2, 7).is_commutative() # needs sage.libs.gap sage.modules sage.rings.finite_rings
119
+ False
120
+ """
121
+ return self.is_abelian()
122
+
123
+ def order(self):
124
+ """
125
+ Return the number of elements of this group.
126
+
127
+ This is either a positive integer or infinity.
128
+
129
+ EXAMPLES::
130
+
131
+ sage: from sage.groups.group import Group
132
+ sage: G = Group()
133
+ sage: G.order()
134
+ Traceback (most recent call last):
135
+ ...
136
+ NotImplementedError
137
+
138
+ TESTS::
139
+
140
+ sage: H = SL(2, QQ) # needs sage.modules
141
+ sage: H.order() # needs sage.modules
142
+ +Infinity
143
+ """
144
+ try:
145
+ return self.cardinality()
146
+ except AttributeError:
147
+ raise NotImplementedError
148
+
149
+ def is_finite(self):
150
+ """
151
+ Return ``True`` if this group is finite.
152
+
153
+ EXAMPLES::
154
+
155
+ sage: from sage.groups.group import Group
156
+ sage: G = Group()
157
+ sage: G.is_finite()
158
+ Traceback (most recent call last):
159
+ ...
160
+ NotImplementedError
161
+ """
162
+ return self.order() != infinity
163
+
164
+ def is_trivial(self):
165
+ r"""
166
+ Return ``True`` if this group is the trivial group.
167
+
168
+ A group is trivial, if it consists only of the identity
169
+ element.
170
+
171
+ .. WARNING::
172
+
173
+ It is in principle undecidable whether a group is
174
+ trivial, for example, if the group is given by a finite
175
+ presentation. Thus, this method may not terminate.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: groups.presentation.Cyclic(1).is_trivial() # needs sage.groups
180
+ True
181
+
182
+ sage: # needs sage.groups
183
+ sage: G.<a,b> = FreeGroup('a, b')
184
+ sage: H = G / (a^2, b^3, a*b*~a*~b)
185
+ sage: H.is_trivial()
186
+ False
187
+
188
+ A non-trivial presentation of the trivial group::
189
+
190
+ sage: # needs sage.groups
191
+ sage: F.<a,b> = FreeGroup()
192
+ sage: J = F / ((~a)*b*a*(~b)^2, (~b)*a*b*(~a)^2)
193
+ sage: J.is_trivial()
194
+ True
195
+ """
196
+ return self.order() == 1
197
+
198
+ def is_multiplicative(self):
199
+ r"""
200
+ Return ``True`` if the group operation is given by ``*`` (rather than ``+``).
201
+
202
+ Override for additive groups.
203
+
204
+ EXAMPLES::
205
+
206
+ sage: from sage.groups.group import Group
207
+ sage: G = Group()
208
+ sage: G.is_multiplicative()
209
+ True
210
+ """
211
+ return True
212
+
213
+ def _an_element_(self):
214
+ """
215
+ Return an element.
216
+
217
+ OUTPUT: an element of the group
218
+
219
+ EXAMPLES::
220
+
221
+ sage: G = AbelianGroup([2,3,4,5]) # needs sage.modules
222
+ sage: G.an_element() # needs sage.modules
223
+ f0*f1*f2*f3
224
+ """
225
+ return self.prod(self.gens())
226
+
227
+ def quotient(self, H, **kwds):
228
+ """
229
+ Return the quotient of this group by the normal subgroup `H`.
230
+
231
+ EXAMPLES::
232
+
233
+ sage: from sage.groups.group import Group
234
+ sage: G = Group()
235
+ sage: G.quotient(G)
236
+ Traceback (most recent call last):
237
+ ...
238
+ NotImplementedError
239
+ """
240
+ raise NotImplementedError
241
+
242
+ cdef class AbelianGroup(Group):
243
+ """
244
+ Generic abelian group.
245
+ """
246
+ def is_abelian(self) -> bool:
247
+ """
248
+ Return ``True``.
249
+
250
+ EXAMPLES::
251
+
252
+ sage: from sage.groups.group import AbelianGroup
253
+ sage: G = AbelianGroup()
254
+ sage: G.is_abelian()
255
+ True
256
+ """
257
+ return True
258
+
259
+ cdef class FiniteGroup(Group):
260
+ """
261
+ Generic finite group.
262
+ """
263
+
264
+ def __init__(self, base=None, category=None):
265
+ """
266
+ The Python constructor.
267
+
268
+ TESTS::
269
+
270
+ sage: from sage.groups.group import FiniteGroup
271
+ sage: G = FiniteGroup()
272
+ sage: G.category()
273
+ Category of finite groups
274
+ """
275
+ from sage.categories.finite_groups import FiniteGroups
276
+ if category is None:
277
+ category = FiniteGroups()
278
+ else:
279
+ if not isinstance(category, tuple):
280
+ category = (category,)
281
+ if not any(cat.is_subcategory(FiniteGroups()) for cat in category):
282
+ raise ValueError("%s is not a subcategory of %s" % (category, FiniteGroups()))
283
+ Parent.__init__(self, base=base, category=category)
284
+
285
+ def is_finite(self):
286
+ """
287
+ Return ``True``.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: from sage.groups.group import FiniteGroup
292
+ sage: G = FiniteGroup()
293
+ sage: G.is_finite()
294
+ True
295
+ """
296
+ return True
Binary file
sage/groups/old.pxd ADDED
@@ -0,0 +1,14 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ cimport sage.structure.parent_gens
3
+
4
+ cdef class Group(sage.structure.parent.Parent):
5
+ pass
6
+
7
+ cdef class AbelianGroup(Group):
8
+ pass
9
+
10
+ cdef class FiniteGroup(Group):
11
+ pass
12
+
13
+ cdef class AlgebraicGroup(Group):
14
+ pass
sage/groups/old.pyx ADDED
@@ -0,0 +1,219 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ """
3
+ Deprecated base class for groups
4
+ """
5
+
6
+ # ****************************************************************************
7
+ # Copyright (C) 2005 William Stein <wstein@gmail.com>
8
+ #
9
+ # Distributed under the terms of the GNU General Public License (GPL)
10
+ #
11
+ # This code is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # General Public License for more details.
15
+ #
16
+ # The full text of the GPL is available at:
17
+ #
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ doc = """
22
+ Deprecated base class for all groups
23
+ """
24
+ import sage.rings.integer_ring
25
+ from sage.misc.superseded import deprecation
26
+
27
+
28
+ cdef class Group(sage.structure.parent.Parent):
29
+ """
30
+ Generic group class.
31
+ """
32
+ def __init__(self, category=None):
33
+ """
34
+
35
+ TESTS::
36
+
37
+ sage: from sage.groups.old import Group
38
+ sage: G = Group()
39
+ doctest:warning...:
40
+ DeprecationWarning: do not use the old Group class
41
+ See https://github.com/sagemath/sage/issues/37449 for details.
42
+ sage: G.category()
43
+ Category of groups
44
+ sage: G = Group(category = Groups()) # todo: do the same test with some subcategory of Groups when there will exist one
45
+ sage: G.category()
46
+ Category of groups
47
+ sage: G = Group(category = CommutativeAdditiveGroups())
48
+ Traceback (most recent call last):
49
+ ...
50
+ AssertionError: Category of commutative additive groups is not a subcategory of Category of groups
51
+
52
+ Check for :issue:`8119`::
53
+
54
+ sage: # needs sage.groups
55
+ sage: G = SymmetricGroup(2)
56
+ sage: h = hash(G)
57
+ sage: G.rename('S2')
58
+ sage: h == hash(G)
59
+ True
60
+ """
61
+ deprecation(37449, 'do not use the old Group class')
62
+ from sage.categories.basic import Groups
63
+ if category is None:
64
+ category = Groups()
65
+ else:
66
+ assert category.is_subcategory(Groups()), "%s is not a subcategory of %s" % (category, Groups())
67
+
68
+ sage.structure.parent.Parent.__init__(self,
69
+ base=sage.rings.integer_ring.ZZ, category=category)
70
+
71
+ def __contains__(self, x):
72
+ r"""
73
+ Return ``True`` if coercion of ``x`` into ``self`` is defined.
74
+
75
+ EXAMPLES::
76
+
77
+ sage: from sage.groups.old import Group
78
+ sage: G = Group()
79
+ sage: 4 in G #indirect doctest
80
+ Traceback (most recent call last):
81
+ ...
82
+ NotImplementedError: cannot construct elements of <sage.groups.old.Group object at ...>
83
+ """
84
+ try:
85
+ self(x)
86
+ except TypeError:
87
+ return False
88
+ return True
89
+
90
+ def is_abelian(self):
91
+ """
92
+ Return ``True`` if this group is abelian.
93
+
94
+ EXAMPLES::
95
+
96
+ sage: from sage.groups.old import Group
97
+ sage: G = Group()
98
+ sage: G.is_abelian()
99
+ Traceback (most recent call last):
100
+ ...
101
+ NotImplementedError
102
+ """
103
+ raise NotImplementedError
104
+
105
+ def is_commutative(self):
106
+ r"""
107
+ Return ``True`` if this group is commutative. This is an alias for
108
+ is_abelian, largely to make groups work well with the Factorization
109
+ class.
110
+
111
+ (Note for developers: Derived classes should override is_abelian, not
112
+ is_commutative.)
113
+
114
+ EXAMPLES::
115
+
116
+ sage: SL(2, 7).is_commutative() # needs sage.libs.gap sage.modules
117
+ False
118
+ """
119
+ return self.is_abelian()
120
+
121
+ def order(self):
122
+ """
123
+ Return the number of elements of this group, which is either a
124
+ positive integer or infinity.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: from sage.groups.old import Group
129
+ sage: G = Group()
130
+ sage: G.order()
131
+ Traceback (most recent call last):
132
+ ...
133
+ NotImplementedError
134
+ """
135
+ raise NotImplementedError
136
+
137
+ def is_multiplicative(self):
138
+ r"""
139
+ Return ``True`` if the group operation is given by \* (rather than +).
140
+
141
+ Override for additive groups.
142
+
143
+ EXAMPLES::
144
+
145
+ sage: from sage.groups.old import Group
146
+ sage: G = Group()
147
+ sage: G.is_multiplicative()
148
+ True
149
+ """
150
+ return True
151
+
152
+ def random_element(self, bound=None):
153
+ """
154
+ Return a random element of this group.
155
+
156
+ EXAMPLES::
157
+
158
+ sage: from sage.groups.old import Group
159
+ sage: G = Group()
160
+ sage: G.random_element()
161
+ Traceback (most recent call last):
162
+ ...
163
+ NotImplementedError
164
+ """
165
+ raise NotImplementedError
166
+
167
+ def quotient(self, H, **kwds):
168
+ """
169
+ Return the quotient of this group by the normal subgroup `H`.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: from sage.groups.old import Group
174
+ sage: G = Group()
175
+ sage: G.quotient(G)
176
+ Traceback (most recent call last):
177
+ ...
178
+ NotImplementedError
179
+ """
180
+ raise NotImplementedError
181
+
182
+ cdef class AbelianGroup(Group):
183
+ """
184
+ Generic abelian group.
185
+ """
186
+ def is_abelian(self):
187
+ """
188
+ Return True.
189
+
190
+ EXAMPLES::
191
+
192
+ sage: from sage.groups.old import AbelianGroup
193
+ sage: G = AbelianGroup()
194
+ sage: G.is_abelian()
195
+ True
196
+ """
197
+ return True
198
+
199
+ cdef class FiniteGroup(Group):
200
+ """
201
+ Generic finite group.
202
+ """
203
+ def is_finite(self):
204
+ """
205
+ Return True.
206
+
207
+ EXAMPLES::
208
+
209
+ sage: from sage.groups.old import FiniteGroup
210
+ sage: G = FiniteGroup()
211
+ sage: G.is_finite()
212
+ True
213
+ """
214
+ return True
215
+
216
+ cdef class AlgebraicGroup(Group):
217
+ """
218
+ Generic algebraic group.
219
+ """
@@ -0,0 +1,3 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ # The presence of this file ensures that sage_setup for sagemath-objects
3
+ # considers this directory as a namespace package
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-objects
sage/libs/gmp/all.pxd ADDED
@@ -0,0 +1,6 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ from sage.libs.gmp.types cimport *
3
+ from sage.libs.gmp.random cimport *
4
+ from sage.libs.gmp.mpz cimport *
5
+ from sage.libs.gmp.mpq cimport *
6
+ from sage.libs.gmp.pylong cimport *
@@ -0,0 +1,23 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ r"""
3
+ Fast binary operations for basic types
4
+ """
5
+
6
+ from sage.libs.gmp.types cimport mpz_t, mpq_t
7
+ from sage.libs.gmp.mpz cimport mpz_set, mpz_add, mpz_mul
8
+ from sage.libs.gmp.mpq cimport mpq_canonicalize, mpq_numref, mpq_denref, mpq_add
9
+
10
+ cdef inline void mpq_add_z(mpq_t res, mpq_t op1, mpz_t op2) noexcept:
11
+ mpz_mul(mpq_numref(res), mpq_denref(op1), op2)
12
+ mpz_add(mpq_numref(res), mpq_numref(res), mpq_numref(op1))
13
+ mpz_set(mpq_denref(res), mpq_denref(op1))
14
+
15
+ cdef inline void mpq_div_zz(mpq_t res, mpz_t op1, mpz_t op2) noexcept:
16
+ mpz_set(mpq_numref(res), op1)
17
+ mpz_set(mpq_denref(res), op2)
18
+ mpq_canonicalize(res)
19
+
20
+ cdef inline void mpq_mul_z(mpq_t res, mpq_t op1, mpz_t op2) noexcept:
21
+ # (A/B) * C = (C/B) * A
22
+ mpq_div_zz(res, op2, mpq_denref(op1))
23
+ mpz_mul(mpq_numref(res), mpq_numref(res), mpq_numref(op1))
sage/libs/gmp/misc.pxd ADDED
@@ -0,0 +1,8 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ # distutils: libraries = gmp
3
+
4
+ cdef extern from "gmp.h":
5
+ void mp_set_memory_functions(
6
+ void *(*) (size_t),
7
+ void *(*) (void *, size_t, size_t),
8
+ void (*) (void *, size_t))
sage/libs/gmp/mpf.pxd ADDED
@@ -0,0 +1,88 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ # distutils: libraries = gmp
3
+
4
+ from sage.libs.gmp.types cimport *
5
+
6
+ cdef extern from "gmp.h":
7
+
8
+ ### Floating-point Functions ###
9
+
10
+ # Initialization Functions
11
+ void mpf_set_default_prec (unsigned long int prec)
12
+ unsigned long int mpf_get_default_prec ()
13
+ void mpf_init (mpf_t x)
14
+ void mpf_init2 (mpf_t x, unsigned long int prec)
15
+ void mpf_clear (mpf_t x)
16
+ unsigned long int mpf_get_prec (mpf_t op)
17
+ void mpf_set_prec (mpf_t rop, unsigned long int prec)
18
+ void mpf_set_prec_raw (mpf_t rop, unsigned long int prec)
19
+
20
+ # Assignment Functions
21
+ void mpf_set (mpf_t rop, mpf_t op)
22
+ void mpf_set_ui (mpf_t rop, unsigned long int op)
23
+ void mpf_set_si (mpf_t rop, signed long int op)
24
+ void mpf_set_d (mpf_t rop, double op)
25
+ void mpf_set_z (mpf_t rop, mpz_t op)
26
+ void mpf_set_q (mpf_t rop, mpq_t op)
27
+ int mpf_set_str (mpf_t rop, char *str, int base)
28
+ void mpf_swap (mpf_t rop1, mpf_t rop2)
29
+
30
+ # Combined Initialization and Assignment Functions
31
+ void mpf_init_set (mpf_t rop, mpf_t op)
32
+ void mpf_init_set_ui (mpf_t rop, unsigned long int op)
33
+ void mpf_init_set_si (mpf_t rop, signed long int op)
34
+ void mpf_init_set_d (mpf_t rop, double op)
35
+ int mpf_init_set_str (mpf_t rop, char *str, int base)
36
+
37
+ # Conversion Functions
38
+ double mpf_get_d (mpf_t op)
39
+ double mpf_get_d_2exp (signed long int *exp, mpf_t op)
40
+ long mpf_get_si (mpf_t op)
41
+ unsigned long mpf_get_ui (mpf_t op)
42
+ char * mpf_get_str (char *str, mp_exp_t *expptr, int base, size_t n_digits, mpf_t op)
43
+
44
+ # Arithmetic Functions
45
+ void mpf_add (mpf_t rop, mpf_t op1, mpf_t op2)
46
+ void mpf_add_ui (mpf_t rop, mpf_t op1, unsigned long int op2)
47
+ void mpf_sub (mpf_t rop, mpf_t op1, mpf_t op2)
48
+ void mpf_ui_sub (mpf_t rop, unsigned long int op1, mpf_t op2)
49
+ void mpf_sub_ui (mpf_t rop, mpf_t op1, unsigned long int op2)
50
+ void mpf_mul (mpf_t rop, mpf_t op1, mpf_t op2)
51
+ void mpf_mul_ui (mpf_t rop, mpf_t op1, unsigned long int op2)
52
+ void mpf_div (mpf_t rop, mpf_t op1, mpf_t op2)
53
+ void mpf_ui_div (mpf_t rop, unsigned long int op1, mpf_t op2)
54
+ void mpf_div_ui (mpf_t rop, mpf_t op1, unsigned long int op2)
55
+ void mpf_sqrt (mpf_t rop, mpf_t op)
56
+ void mpf_sqrt_ui (mpf_t rop, unsigned long int op)
57
+ void mpf_pow_ui (mpf_t rop, mpf_t op1, unsigned long int op2)
58
+ void mpf_neg (mpf_t rop, mpf_t op)
59
+ void mpf_abs (mpf_t rop, mpf_t op)
60
+ void mpf_mul_2exp (mpf_t rop, mpf_t op1, unsigned long int op2)
61
+ void mpf_div_2exp (mpf_t rop, mpf_t op1, unsigned long int op2)
62
+
63
+ # Comparison Functions
64
+ int mpf_cmp (mpf_t op1, mpf_t op2)
65
+ int mpf_cmp_d (mpf_t op1, double op2)
66
+ int mpf_cmp_ui (mpf_t op1, unsigned long int op2)
67
+ int mpf_cmp_si (mpf_t op1, signed long int op2)
68
+ int mpf_eq (mpf_t op1, mpf_t op2, unsigned long int op3)
69
+ void mpf_reldiff (mpf_t rop, mpf_t op1, mpf_t op2)
70
+ int mpf_sgn (mpf_t op)
71
+
72
+ # Input and Output Functions
73
+ # size_t mpf_out_str (file *stream, int base, size_t n_digits, mpf_t op)
74
+ # size_t mpf_inp_str (mpf_t rop, file *stream, int base)
75
+
76
+ # Miscellaneous Functions
77
+ void mpf_ceil (mpf_t rop, mpf_t op)
78
+ void mpf_floor (mpf_t rop, mpf_t op)
79
+ void mpf_trunc (mpf_t rop, mpf_t op)
80
+ bint mpf_integer_p (mpf_t op)
81
+ bint mpf_fits_ulong_p (mpf_t op)
82
+ bint mpf_fits_slong_p (mpf_t op)
83
+ bint mpf_fits_uint_p (mpf_t op)
84
+ bint mpf_fits_sint_p (mpf_t op)
85
+ bint mpf_fits_ushort_p (mpf_t op)
86
+ bint mpf_fits_sshort_p (mpf_t op)
87
+ void mpf_urandomb (mpf_t rop, gmp_randstate_t state, unsigned long int nbits)
88
+ void mpf_random2 (mpf_t rop, mp_size_t max_size, mp_exp_t exp)