Skip to content

Commit 5c5dae8

Browse files
committed
remove try in promote part 1
1 parent 6b639b8 commit 5c5dae8

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

M2/Macaulay2/m2/matrix.m2

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,27 +75,28 @@ reduce = (tar,rawF) -> (
7575

7676
addHook(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+
7887
InfiniteNumber * Matrix := (r,m) -> (map(target m, source m, matrix(r*(entries m))))
7988
Matrix * InfiniteNumber := (m,r) -> r*m
8089
Number * Matrix :=
8190
RingElement * 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)))
8493
Matrix * Number :=
8594
Matrix * 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)))
8897
Matrix / Number :=
8998
Matrix / 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-
99100
Matrix _ 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;

M2/Macaulay2/m2/matrix1.m2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ nottosamering := (X,Y) -> (
1313
if X === Y then error("expected ",pluralsynonym X, " for compatible rings")
1414
else error("expected ",X.synonym," and ",Y.synonym," for compatible rings"))
1515
samering = (M,N) -> if ring M === ring N then (M,N) else notsamering(class M,class N)
16-
tosamering := (M,N) -> if ring M === ring N then (M,N) else (
16+
tosamering := (M,N) -> if ring M === ring N then (M,N) else ( -- need merging with toSameRing in matrix.m2
1717
z := try 0_(ring M) + 0_(ring N) else nottosamering(class M,class N);
1818
(promote(M,ring z),promote(N,ring z)))
1919

0 commit comments

Comments
 (0)