@@ -189,57 +189,136 @@ def test_spectral2():
189189 c = u .AA .to (u .J , 1 , u .spectral ())
190190 assert_allclose (b , c )
191191
192+ c = u .J .to (u .Hz , b , u .spectral ())
193+ assert_allclose (a , c )
194+
192195
193196def test_spectral3 ():
194197 a = u .nm .to (u .Hz , [1000 , 2000 ], u .spectral ())
195198 assert_allclose (a , [2.99792458e+14 , 1.49896229e+14 ])
196199
197200
198- def test_spectraldensity ():
201+ @pytest .mark .parametrize (
202+ ('in_val' , 'in_unit' ),
203+ [([0.1 , 5000.0 , 10000.0 ], u .AA ),
204+ ([2.99792458e+19 , 5.99584916e+14 , 2.99792458e+14 ], u .Hz ),
205+ ([1.98644568e-14 , 3.97289137e-19 , 1.98644568e-19 ], u .J )])
206+ def test_spectral4 (in_val , in_unit ):
207+ """Wave number conversion w.r.t. wavelength, freq, and energy."""
208+ # Forward
209+ a = in_unit .to (u .micron ** - 1 , in_val , u .spectral ())
210+ assert_allclose (a , [1e+5 , 2.0 , 1.0 ])
211+
212+ # Backward
213+ b = (u .micron ** - 1 ).to (in_unit , [1e+5 , 2.0 , 1.0 ], u .spectral ())
214+ assert_allclose (b , in_val )
199215
216+
217+ def test_spectraldensity ():
200218 a = u .AA .to (u .Jy , 1 , u .spectral_density (u .eV , 2.2 ))
201219 assert_allclose (a , 1059416252057.8357 , rtol = 1e-4 )
202220
203221 b = u .Jy .to (u .AA , a , u .spectral_density (u .eV , 2.2 ))
204222 assert_allclose (b , 1 )
205223
224+ c = u .AA .to (u .Jy , 1 , u .spectral_density (2.2 * u .eV ))
225+ assert_allclose (c , 1059416252057.8357 , rtol = 1e-4 )
226+
227+ d = u .Jy .to (u .AA , c , u .spectral_density (2.2 * u .eV ))
228+ assert_allclose (d , 1 )
229+
206230
207231def test_spectraldensity2 ():
208232 flambda = u .erg / u .angstrom / u .cm ** 2 / u .s
209233 fnu = u .erg / u .Hz / u .cm ** 2 / u .s
210234
211- a = flambda .to (fnu , 1 , u .spectral_density (u .AA , 3500 ))
235+ a = flambda .to (fnu , 1 , u .spectral_density (u .Quantity ( 3500 , u . AA ) ))
212236 assert_allclose (a , 4.086160166177361e-12 )
213237
214238
215239def test_spectraldensity3 ():
216-
217240 # Define F_nu in Jy
218241 f_nu = u .Jy
219242
243+ # Define F_lambda in ergs / cm^2 / s / micron
244+ f_lambda = u .erg / u .cm ** 2 / u .s / u .micron
245+
246+ # 1 GHz
247+ one_ghz = u .Quantity (1 , u .GHz )
248+
220249 # Convert to ergs / cm^2 / s / Hz
221250 assert_allclose (f_nu .to (u .erg / u .cm ** 2 / u .s / u .Hz , 1. ), 1.e-23 , 10 )
222251
223252 # Convert to ergs / cm^2 / s at 10 Ghz
224253 assert_allclose (f_nu .to (u .erg / u .cm ** 2 / u .s , 1. ,
225- equivalencies = u .spectral_density (u .GHz , 10 )), 1.e-13 , 10 )
254+ equivalencies = u .spectral_density (one_ghz * 10 )),
255+ 1.e-13 , 10 )
226256
227- # Convert to ergs / cm^2 / s / micron at 1 Ghz
228- assert_allclose (f_nu .to (u . erg / u . cm ** 2 / u . s / u . micron , 1. ,
229- equivalencies = u .spectral_density (u . Hz , 1.e9 )),
257+ # Convert to F_lambda at 1 Ghz
258+ assert_allclose (f_nu .to (f_lambda , 1. ,
259+ equivalencies = u .spectral_density (one_ghz )),
230260 3.335640951981521e-20 , 10 )
231261
232- # Define F_lambda in ergs / cm^2 / s / micron
233- f_lambda = u .erg / u .cm ** 2 / u .s / u .micron
234-
235262 # Convert to Jy at 1 Ghz
236263 assert_allclose (f_lambda .to (u .Jy , 1. ,
237- equivalencies = u .spectral_density (u . Hz , 1.e9 )),
264+ equivalencies = u .spectral_density (one_ghz )),
238265 1. / 3.335640951981521e-20 , 10 )
239266
240267 # Convert to ergs / cm^2 / s at 10 microns
241268 assert_allclose (f_lambda .to (u .erg / u .cm ** 2 / u .s , 1. ,
242- equivalencies = u .spectral_density (u .micron , 10. )), 10. , 10 )
269+ equivalencies = u .spectral_density (u .Quantity (10 , u .micron ))),
270+ 10. , 10 )
271+
272+
273+ def test_spectraldensity3 ():
274+ """PHOTLAM and PHOTNU conversions."""
275+ flam = u .erg / (u .cm ** 2 * u .s * u .AA )
276+ fnu = u .erg / (u .cm ** 2 * u .s * u .Hz )
277+ photlam = u .photon / (u .cm ** 2 * u .s * u .AA )
278+ photnu = u .photon / (u .cm ** 2 * u .s * u .Hz )
279+
280+ wave = u .Quantity ([4956.8 , 4959.55 , 4962.3 ], u .AA )
281+ flux_photlam = [9.7654e-3 , 1.003896e-2 , 9.78473e-3 ]
282+ flux_photnu = [8.00335589e-14 , 8.23668949e-14 , 8.03700310e-14 ]
283+ flux_flam = [3.9135e-14 , 4.0209e-14 , 3.9169e-14 ]
284+ flux_fnu = [3.20735792e-25 , 3.29903646e-25 , 3.21727226e-25 ]
285+ flux_jy = [3.20735792e-2 , 3.29903646e-2 , 3.21727226e-2 ]
286+
287+ # PHOTLAM <--> FLAM
288+ assert_allclose (photlam .to (
289+ flam , flux_photlam , u .spectral_density (wave )), flux_flam , rtol = 1e-6 )
290+ assert_allclose (flam .to (
291+ photlam , flux_flam , u .spectral_density (wave )), flux_photlam , rtol = 1e-6 )
292+
293+ # PHOTLAM <--> FNU
294+ assert_allclose (photlam .to (
295+ fnu , flux_photlam , u .spectral_density (wave )), flux_fnu , rtol = 1e-6 )
296+ assert_allclose (fnu .to (
297+ photlam , flux_fnu , u .spectral_density (wave )), flux_photlam , rtol = 1e-6 )
298+
299+ # PHOTLAM <--> Jy
300+ assert_allclose (photlam .to (
301+ u .Jy , flux_photlam , u .spectral_density (wave )), flux_jy , rtol = 1e-6 )
302+ assert_allclose (u .Jy .to (
303+ photlam , flux_jy , u .spectral_density (wave )), flux_photlam , rtol = 1e-6 )
304+
305+ # PHOTLAM <--> PHOTNU
306+ assert_allclose (photlam .to (
307+ photnu , flux_photlam , u .spectral_density (wave )), flux_photnu , rtol = 1e-6 )
308+ assert_allclose (photnu .to (
309+ photlam , flux_photnu , u .spectral_density (wave )), flux_photlam , rtol = 1e-6 )
310+
311+ # PHOTNU <--> FNU
312+ assert_allclose (photnu .to (
313+ fnu , flux_photnu , u .spectral_density (wave )), flux_fnu , rtol = 1e-6 )
314+ assert_allclose (fnu .to (
315+ photnu , flux_fnu , u .spectral_density (wave )), flux_photnu , rtol = 1e-6 )
316+
317+ # PHOTNU <--> FLAM
318+ assert_allclose (photnu .to (
319+ flam , flux_photnu , u .spectral_density (wave )), flux_flam , rtol = 1e-6 )
320+ assert_allclose (flam .to (
321+ photnu , flux_flam , u .spectral_density (wave )), flux_photnu , rtol = 1e-6 )
243322
244323
245324def test_equivalent_units ():
@@ -257,7 +336,7 @@ def test_equivalent_units2():
257336 units = set (u .Hz .find_equivalent_units (u .spectral ()))
258337 match = set (
259338 [u .AU , u .Angstrom , u .Hz , u .J , u .Ry , u .cm , u .eV , u .erg , u .lyr ,
260- u .m , u .micron , u .pc , u .solRad , u .Bq , u .Ci ])
339+ u .m , u .micron , u .pc , u .solRad , u .Bq , u .Ci , u . k ])
261340 assert units == match
262341
263342 from .. import imperial
@@ -268,13 +347,13 @@ def test_equivalent_units2():
268347 imperial .cal , u .cm , u .eV , u .erg , imperial .ft ,
269348 imperial .inch , imperial .kcal , u .lyr , u .m , imperial .mi ,
270349 u .micron , u .pc , u .solRad , imperial .yd , u .Bq , u .Ci ,
271- imperial .nmi ])
350+ imperial .nmi , u . k ])
272351 assert units == match
273352
274353 units = set (u .Hz .find_equivalent_units (u .spectral ()))
275354 match = set (
276355 [u .AU , u .Angstrom , u .Hz , u .J , u .Ry , u .cm , u .eV , u .erg , u .lyr ,
277- u .m , u .micron , u .pc , u .solRad , u .Bq , u .Ci ])
356+ u .m , u .micron , u .pc , u .solRad , u .Bq , u .Ci , u . k ])
278357 assert units == match
279358
280359
@@ -294,13 +373,14 @@ def test_irrelevant_equivalency():
294373 with pytest .raises (u .UnitsException ):
295374 u .m .to (u .kg , equivalencies = [(u .m , u .l )])
296375
376+
297377def test_brightness_temperature ():
298- omega_B = np .pi * (50 * u .arcsec )** 2
378+ omega_B = np .pi * (50 * u .arcsec ) ** 2
299379 nu = u .GHz * 5
300380 tb = 7.05258885885 * u .K
301- np .testing .assert_almost_equal (tb . value ,
302- ( 1 * u .Jy ).to (u . K ,
303- equivalencies = u .brightness_temperature (omega_B , nu )).value )
304- np .testing .assert_almost_equal (1.0 ,
305- tb .to (u . Jy ,
306- equivalencies = u .brightness_temperature (omega_B , nu )).value )
381+ np .testing .assert_almost_equal (
382+ tb . value , ( 1 * u .Jy ).to (
383+ u . K , equivalencies = u .brightness_temperature (omega_B , nu )).value )
384+ np .testing .assert_almost_equal (
385+ 1.0 , tb .to (
386+ u . Jy , equivalencies = u .brightness_temperature (omega_B , nu )).value )
0 commit comments