Skip to content

Commit 7bc6156

Browse files
committed
Fix midpoint for tower rings
Add helper methods for the "midpoint" of a ring (which is the ring where the midpoints of polynomials lie).
1 parent db394f1 commit 7bc6156

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

M2/Macaulay2/m2/intervals.m2

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,16 @@ isEmpty CCi := x -> isEmptyRRi realPart x or isEmptyRRi imaginaryPart x
123123
midpoint = method()
124124
midpoint Number := identity
125125
midpoint RRi := midpoint CCi := midpoint0
126+
127+
midpoint Ring := R -> (
128+
if instance(R, RealIntervalField) then RR_(precision R)
129+
else if instance(R, ComplexIntervalField) then CC_(precision R)
130+
else R)
131+
126132
midpoint RingElement := f -> (
127-
R := ring f;
128-
kk := coefficientRing R;
129-
S := R.cache#"midpoint ring" ??= (
130-
if instance(kk, RealIntervalField)
131-
then RR_(precision kk) monoid R
132-
else if instance(kk, ComplexIntervalField)
133-
then CC_(precision kk) monoid R
134-
else R);
135-
sum(listForm f, (m, c) -> midpoint c * product(#m, i -> S_i^(m#i))))
133+
R := midpoint ring f;
134+
if R === ring f then f
135+
else sum(listForm f, (m, c) -> midpoint c * product(#m, i -> R_i^(m#i))))
136136

137137
toExternalString RRi := x -> "interval" | toExternalString (left x, right x)
138138
toExternalString CCi := x -> "interval" | toExternalString (left realPart x+(left imaginaryPart x)*ii,right realPart x+(right imaginaryPart x)*ii)

M2/Macaulay2/m2/polyrings.m2

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,11 @@ selectVariables(List,PolynomialRing) := (v,R) -> (
287287
antipode = method();
288288
antipode RingElement := (f) -> new ring f from rawAntipode raw f;
289289

290+
midpoint PolynomialRing := R -> R.cache.midpoint ??= (
291+
S := midpoint coefficientRing R;
292+
if S === coefficientRing R then R
293+
else S monoid R)
294+
290295
-- Local Variables:
291296
-- compile-command: "make -C $M2BUILDDIR/Macaulay2/m2 "
292297
-- End:

M2/Macaulay2/packages/Macaulay2Doc/doc_intervals.m2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ SeeAlso
4242
diameter
4343
///
4444

45+
-- helper methods not intended to be called by the user
46+
undocumented {(midpoint, Ring), (midpoint, PolynomialRing)}
47+
4548
doc ///
4649
Key
4750
midpoint

0 commit comments

Comments
 (0)