From a76f7afd60c5bed6151e1be29f24f9dc740800e3 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Tue, 5 May 2026 10:33:24 -0700 Subject: [PATCH 1/2] Add failing describe_zernike(11) test --- tests/test_zernike.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_zernike.py b/tests/test_zernike.py index c1b58cc970..cd7ad8d3f4 100644 --- a/tests/test_zernike.py +++ b/tests/test_zernike.py @@ -760,6 +760,7 @@ def test_describe_zernike(): assert galsim.zernike.describe_zernike(3) == "sqrt(4) * (y)" assert galsim.zernike.describe_zernike(4) == "sqrt(3) * (-1 + 2y^2 + 2x^2)" assert galsim.zernike.describe_zernike(10) == "sqrt(8) * (-3xy^2 + x^3)" + assert galsim.zernike.describe_zernike(11) == "sqrt(5) * (1 - 6y^2 + 6y^4 - 6x^2 + 12x^2y^2 + 6x^4)" Z22str = ( "sqrt(7) * (-1 + 12y^2 - 30y^4 + 20y^6 + 12x^2" From 98ef6a6c2dcd699efe92ea81b310d459a1a34785 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Tue, 5 May 2026 10:33:51 -0700 Subject: [PATCH 2/2] Fix describe_zernike(11) --- galsim/zernike.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/galsim/zernike.py b/galsim/zernike.py index e162a20353..288a850b10 100644 --- a/galsim/zernike.py +++ b/galsim/zernike.py @@ -421,14 +421,15 @@ def describe_zernike(j): first = True out = "sqrt({}) * (".format(var) + # i, k indicate powers of x and y, respectively. for (i, k), val in np.ndenumerate(arr): if val != 0: if not first: out += " + " first = False ival = int(np.round(val)) - if ival != 1: - out += str(int(np.round(val))) + if ival != 1 or (i == 0 and k == 0): + out += str(ival) if i >= 1: out += "x" if i >= 2: @@ -442,8 +443,6 @@ def describe_zernike(j): out = out.replace("(-1x", "(-x") out = out.replace("(-1y", "(-y") out = out.replace("+ -", "- ") - if out == "sqrt(1) * ()": - out = "sqrt(1) * (1)" return out