
    Ois5                     `    d Z ddlZddlZddlZddlmZ ddlmZ  G d dej                  Z	dS )zGeodesic tests    N)Math)Geodesicc                   |    e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )SignTestzSign test suitec                     t          j        |           rt          j        |          p1| |k    o+t          j        d|           t          j        d|          k    S )zTest for equivalence      ?)mathisnancopysign)xys     T/srv/django_bis/venv311/lib/python3.11/site-packages/geographiclib/test/test_sign.pyequivzSignTest.equiv   sQ     jmm-
1 I1fGsA..$-Q2G2GGK    c           	         t           j        j        }|                     t                              t          j        | dz            | dz                       |                     t                              t          j        | dz            d                     |                     t                              t          j        d          d                     |                     t                              t          j        d          d                     |                     t                              t          j        |dz            d                     |                     t                              t          j        |dz            |
 dz                       |                     t                              t          j        dd|z  z
  dz            dd|z  z
  dz                       |                     t                              t          j        d|z
  dz            d                     |                     t                              t          j        d|dz  z
  dz            d                     |                     t                              t          j        d|dz  z
  dz            d                     |                     t                              t          j        d          d                     |                     t                              t          j        d|dz  z   dz            d                     |                     t                              t          j        d|z   dz            d                     |                     t                              t          j        dd|z  z   dz            dd|z  z   dz                       |                     t                              t          j        d|z
  dz            d|z
  dz                       |                     t                              t          j        d|dz  z
  dz            d	                     |                     t                              t          j        d|dz  z
  dz            d	                     |                     t                              t          j        d	          d	                     |                     t                              t          j        d|dz  z   dz            d	                     |                     t                              t          j        d|z   dz            d|z   dz                       |                     t                              t          j        d|z
  d
z            d|z
  d
z                       |                     t                              t          j        d|dz  z
  d
z            d|dz  z
  d
z                       |                     t                              t          j        d|dz  z
  d
z            d                     |                     t                              t          j        d          d                     |                     t                              t          j        d|dz  z   d
z            d                     |                     t                              t          j        d|dz  z   d
z            d                     |                     t                              t          j        d|z   d
z            d|z   d
z                       |                     t                              t          j        d|z
  dz            d|z
  dz                       |                     t                              t          j        d|dz  z
  dz            d|dz  z
  dz                       |                     t                              t          j        d|dz  z
  dz            d                     |                     t                              t          j        d|dz  z   dz            d                     |                     t                              t          j        d|z   dz            d|z   dz                       |                     t                              t          j        d|z
            d|z
                       |                     t                              t          j        d|dz  z
            d|dz  z
                       |                     t                              t          j        d|dz  z
            d                     |                     t                              t          j        d          d                     |                     t                              t          j        d|dz  z             d                     |                     t                              t          j        d|dz  z             d                     |                     t                              t          j        d|z             d|z                        |                     t                              t          j        dd|z  z
            dd|z  z
                       |                     t                              t          j        dd|z  z
            d                     |                     t                              t          j        d          d                     dS )zTest special cases for AngRound    @                        g      ?   g      ?   g      ?   g      ?r        V@Z   N)sys
float_infoepsilon
assertTruer   r   r   AngRound)selfepss     r   test_AngRoundzSignTest.test_AngRound   s   
.
 COOHNN4=#b#9#9C47CCDDDOOHNN4=#b#9#94CCDDDOOHNN4=#9#94CCDDDOOHNN4=C#9#94CCDDDOOHNN4=#b&#9#94CCDDDOOHNN4=#b&#9#9C47CCDDDOOHNN4=!AcE'2#>#>1S5"MMNNNOOHNN4=!C%2#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=+#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!C%2#>#>MMNNNOOHNN4=!AcE'2#>#>1S5"MMNNNOOHNN4=!C%2#>#>3"MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=+#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!C%2#>#>3"MMNNNOOHNN4=!C%2#>#>3"MMNNNOOHNN4=!CE'2#>#>3q5"MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=+#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!CE'2#>#>MMNNNOOHNN4=!C%2#>#>3"MMNNNOOHNN4=!C%A#>#>31MMNNNOOHNN4=!CE'A#>#>3q51MMNNNOOHNN4=!CE'A#>#>MMNNNOOHNN4=!CE'A#>#>MMNNNOOHNN4=!C%A#>#>31MMNNNOOHNN4=!C%#>#>3MMNNNOOHNN4=!CE'#>#>3q5MMNNNOOHNN4=!CE'#>#>MMNNNOOHNN4=##>#>MMNNNOOHNN4=!CE'#>#>MMNNNOOHNN4=!CE'#>#>MMNNNOOHNN4=!C%#>#>SMMNNNOOHNN4=$r#v+#>#>BsFMMNNNOOHNN4=$r#v+#>#>MMNNNOOHNN4=$#>#>MMNNNNNr   c                 z   t           j        }t           j        }t          j        |           \  }}|                     t                              ||          ot                              ||                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d	          \  }}|                     t                              |d          ot                              |d                     t          j        d
          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        d          \  }}|                     t                              |d          ot                              |d                     t          j        |
           \  }}|                     t                              ||          ot                              ||                     t          j        |          \  }}|                     t                              ||          ot                              ||                     dS )zTest special cases for sincosdg     P      r        r   r   g          g      |     vg     p     fg     Vr        f@g     p@     v@g      |@     @g     @     @g     P@N)r	   infnanr   sincosdr    r   r   )r"   r/   r0   scs        r   test_sincosdzSignTest.test_sincosdB   sd   
(C
(C<3DAqOOHNN1s++Gq30G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<DAqOOHNN1d++Gq$0G0GHHH<3DAqOOHNN1s++Gq30G0GHHH<#DAqOOHNN1s++Gq30G0GHHHHHr   c                    t          j        d          \  }}t          j        d          \  }}t          j        d          \  }}|                     t                              ||                     |                     t                              ||                     |                     t                              ||                     |                     t                              ||                      dS )zTest accuracy of sincosd      "@g     @T@g   T4oN)r   r1   r    r   r   )r"   s1c1s2c2s3c3s          r   test_sincosd2zSignTest.test_sincosd2u   s    \3''FB\$''FB\,''FBOOHNN2r**+++OOHNN2r**+++OOHNN2r**+++OOHNN2rc**+++++r   c                    t           j        }t           j        }|                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        dd          d                     |                     t                              t          j        d|           d                     |                     t                              t          j        d|           d                     |                     t                              t          j        d|
           d                     |                     t                              t          j        d|
           d                     |                     t                              t          j        |
 d          d                     |                     t                              t          j        |
 d          d                     |                     t                              t          j        | d          d                     |                     t                              t          j        | d          d                     |                     t                              t          j        |
 |           d	                     |                     t                              t          j        | |           d
                     |                     t                              t          j        |
 |
           d                     |                     t                              t          j        | |
           d                     |                     t                              t          j        |d          |                     |                     t                              t          j        d|          |                     dS )zTest special cases for atan2dr   r      Lr&   r   r      iy-   iN)r	   r/   r0   r    r   r   r   atan2d)r"   r/   r0   s      r   test_atan2dzSignTest.test_atan2d   s   
(C
(COOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<dCCDDDOOHNN4;td#<#<sCCDDDOOHNN4;td#<#<sCCDDDOOHNN4;td#<#<sCCDDDOOHNN4;td#<#<sCCDDDOOHNN4;tt#<#<dCCDDDOOHNN4;tt#<#<dCCDDDOOHNN4;tt#<#<dCCDDDOOHNN4;tt#<#<dCCDDDOOHNN4;d#<#<sCCDDDOOHNN4;d#<#<sCCDDDOOHNN4;d#<#<sCCDDDOOHNN4;d#<#<sCCDDDOOHNN4;t#<#<dCCDDDOOHNN4;t#<#<dCCDDDOOHNN4;t#<#<sCCDDDOOHNN4;t#<#<sCCDDDOOHNN4;d#<#<sCCDDDOOHNN4;t#<#<sCCDDDDDr   c                     d}|                      t          j        |d          dt          j        |d          z
             dS )zTest accuracy of atan2dgxD\8<r&   r?   r   N)assertEqualr   rD   )r"   r2   s     r   test_atan2d2zSignTest.test_atan2d2   s@    AT[D))3Q1D1D+DEEEEEr   c                 N   t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     dS )zTest special cases of sumr6   g      "r   r   N)r   sumr    r   r   )r"   r2   _s      r   test_sumzSignTest.test_sum   s@   
(4

CAaq$0G0G H H H
(4

CAaq$0G0G H H H
(4

CAaq$0G0G H H H
(4

CAaq$0G0G H H H
(4

CAaq$0G0G H H H
(4

CAaq$0G0G H H H H Hr   c                    |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d                     |                      t                              t          j        d	          d
                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d
                     |                      t                              t          j        d          d                     |                      t                              t          j        d          d
                     dS )z"Test special cases of AngNormalizeg      r@   r'   r   r(   r)   r*   r   r+   r?   r,   r-   r.   g      @N)r    r   r   r   AngNormalize)r"   s    r   test_AngNormalizezSignTest.test_AngNormalize   s   OOHNN4#4V#<#<dCCDDDOOHNN4#4V#<#<dCCDDDOOHNN4#4V#<#<dCCDDDOOHNN4#4V#<#<dCCDDDOOHNN4#4V#<#<dCCDDDOOHNN4#4t#<#<dCCDDDOOHNN4#4t#<#<dCCDDDOOHNN4#4e#<#<dCCDDDOOHNN4#4e#<#<dCCDDDOOHNN4#4e#<#<dCCDDDOOHNN4#4e#<#<dCCDDDOOHNN4#4e#<#<dCCDDDDDr   c                    t           j        j        }t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        dd          \  }}|                     t                              |d                     t          j        |
 d          \  }}|                     t                              |d                     t          j        | d          \  }}|                     t                              |d                     t          j        |
 d          \  }}|                     t                              |d                     t          j        | d          \  }}|                     t                              |d                     dS )	zTest special cases of AngDiffr   r   g      @g     v@g      g@r+   r*   N)r   r   r   r   AngDiffr    r   r   )r"   r#   r2   rK   s       r   test_AngDiffzSignTest.test_AngDiff   s   
.
 C
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7N7N'O'O'O
,vf
%
%CAatx~~a7O7O'P'P'P
,vf
%
%CAatx~~a7O7O'P'P'P
,f
%
%CAatx~~a7O7O'P'P'P
,f
%
%CAatx~~a7O7O'P'P'P
,f
%
%CAatx~~a7O7O'P'P'P
,f
%
%CAatx~~a7O7O'P'P'P'P'Pr   c                     t           j        j        }dd|z  z   }d}t          j        ||          \  }}|                     |dd|z  z
             dS )zTest accuracy of AngDiff      i\:   N)r   r   r   r   rQ   rG   )r"   r#   r   r   r2   rK   s         r   test_AngDiff2zSignTest.test_AngDiff2   sU    
.
 CcCiATa););31QQS3Y'''''r   c                 @   g dg dg}|D ]}|\  }}}t           j                            |d|d          }|                     t                              |d         |                     |                     t                              |d         |                     dS )z2
    azimuth with coincident point on equator
    )r   r   r?   )r   r   r   r   azi1azi2Nr   WGS84Inverser    r   r   )r"   Cllat1lat2aziinvs          r   test_equatorial_coincidentz#SignTest.test_equatorial_coincident   s     	A  8 8tT3N""4dC88c
oohnnS[#66777
oohnnS[#667777	8 8r   c                     g dg dg}|D ]g}|\  }}}}t           j                            |d|d          }|                     |d         |d           |                     |d         |d           hd	S )
z@Does the nearly antipodal equatorial solution go north or south?)r   r   8   |   )r   r   rg   rf   r   g     pf@rY   r   )deltarZ   N)r   r\   r]   assertAlmostEqual)r"   r^   r_   r`   ra   rY   rZ   rc   s           r   test_equatorial_NSzSignTest.test_equatorial_NS   s     	A  ; ;!"tT4N""4dE::c
S[$:::
S[$::::	; ;r   c                 P   g dg dg dg dg}|D ]}|\  }}}}}t           j                            |d||          }|                     t                              |d         |                     |                     t                              |d         |                     dS )	z9How does the exact antipodal equatorial path go N/S + E/W)r   r   r?   r   r?   )r   r   r?   r?   r   )r   r   r@   r   r@   )r   r   r@   r@   r   r   rY   rZ   Nr[   )	r"   r^   r_   r`   ra   lon2rY   rZ   rc   s	            r   test_antipodalzSignTest.test_antipodal   s     ('''''''''''		A  9 9'($tT4tN""4dD99c
oohnnS[$77888
oohnnS[$778888	9 9r   c                 J   ddgddgg}t          dd          }|D ]}|\  }}|                    ddd|          }|                     t                              |d         |                     |                     t                              |d	         |                     d
S )z6Antipodal points on the equator with prolate ellipsoidr?   r   r@   rA   g     jXAgO贁Nkr   rY   rZ   N)r   r]   r    r   r   )r"   r^   geodr_   rl   rb   rc   s          r   test_antipodal_prolatezSignTest.test_antipodal_prolate   s     	cmcm	A E8$$D 8 8ktSLLc3--c
oohnnS[#66777
oohnnS[#667777	8 8r   c           	      |   g dg dg dg dg}|D ]}|\  }}}t           j                            dd|dt           j        t           j        z            }|                     t                              |d         |                     |                     t                              |d         |                     d	S )
z1azimuths = +/-0 and +/-180 for the direct problem)r   r?   r?   )r   r@   r@   )r?   r?   r   )r@   r@   r   r   g    8lArl   rZ   N)r   r\   DirectSTANDARDLONG_UNROLLr    r   r   )r"   r^   r_   rY   rl   rZ   directs          r   test_azimuth_0_180zSignTest.test_azimuth_0_180
  s     		A  < <tT4~$$S#tT%-%69M%MO Of
oohnnVF^T::;;;
oohnnVF^T::;;;;< <r   N)__name__
__module____qualname____doc__staticmethodr   r$   r4   r=   rE   rH   rL   rO   rR   rW   rd   rj   rm   rp   rv    r   r   r   r   
   s       K K <K,O ,O ,O\1I 1I 1If, , ,E E E>F F F
I I IE E EQ Q Q ( ( (8 8 8; ; ;9 9 98 8 8< < < < <r   r   )
rz   unittestr	   r   geographiclib.geomathr   geographiclib.geodesicr   TestCaser   r|   r   r   <module>r      s        



 & & & & & & + + + + + +N< N< N< N< N<x  N< N< N< N< N<r   