
    hQ                     B   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
Z
d dl
mZmZmZ d dlmZmZ d dlZd dlmZmZ  ej*                  d       d dlZd dlmZ d dlmZ  ej8                  ej:                  j=                  e            d	z  Z d
 Z!d Z"d8dZ#ejH                  jK                  e
jL                  dk  d      ejH                  jO                  dd ejP                  dejH                  jK                  e
jL                  dk  d            g      ejH                  jO                  dg d      ejH                  jO                  dg dg d      d                             Z)ejH                  jK                   ee
jT                         ed      k  d      ejH                  jO                  dd d!g      d"               Z+ejH                  jK                   ee
jT                         ed      k  d      ejH                  jO                  dd d!g      d#               Z,ejH                  jO                  dd d!g      d$        Z-d% Z.d& Z/ejH                  jO                  d'd(d)g      ejH                  jO                  d*g d+      d,               Z0d- Z1e jd                  d.        Z3ejH                  jO                  dddg      ejH                  jO                  dg d      d/               Z4d0 Z5ejH                  jK                   ee
jT                         ed      k  d      ejH                  jO                  dddg      ejH                  jO                  dg d      d1                      Z6ejH                  jK                   ee
jT                         ed      k  d      ejH                  jO                  dd d!g      d2               Z7d3 Z8d4 Z9ejH                  jO                  dddg      ejH                  jO                  dg d      d5               Z:d6 Z;d7 Z<y)9    N)Version)
ArrowDtype)
MultiPointPointbox)GeoDataFrame	GeoSeries)assert_geodataframe_equalassert_geoseries_equalpyarrow)featherdatac                     t        t        j                        t        d      k  r| j                  S t        j                  |       S N14.0.0)r   pa__version__	_pa_tabletabler   s    S/var/www/html/immo/lib/python3.12/site-packages/geopandas/io/tests/test_geoarrow.pypa_tabler      0    r~~!22xx    c                     t        t        j                        t        d      k  r| j                  S t        j                  |       S r   )r   r   r   	_pa_arrayarray)r   s    r   pa_arrayr   !   r   r   c                 0   | d   j                   }t        j                  j                  |      r{| d   j	                  d      j
                  }|d   j	                  d      j
                  }t        j                  |      j                  t        j                  |            sJ t        j                  j                  t        j                  |t        j                  |      d      | d   j                         }t        j                  j                  t        j                  |t        j                  |      d      |d   j                         }| j                  d| j                  j                  d      |      } |j                  d|j                  j                  d      |      }nkt        j                  j                  |      rK| d   j	                  d      }|d   j	                  d      }	t!        |j                   j"                        D ]Y  }
t        j                  |j                  |
            j                  t        j                  |	j                  |
                  rYJ  t        j$                  j                  t!        |j                   j"                        D 
cg c]J  }
t        j                  |j                  |
      t        j                  |j                  |
            d      L c}
t'        | d   j                               }t        j$                  j                  t!        |	j                   j"                        D 
cg c]J  }
t        j                  |	j                  |
      t        j                  |	j                  |
            d      L c}
t'        |d   j                               }| j                  d| j                  j                  d      |      } |j                  d|j                  j                  d      |      }| j                  ||      ry | j                  j                  |j                        s%t)        d| j                   d	|j                         |r| j                  j                  |j                  d
      sf| j                  j*                  |j                  j*                  k(  s9t)        d| j                  j*                   d	|j                  j*                         | j                  j,                  D ]I  }| j                  j                  |      j                  |j                  j                  |      d
      rIJ  | j.                  D ]  }t        j0                  | j3                  |      j4                        }t        j0                  |j3                  |      j4                        }|j                  |      rqt)        d| d|j7                  |              t)        d      c c}
w c c}
w )Ngeometryr   g        )type   )fields)check_metadatazSchema not equal
Left:
z
Right:
TzMetadata not equal
Left:
zColumn 'z' not equal:
z#Tables not equal for unknown reason)r!   r   typesis_fixed_size_listchunkvaluespcis_nanequalsFixedSizeListArrayfrom_arraysreplace_with_mask
set_columnschemafield	is_structrange
num_fieldsStructArraylistAssertionErrormetadatanamescolumn_namesconcat_arrayscolumnchunksdiff)leftrightr$   	geom_typeleft_valuesright_values
left_geomsright_geomsleft_arr	right_arricola_lefta_rights                 r   assert_table_equalrL   (   s   Z %%I 
xx""9-:&,,Q/66Z(..q188yy%,,RYY|-DEEE**66  bii.DcJj!&& 7 

 ++77  ryy/FLz"'' 8 
 q$++"3"3J"?L  ELL$6$6z$BKP			I	&
#))!,*%++A.	x}}//0 	VA99X^^A./66ryyQRAS7TUUU	V ^^//
 x}}778	  $$NN1%ryy1B'CS Z(--. 0 

 nn00
 y~~889	  $$OOA&		)//!2D(Es j)../ 1 
 q$++"3"3J"?L  ELL$6$6z$BKP{{5{8;;ell+'}Ju||nM
 	
 {{!!%,,t!D;;''5<<+@+@@$1$++2F2F1G H$||4457  ;;$$ 	C;;$$S)00""3' 1   	
    W!!$++c"2"9"9:""5<<#4#;#;<}}W% 8C5v{{7?S>T!UVV	W >
??_s   (AXAX)   	   r   z)Checking for empty is buggy with GEOS<3.9)reasondimxyxyz)rM   
   r   z)Cannot write 3D geometries with GEOS<3.10)marksgeometry_type)point
linestringpolygon
multipointmultilinestringmultipolygonzgeometry_encoding, interleaved))WKBNgeoarrowTr^   F)r\   zgeoarrow-interleavedzgeoarrow-separated)idsc                    t         dz  }| |dk(  rdndz   }t        j                  |d| dz        }t        j                  |d         |d<   |d   j                  d	      |d<   t        |      }d |j                  j                  _	        |d
k(  rd| d}nd| |rdnd d}t        j                  ||z        }t        |j                  ||            }	|	j                  d       }	d }
|d
k(  ru|dk(  rp| j                  d      r_t        j                  t!        j"                  |j                  j$                               }
|	j'                  |
      }	|j'                  |
      }t)        |	|       |d
k7  r| dk(  ry t+        |j                  j                  ||            }|
|j'                  |
      }|j-                  |d   j/                  d            sJ y )Nr^   rR   _z example-
-wkb.arrowr    
row_numberint32r\   z-interleaved.arrowgeometry_encodinginterleavedmultirV   r   )	DATA_PATHr   read_featherr	   from_wkbastyper   r    r   crs
read_tabler   to_arrowreplace_schema_metadata
startswithr   npasarrayis_emptyfilterrL   r   r+   r'   )rU   rP   rj   rk   	base_pathsuffixdffilenameexpectedresultmask_nonempty
result_arrs               r   test_geoarrow_exportr   v   s   6 J&IcUld;F 
		iHVHJ*GG	HB'':7BzN,'..w7B|	b	B BKK E!fXZ0fXn%LFS!!)h"67H 
&7[QF ++D1FMU"5L$$W-
 R[[-A-A,A!BC}-??=1vx( E!mw&> 	
/[ 	 	
J
  &&}5
Xj177:;;;r   z2.0.2z4from_ragged_array failing with read-only array inputencodingr\   r^   c                 T   t        dddd      }t        |gdgdgd      }t        |j                  |             }t        j                  |dt
        i      }t        |t              sJ t        |j                  d	   t
              sJ t        |j                  d
   t
              sJ y )Nr   rS   r"   a)r    rH   srj   types_mapper)to_pandas_kwargsrH   r   )r   r   r   rs   
from_arrowr   
isinstancedtypes)r   ggdfr   gdf_roundtrips        r   test_geoarrow_to_pandas_kwargsr      s     	Aq"bA
QCqc>
?CS\\H\=>E ++ <M m\222m**3/<<<m**3/<<<r   c                    t        j                  d       t        t        dddd      gd      }|j                  j                  d      |d<   t        |j                  |             }t        j                  |j                  j                  d	      j                  d
         }|d   d   d   dk(  sJ t        j                  |j                  j                  d      j                  d
         }|d   d   d   dk(  sJ t        j                  |      }t        ||       |j                  j                  dk(  sJ |j                   j                  dk(  sJ y )Npyprojr   rS   	epsg:4326r    rq   z	epsg:3857geom2r   r       ARROW:extension:metadatarq   idcode  i  )pytestimportorskipr   r   r    to_crsr   rs   jsonloadsr0   r1   r8   r   r
   rq   r   )r   r   r   meta1meta2roundtrippeds         r   #test_geoarrow_multiple_geometry_crsr      s5    !
Q2r!2 3
EC<<&&{3CLcllXl>?FJJJ'001LME <f%---JJG$--.IJE <f%---**62Lc<0<<{***99==K'''r   c                    t        j                  d       t        j                  dd       t        t        dddd      gdd	      }|j	                  | 
      j                         \  }}t        j                  j                  |      }|j                  dk(  sJ | dk(  r|j                  d   dk(  sJ 	 t        j                  |j                  d         }|d   d   d   dk(  sJ t        t        dddd      g      }|j	                  | 
      j                         \  }}t        j                  j                  |      }|j                  dk(  sJ y )Nr   r   r   
minversionr   rS   r   geom)rq   namer   r\      ARROW:extension:names   geoarrow.wkbr   rq   r   r   r   rc   )r   r   r	   r   rs   __arrow_c_array__r   Field_import_from_c_capsuler   r8   r   r   )r   gserschema_capsule_r1   metas         r   test_geoarrow_series_name_crsr      s=   
!
	h7c!QB'(kGDASSUNAHH++N;E:: u 	./?B	! ::enn%@ABD;tV$,,, c!QB'()DASSUNAHH++N;E::r   c                  T   t        t        dddd      gd      } t        j                  t        d      5  | j                  d       d d d        t        j                  t        d      5  | j                  j                  d       d d d        y # 1 sw Y   JxY w# 1 sw Y   y xY w)	Nr   rS   r   r   zExpected geometry encodingmatchinvalidr   )r   r   r   raises
ValueErrorrs   r    )r   s    r   "test_geoarrow_unsupported_encodingr     s    
Q2r!2 3
EC	z)E	F 2y12 
z)E	F ;	:; ;2 2; ;s   B,BBB'c            
         t        dt        dd      t        dddd      gid      } t        j                  t
        d      5  | j                  d	       d d d        t        dt        dd      t        d
dg      gid      } t        | j                  d	            }|j                  j                  d      j                  d   dk(  sJ y # 1 sw Y   xxY w)Nr    r   rS   r   rq   z*Geometry type combination is not supportedr   r^   r   )r   r   )r"   r"   r   s   geoarrow.multipoint)r   r   r   r   r   r   rs   r   r   r0   r1   r8   r   r   s     r   "test_geoarrow_mixed_geometry_typesr     s    
	eAqk3q!R#456C
 
z)U	V 3z23 	eAqk:vv.>#?@AC cllZl@AFJ'001HI!	"	"3 3s   CCrA   rV   rX   zencoding, interleaved))r\   Tr]   r_   c                    t        |dk(  rt        dd      nt        dddd      d gd      }| dk(  rd|dk(  r_|r]t        t        j
                        t        d      k  r8t        j                  t        d	      5  |j                  | |
       d d d        y t        |j                  | |
            }|d   j                  dk(  sJ |d   j                         j                         ddgk(  sJ y # 1 sw Y   y xY w)NrV   r   rS   r   r   r^   z15.0.0z@Converting point geometries with missing values is not supportedr   ri   r    r"   FT)r   r   r   r   r   r   r   r   r   rs   r   
null_countis_null	to_pylist)r   rk   rA   r   r   s        r   test_geoarrow_missingr   *  s     !*g!5%1+3q!R;LdSC
 	J BNN#gh&77]]T
 	N LL8LM		N
 	cllX;lWXF*((A---*%%'113t}DDD	N
 	s   9C//C8c            	      n   t        dt        dd      t        dd      t               gi      } t        | j                  d            }|d   j                  j
                  j                  dk(  sJ |d   j                  j                  dk(  sJ t        | j                  dd	            }|d   j                  j
                  j                  d
k(  sJ |d   j                  j                  dk(  sJ t        j                  |d   j                  d      j                  j                         dd d         j                         sJ t        dt        ddd      t        ddd      t               gi      } t        | j                  d            }|d   j                  j
                  j                  d
k(  sJ |d   j                  j                  dk(  sJ t        | j                  dd	            }|d   j                  j
                  j                  dk(  sJ |d   j                  j                  dk(  sJ y )Nr    r   r"   r^   r   rQ      T)rj   	include_zrR   rM   F)r   r   r   rs   r!   value_fieldr   	list_sizerv   isnanr'   r(   to_numpyall)r   r   s     r   test_geoarrow_include_zr   F  s   

U1a[%1+uw$GH
ICS\\J\?@E!!--22d:::!!++q000S\\J$\OPE!!--22e;;;!!++q00088E*%++A.55>>@AFGKKMMM

U1a^U1a^UW$MN
OCS\\J\?@E!!--22e;;;!!++q000S\\J%\PQE!!--22d:::!!++q000r   c               #      K   t        j                  d      } | j                          	 d  | j                          y # | j                          w xY ww)Ngeoarrow.pyarrow)r   r   register_extension_typesunregister_extension_types)gps    r   with_geoarrow_extension_typesr   ]  sC     			/	0B!(
%%'%%'s   &A> AAAc                    t         dz  }| |dk(  rdndz   }t        j                  |d| dz        }t        j                  |d         |d<   |d   j                  d	      |d<   t        |      }d |j                  j                  _	        t        j                  d
       t               5  t        |j                  d            }t        |d   j                   t"        j$                        sJ t        |j                  d            }t        |d   j                   t"        j$                        sJ t        |j                  dd            }t        |d   j                   t"        j$                        sJ 	 d d d        y # 1 sw Y   y xY w)Nr^   rR   rb   rc   rd   re   r    rf   rg   r   r\   r   Fri   )rm   r   rn   r	   ro   rp   r   r    r   rq   r   r   r   r   rs   r   r!   r   ExtensionTyperU   rP   rz   r{   r|   result1result2result3s           r   )test_geoarrow_export_with_extension_typesr   g  sa    J&IcUld;F 
		iHVHJ*GG	HB'':7BzN,'..w7B|	b	B BKK
*+	&	( F2;;;?@'*-22B4D4DEEE2;;;DE'*-22B4D4DEEE2;;QV;WX'*-22B4D4DEEEF F Fs   )CFF
c                  6   t        ddgd      } t        dgd gdd      }t        j                  t              5  | j	                  d       d d d        t        j                  t              5  |j	                  d       d d d        t        | j	                  d	            }t        j                  |      }t        | |       t        |j	                  d	            }t        j                  |      }t        ||       y # 1 sw Y   xY w# 1 sw Y   xY w)
NrI   r    )columnsr    r"   )rI   r    r    r^   r   r\   )r   r   r   NotImplementedErrorrs   r   r   r
   )	gdf_emptygdf_all_missingr   r   s       r   test_geoarrow_export_emptyr     s    eZ%8:NI"$(:O
 
*	+ 9Z89 
*	+ ?  : >? i((5(ABF**62Li6o...GHF**62Lo|<9 9? ?s   D/DDDc                 B   t         dz  }| |dk(  rdndz   }t        j                  |d| dz        }t        j                  |d         |d<   t        |      }d |j                  _        t        j                  |d| dz        }t        j                  |      }t        ||       t        j                  |d| dz        }t        j                  |      }t        ||       t        j                  |d| d	z        }	t        j                  |	      }
t        |
|       y )
Nr^   rR   rb   rc   rd   re   r    z-interleaved.arrowrh   )rm   r   rn   r	   ro   r   r    rq   rr   r   r
   )rU   rP   rz   r{   r|   table1r   table2r   table3r   s              r   test_geoarrow_importr     s   " J&IcUld;F 
		iHVHJ*GG	HB'':7BzN	b	BBKKO	hvhj,I IJF%%f-Ggr*	hvh>P,Q QRF%%f-Ggr*	hvhf,E EFF%%f-Ggr*r   c                 f   t        j                  d       t        t        dddd      g      }|j                  j
                  |d<   t        j                  t        |j                  |                   }t        ||       |j                  dk(  sJ t        j                  t        |dg   j                  |                   }|j                  dk(  sJ t        j                  t        |j                  |             d      }|j                  dk(  sJ t        ||j                  d             y )Nr   r   rS   r   centroidr   r    )r   r   r   r   r    r   r   r   rs   r
   active_geometry_nameset_geometry)r   r   r   s      r   $test_geoarrow_import_geometry_columnr     s    !
Q2r!2 3
4Cll++C
O$$XcllXl.V%WXFfc*&&*444$$j\"++h+GHF &&*444$$9:ZF &&*444fc&6&6z&BCr   c                     t        j                  dd       t        j                  g dg dd      } t        j                  t
        d      5  t        j                  |        d d d        t        j                  t
        d	      5  t        j                  | d
   j                  d             d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)Nr   r   r   )r   r"   r   )g?g?g333333?)r   bzNo geometry column foundr   z No GeoArrow geometry field foundr   r   )
r   r   r   r   r   r   r   r   r	   r'   r   s    r   %test_geoarrow_import_missing_geometryr     s    
	h7HH9?;<E	z)C	D '&' 
z)K	L 2U3Z--a012 2' '2 2s   B9(C9CCc            	          t        j                  dd       t        ddgit        dddd      g      } t        j                  | j                               }t        ||        y )	Nr   r   r   rI   r"   r   rS   r   )r   r   r   r   r   rs   r
   r   s     r   &test_geoarrow_import_capsule_interfacer     sR    
	h7
s|s1aR/@.A
BC$$S\\^4Ffc*r   c           	         t        j                  d       t        dz  }| |dk(  rdndz   }t        j                  |d| dz        }t        j                  |d         |d<   t        |d	
      }t        j                  d       t               5  t        j                  t        |j                  d                  }t        ||       t        j                  t        |j                  d                  }t        ||       t        j                  t        |j                  dd                  }t        ||       d d d        y # 1 sw Y   y xY w)Nr   r^   rR   rb   rc   rd   re   r    	EPSG:3857r   r   r\   r   Fri   )r   r   rm   r   rn   r	   ro   r   r   r   r   rs   r
   r   s           r   )test_geoarrow_import_from_extension_typesr     s+    !J&IcUld;F 
		iHVHJ*GG	HB'':7BzN	bk	*B
*+	&	( /))R[[5[9:
 	"'2.))R[[:[>?
 	"'2.))R[[:5[QR
 	"'2./ / /s   B0EEc                     t        j                  d       t        j                  d      } t        j                  ddgd      }t	               5  | j                  |j                  d            }t        j                  |      }t        ||       | j                  |j                  d	            }t        j                  |      }t        ||       d
|_	        | j                  |j                               }t        j                  |      }|j                  J t        j                  |d      }t        ||       d d d        y # 1 sw Y   y xY w)Nr   r   zPOINT (1 1)zPOINT (2 2)r   r   r\   r   r^   r   test)r   )
r   r   r	   from_wktr   r   rs   r   r   r   )r   serarrr   s       r   test_geoarrow_import_geoseriesr     s   
!			/	0B


m];
MC	&	( ,hhs||e|<=%%c*vs+hhs||j|AB%%c*vs+ hhs||~&%%c*{{"""%%c7vs+!, , ,s   C1EEc            	         t        ddgit        dddd      g      } t        | j                               }|j                  }|j                  d      j                  ddd	      }t        j                  |j                  d      |g      }|j                  |      }t        j                  t        d
      5  t        j                  |       d d d        y # 1 sw Y   y xY w)NrI   r"   r   rS   r   r    s   geoarrow.unknowns   {})r   r   zUnknown GeoArrow extension typer   )r   r   r   rs   r0   r1   with_metadatar   castr   r   	TypeErrorr   )r   r   r0   	new_field
new_schema	new_tables         r   *test_geoarrow_import_unknown_geoarrow_typer   /  s    
s|s1aR/@.A
BCS\\^$E\\FZ(66%8).	
I FLLOY78J

:&I	y(I	J +	*+ + +s   8CC )T)=
contextlibr   ospathlibpackaging.versionr   numpyrv   pandasr   shapelyr   r   r   	geopandasr   r	   r   geopandas.testingr
   r   r   r   r   pyarrow.computecomputer)   r   Pathpathdirname__file__rm   r   r   rL   markskipifgeos_versionparametrizeparamr   r   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r   r   r   r   r   r    r   r   <module>r     sE     	  %    * * -  O   I    GLL23f<	K@\ 9$6   	++$$$$z1B % 	
	 W $<=  
4<		44<n G 77#33A   eZ%89
= :	

= G 77#33A   eZ%89( :	
(, eZ%89 :.;( w	&:;UE <E01. ( ( u.WF	 /
F4=. G 77#33A   u.
+
 /	 +. G 77#33A   eZ%89D :	
D,2+ u.W/	 /
/>,0+r   