
    h                        d dl Z d dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZ d dlZd dlm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 d dlmZmZmZ  ej>                         d        Z  ej>                         d        Z! G d	 d
      Z" G d d      Z#ejH                  jK                  d       G d d             Z&ej>                  d        Z'ej>                  d        Z(d Z) G d d      Z*y)    N)Sequence)GeometryCollectionPointPolygonbox)GeoDataFrame	GeoSeriespoints_from_xy	read_filesjoinsjoin_nearest)assert_geodataframe_equalassert_geoseries_equal)assert_frame_equalassert_index_equalassert_series_equalc                 f   t        t        g d      t        g d      t        g d      g      }t        t        g d      t        g d      t        g d      g      }t        |g dd      }t        |g d	d
      }| j                  dk(  rg d|_        g d|_        | j                  dk(  r"d|j                  _        d|j                  _        | j                  dk(  r.g d}g d}|j                  ||g      }|j                  ||g      }| j                  dk(  rTg d}g d}|j                  ||g      }|j                  ||g      }ddg|j                  _        ddg|j                  _        i }|j                         j                         j                  ddi      }|j                         j                  g d   j                         j                  ddi      }	g d|d<   g d|	d<   t        j                  ||	dd      }
|
j                  dd !      j                         |d"<   |j                         j                         j                  ddi      }|j                         j                         j                  ddi      }	g d|d<   g d#|	d<   t        j                  ||	dd      }
|
j                  dd !      j                         |d$<   g d|d<   g d%|	d<   t        j                  ||	dd      }
|
j                  dd !      j                         |d&<   | j                  |||gS )'N)r   r   )   r   r   r   )r   r   )r   )   r   )r   r   )r   r   ))r   r   )	   r   )r      )r   r   )   r   )   r   r   r   )r   r   )r   )   r   r   r   )r   r   )r   )
   r   )r    r    )r   r    r   r      )geometrydf1)r   r   r   )r#   df2string-index)abc)defnamed-indexdf1_ixdf2_ixmulti-indexnamed-multi-indexdf1_ix1df1_ix2df2_ix1df2_ix2index
index_leftcolumns)r   r   r   r"   index_right_merge)r   r   r   r   outer)onhowr   axis
intersects)r   r   r   contains)r   r   r   within)r	   r   r   paramr6   name	set_indexnamescopyreset_indexrenameilocpdmergedrop)requestpolys1polys2r$   r%   i1i2expectedpart1part2exps              S/var/www/html/immo/lib/python3.12/site-packages/geopandas/tools/tests/test_sjoin.pydfsrY      s   454545	
F 454589	
F F9=
>C
F9=
>C}}&#	#	}}%!		!		}}%mmRH%mmRH%}}++mmRH%mmRH%$i0		$i0		 HHHJ""$++Wl4K+LE
	l			-0	1	 
  E(O"E(O
((5%H'
:C XXhQX7<<>H\HHJ""$++Wl4K+LEHHJ""$++Wm4L+MEE(OE(O
((5%H'
:C88H185::<HZE(OE(O
((5%H'
:C(388:HXMM3X..    c                     t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      g} t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      t        dd      g}g d	}t        j                  | |g d
g dg dd      }t        j                  |g d
g dg dd      }||fS )Nr   r   r"   r   r   r   r   r   )ABCDEFGH)r   r   r"   r   r   r   r   r   )TTTTTTTT)r#   attr_trackerduplicate_columnattr1attr2)TTFFTTFF)TTFFFFFF)r#   re   rf   rg   )r   	geopandasr   )geo_left	geo_rightrd   left_gdf	right_gdfs        rX   dfs_shared_attributerm   c   s     	aaaaaaaa	H 	aaaaaaaa	I <L%% ( 8EE	
H &&! 8IK		
I YrZ   c                   	   e Zd Zej                  j                  ddddh dfdddh dfdddh dfdddh d	fdddh d	fdddh d
fg      dededefd       Zej                  j                  e	j                   d      ej                  j                  dddgd      d               Zej                  j                  ddgd      d        Zej                  j                  dg dd      ej                  j                  dg d      d               Zej                  j                  dg dd      ej                  j                  dg d      d               Zd Zej                  j                  dg d      ej                  j                  d e e        e       g        e e              g      d!               Zej                  j                  dddgd      d"        Zej                  j                  dg dd      ej                  j                  dg d      d#               Zej                  j                  e	j,                   d$      ej                  j                  ddg      ej                  j                  d% ed&d&       ed'd'      g ed'd'      gd&d'gd&d&g ej2                  d(      f ed&d&       ed'd'      g ed&d&       ed'd'      gg d)g d* ej2                  d(      f ed&d&       ed&d&       ed+d+      g ed'd'      gd'd(gd&d&gd& ej2                  d(       ej2                  d,      gf ed&d&       ed&d&       ed+d+      g ed'd'       ed-d-      gg d.g d/ ej6                  d& ej2                  d(       ej2                  d,      g      fg      d0ee   d1ee   fd2                     Zej                  j                  dg d      d3        Zd4 Z ej                  j                  d5 ejB                  d6d7d8d6d7d8d9:       ejB                  d(d'd8d(d'd8d;:       ejB                  dd<d8dd<d8d=:       ejB                  dd<d8d6d7d8d>:      g      d?        Z"d@ Z#dA Z$dB Z%yC)DTestSpatialJoinz$how, lsuffix, rsuffix, expected_colsleftright>   col_left	col_rightr:   inner>   rr   rs   r7   lftrgt>   col_lftcol_rgt	index_rgt>   rw   rx   	index_lftr>   lsuffixrsuffixc                     t        dgt        dd      gd      }t        dgt        dd      gd      }t        |||||      }t        |j                        |dhz  k(  sJ y )Nr   r   )colr#   )r>   r{   r|   r#   )r   r   r   setr9   )selfr>   r{   r|   expected_colsrp   rq   joineds           rX   test_suffixeszTestSpatialJoin.test_suffixes   sf     QCeAqk]CDaSuQ{mDEtUWgN6>>"mzl&BBBBrZ   zpyproj not available)reasonrY   default-indexr&   T)indirectc                     |\  }}}}d|_         t        j                  t        d      5  t	        ||       d d d        y # 1 sw Y   y xY w)Nz	epsg:4326zCRS mismatch between the CRSmatch)crspytestwarnsUserWarningr   r   rY   r6   r$   r%   rT   s         rX   test_crs_mismatchz!TestSpatialJoin.test_crs_mismatch   sF     %(!sC\\+-KL 	#sO	 	 	s   A  A	c                     |\  }}}}t        j                  t        d      5  t        ||d       d d d        y # 1 sw Y   y xY w)Nz:sjoin\(\) got an unexpected keyword argument 'extra_param'r   test)extra_param)r   raises	TypeErrorr   )r   rY   _r$   r%   s        rX   test_unknown_kwargsz#TestSpatialJoin.test_unknown_kwargs   sD    3Q]]O
 	0 #s/		0 	0 	0s	   ;A)r   r&   r-   r0   r1   	predicate)rA   rB   rC   c                    |\  }}}}t        ||d|      }||   j                         j                         }|j                  dd      j	                  ddi      }|d	d
g   j                  d      |d	d
g<   |dk(  r|ddg   j                  d      |ddg<   |dk(  r,|ddg   j                  d      |ddg<   |j                  d      }|dv r"|j                  d      }d |j                  _        |dk(  rK|j                  ddg      j	                  ddd      }|j                  j                  |j                  _	        |dk(  r|j                  ddg      }t        ||       y )Nrt   r>   r   
geometry_yr   r?   
geometry_xr#   r8   r$   r%   int64r   r7   r:   r-   r.   r/   r   r&   r0   	level_0_x	level_1_xindex_right0index_right1	level_0_y	level_1_yr1   r2   r3   )r   dropnarH   rN   rJ   astyperF   r6   rE   rG   r   	r   r   rY   r6   r$   r%   rT   resrW   s	            rX   
test_innerzTestSpatialJoin.test_inner   s    %(!sCC'Y?y!((*//1hh|!h,33\:<V3W!5%.188AUENO#14}-2fWo }-. M!(+Xx,@(A(H(H(QC8$%--)C55---C!CIINM!--k :;BB&4>R C C "iiooCIIO''--I 67C3$rZ   c                    |\  }}}}t        ||d|      }|dv r%||   j                  dg      j                         }n}|dk(  r%||   j                  dg      j                         }nS|dk(  r%||   j                  d	g      j                         }n)|d
k(  r$||   j                  dg      j                         }j                  dd      j	                  ddi      }|d   j                  d      |d<   |dk(  r3|d   j                  d      |d<   |d   j                  t              |d<   n/|dk(  r*|dg   j                  d      |dg<   |j                  d      }|dv r"|j                  d      }d |j                  _	        |dk(  rK|j                  d	dg      j	                  ddd      }|j                  j                  |j                  _
        |d
k(  r|j                  ddg      }t        ||       y )Nrp   r   r   r7   subsetr-   r.   r0   r   r1   r2   r   r   r?   r   r#   r8   r$   r   r   r:   r   r   r   r   r3   )r   r   rH   rN   rJ   r   floatrF   r6   rE   rG   r   r   s	            rX   	test_leftzTestSpatialJoin.test_left   s    %(!sCC&I>559%,,\N,CHHJCm#9%,,XJ,?DDFCm#9%,,[M,BGGIC))9%,,YK,@EEGChh|!h,33\:<V3WZ&&w/E
O# #L 1 8 8 AC!$]!3!:!:5!ACm#!8*o44W=C
O--)C55---C!CIINM!--k :;BB&4>R C C "iiooCIIO''--I 67C3$rZ   c                    t        j                  ddgt        g d      t        g d      gd      }t        j                  dgt        dd      gd      }t	        ||d	d
      }|j
                  j                         j                         sJ t	        ||dd
      }|j                  j                         j                         sJ t	        ||dd
      }|j                  sJ y )Nr   r"   r   r   r   r   )r   r   r   )r"   r   )r"   r   r   col2r#   g            ?)col1r#   rp   rA   r   rq   rt   )
rh   r   r   r   r   r:   isnullallr7   empty)r   polygonsnot_inr   s       rX   test_empty_joinzTestSpatialJoin.test_empty_join	  s    ))A<=<=
 ''!5sCSBT(UVfhFlK  '')--///fhG|L&&(,,...fhG|L{{{rZ   )rB   contains_properly
covered_bycoverscrossesrA   touchesrC   r   r#   c                    t        j                  ddgt        g d      t        g d      gd      }t        ||d|      }|j                  j                         j                         sJ t        ||d|      }|j                  j                         j                         sJ t        ||d	|      }|j                  sJ y )
Nr   r"   r   r   r   rp   r   rq   rt   )	rh   r   r   r   r:   r   r   r7   r   )r   r   r   r   results        rX   test_join_with_emptyz$TestSpatialJoin.test_join_with_empty  s    , ))A<=<=
 uhFiH!!((*..000uhGyI  '')--///uhGyI|||rZ   c                 *   |\  }}}}t        j                  t        d      5  t        |j                  |       d d d        t        j                  t        d      5  t        ||j                         d d d        y # 1 sw Y   DxY w# 1 sw Y   y xY w)Nz 'left_df' should be GeoDataFramer   z!'right_df' should be GeoDataFrame)r   r   
ValueErrorr   r#   r   s         rX   test_sjoin_invalid_argsz'TestSpatialJoin.test_sjoin_invalid_argsB  s{    $'!sC]]:-OP 	%#,,$	% ]]:-PQ 	%#s||$	% 	%	% 	%	% 	%s   A=B	=B	Bc                 \   |\  }}}}t        ||d|      }|dv r%||   j                  dg      j                         }n}|dk(  r%||   j                  dg      j                         }nS|dk(  r%||   j                  d	g      j                         }n)|d
k(  r$||   j                  dg      j                         }j                  dd      j	                  ddi      }|d   j                  d      |d<   |dk(  r3|d   j                  d      |d<   |d   j                  t              |d<   n/|dk(  r*|dg   j                  d      |dg<   |j                  d      }|dv r>|j                  d      }|j                  |j                        }d |j                  _        |dk(  rK|j                  d	dg      j	                  ddd      }|j                  j                  |j                  _        |d
k(  r|j                  ddg      }|dk(  r|j                         }t        ||d       y )Nrq   r   r   r:   r   r-   r/   r0   r   r1   r4   r   r   r?   r   r#   r8   r%   r   r   r7   r   index_left0index_left1)r   r   r5   rC   F)check_index_type)r   r   rH   rN   rJ   r   r   rF   reindexr9   r6   rE   rG   
sort_indexr   r   s	            rX   
test_rightzTestSpatialJoin.test_rightL  s6    %(!sCC'Y?559%,,]O,DIIKCm#9%,,XJ,?DDFCm#9%,,[M,BGGIC))9%,,YK,@EEGChh|!h,33\:<V3WZ&&w/E
O#!$]!3!:!:7!CC #L 1 8 8 ?Cm#!8*o44W=C
O--)C55--.C++ckk+2C!CIINM!--k :;BB&3-P C C "iiooCIIO''--I 67C .."C3e<rZ   z`dwithin` requires GEOS 3.10z<geo_left, geo_right, expected_left, expected_right, distancer   r   r"   )r   r   r   r   )r   r   r   r      r   )r   r"   r   r"   )r   r   r   r   expected_leftexpected_rightc                    t        j                  d|i      }t        j                  d|i      }|j                  |   j                         }	||	d<   t	        |||d|      }
t        |	j                         |
j                                y )Nr#   r:   dwithin)r>   r   distance)rh   r   rK   rH   r   r   r   )r   ri   rj   r   r   r   r>   rp   rq   expected_gdfr   s              rX   test_sjoin_dwithinz"TestSpatialJoin.test_sjoin_dwithin~  s~    b %%z8&<=&&
I'>?yy/446&4]#tUy8T<224f6G6G6IJrZ   c                     t        t        g dg d            }t        dg dit        dddd      t        dddd      t        dddd      t        dddd      g      }t        |||d	
      }t	        |j
                  |j
                         y )N)皙?g?g333333?gffffff?)g?g333333?g?r   r   id)r   r"   r   r   r   r   r   rp   )r   r>   )r   r
   r   r   r   r6   )r   r   ptspolysr   s        rX   test_sjoin_left_orderz%TestSpatialJoin.test_sjoin_left_order  s      #$8:NO
 < Aq#s#AsC#CAs#Ca#	
 sEYFC6<<3rZ   c                    t        |      }t        |      }|ddg   j                  ddi      }|d   j                  t              j                  d   |d<   |d   j                  t              j                  d   |d<   t	        ||d      }|d   j                  t              j                  d   |d   j                  t              j                  d   k(  j                         sJ |j                  dk(  sJ y )	Nr#   rE   countryr8   r   firstLetteron_attribute)   r   )r   rJ   r   strr   r   shape)r   naturalearth_lowresnaturalearth_cities	countriescitiesr   s         rX   test_sjoin_shared_attributez+TestSpatialJoin.test_sjoin_shared_attribute  s    12	./z623::FICV:W	 $-Y#7#>#>s#C#G#G#J	-  &v 5 5c : > >q A}vy}E9$$S)--a0F6N4I4I#4N4R4RST4UU
#% 	  ||w&&&rZ   z,attr1_key_change_dict, attr2_key_change_dictrM   no_merge)TFzmerge on string attributes)r   zmerge on integer attributesFzmerge on boolean attributeszmerge on mixed attributesc                 *   |\  }}|d   j                  |      |d<   |d   j                  |      |d<   |d   j                  |      |d<   |d   j                  |      |d<   t        ||d      }ddg|d   j                  k(  j                         sJ y )Nrf   rg   )rf   rg   r   r\   r]   rd   )mapr   valuesr   )r   rm   attr1_key_change_dictattr2_key_change_dictrk   rl   r   s          rX   (test_sjoin_multiple_attributes_datatypesz8TestSpatialJoin.test_sjoin_multiple_attributes_datatypes  s    8 3)$W-112GH$W-112GH&w/334IJ	'&w/334IJ	'x9KLc
f^4;;;@@BBBrZ   c                     |\  }}t        ||dg      }g d|d   j                  k(  j                         sJ h dj                  |j                        sJ d|vsJ y )Nrf   r   )r\   r]   r`   ra   rd   >   rf   
attr2_leftattr2_right
attr1_left)r   r   r   issubsetr9   )r   rm   rk   rl   r   s        rX   +test_sjoin_multiple_attributes_check_headerz;TestSpatialJoin.test_sjoin_multiple_attributes_check_header  sd    2)x'C$~(>(E(EEJJLLL5>>v~~NNN6)))rZ   c                    |\  }}|j                  dd      }|j                  dd      }t        j                  t        d      5  t	        ||d       d d d        t        j                  t        d      5  t	        ||d       d d d        t        j                  t        d      5  t	        ||d       d d d        y # 1 sw Y   nxY w# 1 sw Y   HxY w# 1 sw Y   y xY w)	Nrf   r   r?   z:Expected column attr1 is missing from the right dataframe.r   r   z9Expected column attr1 is missing from the left dataframe.z=Expected column attr1 is missing from both of the dataframes.)rN   r   r   r   r   )r   rm   rk   rl   right_gdf_dropped_attrleft_gdf_dropped_attrs         rX   &test_sjoin_error_column_does_not_existz6TestSpatialJoin.test_sjoin_error_column_does_not_exist  s    2)!*a!@ (gA >]]N
 	J (2I		J ]]M
 	J 'I		J ]]Q
 	W ')?gV		W 	W	J 	J	J 	J	W 	Ws$   C9C+CCCC$c                 
   |\  }}t        j                  t        d      5  t        ||d       d d d        t        j                  t        d      5  t        ||ddg       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)NzMActive geometry column cannot be used as an input for on_attribute parameter.r   r#   r   rf   )r   r   r   r   )r   rm   rk   rl   s       rX   $test_sjoin_error_use_geometry_columnz4TestSpatialJoin.test_sjoin_error_use_geometry_column*  s    2)]]&
 	@
 (IJ?	@ ]]&
 	K
 (IWj4IJ	K 	K	@ 	@	K 	Ks   A-A9-A69BN)&__name__
__module____qualname__r   markparametrizer   r   skipifcompat
HAS_PYPROJr   r   r   r   r   r   r   r	   r   r   r   GEOS_GE_310r   mathsqrtnparrayr   intr   r   r   rD   r   r   r   r    rZ   rX   ro   ro      s}   [[.VW&NOfg'OPfg'NOUE#FGeU$GHeU$GH	

C Cs CS C
C [[F---6LM[[U_n$EPTU V N [[U_$5E0 F0 [[	
   
 [[[*NO% P
%4 [[	
   
 [[[*NO!% P
!%F& [[		
 [[#5#79K9M"NO)+.	
($ [[U_n$EPTU% V% [[	
   
 [[[*NO$= P
$=L [[F...7UV[[UWI.[[F q!eAqk*q!AA		! q!eAqk*q!eAqk*		! q!eAqk5R=9q!AAIDIIaL)$))A,/ q!eAqk5R=9q!eCo.!YTYYq\9499Q<897"	
%LK  }	K
 !KM% / WPK" [[		
44&' [[6FLLz2z2/
 FLL##0
 FLLE*E*0
 FLLE*z2.!	
2
C32
C*W.KrZ   ro   c                      e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zej                  j                  dg d      d        Z	ej                  j                  dg d      d        Z
ej                  j                  dg d      d        Zy	)
TestIndexNamesr>   )rt   rp   rq   c                    t        dd      t        dd      g}t        d|it        j                  ddgd            }t        d|it        j                  ddgd	            }t	        |||
      }|dv r#t        ddg|ddgd      j                  d      }n"t        ddgddg|d      j                  d	      }t        ||       d|j                  _        d|j                  _        t	        |||
      }|dv r#t        ddg|ddgd      j                  d      }n"t        ddgddg|d      j                  d      }t        ||       y )Nr   r"   r#   myidx1rE   r6   r'   r(   myidx2r>   rt   rp   )r  r#   r  )r  r  r#   myidx
myidx_leftr#   myidx_rightr  )r  r  r#   r  )	r   r   rL   Indexr   rF   r   r6   rE   r   r>   geomsr$   r%   r   rT   s          rX   test_preserve_index_namesz(TestIndexNames.test_preserve_index_names;  se    q!eAqk*J.bhh1vH6UVrxxc
'J
 sCS)###q6uc
Ki! 
 $:!QUKi!  	"&(3 !		 		sCS)### !1v5#sTi% 
 $!$c
1a&eTi&  	"&(3rZ   c                    t        dd      t        dd      g}t        d|it        j                  j	                  ddgddg      	      }t        d|it        j                  j	                  d
dgdd g      	      }t        |||      }t        ddgddg|ddgddgd      }|dv r|j                  ddg      }n&|j                  ddg      }dd g|j                  _        t        ||       ddg|j                  _        dd g|j                  _        t        |||      }t        ddgddg|ddgddgd      }|dv r|j                  ddg      }n&|j                  ddg      }dd g|j                  _        t        ||       y )Nr   r"   r#   r'   r   r(   r"   r  level2rG   r  )r)   r   )r*   r   r  r  r'   r(   r)   r*   r   r   )r  r"  r#   r  r   r  r   r  )r  r"  r#   r  r   r  r  )
r   r   rL   
MultiIndexfrom_tuplesr   rF   r6   rG   r   )r   r>   r  r$   r%   r   expected_baserT   s           rX   $test_preserve_index_names_multiindexz3TestIndexNames.test_preserve_index_names_multiindex^  s    q!eAqk*--++8$Xx,@ , 
 --++8$Xt,< , 
 sCS)$*a&!*!"A
 ##$..(/CDH %.../IJH$,d#3HNN !&(3 #H-		"D/		sCS)$"Cja&! #Sz!"A
 ##$..h/GHH %..~/NOH$14#8HNN !&(3rZ   c                    t        dd      t        dd      g}t        ddg|d      }t        d|it        j                  ddgd      	      }t	        |||
      }|dv rt        ddg|ddgd      }n,t        ddgddg|dt        j                  ddgd      	      }t        ||       t	        |||
      }|dv r-t        |ddgddgdt        j                  ddgd      	      }nt        ddgddg|d      }t        ||       y )Nr   r"   r  r#   r#   r'   r(   r  r  r  r  r  r  r   r7   r  r#   r  r#   r:   r  r  )r  r  r#   )r   r   rL   r  r   r   r  s          rX    test_duplicate_column_index_namez/TestIndexNames.test_duplicate_column_index_name  s0    q!eAqk*aV?@rxxc
'I
 sCS)### !1v5#sTH
 $ !1vaVOhhSz>H 	"&(3sCS)###"Aq61a&QhhSz=H $ #Sz1a&eTH 	"&(3rZ   c                 l   t        dd      t        dd      g}t        ddg|d      }t        d|it        j                  j	                  ddgddg	      
      }t        |||      }|dv rt        ddg|ddgddgd      }n8t        ddgddg|dt        j                  j	                  ddgddg	      
      }t        ||       t        |||      }|dv r9t        |ddgddgdt        j                  j	                  ddgddg	      
      }nt        ddgddgddg|d      }t        ||       y )Nr   r"   r)  r#   r   r!  r  r"  r#  r  r  r  r'   r(   )r  r#   r  r"  r   r*  r  r+  r  )r  r"  r  r#   )r   r   rL   r$  r%  r   r   r  s          rX   +test_duplicate_column_index_name_multiindexz:TestIndexNames.test_duplicate_column_index_name_multiindex  s    q!eAqk*aV?@--++8$Wh,? , 
 sCS)####$a& %$': !f	H $ !1vaVOmm//x(0I 0 H 	"&(3sCS)###"Aq61a&Qmm//x(x0H 0 H $#&* !f$%q6 %	H 	"&(3rZ   c                     t        dd      t        dd      g}t        ddg|d      }t        d|i      }t        j                  t        d      5  t        |||       d d d        y # 1 sw Y   y xY w)Nr   r"   )r:   r#   r#   z%'index_right' cannot be a column namer   r  )r   r   r   r   r   r   )r   r>   r  r$   r%   s        rX   "test_conflicting_column_index_namez1TestIndexNames.test_conflicting_column_index_name  sl     q!eAqk*Aq6uEFJ./]]:-TU 	%#s$	% 	% 	%s   A))A2c                 b   t        dd      t        dd      g}t        ddgddg|d      }t        ddg|d      }t        |||	      }|d
v r#t        ddgddg|ddgddgd      }g d|_        n"t        ddgddgddgddg|d      }g d|_        |j	                  d      }t        ||       y )Nr   r"   r'   r(   )columncolumn_rightr#   r   g?)r2  r#   r  r  r   )r   r"   r   r   r   )column_leftr3  r#   r:   r3  )r7   r4  r3  r3  r#   r#   )r   r   r   r9   set_geometryr   r  s          rX   #test_conflicting_column_with_suffixz2TestIndexNames.test_conflicting_column_with_suffix  s     q!eAqk*1vSzuM
 sCjeDEsCS)###FSzeAC:NH H $F1v3*#sNH H ((4!&(3rZ   N)r   r   r  r   r  r  r  r'  r,  r.  r0  r6  r  rZ   rX   r  r  :  s    [[U$>? 4 @ 4D [[U$>?64 @64p [[U$>? 4 @ 4D [[U$>?14 @14f [[U$>?% @% [[U$>?!4 @!4rZ   r  _setup_class_nybb_filenamec                   X   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	g d
      d        Zd Zej                  j                   d        Zej                  j%                  d      d        Zd Zej                  j                  dg d      d        Zd Zy)TestSpatialJoinNYBBc                    t        | j                        | _        | j                  j                  | _        d}| j                  j                  D cg c]  }t        |       }}t        t        t        |d   |d   t        |d   |d   z
  |z              t        |d   |d   t        |d   |d   z
  |z                    D cg c]  \  }}t        ||      ||z   ||z
  d c}}| j                        | _
        y c c}w c c}}w )N   r   r"   r   r   )r#   
pointattr1
pointattr2)r   )r   nybb_filenamepolydfr   total_boundsr  r   zipranger   pointdf)r   Nxr(   ys        rX   setup_methodz TestSpatialJoinNYBB.setup_method  s     2 23;;??![[556SV66#  !A$!c1Q4!A$;!*;&<=!A$!c1Q4!A$;!*;&<=Aq #1a[AQQRUS 	
 7s   C> D
c                    | j                   j                  j                  }| j                   j                  ddi      j	                  d      | _         || j                   j                  j                  k7  sJ t        | j                   | j                  d      }| j                   j                  j                  |j                  j                  k(  sJ y )Nr#   new_geomr8   rp   r  )r?  r#   rE   rJ   r5  r   rC  )r   polydf_original_geom_namer   s      rX   test_geometry_namez&TestSpatialJoinNYBB.test_geometry_name.  s    $(KK$8$8$=$=!kk((*j1I(JWW
 )DKK,@,@,E,EEEEDKK6:{{##((CLL,=,====rZ   c                    t        | j                  | j                  d      }|j                  dk(  sJ |j	                         D ]   \  }}|j
                  j                  dk(  r J  d|j                  v sJ d|j                  v sJ y )Nrp   r     r   r   r<  BoroCode)r   rC  r?  r   iterrowsr#   	geom_typer9   )r   dfirows       rX   test_sjoin_leftz#TestSpatialJoinNYBB.test_sjoin_left8  s    4<<&9xx7"""kkm 	5FAs<<))W444	5rzz)))RZZ'''rZ   c                    t        | j                  | j                  d      }t        | j                  | j                  d      }|j                  dk(  sJ |j                  |j                  k(  sJ |j	                         D ]   \  }}|j
                  j                  dk(  r J  |j	                         D ]   \  }}|j
                  j                  dk(  r J  y )Nrq   r  rp      r   MultiPolygon)r   rC  r?  r   rP  r#   rQ  )r   rR  r%   rS  rT  s        rX   test_sjoin_rightz$TestSpatialJoinNYBB.test_sjoin_right@  s    4<<':DKK6:xx7"""xx399$$$kkm 	<FAs<<))^;;;	<lln 	<FAs<<))^;;;	<rZ   c                 j    t        | j                  | j                  d      }|j                  dk(  sJ y )Nrt   r  )   r   r   rC  r?  r   r   rR  s     rX   test_sjoin_innerz$TestSpatialJoinNYBB.test_sjoin_innerK  s*    4<<':xx7"""rZ   c                 P   t        | j                  | j                  dd      }|j                  dk(  sJ |j                  d   d   dk(  sJ t        | j                  | j                  dd      }|j                  dk(  sJ t        j                  |j                  d   d	         sJ y )
Nrp   rC   r   rM  r   BoroNamezStaten IslandrB   
Shape_Area)r   rC  r?  r   locr
  isnanr^  s     rX   test_sjoin_predicatez(TestSpatialJoinNYBB.test_sjoin_predicateO  s    4<<&HMxx7"""vvay$777 4<<&JOxx7"""xxq	,/000rZ   c                     t        j                  t              5  t        | j                  | j
                  dd       d d d        y # 1 sw Y   y xY w)Nrp   spandexr   )r   r   r   r   rC  r?  )r   s    rX   test_sjoin_bad_predicatez,TestSpatialJoinNYBB.test_sjoin_bad_predicateZ  s=    ]]:& 	N$,,9M	N 	N 	Ns   $AAc                     | j                   j                  ddi      }t        || j                  d      }d|j                  v sJ d|j                  v sJ y )Nr<  rb  r8   rp   r  Shape_Area_leftShape_Area_right)rC  rJ   r   r?  r9   )r   pointdf2rR  s      rX    test_sjoin_duplicate_column_namez4TestSpatialJoinNYBB.test_sjoin_duplicate_column_name_  sT    <<&&l/K&L8T[[f5 BJJ...!RZZ///rZ   r>   )rp   rq   rt   c                    | j                   j                         }d|j                  _        | j                  j                         }d|j                  _        t        |||      }|j                  j                  dk(  sJ |j                  j                  dk(  sJ |dk(  r|j                  j                  dk(  sJ y |j                  j                  dk(  sJ y )Npointidpolyidr  rq   )rC  rH   r6   rE   r?  r   )r   r>   rl  r?  r   s        rX   test_sjoin_named_indexz*TestSpatialJoinNYBB.test_sjoin_named_indexe  s     <<$$&'!!#$Hf#.~~""i///||  H,,, '>99>>X---99>>Y...rZ   c                     g d| j                   _        t        | j                  | j                   d      }|j                  dk(  sJ t        | j                   | j                  d      }|j                  dk(  sJ y )N)r   r   r   r   r   rp   r  rM  rW  )r?  r6   r   rC  r   r^  s     rX   test_sjoin_valuesz%TestSpatialJoinNYBB.test_sjoin_valuesw  s^    +4<<&9xx7"""4;;&9xx7"""rZ   c           
         t        | j                  j                  dd  | j                  d      }t        | j                  j                  dd  | j                  d      }t        | j                  j                  dd  | j                  d      }t	        j
                  | j                  j                  d d t	        j                  dd	      | j                  j                  d
d      j                  d d gd      }t        |      }t	        j
                  | j                  j                  d
d      j                  d d t	        j
                  t	        j                  dd	      t	        j                  dd	      gd      | j                  gd      }t        |      j                  d      }t	        j
                  | j                  j                  dd  t	        j                  dd	      | j                  j                  d d j                  d
d      gd      }t        |      }	|j                  |      sJ |j                  |      sJ |	j                  |      sJ y )N   rt   r  rp   rq   r   r:   r   )rE   dtyper#   r   r?   r7   )r   rC  rK   r?  rL   concatSeriesrN   r   rF   equals)
r   df_innerdf_leftdf_rightexpected_inner_dfexpected_innerexpected_right_dfr   expected_left_dfr   s
             rX   test_no_overlapping_geometryz0TestSpatialJoinNYBB.test_no_overlapping_geometry  s   
 **23/'J))"#.H**23/'JII!!"1%		}G<  ! 499"1=
 
 &&78II!!*1!5::2A>				|7C		}GD  
 
 &&78BB=Q99!!"#&		}G<  !$))*1)=
 
 %%56$$X...$$X...##G,,,rZ   zNot implementedc                 j    t        | j                  | j                  d      }|j                  dk(  sJ y )Nr<   r  rM  r]  r^  s     rX   test_sjoin_outerz$TestSpatialJoinNYBB.test_sjoin_outer  s*    4<<':xx7"""rZ   c                 j   t        t               gdz  | j                        }t        t	        j
                  | j                  |g      | j                  d      }|j                  dk(  sJ t        | j                  t	        j
                  | j                  |g      d      }|j                  dk(  sJ y )Nr   r#   r   rp   r  )   r   rM  )	r   r   r   r   rL   rw  rC  r?  r   )r   r   rR  r%   s       rX   test_sjoin_empty_geometriesz/TestSpatialJoinNYBB.test_sjoin_empty_geometries  s    '9';&<q&@dhhO299dllE23T[[fMxx7"""DLL"))T[[%,@"AvNyyG###rZ   r   )rA   rC   rB   c                 n   t        g | j                  j                        }t        | j                  |d|      j                  sJ t        | j                  |d|      j                  sJ t        || j                  d|      j                  sJ t        || j                  d|      j                  sJ y)z&Tests a completely empty GeoDataFrame.r  rt   r   rq   rp   N)r   rC  r   r   r   )r   r   r   s      rX   test_sjoin_no_valid_geomsz-TestSpatialJoinNYBB.test_sjoin_no_valid_geoms  s     bdll.>.>?T\\5gKQQQQT\\5gKQQQQUDLLgKQQQQUDLLf	JPPPPrZ   c                     t        j                  |      }|j                         }|j                  d      |_        t        j
                  ||      }d|j                  v sJ d|j                  v sJ y )Ni@ BoroCode_rightBoroCode_left)rh   r   rH   	translater#   r   r9   )r   r>  nybbnybb2r   s        rX   *test_empty_sjoin_return_duplicated_columnsz>TestSpatialJoinNYBB.test_empty_sjoin_return_duplicated_columns  sa    ""=1		0u-6>>111&..000rZ   N)r   r   r  rG  rK  rU  rZ  r_  re  rh  rm  r   r  r  rq  rs  xfailr  skipr  r  r  r  r  rZ   rX   r9  r9    s    
 >(	<#	1N
0 [[U$>?/ @/"# [[1- 1-f [['(# )#$ [[[*NOQ PQ1rZ   r9  c                     t        |       S Nr   )r   s    rX   worldr        ())rZ   c                     t        |       S r  r  )r   s    rX   r   r     r  rZ   c                 z    | ddg   }|j                  ddi      }t        ||dd      }|j                  dk(  sJ y )	Nr#   rE   r   r8   rt   rA   r   )   r   )rJ   r   r   )r  r   r   cities_with_countrys       rX   r_  r_    sN    z6*+I  &))< =I	w,W$$000rZ   c                      e Zd Zej                  j                  di ddiddiddif      d        Zej                  j                  dd      defd       Zej                  j                  d	d
      d	efd       Z	ej                  j                  d	d
      d	efd       Z
ej                  j                  dddg      ej                  j                  d	d
      d	efd              Zej                  j                  d	d
      d	efd       Zej                  j                  dddg      d        Zd Zej                  j                  dddg      d        Zd Zej                  j                  dddg      ej                  j                  d edd       edd      g edd      gddgddg ej&                  d      dgf edd       edd      g edd       edd      gddgddgddgf edd       edd      g edd       edd       edd      gg dg dg df edd       edd      g edd       edd       edd      gddgddgddgf edd       edd      g edd       edd      gddgddg ej&                  d      dgf edd       edd      g edd       edd      gddgddg ej&                  d       ej&                  d      gf edd       edd      g e ej,                  d        ej,                  d             D  cg c]  \  }}t#        ||       c}}}} ddgddgddgf edd       edd       edd      g ed!d!       edd      gg d"g d#d ej&                  d$      dgfg      d%ee   d&ee   d'ee   fd(              Zej                  j                  d edd       edd      g edd      gdgdgdgf edd       edd      g edd       edd      gddgddgddgf edd       edd      g edd       edd       edd      gg d)g d"g df edd       edd      g edd       edd       edd      gg d#g d"dd ej&                  d      gf edd       edd      g edd       edd      gddgddgdd*gf edd       edd      g edd       edd      gddgddg ej&                  d       ej&                  d+      gf edd       edd      g e ej,                  d        ej,                  d             D  cg c]  \  }}t#        ||       c}}}} ddgdgd,z  z    e ed             ddg ej,                  dd-      D  cg c]   }t+        j&                  |dz  |dz  z         " c}}} z   f edd       edd       edd      g ed!d!       edd      gg d.g d/ ej&                  d$      ddgfg      d%ee   d&ee   d'ee   fd0       Zej                  j=                  d1      d2        Zej                  j                  d3d4g d5fd!g d6fg      d7        Z y4c c}}}} w c c}}}} w c c}}} w )8TestNearest
how_kwargsr>   rt   rp   rq   c                 z    t        j                  dg i      }t        j                  dg i      }t        ||fi | y )Nr#   )rh   r   r   )r   r  rp   rq   s       rX   test_allowed_howszTestNearest.test_allowed_hows  s=     %%z2&67&&
B'78dE0Z0rZ   )r<   abcdec                     t        j                  dg i      }t        j                  dg i      }t        j                  t        d      5  t        |||       d d d        y # 1 sw Y   y xY w)Nr#   z	`how` wasr   r  )rh   r   r   r   r   r   )r   r>   rp   rq   s       rX   test_invalid_howszTestNearest.test_invalid_hows  s[    %%z2&67&&
B'78]]:[9 	0$3/	0 	0 	0s   
A""A+distance_col)Nr   c                 `   t        j                  dt        dd      t        dd      gi      }t        j                  dg i      }t        ||d|      }t	        |d   |d          |d   j                         j                         sJ |$||   j                         j                         sJ y y )Nr#   r   r   rp   r>   r  r:   rh   r   r   r   r   isnar   r   r  rp   rq   r   s        rX   test_empty_right_df_how_leftz(TestNearest.test_empty_right_df_how_left  s     %%zE!QKq!3M&NO&&
B'78%	
 	vj14
3CDm$))+//111#,',,.22444 $rZ   c                     t        j                  dt        dd      t        dd      gi      }t        j                  dg i      }t        ||d|      }|j                  sJ |||v sJ y y )Nr#   r   r   rq   r  rh   r   r   r   r   r  s        rX   test_empty_right_df_how_rightz)TestNearest.test_empty_right_df_how_right  s|     %%zE!QKq!3M&NO&&
B'78%	
 |||#6))) $rZ   c                     t        j                  dt        dd      t        dd      gi      }t        j                  dg i      }t        ||||      }|j                  sJ |||v sJ y y )Nr#   r   r   r  r  )r   r>   r  rq   rp   r   s         rX   test_empty_left_dfzTestNearest.test_empty_left_df  st     &&
U1a[%1+4N'OP%%z2&67tU,O|||#6))) $rZ   c                 `   t        j                  dt        dd      t        dd      gi      }t        j                  dg i      }t        ||d|      }t	        |d   |d          |d   j                         j                         sJ |$||   j                         j                         sJ y y )Nr#   r   r   rq   r  r7   r  )r   r  rq   rp   r   s        rX   test_empty_left_df_how_rightz(TestNearest.test_empty_left_df_how_right  s    &&
U1a[%1+4N'OP%%z2&67%	
 	vj153DEl#((*..000#,',,.22444 $rZ   c                    t        j                  dt        dd      gi      }t        j                  dt        dd      t        dd      gi      }t        |||dd      }|j	                         }t
        j                  g|d<   t
        j                  g|d<   |dk(  r'|j                         }|d   j                  d	      |d<   t        ||       y 
Nr#   r   r   r"   	distancesr>   max_distancer  r:   rt   r   
rh   r   r   r   rH   r
  nanr   r   r   r   r>   rp   rq   r   rT   s         rX   #test_empty_join_due_to_max_distancez/TestNearest.test_empty_join_due_to_max_distance.  s     %%zE!QK=&AB&&
U1a[%1+4N'OP$
 99;#%66(!#'>(H&.}&=&D&DW&MH]#!&(3rZ   c                 X   t        j                  dt        dd      t        dd      gi      }t        j                  dt        dd      gi      }t        ||ddd      }|j	                         }t
        j                  g|d<   t
        j                  g|d<   |g d	   }t        ||       y )
Nr#   r   r   r"   rq   r  r  r7   r7   r#   r  rh   r   r   r   rH   r
  r  r   r   rp   rq   r   rT   s        rX   -test_empty_join_due_to_max_distance_how_rightz9TestNearest.test_empty_join_due_to_max_distance_how_rightC  s     %%zE!QKq!3M&NO&&
U1a[M'BC$
 ::<"$&&!#CD!&(3rZ   c                    t        j                  dt        dd      t        dd      gi      }t        j                  dt        dd      t        dd      gi      }t        |||dd      }|j	                         }t
        j                  dg|d<   t
        j                  dg|d<   |dk(  r'|j                         }|d   j                  d	      |d<   t        ||       y r  r  r  s         rX   test_max_distancezTestNearest.test_max_distanceU  s    %%zE!QKq!3M&NO&&
U1a[%1+4N'OP$
 99;#%661+!#'>(H&.}&=&D&DW&MH]#!&(3rZ   c                 r   t        j                  dt        dd      t        dd      gi      }t        j                  dt        dd      t        dd      gi      }t        ||ddd      }|j	                         }t
        j                  dg|d<   t
        j                  dg|d<   |g d	   }t        ||       y )
Nr#   r   r"   r   rq   r  r  r7   r  r  r  s        rX   test_max_distance_how_rightz'TestNearest.test_max_distance_how_righth  s    %%zE!QKq!3M&NO&&
U1a[%1+4N'OP$
 ::<"$&&!!#CD!&(3rZ   z=geo_left, geo_right, expected_left, expected_right, distancesr   r   r"   )r   r   r   )r   r"   r   )r   r   r   g      ?g      ?id         r    g?r!   )r   r   r   g|Gz?r   r   r  c                 \   t        j                  d|i      }t        j                  d|i      }|j                  |   j                         }	||	d<   t	        |||      }
|dk(  }t        |	|
|       t        j                  |t              |	d<   t	        |||d      }
t        |	|
|       y )	Nr#   r:   r  rt   
check_likerv  r  r  	rh   r   rK   rH   r   r   r
  r  r   )r   ri   rj   r   r   r  r>   rp   rq   r   r   r  s               rX   test_sjoin_nearest_leftz#TestNearest.test_sjoin_nearest_leftx  s    N %%z8&<=&&
I'>?yy/446&4]#tU4G^
!,:N')xx	'G^$tU.Q!,:NrZ   )r   r   r   g      ?iL  r   r   )r   r   r"   )r   r   r   c                 X   t        j                  d|i      }t        j                  d|i      }|j                  |   j                         }||d<   |ddg   }t	        ||d      }	t        ||	       t        j                  |t              |d<   t	        ||dd      }	t        ||	       y )Nr#   r7   rq   r  r  r  r  r  )
r   ri   rj   r   r   r  rp   rq   r   r   s
             rX   test_sjoin_nearest_rightz$TestNearest.test_sjoin_nearest_right  s    ~ %%z8&<=&&
I'>?zz.1668%2\"#\:$>?tU8!,7')xx	'G^$tUnU!,7rZ   z&ignore:Geometry is in a geographic CRSc                 H   t        |      }t        |      }|ddg   j                  ddi      }t        ||d      }|j                  d   |j                  d   k(  sJ t        ||dd	      }t	        ||       t        ||dd
	      }t	        ||d       t        ||dd      }t	        |||d   dk     d       t        ||ddd
      }	|	j                  d   |j                  d   k(  sJ |	j                         }	|	d   j                  d      |	d<   t	        |	|d       y )Nr#   rE   r   r8   dist)r  r   rt   )r  r>   rp   Tr  r   )r  r  )r  r  r>   r:   r   )r   rJ   r   r   r   r   r   )
r   r   r   r   r   result1result2result3result4result5s
             rX   test_sjoin_nearest_innerz$TestNearest.test_sjoin_nearest_inner  s;    12	./z623::FICV:W	  	G}}Q6<<?222	GT!'73	FS!'7tD  	UVW!WWV_q01d	
  IF
 }}Q6<<?222.."!(!7!>!>w!G!'7tDrZ   zmax_distance,expectedN)r   r   r   r   r"   )r   r   r   r"   c                    t        j                  t        j                  d      t        j                  d            }t        j                  |t        dd      g      }t        j                  d|i      }|j                  ||dd      }t        |d   j                  d	      t        j                  |      d
       |r|d   j                         |k  sJ y y )Nr   r   r"   r#   r  T)r  r  	exclusiver:   )rN   F)check_names)shapelypointsr
  arangeappendr   rh   r   r   r   rI   rL   rx  max)r   r  rT   r  rR  r   s         rX   test_sjoin_nearest_exclusivez(TestNearest.test_sjoin_nearest_exclusive5  s     ryy|RYYq\:		%%1+/##Z$78!!\$ " 
 	=!--4-8IIh	
 &>%%'<777 rZ   )!r   r   r  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r   r  r	  rA  r
  r  r   r  r   r  listrB  r  filterwarningsr  r  ).0rE  rF  r   r
  s   00000rX   r  r    s   [[rE7+eV_ug>NO11
 [[U$670S 0 80 [[^-?@5 5 A5 [[^-?@*# * A* [[UWf$56[[^-?@*C * A 7* [[^-?@5 5 A5 [[UWf$564 74(4$ [[UWf$564 74$4  [[UWf$56[[G q!eAqk*q!AA1q! q!eAqk*q!eAqk*AAA q!eAqk*q!eAqk5A;7 q!eAqk*q!eAqk5A;7AAA q!eAqk*q!eD!n-AA;'+ q!eAqk*sC%S/2AA=)9499]+CD q!eAqk*),YRYYr]IBIIbM)JKKAq!KAAA q!eAqk5A;7sC%1+.GBGGO,a0e9	
<zO  }	O
 !O E?O{< 7|O. [[GAqk5A;'%1+aS1#Fq!eAqk*q!eAqk*AAA q!eAqk*q!eAqk5A;7 q!eAqk*q!eAqk5A;7Aytyy|$ q!eAqk*q!eD!n-AAD	 q!eAqk*sC%S/2AA=)9499]+CD q!eAqk*),YRYYr]IBIIbM)JKKAq!KA!q U2YA			!QHH1"''!Q$A+.HH q!eAqk5A;7sC%1+.)1a0Y3	
6n8  }	8
 !8 E?8o6n8* [[ HIE JE6 [[4"9C;N!O88a L\ L Is   Y 8Y'%Y/$r  )+r  collections.abcr   numpyr
  pandasrL   r  shapely.geometryr   r   r   r   rh   geopandas._compat_compatr  r   r	   r
   r   r   r   r   geopandas.testingr   r   pandas.testingr   r   r   fixturerY   rm   ro   r  r  usefixturesr9  r  r   r_  r  r  rZ   rX   <module>r     s     $    D D  "   O V V E/ E/P * *ZfK fKR_4 _4D 56t1 t1 7t1n * * * *1b8 b8rZ   