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.
- passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.6.44.dist-info/METADATA +115 -0
- passagemath_objects-10.6.44.dist-info/RECORD +280 -0
- passagemath_objects-10.6.44.dist-info/WHEEL +6 -0
- passagemath_objects-10.6.44.dist-info/top_level.txt +3 -0
- sage/all__sagemath_objects.py +37 -0
- sage/arith/all__sagemath_objects.py +5 -0
- sage/arith/long.pxd +411 -0
- sage/arith/numerical_approx.cpython-314t-darwin.so +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cpython-314t-darwin.so +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cpython-314t-darwin.so +0 -0
- sage/categories/action.pxd +29 -0
- sage/categories/action.pyx +641 -0
- sage/categories/algebra_functor.py +745 -0
- sage/categories/all__sagemath_objects.py +33 -0
- sage/categories/basic.py +62 -0
- sage/categories/cartesian_product.py +295 -0
- sage/categories/category.py +3401 -0
- sage/categories/category_cy_helper.cpython-314t-darwin.so +0 -0
- sage/categories/category_cy_helper.pxd +8 -0
- sage/categories/category_cy_helper.pyx +322 -0
- sage/categories/category_singleton.cpython-314t-darwin.so +0 -0
- sage/categories/category_singleton.pxd +3 -0
- sage/categories/category_singleton.pyx +342 -0
- sage/categories/category_types.py +637 -0
- sage/categories/category_with_axiom.py +2876 -0
- sage/categories/covariant_functorial_construction.py +703 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cpython-314t-darwin.so +0 -0
- sage/categories/functor.pxd +7 -0
- sage/categories/functor.pyx +691 -0
- sage/categories/homset.py +1338 -0
- sage/categories/homsets.py +364 -0
- sage/categories/isomorphic_objects.py +73 -0
- sage/categories/map.cpython-314t-darwin.so +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2106 -0
- sage/categories/morphism.cpython-314t-darwin.so +0 -0
- sage/categories/morphism.pxd +14 -0
- sage/categories/morphism.pyx +895 -0
- sage/categories/objects.py +167 -0
- sage/categories/primer.py +1696 -0
- sage/categories/pushout.py +4834 -0
- sage/categories/quotients.py +64 -0
- sage/categories/realizations.py +200 -0
- sage/categories/sets_cat.py +3290 -0
- sage/categories/sets_with_partial_maps.py +52 -0
- sage/categories/subobjects.py +64 -0
- sage/categories/subquotients.py +21 -0
- sage/categories/with_realizations.py +311 -0
- sage/cpython/__init__.py +19 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cpython-314t-darwin.so +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cpython-314t-darwin.so +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cpython-314t-darwin.so +0 -0
- sage/cpython/cython_metaclass.h +117 -0
- sage/cpython/cython_metaclass.pxd +3 -0
- sage/cpython/cython_metaclass.pyx +130 -0
- sage/cpython/debug.cpython-314t-darwin.so +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cpython-314t-darwin.so +0 -0
- sage/cpython/dict_del_by_value.pxd +9 -0
- sage/cpython/dict_del_by_value.pyx +191 -0
- sage/cpython/dict_internal.h +245 -0
- sage/cpython/getattr.cpython-314t-darwin.so +0 -0
- sage/cpython/getattr.pxd +9 -0
- sage/cpython/getattr.pyx +439 -0
- sage/cpython/pycore_long.h +97 -0
- sage/cpython/pycore_long.pxd +10 -0
- sage/cpython/python_debug.h +44 -0
- sage/cpython/python_debug.pxd +47 -0
- sage/cpython/pyx_visit.h +13 -0
- sage/cpython/string.cpython-314t-darwin.so +0 -0
- sage/cpython/string.pxd +76 -0
- sage/cpython/string.pyx +34 -0
- sage/cpython/string_impl.h +60 -0
- sage/cpython/type.cpython-314t-darwin.so +0 -0
- sage/cpython/type.pxd +2 -0
- sage/cpython/type.pyx +40 -0
- sage/cpython/wrapperdescr.pxd +67 -0
- sage/ext/all__sagemath_objects.py +3 -0
- sage/ext/ccobject.h +64 -0
- sage/ext/cplusplus.pxd +17 -0
- sage/ext/mod_int.h +30 -0
- sage/ext/mod_int.pxd +24 -0
- sage/ext/stdsage.pxd +39 -0
- sage/groups/all__sagemath_objects.py +1 -0
- sage/groups/group.cpython-314t-darwin.so +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +322 -0
- sage/groups/old.cpython-314t-darwin.so +0 -0
- sage/groups/old.pxd +14 -0
- sage/groups/old.pyx +219 -0
- sage/libs/all__sagemath_objects.py +3 -0
- sage/libs/gmp/__init__.py +1 -0
- sage/libs/gmp/all.pxd +6 -0
- sage/libs/gmp/binop.pxd +23 -0
- sage/libs/gmp/misc.pxd +8 -0
- sage/libs/gmp/mpf.pxd +88 -0
- sage/libs/gmp/mpn.pxd +57 -0
- sage/libs/gmp/mpq.pxd +57 -0
- sage/libs/gmp/mpz.pxd +202 -0
- sage/libs/gmp/pylong.cpython-314t-darwin.so +0 -0
- sage/libs/gmp/pylong.pxd +12 -0
- sage/libs/gmp/pylong.pyx +150 -0
- sage/libs/gmp/random.pxd +25 -0
- sage/libs/gmp/randomize.pxd +59 -0
- sage/libs/gmp/types.pxd +53 -0
- sage/libs/gmpxx.pxd +19 -0
- sage/misc/abstract_method.py +276 -0
- sage/misc/all__sagemath_objects.py +43 -0
- sage/misc/bindable_class.py +253 -0
- sage/misc/c3_controlled.cpython-314t-darwin.so +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cpython-314t-darwin.so +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3781 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cpython-314t-darwin.so +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cpython-314t-darwin.so +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +747 -0
- sage/misc/fast_methods.cpython-314t-darwin.so +0 -0
- sage/misc/fast_methods.pxd +20 -0
- sage/misc/fast_methods.pyx +351 -0
- sage/misc/flatten.py +90 -0
- sage/misc/fpickle.cpython-314t-darwin.so +0 -0
- sage/misc/fpickle.pyx +177 -0
- sage/misc/function_mangling.cpython-314t-darwin.so +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cpython-314t-darwin.so +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cpython-314t-darwin.so +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +135 -0
- sage/misc/lazy_import.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_import.pyx +1299 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_string.pxd +7 -0
- sage/misc/lazy_string.pyx +546 -0
- sage/misc/misc.py +1066 -0
- sage/misc/misc_c.cpython-314t-darwin.so +0 -0
- sage/misc/misc_c.pxd +3 -0
- sage/misc/misc_c.pyx +766 -0
- sage/misc/namespace_package.py +37 -0
- sage/misc/nested_class.cpython-314t-darwin.so +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cpython-314t-darwin.so +0 -0
- sage/misc/persist.pyx +1251 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cpython-314t-darwin.so +0 -0
- sage/misc/randstate.pxd +30 -0
- sage/misc/randstate.pyx +1059 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cpython-314t-darwin.so +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cpython-314t-darwin.so +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +275 -0
- sage/misc/sage_timeit_class.cpython-314t-darwin.so +0 -0
- sage/misc/sage_timeit_class.pyx +120 -0
- sage/misc/sage_unittest.py +637 -0
- sage/misc/sageinspect.py +2768 -0
- sage/misc/session.cpython-314t-darwin.so +0 -0
- sage/misc/session.pyx +392 -0
- sage/misc/superseded.py +557 -0
- sage/misc/test_nested_class.py +228 -0
- sage/misc/timing.py +264 -0
- sage/misc/unknown.py +222 -0
- sage/misc/verbose.py +253 -0
- sage/misc/weak_dict.cpython-314t-darwin.so +0 -0
- sage/misc/weak_dict.pxd +15 -0
- sage/misc/weak_dict.pyx +1231 -0
- sage/modules/all__sagemath_objects.py +1 -0
- sage/modules/module.cpython-314t-darwin.so +0 -0
- sage/modules/module.pxd +5 -0
- sage/modules/module.pyx +329 -0
- sage/rings/all__sagemath_objects.py +3 -0
- sage/rings/integer_fake.h +22 -0
- sage/rings/integer_fake.pxd +55 -0
- sage/sets/all__sagemath_objects.py +3 -0
- sage/sets/pythonclass.cpython-314t-darwin.so +0 -0
- sage/sets/pythonclass.pxd +9 -0
- sage/sets/pythonclass.pyx +247 -0
- sage/structure/__init__.py +4 -0
- sage/structure/all.py +30 -0
- sage/structure/category_object.cpython-314t-darwin.so +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1087 -0
- sage/structure/coerce.cpython-314t-darwin.so +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2107 -0
- sage/structure/coerce_actions.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_dict.pxd +51 -0
- sage/structure/coerce_dict.pyx +1557 -0
- sage/structure/coerce_exceptions.py +23 -0
- sage/structure/coerce_maps.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_maps.pxd +28 -0
- sage/structure/coerce_maps.pyx +718 -0
- sage/structure/debug_options.cpython-314t-darwin.so +0 -0
- sage/structure/debug_options.pxd +6 -0
- sage/structure/debug_options.pyx +54 -0
- sage/structure/dynamic_class.py +541 -0
- sage/structure/element.cpython-314t-darwin.so +0 -0
- sage/structure/element.pxd +272 -0
- sage/structure/element.pyx +4772 -0
- sage/structure/element_wrapper.cpython-314t-darwin.so +0 -0
- sage/structure/element_wrapper.pxd +12 -0
- sage/structure/element_wrapper.pyx +582 -0
- sage/structure/factorization.py +1422 -0
- sage/structure/factorization_integer.py +105 -0
- sage/structure/factory.cpython-314t-darwin.so +0 -0
- sage/structure/factory.pyx +786 -0
- sage/structure/formal_sum.py +489 -0
- sage/structure/gens_py.py +73 -0
- sage/structure/global_options.py +1743 -0
- sage/structure/indexed_generators.py +863 -0
- sage/structure/list_clone.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_demo.pyx +248 -0
- sage/structure/list_clone_timings.py +179 -0
- sage/structure/list_clone_timings_cy.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cpython-314t-darwin.so +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +348 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cpython-314t-darwin.so +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3093 -0
- sage/structure/parent_base.cpython-314t-darwin.so +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +44 -0
- sage/structure/parent_gens.cpython-314t-darwin.so +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +377 -0
- sage/structure/parent_old.cpython-314t-darwin.so +0 -0
- sage/structure/parent_old.pxd +25 -0
- sage/structure/parent_old.pyx +294 -0
- sage/structure/proof/__init__.py +1 -0
- sage/structure/proof/all.py +243 -0
- sage/structure/proof/proof.py +300 -0
- sage/structure/richcmp.cpython-314t-darwin.so +0 -0
- sage/structure/richcmp.pxd +213 -0
- sage/structure/richcmp.pyx +495 -0
- sage/structure/sage_object.cpython-314t-darwin.so +0 -0
- sage/structure/sage_object.pxd +3 -0
- sage/structure/sage_object.pyx +988 -0
- sage/structure/sage_object_test.py +19 -0
- sage/structure/sequence.py +937 -0
- sage/structure/set_factories.py +1178 -0
- sage/structure/set_factories_example.py +527 -0
- sage/structure/support_view.py +179 -0
- sage/structure/test_factory.py +56 -0
- 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 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
sage/libs/gmp/all.pxd
ADDED
sage/libs/gmp/binop.pxd
ADDED
|
@@ -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))
|