passagemath-objects 10.6.47__cp311-cp311-macosx_13_0_x86_64.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 (280) hide show
  1. passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
  2. passagemath_objects/__init__.py +3 -0
  3. passagemath_objects-10.6.47.dist-info/METADATA +115 -0
  4. passagemath_objects-10.6.47.dist-info/RECORD +280 -0
  5. passagemath_objects-10.6.47.dist-info/WHEEL +6 -0
  6. passagemath_objects-10.6.47.dist-info/top_level.txt +3 -0
  7. sage/all__sagemath_objects.py +37 -0
  8. sage/arith/all__sagemath_objects.py +5 -0
  9. sage/arith/long.pxd +411 -0
  10. sage/arith/numerical_approx.cpython-311-darwin.so +0 -0
  11. sage/arith/numerical_approx.pxd +35 -0
  12. sage/arith/numerical_approx.pyx +75 -0
  13. sage/arith/power.cpython-311-darwin.so +0 -0
  14. sage/arith/power.pxd +31 -0
  15. sage/arith/power.pyx +127 -0
  16. sage/categories/action.cpython-311-darwin.so +0 -0
  17. sage/categories/action.pxd +29 -0
  18. sage/categories/action.pyx +641 -0
  19. sage/categories/algebra_functor.py +745 -0
  20. sage/categories/all__sagemath_objects.py +33 -0
  21. sage/categories/basic.py +62 -0
  22. sage/categories/cartesian_product.py +295 -0
  23. sage/categories/category.py +3401 -0
  24. sage/categories/category_cy_helper.cpython-311-darwin.so +0 -0
  25. sage/categories/category_cy_helper.pxd +8 -0
  26. sage/categories/category_cy_helper.pyx +322 -0
  27. sage/categories/category_singleton.cpython-311-darwin.so +0 -0
  28. sage/categories/category_singleton.pxd +3 -0
  29. sage/categories/category_singleton.pyx +342 -0
  30. sage/categories/category_types.py +637 -0
  31. sage/categories/category_with_axiom.py +2876 -0
  32. sage/categories/covariant_functorial_construction.py +703 -0
  33. sage/categories/facade_sets.py +228 -0
  34. sage/categories/functor.cpython-311-darwin.so +0 -0
  35. sage/categories/functor.pxd +7 -0
  36. sage/categories/functor.pyx +691 -0
  37. sage/categories/homset.py +1338 -0
  38. sage/categories/homsets.py +364 -0
  39. sage/categories/isomorphic_objects.py +73 -0
  40. sage/categories/map.cpython-311-darwin.so +0 -0
  41. sage/categories/map.pxd +34 -0
  42. sage/categories/map.pyx +2106 -0
  43. sage/categories/morphism.cpython-311-darwin.so +0 -0
  44. sage/categories/morphism.pxd +14 -0
  45. sage/categories/morphism.pyx +895 -0
  46. sage/categories/objects.py +167 -0
  47. sage/categories/primer.py +1696 -0
  48. sage/categories/pushout.py +4834 -0
  49. sage/categories/quotients.py +64 -0
  50. sage/categories/realizations.py +200 -0
  51. sage/categories/sets_cat.py +3290 -0
  52. sage/categories/sets_with_partial_maps.py +52 -0
  53. sage/categories/subobjects.py +64 -0
  54. sage/categories/subquotients.py +21 -0
  55. sage/categories/with_realizations.py +311 -0
  56. sage/cpython/__init__.py +19 -0
  57. sage/cpython/_py2_random.py +619 -0
  58. sage/cpython/all.py +3 -0
  59. sage/cpython/atexit.cpython-311-darwin.so +0 -0
  60. sage/cpython/atexit.pyx +269 -0
  61. sage/cpython/builtin_types.cpython-311-darwin.so +0 -0
  62. sage/cpython/builtin_types.pyx +7 -0
  63. sage/cpython/cython_metaclass.cpython-311-darwin.so +0 -0
  64. sage/cpython/cython_metaclass.h +117 -0
  65. sage/cpython/cython_metaclass.pxd +3 -0
  66. sage/cpython/cython_metaclass.pyx +130 -0
  67. sage/cpython/debug.cpython-311-darwin.so +0 -0
  68. sage/cpython/debug.pyx +302 -0
  69. sage/cpython/dict_del_by_value.cpython-311-darwin.so +0 -0
  70. sage/cpython/dict_del_by_value.pxd +9 -0
  71. sage/cpython/dict_del_by_value.pyx +191 -0
  72. sage/cpython/dict_internal.h +245 -0
  73. sage/cpython/getattr.cpython-311-darwin.so +0 -0
  74. sage/cpython/getattr.pxd +9 -0
  75. sage/cpython/getattr.pyx +439 -0
  76. sage/cpython/pycore_long.h +97 -0
  77. sage/cpython/pycore_long.pxd +10 -0
  78. sage/cpython/python_debug.h +44 -0
  79. sage/cpython/python_debug.pxd +47 -0
  80. sage/cpython/pyx_visit.h +13 -0
  81. sage/cpython/string.cpython-311-darwin.so +0 -0
  82. sage/cpython/string.pxd +76 -0
  83. sage/cpython/string.pyx +34 -0
  84. sage/cpython/string_impl.h +60 -0
  85. sage/cpython/type.cpython-311-darwin.so +0 -0
  86. sage/cpython/type.pxd +2 -0
  87. sage/cpython/type.pyx +40 -0
  88. sage/cpython/wrapperdescr.pxd +67 -0
  89. sage/ext/all__sagemath_objects.py +3 -0
  90. sage/ext/ccobject.h +64 -0
  91. sage/ext/cplusplus.pxd +17 -0
  92. sage/ext/mod_int.h +30 -0
  93. sage/ext/mod_int.pxd +24 -0
  94. sage/ext/stdsage.pxd +39 -0
  95. sage/groups/all__sagemath_objects.py +1 -0
  96. sage/groups/group.cpython-311-darwin.so +0 -0
  97. sage/groups/group.pxd +14 -0
  98. sage/groups/group.pyx +322 -0
  99. sage/groups/old.cpython-311-darwin.so +0 -0
  100. sage/groups/old.pxd +14 -0
  101. sage/groups/old.pyx +219 -0
  102. sage/libs/all__sagemath_objects.py +3 -0
  103. sage/libs/gmp/__init__.py +1 -0
  104. sage/libs/gmp/all.pxd +6 -0
  105. sage/libs/gmp/binop.pxd +23 -0
  106. sage/libs/gmp/misc.pxd +8 -0
  107. sage/libs/gmp/mpf.pxd +88 -0
  108. sage/libs/gmp/mpn.pxd +57 -0
  109. sage/libs/gmp/mpq.pxd +57 -0
  110. sage/libs/gmp/mpz.pxd +202 -0
  111. sage/libs/gmp/pylong.cpython-311-darwin.so +0 -0
  112. sage/libs/gmp/pylong.pxd +12 -0
  113. sage/libs/gmp/pylong.pyx +150 -0
  114. sage/libs/gmp/random.pxd +25 -0
  115. sage/libs/gmp/randomize.pxd +59 -0
  116. sage/libs/gmp/types.pxd +53 -0
  117. sage/libs/gmpxx.pxd +19 -0
  118. sage/misc/abstract_method.py +276 -0
  119. sage/misc/all__sagemath_objects.py +43 -0
  120. sage/misc/bindable_class.py +253 -0
  121. sage/misc/c3_controlled.cpython-311-darwin.so +0 -0
  122. sage/misc/c3_controlled.pxd +2 -0
  123. sage/misc/c3_controlled.pyx +1402 -0
  124. sage/misc/cachefunc.cpython-311-darwin.so +0 -0
  125. sage/misc/cachefunc.pxd +43 -0
  126. sage/misc/cachefunc.pyx +3781 -0
  127. sage/misc/call.py +188 -0
  128. sage/misc/classcall_metaclass.cpython-311-darwin.so +0 -0
  129. sage/misc/classcall_metaclass.pxd +14 -0
  130. sage/misc/classcall_metaclass.pyx +599 -0
  131. sage/misc/constant_function.cpython-311-darwin.so +0 -0
  132. sage/misc/constant_function.pyx +130 -0
  133. sage/misc/decorators.py +747 -0
  134. sage/misc/fast_methods.cpython-311-darwin.so +0 -0
  135. sage/misc/fast_methods.pxd +20 -0
  136. sage/misc/fast_methods.pyx +351 -0
  137. sage/misc/flatten.py +90 -0
  138. sage/misc/fpickle.cpython-311-darwin.so +0 -0
  139. sage/misc/fpickle.pyx +177 -0
  140. sage/misc/function_mangling.cpython-311-darwin.so +0 -0
  141. sage/misc/function_mangling.pxd +11 -0
  142. sage/misc/function_mangling.pyx +308 -0
  143. sage/misc/inherit_comparison.cpython-311-darwin.so +0 -0
  144. sage/misc/inherit_comparison.pxd +5 -0
  145. sage/misc/inherit_comparison.pyx +105 -0
  146. sage/misc/instancedoc.cpython-311-darwin.so +0 -0
  147. sage/misc/instancedoc.pyx +331 -0
  148. sage/misc/lazy_attribute.cpython-311-darwin.so +0 -0
  149. sage/misc/lazy_attribute.pyx +607 -0
  150. sage/misc/lazy_format.py +135 -0
  151. sage/misc/lazy_import.cpython-311-darwin.so +0 -0
  152. sage/misc/lazy_import.pyx +1299 -0
  153. sage/misc/lazy_import_cache.py +36 -0
  154. sage/misc/lazy_list.cpython-311-darwin.so +0 -0
  155. sage/misc/lazy_list.pxd +19 -0
  156. sage/misc/lazy_list.pyx +1187 -0
  157. sage/misc/lazy_string.cpython-311-darwin.so +0 -0
  158. sage/misc/lazy_string.pxd +7 -0
  159. sage/misc/lazy_string.pyx +546 -0
  160. sage/misc/misc.py +1066 -0
  161. sage/misc/misc_c.cpython-311-darwin.so +0 -0
  162. sage/misc/misc_c.pxd +3 -0
  163. sage/misc/misc_c.pyx +766 -0
  164. sage/misc/namespace_package.py +37 -0
  165. sage/misc/nested_class.cpython-311-darwin.so +0 -0
  166. sage/misc/nested_class.pxd +3 -0
  167. sage/misc/nested_class.pyx +394 -0
  168. sage/misc/persist.cpython-311-darwin.so +0 -0
  169. sage/misc/persist.pyx +1251 -0
  170. sage/misc/prandom.py +418 -0
  171. sage/misc/randstate.cpython-311-darwin.so +0 -0
  172. sage/misc/randstate.pxd +30 -0
  173. sage/misc/randstate.pyx +1059 -0
  174. sage/misc/repr.py +203 -0
  175. sage/misc/reset.cpython-311-darwin.so +0 -0
  176. sage/misc/reset.pyx +196 -0
  177. sage/misc/sage_ostools.cpython-311-darwin.so +0 -0
  178. sage/misc/sage_ostools.pyx +323 -0
  179. sage/misc/sage_timeit.py +275 -0
  180. sage/misc/sage_timeit_class.cpython-311-darwin.so +0 -0
  181. sage/misc/sage_timeit_class.pyx +120 -0
  182. sage/misc/sage_unittest.py +637 -0
  183. sage/misc/sageinspect.py +2768 -0
  184. sage/misc/session.cpython-311-darwin.so +0 -0
  185. sage/misc/session.pyx +392 -0
  186. sage/misc/superseded.py +557 -0
  187. sage/misc/test_nested_class.py +228 -0
  188. sage/misc/timing.py +264 -0
  189. sage/misc/unknown.py +222 -0
  190. sage/misc/verbose.py +253 -0
  191. sage/misc/weak_dict.cpython-311-darwin.so +0 -0
  192. sage/misc/weak_dict.pxd +15 -0
  193. sage/misc/weak_dict.pyx +1231 -0
  194. sage/modules/all__sagemath_objects.py +1 -0
  195. sage/modules/module.cpython-311-darwin.so +0 -0
  196. sage/modules/module.pxd +5 -0
  197. sage/modules/module.pyx +329 -0
  198. sage/rings/all__sagemath_objects.py +3 -0
  199. sage/rings/integer_fake.h +22 -0
  200. sage/rings/integer_fake.pxd +55 -0
  201. sage/sets/all__sagemath_objects.py +3 -0
  202. sage/sets/pythonclass.cpython-311-darwin.so +0 -0
  203. sage/sets/pythonclass.pxd +9 -0
  204. sage/sets/pythonclass.pyx +247 -0
  205. sage/structure/__init__.py +4 -0
  206. sage/structure/all.py +30 -0
  207. sage/structure/category_object.cpython-311-darwin.so +0 -0
  208. sage/structure/category_object.pxd +28 -0
  209. sage/structure/category_object.pyx +1087 -0
  210. sage/structure/coerce.cpython-311-darwin.so +0 -0
  211. sage/structure/coerce.pxd +44 -0
  212. sage/structure/coerce.pyx +2107 -0
  213. sage/structure/coerce_actions.cpython-311-darwin.so +0 -0
  214. sage/structure/coerce_actions.pxd +27 -0
  215. sage/structure/coerce_actions.pyx +988 -0
  216. sage/structure/coerce_dict.cpython-311-darwin.so +0 -0
  217. sage/structure/coerce_dict.pxd +51 -0
  218. sage/structure/coerce_dict.pyx +1557 -0
  219. sage/structure/coerce_exceptions.py +23 -0
  220. sage/structure/coerce_maps.cpython-311-darwin.so +0 -0
  221. sage/structure/coerce_maps.pxd +28 -0
  222. sage/structure/coerce_maps.pyx +718 -0
  223. sage/structure/debug_options.cpython-311-darwin.so +0 -0
  224. sage/structure/debug_options.pxd +6 -0
  225. sage/structure/debug_options.pyx +54 -0
  226. sage/structure/dynamic_class.py +541 -0
  227. sage/structure/element.cpython-311-darwin.so +0 -0
  228. sage/structure/element.pxd +272 -0
  229. sage/structure/element.pyx +4772 -0
  230. sage/structure/element_wrapper.cpython-311-darwin.so +0 -0
  231. sage/structure/element_wrapper.pxd +12 -0
  232. sage/structure/element_wrapper.pyx +582 -0
  233. sage/structure/factorization.py +1422 -0
  234. sage/structure/factorization_integer.py +105 -0
  235. sage/structure/factory.cpython-311-darwin.so +0 -0
  236. sage/structure/factory.pyx +786 -0
  237. sage/structure/formal_sum.py +489 -0
  238. sage/structure/gens_py.py +73 -0
  239. sage/structure/global_options.py +1743 -0
  240. sage/structure/indexed_generators.py +863 -0
  241. sage/structure/list_clone.cpython-311-darwin.so +0 -0
  242. sage/structure/list_clone.pxd +65 -0
  243. sage/structure/list_clone.pyx +1867 -0
  244. sage/structure/list_clone_demo.cpython-311-darwin.so +0 -0
  245. sage/structure/list_clone_demo.pyx +248 -0
  246. sage/structure/list_clone_timings.py +179 -0
  247. sage/structure/list_clone_timings_cy.cpython-311-darwin.so +0 -0
  248. sage/structure/list_clone_timings_cy.pyx +86 -0
  249. sage/structure/mutability.cpython-311-darwin.so +0 -0
  250. sage/structure/mutability.pxd +21 -0
  251. sage/structure/mutability.pyx +348 -0
  252. sage/structure/nonexact.py +69 -0
  253. sage/structure/parent.cpython-311-darwin.so +0 -0
  254. sage/structure/parent.pxd +112 -0
  255. sage/structure/parent.pyx +3093 -0
  256. sage/structure/parent_base.cpython-311-darwin.so +0 -0
  257. sage/structure/parent_base.pxd +13 -0
  258. sage/structure/parent_base.pyx +44 -0
  259. sage/structure/parent_gens.cpython-311-darwin.so +0 -0
  260. sage/structure/parent_gens.pxd +22 -0
  261. sage/structure/parent_gens.pyx +377 -0
  262. sage/structure/parent_old.cpython-311-darwin.so +0 -0
  263. sage/structure/parent_old.pxd +25 -0
  264. sage/structure/parent_old.pyx +294 -0
  265. sage/structure/proof/__init__.py +1 -0
  266. sage/structure/proof/all.py +243 -0
  267. sage/structure/proof/proof.py +300 -0
  268. sage/structure/richcmp.cpython-311-darwin.so +0 -0
  269. sage/structure/richcmp.pxd +213 -0
  270. sage/structure/richcmp.pyx +495 -0
  271. sage/structure/sage_object.cpython-311-darwin.so +0 -0
  272. sage/structure/sage_object.pxd +3 -0
  273. sage/structure/sage_object.pyx +988 -0
  274. sage/structure/sage_object_test.py +19 -0
  275. sage/structure/sequence.py +937 -0
  276. sage/structure/set_factories.py +1178 -0
  277. sage/structure/set_factories_example.py +527 -0
  278. sage/structure/support_view.py +179 -0
  279. sage/structure/test_factory.py +56 -0
  280. 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