passagemath-objects 10.6.41__cp312-cp312-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 (281) hide show
  1. passagemath_objects/__init__.py +3 -0
  2. passagemath_objects-10.6.41.dist-info/DELVEWHEEL +2 -0
  3. passagemath_objects-10.6.41.dist-info/METADATA +115 -0
  4. passagemath_objects-10.6.41.dist-info/RECORD +281 -0
  5. passagemath_objects-10.6.41.dist-info/WHEEL +5 -0
  6. passagemath_objects-10.6.41.dist-info/top_level.txt +3 -0
  7. passagemath_objects.libs/libgmp-10-79b4110c7ea2b760f16cfef97e8a8a34.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.cp312-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.cp312-win_amd64.pyd +0 -0
  15. sage/arith/power.pxd +31 -0
  16. sage/arith/power.pyx +127 -0
  17. sage/categories/action.cp312-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 +295 -0
  24. sage/categories/category.py +3401 -0
  25. sage/categories/category_cy_helper.cp312-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.cp312-win_amd64.pyd +0 -0
  29. sage/categories/category_singleton.pxd +3 -0
  30. sage/categories/category_singleton.pyx +342 -0
  31. sage/categories/category_types.py +637 -0
  32. sage/categories/category_with_axiom.py +2885 -0
  33. sage/categories/covariant_functorial_construction.py +703 -0
  34. sage/categories/facade_sets.py +228 -0
  35. sage/categories/functor.cp312-win_amd64.pyd +0 -0
  36. sage/categories/functor.pxd +7 -0
  37. sage/categories/functor.pyx +691 -0
  38. sage/categories/homset.py +1338 -0
  39. sage/categories/homsets.py +364 -0
  40. sage/categories/isomorphic_objects.py +73 -0
  41. sage/categories/map.cp312-win_amd64.pyd +0 -0
  42. sage/categories/map.pxd +34 -0
  43. sage/categories/map.pyx +2112 -0
  44. sage/categories/morphism.cp312-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 +1696 -0
  49. sage/categories/pushout.py +4834 -0
  50. sage/categories/quotients.py +64 -0
  51. sage/categories/realizations.py +200 -0
  52. sage/categories/sets_cat.py +3228 -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 +28 -0
  58. sage/cpython/_py2_random.py +619 -0
  59. sage/cpython/all.py +3 -0
  60. sage/cpython/atexit.cp312-win_amd64.pyd +0 -0
  61. sage/cpython/atexit.pyx +269 -0
  62. sage/cpython/builtin_types.cp312-win_amd64.pyd +0 -0
  63. sage/cpython/builtin_types.pyx +7 -0
  64. sage/cpython/cython_metaclass.cp312-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.cp312-win_amd64.pyd +0 -0
  69. sage/cpython/debug.pyx +302 -0
  70. sage/cpython/dict_del_by_value.cp312-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 +245 -0
  74. sage/cpython/getattr.cp312-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.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
  98. sage/groups/group.pxd +14 -0
  99. sage/groups/group.pyx +322 -0
  100. sage/groups/old.cp312-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.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
  126. sage/misc/cachefunc.pxd +43 -0
  127. sage/misc/cachefunc.pyx +3781 -0
  128. sage/misc/call.py +188 -0
  129. sage/misc/classcall_metaclass.cp312-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.cp312-win_amd64.pyd +0 -0
  133. sage/misc/constant_function.pyx +130 -0
  134. sage/misc/decorators.py +747 -0
  135. sage/misc/fast_methods.cp312-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.cp312-win_amd64.pyd +0 -0
  140. sage/misc/fpickle.pyx +177 -0
  141. sage/misc/function_mangling.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
  148. sage/misc/instancedoc.pyx +331 -0
  149. sage/misc/lazy_attribute.cp312-win_amd64.pyd +0 -0
  150. sage/misc/lazy_attribute.pyx +607 -0
  151. sage/misc/lazy_format.py +135 -0
  152. sage/misc/lazy_import.cp312-win_amd64.pyd +0 -0
  153. sage/misc/lazy_import.pyx +1299 -0
  154. sage/misc/lazy_import_cache.py +36 -0
  155. sage/misc/lazy_list.cp312-win_amd64.pyd +0 -0
  156. sage/misc/lazy_list.pxd +19 -0
  157. sage/misc/lazy_list.pyx +1187 -0
  158. sage/misc/lazy_string.cp312-win_amd64.pyd +0 -0
  159. sage/misc/lazy_string.pxd +7 -0
  160. sage/misc/lazy_string.pyx +546 -0
  161. sage/misc/misc.py +1066 -0
  162. sage/misc/misc_c.cp312-win_amd64.pyd +0 -0
  163. sage/misc/misc_c.pxd +3 -0
  164. sage/misc/misc_c.pyx +766 -0
  165. sage/misc/namespace_package.py +37 -0
  166. sage/misc/nested_class.cp312-win_amd64.pyd +0 -0
  167. sage/misc/nested_class.pxd +3 -0
  168. sage/misc/nested_class.pyx +394 -0
  169. sage/misc/persist.cp312-win_amd64.pyd +0 -0
  170. sage/misc/persist.pyx +1251 -0
  171. sage/misc/prandom.py +418 -0
  172. sage/misc/randstate.cp312-win_amd64.pyd +0 -0
  173. sage/misc/randstate.pxd +30 -0
  174. sage/misc/randstate.pyx +1059 -0
  175. sage/misc/repr.py +203 -0
  176. sage/misc/reset.cp312-win_amd64.pyd +0 -0
  177. sage/misc/reset.pyx +196 -0
  178. sage/misc/sage_ostools.cp312-win_amd64.pyd +0 -0
  179. sage/misc/sage_ostools.pyx +323 -0
  180. sage/misc/sage_timeit.py +276 -0
  181. sage/misc/sage_timeit_class.cp312-win_amd64.pyd +0 -0
  182. sage/misc/sage_timeit_class.pyx +120 -0
  183. sage/misc/sage_unittest.py +637 -0
  184. sage/misc/sageinspect.py +2768 -0
  185. sage/misc/session.cp312-win_amd64.pyd +0 -0
  186. sage/misc/session.pyx +392 -0
  187. sage/misc/superseded.py +557 -0
  188. sage/misc/test_nested_class.py +228 -0
  189. sage/misc/timing.py +264 -0
  190. sage/misc/unknown.py +222 -0
  191. sage/misc/verbose.py +253 -0
  192. sage/misc/weak_dict.cp312-win_amd64.pyd +0 -0
  193. sage/misc/weak_dict.pxd +15 -0
  194. sage/misc/weak_dict.pyx +1231 -0
  195. sage/modules/all__sagemath_objects.py +1 -0
  196. sage/modules/module.cp312-win_amd64.pyd +0 -0
  197. sage/modules/module.pxd +5 -0
  198. sage/modules/module.pyx +329 -0
  199. sage/rings/all__sagemath_objects.py +3 -0
  200. sage/rings/integer_fake.h +22 -0
  201. sage/rings/integer_fake.pxd +55 -0
  202. sage/sets/all__sagemath_objects.py +3 -0
  203. sage/sets/pythonclass.cp312-win_amd64.pyd +0 -0
  204. sage/sets/pythonclass.pxd +9 -0
  205. sage/sets/pythonclass.pyx +247 -0
  206. sage/structure/__init__.py +13 -0
  207. sage/structure/all.py +30 -0
  208. sage/structure/category_object.cp312-win_amd64.pyd +0 -0
  209. sage/structure/category_object.pxd +28 -0
  210. sage/structure/category_object.pyx +1087 -0
  211. sage/structure/coerce.cp312-win_amd64.pyd +0 -0
  212. sage/structure/coerce.pxd +44 -0
  213. sage/structure/coerce.pyx +2107 -0
  214. sage/structure/coerce_actions.cp312-win_amd64.pyd +0 -0
  215. sage/structure/coerce_actions.pxd +27 -0
  216. sage/structure/coerce_actions.pyx +988 -0
  217. sage/structure/coerce_dict.cp312-win_amd64.pyd +0 -0
  218. sage/structure/coerce_dict.pxd +51 -0
  219. sage/structure/coerce_dict.pyx +1557 -0
  220. sage/structure/coerce_exceptions.py +23 -0
  221. sage/structure/coerce_maps.cp312-win_amd64.pyd +0 -0
  222. sage/structure/coerce_maps.pxd +28 -0
  223. sage/structure/coerce_maps.pyx +718 -0
  224. sage/structure/debug_options.cp312-win_amd64.pyd +0 -0
  225. sage/structure/debug_options.pxd +6 -0
  226. sage/structure/debug_options.pyx +54 -0
  227. sage/structure/dynamic_class.py +541 -0
  228. sage/structure/element.cp312-win_amd64.pyd +0 -0
  229. sage/structure/element.pxd +272 -0
  230. sage/structure/element.pyx +4772 -0
  231. sage/structure/element_wrapper.cp312-win_amd64.pyd +0 -0
  232. sage/structure/element_wrapper.pxd +12 -0
  233. sage/structure/element_wrapper.pyx +582 -0
  234. sage/structure/factorization.py +1422 -0
  235. sage/structure/factorization_integer.py +105 -0
  236. sage/structure/factory.cp312-win_amd64.pyd +0 -0
  237. sage/structure/factory.pyx +786 -0
  238. sage/structure/formal_sum.py +489 -0
  239. sage/structure/gens_py.py +73 -0
  240. sage/structure/global_options.py +1743 -0
  241. sage/structure/indexed_generators.py +863 -0
  242. sage/structure/list_clone.cp312-win_amd64.pyd +0 -0
  243. sage/structure/list_clone.pxd +65 -0
  244. sage/structure/list_clone.pyx +1867 -0
  245. sage/structure/list_clone_demo.cp312-win_amd64.pyd +0 -0
  246. sage/structure/list_clone_demo.pyx +248 -0
  247. sage/structure/list_clone_timings.py +179 -0
  248. sage/structure/list_clone_timings_cy.cp312-win_amd64.pyd +0 -0
  249. sage/structure/list_clone_timings_cy.pyx +86 -0
  250. sage/structure/mutability.cp312-win_amd64.pyd +0 -0
  251. sage/structure/mutability.pxd +21 -0
  252. sage/structure/mutability.pyx +348 -0
  253. sage/structure/nonexact.py +69 -0
  254. sage/structure/parent.cp312-win_amd64.pyd +0 -0
  255. sage/structure/parent.pxd +112 -0
  256. sage/structure/parent.pyx +3093 -0
  257. sage/structure/parent_base.cp312-win_amd64.pyd +0 -0
  258. sage/structure/parent_base.pxd +13 -0
  259. sage/structure/parent_base.pyx +44 -0
  260. sage/structure/parent_gens.cp312-win_amd64.pyd +0 -0
  261. sage/structure/parent_gens.pxd +22 -0
  262. sage/structure/parent_gens.pyx +377 -0
  263. sage/structure/parent_old.cp312-win_amd64.pyd +0 -0
  264. sage/structure/parent_old.pxd +25 -0
  265. sage/structure/parent_old.pyx +294 -0
  266. sage/structure/proof/__init__.py +1 -0
  267. sage/structure/proof/all.py +243 -0
  268. sage/structure/proof/proof.py +300 -0
  269. sage/structure/richcmp.cp312-win_amd64.pyd +0 -0
  270. sage/structure/richcmp.pxd +213 -0
  271. sage/structure/richcmp.pyx +495 -0
  272. sage/structure/sage_object.cp312-win_amd64.pyd +0 -0
  273. sage/structure/sage_object.pxd +3 -0
  274. sage/structure/sage_object.pyx +988 -0
  275. sage/structure/sage_object_test.py +19 -0
  276. sage/structure/sequence.py +937 -0
  277. sage/structure/set_factories.py +1178 -0
  278. sage/structure/set_factories_example.py +527 -0
  279. sage/structure/support_view.py +179 -0
  280. sage/structure/test_factory.py +56 -0
  281. sage/structure/unique_representation.py +1359 -0
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-objects
Binary file
sage/groups/group.pxd ADDED
@@ -0,0 +1,14 @@
1
+ # sage_setup: distribution = sagemath-objects
2
+ from sage.structure.parent cimport Parent
3
+
4
+ cdef class Group(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/group.pyx ADDED
@@ -0,0 +1,322 @@
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.misc.superseded import deprecation
21
+ from sage.rings.infinity import infinity
22
+ from sage.structure.parent cimport Parent
23
+
24
+
25
+ def is_Group(x):
26
+ """
27
+ Return whether ``x`` is a group object.
28
+
29
+ INPUT:
30
+
31
+ - ``x`` -- anything
32
+
33
+ OUTPUT: boolean
34
+
35
+ EXAMPLES::
36
+
37
+ sage: from sage.groups.group import is_Group
38
+ sage: is_Group("a string")
39
+ doctest:warning...DeprecationWarning: use instead G in Groups()
40
+ See https://github.com/sagemath/sage/issues/37449 for details.
41
+ False
42
+ sage: F.<a,b> = FreeGroup() # needs sage.combinat sage.groups
43
+ sage: is_Group(F) # needs sage.combinat sage.groups
44
+ True
45
+ """
46
+ deprecation(37449, 'use instead G in Groups()')
47
+ return isinstance(x, Group)
48
+
49
+
50
+ cdef class Group(Parent):
51
+ """
52
+ Base class for all groups.
53
+
54
+ TESTS::
55
+
56
+ sage: from sage.groups.group import Group
57
+ sage: G = Group()
58
+ sage: TestSuite(G).run(skip = ["_test_an_element",\
59
+ ....: "_test_associativity",\
60
+ ....: "_test_elements",\
61
+ ....: "_test_elements_eq_reflexive",\
62
+ ....: "_test_elements_eq_symmetric",\
63
+ ....: "_test_elements_eq_transitive",\
64
+ ....: "_test_elements_neq",\
65
+ ....: "_test_inverse",\
66
+ ....: "_test_one",\
67
+ ....: "_test_pickling",\
68
+ ....: "_test_prod",\
69
+ ....: "_test_some_elements"])
70
+
71
+ Generic groups have very little functionality::
72
+
73
+ sage: 4 in G
74
+ Traceback (most recent call last):
75
+ ...
76
+ NotImplementedError: cannot construct elements of <sage.groups.group.Group object at ...>
77
+ """
78
+ def __init__(self, base=None, category=None):
79
+ """
80
+ The Python constructor.
81
+
82
+ TESTS::
83
+
84
+ sage: from sage.groups.group import Group
85
+ sage: G = Group()
86
+ sage: G.category()
87
+ Category of groups
88
+ sage: G = Group(category=Groups()) # todo: do the same test with some subcategory of Groups when there will exist one
89
+ sage: G.category()
90
+ Category of groups
91
+ sage: G = Group(category=CommutativeAdditiveGroups())
92
+ Traceback (most recent call last):
93
+ ...
94
+ ValueError: (Category of commutative additive groups,) is not a subcategory of Category of groups
95
+ sage: G._repr_option('element_is_atomic')
96
+ False
97
+
98
+ Check for :issue:`8119`::
99
+
100
+ sage: # needs sage.groups
101
+ sage: G = SymmetricGroup(2)
102
+ sage: h = hash(G)
103
+ sage: G.rename('S2')
104
+ sage: h == hash(G)
105
+ True
106
+ """
107
+ from sage.categories.groups import Groups
108
+ if category is None:
109
+ category = Groups()
110
+ else:
111
+ if not isinstance(category, tuple):
112
+ category = (category,)
113
+ if not any(cat.is_subcategory(Groups()) for cat in category):
114
+ raise ValueError("%s is not a subcategory of %s" % (category, Groups()))
115
+ Parent.__init__(self, base=base, category=category)
116
+
117
+ def is_abelian(self):
118
+ """
119
+ Test whether this group is abelian.
120
+
121
+ EXAMPLES::
122
+
123
+ sage: from sage.groups.group import Group
124
+ sage: G = Group()
125
+ sage: G.is_abelian()
126
+ Traceback (most recent call last):
127
+ ...
128
+ NotImplementedError
129
+ """
130
+ raise NotImplementedError
131
+
132
+ def is_commutative(self):
133
+ r"""
134
+ Test whether this group is commutative.
135
+
136
+ This is an alias for is_abelian, largely to make groups work
137
+ well with the Factorization class.
138
+
139
+ (Note for developers: Derived classes should override is_abelian, not
140
+ is_commutative.)
141
+
142
+ EXAMPLES::
143
+
144
+ sage: SL(2, 7).is_commutative() # needs sage.libs.gap sage.modules sage.rings.finite_rings
145
+ False
146
+ """
147
+ return self.is_abelian()
148
+
149
+ def order(self):
150
+ """
151
+ Return the number of elements of this group.
152
+
153
+ This is either a positive integer or infinity.
154
+
155
+ EXAMPLES::
156
+
157
+ sage: from sage.groups.group import Group
158
+ sage: G = Group()
159
+ sage: G.order()
160
+ Traceback (most recent call last):
161
+ ...
162
+ NotImplementedError
163
+
164
+ TESTS::
165
+
166
+ sage: H = SL(2, QQ) # needs sage.modules
167
+ sage: H.order() # needs sage.modules
168
+ +Infinity
169
+ """
170
+ try:
171
+ return self.cardinality()
172
+ except AttributeError:
173
+ raise NotImplementedError
174
+
175
+ def is_finite(self):
176
+ """
177
+ Return ``True`` if this group is finite.
178
+
179
+ EXAMPLES::
180
+
181
+ sage: from sage.groups.group import Group
182
+ sage: G = Group()
183
+ sage: G.is_finite()
184
+ Traceback (most recent call last):
185
+ ...
186
+ NotImplementedError
187
+ """
188
+ return self.order() != infinity
189
+
190
+ def is_trivial(self):
191
+ r"""
192
+ Return ``True`` if this group is the trivial group.
193
+
194
+ A group is trivial, if it consists only of the identity
195
+ element.
196
+
197
+ .. WARNING::
198
+
199
+ It is in principle undecidable whether a group is
200
+ trivial, for example, if the group is given by a finite
201
+ presentation. Thus, this method may not terminate.
202
+
203
+ EXAMPLES::
204
+
205
+ sage: groups.presentation.Cyclic(1).is_trivial() # needs sage.groups
206
+ True
207
+
208
+ sage: # needs sage.groups
209
+ sage: G.<a,b> = FreeGroup('a, b')
210
+ sage: H = G / (a^2, b^3, a*b*~a*~b)
211
+ sage: H.is_trivial()
212
+ False
213
+
214
+ A non-trivial presentation of the trivial group::
215
+
216
+ sage: # needs sage.groups
217
+ sage: F.<a,b> = FreeGroup()
218
+ sage: J = F / ((~a)*b*a*(~b)^2, (~b)*a*b*(~a)^2)
219
+ sage: J.is_trivial()
220
+ True
221
+ """
222
+ return self.order() == 1
223
+
224
+ def is_multiplicative(self):
225
+ r"""
226
+ Return ``True`` if the group operation is given by ``*`` (rather than ``+``).
227
+
228
+ Override for additive groups.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: from sage.groups.group import Group
233
+ sage: G = Group()
234
+ sage: G.is_multiplicative()
235
+ True
236
+ """
237
+ return True
238
+
239
+ def _an_element_(self):
240
+ """
241
+ Return an element.
242
+
243
+ OUTPUT: an element of the group
244
+
245
+ EXAMPLES::
246
+
247
+ sage: G = AbelianGroup([2,3,4,5]) # needs sage.modules
248
+ sage: G.an_element() # needs sage.modules
249
+ f0*f1*f2*f3
250
+ """
251
+ return self.prod(self.gens())
252
+
253
+ def quotient(self, H, **kwds):
254
+ """
255
+ Return the quotient of this group by the normal subgroup `H`.
256
+
257
+ EXAMPLES::
258
+
259
+ sage: from sage.groups.group import Group
260
+ sage: G = Group()
261
+ sage: G.quotient(G)
262
+ Traceback (most recent call last):
263
+ ...
264
+ NotImplementedError
265
+ """
266
+ raise NotImplementedError
267
+
268
+ cdef class AbelianGroup(Group):
269
+ """
270
+ Generic abelian group.
271
+ """
272
+ def is_abelian(self):
273
+ """
274
+ Return ``True``.
275
+
276
+ EXAMPLES::
277
+
278
+ sage: from sage.groups.group import AbelianGroup
279
+ sage: G = AbelianGroup()
280
+ sage: G.is_abelian()
281
+ True
282
+ """
283
+ return True
284
+
285
+ cdef class FiniteGroup(Group):
286
+ """
287
+ Generic finite group.
288
+ """
289
+
290
+ def __init__(self, base=None, category=None):
291
+ """
292
+ The Python constructor.
293
+
294
+ TESTS::
295
+
296
+ sage: from sage.groups.group import FiniteGroup
297
+ sage: G = FiniteGroup()
298
+ sage: G.category()
299
+ Category of finite groups
300
+ """
301
+ from sage.categories.finite_groups import FiniteGroups
302
+ if category is None:
303
+ category = FiniteGroups()
304
+ else:
305
+ if not isinstance(category, tuple):
306
+ category = (category,)
307
+ if not any(cat.is_subcategory(FiniteGroups()) for cat in category):
308
+ raise ValueError("%s is not a subcategory of %s" % (category, FiniteGroups()))
309
+ Parent.__init__(self, base=base, category=category)
310
+
311
+ def is_finite(self):
312
+ """
313
+ Return ``True``.
314
+
315
+ EXAMPLES::
316
+
317
+ sage: from sage.groups.group import FiniteGroup
318
+ sage: G = FiniteGroup()
319
+ sage: G.is_finite()
320
+ True
321
+ """
322
+ 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))