
    Oiϣ                         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dS )
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dS )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                    t           j        D ]Z}|\  }}}}}}}}	}
}}}t          j                            ||||t          j        t          j        z            }|                     ||d         d           |                     ||d         d           |                     ||d         d           |                     ||d         d           |                     |	|d         d           |                     |
|d	         d           |                     ||d
         d           |                     ||d         d           |                     ||d         d           \dS )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                  X/srv/django_bis/venv311/lib/python3.11/site-packages/geographiclib/test/test_geodesic.pytest_inversezGeodesicTest.test_inverse]   s   # ; ;'(%tT4tT
Cc3N""4tT\H$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                    t           j        D ]<}|\  }}}}}}}}	}
}}}t          j                            ||||t          j        t          j        z            }|                     ||d         d           |                     ||d         d           |                     ||d         d           |                     |	|d         d           |                     |
|d         d           |                     ||d	         d
           |                     ||d         d
           |                     ||d         d           >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   directs                  r"   test_directzGeodesicTest.test_directn   sh   # > >'(%tT4tT
Cc3~$$T4s%-\H4H%HJ Jf
T6&>5AAA
T6&>5AAA
T6&>5AAA
S&-???
S&->>>
S&-???
S&-???
S&-====> >r$   c                    t           j        D ]<}|\  }}}}}}}}	}
}}}t          j                            ||||	t          j        t          j        z            }|                     ||d         d           |                     ||d         d           |                     ||d         d           |                     ||d         d           |                     |
|d         d           |                     ||d	         d
           |                     ||d         d
           |                     ||d         d           >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'   s                  r"   test_arcdirectzGeodesicTest.test_arcdirect~   sh   # > >'(%tT4tT
Cc3~''dD#(0x7K(KM Mf
T6&>5AAA
T6&>5AAA
T6&>5AAA
S&->>>
S&->>>
S&-???
S&-???
S&-====> >r$   N)__name__
__module____qualname____doc__r   r#   r)   r,    r$   r"   r   r      s       C C CC C CC C CG G GE E EF F FE E EC C CF F FD D DD D DC C CC C CE E EE E EE E EC C CC C CE E EF F 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#d" Z$d# Z%d$S )%GeodSolveTestzGeodSolve testsc                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )
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   s    
.
 
 uk4
@
@C3v;&AAA3v;	6BBB3u:w<<<<<r$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )
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   s    ^"";dFKKF6&>8VDDD6&>7FCCC6&>9fEEEEEr$   c                    t          dd          }|                    dddd          }|                     |d         dd	
           |                     |d         dd	
           |                     |d         dd
           |                    dddd          }|                     |d         dd	
           |                     |d         dd	
           |                     |d         dd
           dS )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
1
1C3v;&AAA3v;&AAA3u:x===
,,sAtS
)
)C3v;&AAA3v;&AAA3u:x=====r$   c                     t           j                            dddd          }|                     |d         dd           d	S )
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   sG    
.
 
 !!2I? ?C3u:uf=====r$   c                    t           j                            dddd          }|                     |d         dd           |d	         dk     rK|                     |d	         d
d           |                     t	          |d                   dd           dS |                     |d	         dd           |                     |d         dd           dS )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AAF6&>2v>>>f~
VF^T6BBB
S00#vFFFFF
VF^R@@@
VF^Q?????r$   c                    t           j                            dddd          }|                     |d         dd           t           j                            d	dd
d          }|                     |d         dd           t           j                            dddd          }|                     |d         dd           dS )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 KC3u:|VDDD
.
 
 !!13IK KC3u:|VDDD
.
 
 !!79NP PC3u:|VDDDDDr$   c                     t           j                            dddd          }|                     |d         dd           d	S )
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   sJ    
.
 
 !!13IK KC3u:|VDDDDDr$   c                     t           j                            dddd          }|                     |d         dd           d	S )
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   sL     .
 
 !!79OQ QC3u:|VDDDDDr$   c                     t           j                            dddd          }|                     |d         dd           d	S )
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   sL     .
 
 !!68NP PC3u:|VDDDDDr$   c                 
   t          dd          }|                    dddd          }|                     |d         dd	           |                     |d
         dd	           |                     |d         dd	           dS )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   s     D%  D
,,q!S#
&
&C3v;===3v;===3u:ud;;;;;r$   c                 l   t           j                            dddt          j                  }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              dS )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   s    
.
 
 Aq$(
3
3COODJs6{++,,,OODJs6{++,,,OODJs5z**+++++r$   c                     t          dd          }|                    ddddt           j                  }|                     |d         dd	
           dS )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   sS     E8$$D[[Aq!X]33F6%=%=====r$   c                 T   t           j                            ddddt           j        t           j        z            }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           t           j                            ddd          }|                    dt           j        t           j        z            }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           t           j                            dddd          }|                     |d         dd           |                     |d	         dd           |                     |d         dd           |                    d          }|                     |d         dd           |                     |d	         dd           |                     |d         dd           dS )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#+#4x7K#KM MF6&>3:::6&>4;;;6&>4;;;>r3,,D]]3 1H4H HIIF6&>3:::6&>4;;;6&>4;;;^""2sC55F6&>3:::6&>3:::6&>4;;;]]3F6&>3:::6&>3:::6&>4;;;;;r$   c                     t          dd          }|                    ddddt           j                  }|                     |d         dd	
           dS )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
  sQ    E1D
,,q!Q8=
1
1C3u:}cBBBBBr$   c                     t          dd          }|                    ddd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).r@   r   r_   rg   
       SAr   gXg!GH@:0y5>r	   N)r   r&   r   rk   s      r"   test_GeodSolve28zGeodSolveTest.test_GeodSolve28  sO     E3D[[Ar3''F6%=+vFFFFFr$   c                 &   t           j                            dddd          }|                     |d         dd           |                     |d         d	d           |                     |d
         dd           t           j                            ddddt           j        t           j        z            }|                     |d         dd           |                     |d         dd           |                     |d
         dd           dS )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33F6&>3>>>6&>4???6%=&#>>>^##AsAs$,$58L$LN NF6&>3>>>6&>3>>>6%=&#>>>>>r$   c                 
   t           j                            dddd          }|                     |d         dd           |                     |d         dd           |                     |d         d	d
           t           j                            dddd          }|                     |d         dd           |                     |d         dd           |                     |d         dd
           t           j                            dddd          }|                     |d         dd           |                     t	          |d                   dd           |                     |d         dd
           t           j                            dddd          }|                     |d         dd           |                     t	          |d                   dd           |                     |d         dd
           t          dd          }|                    dddd          }|                     |d         dd           |                     |d         dd           |                     |d         dd
           |                    dddd          }|                     |d         dd           |                     t	          |d                   dd           |                     |d         dd
           |                    dddd          }|                     |d         dd           |                     t	          |d                   dd           |                     |d         dd
           t          dd          }|                    dddd          }|                     |d         dd           |                     |d         dd           |                     |d         dd
           |                    dddd          }|                     |d         dd           |                     |d         dd           |                     |d         dd
           |                    ddd
d          }|                     |d         dd           |                     |d         dd           |                     |d         dd
           |                    dddd          }|                     |d         dd           |                     t	          |d                   dd           |                     |d         dd
           dS )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#  s\    .
 
 Aq#
.
.C3v;&AAA3v;&AAA3u:x===
.
 
 Aq%
0
0C3v;&AAA3v;	6BBB3u:x===
.
 
 Aq#
.
.C3v;@@@3s6{++YGGG3u:x===
.
 
 Aq#
.
.C3v;@@@3s6{++YGGG3u:x===E1D
,,q!Q
$
$C3v;&AAA3v;&AAA3u:x===
,,q!Q
$
$C3v;@@@3s6{++YGGG3u:x===
,,q!Q
$
$C3v;@@@3s6{++YGGG3u:x===E8$$D
,,q!Q
$
$C3v;&AAA3v;&AAA3u:x===
,,q!Q
$
$C3v;&AAA3v;&AAA3u:x===
,,q!S#
&
&C3v;&AAA3v;	6BBB3u:x===
,,q!Q
$
$C3v;@@@3s6{++YGGG3u:x=====r$   c                    t           j                            t          j        ddd          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            t          j        ddd          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              dS )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
4
4COODJs6{++,,,OODJs6{++,,,OODJs5z**+++
.
 
 1b!
4
4COODJs6{++,,,OODJs6{++,,,OODJs5z**+++++r$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )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  s    
.
 
 $4b#
>
>C3v;(97KKK3v;(:GLLL3u:'94HHHHHr$   c                    t           j                            ddddt           j        t           j        z            }|                     |d         dd           |                     |d	         d
d           |                     t          |d                   dd           t           j                            dddd          }|                    dt           j        t           j        z            }|                     |d         dd           |                     |d	         d
d           |                     t          |d                   dd           dS )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*?#+#4x7K#KM MF6&>8VDDD6&>4@@@3vf~..VDDD>%%b!R1FGGD]]3 1H4H HIIF6&>8VDDD6&>4@@@3vf~..VDDDDDr$   c                    t           j                            ddddt           j                  }|                    dt           j        t           j        z            }|                     |d         dd	           |                     |d
         dd	           |                     t          |d                   dd	           |                     |d         dd	           |                     |d         dd	           |                     t          |d                   dd	           |                     |d         dd	           |                     |d         dd	           |                     |d         dd	           |                     |d         dd	           |                     |d         dd	           |                     |d         d d	           |                    d!t           j        t           j        z            }|                     |d         dd	           |                     |d
         dd	           |                     t          |d                   dd	           |                     |d         d"d	           |                     |d         d#d	           |                     |d         dd	           |                     |d         d$d	           |                     |d         d%d	           |                     |d         d&d	           |                     |d         d'd	           |                     |d         d(d	           |                     |d         d)d	           d*S )+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  sj    >%%b*?c&.l4 4D]]3x/C CDDF6&>8vFFF6&>8vFFF3vf~..	6JJJ6&>9vFFF6&>8vFFF3vf~..	6JJJ6%=8sCCC6%=8vFFF6%=7sCCC6%=:uEEE6%=9vFFF6%=1sCCC]]3x/C CDDF6&>8vFFF6&>8vFFF3vf~..	6JJJ6&>9vFFF6&>:vFFF6&>8vFFF6%=8sCCC6%=9vFFF6%=5sCCC6%=:uEEE6%=:vFFF6%=+<cJJJJJr$   c                 v   t           j                            dddd          }|                    dt           j        t           j        z            }|                     |d         dd	           |                     |d
         dd	           |                     |d         dd	           |                    d|j        z  t           j        t           j        z            }|                     |d         dd	           |                     |d
         dd	           |                     |d         dd	           dS )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GGD]]3 1H4H HIIF6&>7vFFF6&>:vFFF6&>8vFFF]]3>#,x/CCE EF6&>9vFFF6&>8vFFF6&>:vFFFFFr$   c                 h   t           j                            dddd          }|                    d|j        z  t           j        t           j        z            }|                     |d         dd	           |                     |d
         dd	           |                     |d         dd	           dS )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33D]]3>#,x/CCE EF6&>8VDDD6&>8VDDD6&>8VDDDDDr$   c                 b   t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           |                     t          j        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).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55F6&>8VDDD6&>4@@@6&>1f===OODM!VF^44q899999r$   c                 @   t           j                            ddddt           j                  }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           dS )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CC3v;dCCC3u:dCCC3u:dCCC3u:dCCC3u:dCCC3u:dCCC3u:EEEEEr$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )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  s     .
 
 !+\; ;C3v;III3v;III3u:HHHHHr$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )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  s    
.
 
 sE5
9
9C3v;III3v;III3u:HHHHHr$   c                 <   t           j                            ddddt           j                  }|                     |d         dd           |                     |d         dd           t           j                            ddddt           j                  }|                     |d         d	d           |                     |d         d	d           t           j                            d
dd
dt           j                  }|                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         d	d           |                     |d         d	d           |                     |d         dd           |                     t          j        d	|d                   dk               |                     t          j        d	|d                   dk               |                     t          j        d	|d                   dk               t           j                            ddddt           j                  }|                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         dd           |                     |d         d	d           |                     |d         d	d           |                     |d         dd           t           j        	                    d	ddt           j
                  }|                    dt           j                  }|                     t          j        |d                              dS )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
E
EC3u:~wGGG3u:~wGGG
.
 
 AtT83I
J
JC3u:q':::3u:q':::
.
 
 FAx|
D
DC3u:q%8883u:q$7773v;U;;;3v;U;;;3u:q48883u:q%8883u:q%8883u:q%888OODM!SZ0014555OODM!SZ0014555OODM!SZ0014555
.
 
 QC
>
>C3u:q%8883u:q$7773v;59993v;U;;;3u:q$7773u:q%8883u:q%8883u:'8#FFF >q!R):;;D]]400FOODJve}--.....r$   c                 
   t           j                            dddt          j                  }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            dddt          j                  }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            ddt          j        d          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            ddt          j        d          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            dt          j        dd          }|                     |d         dk               |                     t          j        |d                              |                     |d         dk               t           j                            dt          j        dd          }|                     |d         dk               |                     t          j        |d                              |                     |d         dk               t           j                            t          j        ddd          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              t           j                            t          j        ddd          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              dS )	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TX66FOODJvf~..///OODJvf~..///OODJvf~..///^""1aTX66FOODJvf~..///OODJvf~..///OODJvf~..///^""1a488FOODJvf~..///OODJvf~..///OODJvf~..///^""1a488FOODJvf~..///OODJvf~..///OODJvf~..///^""1dhD99FOOF6Na'(((OODJvf~..///OOF6Nb()))^""1dhD99FOOF6Na'(((OODJvf~..///OOF6Nb()))^""48QD99FOODJvf~..///OODJvf~..///OODJvf~..///^""48QD99FOODJvf~..///OODJvf~..///OODJvf~../////r$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         d
d           |                     |d         dd           dS )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$  s     .
 
 !3Z!)[B BC3v;TDDD3v;TDDD3u:VDDDDDr$   c                 l   t           j                            ddt          j        d          }|                     t          j        |d                              |                     t          j        |d                              |                     t          j        |d                              dS )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.  s     .
 
 Atx
4
4COODJs6{++,,,OODJs6{++,,,OODJs5z**+++++r$   c                     t          dd          }|                    ddddt           j                  }|                     |d         dd	           d
S )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  sU    
 G_--D
,,q!-/?
O
OC3u:~sCCCCCr$   c                     t           j                            dddd          }|                     |d         dd           |                     |d	         dd           |                     |d
         dd           dS )zTest case
    https://github.com/geographiclib/geographiclib-js/issues/3
    Problem was that output of sincosd(+/-45) was inconsistent because
    of directed rounding by Javascript's Math.round.  Python
    implementation was OK.g     F@r   g     Fg˶Srf@r   gХ, V@r   r	   r   r   gsArI   Nr8   r9   s     r"   test_GeodSolve99zGeodSolveTest.test_GeodSolve99?  s     .
 
 sE:
>
>C3v;dEEE3v;dEEE3u:fEEEEEr$   c                 
   t          dd          }|                    dddd          }|                     |d         dd	           |                     |d
         dd	           |                     |d         dd	           dS )ah  Check fix for meridional failure for a strongly prolate ellipsoid.
       This was caused by assuming that sig12 < 1 guarantees the meridional
       geodesic is shortest (even though m12 < 0).  Counter example is tested
       here.  Bug is not present for f >= -2, b < 3*a.  For f = -2.1 the
       inverse calculation for 30.61 0 30.61 180 exhibits the bug.    .ArL   r   rB   r   gj^6@g      ?r	   r   gm½2c@r   gc0Ag     @@NrD   rE   s      r"   test_GeodSolve100zGeodSolveTest.test_GeodSolve100J  s     CD
,,r1b#
&
&C3v;C@@@3v;
C@@@3u:C@@@@@r$   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   r   r   r1   r$   r"   r3   r3      sZ       = = =F F F
> 
> 
>> > >	@ 	@ 	@E E EE E EE E EE E E< < <, , ,> > >< < <*C C CG G G
? 
? 
?1> 1> 1>f
, 
, 
,I I IE E EK K KBG G GE E E
: 
: 
:F F FI I II I I&/ &/ &/P"0 "0 "0HE E E, , ,D D D	F 	F 	F
A 
A 
A 
A 
Ar$   r3   c                       e Zd ZdZej                            d          Ze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dS )PlanimeterTestzPlanimeter testsFTc                     t           j                                         | D ].}t           j                            |d         |d                    /t           j                            dd          S )zHelper function for polygonsr   r_   FT)r   polygonClearAddPointComputepointsps     r"   
PlanimeterzPlanimeterTest.Planimeter\  se       """ 2 2%%adAaD1111!))%666r$   c                     t           j                                         | D ].}t           j                            |d         |d                    /t           j                            dd          S )zHelper function for polylinesr   r_   FT)r   polyliner   r   r   r   s     r"   
PolyLengthzPlanimeterTest.PolyLengthd  se     !!### 3 3&&qtQqT2222"**5$777r$   c                    ddgddgddgddgg}t                               |          \  }}}|                     |dd           |                     |d	d
           ddgddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd
           ddgddgdd
gd
dgg}t                               |          \  }}}|                     |dd           |                     |dd
           ddgddgddgg}t                               |          \  }}}|                     |dd
           |                     |dd
           t                               |          \  }}}|                     |dd
           |                     t          j        |                     dS )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_Planimeter0l  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:::OODJt$$%%%%%r$   c                     ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           d	S )
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_Planimeter5  sp    3i"db&\2F'226::Ay$9fa8884:::::r$   c                    ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           d	S )
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_Planimeter6  s   #$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                               |          \  }}}|                     |dd           |                     |dd           dS )	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  ss    Q,!4|S6IJF'226::Ay$9h:::4A.....r$   c                     ddgddgddgg}t                               |          \  }}}|                     |dd           |                     |dd           dS )	zReverse area of arctic circler   r   r   r   r_   r	   Nr   r   s        r"   test_Planimeter12rz!PlanimeterTest.test_Planimeter12r  ss    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                               |          \  }}}|                     |dd	
           |                     |dd	
           dS )zCheck encircling pole twicer   r   iir   x      i% r_   r	   g  d0BNr   r   s        r"   test_Planimeter13z PlanimeterTest.test_Planimeter13  s    $i"TRI1v3x"SJF'226::Ay$9gq9994:::::r$   c                 .   g d}g d}d}d}t           j                                         t           j                            |d         |d                    t           j                            |d         |d                    t           j                            |d         |d         dd	          \  }}}|                     ||d
           t           j                            |d         |d         dd          \  }}}|                     ||d
           t           j                            |d         |d         d	d	          \  }}}|                     || d
           t           j                            |d         |d         d	d          \  }}}|                     |||z
  d
           t          j                            |d         |d         |d         |d                   }|d         }|d         }	t           j        	                    ||	dd	          \  }}}|                     ||d
           t           j        	                    ||	dd          \  }}}|                     ||d
           t           j        	                    ||	d	d	          \  }}}|                     || d
           t           j        	                    ||	d	d          \  }}}|                     |||z
  d
           t           j                            |d         |d                    t           j        
                    dd	          \  }}}|                     ||d
           t           j        
                    dd          \  }}}|                     ||d
           t           j        
                    d	d	          \  }}}|                     || d
           t           j        
                    d	d          \  }}}|                     |||z
  d
           dS )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  s    ))C
))CA	B  """##CFCF333##CFCF333'11#a&#a&%NNJAq$4C000'11#a&#a&%OOJAq$4C000'11#a&#a&$MMJAq$4!S111'11#a&#a&$NNJAq$4As333
.
 
 QQQQ
@
@Cv;D
e*C'00sE4HHJAq$4C000'00sE5IIJAq$4C000'00sD$GGJAq$4!S111'00sD%HHJAq$4As333##CFCF333'//t<<JAq$4C000'//u==JAq$4C000'//d;;JAq$4!S111'//e<<JAq$4As33333r$   c                 2   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          j        |                     |                     t          j        |                     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          j        |                     t           j
        	                    dd           t           j
                            dd          \  }}}|                     |dk               t           j        	                    dd           t           j
                            dddd          \  }}}|                     |dd           t           j
                            d	d	dd          \  }}}|                     |d
d           dS )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DAy$OODAIOOIN###'/99!QtLLAy$OODAIOOIN###'/88T5$OOAy$OODJt$$%%%OODJy))***##Aq)))'/77tDDAy$OODAIOOIN###!!###'088EEAy$OOIN###'0::1aMMAy$OOIN###'099"dE4PPAy$OODJy))***$$Q***'088EEAy$OOIN#####Aq)))'099"dE4PPAy$9dE:::'0::1aMMAy$9j&AAAAAr$   c                    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 ]v}t           j                            |d           t           j                            |d           t           j                            |dd
d          \  }}}|                     |||z  d           t           j                            |dd
d
          \  }}}|                     |||z  d           t           j                            |ddd          \  }}}|                     || |z  d           t           j                            |ddd
          \  }}}|                     || |z  |z   d           t           j                            ||d
d          \  }}}|                     |||z  d           t           j                            ||d
d
          \  }}}|                     |||z  d           t           j                            ||dd          \  }}}|                     || |z  d           t           j                            ||dd
          \  }}}|                     || |z  |z   d           t           j                            |d           t           j                            d
d          \  }}}|                     |||z  d           t           j                            d
d
          \  }}}|                     |||z  d           t           j                            dd          \  }}}|                     || |z  d           t           j                            dd
          \  }}}|                     || |z  |z   d           xdS )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  sC    C
 CAA	B  """##C"---##C---##C---##C"---##C---##C--- ; ;%%cB///%%c3///!)33CeTJJjaD
TAaC555!)33CeUKKjaD
TAaC555!)33CdDIIjaD
TA2a4555!)33CdEJJjaD
TA2a4"9c:::!)2235$GGjaD
TAaC555!)2235%HHjaD
TAaC555!)2234FFjaD
TA2a4555!)2234GGjaD
TA2a4"9c:::%%c3///!)11%>>jaD
TAaC555!)11%??jaD
TAaC555!)11$==jaD
TA2a4555!)11$>>jaD
TA2a4"9c::::7; ;r$   c                    t           j                                         t           j                            dd           t           j                            dd           t           j                            dd           t           j                            dd           t           j                            dd          \  }}}|                     |dd	           d
S )zACheck fix to transitdirect vs transit zero handling inconsistencyr   rN   r   iFTr   r\   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9999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   V  s       N""5))'^##D))(7 7 <7 8 8 <8& & &0; ; ;/ / /&/ / // / /; ; ;%4 %4 %4NB B BB*; *; *;X
: 
: 
: 
: 
:r$   r   )	r0   unittestra   geographiclib.geodesicr   TestCaser   r3   r   r1   r$   r"   <module>r     s        + + + + + +D> D> D> D> D>8$ D> D> D>LFA FA FA FA FAH% FA FA FAP[: [: [: [: [:X& [: [: [: [: [:r$   