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.
Files changed (283) hide show
  1. passagemath_objects/__init__.py +3 -0
  2. passagemath_objects-10.8.1a3.dist-info/DELVEWHEEL +2 -0
  3. passagemath_objects-10.8.1a3.dist-info/METADATA +114 -0
  4. passagemath_objects-10.8.1a3.dist-info/RECORD +283 -0
  5. passagemath_objects-10.8.1a3.dist-info/WHEEL +5 -0
  6. passagemath_objects-10.8.1a3.dist-info/top_level.txt +3 -0
  7. passagemath_objects.libs/libgmp-10-60021eeab4282b29024e43b2b1412b53.dll +0 -0
  8. sage/all__sagemath_objects.py +46 -0
  9. sage/arith/all__sagemath_objects.py +5 -0
  10. sage/arith/long.pxd +411 -0
  11. sage/arith/numerical_approx.cp314-win_amd64.pyd +0 -0
  12. sage/arith/numerical_approx.pxd +35 -0
  13. sage/arith/numerical_approx.pyx +75 -0
  14. sage/arith/power.cp314-win_amd64.pyd +0 -0
  15. sage/arith/power.pxd +31 -0
  16. sage/arith/power.pyx +127 -0
  17. sage/categories/action.cp314-win_amd64.pyd +0 -0
  18. sage/categories/action.pxd +29 -0
  19. sage/categories/action.pyx +641 -0
  20. sage/categories/algebra_functor.py +745 -0
  21. sage/categories/all__sagemath_objects.py +33 -0
  22. sage/categories/basic.py +71 -0
  23. sage/categories/cartesian_product.py +292 -0
  24. sage/categories/category.py +3379 -0
  25. sage/categories/category_cy_helper.cp314-win_amd64.pyd +0 -0
  26. sage/categories/category_cy_helper.pxd +8 -0
  27. sage/categories/category_cy_helper.pyx +322 -0
  28. sage/categories/category_singleton.cp314-win_amd64.pyd +0 -0
  29. sage/categories/category_singleton.pxd +3 -0
  30. sage/categories/category_singleton.pyx +343 -0
  31. sage/categories/category_types.py +637 -0
  32. sage/categories/category_with_axiom.py +2889 -0
  33. sage/categories/covariant_functorial_construction.py +700 -0
  34. sage/categories/facade_sets.py +228 -0
  35. sage/categories/functor.cp314-win_amd64.pyd +0 -0
  36. sage/categories/functor.pxd +7 -0
  37. sage/categories/functor.pyx +659 -0
  38. sage/categories/homset.py +1289 -0
  39. sage/categories/homsets.py +364 -0
  40. sage/categories/isomorphic_objects.py +73 -0
  41. sage/categories/map.cp314-win_amd64.pyd +0 -0
  42. sage/categories/map.pxd +34 -0
  43. sage/categories/map.pyx +2106 -0
  44. sage/categories/morphism.cp314-win_amd64.pyd +0 -0
  45. sage/categories/morphism.pxd +14 -0
  46. sage/categories/morphism.pyx +895 -0
  47. sage/categories/objects.py +167 -0
  48. sage/categories/primer.py +1695 -0
  49. sage/categories/pushout.py +4847 -0
  50. sage/categories/quotients.py +64 -0
  51. sage/categories/realizations.py +200 -0
  52. sage/categories/sets_cat.py +3305 -0
  53. sage/categories/sets_with_partial_maps.py +52 -0
  54. sage/categories/subobjects.py +64 -0
  55. sage/categories/subquotients.py +21 -0
  56. sage/categories/with_realizations.py +311 -0
  57. sage/cpython/__init__.py +22 -0
  58. sage/cpython/_py2_random.py +619 -0
  59. sage/cpython/all.py +3 -0
  60. sage/cpython/atexit.cp314-win_amd64.pyd +0 -0
  61. sage/cpython/atexit.pyx +269 -0
  62. sage/cpython/builtin_types.cp314-win_amd64.pyd +0 -0
  63. sage/cpython/builtin_types.pyx +7 -0
  64. sage/cpython/cython_metaclass.cp314-win_amd64.pyd +0 -0
  65. sage/cpython/cython_metaclass.h +117 -0
  66. sage/cpython/cython_metaclass.pxd +3 -0
  67. sage/cpython/cython_metaclass.pyx +130 -0
  68. sage/cpython/debug.cp314-win_amd64.pyd +0 -0
  69. sage/cpython/debug.pyx +302 -0
  70. sage/cpython/dict_del_by_value.cp314-win_amd64.pyd +0 -0
  71. sage/cpython/dict_del_by_value.pxd +9 -0
  72. sage/cpython/dict_del_by_value.pyx +191 -0
  73. sage/cpython/dict_internal.h +80 -0
  74. sage/cpython/getattr.cp314-win_amd64.pyd +0 -0
  75. sage/cpython/getattr.pxd +9 -0
  76. sage/cpython/getattr.pyx +439 -0
  77. sage/cpython/pycore_long.h +97 -0
  78. sage/cpython/pycore_long.pxd +10 -0
  79. sage/cpython/python_debug.h +44 -0
  80. sage/cpython/python_debug.pxd +47 -0
  81. sage/cpython/pyx_visit.h +13 -0
  82. sage/cpython/string.cp314-win_amd64.pyd +0 -0
  83. sage/cpython/string.pxd +76 -0
  84. sage/cpython/string.pyx +34 -0
  85. sage/cpython/string_impl.h +60 -0
  86. sage/cpython/type.cp314-win_amd64.pyd +0 -0
  87. sage/cpython/type.pxd +2 -0
  88. sage/cpython/type.pyx +40 -0
  89. sage/cpython/wrapperdescr.pxd +67 -0
  90. sage/ext/all__sagemath_objects.py +3 -0
  91. sage/ext/ccobject.h +64 -0
  92. sage/ext/cplusplus.pxd +17 -0
  93. sage/ext/mod_int.h +30 -0
  94. sage/ext/mod_int.pxd +24 -0
  95. sage/ext/stdsage.pxd +39 -0
  96. sage/groups/all__sagemath_objects.py +1 -0
  97. sage/groups/group.cp314-win_amd64.pyd +0 -0
  98. sage/groups/group.pxd +14 -0
  99. sage/groups/group.pyx +296 -0
  100. sage/groups/old.cp314-win_amd64.pyd +0 -0
  101. sage/groups/old.pxd +14 -0
  102. sage/groups/old.pyx +219 -0
  103. sage/libs/all__sagemath_objects.py +3 -0
  104. sage/libs/gmp/__init__.py +1 -0
  105. sage/libs/gmp/all.pxd +6 -0
  106. sage/libs/gmp/binop.pxd +23 -0
  107. sage/libs/gmp/misc.pxd +8 -0
  108. sage/libs/gmp/mpf.pxd +88 -0
  109. sage/libs/gmp/mpn.pxd +57 -0
  110. sage/libs/gmp/mpq.pxd +57 -0
  111. sage/libs/gmp/mpz.pxd +202 -0
  112. sage/libs/gmp/pylong.cp314-win_amd64.pyd +0 -0
  113. sage/libs/gmp/pylong.pxd +12 -0
  114. sage/libs/gmp/pylong.pyx +150 -0
  115. sage/libs/gmp/random.pxd +25 -0
  116. sage/libs/gmp/randomize.pxd +59 -0
  117. sage/libs/gmp/types.pxd +53 -0
  118. sage/libs/gmpxx.pxd +19 -0
  119. sage/misc/abstract_method.py +276 -0
  120. sage/misc/all__sagemath_objects.py +43 -0
  121. sage/misc/bindable_class.py +253 -0
  122. sage/misc/c3_controlled.cp314-win_amd64.pyd +0 -0
  123. sage/misc/c3_controlled.pxd +2 -0
  124. sage/misc/c3_controlled.pyx +1402 -0
  125. sage/misc/cachefunc.cp314-win_amd64.pyd +0 -0
  126. sage/misc/cachefunc.pxd +43 -0
  127. sage/misc/cachefunc.pyx +3801 -0
  128. sage/misc/call.py +188 -0
  129. sage/misc/classcall_metaclass.cp314-win_amd64.pyd +0 -0
  130. sage/misc/classcall_metaclass.pxd +14 -0
  131. sage/misc/classcall_metaclass.pyx +599 -0
  132. sage/misc/constant_function.cp314-win_amd64.pyd +0 -0
  133. sage/misc/constant_function.pyx +130 -0
  134. sage/misc/decorators.py +739 -0
  135. sage/misc/fast_methods.cp314-win_amd64.pyd +0 -0
  136. sage/misc/fast_methods.pxd +20 -0
  137. sage/misc/fast_methods.pyx +351 -0
  138. sage/misc/flatten.py +90 -0
  139. sage/misc/fpickle.cp314-win_amd64.pyd +0 -0
  140. sage/misc/fpickle.pyx +176 -0
  141. sage/misc/function_mangling.cp314-win_amd64.pyd +0 -0
  142. sage/misc/function_mangling.pxd +11 -0
  143. sage/misc/function_mangling.pyx +308 -0
  144. sage/misc/inherit_comparison.cp314-win_amd64.pyd +0 -0
  145. sage/misc/inherit_comparison.pxd +5 -0
  146. sage/misc/inherit_comparison.pyx +105 -0
  147. sage/misc/instancedoc.cp314-win_amd64.pyd +0 -0
  148. sage/misc/instancedoc.pyx +331 -0
  149. sage/misc/lazy_attribute.cp314-win_amd64.pyd +0 -0
  150. sage/misc/lazy_attribute.pyx +607 -0
  151. sage/misc/lazy_format.py +132 -0
  152. sage/misc/lazy_import.cp314-win_amd64.pyd +0 -0
  153. sage/misc/lazy_import.pxd +13 -0
  154. sage/misc/lazy_import.pyx +1307 -0
  155. sage/misc/lazy_import_cache.py +36 -0
  156. sage/misc/lazy_list.cp314-win_amd64.pyd +0 -0
  157. sage/misc/lazy_list.pxd +19 -0
  158. sage/misc/lazy_list.pyx +1187 -0
  159. sage/misc/lazy_string.cp314-win_amd64.pyd +0 -0
  160. sage/misc/lazy_string.pxd +7 -0
  161. sage/misc/lazy_string.pyx +546 -0
  162. sage/misc/misc.py +980 -0
  163. sage/misc/misc_c.cp314-win_amd64.pyd +0 -0
  164. sage/misc/misc_c.pxd +3 -0
  165. sage/misc/misc_c.pyx +765 -0
  166. sage/misc/namespace_package.py +37 -0
  167. sage/misc/nested_class.cp314-win_amd64.pyd +0 -0
  168. sage/misc/nested_class.pxd +3 -0
  169. sage/misc/nested_class.pyx +394 -0
  170. sage/misc/persist.cp314-win_amd64.pyd +0 -0
  171. sage/misc/persist.pyx +1279 -0
  172. sage/misc/prandom.py +418 -0
  173. sage/misc/randstate.cp314-win_amd64.pyd +0 -0
  174. sage/misc/randstate.pxd +31 -0
  175. sage/misc/randstate.pyx +1096 -0
  176. sage/misc/repr.py +203 -0
  177. sage/misc/reset.cp314-win_amd64.pyd +0 -0
  178. sage/misc/reset.pyx +196 -0
  179. sage/misc/sage_ostools.cp314-win_amd64.pyd +0 -0
  180. sage/misc/sage_ostools.pyx +323 -0
  181. sage/misc/sage_timeit.py +275 -0
  182. sage/misc/sage_timeit_class.cp314-win_amd64.pyd +0 -0
  183. sage/misc/sage_timeit_class.pyx +120 -0
  184. sage/misc/sage_unittest.py +639 -0
  185. sage/misc/sageinspect.py +2792 -0
  186. sage/misc/session.cp314-win_amd64.pyd +0 -0
  187. sage/misc/session.pyx +392 -0
  188. sage/misc/superseded.py +576 -0
  189. sage/misc/test_nested_class.py +228 -0
  190. sage/misc/timing.py +264 -0
  191. sage/misc/unknown.py +222 -0
  192. sage/misc/verbose.py +253 -0
  193. sage/misc/weak_dict.cp314-win_amd64.pyd +0 -0
  194. sage/misc/weak_dict.pxd +15 -0
  195. sage/misc/weak_dict.pyx +1197 -0
  196. sage/modules/all__sagemath_objects.py +1 -0
  197. sage/modules/module.cp314-win_amd64.pyd +0 -0
  198. sage/modules/module.pxd +5 -0
  199. sage/modules/module.pyx +329 -0
  200. sage/rings/all__sagemath_objects.py +3 -0
  201. sage/rings/integer_fake.h +22 -0
  202. sage/rings/integer_fake.pxd +55 -0
  203. sage/rings/integer_fake.pyi +8 -0
  204. sage/sets/all__sagemath_objects.py +3 -0
  205. sage/sets/pythonclass.cp314-win_amd64.pyd +0 -0
  206. sage/sets/pythonclass.pxd +9 -0
  207. sage/sets/pythonclass.pyx +247 -0
  208. sage/structure/__init__.py +13 -0
  209. sage/structure/all.py +30 -0
  210. sage/structure/category_object.cp314-win_amd64.pyd +0 -0
  211. sage/structure/category_object.pxd +28 -0
  212. sage/structure/category_object.pyx +1090 -0
  213. sage/structure/coerce.cp314-win_amd64.pyd +0 -0
  214. sage/structure/coerce.pxd +44 -0
  215. sage/structure/coerce.pyx +2113 -0
  216. sage/structure/coerce_actions.cp314-win_amd64.pyd +0 -0
  217. sage/structure/coerce_actions.pxd +27 -0
  218. sage/structure/coerce_actions.pyx +988 -0
  219. sage/structure/coerce_dict.cp314-win_amd64.pyd +0 -0
  220. sage/structure/coerce_dict.pxd +51 -0
  221. sage/structure/coerce_dict.pyx +1557 -0
  222. sage/structure/coerce_exceptions.py +23 -0
  223. sage/structure/coerce_maps.cp314-win_amd64.pyd +0 -0
  224. sage/structure/coerce_maps.pxd +24 -0
  225. sage/structure/coerce_maps.pyx +656 -0
  226. sage/structure/debug_options.cp314-win_amd64.pyd +0 -0
  227. sage/structure/debug_options.pxd +6 -0
  228. sage/structure/debug_options.pyx +54 -0
  229. sage/structure/dynamic_class.py +541 -0
  230. sage/structure/element.cp314-win_amd64.pyd +0 -0
  231. sage/structure/element.pxd +271 -0
  232. sage/structure/element.pyx +4584 -0
  233. sage/structure/element_wrapper.cp314-win_amd64.pyd +0 -0
  234. sage/structure/element_wrapper.pxd +12 -0
  235. sage/structure/element_wrapper.pyx +582 -0
  236. sage/structure/factorization.py +1457 -0
  237. sage/structure/factorization_integer.py +154 -0
  238. sage/structure/factory.cp314-win_amd64.pyd +0 -0
  239. sage/structure/factory.pyx +863 -0
  240. sage/structure/formal_sum.py +489 -0
  241. sage/structure/gens_py.py +73 -0
  242. sage/structure/global_options.py +1725 -0
  243. sage/structure/indexed_generators.py +863 -0
  244. sage/structure/list_clone.cp314-win_amd64.pyd +0 -0
  245. sage/structure/list_clone.pxd +65 -0
  246. sage/structure/list_clone.pyx +1867 -0
  247. sage/structure/list_clone_demo.cp314-win_amd64.pyd +0 -0
  248. sage/structure/list_clone_demo.pyx +248 -0
  249. sage/structure/list_clone_timings.py +179 -0
  250. sage/structure/list_clone_timings_cy.cp314-win_amd64.pyd +0 -0
  251. sage/structure/list_clone_timings_cy.pyx +86 -0
  252. sage/structure/mutability.cp314-win_amd64.pyd +0 -0
  253. sage/structure/mutability.pxd +21 -0
  254. sage/structure/mutability.pyx +346 -0
  255. sage/structure/nonexact.py +69 -0
  256. sage/structure/parent.cp314-win_amd64.pyd +0 -0
  257. sage/structure/parent.pxd +112 -0
  258. sage/structure/parent.pyx +3087 -0
  259. sage/structure/parent_base.cp314-win_amd64.pyd +0 -0
  260. sage/structure/parent_base.pxd +13 -0
  261. sage/structure/parent_base.pyx +35 -0
  262. sage/structure/parent_gens.cp314-win_amd64.pyd +0 -0
  263. sage/structure/parent_gens.pxd +22 -0
  264. sage/structure/parent_gens.pyx +374 -0
  265. sage/structure/parent_old.cp314-win_amd64.pyd +0 -0
  266. sage/structure/parent_old.pxd +24 -0
  267. sage/structure/parent_old.pyx +278 -0
  268. sage/structure/proof/__init__.py +1 -0
  269. sage/structure/proof/all.py +243 -0
  270. sage/structure/proof/proof.py +300 -0
  271. sage/structure/richcmp.cp314-win_amd64.pyd +0 -0
  272. sage/structure/richcmp.pxd +212 -0
  273. sage/structure/richcmp.pyx +494 -0
  274. sage/structure/sage_object.cp314-win_amd64.pyd +0 -0
  275. sage/structure/sage_object.pxd +3 -0
  276. sage/structure/sage_object.pyx +1088 -0
  277. sage/structure/sage_object_test.py +19 -0
  278. sage/structure/sequence.py +937 -0
  279. sage/structure/set_factories.py +1178 -0
  280. sage/structure/set_factories_example.py +527 -0
  281. sage/structure/support_view.py +164 -0
  282. sage/structure/test_factory.py +56 -0
  283. sage/structure/unique_representation.py +1443 -0
@@ -0,0 +1,271 @@
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 base_extend(self, R)
156
+
157
+ cdef getattr_from_category(self, name)
158
+
159
+ cpdef _act_on_(self, x, bint self_on_left)
160
+ cpdef _acted_upon_(self, x, bint self_on_left)
161
+
162
+ cdef _add_(self, other)
163
+ cdef _sub_(self, other)
164
+ cdef _neg_(self)
165
+ cdef _add_long(self, long n)
166
+
167
+ cdef _mul_(self, other)
168
+ cdef _mul_long(self, long n)
169
+ cdef _matmul_(self, other)
170
+ cdef _div_(self, other)
171
+ cdef _floordiv_(self, other)
172
+ cdef _mod_(self, other)
173
+
174
+ cdef _pow_(self, other)
175
+ cdef _pow_int(self, n)
176
+ cdef _pow_long(self, long n)
177
+
178
+
179
+ cdef class ElementWithCachedMethod(Element):
180
+ cdef public dict _cached_methods
181
+
182
+ cdef class ModuleElement(Element) # forward declaration
183
+
184
+ cdef class RingElement(ModuleElement) # forward declaration
185
+
186
+ cdef class ModuleElement(Element):
187
+ cpdef _add_(self, other)
188
+ cpdef _sub_(self, other)
189
+ cpdef _neg_(self)
190
+
191
+ # self._rmul_(x) is x * self
192
+ cpdef _lmul_(self, Element right)
193
+ # self._lmul_(x) is self * x
194
+ cpdef _rmul_(self, Element left)
195
+
196
+ cdef class ModuleElementWithMutability(ModuleElement):
197
+ cdef bint _is_immutable
198
+ cpdef bint is_immutable(self) noexcept
199
+ cpdef bint is_mutable(self) noexcept
200
+
201
+ cdef class MonoidElement(Element):
202
+ cpdef _pow_int(self, n)
203
+
204
+ cdef class MultiplicativeGroupElement(MonoidElement):
205
+ cpdef _div_(self, other)
206
+
207
+ cdef class AdditiveGroupElement(ModuleElement):
208
+ pass
209
+
210
+ cdef class RingElement(ModuleElement):
211
+ cpdef _mul_(self, other)
212
+ cpdef _div_(self, other)
213
+ cpdef _pow_int(self, n)
214
+
215
+ cdef class CommutativeRingElement(RingElement):
216
+ pass
217
+
218
+ cdef class IntegralDomainElement(CommutativeRingElement):
219
+ pass
220
+
221
+ cdef class DedekindDomainElement(IntegralDomainElement):
222
+ pass
223
+
224
+ cdef class PrincipalIdealDomainElement(DedekindDomainElement):
225
+ pass
226
+
227
+ cdef class EuclideanDomainElement(PrincipalIdealDomainElement):
228
+ cpdef _floordiv_(self, other)
229
+ cpdef _mod_(self, other)
230
+
231
+ cdef class FieldElement(CommutativeRingElement):
232
+ cpdef _floordiv_(self, other)
233
+
234
+ cdef class AlgebraElement(RingElement):
235
+ pass
236
+
237
+ cdef class CommutativeAlgebraElement(CommutativeRingElement):
238
+ pass
239
+
240
+ cdef class Expression(CommutativeRingElement):
241
+ pass
242
+
243
+ cdef class InfinityElement(RingElement):
244
+ pass
245
+
246
+ cdef class Vector(ModuleElementWithMutability):
247
+ cdef Py_ssize_t _degree
248
+
249
+ # Return the dot product using the simple metric
250
+ # $e_i \cdot e_j = \delta_{ij}$. The first assumes that the parents
251
+ # are equal, both assume that the degrees are equal.
252
+ cpdef _dot_product_(Vector left, Vector right)
253
+ cpdef _dot_product_coerce_(Vector left, Vector right)
254
+
255
+ cpdef _pairwise_product_(Vector left, Vector right) # override, call if parents the same
256
+
257
+ cdef bint is_sparse_c(self) noexcept
258
+ cdef bint is_dense_c(self) noexcept
259
+
260
+
261
+ cdef class Matrix(ModuleElement):
262
+ # All matrix classes must be written in Cython
263
+ cdef Py_ssize_t _nrows
264
+ cdef Py_ssize_t _ncols
265
+
266
+ cdef _vector_times_matrix_(matrix_right, Vector vector_left) # OK to override, AND call directly
267
+ cdef _matrix_times_vector_(matrix_left, Vector vector_right) # OK to override, AND call directly
268
+ cdef _matrix_times_matrix_(left, Matrix right) # OK to override, AND call directly
269
+
270
+ cdef bint is_sparse_c(self) noexcept
271
+ cdef bint is_dense_c(self) noexcept