
    g                         d Z ddlZddlZddlmZ  G d dej
                        Z G d dej
                        Z G d d	ej
                        Zy)
zGeodesic tests    N)Geodesicc                       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 Zd Zd Zy)GeodesicTestzGeodesic test suite)gHhA@gz6>WnagQ[@g|͍Y&gVc}Qg}_A)`@gw
aAgpow T@gh'$WAgB1A?g轅?g݀X[B)gиp $K@g>>tAZ@gd"6@gBS@gեh@gz+G[@g 0QOAgSErB@gΪB6MAgEoڟ?gߡ?gϻbB)g|,}5g=,Ԛa@gv8@gVD@g?X@gDg 	`Ag
FR@gWAgk?g %?g&)gx]`Pg	\@g$ge@gvi)g_^}tq@g8 @g_fDeAg&u$Y@guJWAg:D0ƿgmTƿgAؓ)gLqUwm1g<e@gS+cg5{/gy@gt4gbC8enAgx{b@g|FzLAgMg{YdgB8>B)g{l@@gE*-%H@g(b@gۅ:$LgwR~RIi@g^H@g3oAg5b@gGsHAgK:yg"I~gAyx)gVF@g4h^J@g;8%W@gʡEgdzi@gV40V@ghOpAg0g9Dc@g!&EAg?/g2gs)g} RHIg/L
N0g1#\Zgn/i@gJiWWgٚ)7GgBm ]XAgTR
M@gY!_TAgp$?g?g-XB)gP6
wMgT㥛!g[$a@gs!gS?o*R`@gcA3@g@DlfAg>]pZ@g1TNvWAg,пg{Rѿgl5)gIK5Qgy@ٔ+RgɓqW@g"lxzPIg@aӻ gZ+
SA@g@vd0NAgæ?A@g	)zKLAgf?g!0?ggo)gq@%g$~@gk>EOUgx&1@gwN#`glmRTg]eAg3Y@gАbvWAg5tͿg_vͿgbqጎB)g%1 5gd@gpQ=@g!J]H@gB=j@g)E@g)lZaAg>}T@g=3:XAg!!>\?g-&?gJ	<B)g*3gڧ1egOyQ@g[Υ'g|~!<Kcg#ϳeP@gOnNAAgpW4@ghoMAAgq<?gFɘ]?gHe)g%;6'g}<]g4-W@g^hHK@gEa@gU3S@gR<cjAgIf,_@g7;cKSAgZ3gYTS6g͢j*)gb֋Ug}ijU@gGw5GPg)"P@goe0@gQ"g		u]|pAgrc@g&Y7DAgig3b&ggB)gNw(
?gSW>
`@gJneYg';U&g˾+'@g] ٔUglƯhAgm)]@gqM5UAg?v\ܿg,dܿgN,B)g}iƺ9gP6
bgC4cgJiWLg-Rpg,HghaAg	︇*U@g ',4?XAghؒL?gnLG?gbYB)gE>'Dgףp=
^@gDb,@g4FJg|DL$L`@g~P%@gZ~MAg	+A@gv/aKAgUo?gŖʪOl?gێr)gm&@g"Ha@goS@g[rP@g)?n@geYQY@gf5fAgZ@gK#B.(WAg ӿgeuӿgd$B)g*D/x=gs.UeW@gxdgmnLw;g46JQgx&{/gtiAgnUR^@g1?TAgҷ=}g g-Bc                 r   t         j                  D ]#  }|\  }}}}}}}}	}
}}}t        j                  j	                  ||||t        j
                  t        j                  z        }| j                  ||d   d       | j                  ||d   d       | j                  ||d   d       | j                  ||d   d       | j                  |	|d   d       | j                  |
|d	   d       | j                  ||d
   d       | j                  ||d   d       | j                  ||d   d       & y)z/Helper function for testing inverse calculationlon2vIh%<=deltaazi1azi2s12:0yE>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   invs                  `/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/geographiclib/test/test_geodesic.pytest_inversezGeodesicTest.test_inverse]   sB   ##'(%tT4tT
Cc3NN""4tT\\H$8$88:c
T3v;>
T3v;>
T3v;>
S#e*d;
S#e*e<
S#e*d;
S#e*e<
S#e*e<
S#e*c: $    c                 D   t         j                  D ]  }|\  }}}}}}}}	}
}}}t        j                  j	                  ||||t        j
                  t        j                  z        }| j                  ||d   d       | j                  ||d   d       | j                  ||d   d       | j                  |	|d   d       | j                  |
|d   d       | j                  ||d	   d
       | j                  ||d   d
       | j                  ||d   d        y)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   directs                  r"   test_directzGeodesicTest.test_directn   s*   ##'(%tT4tT
Cc3~~$$T4s%-\\H4H4H%HJf
T6&>5A
T6&>5A
T6&>5A
S&-?
S&->
S&-?
S&-?
S&-= $r$   c                 D   t         j                  D ]  }|\  }}}}}}}}	}
}}}t        j                  j	                  ||||	t        j
                  t        j                  z        }| j                  ||d   d       | j                  ||d   d       | j                  ||d   d       | j                  ||d   d       | j                  |
|d   d       | j                  ||d	   d
       | j                  ||d   d
       | j                  ||d   d        y)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'   s                  r"   test_arcdirectzGeodesicTest.test_arcdirect~   s*   ##'(%tT4tT
Cc3~~''dD#(0x7K7K(KMf
T6&>5A
T6&>5A
T6&>5A
S&->
S&->
S&-?
S&-?
S&-= $r$   N)__name__
__module____qualname____doc__r   r#   r)   r,    r$   r"   r   r      s    CCCGEFECFDDCCEEECCEF[PG)d;"> >r$   r   c                       e 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 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 Zd Z d Z!d  Z"d! Z#y")#GeodSolveTestzGeodSolve testsc                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)
GeodSolve0gLD@g33333sRgJ)""H@gffffff@r   gj@+0J@h㈵>r	   r   grt[@r   i*PY       ?Nr   r   r   r   r   r!   s     r"   test_GeodSolve0zGeodSolveTest.test_GeodSolve0   sg    
..
 
 uk4
@C3v;&A3v;	6B3u:w<r$   c                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)
GeodSolve1gWjQD@g#qPqRg     J@g    PVAr    gH@r6   r	   r   gx}@r   g
<I[@N)r   r   r&   r   r   r(   s     r"   test_GeodSolve1zGeodSolveTest.test_GeodSolve1   sg    ^^"";dFKF6&>8VD6&>7FC6&>9fEr$   c                    t        dd      }|j                  dddd      }| j                  |d   dd	
       | j                  |d   dd	
       | j                  |d   dd
       |j                  dddd      }| j                  |d   dd	
       | j                  |d   dd	
       | j                  |d   dd
       y)z4Check fix for antipodal prolate bug found 2010-09-04     jXAO贁N{gx#?r   gx#   r   gkV@r6   r	   r   r   2r7   r   ggK4V@Nr   r   r   r   geodr!   s      r"   test_GeodSolve2zGeodSolveTest.test_GeodSolve2   s    E8$D
,,w8S
1C3v;&A3v;&A3u:x=
,,sAtS
)C3v;&A3v;&A3u:x=r$   c                 v    t         j                  j                  dddd      }| j                  |d   dd       y	)
z-Check fix for short line bug found 2010-05-21g&?B@r   g&?B@gHת>r   g;On?Mb@?r	   Nr8   r9   s     r"   test_GeodSolve4zGeodSolveTest.test_GeodSolve4   s8    
..
 
 !!2I?C3u:uf=r$   c                 R   t         j                  j                  dddd      }| j                  |d   dd       |d	   dk  r8| j                  |d	   d
d       | j                  t	        |d         dd       y| j                  |d	   dd       | j                  |d   dd       y)z.Check fix for point2=pole bug found 2010-05-03g+@4?   r       cAr    Z   r6   r	   r   ijr   rB   N)r   r   r&   r   absr=   s     r"   test_GeodSolve5zGeodSolveTest.test_GeodSolve5   s    ^^""#3RDAF6&>2v>f~
VF^T6B
S0#vF
VF^R@
VF^Q?r$   c                 Z   t         j                  j                  dddd      }| j                  |d   dd       t         j                  j                  d	dd
d      }| j                  |d   dd       t         j                  j                  dddd      }| j                  |d   dd       y)zCheck 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).gBV@r   gBVgQdf@r   gDlsArI   r	   gP'PV@gP'PVg6*f@g]sAg*qQUV@g*qQUVgOePf@gunsANr8   r9   s     r"   test_GeodSolve6zGeodSolveTest.test_GeodSolve6   s     ..
 
 !!13IKC3u:|VD
..
 
 !!13IKC3u:|VD
..
 
 !!79NPC3u:|VDr$   c                 v    t         j                  j                  dddd      }| j                  |d   dd       y	)
zACheck fix for volatile x bug found 2011-06-25 (gcc 4.4.4 x86 -O3)gs)L@r   gs)LgjEuf@r   gPd=sArI   r	   Nr8   r9   s     r"   test_GeodSolve9zGeodSolveTest.test_GeodSolve9   s:    
..
 
 !!13IKC3u:|VDr$   c                 v    t         j                  j                  dddd      }| j                  |d   dd       y	)
zRCheck fix for adjust tol1_ bug found 2011-06-25 (Visual Studio
    10 rel + debug)gοW+idJ@r   gͿW+idJgHMtf@r   gsArI   r	   Nr8   r9   s     r"   test_GeodSolve10zGeodSolveTest.test_GeodSolve10   s<     ..
 
 !!79OQC3u:|VDr$   c                 v    t         j                  j                  dddd      }| j                  |d   dd       y	)
zRCheck fix for bet2 = -bet1 bug found 2011-06-25 (Visual Studio
    10 rel + debug)g]QBH@r   g[QBHgG0sf@r   gMb)sArI   r	   Nr8   r9   s     r"   test_GeodSolve11zGeodSolveTest.test_GeodSolve11   s<     ..
 
 !!68NPC3u:|VDr$   c                     t        dd      }|j                  dddd      }| j                  |d   dd	       | j                  |d
   dd	       | j                  |d   dd	       y)zCheck fix for inverse geodesics on extreme prolate/oblate
    ellipsoids Reported 2012-08-29 Stefan Guenther
    <stefan.gunther@embl.de>; fixed 2012-10-07g33333sV@gHzGr      r   gzG^@{Gz?r	   r   gIZ@r   g33333p@r   NrD   rE   s      r"   test_GeodSolve12zGeodSolveTest.test_GeodSolve12   so     D% D
,,q!S#
&C3v;=3v;=3u:ud;r$   c                 N   t         j                  j                  dddt        j                        }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                y)z*Check fix for inverse ignoring lon12 = nanr      r   r   r   Nr   r   r   mathnan
assertTrueisnanr9   s     r"   test_GeodSolve14zGeodSolveTest.test_GeodSolve14   sk    
..
 
 Aq$((
3COODJJs6{+,OODJJs6{+,OODJJs5z*+r$   c                     t        dd      }|j                  ddddt         j                        }| j                  |d   dd	
       y)zcInitial implementation of Math::eatanhe was wrong for e^2 < 0.  This
    checks that this is fixed.r@   rA   r_            r   i\  r7   r	   N)r   r&   AREAr   r   rF   r(   s      r"   test_GeodSolve15zGeodSolveTest.test_GeodSolve15   sC     E8$D[[Aq!X]]3F6%=%=r$   c                    t         j                  j                  ddddt         j                  t         j                  z        }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       t         j                  j                  ddd      }|j                  dt         j                  t         j                  z        }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   dd       | j                  |d   dd       |j                  d      }| j                  |d   dd       | j                  |d	   dd       | j                  |d   dd       y)z1Check fix for LONG_UNROLL bug found on 2015-05-07(   irZ       sAr    ir_   r	   r   ir   Vi   N)r   r   r&   STANDARDr   r   LinePositionr   r(   lines      r"   test_GeodSolve17zGeodSolveTest.test_GeodSolve17   s   ^^""2sC#+#4#4x7K7K#KMF6&>3:6&>4;6&>4;>>r3,D]]3 1 1H4H4H HIF6&>3:6&>4;6&>4;^^""2sC5F6&>3:6&>3:6&>4;]]3F6&>3:6&>3:6&>4;r$   c                     t        dd      }|j                  ddddt         j                        }| j                  |d   dd	
       y)z<Check 0/0 problem with area calculation on sphere 2015-09-08r@   r   r_   rg   rh   ri   r   g  ?='Br7   r	   Nr   r   rj   r   rE   s      r"   test_GeodSolve26zGeodSolveTest.test_GeodSolve26
  sA    E1D
,,q!Q8==
1C3u:}cBr$   c                 r    t        dd      }|j                  dddd      }| j                  |d   dd	
       y)ztCheck for bad placement of assignment of r.a12 with |f| > 0.01 (bug in
    Java implementation fixed on 2015-05-19).r@   r   r_   rg   
       SAr   gXg!GH@:0y5>r	   N)r   r&   r   rk   s      r"   test_GeodSolve28zGeodSolveTest.test_GeodSolve28  s=     E3D[[Ar3'F6%=+vFr$   c                    t         j                  j                  dddd      }| j                  |d   dd       | j                  |d   d	d       | j                  |d
   dd       t         j                  j                  ddddt         j                  t         j
                  z        }| j                  |d   dd       | j                  |d   dd       | j                  |d
   dd       y)z=Check longitude unrolling with inverse calculation 2015-09-16r   i     r      绽|=r	   r   iMr   ie r7   i  N)r   r   r   r   rr   r   r=   s     r"   test_GeodSolve29zGeodSolveTest.test_GeodSolve29  s    ^^##AsAs3F6&>3>6&>4?6%=&#>^^##AsAs$,$5$58L8L$LNF6&>3>6&>3>6%=&#>r$   c                    t         j                  j                  dddd      }| j                  |d   dd       | j                  |d   dd       | j                  |d   d	d
       t         j                  j                  dddd      }| j                  |d   dd       | j                  |d   dd       | j                  |d   dd
       t         j                  j                  dddd      }| j                  |d   dd       | j                  t	        |d         dd       | j                  |d   dd
       t         j                  j                  dddd      }| j                  |d   dd       | j                  t	        |d         dd       | j                  |d   dd
       t        dd      }|j                  dddd      }| j                  |d   dd       | j                  |d   dd       | j                  |d   dd
       |j                  dddd      }| j                  |d   dd       | j                  t	        |d         dd       | j                  |d   dd
       |j                  dddd      }| j                  |d   dd       | j                  t	        |d         dd       | j                  |d   dd
       t        dd      }|j                  dddd      }| j                  |d   dd       | j                  |d   dd       | j                  |d   dd
       |j                  dddd      }| j                  |d   dd       | j                  |d   dd       | j                  |d   dd
       |j                  ddd
d      }| j                  |d   dd       | j                  |d   dd       | j                  |d   dd
       |j                  dddd      }| j                  |d   dd       | j                  t	        |d         dd       | j                  |d   dd
       y)zCheck 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   r   r   g     V@r6   r	   r   r   i0r7        pf@gʡEK@g/$_@i>0rB                f@i[<1r_   im/r@   i|1rC   gO贁Nkg:X0@@gz(_b@io2i1N)r   r   r   r   rO   )r   r!   rF   s      r"   test_GeodSolve33zGeodSolveTest.test_GeodSolve33#  sb    ..
 
 Aq#
.C3v;&A3v;&A3u:x=
..
 
 Aq%
0C3v;&A3v;	6B3u:x=
..
 
 Aq#
.C3v;@3s6{+YG3u:x=
..
 
 Aq#
.C3v;@3s6{+YG3u:x=E1D
,,q!Q
$C3v;&A3v;&A3u:x=
,,q!Q
$C3v;@3s6{+YG3u:x=
,,q!Q
$C3v;@3s6{+YG3u:x=E8$D
,,q!Q
$C3v;&A3v;&A3u:x=
,,q!Q
$C3v;&A3v;&A3u:x=
,,q!S#
&C3v;&A3v;	6B3u:x=
,,q!Q
$C3v;@3s6{+YG3u:x=r$   c                    t         j                  j                  t        j                  ddd      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  t        j                  ddd      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                y)zoCheck fix for nan + point on equator or pole not returning all nans in
    Geodesic::Inverse, found 2015-09-23.r   rN   r   r   r   	   Nr`   r9   s     r"   test_GeodSolve55zGeodSolveTest.test_GeodSolve55V  s     ..
 
 1a
4COODJJs6{+,OODJJs6{+,OODJJs5z*+
..
 
 1b!
4COODJJs6{+,OODJJs6{+,OODJJs5z*+r$   c                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)z>Check for points close with longitudes close to 180 deg apart.   +=r|   rB   r   g(#=gt=r	   r   gf@r   gr~qAr~   Nr8   r9   s     r"   test_GeodSolve59zGeodSolveTest.test_GeodSolve59b  sk    
..
 
 $4b#
>C3v;(97K3v;(:GL3u:'94Hr$   c                 f   t         j                  j                  ddddt         j                  t         j                  z        }| j                  |d   dd       | j                  |d	   d
d       | j                  t        |d         dd       t         j                  j                  dddd      }|j                  dt         j                  t         j                  z        }| j                  |d   dd       | j                  |d	   d
d       | j                  t        |d         dd       y)z0Make sure small negative azimuths are west-going-   r   geKrM   r    g,g~5F@r6   r	   r   Lr   rB   P   N)	r   r   r&   rr   r   r   rO   InverseLinert   ru   s      r"   test_GeodSolve61zGeodSolveTest.test_GeodSolve61i  s   ^^""2q*?#+#4#4x7K7K#KMF6&>8VD6&>4@3vf~.VD>>%%b!R1FGD]]3 1 1H4H4H HIF6&>8VD6&>4@3vf~.VDr$   c                    t         j                  j                  ddddt         j                        }|j	                  dt         j                  t         j
                  z        }| j                  |d   dd	       | j                  |d
   dd	       | j                  t        |d         dd	       | j                  |d   dd	       | j                  |d   dd	       | j                  t        |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!t         j                  t         j
                  z        }| j                  |d   dd	       | j                  |d
   dd	       | j                  t        |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	       | j                  |d   d)d	       y*)+zCheck 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.rL   gC]r2irB   rM   r   g      >@r6   r	   r          r   r   r    ggNr   r   r   i r7   r   gj@+0V@r   ia r   g.AUr}   r   gAV?gHj>r   r   ro   g7ُ	>     fi -1g~f@iF  gUg/1瀻nBN)r   r   r   r   rt   r   r   rO   r   rv   r(   s      r"   test_GeodSolve65zGeodSolveTest.test_GeodSolve65v  s    >>%%b*?c&.ll4D]]3x/C/C CDF6&>8vF6&>8vF3vf~.	6J6&>9vF6&>8vF3vf~.	6J6%=8sC6%=8vF6%=7sC6%=:uE6%=9vF6%=1sC]]3x/C/C CDF6&>8vF6&>8vF3vf~.	6J6&>9vF6&>:vF6&>8vF6%=8sC6%=9vF6%=5sC6%=:uE6%=:vF6%=+<cJr$   c                 :   t         j                  j                  dddd      }|j                  dt         j                  t         j
                  z        }| j                  |d   dd	       | j                  |d
   dd	       | j                  |d   dd	       |j                  d|j                  z  t         j                  t         j
                  z        }| j                  |d   dd	       | j                  |d
   dd	       | j                  |d   dd	       y)zVCheck for InverseLine if line is slightly west of S and that s13 is
    correctly set.gV瞯rZ   rB   ro   r    gAǘ@r6   r	   r   r   r   r   r7   gI5UN)r   r   r   rt   rr   r   r   s13r   s      r"   test_GeodSolve66zGeodSolveTest.test_GeodSolve66  s    >>%%b*<c3GD]]3 1 1H4H4H HIF6&>7vF6&>:vF6&>8vF]]3>#,,x/C/CCEF6&>9vF6&>8vF6&>:vFr$   c                 N   t         j                  j                  dddd      }|j                  d|j                  z  t         j
                  t         j                  z        }| j                  |d   dd	       | j                  |d
   dd	       | j                  |d   dd	       y)zCheck that DirectLine sets s13.r_   rg   r   rM   r7   r    gQ>@r6   r	   r   ggDioB@r   gIQ,K@N)r   r   
DirectLinert   r   rr   r   r   r   s      r"   test_GeodSolve71zGeodSolveTest.test_GeodSolve71  s    >>$$Q2s3D]]3>#,,x/C/CCEF6&>8VD6&>8VD6&>8VDr$   c                 (   t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       | j	                  t        j                  d|d         dkD         y)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).rN   r|   rB   g    .r    gnBT@r6   r	   r   rp   r   r   r_   N)r   r   r&   r   rc   ra   copysignr=   s     r"   test_GeodSolve73zGeodSolveTest.test_GeodSolve73  s     ^^""2r35F6&>8VD6&>4@6&>1f=OODMM!VF^4q89r$   c                    t         j                  j                  ddddt         j                        }| 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       y)zNCheck fix for inaccurate areas, bug introduced in v1.46, fixed
    2015-10-16.gΪVK@g?.@gec]K@gQI.@r   gOK@r~   r	   r   gZ"a)K@r   gK;:C@r   g1f7L7?r   r   g$P?r   r   gMMZArI   N)r   r   r   r   r   r9   s     r"   test_GeodSolve74zGeodSolveTest.test_GeodSolve74  s     ..
 
 '7G!)/C3v;dC3v;dC3u:dC3u:dC3u:dC3u:dC3u:dC3u:Er$   c                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)zNThe distance from Wellington and Salamanca (a classic failure of
    Vincenty)gDg"""""e@g{D@g      r   g (d@dy=r	   r   g]E!3@r   gT-	sAƠ>Nr8   r9   s     r"   test_GeodSolve76zGeodSolveTest.test_GeodSolve76  sl     ..
 
 !+\;C3v;I3v;I3u:Hr$   c                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)z5An example where the NGS calculator fails to convergeg333333;@r   g;r   r   g_YF@r   r	   r   g۪I`@r   g@,sAr   Nr8   r9   s     r"   test_GeodSolve78zGeodSolveTest.test_GeodSolve78  sg    
..
 
 sE5
9C3v;I3v;I3u:Hr$   c                    t         j                  j                  ddddt         j                        }| j	                  |d   dd       | j	                  |d   dd       t         j                  j                  ddddt         j                        }| j	                  |d   d	d       | j	                  |d   d	d       t         j                  j                  d
dd
dt         j
                        }| 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                  t        j                  d	|d         dkD         | j                  t        j                  d	|d         dkD         | j                  t        j                  d	|d         dkD         t         j                  j                  ddddt         j
                        }| 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       t         j                  j                  d	ddt         j                        }|j                  dt         j                        }| j                  t        j                  |d                y)zSome tests to add code coverage: computing scale in special cases + zero
    length geodesic (includes GeodSolve80 - GeodSolve83) + using an incapable
    line.r   rN   r   g3Kug|=r	   r   gư>r_   gK7A 4@r   r   r   r   r   rB   r   r   r   r   r   r   r7   rg     N)r   r   r   GEODESICSCALEr   r   rc   ra   r   rs   LATITUDErt   EMPTYrd   )r   r!   rv   r(   s       r"   test_GeodSolve80zGeodSolveTest.test_GeodSolve80  s,    ..
 
 Aq"h.D.D
EC3u:~wG3u:~wG
..
 
 AtT83I3I
JC3u:q':3u:q':
..
 
 FAx||
DC3u:q%83u:q$73v;U;3v;U;3u:q483u:q%83u:q%83u:q%8OODMM!SZ0145OODMM!SZ0145OODMM!SZ0145
..
 
 QC
>C3u:q%83u:q$73v;593v;U;3u:q$73u:q%83u:q%83u:'8#F >>q!R):):;D]]40FOODJJve}-.r$   c                 	   t         j                  j                  dddt        j                        }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  dddt        j                        }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  ddt        j                  d      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  ddt        j                  d      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  dt        j                  dd      }| j                  |d   dk(         | j                  t        j                  |d                | j                  |d   dk(         t         j                  j                  dt        j                  dd      }| j                  |d   dk(         | j                  t        j                  |d                | j                  |d   dk(         t         j                  j                  t        j                  ddd      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                t         j                  j                  t        j                  ddd      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                y)	zTests for python implementation to check fix for range errors with
    {fmod,sin,cos}(inf) (includes GeodSolve84 - GeodSolve91).r   rN   r    r   r   r   r   N)r   r   r&   ra   infrc   rd   rb   r=   s     r"   test_GeodSolve84zGeodSolveTest.test_GeodSolve84   s<    ^^""1aTXX6FOODJJvf~./OODJJvf~./OODJJvf~./^^""1aTXX6FOODJJvf~./OODJJvf~./OODJJvf~./^^""1a48FOODJJvf~./OODJJvf~./OODJJvf~./^^""1a48FOODJJvf~./OODJJvf~./OODJJvf~./^^""1dhhD9FOOF6Na'(OODJJvf~./OOF6Nb()^^""1dhhD9FOOF6Na'(OODJJvf~./OOF6Nb()^^""488QD9FOODJJvf~./OODJJvf~./OODJJvf~./^^""488QD9FOODJJvf~./OODJJvf~./OODJJvf~./r$   c                     t         j                  j                  dddd      }| j                  |d   dd       | j                  |d	   d
d       | j                  |d   dd       y)zCheck 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@gm^gB@g6Ea^r   g8V@gHz>r	   r   g*r V@r   gL7A`?rI   Nr8   r9   s     r"   test_GeodSolve92zGeodSolveTest.test_GeodSolve92$  sn     ..
 
 !3Z!)[BC3v;TD3v;TD3u:VDr$   c                 N   t         j                  j                  ddt        j                  d      }| j                  t        j                  |d                | j                  t        j                  |d                | j                  t        j                  |d                y)zPCheck fix for lat2 = nan being treated as lat2 = 0 (bug found
       2021-07-26)r   rN   r   r   r   Nr`   r9   s     r"   test_GeodSolve94zGeodSolveTest.test_GeodSolve94.  sm     ..
 
 Atxx
4COODJJs6{+,OODJJs6{+,OODJJs5z*+r$   c                     t        dd      }|j                  ddddt         j                        }| j                  |d   dd	       y
)zFailure 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.iRa g!6Zwk?r   gr\
N@g-YvV@r   l   WrY r7   r	   Nry   rE   s      r"   test_GeodSolve96zGeodSolveTest.test_GeodSolve966  sE    
 G_-D
,,q!-/?
OC3u:~sCr$   N)$r-   r.   r/   r0   r:   r>   rG   rJ   rP   rR   rT   rV   rX   r]   re   rl   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r$   r"   r3   r3      s    =F
>>	@EEEE<,><*CG
?1>f
,IEKBGE
:FII&/P"0HE,Dr$   r3   c                       e Zd ZdZej
                  j                  d      Zej
                  j                  d      Ze	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y)PlanimeterTestzPlanimeter testsFTc                     t         j                  j                          | D ](  }t         j                  j                  |d   |d          * t         j                  j	                  dd      S )zHelper function for polygonsr   r_   FT)r   polygonClearAddPointComputepointsps     r"   
PlanimeterzPlanimeterTest.PlanimeterE  sW       "%%adAaD1 !!))%66r$   c                     t         j                  j                          | D ](  }t         j                  j                  |d   |d          * t         j                  j	                  dd      S )zHelper function for polylinesr   r_   FT)r   polyliner   r   r   r   s     r"   
PolyLengthzPlanimeterTest.PolyLengthM  sW     !!#&&qtQqT2 ""**5$77r$   c                    ddgddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |d	d
       ddgddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd
       ddgddgdd
gd
dgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd
       ddgddgddgg}t         j                  |      \  }}}| j                  |dd
       | j                  |dd
       t         j                  |      \  }}}| j                  |dd
       | j	                  t        j                  |             y)z2Check fix for pole-encircling bug found 2011-03-16Y   r   rN   rB   i  gvH#Ag-C6?r	   g  8=Br_   ig  8=gaӋ'#Ag  (BignBi}1N)r   r   r   r   rc   ra   rd   r   r   _	perimeterareas        r"   test_Planimeter0zPlanimeterTest.test_Planimeter0U  s   1gBx"cRI6F'226:Ay$9k4@4:Ahb	C:Sz:F'226:Ay$9k4@4;"gAwAA/F'226:Ay$9k4@4:1g1v2w'F'226:Ay$9h:4!11='226:Ay$9h:OODJJt$%r$   c                     ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       y	)
z;Check fix for Planimeter pole crossing bug found 2011-06-24r   r   gfffffV@g|fi: r_   r	   g  4=BNr   r   r   r   s        r"   test_Planimeter5zPlanimeterTest.test_Planimeter5m  s[    3i"db&\2F'226:Ay$9fa84:r$   c                 d   ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       y	)
z<Check fix for Planimeter lon12 rounding bug found 2012-12-03r   g+rB   r   i%r_   r	   r   Nr   r   s        r"   test_Planimeter6zPlanimeterTest.test_Planimeter6t  sn   #$q#hA7F'226:Ay$9h:4A."#aVaX6F'226:Ay$9h:4A."#aX1v6F'226:Ay$9h:4A.#$q!fq#h7F'226:Ay$9h:4A.r$   c                     ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       y)	z@Area of arctic circle (not really -- adjunct to rhumb-area test)$rP@r   rB   ih   r_   r	   Nr   r   s        r"   test_Planimeter12z PlanimeterTest.test_Planimeter12  s^    Q,!4|S6IJF'226:Ay$9h:4A.r$   c                     ddgddgddgg}t         j                  |      \  }}}| j                  |dd       | j                  |dd       y)	zReverse area of arctic circler   r   r   r   r_   r	   Nr   r   s        r"   test_Planimeter12rz!PlanimeterTest.test_Planimeter12r  s^    R <"6t8LMF'226:Ay$9h:4A.r$   c                     ddgddgddgddgddgddgg}t         j                  |      \  }}}| j                  |dd	
       | j                  |dd	
       y)zCheck encircling pole twicer   r   iir   x      i% r_   r	   g  d0BNr   r   s        r"   test_Planimeter13z PlanimeterTest.test_Planimeter13  sm    $i"TRI1v3x"SJF'226:Ay$9gq94:r$   c                 T   g d}g d}d}d}t         j                  j                          t         j                  j                  |d   |d          t         j                  j                  |d   |d          t         j                  j	                  |d   |d   dd	      \  }}}| j                  ||d
       t         j                  j	                  |d   |d   dd      \  }}}| j                  ||d
       t         j                  j	                  |d   |d   d	d	      \  }}}| j                  || d
       t         j                  j	                  |d   |d   d	d      \  }}}| j                  |||z
  d
       t        j                  j                  |d   |d   |d   |d         }|d   }|d   }	t         j                  j                  ||	dd	      \  }}}| j                  ||d
       t         j                  j                  ||	dd      \  }}}| j                  ||d
       t         j                  j                  ||	d	d	      \  }}}| j                  || d
       t         j                  j                  ||	d	d      \  }}}| j                  |||z
  d
       t         j                  j                  |d   |d          t         j                  j                  dd	      \  }}}| j                  ||d
       t         j                  j                  dd      \  }}}| j                  ||d
       t         j                  j                  d	d	      \  }}}| j                  || d
       t         j                  j                  d	d      \  }}}| j                  |||z
  d
       y)z{Coverage tests, includes Planimeter15 - Planimeter18 (combinations of
    reverse and sign) + calls to testpoint, testedge.)rg   r_   rh   )r_   rg   rh   gU/B爻nBr   r_   rg   FTr7   r	   r   r   N)r   r   r   r   	TestPointr   r   r   r   TestEdger   )
r   latlonra0r   r   r!   r   r   s
             r"   test_Planimeter15z PlanimeterTest.test_Planimeter15  sv    C
CA	B  "##CFCF3##CFCF3''11#a&#a&%NJAq$4C0''11#a&#a&%OJAq$4C0''11#a&#a&$MJAq$4!S1''11#a&#a&$NJAq$4As3
..
 
 QQQQ
@Cv;D
e*C''00sE4HJAq$4C0''00sE5IJAq$4C0''00sD$GJAq$4!S1''00sD%HJAq$4As3##CFCF3''//t<JAq$4C0''//u=JAq$4C0''//d;JAq$4!S1''//e<JAq$4As3r$   c                    t         j                  j                          t         j                  j                  dd      \  }}}| j	                  |dk(         | j	                  |dk(         t         j                  j                  dddd      \  }}}| j	                  |dk(         | j	                  |dk(         t         j                  j                  dddd      \  }}}| j	                  t        j                  |             | j	                  t        j                  |             t         j                  j                  dd       t         j                  j                  dd      \  }}}| j	                  |dk(         | j	                  |dk(         t         j                  j                          t         j                  j                  dd      \  }}}| j	                  |dk(         t         j                  j                  dddd      \  }}}| j	                  |dk(         t         j                  j                  dddd      \  }}}| j	                  t        j                  |             t         j                  j                  dd       t         j                  j                  dd      \  }}}| j	                  |dk(         t         j                  j                  dd       t         j                  j                  dddd      \  }}}| j                  |dd       t         j                  j                  d	d	dd      \  }}}| j                  |d
d       y)z]Coverage tests, includes Planimeter19 - Planimeter20 (degenerate
    polygons) + extra cases.FTr   r_   rN   r   r   r	   rg   gy&1a&ArI   N)r   r   r   r   rc   r   r   ra   rd   r   r   r   )r   r   r   r   s       r"   test_Planimeter19z PlanimeterTest.test_Planimeter19  s      "'//77tDAy$OODAIOOIN#'//99!QtLAy$OODAIOOIN#'//88T5$OAy$OODJJt$%OODJJy)*##Aq)'//77tDAy$OODAIOOIN#!!#'0088EAy$OOIN#'00::1aMAy$OOIN#'0099"dE4PAy$OODJJy)*$$Q*'0088EAy$OOIN###Aq)'0099"dE4PAy$9dE:'00::1aMAy$9j&Ar$   c                 l   d}d}d}d}d}t         j                  j                          t         j                  j                  |d       t         j                  j                  |d       t         j                  j                  |d       t         j                  j                  |d       t         j                  j                  |d       t         j                  j                  |d       d	D ]F  }t         j                  j                  |d       t         j                  j                  |d       t         j                  j	                  |dd
d      \  }}}| j                  |||z  d       t         j                  j	                  |dd
d
      \  }}}| j                  |||z  d       t         j                  j	                  |ddd      \  }}}| j                  || |z  d       t         j                  j	                  |ddd
      \  }}}| j                  || |z  |z   d       t         j                  j                  ||d
d      \  }}}| j                  |||z  d       t         j                  j                  ||d
d
      \  }}}| j                  |||z  d       t         j                  j                  ||dd      \  }}}| j                  || |z  d       t         j                  j                  ||dd
      \  }}}| j                  || |z  |z   d       t         j                  j                  |d       t         j                  j                  d
d      \  }}}| j                  |||z  d       t         j                  j                  d
d
      \  }}}| j                  |||z  d       t         j                  j                  dd      \  }}}| j                  || |z  d       t         j                  j                  dd
      \  }}}| j                  || |z  |z   d       I y)zSome tests to add code coverage: multiple circlings of pole (includes
    Planimeter21 - Planimeter28) + invocations via testpoint and testedge.r   g\rsC@gH6-`AgYBr   <   rB   i)rh   ri   FTr7   r	   N)r   r   r   r   r   r   r   r   )	r   r   azisr   r   ir   r   s	            r"   test_Planimeter21z PlanimeterTest.test_Planimeter21  s    C
 CAA	B  "##C"-##C-##C-##C"-##C-##C-%%cB/%%c3/!))33CeTJjaD
TAaC5!))33CeUKjaD
TAaC5!))33CdDIjaD
TA2a45!))33CdEJjaD
TA2a4"9c:!))2235$GjaD
TAaC5!))2235%HjaD
TAaC5!))2234FjaD
TA2a45!))2234GjaD
TA2a4"9c:%%c3/!))11%>jaD
TAaC5!))11%?jaD
TAaC5!))11$=jaD
TA2a45!))11$>jaD
TA2a4"9c:7 r$   c                    t         j                  j                          t         j                  j                  dd       t         j                  j	                  dd       t         j                  j	                  dd       t         j                  j	                  dd       t         j                  j                  dd      \  }}}| j                  |dd	       y
)zACheck fix to transitdirect vs transit zero handling inconsistencyr   rN   r   iFTg    .Ar\   r	   N)r   r   r   r   AddEdger   r   )r   r   r   s      r"   test_Planimeter29z PlanimeterTest.test_Planimeter29  s      "##Aq)""B-""Q-""3-''//t<JAq$ 	4D9r$   N)r-   r.   r/   r0   r   r   Polygonr   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r1   r$   r"   r   r   ?  s    NN""5)'^^##D)(7 7 8 8&0;/&//;%4NBB*;X
:r$   r   )	r0   unittestra   geographiclib.geodesicr   TestCaser   r3   r   r1   r$   r"   <module>r      sQ       +D>8$$ D>LoDH%% oDb[:X&& [:r$   