@@ -75,27 +75,28 @@ reduce = (tar,rawF) -> (
7575
7676addHook (ReduceHooks, Strategy => Default , (tar, rawF) -> rawF % raw gb presentation tar)
7777
78+ toSameRing = (m,n) -> (
79+ R := ring m; S := ring n;
80+ if R =!= S then (
81+ if isPromotable(R,S) then (promote (m,S),n)
82+ else if isPromotable(S,R) then (m,promote (n,R))
83+ else error " expected compatible rings"
84+ )
85+ else (m,n))
86+
7887InfiniteNumber * Matrix := (r,m) -> (map (target m, source m, matrix (r* (entries m))))
7988Matrix * InfiniteNumber := (m,r) -> r* m
8089Number * Matrix :=
8190RingElement * Matrix := (r,m) -> (
82- if ring r =!= ring m then try r = promote (r,ring m) else m = promote (m, ring r );
91+ (r,m) = toSameRing(r,m );
8392 map (target m, source m, reduce(target m, raw r * raw m)))
8493Matrix * Number :=
8594Matrix * RingElement := (m,r) -> (
86- if ring r =!= ring m then try r = promote (r,ring m) else m = promote (m, ring r );
95+ (r,m) = toSameRing(r,m );
8796 map (target m, source m, reduce(target m, raw m * raw r)))
8897Matrix / Number :=
8998Matrix / RingElement := (m,r) -> m * (1/r)
9099
91- toSameRing = (m,n) -> (
92- if ring m =!= ring n then (
93- try (promote (m,ring n) , n) else
94- try (m , promote (n,ring m))
95- else error " expected compatible rings"
96- )
97- else (m,n))
98-
99100Matrix _ Sequence := RingElement => (m,ind) -> (
100101 if # ind === 2
101102 then promote (rawMatrixEntry(m.RawMatrix, ind#0, ind#1), ring m)
@@ -176,13 +177,7 @@ Matrix * Matrix := Matrix => (m,n) -> (
176177 q,
177178 Degree => degree m + if m.?RingMap then m.RingMap .cache .DegreeMap degree n else degree n))
178179 else (
179- R := ring m;
180- S := ring target n;
181- if R =!= S then ( -- use toSameRing?
182- try m = promote (m,S) else
183- try n = promote (n,R) else
184- error " maps over incompatible rings" ;
185- );
180+ (m,n) = toSameRing(m,n);
186181 M = target m;
187182 P := source m;
188183 N = source n;
0 commit comments