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.
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.8.1a3.dist-info/DELVEWHEEL +2 -0
- passagemath_objects-10.8.1a3.dist-info/METADATA +114 -0
- passagemath_objects-10.8.1a3.dist-info/RECORD +283 -0
- passagemath_objects-10.8.1a3.dist-info/WHEEL +5 -0
- passagemath_objects-10.8.1a3.dist-info/top_level.txt +3 -0
- passagemath_objects.libs/libgmp-10-60021eeab4282b29024e43b2b1412b53.dll +0 -0
- sage/all__sagemath_objects.py +46 -0
- sage/arith/all__sagemath_objects.py +5 -0
- sage/arith/long.pxd +411 -0
- sage/arith/numerical_approx.cp314-win_amd64.pyd +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cp314-win_amd64.pyd +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cp314-win_amd64.pyd +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 +71 -0
- sage/categories/cartesian_product.py +292 -0
- sage/categories/category.py +3379 -0
- sage/categories/category_cy_helper.cp314-win_amd64.pyd +0 -0
- sage/categories/category_cy_helper.pxd +8 -0
- sage/categories/category_cy_helper.pyx +322 -0
- sage/categories/category_singleton.cp314-win_amd64.pyd +0 -0
- sage/categories/category_singleton.pxd +3 -0
- sage/categories/category_singleton.pyx +343 -0
- sage/categories/category_types.py +637 -0
- sage/categories/category_with_axiom.py +2889 -0
- sage/categories/covariant_functorial_construction.py +700 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cp314-win_amd64.pyd +0 -0
- sage/categories/functor.pxd +7 -0
- sage/categories/functor.pyx +659 -0
- sage/categories/homset.py +1289 -0
- sage/categories/homsets.py +364 -0
- sage/categories/isomorphic_objects.py +73 -0
- sage/categories/map.cp314-win_amd64.pyd +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2106 -0
- sage/categories/morphism.cp314-win_amd64.pyd +0 -0
- sage/categories/morphism.pxd +14 -0
- sage/categories/morphism.pyx +895 -0
- sage/categories/objects.py +167 -0
- sage/categories/primer.py +1695 -0
- sage/categories/pushout.py +4847 -0
- sage/categories/quotients.py +64 -0
- sage/categories/realizations.py +200 -0
- sage/categories/sets_cat.py +3305 -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 +22 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cp314-win_amd64.pyd +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cp314-win_amd64.pyd +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cp314-win_amd64.pyd +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 +80 -0
- sage/cpython/getattr.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/cpython/string.pxd +76 -0
- sage/cpython/string.pyx +34 -0
- sage/cpython/string_impl.h +60 -0
- sage/cpython/type.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +296 -0
- sage/groups/old.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cp314-win_amd64.pyd +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3801 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cp314-win_amd64.pyd +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cp314-win_amd64.pyd +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +739 -0
- sage/misc/fast_methods.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/misc/fpickle.pyx +176 -0
- sage/misc/function_mangling.cp314-win_amd64.pyd +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cp314-win_amd64.pyd +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cp314-win_amd64.pyd +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cp314-win_amd64.pyd +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +132 -0
- sage/misc/lazy_import.cp314-win_amd64.pyd +0 -0
- sage/misc/lazy_import.pxd +13 -0
- sage/misc/lazy_import.pyx +1307 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cp314-win_amd64.pyd +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cp314-win_amd64.pyd +0 -0
- sage/misc/lazy_string.pxd +7 -0
- sage/misc/lazy_string.pyx +546 -0
- sage/misc/misc.py +980 -0
- sage/misc/misc_c.cp314-win_amd64.pyd +0 -0
- sage/misc/misc_c.pxd +3 -0
- sage/misc/misc_c.pyx +765 -0
- sage/misc/namespace_package.py +37 -0
- sage/misc/nested_class.cp314-win_amd64.pyd +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cp314-win_amd64.pyd +0 -0
- sage/misc/persist.pyx +1279 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cp314-win_amd64.pyd +0 -0
- sage/misc/randstate.pxd +31 -0
- sage/misc/randstate.pyx +1096 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cp314-win_amd64.pyd +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cp314-win_amd64.pyd +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +275 -0
- sage/misc/sage_timeit_class.cp314-win_amd64.pyd +0 -0
- sage/misc/sage_timeit_class.pyx +120 -0
- sage/misc/sage_unittest.py +639 -0
- sage/misc/sageinspect.py +2792 -0
- sage/misc/session.cp314-win_amd64.pyd +0 -0
- sage/misc/session.pyx +392 -0
- sage/misc/superseded.py +576 -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.cp314-win_amd64.pyd +0 -0
- sage/misc/weak_dict.pxd +15 -0
- sage/misc/weak_dict.pyx +1197 -0
- sage/modules/all__sagemath_objects.py +1 -0
- sage/modules/module.cp314-win_amd64.pyd +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/rings/integer_fake.pyi +8 -0
- sage/sets/all__sagemath_objects.py +3 -0
- sage/sets/pythonclass.cp314-win_amd64.pyd +0 -0
- sage/sets/pythonclass.pxd +9 -0
- sage/sets/pythonclass.pyx +247 -0
- sage/structure/__init__.py +13 -0
- sage/structure/all.py +30 -0
- sage/structure/category_object.cp314-win_amd64.pyd +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1090 -0
- sage/structure/coerce.cp314-win_amd64.pyd +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2113 -0
- sage/structure/coerce_actions.cp314-win_amd64.pyd +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/structure/coerce_maps.pxd +24 -0
- sage/structure/coerce_maps.pyx +656 -0
- sage/structure/debug_options.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- sage/structure/element.pxd +271 -0
- sage/structure/element.pyx +4584 -0
- sage/structure/element_wrapper.cp314-win_amd64.pyd +0 -0
- sage/structure/element_wrapper.pxd +12 -0
- sage/structure/element_wrapper.pyx +582 -0
- sage/structure/factorization.py +1457 -0
- sage/structure/factorization_integer.py +154 -0
- sage/structure/factory.cp314-win_amd64.pyd +0 -0
- sage/structure/factory.pyx +863 -0
- sage/structure/formal_sum.py +489 -0
- sage/structure/gens_py.py +73 -0
- sage/structure/global_options.py +1725 -0
- sage/structure/indexed_generators.py +863 -0
- sage/structure/list_clone.cp314-win_amd64.pyd +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cp314-win_amd64.pyd +0 -0
- sage/structure/list_clone_demo.pyx +248 -0
- sage/structure/list_clone_timings.py +179 -0
- sage/structure/list_clone_timings_cy.cp314-win_amd64.pyd +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cp314-win_amd64.pyd +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +346 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cp314-win_amd64.pyd +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3087 -0
- sage/structure/parent_base.cp314-win_amd64.pyd +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +35 -0
- sage/structure/parent_gens.cp314-win_amd64.pyd +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +374 -0
- sage/structure/parent_old.cp314-win_amd64.pyd +0 -0
- sage/structure/parent_old.pxd +24 -0
- sage/structure/parent_old.pyx +278 -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.cp314-win_amd64.pyd +0 -0
- sage/structure/richcmp.pxd +212 -0
- sage/structure/richcmp.pyx +494 -0
- sage/structure/sage_object.cp314-win_amd64.pyd +0 -0
- sage/structure/sage_object.pxd +3 -0
- sage/structure/sage_object.pyx +1088 -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 +164 -0
- sage/structure/test_factory.py +56 -0
- 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 @@
|
|
|
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))
|
sage/libs/gmp/misc.pxd
ADDED
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)
|