| 1 |  |  | # -*- coding: utf-8 -*- | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  | from __future__ import division, absolute_import, unicode_literals | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | import datetime as dt | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | import numpy as np | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | import pytest | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | from aacgmv2 import utils | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | class TestUtilsAACGMV2: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  |     def setup(self): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  |         """Runs before every method to create a clean testing setup""" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  |         self.rtol = 1.0e-4 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |         self.out = None | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |     def teardown(self): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |         """Runs after every method to clean up previous testing""" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |         del self.rtol, self.out | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     @pytest.mark.parametrize('year,ref', [(1880, [-179.1494, -23.0801]), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |                                           (2015, [-179.2004, -23.0431])]) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |     def test_subsol(self, year, ref): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |         """Test the subsolar calculation""" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |         self.out = utils.subsol(year, 1, 0.0) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |         np.testing.assert_allclose(self.out, ref, rtol=self.rtol) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |     @pytest.mark.parametrize('year', [(1500), (2110)]) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |     def test_subsol_raises_time_range(self, year): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |         """Test the routine failure for out-of-range dates""" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |         with pytest.raises(ValueError, match="subsol valid between 1601-2100"): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |             self.out = utils.subsol(year, 1, 0.0) | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 33 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 34 |  |  |     @pytest.mark.parametrize('year,ref', | 
            
                                                                        
                            
            
                                    
            
            
                | 35 |  |  |                              [(1500, [0.141408, -0.48357, 0.86381]), | 
            
                                                                        
                            
            
                                    
            
            
                | 36 |  |  |                               (2015, [0.050281, -0.16057, 0.98574]), | 
            
                                                                        
                            
            
                                    
            
            
                | 37 |  |  |                               (2110, [0.027069, -0.08006, 0.99642])]) | 
            
                                                                        
                            
            
                                    
            
            
                | 38 |  |  |     def test_igrf_dipole_axis(self, year, ref): | 
            
                                                                        
                            
            
                                    
            
            
                | 39 |  |  |         """Test the IGRF dipole axis calculation""" | 
            
                                                                        
                            
            
                                    
            
            
                | 40 |  |  |         self.out = utils.igrf_dipole_axis(dt.datetime(year, 1, 1)) | 
            
                                                                        
                            
            
                                    
            
            
                | 41 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 42 |  |  |         np.testing.assert_allclose(self.out, ref, rtol=self.rtol) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  |     @pytest.mark.parametrize('gc_lat,gd_lat,mult', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |                              [(45.0, 45.1924, False), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |                               ([45.0, -45.0], [45.1924, -45.1924], True), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |                               (np.array([45.0, -45.0]), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |                                np.array([45.1924, -45.1924]), True)]) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |     def test_gc2gd_lat(self, gc_lat, gd_lat, mult): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |         """Test the geocentric to geodetic conversion""" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |         self.out = utils.gc2gd_lat(gc_lat) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |         if mult: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  |             np.testing.assert_allclose(self.out, gd_lat, rtol=self.rtol) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  |         else: | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 56 |  |  |             np.testing.assert_almost_equal(self.out, gd_lat, decimal=4) | 
            
                                                        
            
                                    
            
            
                | 57 |  |  |  |