o
    ÓèFhŸ  ã                   @   sZ   d Z ddlZddlZddlmZ G dd„ dejƒZG dd„ dejƒZG dd	„ d	ejƒZdS )
zGeodesic testsé    N)ÚGeodesicc                   @   s¤   e Zd ZdZg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gZdd„ Zdd„ Zdd„ ZdS )ÚGeodesicTestzGeodesic test suite)g¶¾HhËÍA@gz6«>WnaÀg�ßîäQÆ[@gš|³Í�Y&ÀgÁÿV²c}QÀg}_µA)`@g—wï‘é
aAgöpoŽw T@géh'�$îWAg§B1õŽAÅ?gäè½…àÅ?gÝ€©X¼[§B)gÐ¸p $ÃK@g>–>tAƒZ@gdÈô¤"6@gî±ô¡BS@g²ºÕ¥h@g‰z®+G[@g 0ð¿QOAg£²SErB@gªãÎªB6MAgEñoÄÚŸé?g—ž·Þß¡é?gÏ»béÌB)g|,}è‚ú5Àg=,ÔšæÒa@gvÐ¡ç8@ÀgÁÿV²ëD@g¼?¤X@g¥¢ûëDÀg 	¡Ë`Ag
ˆFèR@gªò¤À€WAgœÏkÑÃÏ?gÓÓ %éÏ?gÞü&˜Â)g�x]¿`¿PÀgÞ	Š\@gÝ$g„·e@gï¬Ýv¡i)Àg_^€}tÞq@gº8 ‰@g_f�DeAg&çu$ÕY@g¹uJä„þWAg:D0ÑíÆ¿g³m•âT¯Æ¿gðÞA¶Ø“ÛÂ)gLqUÙwm1ÀgÉ<÷ªe@gS+„çácÀg5{ ²/Àg’yä¾@gt˜˜É4ÀgbC8eç©nAgóÁxÅ{b@g|FÓzLAgÂýM½ïê¿g{Y€dê¿g­BŠá8>ÖB)g÷Ç{ÕÊl@@gE*Œ-%H@gÁ(ÆÏb@gÛ…æ:�$LÀgwR~RIi@g^ûŠ‚…H@gŒ¾3žƒçoAg5’Òb@géGsHAg¬K:ûyòë¿g"IÑ~®ë¿gAäšyÞxÐÂ)gVñFæ‘ß@g4hèŸà^J@g;„é±8%W@gƒÀÊ¡E–ÀgØd�zˆÅi@g›V40®V@gÁþÓhOpAgß0g9·Dc@gÿ•ùÎ!&EAg?ï/ûÌì¿g³2¶è¹Ëì¿gìßèÓsÂ)gÔ} R›HIÀgƒ/L¦
N0Àg·ó1·#\ZÀg•‚n/iÈ@ÀgJ˜iûW¾WÀgÙš)7�¬GÀgBmÂ ] XAgTR·
M@gY!³_¢TAgªÛp´$úà?gÁ±„Öôà?g-ˆX­ÂB)gP6å
wMÀgTã¥›ÄÐ!ÀgÂ[$Šäža@g²ºÕsÒ!ÀgS?o*R¤`@gÉõÆÒcA3@gô´@DlfAgÖíË>]pZ@g1TˆNïvWAg,áí¹ýÐ¿g²º{€æRÑ¿g¯l—5–ÓÂ)gIKåí5QÀgy@Ù”+’RÀgÉ“ëéŽqW@g"lxz¥PIÀg@aÃÓ» ÀgZ+
ìSA@g@‰vd0NAgªçÃ¦?ÉA@g	ü)zíKLAg“fá¶ãê?gø!¦0ÿê?gå¶goÃÂ)g�Ÿqá@%Àg$—ÿ�~@ÀgkÖ>EO›UÀgÕxé&1ˆ@gw¡¹N#Ê`ÀgölmRTÀg›Ù]¬áeAg¸3ËØY@gÐ�bêv—WAg5ÂˆtžÍ¿g´ö_v£Í¿gbÜqÃáŒŽB)g%¯Î1 Ã5ÀgÙÄëúÜd@gÙp•–ÅQ=@g!¡J]H@gB•š=¿j@g·�)ÁE@g)ÉÁl°ZaAgâŒ>š©}T@g=3«:šXAg†!!>\àÁ?g•¦-&¥Â?gôJ	Š<¢B)g”í*¤Ì3Àg¥Ú§ã1ÏeÀgúOy¥´ÊQ@g[Î¥¸ªü'Àg|~!<KcÀgò#‹Ï³eP@gÖOnN±AAgpçWˆå4@gäÿhoœMAAg”qú<Šåí?gFÉ˜ã]åí?gHîˆìe¢ŒÂ)g%;6ñê'ÀgüŠ}<]Àg–‘4�›-W@g^h®ÓHK@gE¦aø¨@gU3“©S@g‚�R<cjAg×I»f,_@g7;cK�ñSAgä—Z‘Ž3â¿gYèTSÈ6â¿gµÍ¢j*¢Â)gbÖ‹¡œöUÀg}iÆjU@gÿGw5³GPÀgú³)"ŸP@g¨o™Óe0@g¬Q"�ü�Àg		u]|pAg»ä¿rc@g&Yˆ¼7DAg’°iúí¿gÝÌ3b�&í¿gÄýgÃB)gNîw(
ôû?gì£SW>
`@g™JûneYÀg'÷;U&ÀgË¾+‚ÿ½'@g] ÌÙ”UÀgléø£Æ¯hAgÖmÿ¡)]@gqMØ5Ž­UAg½?v\ƒµÜ¿gÀí,d°Ü¿gNÏ,ð“£B)g}iÆº9ÀgP6å
bÀgéÃC¸4cÀgJ˜iûWÚLÀg¡-çRÜÒpÀgéßà£,HÀg²Ù×hôaAg	Âï¸‡*U@g‰ ',4?XAghØ’ÖL¸?g·nLGí¸?gæbÛYñÐB)gE�>‘'�DÀg×£p=
•^@gçÙDbú‘,@g˜4Fë¨JÀg|DL‰$L`@gÌ~œ¯Pœ%@g¦Z~§MAg	¢„ñ+A@gv•Ëð/aKAg³Uåoê?gÅ–ÊªOlê?gÛŽå�rà�Â)gm±&@g§"ÆHa@go¢þõôÛS@g[rP‚@g)?©öéán@ge’ŸYQíY@gf5Ú¸fAg«¼§ëÝÕZ@gK#B.ž(WAgõŸ Ó¿geëuÿÓ¿gd÷”„á$¯B)g*‘D/£x=Àgs.ÅUeÉW@gÔËö¢îxdÀgå›mnLw;Àgê46JQÀg¿x&{”Ñ/ÀgšÕÑút¹iAgÛnUÑR^@g1§?õèTAgÒ·¶=}à¿g±• „à¿g�ƒ-Í×Bc                 C   sü   t jD ]x}|\}}}}}}}}	}
}}}tj ||||tjtjB ¡}| j||d dd� | j||d dd� | j||d dd� | j||d dd� | j|	|d dd� | j|
|d	 dd� | j||d
 dd� | j||d dd� | j||d dd� qdS )z/Helper function for testing inverse calculationÚlon2ç‚vIhÂ%<=©ÚdeltaÚazi1Úazi2Ús12ç:Œ0âŽyE>Úa12Úm12ÚM12çVçž¯Ò<ÚM21ÚS12çš™™™™™¹?N)r   Ú	testcasesr   ÚWGS84ÚInverseÚALLÚLONG_UNROLLÚassertAlmostEqual)ÚselfÚlÚlat1Úlon1r   Úlat2r   r	   r
   r   r   r   r   r   Úinv© r   úY/var/www/html/loop/nvenv/lib/python3.10/site-packages/geographiclib/test/test_geodesic.pyÚtest_inverse]   s"   
ÿ
ÿózGeodesicTest.test_inversec                 C   sè   t jD ]n}|\}}}}}}}}	}
}}}tj ||||tjtjB ¡}| j||d dd� | j||d dd� | j||d dd� | j|	|d dd� | j|
|d dd� | j||d	 d
d� | j||d d
d� | j||d dd� qdS )z.Helper function for testing direct calculationr   r   r   r   r	   r   r   r   r   r   r   r   r   N)r   r   r   r   ÚDirectr   r   r   ©r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Údirectr   r   r    Útest_directn   ó    
ÿ
ÿôzGeodesicTest.test_directc                 C   sè   t jD ]n}|\}}}}}}}}	}
}}}tj ||||	tjtjB ¡}| j||d dd� | j||d dd� | j||d dd� | j||d dd� | j|
|d dd� | j||d	 d
d� | j||d d
d� | j||d dd� qdS )z>Helper function for testing direct calculation with arc lengthr   r   r   r   r	   r
   r   r   r   r   r   r   r   N)r   r   r   r   Ú	ArcDirectr   r   r   r#   r   r   r    Útest_arcdirect~   r&   zGeodesicTest.test_arcdirectN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r%   r(   r   r   r   r    r      s4    ³Rr   c                   @   s  e Zd Z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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBS )CÚGeodSolveTestzGeodSolve testsc                 C   óR   t j dddd¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� dS )Ú
GeodSolve0gÍÌÌÌÌLD@g33333sRÀg§J)""‚H@gffffff@r   gjö@+0¼J@çñhãˆµøÔ>r   r	   gr§t°þå[@r
   i*PY ç      à?N©r   r   r   r   ©r   r   r   r   r    Útest_GeodSolve0‘   ó   zGeodSolveTest.test_GeodSolve0c                 C   sR   t j dddd¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� dS )Ú
GeodSolve1gW¶îjâQD@g#qÉPÙqRÀg     ÀJ@g    äPVAr   g½á´à�H@r0   r   r   gÀx}@r	   g
ô‰<Iè[@N)r   r   r"   r   ©r   r$   r   r   r    Útest_GeodSolve1˜   r5   zGeodSolveTest.test_GeodSolve1c                 C   s¦   t ddƒ}| dddd¡}| j|d dd	d
� | j|d dd	d
� | j|d ddd
� | dddd¡}| j|d dd	d
� | j|d dd	d
� | j|d ddd
� dS )z4Check fix for antipodal prolate bug found 2010-09-04ç     jXAçOè´�N{¿g¤ˆ«x#³?r   g¤ˆ«x#³¿é´   r   gkŸŽÇ€V@r0   r   r	   r
   éÑË2r1   r   gš™™™™™¹¿gKê4€V@N©r   r   r   ©r   Úgeodr   r   r   r    Útest_GeodSolve2Ÿ   s   
zGeodSolveTest.test_GeodSolve2c                 C   ó*   t j dddd¡}| j|d ddd� d	S )
z-Check fix for short line bug found 2010-05-21gº÷&?B@r   g»÷&?B@gH¯¼šò×ª>r
   g;ßO�—n²?çü©ñÒMb@?r   Nr2   r3   r   r   r    Útest_GeodSolve4«   ó   
ÿzGeodSolveTest.test_GeodSolve4c                 C   sŽ   t j dddd¡}| j|d ddd� |d	 dk r1| j|d	 d
dd� | jt|d ƒddd� dS | j|d	 ddd� | j|d ddd� dS )z.Check fix for point2=pole bug found 2010-05-03g+ÉÞ@4’?é   r   ç    ÐcAr   éZ   r0   r   r   ijÿÿÿr	   r;   N)r   r   r"   r   Úabsr7   r   r   r    Útest_GeodSolve5±   s   zGeodSolveTest.test_GeodSolve5c                 C   sv   t j dddd¡}| j|d ddd� t j d	dd
d¡}| j|d ddd� t j dddd¡}| j|d ddd� dS )z…Check fix for volatile sbet12a bug found 2011-06-25 (gcc 4.4.4
    x86 -O3).  Found again on 2012-03-27 with tdm-mingw32 (g++ 4.6.1).gÂËBÀõV@r   gÂËBÀõVÀgƒ‹Qˆdf@r
   gD‹l£ÃsArB   r   gP'ÓìÅPV@gP'ÓìÅPVÀg6›ô*Àf@gçû©]ÅsAg*q�åQUV@g*q�åQUVÀgOePÆf@gu“nÅsANr2   r3   r   r   r    Útest_GeodSolve6¼   s   
ÿ
ÿ
ÿzGeodSolveTest.test_GeodSolve6c                 C   rA   )
zACheck fix for volatile x bug found 2011-06-25 (gcc 4.4.4 x86 -O3)gs)L@r   gs)LÀgjËèœEuf@r
   gP�—d=sArB   r   Nr2   r3   r   r   r    Útest_GeodSolve9É   rD   zGeodSolveTest.test_GeodSolve9c                 C   rA   )
zRCheck fix for adjust tol1_ bug found 2011-06-25 (Visual Studio
    10 rel + debug)gÎ¿W+idJ@r   gÍ¿W+idJÀg³HâMtf@r
   g¸…ÁÂsArB   r   Nr2   r3   r   r   r    Útest_GeodSolve10Ï   ó   
ÿzGeodSolveTest.test_GeodSolve10c                 C   rA   )
zRCheck fix for bet2 = -bet1 bug found 2011-06-25 (Visual Studio
    10 rel + debug)g]Q÷ŸíBH@r   g[Q÷ŸíBHÀgGôè0sf@r
   gÓMbŒ)sArB   r   Nr2   r3   r   r   r    Útest_GeodSolve11Ö   rM   zGeodSolveTest.test_GeodSolve11c                 C   sZ   t ddƒ}| dddd¡}| j|d ddd	� | j|d
 ddd	� | j|d ddd	� dS )z›Check fix for inverse geodesics on extreme prolate/oblate
    ellipsoids Reported 2012-08-29 Stefan Guenther
    <stefan.gunther@embl.de>; fixed 2012-10-07g33333sV@gHáz®Gý¿r   éöÿÿÿé    r   gáz®G^@ç{®Gáz„?r   r	   gš™™™™IZ@r
   g33333«p@r   Nr=   r>   r   r   r    Útest_GeodSolve12Ý   s
   
zGeodSolveTest.test_GeodSolve12c                 C   sT   t j dddtj¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ dS )z*Check fix for inverse ignoring lon12 = nanr   é   r   r	   r
   N©r   r   r   ÚmathÚnanÚ
assertTrueÚisnanr3   r   r   r    Útest_GeodSolve14ç   s   zGeodSolveTest.test_GeodSolve14c                 C   ó6   t ddƒ}| ddddt j¡}| j|d dd	d
� dS )zcInitial implementation of Math::eatanhe was wrong for e^2 < 0.  This
    checks that this is fixed.r9   r:   rS   é   é   é   r   i”\  r1   r   N)r   r"   ÚAREAr   ©r   r?   r$   r   r   r    Útest_GeodSolve15î   s   
zGeodSolveTest.test_GeodSolve15c                 C   sP  t j ddddt jt jB ¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� t j ddd¡}| dt jt jB ¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� t j dddd¡}| j|d ddd� | j|d	 ddd� | j|d ddd� | d¡}| j|d ddd� | j|d	 ddd� | j|d ddd� dS )z1Check fix for LONG_UNROLL bug found on 2015-05-07é(   iµÿÿÿrO   ç    ÐsAr   iÙÿÿÿrS   r   r   iÿÿÿr	   éVÿÿÿéi   N)r   r   r"   ÚSTANDARDr   r   ÚLineÚPosition©r   r$   Úliner   r   r    Útest_GeodSolve17õ   s&   
ÿ
zGeodSolveTest.test_GeodSolve17c                 C   rZ   )z<Check 0/0 problem with area calculation on sphere 2015-09-08r9   r   rS   r[   r\   r]   r   g  Æ?Ü='Br1   r   N©r   r   r^   r   r>   r   r   r    Útest_GeodSolve26
  s   
zGeodSolveTest.test_GeodSolve26c                 C   s2   t ddƒ}| dddd¡}| j|d dd	d
� dS )ztCheck for bad placement of assignment of r.a12 with |f| > 0.01 (bug in
    Java implementation fixed on 2015-05-19).r9   r   rS   r[   é
   ç    ÐSAr   g­ÔXg!GH@ç:Œ0âŽy5>r   N)r   r"   r   r_   r   r   r    Útest_GeodSolve28  s   
zGeodSolveTest.test_GeodSolve28c                 C   sª   t j dddd¡}| j|d ddd� | j|d d	dd� | j|d
 ddd� t j ddddt jt jB ¡}| j|d ddd� | j|d ddd� | j|d
 ddd� dS )z=Check longitude unrolling with inverse calculation 2015-09-16r   i  éµ   r   é³   ç»½×Ùß|Û=r   r   iMÿÿÿr
   i¯e r1   i  N)r   r   r   r   re   r   r7   r   r   r    Útest_GeodSolve29  s   
ÿzGeodSolveTest.test_GeodSolve29c                 C   sx  t j dddd¡}| j|d ddd� | j|d ddd� | j|d d	d
d� t j dddd¡}| j|d ddd� | j|d ddd� | j|d dd
d� t j dddd¡}| j|d ddd� | jt|d ƒddd� | j|d dd
d� t j dddd¡}| j|d ddd� | jt|d ƒddd� | j|d dd
d� t ddƒ}| dddd¡}| j|d ddd� | j|d ddd� | j|d dd
d� | dddd¡}| j|d ddd� | jt|d ƒddd� | j|d dd
d� | dddd¡}| j|d ddd� | jt|d ƒddd� | j|d dd
d� t ddƒ}| dddd¡}| j|d ddd� | j|d ddd� | j|d dd
d� | dddd¡}| j|d ddd� | j|d ddd� | j|d dd
d� | ddd
d¡}| j|d ddd� | j|d ddd� | j|d dd
d� | dddd¡}| j|d ddd� | jt|d ƒddd� | j|d dd
d� dS )z¥Check max(-0.0,+0.0) issues 2015-08-22 (triggered by bugs in
    Octave -- sind(-0.0) = +0.0 -- and in some version of Visual
    Studio -- fmod(-0.0, 360.0) = +0.0.r   rr   r   g     €V@r0   r   r	   r
   i­0r1   ç     pf@gÁÊ¡E¶ûK@g /Ý$_@i>â0r;   ç        ç     €f@i[<1rS   imŒ/r9   i|1r<   gOè´�Nk¿g:Xÿç0ƒ@@gzÂ(_b@i¹o2i†—1N)r   r   r   r   rH   )r   r   r?   r   r   r    Útest_GeodSolve33#  s\   

zGeodSolveTest.test_GeodSolve33c                 C   s¤   t j tjddd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j tjddd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ dS )zoCheck fix for nan + point on equator or pole not returning all nans in
    Geodesic::Inverse, found 2015-09-23.r   rG   r   r	   r
   é	   NrT   r3   r   r   r    Útest_GeodSolve55V  s   zGeodSolveTest.test_GeodSolve55c                 C   r.   )z>Check for points close with longitudes close to 180 deg apart.é   ç›+¡†›„=rm   r;   r   g(Í´#=g´àø¤tã=r   r	   gÿÿÿÿÿf@r
   gÊrÎ~qAro   Nr2   r3   r   r   r    Útest_GeodSolve59b  r5   zGeodSolveTest.test_GeodSolve59c                 C   sÆ   t j ddddt jt jB ¡}| j|d ddd� | j|d	 d
dd� | jt|d ƒddd� t j dddd¡}| dt jt jB ¡}| j|d ddd� | j|d	 d
dd� | jt|d ƒddd� dS )z0Make sure small negative azimuths are west-goingé-   r   g�e»ºŒ«K¼rF   r   g,g~5§F@r0   r   r   éLÿÿÿr	   r;   éP   N)	r   r   r"   re   r   r   rH   ÚInverseLinerg   rh   r   r   r    Útest_GeodSolve61i  s   
ÿzGeodSolveTest.test_GeodSolve61c                 C   s.  t j ddddt j¡}| dt jt jB ¡}| j|d ddd	� | j|d
 ddd	� | jt|d ƒddd	� | j|d ddd	� | j|d ddd	� | jt|d ƒddd	� | j|d ddd	� | j|d ddd	� | j|d ddd	� | j|d ddd	� | j|d ddd	� | j|d d dd	� | d!t jt jB ¡}| j|d ddd	� | j|d
 ddd	� | jt|d ƒddd	� | j|d d"dd	� | j|d d#dd	� | j|d ddd	� | j|d d$dd	� | j|d d%dd	� | j|d d&dd	� | j|d d'dd	� | j|d d(dd	� | j|d d)dd	� d*S )+zÇCheck for bug in east-going check in GeodesicLine (needed to check for
    sign of 0) and sign error in area calculation due to a bogus override
    of the code for alp12.  Found/fixed on 2015-12-19.rE   g¬CÒÑ]r2¼iáÿÿÿr;   rF   r   g      >@r0   r   r   ç       €r   rw   r   g¶g–¨NÀr   r	   r
   i€–˜ r1   r   gjö@+0„V@r   iôa r   g.�ÅAøU¿rn   r   gÈÞA¢¿†V?gH¯¼šò×j>r   r   rb   g7ýÙ�	>Àç     €fÀi -1gŽÙëÝ~f@iFÔ  g´Uîª¬ð¿g/�º1˜Úï¿ç€»ƒnþÜBN)r   r   r�   r   rg   r   r   rH   ©r   ri   r$   r   r   r    Útest_GeodSolve65v  s:   ÿzGeodSolveTest.test_GeodSolve65c                 C   s¼   t j dddd¡}| dt jt jB ¡}| j|d ddd	� | j|d
 ddd	� | j|d ddd	� | d|j t jt jB ¡}| j|d ddd	� | j|d
 ddd	� | j|d ddd	� dS )zVCheck for InverseLine if line is slightly west of S and that s13 is
    correctly set.éûÿÿÿgVçž¯â¼rO   r;   rb   r   gA‚âÇ˜Û@r0   r   r   r„   r	   rƒ   r1   gäIÒ5“áUÀN)r   r   r�   rg   re   r   r   Ús13r†   r   r   r    Útest_GeodSolve66—  s   
ÿzGeodSolveTest.test_GeodSolve66c                 C   sl   t j dddd¡}| d|j t jt jB ¡}| j|d ddd	� | j|d
 ddd	� | j|d ddd	� dS )zCheck that DirectLine sets s13.rS   r[   r~   rF   r1   r   g…ëQ¸í>@r0   r   r   ggDioðÅB@r	   gI¢—Q,·K@N)r   r   Ú
DirectLinerg   r‰   re   r   r   r†   r   r   r    Útest_GeodSolve71¥  s   
ÿzGeodSolveTest.test_GeodSolve71c                 C   sl   t j dddd¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� |  t d|d ¡dk¡ dS )a0  Check for backwards from the pole bug reported by Anon on 2016-02-13.
    This only affected the Java implementation.  It was introduced in Java
    version 1.44 and fixed in 1.46-SNAPSHOT on 2016-01-17.
    Also the + sign on azi2 is a check on the normalizing of azimuths
    (converting -0.0 to +0.0).rG   rm   r;   g    €„.Ár   g†¬nõBT@r0   r   r   rc   r	   r   rS   N)r   r   r"   r   rW   rU   Úcopysignr7   r   r   r    Útest_GeodSolve73®  s
   zGeodSolveTest.test_GeodSolve73c                 C   sº   t j ddddt j¡}| j|d ddd� | j|d	 d
dd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� dS )zNCheck fix for inaccurate areas, bug introduced in v1.46, fixed
    2015-10-16.gÎªÏÕVK@g¼?Æ.@g•eˆc]K@gƒQI�€Æ.@r   gÞOáŽÜK@ro   r   r	   gZ"a)œÜK@r
   gK;:‹ÃC@r   g1Áf7L7?r   r   g$ÎPýÿÿï?r   r   gèMMZ¬±ArB   N)r   r   r   r   r   r3   r   r   r    Útest_GeodSolve74º  s   ÿzGeodSolveTest.test_GeodSolve74c                 C   r.   )zNThe distance from Wellington and Salamanca (a classic failure of
    Vincenty)g‰ˆˆˆˆ¨DÀg"""""Úe@g¼»»»»{D@g      Àr   g½¯ (†d@ç•dyáý•=r   r	   g]E¦!€3@r
   gT·ý-	sAç�íµ ÷Æ >Nr2   r3   r   r   r    Útest_GeodSolve76È  s   
ÿzGeodSolveTest.test_GeodSolve76c                 C   r.   )z5An example where the NGS calculator fails to convergeg333333;@rv   gš™™™™;Àru   r   gï_Y�éF@r�   r   r	   gÛª‚ÚIÇ`@r
   gæ”@,�sAr‘   Nr2   r3   r   r   r    Útest_GeodSolve78Ñ  r5   zGeodSolveTest.test_GeodSolve78c                 C   sp  t j ddddt j¡}| j|d ddd� | j|d ddd� t j ddddt j¡}| j|d d	dd� | j|d d	dd� t j d
dd
dt j¡}| j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d d	dd� | j|d d	dd� | j|d ddd� |  t d	|d ¡dk¡ |  t d	|d ¡dk¡ |  t d	|d ¡dk¡ t j ddddt j¡}| j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d ddd� | j|d d	dd� | j|d d	dd� | j|d ddd� t j 	d	ddt j
¡}| dt j¡}|  t |d ¡¡ dS )z Some tests to add code coverage: computing scale in special cases + zero
    length geodesic (includes GeodSolve80 - GeodSolve83) + using an incapable
    line.r   rG   r   g3KÜö¤u¿g»½×Ùß|Ë=r   r   g�íµ ÷Æ°>rS   gÇK7‰A 4@r   r   r
   r   r   r;   r	   r   r   r   rs   r…   r1   r[   éè  N)r   r   r   ÚGEODESICSCALEr   r   rW   rU   r�   rf   ÚLATITUDErg   ÚEMPTYrX   )r   r   ri   r$   r   r   r    Útest_GeodSolve80Ø  s<   zGeodSolveTest.test_GeodSolve80c                 C   s|  t j dddtj¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j dddtj¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j ddtjd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j ddtjd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j dtjdd¡}|  |d dk¡ |  t |d ¡¡ |  |d dk¡ t j dtjdd¡}|  |d dk¡ |  t |d ¡¡ |  |d dk¡ t j tjddd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ t j tjddd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ dS )	z€Tests for python implementation to check fix for range errors with
    {fmod,sin,cos}(inf) (includes GeodSolve84 - GeodSolve91).r   rG   r   r   r	   r”   r   N)r   r   r"   rU   ÚinfrW   rX   rV   r7   r   r   r    Útest_GeodSolve84   s@   zGeodSolveTest.test_GeodSolve84c                 C   r.   )zªCheck fix for inaccurate hypot with python 3.[89].  Problem reported
    by agdhruv https://github.com/geopy/geopy/issues/466 ; see
    https://bugs.python.org/issue43088g¸´÷àB@gîÎÚmž^Àg·´÷àB@g6•Eaž^Àr   g8ÅüÿV@gH¯¼šò×z>r   r	   g•*r €V@r
   gL7‰A`åÐ?rB   Nr2   r3   r   r   r    Útest_GeodSolve92$  s   
ÿzGeodSolveTest.test_GeodSolve92c                 C   sT   t j ddtjd¡}|  t |d ¡¡ |  t |d ¡¡ |  t |d ¡¡ dS )zPCheck fix for lat2 = nan being treated as lat2 = 0 (bug found
       2021-07-26)r   rG   r   r	   r
   NrT   r3   r   r   r    Útest_GeodSolve94.  s   zGeodSolveTest.test_GeodSolve94c                 C   s6   t ddƒ}| ddddt j¡}| j|d ddd	� d
S )zÿFailure with long doubles found with test case from Nowak + Nowak Da
       Costa (2022).  Problem was using somg12 > 1 as a test that it needed
       to be set when roundoff could result in somg12 slightly bigger that 1.
       Found + fixed 2022-03-30.i™Ra g!6‡Zwk?r   gr\Í¨
N@g­-•˜YvV@r   l   •WrY r1   r   Nrk   r>   r   r   r    Útest_GeodSolve966  s   
zGeodSolveTest.test_GeodSolve96N)$r)   r*   r+   r,   r4   r8   r@   rC   rI   rJ   rK   rL   rN   rR   rY   r`   rj   rl   rp   rt   rx   rz   r}   r‚   r‡   rŠ   rŒ   rŽ   r�   r’   r“   r˜   rš   r›   rœ   r�   r   r   r   r    r-   Ž   sD    
3!		($
r-   c                   @   s�   e Zd ZdZej d¡Zej d¡Ze	d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S )ÚPlanimeterTestzPlanimeter testsFTc                 C   ó8   t j ¡  | D ]}t j |d |d ¡ qt j dd¡S )zHelper function for polygonsr   rS   FT)rž   ÚpolygonÚClearÚAddPointÚCompute©ÚpointsÚpr   r   r    Ú
PlanimeterE  ó   
zPlanimeterTest.Planimeterc                 C   rŸ   )zHelper function for polylinesr   rS   FT)rž   Úpolyliner¡   r¢   r£   r¤   r   r   r    Ú
PolyLengthM  r¨   zPlanimeterTest.PolyLengthc                 C   s^  ddgddgddgddgg}t  |¡\}}}| j|ddd� | j|d	d
d� ddgddgddgddgg}t  |¡\}}}| j|ddd� | j|dd
d� ddgddgdd
gd
dgg}t  |¡\}}}| j|ddd� | j|dd
d� ddgddgddgg}t  |¡\}}}| j|dd
d� | j|dd
d� t  |¡\}}}| j|dd
d� |  t |¡¡ dS )z2Check fix for pole-encircling bug found 2011-03-16éY   r   rG   r;   i  gÉv¾¿H#Ag-Cëâ6?r   g  8à=BrS   i§ÿÿÿg  8à=ÂéÿÿÿÿgaÃÓ‹'#Ag  (ºíBiÊg€»ƒnþÌBiï}1N)rž   r§   r   rª   rW   rU   rX   ©r   r¥   Ú_Ú	perimeterÚarear   r   r    Útest_Planimeter0U  s&   zPlanimeterTest.test_Planimeter0c                 C   sJ   ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� d	S )
z;Check fix for Planimeter pole crossing bug found 2011-06-24r«   r   gfffff†V@gÍÌÌÌÌ|fÀi¡: rS   r   g  4à=BN©rž   r§   r   r­   r   r   r    Útest_Planimeter5m  ó   zPlanimeterTest.test_Planimeter5c                 C   s  ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� d	S )
z<Check fix for Planimeter lon12 rounding bug found 2012-12-03ry   g›+¡†›„½r;   r   ií¹%rS   r   r|   Nr²   r­   r   r   r    Útest_Planimeter6t  s    zPlanimeterTest.test_Planimeter6c                 C   óJ   ddgddgddgg}t  |¡\}}}| j|ddd� | j|ddd� dS )	z@Area of arctic circle (not really -- adjunct to rhumb-area test)çÄ$êrû£P@r   r;   ih  éÁ±Ÿ rS   r   Nr²   r­   r   r   r    Útest_Planimeter12‡  r´   z PlanimeterTest.test_Planimeter12c                 C   r¶   )	zReverse area of arctic circler·   r   r   é˜þÿÿr¸   rS   r   Nr²   r­   r   r   r    Útest_Planimeter12rŽ  r´   z!PlanimeterTest.test_Planimeter12rc                 C   s\   ddgddgddgddgddgddgg}t  |¡\}}}| j|dd	d
� | j|dd	d
� dS )zCheck encircling pole twicer«   rº   iÿÿÿiˆÿÿÿr   éx   éð   i%¶ rS   r   g  À¤d0BNr²   r­   r   r   r    Útest_Planimeter13•  s   (z PlanimeterTest.test_Planimeter13c           
      C   sœ  g d¢}g d¢}d}d}t j ¡  t j |d |d ¡ t j |d |d ¡ t j |d |d dd	¡\}}}| j||d
d� t j |d |d dd¡\}}}| j||d
d� t j |d |d d	d	¡\}}}| j|| d
d� t j |d |d d	d¡\}}}| j||| d
d� tj |d |d |d |d ¡}|d }|d }	t j 	||	dd	¡\}}}| j||d
d� t j 	||	dd¡\}}}| j||d
d� t j 	||	d	d	¡\}}}| j|| d
d� t j 	||	d	d¡\}}}| j||| d
d� t j |d |d ¡ t j 
dd	¡\}}}| j||d
d� t j 
dd¡\}}}| j||d
d� t j 
d	d	¡\}}}| j|| d
d� t j 
d	d¡\}}}| j||| d
d� dS )z{Coverage tests, includes Planimeter15 - Planimeter18 (combinations of
    reverse and sign) + calls to testpoint, testedge.)r[   rS   r\   )rS   r[   r\   gÎUé/Bçˆ»ƒnþüBr   rS   r[   FTr1   r   r   r
   N)rž   r    r¡   r¢   Ú	TestPointr   r   r   r   ÚTestEdger£   )
r   ÚlatÚlonÚrÚa0r®   r°   r   r   r
   r   r   r    Útest_Planimeter15œ  sF   
    "z PlanimeterTest.test_Planimeter15c                 C   sð  t j ¡  t j dd¡\}}}|  |dk¡ |  |dk¡ t j dddd¡\}}}|  |dk¡ |  |dk¡ t j dddd¡\}}}|  t |¡¡ |  t |¡¡ t j 	dd¡ t j dd¡\}}}|  |dk¡ |  |dk¡ t j
 ¡  t j
 dd¡\}}}|  |dk¡ t j
 dddd¡\}}}|  |dk¡ t j
 dddd¡\}}}|  t |¡¡ t j
 	dd¡ t j
 dd¡\}}}|  |dk¡ t j 	dd¡ t j
 dddd¡\}}}| j|ddd� t j
 d	d	dd¡\}}}| j|d
dd� dS )z]Coverage tests, includes Planimeter19 - Planimeter20 (degenerate
    polygons) + extra cases.FTr   rS   rG   r”   rs   r   r[   gyé&1a&ArB   N)rž   r    r¡   r£   rW   rÀ   rÁ   rU   rX   r¢   r©   r   )r   r®   r¯   r°   r   r   r    Útest_Planimeter19Ã  s:   

z PlanimeterTest.test_Planimeter19c           	      C   sÄ  d}d}d}d}d}t j ¡  t j |d¡ t j |d¡ t j |d¡ t j |d¡ t j |d¡ t j |d¡ d	D �]#}t j |d¡ t j |d¡ t j |dd
d¡\}}}| j||| dd� t j |dd
d
¡\}}}| j||| dd� t j |ddd¡\}}}| j|| | dd� t j |ddd
¡\}}}| j|| | | dd� t j ||d
d¡\}}}| j||| dd� t j ||d
d
¡\}}}| j||| dd� t j ||dd¡\}}}| j|| | dd� t j ||dd
¡\}}}| j|| | | dd� t j |d¡ t j d
d¡\}}}| j||| dd� t j d
d
¡\}}}| j||| dd� t j dd¡\}}}| j|| | dd� t j dd
¡\}}}| j|| | | dd� q;dS )z�Some tests to add code coverage: multiple circlings of pole (includes
    Planimeter21 - Planimeter28) + invocations via testpoint and testedge.r~   g¹\ärs›C@gH6-¬`Ag·ŒYµîÁBr¿   é<   r;   iÄÿÿÿ)r\   r]   FTr1   r   N)rž   r    r¡   r¢   rÀ   r   rÁ   r£   )	r   rÂ   ÚaziÚsrÄ   rÅ   Úir®   r°   r   r   r    Útest_Planimeter21ä  sR   

åz PlanimeterTest.test_Planimeter21c                 C   sj   t j ¡  t j dd¡ t j dd¡ t j dd¡ t j dd¡ t j dd¡\}}}| j|ddd	� d
S )zACheck fix to transitdirect vs transit zero handling inconsistencyr   rG   r”   i¦ÿÿÿFTg    €„.ArQ   r   N)rž   r    r¡   r¢   ÚAddEdger£   r   )r   r®   r°   r   r   r    Útest_Planimeter29  s   
z PlanimeterTest.test_Planimeter29N)r)   r*   r+   r,   r   r   ÚPolygonr    r©   Ústaticmethodr§   rª   r±   r³   rµ   r¹   r»   r¾   rÆ   rÇ   rÌ   rÎ   r   r   r   r    rž   ?  s$    

'!,rž   )	r,   ÚunittestrU   Úgeographiclib.geodesicr   ÚTestCaser   r-   rž   r   r   r   r    Ú<module>   s        4