Skip to content

Commit 70a3fe2

Browse files
Release Managervbraun
Release Manager
authored andcommitted
Trac #15947: Weaken types for _rmul_ and _lmul_
As a step towards removing the old parent with gens and using categories, we need to have `_rmul_` and `_lmul_` take any `Element`, not just `RingElement`. URL: https://trac.sagemath.org/15947 Reported by: tscrim Ticket author(s): Jeroen Demeyer Reviewer(s): Travis Scrimshaw
2 parents 2ceb2a8 + 30737e0 commit 70a3fe2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+106
-109
lines changed

src/sage/algebras/letterplace/free_algebra_element_letterplace.pxd

+1-4
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,9 @@
77
#
88
###############################################################################
99

10-
cdef class FreeAlgebraElement_letterplace
11-
12-
from sage.structure.element cimport AlgebraElement, ModuleElement, RingElement, Element
10+
from sage.structure.element cimport AlgebraElement, ModuleElement, Element
1311
from sage.rings.polynomial.multi_polynomial_libsingular cimport MPolynomialRing_libsingular, MPolynomial_libsingular
1412
from sage.algebras.letterplace.free_algebra_letterplace cimport FreeAlgebra_letterplace
1513

1614
cdef class FreeAlgebraElement_letterplace(AlgebraElement):
1715
cdef MPolynomial_libsingular _poly
18-

src/sage/algebras/letterplace/free_algebra_element_letterplace.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
555555
right._poly = A._current_ring(right._poly)
556556
return FreeAlgebraElement_letterplace(self._parent,self._poly-right._poly,check=False)
557557

558-
cpdef _lmul_(self, RingElement right):
558+
cpdef _lmul_(self, Element right):
559559
"""
560560
Multiplication from the right with an element of the base ring.
561561
@@ -569,7 +569,7 @@ cdef class FreeAlgebraElement_letterplace(AlgebraElement):
569569
"""
570570
return FreeAlgebraElement_letterplace(self._parent,self._poly._lmul_(right),check=False)
571571

572-
cpdef _rmul_(self, RingElement left):
572+
cpdef _rmul_(self, Element left):
573573
"""
574574
Multiplication from the left with an element of the base ring.
575575

src/sage/algebras/quatalg/quaternion_algebra_element.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ cdef class QuaternionAlgebraElement_abstract(AlgebraElement):
524524
"""
525525
return ~self.reduced_norm() * self.conjugate()
526526

527-
cpdef _rmul_(self, RingElement left):
527+
cpdef _rmul_(self, Element left):
528528
"""
529529
Return left*self, where left is in the base ring.
530530
@@ -538,7 +538,7 @@ cdef class QuaternionAlgebraElement_abstract(AlgebraElement):
538538
"""
539539
return self.__class__(self._parent, (left*self[0], left*self[1], left*self[2], left*self[3]), check=False)
540540

541-
cpdef _lmul_(self, RingElement right):
541+
cpdef _lmul_(self, Element right):
542542
"""
543543
Return self*right, where right is in the base ring.
544544

src/sage/interfaces/gap.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@
185185
from sage.misc.cachefunc import cached_method
186186
from sage.docs.instancedoc import instancedoc
187187
from sage.interfaces.tab_completion import ExtraTabCompletion
188+
from sage.structure.element import ModuleElement
188189
import re
189190
import os
190191
import pexpect
@@ -963,8 +964,10 @@ def get_record_element(self, record, name):
963964
return self('%s.%s' % (record.name(), name))
964965

965966

967+
# We need to inherit from ModuleElement to support
968+
# sage.structure.coerce_actions.ModuleAction
966969
@instancedoc
967-
class GapElement_generic(ExtraTabCompletion, ExpectElement):
970+
class GapElement_generic(ModuleElement, ExtraTabCompletion, ExpectElement):
968971
r"""
969972
Generic interface to the GAP3/GAP4 interpreters.
970973

src/sage/matrix/matrix0.pyx

+2-3
Original file line numberDiff line numberDiff line change
@@ -4830,8 +4830,7 @@ cdef class Matrix(sage.structure.element.Matrix):
48304830
"""
48314831
return self.change_ring(self._base_ring.quotient_ring(p))
48324832

4833-
4834-
cpdef _rmul_(self, RingElement left):
4833+
cpdef _rmul_(self, Element left):
48354834
"""
48364835
EXAMPLES::
48374836
@@ -4868,7 +4867,7 @@ cdef class Matrix(sage.structure.element.Matrix):
48684867
ans.set_unsafe(r, c, x * self.get_unsafe(r, c))
48694868
return ans
48704869

4871-
cpdef _lmul_(self, RingElement right):
4870+
cpdef _lmul_(self, Element right):
48724871
"""
48734872
EXAMPLES:
48744873

src/sage/matrix/matrix_cyclo_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ cdef class Matrix_cyclo_dense(Matrix_dense):
561561
A._matrix = self._matrix - (<Matrix_cyclo_dense>right)._matrix
562562
return A
563563

564-
cpdef _lmul_(self, RingElement right):
564+
cpdef _lmul_(self, Element right):
565565
"""
566566
Multiply a dense cyclotomic matrix by a scalar.
567567

src/sage/matrix/matrix_gf2e_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ cdef class Matrix_gf2e_dense(matrix_dense.Matrix_dense):
633633
sig_off()
634634
return ans
635635

636-
cpdef _lmul_(self, RingElement right):
636+
cpdef _lmul_(self, Element right):
637637
"""
638638
Return ``a*B`` for ``a`` an element of the base field.
639639

src/sage/matrix/matrix_gfpn_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,7 @@ cdef class Matrix_gfpn_dense(Matrix_dense):
11131113
raise ValueError("The matrix must not be empty")
11141114
return self._lmul_(self._base_ring(-1))
11151115

1116-
cpdef _lmul_(self, RingElement right):
1116+
cpdef _lmul_(self, Element right):
11171117
"""
11181118
EXAMPLES::
11191119

src/sage/matrix/matrix_integer_dense.pyx

+1-2
Original file line numberDiff line numberDiff line change
@@ -871,8 +871,7 @@ cdef class Matrix_integer_dense(Matrix_dense):
871871
sig_off()
872872
return M
873873

874-
875-
cpdef _lmul_(self, RingElement right):
874+
cpdef _lmul_(self, Element right):
876875
"""
877876
EXAMPLES::
878877

src/sage/matrix/matrix_integer_sparse.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ cdef class Matrix_integer_sparse(Matrix_sparse):
186186
# def _multiply_classical(left, matrix.Matrix _right):
187187
# def _list(self):
188188

189-
cpdef _lmul_(self, RingElement right):
189+
cpdef _lmul_(self, Element right):
190190
"""
191191
EXAMPLES::
192192

src/sage/matrix/matrix_modn_dense_template.pxi

+1-1
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ cdef class Matrix_modn_dense_template(Matrix_dense):
850850
sig_off()
851851
return M
852852

853-
cpdef _lmul_(self, RingElement left):
853+
cpdef _lmul_(self, Element left):
854854
"""
855855
EXAMPLES::
856856

src/sage/matrix/matrix_rational_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ cdef class Matrix_rational_dense(Matrix_dense):
422422
# * _dict -- sparse dictionary of underlying elements (need not be a copy)
423423
########################################################################
424424

425-
cpdef _lmul_(self, RingElement right):
425+
cpdef _lmul_(self, Element right):
426426
"""
427427
EXAMPLES::
428428

src/sage/matrix/matrix_rational_sparse.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ cdef class Matrix_rational_sparse(Matrix_sparse):
331331
# def _list(self):
332332

333333
# TODO
334-
## cpdef _lmul_(self, RingElement right):
334+
## cpdef _lmul_(self, Element right):
335335
## """
336336
## EXAMPLES:
337337
## sage: a = matrix(QQ,2,range(6))

src/sage/matrix/matrix_sparse.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ cdef class Matrix_sparse(matrix.Matrix):
295295

296296
return left.new_matrix(left._nrows, right._ncols, entries=e, coerce=False, copy=False)
297297

298-
cpdef _lmul_(self, RingElement right):
298+
cpdef _lmul_(self, Element right):
299299
"""
300300
Left scalar multiplication. Internal usage only.
301301

src/sage/modular/pollack_stevens/dist.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ cdef class Dist_vector(Dist):
996996
"""
997997
return self._addsub(<Dist_vector>_right, True)
998998

999-
cpdef _lmul_(self, RingElement right):
999+
cpdef _lmul_(self, Element right):
10001000
r"""
10011001
Scalar product of a distribution with a ring element that coerces into the base ring.
10021002

src/sage/modules/free_module_element.pyx

+4-4
Original file line numberDiff line numberDiff line change
@@ -4158,7 +4158,7 @@ cdef class FreeModuleElement_generic_dense(FreeModuleElement):
41584158
v = [(<RingElement> a[i])._sub_(<RingElement> b[i]) for i in range(left._degree)]
41594159
return left._new_c(v)
41604160
4161-
cpdef _rmul_(self, RingElement left):
4161+
cpdef _rmul_(self, Element left):
41624162
"""
41634163
EXAMPLES::
41644164

@@ -4172,7 +4172,7 @@ cdef class FreeModuleElement_generic_dense(FreeModuleElement):
41724172
v = [left * x for x in self._entries]
41734173
return self._new_c(v)
41744174
4175-
cpdef _lmul_(self, RingElement right):
4175+
cpdef _lmul_(self, Element right):
41764176
"""
41774177
EXAMPLES::
41784178

@@ -4608,7 +4608,7 @@ cdef class FreeModuleElement_generic_sparse(FreeModuleElement):
46084608
v[i] = -a
46094609
return left._new_c(v)
46104610
4611-
cpdef _lmul_(self, RingElement right):
4611+
cpdef _lmul_(self, Element right):
46124612
"""
46134613
EXAMPLES::
46144614

@@ -4624,7 +4624,7 @@ cdef class FreeModuleElement_generic_sparse(FreeModuleElement):
46244624
v[i] = prod
46254625
return self._new_c(v)
46264626
4627-
cpdef _rmul_(self, RingElement left):
4627+
cpdef _rmul_(self, Element left):
46284628
"""
46294629
EXAMPLES::
46304630

src/sage/modules/vector_double_dense.pyx

+2-3
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ cdef class Vector_double_dense(FreeModuleElement):
359359

360360
return self._new(_left._vector_numpy * _right._vector_numpy)
361361

362-
cpdef _rmul_(self, RingElement left):
362+
cpdef _rmul_(self, Element left):
363363
"""
364364
Multiply a scalar and vector
365365
@@ -375,8 +375,7 @@ cdef class Vector_double_dense(FreeModuleElement):
375375

376376
return self._new(self._python_dtype(left)*self._vector_numpy)
377377

378-
379-
cpdef _lmul_(self, RingElement right):
378+
cpdef _lmul_(self, Element right):
380379
"""
381380
Multiply a scalar and vector
382381

src/sage/modules/vector_integer_dense.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ cdef class Vector_integer_dense(free_module_element.FreeModuleElement):
282282
mpz_mul(z._entries[i], self._entries[i], r._entries[i])
283283
return z
284284

285-
cpdef _rmul_(self, RingElement left):
285+
cpdef _rmul_(self, Element left):
286286
cdef Vector_integer_dense z
287287
cdef Integer a
288288
a = left
@@ -292,7 +292,7 @@ cdef class Vector_integer_dense(free_module_element.FreeModuleElement):
292292
mpz_mul(z._entries[i], self._entries[i], a.value)
293293
return z
294294

295-
cpdef _lmul_(self, RingElement right):
295+
cpdef _lmul_(self, Element right):
296296
cdef Vector_integer_dense z
297297
cdef Integer a
298298
a = right

src/sage/modules/vector_mod2_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ cdef class Vector_mod2_dense(free_module_element.FreeModuleElement):
404404
z._entries.rows[0][i] = (self._entries.rows[0][i] & r._entries.rows[0][i])
405405
return z
406406

407-
cpdef _lmul_(self, RingElement left):
407+
cpdef _lmul_(self, Element left):
408408
"""
409409
EXAMPLES::
410410

src/sage/modules/vector_modn_dense.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ cdef class Vector_modn_dense(free_module_element.FreeModuleElement):
308308
z._entries[i] = (self._entries[i] * r._entries[i]) % self._p
309309
return z
310310

311-
cpdef _lmul_(self, RingElement left):
311+
cpdef _lmul_(self, Element left):
312312
cdef Vector_modn_dense z
313313

314314
cdef mod_int a = ivalue(left)

src/sage/modules/vector_rational_dense.pyx

+2-3
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ cdef class Vector_rational_dense(free_module_element.FreeModuleElement):
317317
mpq_mul(z._entries[i], self._entries[i], r._entries[i])
318318
return z
319319

320-
cpdef _rmul_(self, RingElement left):
320+
cpdef _rmul_(self, Element left):
321321
cdef Vector_rational_dense z
322322
cdef Rational a
323323
if isinstance(left, Rational):
@@ -334,8 +334,7 @@ cdef class Vector_rational_dense(free_module_element.FreeModuleElement):
334334
mpq_mul(z._entries[i], self._entries[i], a.value)
335335
return z
336336

337-
338-
cpdef _lmul_(self, RingElement right):
337+
cpdef _lmul_(self, Element right):
339338
cdef Vector_rational_dense z
340339
cdef Rational a
341340
if isinstance(right, Rational):

src/sage/modules/with_basis/indexed_element.pxd

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ cdef class IndexedFreeModuleElement(Element):
77

88
cpdef dict monomial_coefficients(self, bint copy=*)
99
cpdef _coefficient_fast(self, m)
10-
cpdef _lmul_(self, RingElement right)
11-
cpdef _rmul_(self, RingElement left)
10+
cpdef _lmul_(self, Element right)
11+
cpdef _rmul_(self, Element left)
1212

src/sage/modules/with_basis/indexed_element.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ cdef class IndexedFreeModuleElement(Element):
816816
scal(scalar, self._monomial_coefficients,
817817
factor_on_left=not self_on_left))
818818

819-
cpdef _lmul_(self, RingElement right):
819+
cpdef _lmul_(self, Element right):
820820
"""
821821
For backward compatibility.
822822
@@ -828,7 +828,7 @@ cdef class IndexedFreeModuleElement(Element):
828828
"""
829829
return self._acted_upon_(right, True)
830830

831-
cpdef _rmul_(self, RingElement left):
831+
cpdef _rmul_(self, Element left):
832832
"""
833833
For backward compatibility.
834834

src/sage/numerical/linear_functions.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,7 @@ cdef class LinearFunction(LinearFunctionOrConstraint):
957957
P = self.parent()
958958
return P(e)
959959

960-
cpdef _lmul_(self, RingElement b):
960+
cpdef _lmul_(self, Element b):
961961
r"""
962962
Multiplication by scalars
963963

src/sage/numerical/linear_tensor_element.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Here is an example of a linear function tensored with a vector space::
2222
from cpython.object cimport *
2323

2424
from sage.misc.fast_methods cimport hash_by_id
25-
from sage.structure.element cimport ModuleElement, RingElement
25+
from sage.structure.element cimport ModuleElement, Element
2626
from sage.numerical.linear_functions cimport LinearFunction, is_LinearFunction
2727

2828

@@ -331,7 +331,7 @@ cdef class LinearTensor(ModuleElement):
331331
result[key] = self._f.get(key, 0) - coeff
332332
return self.parent()(result)
333333

334-
cpdef _lmul_(self, RingElement b):
334+
cpdef _lmul_(self, Element b):
335335
r"""
336336
Return multiplication by scalar.
337337

src/sage/quivers/algebra_elements.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,7 @@ cdef class PathAlgebraElement(RingElement):
12031203

12041204
## (scalar) multiplication
12051205

1206-
cpdef _lmul_(self, RingElement right):
1206+
cpdef _lmul_(self, Element right):
12071207
"""
12081208
EXAMPLES::
12091209
@@ -1234,7 +1234,7 @@ cdef class PathAlgebraElement(RingElement):
12341234
return self._new_(outnxt)
12351235
return self._new_(out)
12361236

1237-
cpdef _rmul_(self, RingElement left):
1237+
cpdef _rmul_(self, Element left):
12381238
"""
12391239
EXAMPLES::
12401240

src/sage/rings/laurent_series_ring_element.pyx

+2-2
Original file line numberDiff line numberDiff line change
@@ -737,10 +737,10 @@ cdef class LaurentSeries(AlgebraElement):
737737
self.__u * right.__u,
738738
self.__n + right.__n)
739739

740-
cpdef _rmul_(self, RingElement c):
740+
cpdef _rmul_(self, Element c):
741741
return type(self)(self._parent, self.__u._rmul_(c), self.__n)
742742

743-
cpdef _lmul_(self, RingElement c):
743+
cpdef _lmul_(self, Element c):
744744
return type(self)(self._parent, self.__u._lmul_(c), self.__n)
745745

746746
def __pow__(_self, r, dummy):

0 commit comments

Comments
 (0)