a
    î}cs5  ã                   @   sJ   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„ dejƒZ	dS )zGeodesic testsé    N)ÚMath)ÚGeodesicc                   @   sŒ   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!ÚSignTestzSign test suitec                 C   s4   t  | ¡rt  |¡p2| |ko2t  d| ¡t  d|¡kS )zTest for equivalenceç      ð?)ÚmathÚisnanÚcopysign)ÚxÚy© r   úX/var/www/html/django/DPS/env/lib/python3.9/site-packages/geographiclib/test/test_sign.pyÚequiv   s    ÿzSignTest.equivc              	   C   sÀ  t jj}|  t t | d ¡| d ¡¡ |  t t | d ¡d¡¡ |  t t d¡d¡¡ |  t t d¡d¡¡ |  t t |d ¡d¡¡ |  t t |d ¡|
 d ¡¡ |  t t dd|  d ¡dd|  d ¡¡ |  t t d| d ¡d¡¡ |  t t d|d  d ¡d¡¡ |  t t d|d  d ¡d¡¡ |  t t d¡d¡¡ |  t t d|d  d ¡d¡¡ |  t t d| d ¡d¡¡ |  t t dd|  d ¡dd|  d ¡¡ |  t t d| d ¡d| d ¡¡ |  t t d|d  d ¡d	¡¡ |  t t d|d  d ¡d	¡¡ |  t t d	¡d	¡¡ |  t t d|d  d ¡d	¡¡ |  t t d| d ¡d| d ¡¡ |  t t d| d
 ¡d| d
 ¡¡ |  t t d|d  d
 ¡d|d  d
 ¡¡ |  t t d|d  d
 ¡d¡¡ |  t t d¡d¡¡ |  t t d|d  d
 ¡d¡¡ |  t t d|d  d
 ¡d¡¡ |  t t d| d
 ¡d| d
 ¡¡ |  t t d| d ¡d| d ¡¡ |  t t d|d  d ¡d|d  d ¡¡ |  t t d|d  d ¡d¡¡ |  t t d|d  d ¡d¡¡ |  t t d| d ¡d| d ¡¡ |  t t d| ¡d| ¡¡ |  t t d|d  ¡d|d  ¡¡ |  t t d|d  ¡d¡¡ |  t t d¡d¡¡ |  t t d|d  ¡d¡¡ |  t t d|d  ¡d¡¡ |  t t d| ¡d| ¡¡ |  t t dd|  ¡dd|  ¡¡ |  t t dd|  ¡d¡¡ |  t t 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   ZAngRound)ÚselfÚepsr   r   r   Útest_AngRound   sV    $"0 $$$ 0($$$((0$$$((0$$( (    ( zSignTest.test_AngRoundc                 C   s,  t j}t j}t | ¡\}}|  t ||¡o6t ||¡¡ t d¡\}}|  t |d¡obt |d¡¡ t d¡\}}|  t |d¡oŽt |d¡¡ t d¡\}}|  t |d¡oºt |d¡¡ t d¡\}}|  t |d¡oæt |d¡¡ t d	¡\}}|  t |d¡ot |d¡¡ t d
¡\}}|  t |d¡oBt |d¡¡ t d¡\}}|  t |d¡opt |d¡¡ t d¡\}}|  t |d¡ožt |d¡¡ t d¡\}}|  t |d¡oÌt |d¡¡ t d¡\}}|  t |d¡oút |d¡¡ t d¡\}}|  t |d¡o(t |d¡¡ t d¡\}}|  t |d¡oVt |d¡¡ t d¡\}}|  t |d¡o„t |d¡¡ t d¡\}}|  t |d¡o²t |d¡¡ t d¡\}}|  t |d¡oàt |d¡¡ t d¡\}}|  t |d¡ot |d¡¡ t d¡\}}|  t |d¡o<t |d¡¡ t d¡\}}|  t |d¡ojt |d¡¡ t d¡\}}|  t |d¡o˜t |d¡¡ t d¡\}}|  t |d¡oÆt |d¡¡ t |
 ¡\}}|  t ||¡oöt ||¡¡ t |¡\}}|  t ||¡o$t ||¡¡ dS )zTest special cases for sincosdg     P‰Àç      ð¿r   ç     €†Àr   r   g     °ƒÀç     à€Àg      |Àç     €vÀg     àpÀç     €fÀg     €VÀr   ç     €f@g     àp@ç     €v@g      |@ç     à€@g     °ƒ@ç     €†@g     P‰@N)r   ÚinfÚnanr   Úsincosdr   r   r   )r   r)   r*   ÚsÚcr   r   r   Útest_sincosdB   s`                     zSignTest.test_sincosdc                 C   sx   t  d¡\}}t  d¡\}}t  d¡\}}|  t ||¡¡ |  t ||¡¡ |  t ||¡¡ |  t || ¡¡ dS )zTest accuracy of sincosdç      "@g     @T@g   T4oÁN)r   r+   r   r   r   )r   Ús1Úc1Ús2Úc2Zs3Úc3r   r   r   Útest_sincosd2u   s    zSignTest.test_sincosd2c                 C   sÔ  t j}t j}|  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t dd¡d¡¡ |  t t d| ¡d¡¡ |  t t d| ¡d¡¡ |  t t d|
 ¡d¡¡ |  t t d|
 ¡d¡¡ |  t t |
 d¡d¡¡ |  t t |
 d¡d¡¡ |  t t | d¡d¡¡ |  t t | d¡d¡¡ |  t t |
 | ¡d	¡¡ |  t t | | ¡d
¡¡ |  t t |
 |
 ¡d¡¡ |  t t | |
 ¡d¡¡ |  t t |d¡|¡¡ |  t t d|¡|¡¡ dS )zTest special cases for atan2dr   r   é´   éLÿÿÿr    r   é¦ÿÿÿr   é‡   iyÿÿÿé-   iÓÿÿÿN)r   r)   r*   r   r   r   r   Úatan2d)r   r)   r*   r   r   r   Útest_atan2d   s8    zSignTest.test_atan2dc                 C   s(   d}|   t |d¡dt |d¡ ¡ dS )zTest accuracy of atan2dg…xÝD\8É<r    r6   r   N)ÚassertEqualr   r;   )r   r,   r   r   r   Útest_atan2d2ž   s    zSignTest.test_atan2d2c                 C   sÐ   t  dd¡\}}|  t |d¡¡ t  dd¡\}}|  t |d¡¡ t  dd¡\}}|  t |d¡¡ t  dd¡\}}|  t |d¡¡ t  dd¡\}}|  t |d¡¡ t  dd¡\}}|  t |d¡¡ dS )zTest special cases of sumr/   g      "Àr   r   N)r   Úsumr   r   r   )r   r,   Ú_r   r   r   Útest_sum£   s    """""zSignTest.test_sumc                 C   s$  |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d¡d¡¡ |   t t d	¡d
¡¡ |   t t d¡d¡¡ |   t t d¡d
¡¡ |   t t d¡d¡¡ |   t t d¡d
¡¡ dS )z"Test special cases of AngNormalizeg      ŒÀr7   r!   r   r"   r#   r$   r   r%   r6   r&   r'   r(   g      Œ@N)r   r   r   r   ZAngNormalize)r   r   r   r   Útest_AngNormalize¬   s    zSignTest.test_AngNormalizec                 C   s¬  t jj}t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t dd¡\}}|  t |d¡¡ t |
 d¡\}}|  t |d¡¡ t | d¡\}}|  t |d¡¡ t |
 d¡\}}|  t |d¡¡ t | 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   r,   r@   r   r   r   Útest_AngDiff»   s    """"""""$$$zSignTest.test_AngDiffc                 C   s@   t jj}dd|  }d}t ||¡\}}|  |dd|  ¡ dS )zTest accuracy of AngDifféŠ   é€   i\ÿÿÿé:   N)r   r   r   r   rC   r=   )r   r   r	   r
   r,   r@   r   r   r   Útest_AngDiff2Ë   s     zSignTest.test_AngDiff2c                 C   sf   g d¢g d¢g}|D ]L}|\}}}t j |d|d¡}|  t |d |¡¡ |  t |d |¡¡ qdS )z2
    azimuth with coincident point on equator
    )r   r   r6   )r   r   r   r   Úazi1Úazi2N©r   ÚWGS84ÚInverser   r   r   )r   ÚCÚlÚlat1Úlat2ÚaziÚinvr   r   r   Útest_equatorial_coincidentÑ   s    þ
z#SignTest.test_equatorial_coincidentc                 C   sd   g d¢g d¢g}|D ]J}|\}}}}t j |d|d¡}| j|d |dd | j|d |dd qd	S )
z@Does the nearly antipodal equatorial solution go north or south?)r   r   é8   é|   )r   r   rV   rU   r   g     pf@rI   r   )ÚdeltarJ   N)r   rL   rM   ZassertAlmostEqual)r   rN   rO   rP   rQ   rI   rJ   rS   r   r   r   Útest_equatorial_NSà   s    þzSignTest.test_equatorial_NSc           	      C   sv   g d¢g d¢g d¢g d¢g}|D ]P}|\}}}}}t j |d||¡}|  t |d |¡¡ |  t |d |¡¡ q dS )	z9How does the exact antipodal equatorial path go N/S + E/W)r   r   r6   r   r6   )r   r   r6   r6   r   )r   r   r7   r   r7   )r   r   r7   r7   r   r   rI   rJ   NrK   )	r   rN   rO   rP   rQ   Úlon2rI   rJ   rS   r   r   r   Útest_antipodalí   s    üzSignTest.test_antipodalc                 C   sl   ddgddgg}t ddƒ}|D ]H}|\}}| ddd|¡}|  t |d |¡¡ |  t |d	 |¡¡ qd
S )z6Antipodal points on the equator with prolate ellipsoidr6   r   r7   r8   g     jXAgOè´Nk¿r   rI   rJ   N)r   rM   r   r   r   )r   rN   ZgeodrO   rY   rR   rS   r   r   r   Útest_antipodal_prolateü   s    þ
zSignTest.test_antipodal_prolatec              	   C   s|   g d¢g d¢g d¢g d¢g}|D ]V}|\}}}t j dd|dt jt jB ¡}|  t |d |¡¡ |  t |d |¡¡ q d	S )
z1azimuths = +/-0 and +/-180 for the direct problem)r   r6   r6   )r   r7   r7   )r6   r6   r   )r7   r7   r   r   g    8œlArY   rJ   N)r   rL   ZDirectÚSTANDARDZLONG_UNROLLr   r   r   )r   rN   rO   rI   rY   rJ   Údirectr   r   r   Útest_azimuth_0_180
  s    ü

ÿzSignTest.test_azimuth_0_180N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r   r.   r5   r<   r>   rA   rB   rD   rH   rT   rX   rZ   r[   r^   r   r   r   r   r   
   s"   
.3
	r   )
rb   Zunittestr   r   Zgeographiclib.geomathr   Zgeographiclib.geodesicr   ZTestCaser   r   r   r   r   Ú<module>   s   