@@ -2,9 +2,12 @@ using ChainRulesCore
2
2
using ChainRulesTestUtils
3
3
using PSFModels
4
4
using PSFModels: Gaussian, Normal, AiryDisk, Moffat
5
+ using StableRNGs
5
6
using StaticArrays
6
7
using Test
7
8
9
+ rng = StableRNG (122 )
10
+
8
11
function test_model_interface (K)
9
12
# test defaults
10
13
m = @inferred K (fwhm= 10 )
@@ -70,69 +73,85 @@ function test_model_interface(K)
70
73
@test m (m. pos) ≈ BigFloat (1 )
71
74
end
72
75
73
- function test_model_grads (K)
74
-
75
- end
76
-
77
- @testset " Model Interface - $K " for K in (Gaussian, AiryDisk, Moffat)
78
- test_model_interface (K)
79
- end
80
-
81
76
@testset " Gaussian" begin
82
- m = Gaussian (fwhm= 10 )
83
- expected = exp (- 4 * log (2 ) * sum (abs2, SA[1 , 2 ]) / 100 )
84
- @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
85
- @test repr (m) == " Gaussian{Float64}(pos=[0, 0], fwhm=10, amp=1.0)"
77
+ test_model_interface (Gaussian)
78
+
79
+ @testset " isotropic" begin
80
+ m = Gaussian (fwhm= 10 )
81
+ expected = exp (- 4 * log (2 ) * sum (abs2, SA[1 , 2 ]) / 100 )
82
+ @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
83
+ @test repr (m) == " Gaussian{Float64}(pos=[0, 0], fwhm=10, amp=1.0)"
84
+ end
86
85
87
- m = Gaussian (fwhm= (10 , 9 ))
88
- wdist = (1 / 10 )^ 2 + (2 / 9 )^ 2
89
- expected = exp (- 4 * log (2 ) * wdist)
90
- @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
91
- @test repr (m) == " Gaussian{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0)"
86
+ @testset " diagonal" begin
87
+ m = Gaussian (fwhm= (10 , 9 ))
88
+ wdist = (1 / 10 )^ 2 + (2 / 9 )^ 2
89
+ expected = exp (- 4 * log (2 ) * wdist)
90
+ @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
91
+ @test repr (m) == " Gaussian{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0)"
92
+ end
92
93
93
94
# test Normal alias
94
95
@test Normal (fwhm= 10 ) === Gaussian (fwhm= 10 )
96
+
97
+ @testset " gradients" begin
98
+ psf_iso = Gaussian (fwhm= 10 )
99
+ psf_tang = Tangent {Gaussian} (fwhm= rand (rng), pos= rand (rng, 2 ), amp= rand (rng), indices= ZeroTangent ())
100
+ end
95
101
end
96
102
97
103
98
104
@testset " AiryDisk" begin
99
- m = AiryDisk (fwhm= 10 )
100
- radius = m. fwhm * 1.18677
101
- # first radius is 0
102
- @test m (radius, 0 ) ≈ 0 atol= eps (Float64)
103
- @test m (- radius, 0 ) ≈ 0 atol= eps (Float64)
104
- @test m (0 , radius) ≈ 0 atol= eps (Float64)
105
- @test m (0 , - radius) ≈ 0 atol= eps (Float64)
106
- @test repr (m) == " AiryDisk{Float64}(pos=[0, 0], fwhm=10, amp=1.0)"
107
-
108
- m = AiryDisk (fwhm= (10 , 9 ))
109
- r1 = m. fwhm[1 ] * 1.18677
110
- r2 = m. fwhm[2 ] * 1.18677
111
- # first radius is 0
112
- @test m (r1, 0 ) ≈ 0 atol= eps (Float64)
113
- @test m (- r1, 0 ) ≈ 0 atol= eps (Float64)
114
- @test m (0 , r2) ≈ 0 atol= eps (Float64)
115
- @test m (0 , - r2) ≈ 0 atol= eps (Float64)
116
- @test repr (m) == " AiryDisk{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0)"
105
+ test_model_interface (AiryDisk)
106
+
107
+ @testset " isotropic" begin
108
+ m = AiryDisk (fwhm= 10 )
109
+ radius = m. fwhm * 1.18677
110
+ # first radius is 0
111
+ @test m (radius, 0 ) ≈ 0 atol= eps (Float64)
112
+ @test m (- radius, 0 ) ≈ 0 atol= eps (Float64)
113
+ @test m (0 , radius) ≈ 0 atol= eps (Float64)
114
+ @test m (0 , - radius) ≈ 0 atol= eps (Float64)
115
+ @test repr (m) == " AiryDisk{Float64}(pos=[0, 0], fwhm=10, amp=1.0)"
116
+ end
117
+
118
+ @testset " diagonal" begin
119
+ m = AiryDisk (fwhm= (10 , 9 ))
120
+ r1 = m. fwhm[1 ] * 1.18677
121
+ r2 = m. fwhm[2 ] * 1.18677
122
+ # first radius is 0
123
+ @test m (r1, 0 ) ≈ 0 atol= eps (Float64)
124
+ @test m (- r1, 0 ) ≈ 0 atol= eps (Float64)
125
+ @test m (0 , r2) ≈ 0 atol= eps (Float64)
126
+ @test m (0 , - r2) ≈ 0 atol= eps (Float64)
127
+ @test repr (m) == " AiryDisk{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0)"
128
+ end
117
129
end
118
130
119
131
@testset " Moffat" begin
120
- m = Moffat (fwhm= 10 )
121
- expected = inv (1 + sum (abs2, SA[1 , 2 ]) / 25 )
122
- @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
123
- @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=10, amp=1.0, alpha=1)"
124
-
125
- m = Moffat (fwhm= (10 , 9 ))
126
- wdist = (1 / 5 )^ 2 + (2 / 4.5 )^ 2
127
- expected = inv (1 + wdist)
128
- @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
129
- @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0, alpha=1)"
130
-
131
- # different alpha
132
- m = Moffat (fwhm= 10 , alpha= 2 )
133
- expected = inv (1 + sum (abs2, SA[1 , 2 ]) / 25 )^ 2
134
- @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
135
- @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=10, amp=1.0, alpha=2)"
132
+ test_model_interface (Moffat)
133
+
134
+ @testset " isotropic" begin
135
+ m = Moffat (fwhm= 10 )
136
+ expected = inv (1 + sum (abs2, SA[1 , 2 ]) / 25 )
137
+ @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
138
+ @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=10, amp=1.0, alpha=1)"
139
+ end
140
+
141
+ @testset " diagonal" begin
142
+ m = Moffat (fwhm= (10 , 9 ))
143
+ wdist = (1 / 5 )^ 2 + (2 / 4.5 )^ 2
144
+ expected = inv (1 + wdist)
145
+ @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
146
+ @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=(10, 9), amp=1.0, alpha=1)"
147
+ end
148
+
149
+ @testset " alpha" begin
150
+ m = Moffat (fwhm= 10 , alpha= 2 )
151
+ expected = inv (1 + sum (abs2, SA[1 , 2 ]) / 25 )^ 2
152
+ @test m[2 , 1 ] ≈ m (1 , 2 ) ≈ expected
153
+ @test repr (m) == " Moffat{Float64}(pos=[0, 0], fwhm=10, amp=1.0, alpha=2)"
154
+ end
136
155
end
137
156
138
157
include (" plotting.jl" )
0 commit comments