a
    }c                     @   sZ   d Z ddlZddlZddlmZ G dd dejZG dd dejZG dd	 d	ejZdS )
zGeodesic tests    N)Geodesicc                   @   s   e Zd ZdZg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dgZdd Zdd Zdd ZdS )GeodesicTestzGeodesic test suite)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                 C   s   t jD ]}|\}}}}}}}}	}
}}}tj||||tjtjB }| j||d dd | j||d dd | j||d dd | j||d dd | j|	|d dd | j|
|d	 dd | j||d
 dd | j||d dd | j||d dd qdS )z/Helper function for testing inverse calculation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   inv r   \/var/www/html/django/DPS/env/lib/python3.9/site-packages/geographiclib/test/test_geodesic.pytest_inverse]   s     

zGeodesicTest.test_inversec                 C   s   t jD ]}|\}}}}}}}}	}
}}}tj||||tjtjB }| j||d dd | j||d dd | j||d dd | j|	|d dd | j|
|d dd | j||d	 d
d | j||d d
d | j||d dd qdS )z.Helper function for testing direct calculationr   r   r   r   r	   r   r   r   r   r   r   r   r   N)r   r   r   r   Directr   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   directr   r   r    test_directn   s    

zGeodesicTest.test_directc                 C   s   t jD ]}|\}}}}}}}}	}
}}}tj||||	tjtjB }| j||d dd | j||d dd | j||d dd | j||d dd | j|
|d dd | j||d	 d
d | j||d d
d | j||d dd qdS )z>Helper function for testing direct calculation with arc lengthr   r   r   r   r	   r
   r   r   r   r   r   r   r   N)r   r   r   r   Z	ArcDirectr   r   r   r#   r   r   r    test_arcdirect~   s    

zGeodesicTest.test_arcdirectN)__name__
__module____qualname____doc__r   r!   r%   r&   r   r   r   r    r      s2   Rr   c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBS )CGeodSolveTestzGeodSolve testsc                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )Z
GeodSolve0gLD@g33333sRgJ)""H@gffffff@r   gj@+0J@h㈵>r   r	   grt[@r
   i*PY       ?Nr   r   r   r   r   r   r   r   r    test_GeodSolve0   s    zGeodSolveTest.test_GeodSolve0c                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )Z
GeodSolve1gWjQD@g#qPqRg     J@g    PVAr   gH@r,   r   r   gx}@r	   g
<I[@N)r   r   r"   r   r   r$   r   r   r    test_GeodSolve1   s    zGeodSolveTest.test_GeodSolve1c                 C   s   t dd}|dddd}| j|d dd	d
 | j|d dd	d
 | j|d ddd
 |dddd}| j|d dd	d
 | j|d dd	d
 | j|d ddd
 dS )z4Check fix for antipodal prolate bug found 2010-09-04     jXAO贁N{gx#?r   gx#   r   gkV@r,   r   r	   r
   2r-   r   ggK4V@Nr   r   r   r   geodr   r   r   r    test_GeodSolve2   s    
zGeodSolveTest.test_GeodSolve2c                 C   s*   t jdddd}| j|d ddd d	S )
z-Check fix for short line bug found 2010-05-21g&?B@r   g&?B@gHת>r
   g;On?Mb@?r   Nr.   r/   r   r   r    test_GeodSolve4   s    
zGeodSolveTest.test_GeodSolve4c                 C   s   t jdddd}| j|d ddd |d	 dk r`| j|d	 d
dd | jt|d ddd n(| j|d	 ddd | j|d ddd dS )z.Check fix for point2=pole bug found 2010-05-03g+@4?   r       cAr   Z   r,   r   r   ijr	   r5   N)r   r   r"   r   absr1   r   r   r    test_GeodSolve5   s    zGeodSolveTest.test_GeodSolve5c                 C   sv   t jdddd}| j|d ddd t jd	dd
d}| j|d ddd t jdddd}| j|d ddd dS )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sAr;   r   gP'PV@gP'PVg6*f@g]sAg*qQUV@g*qQUVgOePf@gunsANr.   r/   r   r   r    test_GeodSolve6   s    


zGeodSolveTest.test_GeodSolve6c                 C   s*   t jdddd}| j|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=sAr;   r   Nr.   r/   r   r   r    test_GeodSolve9   s    
zGeodSolveTest.test_GeodSolve9c                 C   s*   t jdddd}| j|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sAr;   r   Nr.   r/   r   r   r    test_GeodSolve10   s    
zGeodSolveTest.test_GeodSolve10c                 C   s*   t jdddd}| j|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)sAr;   r   Nr.   r/   r   r   r    test_GeodSolve11   s    
zGeodSolveTest.test_GeodSolve11c                 C   sZ   t dd}|dddd}| j|d ddd	 | j|d
 ddd	 | j|d ddd	 dS )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   Nr7   r8   r   r   r    test_GeodSolve12   s
    
zGeodSolveTest.test_GeodSolve12c                 C   sT   t jdddtj}| t|d  | t|d  | t|d  dS )z*Check fix for inverse ignoring lon12 = nanr      r   r	   r
   Nr   r   r   mathnan
assertTrueisnanr/   r   r   r    test_GeodSolve14   s    zGeodSolveTest.test_GeodSolve14c                 C   s6   t dd}|ddddt j}| j|d dd	d
 dS )zcInitial implementation of Math::eatanhe was wrong for e^2 < 0.  This
    checks that this is fixed.r3   r4   rJ            r   i\  r-   r   N)r   r"   AREAr   r   r9   r$   r   r   r    test_GeodSolve15   s    
zGeodSolveTest.test_GeodSolve15c                 C   sP  t jddddt jt jB }| j|d ddd | j|d	 d
dd | j|d ddd t jddd}|dt jt jB }| j|d ddd | j|d	 d
dd | j|d ddd t jdddd}| j|d ddd | j|d	 ddd | j|d ddd |d}| j|d ddd | j|d	 ddd | j|d ddd dS )z1Check fix for LONG_UNROLL bug found on 2015-05-07(   irF       sAr   irJ   r   r   ir	   Vi   N)r   r   r"   STANDARDr   r   LinePositionr   r$   liner   r   r    test_GeodSolve17   s&    

zGeodSolveTest.test_GeodSolve17c                 C   s6   t dd}|ddddt j}| j|d dd	d
 dS )z<Check 0/0 problem with area calculation on sphere 2015-09-08r3   r   rJ   rQ   rR   rS   r   g  ?='Br-   r   Nr   r   rT   r   r8   r   r   r    test_GeodSolve26
  s    
zGeodSolveTest.test_GeodSolve26c                 C   s2   t dd}|dddd}| j|d dd	d
 dS )ztCheck for bad placement of assignment of r.a12 with |f| > 0.01 (bug in
    Java implementation fixed on 2015-05-19).r3   r   rJ   rQ   
       SAr   gXg!GH@:0y5>r   N)r   r"   r   rU   r   r   r    test_GeodSolve28  s    
zGeodSolveTest.test_GeodSolve28c                 C   s   t jdddd}| j|d ddd | j|d d	dd | j|d
 ddd t jddddt jt jB }| j|d ddd | j|d ddd | j|d
 ddd dS )z=Check longitude unrolling with inverse calculation 2015-09-16r   i     r      绽|=r   r   iMr
   ie r-   i  N)r   r   r   r   r[   r   r1   r   r   r    test_GeodSolve29  s    
zGeodSolveTest.test_GeodSolve29c                 C   sx  t jdddd}| j|d ddd | j|d ddd | j|d d	d
d t jdddd}| j|d ddd | j|d ddd | j|d dd
d t jdddd}| j|d ddd | jt|d ddd | j|d dd
d t jdddd}| j|d ddd | jt|d ddd | j|d dd
d t dd}|dddd}| j|d ddd | j|d ddd | j|d dd
d |dddd}| j|d ddd | jt|d ddd | j|d dd
d |dddd}| j|d ddd | jt|d ddd | j|d dd
d t dd}|dddd}| j|d ddd | j|d ddd | j|d dd
d |dddd}| j|d ddd | j|d ddd | j|d dd
d |ddd
d}| j|d ddd | j|d ddd | j|d dd
d |dddd}| j|d ddd | jt|d ddd | j|d dd
d dS )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   rh   r   g     V@r,   r   r	   r
   i0r-        pf@gʡEK@g/$_@i>0r5                f@i[<1rJ   im/r3   i|1r6   gO贁Nkg:X0@@gz(_b@io2i1N)r   r   r   r   r@   )r   r   r9   r   r   r    test_GeodSolve33#  s\    

zGeodSolveTest.test_GeodSolve33c                 C   s   t jtjddd}| t|d  | t|d  | t|d  t jtjddd}| t|d  | t|d  | t|d  dS )zoCheck fix for nan + point on equator or pole not returning all nans in
    Geodesic::Inverse, found 2015-09-23.r   r?   r   r	   r
   	   NrK   r/   r   r   r    test_GeodSolve55V  s    zGeodSolveTest.test_GeodSolve55c                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )z>Check for points close with longitudes close to 180 deg apart.   +=rc   r5   r   g(#=gt=r   r	   gf@r
   gr~qAre   Nr.   r/   r   r   r    test_GeodSolve59b  s    zGeodSolveTest.test_GeodSolve59c                 C   s   t jddddt jt jB }| j|d ddd | j|d	 d
dd | jt|d ddd t jdddd}|dt jt jB }| j|d ddd | j|d	 d
dd | jt|d ddd dS )z0Make sure small negative azimuths are west-going-   r   geKr>   r   g,g~5F@r,   r   r   Lr	   r5   P   N)	r   r   r"   r[   r   r   r@   InverseLiner]   r^   r   r   r    test_GeodSolve61i  s    
zGeodSolveTest.test_GeodSolve61c                 C   s.  t jddddt j}|dt jt jB }| j|d ddd	 | j|d
 ddd	 | jt|d ddd	 | j|d ddd	 | j|d ddd	 | jt|d ddd	 | j|d ddd	 | j|d ddd	 | j|d ddd	 | j|d ddd	 | j|d ddd	 | j|d d dd	 |d!t jt jB }| j|d ddd	 | j|d
 ddd	 | jt|d ddd	 | j|d d"dd	 | j|d d#dd	 | j|d ddd	 | j|d d$dd	 | j|d d%dd	 | j|d d&dd	 | j|d d'dd	 | j|d d(dd	 | j|d d)dd	 d*S )+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.r=   gC]r2ir5   r>   r   g      >@r,   r   r          r   rm   r   ggNr   r	   r
   i r-   r   gj@+0V@r   ia r   g.AUrd   r   gAV?gHj>r   r   rX   g7ُ	>     fi -1g~f@iF  gUg/1瀻nBN)r   r   rw   r   r]   r   r   r@   r   r_   r$   r   r   r    test_GeodSolve65v  s:    zGeodSolveTest.test_GeodSolve65c                 C   s   t jdddd}|dt jt jB }| j|d ddd	 | j|d
 ddd	 | j|d ddd	 |d|j t jt jB }| j|d ddd	 | j|d
 ddd	 | j|d ddd	 dS )zVCheck for InverseLine if line is slightly west of S and that s13 is
    correctly set.gV瞯rF   r5   rX   r   gAǘ@r,   r   r   rz   r	   ry   r-   gI5UN)r   r   rw   r]   r[   r   r   s13r|   r   r   r    test_GeodSolve66  s    
zGeodSolveTest.test_GeodSolve66c                 C   sl   t jdddd}|d|j t jt jB }| j|d ddd	 | j|d
 ddd	 | j|d ddd	 dS )zCheck that DirectLine sets s13.rJ   rQ   rt   r>   r-   r   gQ>@r,   r   r   ggDioB@r	   gIQ,K@N)r   r   Z
DirectLiner]   r   r[   r   r   r|   r   r   r    test_GeodSolve71  s    
zGeodSolveTest.test_GeodSolve71c                 C   sl   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd | td|d dk dS )a0  Check for backwards from the pole bug reported by Anon on 2016-02-13.
    This only affected the Java implementation.  It was introduced in Java
    version 1.44 and fixed in 1.46-SNAPSHOT on 2016-01-17.
    Also the + sign on azi2 is a check on the normalizing of azimuths
    (converting -0.0 to +0.0).r?   rc   r5   g    .r   gnBT@r,   r   r   rY   r	   r   rJ   N)r   r   r"   r   rN   rL   copysignr1   r   r   r    test_GeodSolve73  s
    zGeodSolveTest.test_GeodSolve73c                 C   s   t jddddt j}| j|d ddd | j|d	 d
dd | j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d ddd dS )zNCheck fix for inaccurate areas, bug introduced in v1.46, fixed
    2015-10-16.gΪVK@g?.@gec]K@gQI.@r   gOK@re   r   r	   gZ"a)K@r
   gK;:C@r   g1f7L7?r   r   g$P?r   r   gMMZAr;   N)r   r   r   r   r   r/   r   r   r    test_GeodSolve74  s    zGeodSolveTest.test_GeodSolve74c                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )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Ơ>Nr.   r/   r   r   r    test_GeodSolve76  s    
zGeodSolveTest.test_GeodSolve76c                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )z5An example where the NGS calculator fails to convergeg333333;@rl   g;rk   r   g_YF@r   r   r	   g۪I`@r
   g@,sAr   Nr.   r/   r   r   r    test_GeodSolve78  s    zGeodSolveTest.test_GeodSolve78c                 C   sp  t jddddt j}| j|d ddd | j|d ddd t jddddt j}| j|d d	dd | j|d d	dd t jd
dd
dt j}| j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d d	dd | j|d d	dd | j|d ddd | td	|d dk | td	|d dk | td	|d dk t jddddt j}| j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d ddd | j|d d	dd | j|d d	dd | j|d ddd t j	d	ddt j
}|dt j}| t|d  dS )zSome tests to add code coverage: computing scale in special cases + zero
    length geodesic (includes GeodSolve80 - GeodSolve83) + using an incapable
    line.r   r?   r   g3Kug|=r   r   gư>rJ   gK7A 4@r   r   r
   r   r   r5   r	   r   r   r   ri   r{   r-   rQ     N)r   r   r   ZGEODESICSCALEr   r   rN   rL   r   r\   ZLATITUDEr]   ZEMPTYrO   )r   r   r_   r$   r   r   r    test_GeodSolve80  s<    zGeodSolveTest.test_GeodSolve80c                 C   s|  t jdddtj}| t|d  | t|d  | t|d  t jdddtj}| t|d  | t|d  | t|d  t jddtjd}| t|d  | t|d  | t|d  t jddtjd}| t|d  | t|d  | t|d  t jdtjdd}| |d dk | t|d  | |d dk t jdtjdd}| |d dk | t|d  | |d dk t jtjddd}| t|d  | t|d  | t|d  t jtjddd}| t|d  | t|d  | t|d  dS )	zTests for python implementation to check fix for range errors with
    {fmod,sin,cos}(inf) (includes GeodSolve84 - GeodSolve91).r   r?   r   r   r	   r   r   N)r   r   r"   rL   infrN   rO   rM   r1   r   r   r    test_GeodSolve84   s@    zGeodSolveTest.test_GeodSolve84c                 C   sR   t jdddd}| j|d ddd | j|d	 d
dd | j|d ddd dS )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`?r;   Nr.   r/   r   r   r    test_GeodSolve92$  s    
zGeodSolveTest.test_GeodSolve92c                 C   sT   t jddtjd}| t|d  | t|d  | t|d  dS )zPCheck fix for lat2 = nan being treated as lat2 = 0 (bug found
       2021-07-26)r   r?   r   r	   r
   NrK   r/   r   r   r    test_GeodSolve94.  s    zGeodSolveTest.test_GeodSolve94c                 C   s6   t dd}|ddddt j}| j|d ddd	 d
S )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 r-   r   Nra   r8   r   r   r    test_GeodSolve966  s    
zGeodSolveTest.test_GeodSolve96N)$r'   r(   r)   r*   r0   r2   r:   r<   rA   rB   rC   rD   rE   rI   rP   rV   r`   rb   rf   rj   rn   rp   rs   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r+      sB   
3!		($
r+   c                   @   s   e Zd ZdZejdZejdZe	dd Z
e	dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )PlanimeterTestzPlanimeter testsFTc                 C   s8   t j  | D ]}t j|d |d  qt jddS )zHelper function for polygonsr   rJ   FT)r   polygonClearAddPointComputepointspr   r   r    
PlanimeterE  s    
zPlanimeterTest.Planimeterc                 C   s8   t j  | D ]}t j|d |d  qt jddS )zHelper function for polylinesr   rJ   FT)r   polyliner   r   r   r   r   r   r    
PolyLengthM  s    
zPlanimeterTest.PolyLengthc                 C   s^  ddgddgddgddgg}t |\}}}| j|ddd | j|d	d
d ddgddgddgddgg}t |\}}}| j|ddd | j|dd
d ddgddgdd
gd
dgg}t |\}}}| j|ddd | j|dd
d ddgddgddgg}t |\}}}| j|dd
d | j|dd
d t |\}}}| j|dd
d | t| dS )z2Check fix for pole-encircling bug found 2011-03-16Y   r   r?   r5   i  gvH#Ag-C6?r   g  8=BrJ   ig  8=gaӋ'#Ag  (BignBi}1N)r   r   r   r   rN   rL   rO   r   r   _	perimeterarear   r   r    test_Planimeter0U  s&    zPlanimeterTest.test_Planimeter0c                 C   sJ   ddgddgddgg}t |\}}}| j|ddd | j|ddd d	S )
z;Check fix for Planimeter pole crossing bug found 2011-06-24r   r   gfffffV@g|fi: rJ   r   g  4=BNr   r   r   r   r   r   r    test_Planimeter5m  s    zPlanimeterTest.test_Planimeter5c                 C   s  ddgddgddgg}t |\}}}| j|ddd | j|ddd ddgddgddgg}t |\}}}| j|ddd | j|ddd ddgddgddgg}t |\}}}| j|ddd | j|ddd ddgddgddgg}t |\}}}| j|ddd | j|ddd d	S )
z<Check fix for Planimeter lon12 rounding bug found 2012-12-03ro   g+r5   r   i%rJ   r   rr   Nr   r   r   r   r    test_Planimeter6t  s     zPlanimeterTest.test_Planimeter6c                 C   sJ   ddgddgddgg}t |\}}}| j|ddd | j|ddd dS )	z@Area of arctic circle (not really -- adjunct to rhumb-area test)$rP@r   r5   ih   rJ   r   Nr   r   r   r   r    test_Planimeter12  s    z PlanimeterTest.test_Planimeter12c                 C   sJ   ddgddgddgg}t |\}}}| j|ddd | j|ddd dS )	zReverse area of arctic circler   r   ru   r   rJ   r   Nr   r   r   r   r    test_Planimeter12r  s    z!PlanimeterTest.test_Planimeter12rc                 C   s\   ddgddgddgddgddgddgg}t |\}}}| j|dd	d
 | j|dd	d
 dS )zCheck encircling pole twicer   r   iir   x      i% rJ   r   g  d0BNr   r   r   r   r    test_Planimeter13  s    (z PlanimeterTest.test_Planimeter13c           
      C   s  g d}g d}d}d}t j  t j|d |d  t j|d |d  t j|d |d dd	\}}}| j||d
d t j|d |d dd\}}}| j||d
d t j|d |d d	d	\}}}| j|| d
d t j|d |d d	d\}}}| j||| d
d tj|d |d |d |d }|d }|d }	t j	||	dd	\}}}| j||d
d t j	||	dd\}}}| j||d
d t j	||	d	d	\}}}| j|| d
d t j	||	d	d\}}}| j||| d
d t j|d |d  t j
dd	\}}}| j||d
d t j
dd\}}}| j||d
d t j
d	d	\}}}| j|| d
d t j
d	d\}}}| j||| d
d dS )z{Coverage tests, includes Planimeter15 - Planimeter18 (combinations of
    reverse and sign) + calls to testpoint, testedge.)rQ   rJ   rR   )rJ   rQ   rR   gU/B爻nBr   rJ   rQ   FTr-   r   r   r
   N)r   r   r   r   	TestPointr   r   r   r   TestEdger   )
r   latZlonra0r   r   r   r   r
   r   r   r    test_Planimeter15  sF    
    "z PlanimeterTest.test_Planimeter15c                 C   s  t j  t jdd\}}}| |dk | |dk t jdddd\}}}| |dk | |dk t jdddd\}}}| t| | t| t j	dd t jdd\}}}| |dk | |dk t j
  t j
dd\}}}| |dk t j
dddd\}}}| |dk t j
dddd\}}}| t| t j
	dd t j
dd\}}}| |dk t j	dd t j
dddd\}}}| j|ddd t j
d	d	dd\}}}| j|d
dd dS )z]Coverage tests, includes Planimeter19 - Planimeter20 (degenerate
    polygons) + extra cases.FTr   rJ   r?   r   ri   r   rQ   gy&1a&Ar;   N)r   r   r   r   rN   r   r   rL   rO   r   r   r   )r   r   r   r   r   r   r    test_Planimeter19  s:    

z PlanimeterTest.test_Planimeter19c           	      C   s  d}d}d}d}d}t j  t j|d t j|d t j|d t j|d t j|d t j|d d	D ]F}t j|d t j|d t j|dd
d\}}}| j||| dd t j|dd
d
\}}}| j||| dd t j|ddd\}}}| j|| | dd t j|ddd
\}}}| j|| | | dd t j||d
d\}}}| j||| dd t j||d
d
\}}}| j||| dd t j||dd\}}}| j|| | dd t j||dd
\}}}| j|| | | dd t j|d t jd
d\}}}| j||| dd t jd
d
\}}}| j||| dd t jdd\}}}| j|| | dd t jdd
\}}}| j|| | | dd qvdS )zSome tests to add code coverage: multiple circlings of pole (includes
    Planimeter21 - Planimeter28) + invocations via testpoint and testedge.rt   g\rsC@gH6-`AgYBr   <   r5   i)rR   rS   FTr-   r   N)r   r   r   r   r   r   r   r   )	r   r   Zazisr   r   ir   r   r   r   r    test_Planimeter21  sP    

z PlanimeterTest.test_Planimeter21c                 C   sj   t j  t jdd t jdd t jdd t jdd t jdd\}}}| j|ddd	 d
S )zACheck fix to transitdirect vs transit zero handling inconsistencyr   r?   r   iFTg    .ArH   r   N)r   r   r   r   ZAddEdger   r   )r   r   r   r   r   r    test_Planimeter29  s    
z PlanimeterTest.test_Planimeter29N)r'   r(   r)   r*   r   r   ZPolygonr   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   ?  s"   

'!,r   )	r*   ZunittestrL   Zgeographiclib.geodesicr   ZTestCaser   r+   r   r   r   r   r    <module>   s       4