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.
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.6.41.dist-info/DELVEWHEEL +2 -0
- passagemath_objects-10.6.41.dist-info/METADATA +115 -0
- passagemath_objects-10.6.41.dist-info/RECORD +281 -0
- passagemath_objects-10.6.41.dist-info/WHEEL +5 -0
- passagemath_objects-10.6.41.dist-info/top_level.txt +3 -0
- passagemath_objects.libs/libgmp-10-79b4110c7ea2b760f16cfef97e8a8a34.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.cp312-win_amd64.pyd +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cp312-win_amd64.pyd +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cp312-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 +295 -0
- sage/categories/category.py +3401 -0
- sage/categories/category_cy_helper.cp312-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.cp312-win_amd64.pyd +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 +2885 -0
- sage/categories/covariant_functorial_construction.py +703 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2112 -0
- sage/categories/morphism.cp312-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 +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 +3228 -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 +28 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cp312-win_amd64.pyd +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cp312-win_amd64.pyd +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cp312-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 +245 -0
- sage/cpython/getattr.cp312-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.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +322 -0
- sage/groups/old.cp312-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.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cp312-win_amd64.pyd +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3781 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cp312-win_amd64.pyd +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cp312-win_amd64.pyd +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +747 -0
- sage/misc/fast_methods.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/misc/fpickle.pyx +177 -0
- sage/misc/function_mangling.cp312-win_amd64.pyd +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cp312-win_amd64.pyd +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cp312-win_amd64.pyd +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +135 -0
- sage/misc/lazy_import.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_import.pyx +1299 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cp312-win_amd64.pyd +0 -0
- sage/misc/persist.pyx +1251 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cp312-win_amd64.pyd +0 -0
- sage/misc/randstate.pxd +30 -0
- sage/misc/randstate.pyx +1059 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cp312-win_amd64.pyd +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cp312-win_amd64.pyd +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +276 -0
- sage/misc/sage_timeit_class.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-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/sets/all__sagemath_objects.py +3 -0
- sage/sets/pythonclass.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1087 -0
- sage/structure/coerce.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2107 -0
- sage/structure/coerce_actions.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce_maps.pxd +28 -0
- sage/structure/coerce_maps.pyx +718 -0
- sage/structure/debug_options.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/structure/element.pxd +272 -0
- sage/structure/element.pyx +4772 -0
- sage/structure/element_wrapper.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cp312-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.cp312-win_amd64.pyd +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cp312-win_amd64.pyd +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +348 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cp312-win_amd64.pyd +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3093 -0
- sage/structure/parent_base.cp312-win_amd64.pyd +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +44 -0
- sage/structure/parent_gens.cp312-win_amd64.pyd +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +377 -0
- sage/structure/parent_old.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/richcmp.pxd +213 -0
- sage/structure/richcmp.pyx +495 -0
- sage/structure/sage_object.cp312-win_amd64.pyd +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,272 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
from sage.structure.sage_object cimport SageObject
|
|
3
|
+
from sage.structure.parent cimport Parent
|
|
4
|
+
from sage.misc.inherit_comparison cimport InheritComparisonMetaclass
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
cpdef inline parent(x):
|
|
8
|
+
"""
|
|
9
|
+
Return the parent of the element ``x``.
|
|
10
|
+
|
|
11
|
+
Usually, this means the mathematical object of which ``x`` is an
|
|
12
|
+
element.
|
|
13
|
+
|
|
14
|
+
INPUT:
|
|
15
|
+
|
|
16
|
+
- ``x`` -- an element
|
|
17
|
+
|
|
18
|
+
OUTPUT:
|
|
19
|
+
|
|
20
|
+
- If ``x`` is a Sage :class:`Element`, return ``x.parent()``.
|
|
21
|
+
|
|
22
|
+
- Otherwise, return ``type(x)``.
|
|
23
|
+
|
|
24
|
+
.. SEEALSO::
|
|
25
|
+
|
|
26
|
+
`Parents, Conversion and Coercion <http://passagemath.org/docs/latest/html/en/tutorial/tour_coercion.html>`_
|
|
27
|
+
Section in the Sage Tutorial
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: a = 42
|
|
32
|
+
sage: parent(a)
|
|
33
|
+
Integer Ring
|
|
34
|
+
sage: b = 42/1
|
|
35
|
+
sage: parent(b)
|
|
36
|
+
Rational Field
|
|
37
|
+
sage: c = 42.0
|
|
38
|
+
sage: parent(c) # needs sage.rings.real_mpfr
|
|
39
|
+
Real Field with 53 bits of precision
|
|
40
|
+
|
|
41
|
+
Some more complicated examples::
|
|
42
|
+
|
|
43
|
+
sage: x = Partition([3,2,1,1,1])
|
|
44
|
+
sage: parent(x)
|
|
45
|
+
Partitions
|
|
46
|
+
sage: v = vector(RDF, [1,2,3]) # needs sage.modules
|
|
47
|
+
sage: parent(v) # needs sage.modules
|
|
48
|
+
Vector space of dimension 3 over Real Double Field
|
|
49
|
+
|
|
50
|
+
The following are not considered to be elements, so the type is
|
|
51
|
+
returned::
|
|
52
|
+
|
|
53
|
+
sage: d = int(42) # Python int
|
|
54
|
+
sage: parent(d)
|
|
55
|
+
<... 'int'>
|
|
56
|
+
sage: L = list(range(10))
|
|
57
|
+
sage: parent(L)
|
|
58
|
+
<... 'list'>
|
|
59
|
+
"""
|
|
60
|
+
if isinstance(x, Element):
|
|
61
|
+
return (<Element>x)._parent
|
|
62
|
+
return type(x)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
cdef inline int classify_elements(left, right) noexcept:
|
|
66
|
+
"""
|
|
67
|
+
Given two objects, at least one which is an :class:`Element`,
|
|
68
|
+
classify their type and parent. This is a finer version of
|
|
69
|
+
:func:`have_same_parent`.
|
|
70
|
+
|
|
71
|
+
OUTPUT: the sum of the following bits:
|
|
72
|
+
|
|
73
|
+
- 0o01: left is an Element
|
|
74
|
+
- 0o02: right is an Element
|
|
75
|
+
- 0o04: both are Element
|
|
76
|
+
- 0o10: left and right have the same type
|
|
77
|
+
- 0o20: left and right have the same parent
|
|
78
|
+
|
|
79
|
+
These are the possible outcomes:
|
|
80
|
+
|
|
81
|
+
- 0o01: left is an Element, right is not
|
|
82
|
+
- 0o02: right is an Element, left is not
|
|
83
|
+
- 0o07: both are Element, different types, different parents
|
|
84
|
+
- 0o17: both are Element, same type, different parents
|
|
85
|
+
- 0o27: both are Element, different types, same parent
|
|
86
|
+
- 0o37: both are Element, same type, same parent
|
|
87
|
+
"""
|
|
88
|
+
if type(left) is type(right):
|
|
89
|
+
# We know at least one of the arguments is an Element. So if
|
|
90
|
+
# their types are *equal* (fast to check) then they are both
|
|
91
|
+
# Elements.
|
|
92
|
+
if (<Element>left)._parent is (<Element>right)._parent:
|
|
93
|
+
return 0o37
|
|
94
|
+
else:
|
|
95
|
+
return 0o17
|
|
96
|
+
if not isinstance(right, Element):
|
|
97
|
+
return 0o01
|
|
98
|
+
if not isinstance(left, Element):
|
|
99
|
+
return 0o02
|
|
100
|
+
if (<Element>left)._parent is (<Element>right)._parent:
|
|
101
|
+
return 0o27
|
|
102
|
+
else:
|
|
103
|
+
return 0o07
|
|
104
|
+
|
|
105
|
+
# Functions to help understand the result of classify_elements()
|
|
106
|
+
cdef inline bint BOTH_ARE_ELEMENT(int cl) noexcept:
|
|
107
|
+
return cl & 0o04
|
|
108
|
+
cdef inline bint HAVE_SAME_PARENT(int cl) noexcept:
|
|
109
|
+
return cl & 0o20
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
cpdef inline bint have_same_parent(left, right) noexcept:
|
|
113
|
+
"""
|
|
114
|
+
Return ``True`` if and only if ``left`` and ``right`` have the
|
|
115
|
+
same parent.
|
|
116
|
+
|
|
117
|
+
.. WARNING::
|
|
118
|
+
|
|
119
|
+
This function assumes that at least one of the arguments is a
|
|
120
|
+
Sage :class:`Element`. When in doubt, use the slower
|
|
121
|
+
``parent(left) is parent(right)`` instead.
|
|
122
|
+
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: from sage.structure.element import have_same_parent
|
|
126
|
+
sage: have_same_parent(1, 3)
|
|
127
|
+
True
|
|
128
|
+
sage: have_same_parent(1, 1/2)
|
|
129
|
+
False
|
|
130
|
+
sage: have_same_parent(gap(1), gap(1/2)) # needs sage.libs.gap
|
|
131
|
+
True
|
|
132
|
+
|
|
133
|
+
These have different types but the same parent::
|
|
134
|
+
|
|
135
|
+
sage: # needs sage.rings.real_mpfr
|
|
136
|
+
sage: a = RLF(2)
|
|
137
|
+
sage: b = exp(a)
|
|
138
|
+
sage: type(a)
|
|
139
|
+
<... 'sage.rings.real_lazy.LazyWrapper'>
|
|
140
|
+
sage: type(b)
|
|
141
|
+
<... 'sage.rings.real_lazy.LazyNamedUnop'>
|
|
142
|
+
sage: have_same_parent(a, b)
|
|
143
|
+
True
|
|
144
|
+
"""
|
|
145
|
+
return HAVE_SAME_PARENT(classify_elements(left, right))
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
cdef unary_op_exception(op, x)
|
|
149
|
+
cdef bin_op_exception(op, x, y)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
cdef class Element(SageObject):
|
|
153
|
+
cdef Parent _parent
|
|
154
|
+
cpdef _richcmp_(left, right, int op)
|
|
155
|
+
cpdef int _cmp_(left, right) except -2
|
|
156
|
+
cpdef base_extend(self, R)
|
|
157
|
+
|
|
158
|
+
cdef getattr_from_category(self, name)
|
|
159
|
+
|
|
160
|
+
cpdef _act_on_(self, x, bint self_on_left)
|
|
161
|
+
cpdef _acted_upon_(self, x, bint self_on_left)
|
|
162
|
+
|
|
163
|
+
cdef _add_(self, other)
|
|
164
|
+
cdef _sub_(self, other)
|
|
165
|
+
cdef _neg_(self)
|
|
166
|
+
cdef _add_long(self, long n)
|
|
167
|
+
|
|
168
|
+
cdef _mul_(self, other)
|
|
169
|
+
cdef _mul_long(self, long n)
|
|
170
|
+
cdef _matmul_(self, other)
|
|
171
|
+
cdef _div_(self, other)
|
|
172
|
+
cdef _floordiv_(self, other)
|
|
173
|
+
cdef _mod_(self, other)
|
|
174
|
+
|
|
175
|
+
cdef _pow_(self, other)
|
|
176
|
+
cdef _pow_int(self, n)
|
|
177
|
+
cdef _pow_long(self, long n)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
cdef class ElementWithCachedMethod(Element):
|
|
181
|
+
cdef public dict _cached_methods
|
|
182
|
+
|
|
183
|
+
cdef class ModuleElement(Element) # forward declaration
|
|
184
|
+
|
|
185
|
+
cdef class RingElement(ModuleElement) # forward declaration
|
|
186
|
+
|
|
187
|
+
cdef class ModuleElement(Element):
|
|
188
|
+
cpdef _add_(self, other)
|
|
189
|
+
cpdef _sub_(self, other)
|
|
190
|
+
cpdef _neg_(self)
|
|
191
|
+
|
|
192
|
+
# self._rmul_(x) is x * self
|
|
193
|
+
cpdef _lmul_(self, Element right)
|
|
194
|
+
# self._lmul_(x) is self * x
|
|
195
|
+
cpdef _rmul_(self, Element left)
|
|
196
|
+
|
|
197
|
+
cdef class ModuleElementWithMutability(ModuleElement):
|
|
198
|
+
cdef bint _is_immutable
|
|
199
|
+
cpdef bint is_immutable(self) noexcept
|
|
200
|
+
cpdef bint is_mutable(self) noexcept
|
|
201
|
+
|
|
202
|
+
cdef class MonoidElement(Element):
|
|
203
|
+
cpdef _pow_int(self, n)
|
|
204
|
+
|
|
205
|
+
cdef class MultiplicativeGroupElement(MonoidElement):
|
|
206
|
+
cpdef _div_(self, other)
|
|
207
|
+
|
|
208
|
+
cdef class AdditiveGroupElement(ModuleElement):
|
|
209
|
+
pass
|
|
210
|
+
|
|
211
|
+
cdef class RingElement(ModuleElement):
|
|
212
|
+
cpdef _mul_(self, other)
|
|
213
|
+
cpdef _div_(self, other)
|
|
214
|
+
cpdef _pow_int(self, n)
|
|
215
|
+
|
|
216
|
+
cdef class CommutativeRingElement(RingElement):
|
|
217
|
+
pass
|
|
218
|
+
|
|
219
|
+
cdef class IntegralDomainElement(CommutativeRingElement):
|
|
220
|
+
pass
|
|
221
|
+
|
|
222
|
+
cdef class DedekindDomainElement(IntegralDomainElement):
|
|
223
|
+
pass
|
|
224
|
+
|
|
225
|
+
cdef class PrincipalIdealDomainElement(DedekindDomainElement):
|
|
226
|
+
pass
|
|
227
|
+
|
|
228
|
+
cdef class EuclideanDomainElement(PrincipalIdealDomainElement):
|
|
229
|
+
cpdef _floordiv_(self, other)
|
|
230
|
+
cpdef _mod_(self, other)
|
|
231
|
+
|
|
232
|
+
cdef class FieldElement(CommutativeRingElement):
|
|
233
|
+
cpdef _floordiv_(self, other)
|
|
234
|
+
|
|
235
|
+
cdef class AlgebraElement(RingElement):
|
|
236
|
+
pass
|
|
237
|
+
|
|
238
|
+
cdef class CommutativeAlgebraElement(CommutativeRingElement):
|
|
239
|
+
pass
|
|
240
|
+
|
|
241
|
+
cdef class Expression(CommutativeRingElement):
|
|
242
|
+
pass
|
|
243
|
+
|
|
244
|
+
cdef class InfinityElement(RingElement):
|
|
245
|
+
pass
|
|
246
|
+
|
|
247
|
+
cdef class Vector(ModuleElementWithMutability):
|
|
248
|
+
cdef Py_ssize_t _degree
|
|
249
|
+
|
|
250
|
+
# Return the dot product using the simple metric
|
|
251
|
+
# $e_i \cdot e_j = \delta_{ij}$. The first assumes that the parents
|
|
252
|
+
# are equal, both assume that the degrees are equal.
|
|
253
|
+
cpdef _dot_product_(Vector left, Vector right)
|
|
254
|
+
cpdef _dot_product_coerce_(Vector left, Vector right)
|
|
255
|
+
|
|
256
|
+
cpdef _pairwise_product_(Vector left, Vector right) # override, call if parents the same
|
|
257
|
+
|
|
258
|
+
cdef bint is_sparse_c(self) noexcept
|
|
259
|
+
cdef bint is_dense_c(self) noexcept
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
cdef class Matrix(ModuleElement):
|
|
263
|
+
# All matrix classes must be written in Cython
|
|
264
|
+
cdef Py_ssize_t _nrows
|
|
265
|
+
cdef Py_ssize_t _ncols
|
|
266
|
+
|
|
267
|
+
cdef _vector_times_matrix_(matrix_right, Vector vector_left) # OK to override, AND call directly
|
|
268
|
+
cdef _matrix_times_vector_(matrix_left, Vector vector_right) # OK to override, AND call directly
|
|
269
|
+
cdef _matrix_times_matrix_(left, Matrix right) # OK to override, AND call directly
|
|
270
|
+
|
|
271
|
+
cdef bint is_sparse_c(self) noexcept
|
|
272
|
+
cdef bint is_dense_c(self) noexcept
|