
    h                        d dl mZ d dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZmZmZ d dlmZ d dlZd dlmZ 	 d dlmZ dZej2                  j5                  e d
      Z G d d      Z G d d      Zej2                  j<                  ej2                  j?                  d       G d d                    Z  G d d      Z!y# e$ r d	ZY w xY w)    )sqrtN)GeometryCollection
LineStringMultiPolygonPointPolygonbox)GeoDataFrame	GeoSeries	read_file)_compat)assert_array_equal)	coo_arrayTFzscipy not installedreasonc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestSeriesSindexc                    t        g d      }t        g d      }t        d||gid      }|j                  rJ |j                   |j                  sJ d|j                  j
                  _        |j                  rJ |j                   |j                  sJ t        ||g      }|j                  rJ |j                   |j                  sJ d|j
                  _        |j                  rJ |j                   |j                  sJ y)zTest the has_sindex method.r   r      r   r   r   r   r   r   r   geomgeometryN)r   r
   
has_sindexsindexr   values_sindexr   )selft1t2dss        N/var/www/html/immo/lib/python3.12/site-packages/geopandas/tests/test_sindex.pytest_has_sindexz TestSeriesSindex.test_has_sindex    s    -.-.&2r(+f=<<	|||$(

!<<	|||r2h<<	|||<<	|||    c                 t    t        t              }|j                  rJ t        |j                        dk(  sJ y)z7Tests creating a spatial index from an empty GeoSeries.dtyper   N)r   objectr    lenr#   r'   s     r(   test_empty_geoseriesz%TestSeriesSindex.test_empty_geoseries7   s.    F#88|188}!!!r*   c                 6   t        t        dd      g      }|j                  j                  dk(  sJ |j                  j	                  d      }t        t        |            dk(  sJ |j                  j	                  d      }t        t        |            dk(  sJ y )Nr   r   r4   r   r   )r5   r4   r4   )r   r   r    sizeintersectionr/   list)r#   r'   hitss      r(   
test_pointzTestSeriesSindex.test_point=   s    uQ{m$xx}}!!!xx$$^44:!###xx$$%564:!###r*   c                 |    t        t               g      }|j                  rJ t        |j                        dk(  sJ y)z9Tests that a single empty Point results in an empty tree.r   N)r   r   r    r/   r0   s     r(   test_empty_pointz!TestSeriesSindex.test_empty_pointE   s2    uwi 88|188}!!!r*   c                     t        g d      }t        g d      }t        g d      }t        |||g      }|j                  j                  dk(  sJ y )Nr   r   )r   r   r   r      )r   r   r    r6   )r#   r$   r%   sqr'   s        r(   test_polygonszTestSeriesSindex.test_polygonsK   sI    -.-.56r2rl#xx}}!!!r*   c                     t        t        dd      g      }|j                  j                  J |j                  j
                  dk(  sJ |j                  j                  J y )Nr   r   )r   r   r!   r"   r    r6   r0   s     r(   test_lazy_buildz TestSeriesSindex.test_lazy_buildR   sV    uQ{m$xx'''xx}}!!!xx+++r*   c                     t        t        dd      g      }|j                  }t        dd      |j                  d<   |j                  |usJ y )Nr   r   r   r    iloc)r#   r'   original_indexs      r(   test_rebuild_on_item_changez,TestSeriesSindex.test_rebuild_on_item_changeX   sB    uQ{m$!QKq	xx~---r*   c                    t        t        dd      t        dd      g      }|j                  }|j                  d d }|j                  |usJ |j                  d d  }|j                  |u sJ |j                  d d d   }|j                  |usJ y )Nr   r   r4   rD   )r#   r'   rF   sliceds       r(   test_rebuild_on_slicez&TestSeriesSindex.test_rebuild_on_slice^   s    uQ{E!QK01}}N222}}..."}}N222r*   N)__name__
__module____qualname__r)   r1   r:   r<   r@   rB   rG   rJ    r*   r(   r   r      s*    ."$"",.3r*   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestFrameSindexc           
          t        d      t        dd      t        t        d      t        d            D cg c]  \  }}t        ||       c}}d}t        |d      | _        y c c}}w )N   r   )ABr   r   r   )rangezipr   r
   dfr#   xydatas       r(   setup_methodzTestFrameSindex.setup_methodm   sV    qr1-0q58-DETQU1a[E

 tf5 Fs   A&
c                     d| j                   _        | j                   j                  j                  dk(  sJ t	        | j                   j                  j                  d            }t        |      dk(  sJ |d   dk(  sJ y )Nz	epsg:4326rR   )      @r_      r`      r   r>   )rX   crsr    r6   r8   r7   r/   )r#   r9   s     r(   test_sindexzTestFrameSindex.test_sindexu   sg    !ww~~""a'''DGGNN//0@AB4yA~~Aw!||r*   c                     | j                   j                  j                  j                  J | j                   j                  j
                  dk(  sJ | j                   j                  j                  j                  J y )NrR   )rX   r   r!   r"   r    r6   r#   s    r(   rB   zTestFrameSindex.test_lazy_build|   sb    ww&&..666ww~~""a'''ww&&..:::r*   c           
      P   | j                   j                  J | j                   j                  }| j                   j                  t        t	        dd      t	        dd            D cg c]  \  }}t        ||       c}}d       | j                   j                  |usJ y c c}}w )NrR   
   T)inplace)rX   r    set_geometryrW   rV   r   )r#   rF   rZ   r[   s       r(   #test_sindex_rebuild_on_set_geometryz3TestFrameSindex.test_sindex_rebuild_on_set_geometry   s    ww~~)))%(q"uQ|%DETQU1a[Et 	 	
 ww~~^333 Fs   'B"
c                 X   | j                   j                  }| j                   j                  d d }|j                  |usJ | j                   j                  }| j                   j                  d d  }|j                  |u sJ | j                   j                  d d d   }|j                  |usJ y )Nr   r4   )rX   r    rE   )r#   rF   rI   s      r(   test_rebuild_on_row_slicez)TestFrameSindex.test_rebuild_on_row_slice   s    bq!}}N222a}}...dd#}}N222r*   c                     | j                   j                  }| j                   d   }|j                  |u sJ | j                   j                  }|j                  |u sJ y)z?Selecting a single column should not rebuild the spatial index.r   N)rX   r    r   )r#   rF   geometry_cols      r(   $test_rebuild_on_single_col_selectionz4TestFrameSindex.test_rebuild_on_single_col_selection   sU     wwv""n444ww''""n444r*   c                 6   | j                   j                  }| j                   ddg   }t        j                  s|j                  |usJ |j                  |u sJ | j                   ddg   }t        j                  s|j                  |usJ y|j                  |u sJ y)z2Selecting a subset of columns preserves the index.r   rT   N)rX   r    compatPANDAS_GE_30)r#   rF   subset1subset2s       r(   &test_rebuild_on_multiple_col_selectionz6TestFrameSindex.test_rebuild_on_multiple_col_selection   s     ''63-("">>777>>^333''3-("">>777>>^333r*   c                     | j                   j                         }|j                  }|j                  ddd       |j                  rJ |j                  }||usJ |j
                  j                         g dk(  sJ y )NrT   FT)	ascendingrh   )r`   r>   ra   r   r   )rX   copyr    sort_valuesr   indextolistr#   gdf
old_sindex
new_sindexs       r(   test_rebuild_on_update_inplacez.TestFrameSindex.test_rebuild_on_update_inplace   sm    ggllnZZ
ud;>>!!ZZ
+++ yy!_444r*   c                     | j                   j                         }|j                  }|j                  ddid       |j                  sJ |j                  }||u sJ y )NrT   AAT)columnsrh   )rX   rx   r    renamer   r|   s       r(   test_update_inplace_no_rebuildz.TestFrameSindex.test_update_inplace_no_rebuild   sQ    ggllnZZ


C;
5~~~ZZ
Z'''r*   N)rK   rL   rM   r]   rc   rB   rj   rl   ro   ru   r   r   rN   r*   r(   rP   rP   l   s/    6;
4354"5(r*   rP   _setup_class_nybb_filenamec                       e Zd Zd Zd Zy)TestJoinSindexc                 8    t        | j                        | _        y )N)r   nybb_filenameborosre   s    r(   r]   zTestJoinSindex.setup_method   s    t112
r*   c                 t   | j                   j                  }|j                  d      }|D cg c]  }| j                   j                  |   d     }}|ddgk(  sJ | j                   | j                   d   dk     }|j                  }|j                  d      }|D cg c]  }|j                  |   d    }}|dgk(  sJ | j                   | j                   d   dk\     }|j                  }|j                  d      }|D cg c]  }|j                  |   d    c}f}|dgk(  sJ |j	                  |d      }t        |      d	k(  sJ |j                  j                  d	k(  sJ |j                  }|j                  d      }|D cg c]  }|j                  |   d    }}|ddgk(  sJ y c c}w c c}w c c}w c c}w )
N)g.AgHzbABoroNameBronxQueensBoroCoder>   outer)howrR   )r   r    r7   rE   merger/   r6   )r#   treer9   hitresfirstsecondmergeds           r(   test_merge_geozTestJoinSindex.test_merge_geo   s   zz    !89;?@Ctzzs#J/@@w)))) 

4::j1A56||  !896:;suzz#z*;;wi DJJz2a78}}  !898<=C ,=?xj    V16{a}}!!Q&&&}}  !897;<v{{3
+<<w))))1 A < > =s   #F&F+=F0F5N)rK   rL   rM   r]   r   rN   r*   r(   r   r      s    3*r*   r   c            '          e Zd Zd Zej
                  j                  ddg fddgfdddgfddgff      d	        Zej
                  j                  d
ddd edd      f      d        Z	ej
                  j                  dd ej                  de      df      ej
                  j                  dd edddd      g fd edddd      dgfd edddd      ddgfd eddg      ddgfd edddd      g fd edddd      dgfd edddd      ddgfd eddg      g fd edddd      g fd edddd      g fd eddd d       d!gfd eddg      g fd" edddd      g fd" eddd#d#      dgfd" eddd$d$      dgfd" eddd%d%      ddgfd" eddg      g fd& edddd      dgfd& eddd$d$      g fd" eddd'd'      d!gfd( edddd      ddgfd( ed)d)d*d*      g fd( edddd      ddgfd+ edddd      g fd+ eddd#d#      dgfd+ eddd#d#      dgfd+ eddd$d$      dgfd+ eddd%d%      ddgfd+ eddd'd'      g ff      d,               Zd- Zej
                  j!                  ej$                   d./      ej
                  j                  d0d ed1d1d2d2      g fd ed1d1d2d2      d!gfd edd      g f ed      d3z    edd      ddgf ed%      d3z
   eg d4       eg d5      gg dg d6gf ed%      d3z    eg d4       eg d5      gg d7g d8gfd%dg edd       edd      gg d9g d:gff      d;               Zej
                  j!                  ej$                   d./      d<        Zej
                  j                  d=g d>      d?        Zej
                  j!                  ej$                  d@/      dA        Zej
                  j                  dBdg f e       g f e       g f e       g f e       g fg      dC        ZdD Zej
                  j                  dEdFg dGg dHgfdIg dGg dHgff      dJ        ZdK Zej
                  j                  dd ej                  de      df      ej
                  j                  dddgg g gfddgdgdggfddgddgddggfddgg g gfddgdgdggfddgddgddggfdddgdgdggfddLdgg dMg dNgfddOgg g gfddPgg g gfddQgdgd!ggfd"dgg g gfd"dRgdgdggfd"dSgdgdggfd"dTgdgdggfd"dUgddgddggfd"dVgdgd!ggfd&dWgdgdggfd&dXgg g gfd(dYgddgddggfd(dZgg g gfd(dgddgddggfd+dgg g gfd+dRgdgdggfd+dSgdgdggfd+dTgdgdggfd+dUgddgddggfd+dVgg g gff      d[               Zej
                  j                  d\ e       gg g gf e       dgg g gfdgg g gfd edddd      dgdgdggfg      d]        Z d^ Z!d_ Z"d` Z#ej
                  j                  dddg g gfddg g gfd"dLdgdggff      da        Z$ej
                  j                  dEdFg dGg dHgfdIg dGg dHgff      db        Z%ej
                  j                  dcdFdIg      ej
                  j                  ddddgdgdggfddgdgdggfg      de               Z&ej
                  j                  dcdFdIg      ej
                  j                  dddfdgddgddggfdfdggddgddggfg      dh               Z'ej
                  j                  dcdFdIg      ej
                  j                  dddg g gfdgg g gfg      di               Z(ej
                  j                  djdFdIg      ej
                  j                  dkdFdg dMg dlg ed       ed       edm      gffdIdddgdd!gg ed       edm      gffdFdddgddgg ed       ed      gffdIddgdgg ed      gffg      dn               Z)ej
                  j                  djdFdIg      ej
                  j                  dodIddIg dpg dpgd!dgz  ffdIddFg dpg dqgd! ed%      gz  ffdFddIg dpg dpgd!dgz  ffdFddFg drg dsgdt ed%      gz  ffdIdudFg dvg dwgdxdgz  ffdFdudFg dyg dzgd{dgz  ffg      d|               Z*d} Z+d~ Z,d Z-d Z.ej
                  j                  dg d      d        Z/y)TestShapelyInterfacec           	          dt        t        d      t        d            D cg c]  \  }}t        ||       c}}t        dddd      gz   i}t	        |d      | _        t        |d         | _        y c c}}w )Nr   rR   rg      r   )rW   rV   r   r	   r
   rX   r/   expected_sizerY   s       r(   r]   z!TestShapelyInterface.setup_method   so    Sq58-DETQU1a[E2r2r"#$
 tf5 f.	 Fs   A4ztest_geom, expectedr4   r4         r   )r   r         ?r   r   )r   r   r   r   r   r   c                 x    t        | j                  j                  j                  |            }t	        ||       y)z2Tests the `intersection` method with valid inputs.N)r8   rX   r    r7   r   )r#   	test_geomexpectedr   s       r(   test_intersection_bounds_tuplez3TestShapelyInterface.test_intersection_bounds_tuple   s+     477>>..y9:3)r*   r   )r4   r4   r   r   Nc                     t        j                  t              5  | j                  j                  j                  |       ddd       y# 1 sw Y   yxY w)z4Tests the `intersection` method with invalid inputs.N)pytestraises	TypeErrorrX   r    r7   r#   r   s     r(   &test_intersection_invalid_bounds_tuplez;TestShapelyInterface.test_intersection_invalid_bounds_tuple  s;     ]]9% 	3GGNN''	2	3 	3 	3   &A		Aoutput_formatindicessparse)marksdensezpredicate, test_geom, expectedr4   r   r   r   
intersectswithin      ?Q?      ?rg         rR   containsjt?      ?ra   touchesr   coversMbP?Gz?contains_properlyc                 n   | j                   j                  j                  ||      }t        ||       |dk7  r}t	        j
                  t        | j                         t              }d||<   | j                   j                  j                  |||      }|dk(  r|j                         }t        ||       yy)z@Tests the `query` method with valid inputs and valid predicates.	predicater   r,   Tr   r   r   N)	rX   r    queryr   npzerosr/   booltodense)r#   r   r   r   r   r   r   s          r(   
test_queryzTestShapelyInterface.test_query  s    N ggnn""9	"B3)I%HHS\6E"E(O''..&&Ym ' C (kkmsE* &r*   c                     t        j                  t              5  | j                  j                  j                  d       ddd       y# 1 sw Y   yxY w)z/Tests the `query` method with invalid geometry.notavalidgeomNr   r   r   rX   r    r   re   s    r(   test_query_invalid_geometryz0TestShapelyInterface.test_query_invalid_geometry  s9    ]]9% 	2GGNN  1	2 	2 	2r   zRequires GEOS 3.10r   zdistance, test_geom, expectedg      "@g#@g&.>r   )r   )ra   r   )ra   ra   )r   r   r   ra   )r   r   r   r   r   r   r   )r   r   ra   r   r   ra   r>   )r   r   r   r   r   r   r   )r   r   r   r   ra   r>   r`   c                 l    | j                   j                  j                  |d|      }t        ||       y)zHTests the `query` method with predicates that require keyword arguments.dwithinr   distanceNrX   r    r   r   )r#   r   r   r   r   s        r(   test_query_dwithinz'TestShapelyInterface.test_query_dwithin  s.    p ggnn""9	H"U3)r*   c                     t        j                  t        d      5  | j                  j                  j                  t        dd      d       ddd       y# 1 sw Y   yxY w)`Tests the `query` method with keyword arguments that are
        invalid for certain predicates.z8'distance' parameter is required for 'dwithin' predicatematchr   r   r   Nr   r   
ValueErrorrX   r    r   r   re   s    r(   test_dwithin_no_distancez-TestShapelyInterface.test_dwithin_no_distance  sR     ]]X
 	C GGNN  q!	 B	C 	C 	Cs   2AA r   )
Nr   r   
covered_byr   crossesr   overlapsr   r   c                     d}t        j                  t        |      5  | j                  j                  j                  t        dd      |d       ddd       y# 1 sw Y   yxY w)r   zD'distance' parameter is only supported in combination with 'dwithin'r   r   r   Nr   )r#   r   msgs      r(   test_query_distance_invalidz0TestShapelyInterface.test_query_distance_invalid  sT    $ U]]:S1 	OGGNN  q!	A N	O 	O 	Os   3AA#z0Test for 'dwithin'-incompatible versions of GEOSc                     t        j                  t        d      5  | j                  j                  j                  t        dd      dd       ddd       y# 1 sw Y   yxY w)zTests whether a ValueError is raised when trying to use dwithin with
        incompatible versions of shapely or pyGEOS
        z-predicate = 'dwithin' requires GEOS >= 3.10.0r   r   r   r   Nr   re   s    r(   test_dwithin_requirementsz.TestShapelyInterface.test_dwithin_requirements  sT     ]]M
 	O GGNN  q!	A N	O 	O 	Os   3AA!ztest_geom, expected_valuec                 f    | j                   j                  j                  |      }t        ||       y)z-Tests the `query` method with empty geometry.Nr   )r#   r   expected_valuer   s       r(   test_query_empty_geometryz.TestShapelyInterface.test_query_empty_geometry  s&     ggnn""9-3/r*   c                     t        dddd      }t        j                  t              5  | j                  j
                  j                  |d       ddd       y# 1 sw Y   yxY w)1Tests the `query` method with invalid predicates.r4   r   testr   N)r	   r   r   r   rX   r    r   r   s     r(   test_query_invalid_predicatez1TestShapelyInterface.test_query_invalid_predicate  sN    Bd+	]]:& 	>GGNN  f =	> 	> 	>s   (AA"zsort, expectedT)r   r   r   r   r   ra   Fc                    t        t        g d      g      }t        t        g d      t        g d      t        g d      g      }g d}|j                  d   }|j                  j	                  ||      }t        |      t        |      k(  sJ 	 t        ||       y# t        $ r5}|du r*t        j                  d| d	|j                          d
       |d}~ww xY w)zYCheck that results from `query` don't depend on the
        order of geometries.
        r   )r>   r   r>   r>   r   r>   )r4   r   r   r   )r4   r>   r   )rR   r>   )rR   rR   )r>   rR   r   r   sortFkrtree results are known to be unordered, see https://github.com/geopandas/geopandas/issues/1337
Expected:
 
Got:
 
N)r   r   r!   r    r   sortedr   AssertionErrorr   xfailr{   )r#   r   r   
test_polys
tree_polystest_geor   es           r(   test_query_sortingz'TestShapelyInterface.test_query_sorting  s     (H IJK
89:;89

 $$Q'%%hT%: c{fX....
	sH- 	u}##+* -!jjl^2/ G	s   B 	C'0CCc                     t        j                  t        d      5  t        dddd      }| j                  j
                  j                  |d       d d d        y # 1 sw Y   y xY w)Nz#Invalid output_format: 'dataarray'.r   r4   r   	dataarray)r   )r   r   r   r	   rX   r    r   r   s     r(   test_unsupported_outputz,TestShapelyInterface.test_unsupported_output0  sU    ]]:-RS 	GBD$/IGGNN  + F	G 	G 	Gs   6AA$r3   )r   r   r   )r   r   r   )r   r   r   r   )r   r   rg   rg   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r4   r4   ra   ra   )rg   rg   r   r   )r4   r4   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                    |D cg c]
  }t        |  }}| j                  j                  j                  ||      }t	        ||       |dk7  rt        j                  t        | j                        t        |      ft              }|ddd   \  }	}
d||	|
f<   | j                  j                  j                  |||      }|dk(  r|j                         }t	        ||       yyc c}w )	zQTests the `query` method with valid
        inputs and valid predicates.
        r   r   r,   Nr4   Tr   r   )
r	   rX   r    r   r   r   r   r/   r   r   )r#   r   r   r   r   r   
test_geomsr   r   r   others              r(   test_query_bulkz$TestShapelyInterface.test_query_bulk6  s    T .77Tc4j7
7ggnn"":"C3)I%HHc$''lC
O<DIE"4R4.KD%!%E$+''..&&i} ' C (kkmsE* &	 8s   C$ztest_geoms, expected_valuec                 f    | j                   j                  j                  |      }t        ||       y)z2Tests the `query` method with an empty geometries.Nr   )r#   r  r   r   s       r(   test_query_bulk_empty_geometryz3TestShapelyInterface.test_query_bulk_empty_geometry  s&     ggnn"":.3/r*   c                     t        j                  g t              }g g g}| j                  j                  j                  |      }t        ||       y)z3Tests the `query` method with an empty input array.r,   N)r   arrayr.   rX   r    r   r   )r#   
test_arrayr   r   s       r(   !test_query_bulk_empty_input_arrayz6TestShapelyInterface.test_query_bulk_empty_input_array  s=    XXb/
bggnn"":.3/r*   c                     d}t        j                  t              5  | j                  j                  j                  |       ddd       y# 1 sw Y   yxY w)z[
        Tests the `query` method with invalid input for the `geometry` parameter.
        
notanarrayNr   )r#   r  s     r(   &test_query_bulk_invalid_input_geometryz;TestShapelyInterface.test_query_bulk_invalid_input_geometry  s@     "
]]9% 	-GGNN  ,	- 	- 	-s   &AAc                     d}d}t        j                  t              5  | j                  j                  j                  t        | g|       ddd       y# 1 sw Y   yxY w)r   r   r   r   N)r   r   r   rX   r    r   r	   )r#   test_geom_boundstest_predicates      r(   !test_query_bulk_invalid_predicatez6TestShapelyInterface.test_query_bulk_invalid_predicate  sV    /]]:& 	UGGNN  #'7"8!9^ T	U 	U 	Us   /AAc                    t        j                  t        | gdg      }| j                  j                  j                  ||      }t        ||       | j                  j                  j                  |j                  |      }t        ||       | j                  j                  j                  |j                  j                  |      }t        ||       | j                  j                  j                  |j                  j                  j                         |      }t        ||       | j                  j                  j                  |j                  j                  j                         |      }t        ||       y)zWTests that query can accept a GeoSeries, GeometryArray or
        numpy array.
        0)rz   r   N)
	geopandasr   r	   rX   r    r   r   r   r!   to_numpy)r#   r   r   r   r   s        r(   test_query_bulk_input_typez/TestShapelyInterface.test_query_bulk_input_type  s2    ''i(9#G	 ggnn""9	"B3) ggnn""9#5#5"K3)ggnn""9#5#5#<#<	"R3) ggnn""%%..0I # 
 	3)ggnn""%%..0I # 
 	3)r*   c                    t        t        g d      g      }t        t        g d      t        g d      t        g d      g      }|j                  j                  ||      }t	        |d         t	        |d         k(  sJ t	        |d         t	        |d         k(  sJ 	 t        ||       y# t        $ r5}|du r*t        j                  d| d	|j                          d
       |d}~ww xY w)zYCheck that results from `query` don't depend
        on the order of geometries.
        r   r   r   r   r   r   Fr   r   r   N)
r   r   r    r   r   r   r   r   r   r{   )r#   r   r   r   r   r   r   s          r(   test_query_bulk_sortingz,TestShapelyInterface.test_query_bulk_sorting  s     (H IJK
89:;89

 %%jt%< c!f~!4444c!f~!4444
	sH- 	u}##+* -!jjl^2/ G	s   #B0 0	C.90C))C.
return_allzgeometry,expectedc                    t        j                  t        j                  d      t        j                  d            }t	        j
                  d|i      }t        |      }|j                  j                  ||      }t        ||       t        j                  |      }|j                  j                  ||      }t        ||       y Nrg   r   )r  
shapelypointsr   aranger  r
   r   r    nearestr   )r#   r   r   r  geomsrX   pr   s           r(   test_nearest_singlez(TestShapelyInterface.test_nearest_single%  s     ryy}biim<##Z$78(Oiij93)NN8$iij93)r*   r   )r   r   c                    t        j                  t        j                  d      t        j                  d            }t	        j
                  d|i      }|D cg c]  }t        |       }}|j                  j                  ||      }t        ||       t        j                  |      }|j                  j                  ||      }t        ||       t	        j                  |      }	|j                  j                  |	|      }t        ||       t        | \  }
}t	        j                  |
|      }|j                  j                  ||      }t        ||       y c c}w r  )r  r   r   r!  r  r
   r   r    r"  r   r   rW   points_from_xy)r#   r   r   r  r#  rX   r$  psr   r'   rZ   r[   gas                r(   test_nearest_multiz'TestShapelyInterface.test_nearest_multi9  s    ryy}biim<##Z$78 ()1eAh))iiz:3)^^H%iiz:3)#iij93)H~1%%a+iiz:3) *s   Ec                     t        j                  t        j                  d      t        j                  d            }t	        j
                  d|i      }|j                  j                  ||      }t        ||       y r  )	r  r   r   r!  r  r
   r    r"  r   )r#   r   r   r  r#  rX   r   s          r(   test_nearest_nonez&TestShapelyInterface.test_nearest_noneV  s\     ryy}biim<##Z$78iiZ@3)r*   return_distancez return_all,max_distance,expected)r   r   rR   2   c                    t        j                  t        j                  d      t        j                  d            }t	        j
                  d|i      }t        dd      t        dd      g}|j                  j                  ||||      }|r%t        |d   |d          t        |d   |d          y t        ||d          y )Nrg   r   r   r   )r  max_distancer-  r   r  )	r#   r   r0  r  r-  r#  rX   r(  r   s	            r(   test_nearest_max_distancez.TestShapelyInterface.test_nearest_max_distancee  s     ryy}biim<##Z$78CouQ|,ii!%+	   
 s1vx{3s1vx{3sHQK0r*   z*return_all,max_distance,exclusive,expected)r   r   ra   r>   r`   )r   r   r   ra   r>   )r   r   r   ra   ra   r>   r>   r`   )r   r   ra   r   r>   ra   r`   r>      g?)r   ra   rR   )rR   rR   r   r>   )r   ra   rR   rR   )rR   rR   r   ra   r`   c                    t        j                  t        j                  d      t        j                  d            }|r!t        j                  |t        dd      g      }t        j                  d|i      }|}|j                  j                  |||||      }	|r%t        |	d   |d          t        |	d   |d          y t        |	|d          y )NrR   r   ra   r   )r  r0  r-  	exclusiver   )r  r   r   r!  appendr   r  r
   r    r"  r   )
r#   r   r0  r  r-  r4  r#  rX   r(  r   s
             r(   test_nearest_exclusivez+TestShapelyInterface.test_nearest_exclusive  s    ( ryy|RYYq\:IIeeAqk]3E##Z$78ii!%+   
 s1vx{3s1vx{3sHQK0r*   c                     t        dd      dt               t        dd      t               g}t        j                  |      }|j                  j	                  t        dd            d   dk(  sJ y)z8Tests building sindex with interleaved empty geometries.r   Nr   r   r>   )r   r  r
   r    r   )r#   r#  rX   s      r(   test_empty_tree_geometriesz/TestShapelyInterface.test_empty_tree_geometries  sX    q!dEGU1a[%'B##U3yyuQ{+A.!333r*   c                 b    | j                   j                  j                  | j                  k(  sJ y)zTests the `size` property.N)rX   r    r6   r   re   s    r(   	test_sizezTestShapelyInterface.test_size  s$    ww~~""d&8&8888r*   c                 `    t        | j                  j                        | j                  k(  sJ y)z.Tests the `__len__` method of spatial indexes.N)r/   rX   r    r   re   s    r(   test_lenzTestShapelyInterface.test_len  s#    477>>"d&8&8888r*   c                    t        j                  g t              }|j                  j                  sJ t        j                  dg      }|j                  j                  sJ t        j                  t               g      }|j                  j                  sJ t        j                  t        dd      g      }|j                  j                  rJ y)zTests the `is_empty` property.r,   Nr   )r  r   r.   r    is_emptyr   )r#   empty	non_emptys      r(   test_is_emptyz"TestShapelyInterface.test_is_empty  s     ##Bf5||$$$$##TF+||$$$$##UWI.||$$$$''q!6	##,,,,,r*   zpredicate, expected_shape))N)ra   i  )r   ra      )r   rB  )r   ra   r   )r   rD  )r   rD  )r   rD  c                     t        |      }t        |      }|j                  j                  |j                  |      }|j                  |k(  sJ y)z1Tests output sizes for the naturalearth datasets.N)r   r    r   r   shape)r#   r   expected_shapenaturalearth_lowresnaturalearth_citiesworldcapitalsr   s           r(   test_integration_natural_earthz3TestShapelyInterface.test_integration_natural_earth  sH      -.01ll  !2!2I>yyN***r*   )0rK   rL   rM   r]   r   markparametrizer   r   r   param
SCIPY_MARKr	   r   r   r   skipifrq   GEOS_GE_310r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r%  r*  r,  r1  r6  r8  r:  r<  rA  rL  rN   r*   r(   r   r      s.   / [[!2&#aS)Aq6"aSM		
**
 [[[>4uQPQ{*ST3 U3 [[)\V\\(*%MwW [[(3r2tT*B/3tT3,qc23q!Q?QF+FF+,A
 3r2tT2B7D$S) Aq!QA FF+,
 s4tT2B7s1aR("-s2r2r*QC0z66"23R8Q1a"-Q5%01#6S#sC01#6RQ*QF3FF+,
 BAq)A3/D$S) BB# D$1%A E5$- Aq!QA $Aq!Q $Aq%' $CeU+ $Cc3' $BAq!A $BB#s^	
aD+EaJ+ 2
 [[F...7KL[[' Cc3' Cc3' c3 Z 4'c3A Q$4545 |, Q$4545 '(=> BsC%1+.&(=>Y1	
4j*k4 Ml*
 [[F...7KLC MC [[	
OO [[#U  OO [[#2J!2&WbM^R YO	
	0	0
> [[Iy)*Y	*+	
!!FG [[)\V\\(*%MwW [[(()B84*+qcA3Z8L>QFQF#3401B8<23qcA3Z@L>QFQF+;<02HIQCRSQT:V !78I&
 01B8<'"b2()QC!:6R %&qc
 )*qc

 ./1#s< Q!Q  !"qc

 (A3*5'(R #$Q!Q  +,R Q!Q  $R $%&qc
 $)*qc
 $%&qc
 $ Q!Q  $!"Ru_	
bF+GbL+( [[$ !"#b"X. "D)B84Vb"XCdC-t4sQCjA	

0
0
0-U [[('"b2/"b:1#s4	
**6 [[Iy)*Y	*+	
  F [[\D%=9[[D\QC!:&D\QC!:&	

* :
* [[\D%=9[[fAA/0i Aq6Aq6"23	
* :** [[\D%=9[[B8Vb"X	
* :* [[.u>[[*49i049d3ib2RSTDQFQF+d3ib-BCD1AA'$s)T#Y)?@AA!qc
T#YK01		
1 ?1& [[.u>[[4D%?O"Da1#g!NOD$/?!CQ$q'] ST4/?!CQ!W MN*,DEqDQRG9}U	 CI 6QC@A3l;Q!WEF	
 1! ?"14499- [[#	
++r*   r   )"mathr   numpyr   r  shapely.geometryr   r   r   r   r   r	   r  r
   r   r   r   rq   r   numpy.testingr   scipy.sparser   	HAS_SCIPYImportErrorrM  rQ  rP  r   rP   skipusefixturesr   r   rN   r*   r(   <module>r\     s         8 8 '  ,&I [[I6KL
J3 J3Z[( [(~ 56 *  * 7  *Fl+ l+m  Is   C CC