Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 4th order derivative transforms #586

Merged
merged 22 commits into from
Jul 31, 2023
Merged
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8922d94
Increase max matrix size of transform
unalmis Jul 17, 2023
3399eaf
Add fourth order zernike radial
unalmis Jul 18, 2023
cdefd9f
Merge branch 'master' into higher_order_deriv
unalmis Jul 18, 2023
8f3ca37
Lower bound transform matrix order to 1
unalmis Jul 18, 2023
e5eee12
Update transform class for deriv order
unalmis Jul 18, 2023
abfda65
Add back dropped line of code
unalmis Jul 18, 2023
3ff4ebf
Add back dummy _set_up method
unalmis Jul 19, 2023
15f816a
Document use of _set_up function and fix test to raise ValueError
unalmis Jul 19, 2023
d78e4a5
Remove _set_up method now that io save stuff was...
unalmis Jul 19, 2023
0882ba4
Merge branch 'master' into higher_order_deriv
f0uriest Jul 20, 2023
07bed02
Merge branch 'master' into higher_order_deriv
f0uriest Jul 20, 2023
e6a84a0
Tests for Zernike polynomial radial derivative
unalmis Jul 20, 2023
7574d8a
Merge branch 'master' into higher_order_deriv
unalmis Jul 20, 2023
b8c877f
Ignore division by zero warnings in compute funs
unalmis Jul 21, 2023
60a5bb0
Fix test_zernike_radial
unalmis Jul 25, 2023
8683ba2
git checkout add_all_limits desc/compute/_core.py
unalmis Jul 25, 2023
1a63fb9
Merge branch 'master' into higher_order_deriv
unalmis Jul 25, 2023
73fab8f
Sort _core using script
unalmis Jul 25, 2023
73e4c57
Merge branch 'master' into higher_order_deriv
unalmis Jul 27, 2023
b021ef2
Merge branch 'master' into higher_order_deriv
f0uriest Jul 28, 2023
9e18d49
Merge branch 'master' into higher_order_deriv
f0uriest Jul 28, 2023
d76d9dd
Merge branch 'master' into higher_order_deriv
f0uriest Jul 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 65 additions & 69 deletions tests/test_basis.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,76 +142,72 @@ def test_chebyshev(self):
chebyshev(r[:, np.newaxis], l, dr=1)

@pytest.mark.unit
def test_zernike_radial(self):
def test_zernike_radial(self): # noqa: C901
"""Test zernike_radial function, comparing to analytic formulas."""

def test_zernike_radial(self):
unalmis marked this conversation as resolved.
Show resolved Hide resolved
"""Test zernike_radial function, comparing to analytic formulas."""
# https://en.wikipedia.org/wiki/Zernike_polynomials#Radial_polynomials

def Z3_1(x, dx=0):
if dx == 0:
return 3 * x**3 - 2 * x
if dx == 1:
return 9 * x**2 - 2
if dx == 2:
return 18 * x
if dx == 3:
return np.full_like(x, 18)
if dx >= 4:
return np.zeros_like(x)

def Z4_2(x, dx=0):
if dx == 0:
return 4 * x**4 - 3 * x**2
if dx == 1:
return 16 * x**3 - 6 * x
if dx == 2:
return 48 * x**2 - 6
if dx == 3:
return 96 * x
if dx == 4:
return np.full_like(x, 96)
if dx >= 5:
return np.zeros_like(x)

def Z6_2(x, dx=0):
if dx == 0:
return 15 * x**6 - 20 * x**4 + 6 * x**2
if dx == 1:
return 90 * x**5 - 80 * x**3 + 12 * x
if dx == 2:
return 450 * x**4 - 240 * x**2 + 12
if dx == 3:
return 1800 * x**3 - 480 * x
if dx == 4:
return 5400 * x**2 - 480
if dx == 5:
return 10800 * x
if dx == 6:
return np.full_like(x, 10800)
if dx >= 7:
return np.zeros_like(x)

l = np.array([3, 4, 6])
m = np.array([1, 2, 2])
r = np.linspace(0, 1, 11) # rho coordinates
max_dr = 4
desired = {
dr: np.array([Z3_1(r, dr), Z4_2(r, dr), Z6_2(r, dr)]).T
for dr in range(max_dr + 1)
}
radial = {
dr: zernike_radial(r[:, np.newaxis], l, m, dr)
for dr in range(max_dr + 1)
}
radial_poly = {
dr: zernike_radial_poly(r[:, np.newaxis], l, m, dr)
for dr in range(max_dr + 1)
}
for dr in range(max_dr + 1):
np.testing.assert_allclose(radial[dr], desired[dr], err_msg=dr)
np.testing.assert_allclose(radial_poly[dr], desired[dr], err_msg=dr)
# https://en.wikipedia.org/wiki/Zernike_polynomials#Radial_polynomials

def Z3_1(x, dx=0):
if dx == 0:
return 3 * x**3 - 2 * x
if dx == 1:
return 9 * x**2 - 2
if dx == 2:
return 18 * x
if dx == 3:
return np.full_like(x, 18)
if dx >= 4:
return np.zeros_like(x)

def Z4_2(x, dx=0):
if dx == 0:
return 4 * x**4 - 3 * x**2
if dx == 1:
return 16 * x**3 - 6 * x
if dx == 2:
return 48 * x**2 - 6
if dx == 3:
return 96 * x
if dx == 4:
return np.full_like(x, 96)
if dx >= 5:
return np.zeros_like(x)

def Z6_2(x, dx=0):
if dx == 0:
return 15 * x**6 - 20 * x**4 + 6 * x**2
if dx == 1:
return 90 * x**5 - 80 * x**3 + 12 * x
if dx == 2:
return 450 * x**4 - 240 * x**2 + 12
if dx == 3:
return 1800 * x**3 - 480 * x
if dx == 4:
return 5400 * x**2 - 480
if dx == 5:
return 10800 * x
if dx == 6:
return np.full_like(x, 10800)
if dx >= 7:
return np.zeros_like(x)

l = np.array([3, 4, 6])
m = np.array([1, 2, 2])
r = np.linspace(0, 1, 11) # rho coordinates
max_dr = 4
desired = {
dr: np.array([Z3_1(r, dr), Z4_2(r, dr), Z6_2(r, dr)]).T
for dr in range(max_dr + 1)
}
radial = {
dr: zernike_radial(r[:, np.newaxis], l, m, dr) for dr in range(max_dr + 1)
}
radial_poly = {
dr: zernike_radial_poly(r[:, np.newaxis], l, m, dr)
for dr in range(max_dr + 1)
}
for dr in range(max_dr + 1):
np.testing.assert_allclose(radial[dr], desired[dr], err_msg=dr)
np.testing.assert_allclose(radial_poly[dr], desired[dr], err_msg=dr)

@pytest.mark.unit
def test_fourier(self):
Expand Down
Loading