
    h                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ 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mZ d dlmZmZmZ d dlmZmZmZmZ d dlmZm Z m!Z!m"Z"m#Z# d dl$Z$	 d dl%Z&d dl'Z'd d	l(m)Z) d d
l*m+Z+m,Z, e#Z. e$j^                  d        e$j^                  d      Z0d Z1d Z2e$jf                  ji                  dddg      d        Z5d Z6e$jf                  ji                  dg d      d        Z7d Z8e$jf                  ji                  dg d      d        Z9d Z:d Z;d Z<d Z=d Z>d  Z?d! Z@d" ZAd# ZBd$ ZCd% ZDd& ZEe$jf                  j                  ed'k\  d()      e$jf                  ji                  d*d+d,g      d-               ZGe$jf                  ji                  d.d+d,g      d/        ZHe$jf                  j                  ed'k  d0)      d1        ZId2 ZJd3 ZKe j                  d4        ZMd5 ZNe$jf                  j                  ed6k  d7)      e$jf                  ji                  d8e      d9               ZOe$jf                  j                  ed6k\  d7)      e$jf                  ji                  d8e      d:               ZP ej                  eRj                  d;      gd<z  eT=      ZUe"d>        ZVe$jf                  j                  d?      e"d@               ZXe$jf                  j                  d?      e"dA               ZYe"dB        ZZe"e$jf                  j                  edCk  dD)      e$jf                  ji                  dEdF e$j                  dGe$jf                  j                  edHk  dI)      J      g      dK                      Z\e$jf                  ji                  dL e!j                         D  ch c]  } | dMvr| 
 c}       e"dN               Z^e"dO        Z_e$jf                  ji                  d8e!      e"dP               Z`e$jf                  ji                  dQdRdSg      e"dT               Zae"dU        Zbe"e$jf                  ji                  dVdWdXg      dY               Zce"dZ        Zde"d[        Zee"d\        Zfe"d]        Zge"d^        Zhe"d_        Zie$jf                  j                   ee0j                         ed`      k  da)      e"db               Zke$jf                  j                  dc      e"dd               Zle"de        Zme"e$jf                  j                  df      e$jf                  ji                  dLdgdhg      di                      Zne"dj        Zoe"e$jf                  ji                  dLdkdlg      dm               Zpe"e$jf                  ji                  dLdgdhg      dn               Zqe"do        Zre"dp        Zse"dq        Zte"dr        Zue"e$jf                  ji                  d8dsdtg      du               Zvy# e-$ r Y Zw xY wc c} w )v    N)BytesIO)Version)ZipFile)__gdal_version__get_gdal_config_optionlist_layersread_dataframe	read_infoset_gdal_config_optionsvsi_listtree)DataLayerErrorDataSourceError
FieldError)
open_arrow
read_arrowwritewrite_arrow)ALL_EXTS
DRIVER_EXTDRIVERSrequires_arrow_write_apirequires_pyarrow_api)assert_geodataframe_equal)assert_frame_equalassert_index_equal	geopandaspyarrowc                     t        | d      }t        | d      }| j                  j                  d      rd}nd}t        |||       y )NT	use_arrowF.geojson)check_less_precise)r	   suffix
startswithr   )naturalearth_lowres_all_extresultexpectedr"   s       K/var/www/html/immo/lib/python3.12/site-packages/pyogrio/tests/test_arrow.pytest_read_arrowr)   1   sI    74HF9UKH"))44Z@!"fhCUV    c                     t        j                  t        d      5  t        | dz         ddd       y# 1 sw Y   yxY w)zFReading a multi-layer file without specifying a layer gives a warning.zMore than one layer found matchzsample.osm.pbfN)pytestwarnsUserWarningr   )data_dirs    r(   )test_read_arrow_unspecified_layer_warningr2   <   s4    	k)E	F 08../0 0 0s   4=zskip_features, expected)
      )   r   c                 D    t        | |      d   }t        |      |k(  sJ y )Nskip_features   r   len)naturalearth_lowresr8   r'   tables       r(   test_read_arrow_skip_featuresr>   B   s&    *-HKEu:!!!r*   c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)Nz'skip_features' must be >= 0r,   r7   r.   raises
ValueErrorr   r<   s    r(   &test_read_arrow_negative_skip_featuresrE   H   s1    	z)G	H :&b9: : :   3<zmax_features, expected))r   r   )r3   r3   )r5      )順 rG   c                 D    t        | |      d   }t        |      |k(  sJ y )Nmax_featuresr9   r:   )r<   rK   r'   r=   s       r(   test_read_arrow_max_featuresrL   M   s(     *FqIEu:!!!r*   c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)Nz'max_features' must be >= 0r,   r@   rJ   rA   rD   s    r(   %test_read_arrow_negative_max_featuresrN   U   s1    	z)F	G 9&R89 9 9rF   z%skip_features, max_features, expected))r   r   r   )r3   r   r   )r5   r   r   )r9   r5      )rO   r3   r9   )d   rP   M   )rP   rH   rQ   c                 F    t        | ||      d   }t        |      |k(  sJ y )N)r8   rK   r9   r:   )r<   r8   rK   r'   r=   s        r(   *test_read_arrow_skip_features_max_featuresrS   Z   s1     =|	E u:!!!r*   c                     ddd}t        | fddi|}t        |j                  t        j                  dd             t        | fddi|}t        |j                  t        j
                  ddgd	
             y )NTzfid >= 2 AND fid <= 3)r    wherefid_as_indexFr         fid)name)r	   r   indexpd
RangeIndexIndex)r%   kwargsdfs      r(   test_read_arrow_fidra   o   sm    *ABF	3	R%	R6	RBrxxq!!45	3	Q$	Q&	QBrxx1a&u!=>r*   c                 d    t        | ddg      }|j                  j                         ddgk(  sJ y )NT	continent)r    columnsgeometryr	   rd   tolist)r<   r&   s     r(   test_read_arrow_columnsrh   y   s3    /4+WF>>  "{J&????r*   c                     t        | dd      }t        |      t        j                  u sJ t        | d      j	                  dg      }t        ||       y )NTF)r    read_geometryr   re   rd   )r	   typer\   	DataFramedropr   )r<   r&   r'   s      r(   test_read_arrow_ignore_geometryro   ~   sV    /4uUF<2<<'''1TBGG H H vx(r*   c                 x    t        | d      }d|j                  v sJ |d   d   j                         ddgk(  sJ y )NTr   
list_int64r   r9   rf   list_field_values_filer&   s     r(   test_read_arrow_nested_typesrt      sF    2dCF6>>))),"))+1v555r*   c                     ddi}t        | dd|      }|j                  j                  j                  dk(  sJ t	        j
                  |j                  j                  j                  g d      sJ y )Nstrings_to_categoricalTF)rj   r    arrow_to_pandas_kwargscategory)abc)r	   coldtyperZ   nparray_equalvalues
categories)no_geometry_filerw   r`   s      r(    test_read_arrow_to_pandas_kwargsr      sc    6=	5	
B 66<<
***>>"&&--22ODDDr*   c                 |    t        |       \  }}t        |t              sJ t        |t        j                        sJ y )N)r   
isinstancedictr   Table)r<   metar=   s      r(   test_read_arrow_rawr      s5    01KD%dD!!!eW]]+++r*   c                 j    t        | d         d   }t        |      dk(  sJ t        dd      g k(  sJ y )Nr9   rG   /vsimem/	pyogrio_*pattern)r   r;   r   )naturalearth_lowres_vsir=   s     r(   test_read_arrow_vsir      s@    .q1215Eu: 
K8B>>>r*   c                     t        |       \  }}|d   j                  dk(  sJ t        |      dk(  sJ t        dd      g k(  sJ y Nfields)   rX   r   r   r   r   shaper;   r   )geojson_bytesr   r=   s      r(   test_read_arrow_bytesr      sO    ]+KD%>4'''u:?? 
K8B>>>r*   c                     t        |       \  }}|d   j                  dk(  sJ t        |      dk(  sJ t        dd      g k(  sJ y )Nr   )r   r9   r   r   r   r   )nonseekable_bytesr   r=   s      r(   !test_read_arrow_nonseekable_bytesr      sP    ./KD%>4'''u:?? 
K8B>>>r*   c                     t        |       \  }}|d   j                  dk(  sJ t        |      dk(  sJ t        dd      g k(  sJ y r   r   )geojson_fileliker   r=   s      r(   test_read_arrow_fileliker      sP    -.KD%>4'''u:?? 
K8B>>>r*   c                     t        | d      5 \  }}t        |t              sJ t        |t        j                        sJ t        |j                         t        j                        sJ 	 d d d        y # 1 sw Y   y xY w)NT)use_pyarrow)r   r   r   r   RecordBatchReaderread_allr   )r<   r   readers      r(   test_open_arrow_pyarrowr      si    	'T	: <ntV$%%%&'";";<<<&//+W]];;;< < <s   AA44A=c                    t        |       \  }}t        j                  t        |      dz        }t	        | |d      5 \  }}t        |t              sJ t        |t        j                        sJ d}g }|D ]  }|j                  |       |dz  } |dk(  sJ d       t        |d         |k(  sJ d       	 d d d        y # 1 sw Y   y xY w)NrW   T)
batch_sizer   r   r9   z4Should be two batches given the batch_size parameterz'First table should match the batch size)
r   mathceilr;   r   r   r   r   r   append)r<   _r=   r   r   r   counttabless           r(   test_open_arrow_batch_sizer      s    -.HAu3u:>*J	'JD	Q W V$%%%&'";";<<< 	EMM% QJE	 zQQQz6!9~+V-VV+W W Ws   A7B??C)rX      r   z;skip_features supported by Arrow stream API for GDAL>=3.8.0reasonr8   r3   r5   c                     t        j                  t        d      5  t        | |      5 \  }}	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zSskip_features are not supported for the Arrow stream interface for
    GDAL < 3.8.0zDspecifying 'skip_features' is not supported for Arrow for GDAL<3.8.0r,   r7   Nr.   rB   rC   r   )r<   r8   r   r   s       r(   )test_open_arrow_skip_features_unsupportedr      sa     
T
  +=I 	 N
			 	 		 !   AA A A		AArK   c                     t        j                  t        d      5  t        | |      5 \  }}	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z=max_features are not supported for the Arrow stream interfacez4specifying 'max_features' is not supported for Arrowr,   rJ   Nr   )r<   rK   r   r   s       r(   (test_open_arrow_max_features_unsupportedr      sa     
D
  +,G 	 L
			 	 		 r   z.returns geoarrow metadata only for GDAL>=3.8.0c                    t        |       \  }}|j                  j                  d      }|j                  d   dk(  sJ t	        j
                  |j                  d         }|d   d   d   dk(  sJ |d   d   d	   d
k(  sJ y )Nwkb_geometrys   ARROW:extension:names   geoarrow.wkbs   ARROW:extension:metadatacrsid	authorityEPSGcodei  )r   schemafieldmetadatajsonloads)r<   _metar=   r   parsed_metas        r(   !test_read_arrow_geoarrow_metadatar     s    
 12LE5LL~.E>>12oEEE**U^^,GHIKud#K0F:::ud#F+t333r*   c                 T   t        j                  dd       t        |       5 \  }}t        |t              sJ t        |t
        j                  j                        sJ t        j                  |      }d d d        t        |       \  }}j                  |      sJ y # 1 sw Y   +xY wNr   14)
minversion)r.   importorskipr   r   r   pyogrio_io_ArrowStreamr   r=   r   equals)r<   r   r   r&   r   r'   s         r(    test_open_arrow_capsule_protocolr     s    
	d3	'	( 'NT6$%%%&'++":":;;;v&	' 01KAx=="""' 's   ABB'c                    t        j                  dd      }d t        j                  d<   	 t	        |       5 \  }}t        |t              sJ t        |t        j                  j                        sJ  |j                  |      }d d d        |t        j                  d<   t        |       \  }}j                  |      sJ y # 1 sw Y   >xY w# |t        j                  d<   w xY wr   )r.   r   sysmodulesr   r   r   r   r   r   r=   r   r   )r<   r   r   r   r&   r   r'   s          r(   0test_open_arrow_capsule_protocol_without_pyarrowr     s    !!)=G "CKK	)+, 	+vdD)))fgkk&>&>???"W]]6*F	+
 ")I01KAx=="""	+ 	+
 ")Is#   C ACC CC C#c               #      K   t         j                  j                  dd       } dt         j                  d<   d  | r| t         j                  d<   y t         j                  d= y w)NPYOGRIO_USE_ARROW1)osenvironget)originals    r(   use_arrow_contextr   /  sL     zz~~148H&)BJJ"#	*2

&'JJ*+s   A A"c                     t        |       }d|j                  vsJ t               5  t        |       }d d d        d|j                  v sJ y # 1 sw Y   xY w)Nrq   )r	   rd   r   rr   s     r(   %test_enable_with_environment_variabler   :  s[     23Fv~~---		 8 678 6>>)))8 8s   AA)rX   r   rX   z+Arrow bool value bug fixed in GDAL >= 3.8.3extc                 ~   | d| z  }t        j                  t        j                  d      gdz  t              }t        j                  g d      }|g}dg}i }|dk(  rd|d	<   t        ||||fd
dd| t        ||||d
d       t        |      d   }t        j                  |d   j                         |      sJ y )Ntest*010100000000000000000000000000000000000000r   r}   TFTFTbool_col.fgbFspatial_indexPoint	EPSG:4326geometry_typer   r9   )	r~   arraybytesfromhexobjectr   r   r   to_numpy)	tmp_pathr   filenamere   r   
field_datar   r_   r=   s	            r(   test_arrow_bool_roundtripr   F  s    
 D,&H xx	C	DEIQWH xx89HJ\FF
f}"'		
   
(Jg; x #E>>%
+446AAAr*   c                    | d| z  }t        j                  t        j                  d      gdz  t              }t        j                  g d      }|g}dg}t        ||||dd	       |d
v rQt        j                  t        d      5  t        |      5  	 d d d        d d d        t        |g       5  	 d d d        y t        |      5  	 d d d        y # 1 sw Y   ?xY w# 1 sw Y   CxY w# 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   r   >   .gpkgr   zLGDAL < 3.8.3 does not correctly read boolean data values using the Arrow APIr,   rk   )
r~   r   r   r   r   r   r.   rB   RuntimeErrorr   )r   r   r   re   r   r   r   s          r(   test_arrow_bool_exceptionr   m  s   
 D,&H xx	C	DEIQWH xx89HJ\F	(Jg; ]]
 	
 H% 	 "- 		 	 ! 		 	 	 		 		 	s<   C CC 3C,	C8C	C  C),C58Dr   rX   r   c           	          t        |      \  }}| dz  }t        |||d   |d   |d   |d   xs d       |j                         sJ dD ]#  }|j                  |      j                         r#J  y )	Ntest.shpr   encodingr   geometry_namer   )r   r   r   r   )z.dbfz.prj)r   r   existswith_suffix)r   r<   r   r=   r   r   s         r(   test_write_shpr     s    01KD%*$HKj!?+?+=~ ?? 2##C(//1112r*   z-ignore:A geometry of type POLYGON is insertedc           	          t        |      \  }}| dz  }t        ||d|d   d|d   xs d       |j                         sJ y )N	test.gpkgGPKGr   MultiPolygonr   r   driverr   r   r   )r   r   r   r   r<   r   r=   r   s        r(   test_write_gpkgr    sW     01KD%+%HK$?+=~ ??r*   c           
      ^   t        |      \  }}d|d<   | dz  }t        ||dd|d   d|d   xs d	       |j                         sJ t        j                  t        |      ddgg      sJ t        ||dd
|d   d|d   xs d	       t        j                  t        |      ddgd
dgg      sJ y )Nr  r   r   r  firstr   r   r   r  layerr   r   r   second)r   r   r   r~   r   r   r  s        r(   test_write_gpkg_multiple_layersr    s     01KD%*D+%HK$?+=~ ??>>+h/7N2K1LMMMK$?+=~ >>H. 9Hn;UV  r*   c           	         t        |      \  }}| dz  }t        ||d|d   |d   |d   xs d       |j                         sJ t        j                  t        |      j                               }|d   d	k(  sJ |d
   dk(  sJ d|v sJ t        |d         t        |      k(  sJ t        t        |d         j                  |d   d   d   j                                     rJ y )N	test.jsonGeoJSONr   r   r   r   r  rl   FeatureCollectionrZ   r   featuresr   r   
properties)r   r   r   r   r   openreadr;   set
differencekeys)r   r<   r   r=   r   datas         r(   test_write_geojsonr    s   01KD%+%HK?+?+=~ ??::d8n))+,D<....<6!!!D==tJ CJ...DN&&tJ'7':<'H'M'M'OP   r*   rX      r   :OpenFileGDB write support only available for GDAL >= 3.6.0write_int64FTrX   	   r   z<OpenFileGDB write support for int64 values for GDAL >= 3.9.0)marksc           	      p   t        j                  g dd      t        j                  g dd      t        j                  g dd      t        j                  g dd      t        j                  g dd      t        j                  g dd	      g}t        j                  d
t        i|D ci c]  }|j
                  j                  | c}      }| dz  }ddi}|rddini }|s	t        dk  rt        j                         }nt        j                  t        d      }|5  t        ||fddd
d|| d d d        t        |      \  }	}|s|d   j                  d	      |d<   |d   j                  d      |d<   |	d   |d   k(  sJ t        j                   ||	d      t              sJ t#        t%        |            D ]e  }
||j&                  j(                  |
      j+                         }|j
                  ||
   j
                  k(  sJ t        j                   |||
         reJ  y c c}w # 1 sw Y   xY w)N)TFTboolr   r9   rW   rX   int16int32int64float32float64re   ztest.gdbr   r   TARGET_ARCGIS_VERSIONARCGIS_PRO_3_2_OR_LATERr  z&Integer64 will be written as a Float64r,   OpenFileGDBr   )r  r   r   rX   r   r   )r~   r   par=   pointsr}   rZ   r   
contextlibnullcontextr.   r/   RuntimeWarningr   r   astyper   ranger;   r   namesr   )r   r  expected_field_datar   r=   r   expected_metawrite_paramsctxr   ir   s               r(   test_write_openfilegdbr9    sC   ( 	$F3
'*
'*
'*
),
), HH	
4GH5u{{&H	
E *$HK(M AL	 ";<QS  &2$$&ll"J
 
 	
	
 !!$	
 	
 	
	
 X&KD%!4Q!7!>!>y!IA 13::7C;-.... >>%_ 56???3*+, >u||))!,-668||215;;;;;~~f&9!&<===>[ I,	
 	
s   -H'
!H,,H5r  )ESRI Shapefiler  r  c           	          t        |dgd      \  }}d|d<   | dt        |    z  }t        ||||d   |d   |d   xs d	
       |j                         sJ y)zATest drivers known to work that are not specifically tested aboveiso_a3r9   )rd   rK   r  r   r   r   r   r   r  N)r   r   r   r   )r   r<   r  r   r=   r   s         r(   test_write_supportedr=  O  s|     08*STUKD%
 +DDF!3 455HK?+?+=~ ??r*   c           
          t        |      \  }}t        j                  t        d      5  t	        || dz  d|d   |d   |d   xs d	       d d d        y # 1 sw Y   y xY w)
Nz$does not support write functionalityr,   r  ESRIJSONr   r   r   r   r  )r   r.   rB   r   r   r   r<   r   r=   s       r(   test_write_unsupportedrA  m  sg    01KD%	.T	U 
{"U//A>	

 
 
   "AAc           	         |j                  d      r9| j                  j                  t        j                  j                  d             |dk(  rt        j                  d       t        |      \  }}d|d<   |d| z  }t        |||d	   |d   |d
   xs d       |j                         sJ t        |      d   dk(  sJ t        ||d|d	   |d   |d
   xs d       t        |      d   dk(  sJ y )Nr!   z.Bugs with append when writing Arrow to GeoJSONr   z	.gpkg.zipz%Append is not supported for .gpkg.zipUnknownr   r   r   r   r   r   r   r   r  rG   T)r   r   r   r   ib  )r$   node
add_markerr.   markxfailskipr   r   r   r
   )requestr   r<   r   r   r=   r   s          r(   test_write_appendrL  |  s    ~~j! 	KK%UV	
 k;<01KD% &DD,&HK?+?+=~ ??Xz*c111 K?+?+=~ Xz*c111r*   z
driver,ext)GMLz.gml)
GeoJSONSeqz	.geojsonsc                 N   t        |      \  }}| dz  }t        ||d|d   |d   |d   xs d       |j                         sJ t        |d	      d
   dk(  sJ t	        j
                  t              5  t        ||dd|d   |d   |d   xs d       d d d        y # 1 sw Y   y xY w)Nztest.gmlrM  r   r   r   r   r  T)force_feature_countr  rG   )r  r   r   r   r   )r   r   r   r
   r.   rB   r   )r   r<   r  r   r   r=   r   s          r(   test_write_append_unsupportedrQ    s     01KD% *$HK?+?+=~ ??X48DKKK		' 	
U//A>	
	
 	
 	
s   2 BB$c           	          t        |       \  }}d}t        dddd       t        j                  t        d      5  t        |||d   |d   |d	   xs d
       d d d        y # 1 sw Y   y xY w)Nz%s3://non-existing-bucket/test.geojsoninvalidT)AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_NO_SIGN_REQUESTz#Failed to write features to datasetr,   r   r   r   r   rE  )r   r   r.   rB   r   r   )r<   r   r=   r   s       r(   test_write_gdalclose_errorrW    s~    01KD%6H !*%.#'	
 
.S	T 
U//A>	

 
 
s   A""A+rZ   zgeoarrow.wkbzogc.wkbc                 z   t        |      \  }}|j                  j                  d      }|j                  j                  |      j	                  d|i      }|j                  |j                  j                  ||            }| dz  }t        |||d   |d          t        |      \  }	}
|
j                  |      sJ y )Nr   ARROW:extension:nametest_geoarrow.shpr   r   r   r   )	r   r   get_field_indexr   with_metadatacastr  r   r   )r   r<   rZ   r   r=   idx	new_field	new_tabler   r   table_roundtrippeds              r(   "test_write_geometry_extension_typerc    s    
 01KD% ,,
&
&~
6C""3'557Mt6TUI

5<<++C;<I--HK?+	 'x0A$$U+++r*   c                    t        |      \  }}|j                  j                  d      }|j                  j                  |      j	                  ddi      }|j                  |j                  j                  ||            }t        j                  t        d      5  t        || dz  |d   |d   	       d d d        y # 1 sw Y   y xY w)
Nr   rY  zgeoarrow.pointzEWriting a geometry column of type geoarrow.point is not yet supportedr,   rZ  r   r   r[  )r   r   r\  r   r]  r^  r  r.   rB   NotImplementedErrorr   )r   r<   r   r=   r_  r`  ra  s          r(   test_write_unsupported_geoarrowrf    s    01KD% ,,
&
&~
6C""3'55	!12I 

5<<++C;<I	U
 	
 	**U/		
		
 	
 	
s   B>>Cc                     t        |      \  }}|j                  d      }| dz  }t        ||       |j                         sJ t        |      \  }}|d   J |d   J |j	                  |      sJ y )Nr   r   r   r   )r   drop_columnsr   r   r   )r   r<   r   r=   r   r   r&   s          r(   test_write_no_geomri    s    -.HAu~.E +%Hx ??h'LD&; (((<<r*   c                 J   t        |      \  }}t        j                  t        d      5  t	        || dz  |d   |d   xs d       d d d        | dz  }t	        |||d   d	|d   xs d
       |j                         sJ t        |      \  }}|d   d	k(  sJ y # 1 sw Y   SxY w)Nz#'geometry_type' keyword is requiredr,   r   r   r   r   )r   r   r   rD  rE  r   )r   r.   rB   rC   r   r   )r   r<   r   r=   r   meta_writtenr   s          r(   test_write_geometry_typerl    s    01KD% 
z)N	O 
z!U/A>		

 +%HK?+=~ ?? *OL!(I555'
 
s   BB"c           	          t        |      \  }}t        j                  t        d      5  t	        || dz  |d   |d   |d   xs dd	       d d d        y # 1 sw Y   y xY w)
Nz.The 'promote_to_multi' option is not supportedr,   r   r   r   r   r   T)r   r   r   promote_to_multir   r.   rB   rC   r   r@  s       r(   !test_write_raise_promote_to_multirp  6  sl    01KD%	J
 

 	z!U//A>!	


 

 

rB  c                    t        |      \  }}| dz  }t        j                  t        d      5  t	        |||d   |d   xs d       d d d        t        |      \  }}|j                  |      sJ |d   J y # 1 sw Y   2xY w)	Nr   z'crs' was not providedr,   r   r   r   )r   r   r   )r   r.   r/   r0   r   r   )r   r<   r   r=   r   meta_resultr&   s          r(   test_write_no_crsrs  G  s    01KD%*$H	k)A	B 
//A>		

 %X.K<<u%%%
 
s   A::Bc                     t        j                  g d      }t        j                  t        d      5  t        || dz  ddd       d d d        y # 1 sw Y   y xY w)	Nr#  z1The provided data is not recognized as Arrow datar,   ztest_no_arrow_data.shpr   r   re   rE  )r~   r   r.   rB   rC   r   r   r  s     r(   test_write_non_arrow_datarv  Y  sV    88ID	M
 	
 	//!$	
	
 	
 	
s   AAz16.0.0.dev0zCPyCapsule protocol only added to pyarrow.ChunkedArray in pyarrow 16c                     t         j                  g dg dg      }t        j                  t        d      5  t        || dz  ddd	       d d d        y # 1 sw Y   y xY w)
Nr#  )   r   r  z9.*should be called on a schema that is a struct of fieldsr,   ztest_no_arrow_tabular_data.shpr   r   re   rE  )r,  chunked_arrayr.   rB   r   r   ru  s     r(   !test_write_non_arrow_tabular_datarz  h  s_     Y	23D	I
 

 	77!$	
	

 

 

s   AAz,ignore:.*not handled natively:RuntimeWarningc           	         t         j                  j                  t         j                  t         j	                         t         j                               dt         j                  g d      j                         t         j                  ddg            }t         j                  t        |d      }t        j                  t        d      5  t        || d	z  d
dd       d d d        y # 1 sw Y   y xY w)NrX   )r   r9   rW   ry   rz   )lengthbuffers
dictionaryre   r|   z.*invalid dictionary indexr,   ztest_unsupported_list_type.fgbr   r   re   rE  )r,  DictionaryArrayfrom_buffersr~  r&  stringr   r}  r=   r-  r.   rB   r   r   )r   arrr=   s      r(   test_write_batch_error_messager  |  s     


)
)
bhhj"))+.#++-88S#J'	 * C HH&56E	~-I	J 
77!$	

 
 
s   C((C1c                    t         j                  t        t         j                  ddgd dgggdz  t         j	                  t         j                  t         j                         t         j                                           d      }t        j                  t        d      5  t        || dz  d	d
d       d d d        y # 1 sw Y   y xY w)N)r9   rW   )rX   rx  )r   r  rX   r  z.*not supportedr,   ztest_unsupported_map_type.shpr   r   re   rE  )r,  r=   r-  r   list_map_r&  r.   rB   r   r   )r   r=   s     r(   test_write_schema_error_messager    s    
 HH886"D6(34q8RXXZ89	
E 
z):	; 
66!$	

 
 
s   !B>>Cz"ignore:File /vsimem:RuntimeWarningr  r  c           
      r   t        | d      \  }}d|d<   t               }t        |||d|d   |d   |d   xs d	       t        |j	                               d
kD  sJ t        |      d
   d
   dk(  sJ t        |      \  }}t        |      t        |      k(  sJ t        j                  |d   |d         sJ y )Nr9   rJ   r  r   r   r   r   r   r	  r   r   )r   r   r   r;   	getbufferr   r~   r   )r<   r  r   r=   bufferactual_metaactual_tables          r(   test_write_memoryr    s     0qAKD%*DYFK?+?+=~ v!"Q&&&vq!!$... *6 2K|E
***>>+h/h@@@r*   c                     t        | d      \  }}t               }t        j                  t        d      5  t        ||d d|d   |d   |d   xs d	
       d d d        t        dd      g k(  sJ y # 1 sw Y   xY w)Nr9   rJ   z2driver must be provided to write to in-memory filer,   r   r   r   r   r   r	  r   r   r   )r   r   r.   rB   rC   r   r   r<   r   r=   r  s       r(   !test_write_memory_driver_requiredr    s    0qAKD%YF	B
 
 	U//A>	
	
 
K8B>>>
 
s    A11A:r:  r+  c                 "   |dk(  rt         dk  rt        j                  d       t        | d      \  }}t	               }t        j
                  t        d|       5  t        |||d|d	   |d
   |d   xs d       d d d        y # 1 sw Y   y xY w)Nr+  r  r  r9   rJ   z/writing to in-memory file is not supported for r,   r   r   r   r   r   r	  )r   r.   rJ  r   r   rB   rC   r   r<   r  r   r=   r  s        r(   $test_write_memory_unsupported_driverr    s     #3i#?PQ0qAKD%YF	KF8T
 
 	U//A>	

 
 
s    BBc                     t        | d      \  }}d|d<   t               }t        j                  t        d      5  t        |||d|d   |d   |d	   xs d
d       d d d        y # 1 sw Y   y xY w)Nr9   rJ   r  r   z+append is not supported for in-memory filesr,   r   r   r   r   T)r  r
  r   r   r   r   r   r   r.   rB   re  r   r  s        r(   $test_write_memory_append_unsupportedr    s     0qAKD%*DYF	#P
 
 	U//A>		

 
 
s   !A%%A.c                     t        | d      \  }}d|d<   t        d      }t        j                  t        d      5  t        ||dd	|d
   |d   |d   xs d       d d d        y # 1 sw Y   y xY w)Nr9   rJ   r  r   s   0000z5writing to existing in-memory object is not supportedr,   r  r   r   r   r   r	  r  r  s       r(   &test_write_memory_existing_unsupportedr    s    0qAKD%*DWF	E
 
 	U//A>	
	
 
 
s    A%%A.c                 l   t        |d      \  }}d|d<   t        j                  t        d      5  t	        | dz  d      5 }t        ||d	d
|d   |d   |d   xs d       ddd       ddd       t        j                  t        d      5  t        | dz  d      5 }|j	                  dd      5 }t        ||d	d
|d   |d   |d   xs d       ddd       ddd       ddd       t        dd      g k(  sJ y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   DxY w# 1 sw Y   HxY w# 1 sw Y   LxY w)zEVerify that writing to an open file handle is not currently supportedr9   rJ   r  r   z3writing to an open file handle is not yet supportedr,   ztest.geojsonwbr  r   r   r   r   r	  Nztest.geojson.zipwr   r   r   )r   r.   rB   re  r  r   r   r   )r   r<   r   r=   fzs         r(   test_write_open_file_handler  #  s^    0qAKD%*D 
#X
  (^+T2 		a K"?3"?3E~		 
#X
  X 22C8 
	A, 	$ U"&"7"&"7"I>	
	  
K8B>>>9		 		 &	 	
	 
	 s_   D C:!DD*D/ DDD*:D	?DDDDD'	#D**D3c                    |\  }}t         j                  dt         j                  t        j	                  d      g      |t         j                  |g      i      }| dz  }t        ||ddd|       t        |      \  }}|d   d   |k(  sJ ||   d   j                         |k(  sJ |j                  d	      j                          |j                  |      j                  d
      }t        |      d   }|d   d   |k(  sJ t        ||      \  }}|d   d   |k(  sJ ||   d   j                         |k(  sJ 	 t        ddi       t        ||      }	t        d      dk(  sJ 	 t        dd i       y # t        dd i       w xY w)Nre   r   r   r   r   )r   r   r   r   r   r   z.cpgz
ISO-8859-1)r   SHAPE_ENCODINGCP1254)r,  r=   r   r   r   r   r   as_pyr   unlinkencodedecoder   r   )
r   encoded_textr   textr=   r   r   miscoded
bad_schemar   s
             r(   #test_non_utf8_encoding_io_shapefiler  M  s   !NHdHH KLM "((D6"	
E *$H  x(MFE(A$&&&;q>!T)))  '') {{8$++L9HH%a(Jh"h... x(;MFE(A$&&&;q>!T))):!18 <=x(3%&678CCC 	 !14 89!14 89s   9*E2 2Fc                     t        |      \  }}t        j                  t        d      5  t	        || dz  |d   d|d   xs ddd	d
i       ddd       y# 1 sw Y   yxY w)zhProviding both encoding parameter and ENCODING layer creation option
    (even if blank) is not allowed.zKcannot provide both encoding parameter and "ENCODING" layer creation optionr,   r   r   r  r   r   CP936ENCODING )r   r   r   r   layer_optionsNro  r@  s       r(   4test_encoding_write_layer_option_collision_shapefiler    ss    
 01KD%	
 
 	z!U(/A>%r*	

 
 
rB  gpkggeojsonc           	          t        |      \  }}t        j                  t        d      5  t	        || d| z  |d   d|d   xs dd	       d d d        y # 1 sw Y   y xY w)
Nz-non-UTF-8 encoding is not supported for Arrowr,   ztest.r   r  r   r   r  )r   r   r   r   ro  )r   r<   r   r   r=   s        r(   )test_non_utf8_encoding_io_arrow_exceptionr    so     01KD%	I
 

 	se}$U(/A>	


 

 

rB  )wr.  r   r   r   r   ior   packaging.versionr   zipfiler   numpyr~   r   r   r   r   r	   r
   r   r   pyogrio.errorsr   r   r   pyogrio.rawr   r   r   r   pyogrio.tests.conftestr   r   r   r   r   r.   pandasr\   r   geopandas.testingr   pandas.testingr   r   ImportError
pytestmarkr   r,  r)   r2   rH  parametrizer>   rE   rL   rN   rS   ra   rh   ro   rt   r   r   r   r   r   r   r   r   skipifr   r   r   r   r   contextmanagerr   r   r   r   r   r   r   r   r-  r   filterwarningsr  r  r  paramr9  r   r=  rA  rL  rQ  rW  rc  rf  ri  rl  rp  rs  rv  __version__rz  r  r  r  r  r  r  r  r  r  r  r  )r  s   0r(   <module>r     s      	 
  %      G F B B  	;E
 "
   K  V#W0 2Y4IJ" K"
:
 K""
9
 +""?@
)6
E,????<W( 	!H   2s)4 5	
 "c3
 4
 y ;  4	4
##" , ,	* y )V   ) B * BF 	!*W   ) *F 

]]?@AAE

 2 2$ KL  M  KL  MD  2 y G   ++$$ 9,U % 	
	=>	 $=>@  %gnn&>> 	  * 
 
 ($2  )$2N 9T'UV
  W
8 
 
0 .)!<=, > ,* 
 
.     6 64 
 
  & &" 
 
 BNNgm44P   
 	

 JK
  L
0 
 
0 @AIv#67A 8 B A. ? ?, $4m#DE
 F 
, Iv#67
 8 
( 
 
( &? &?R 5: 5:p 
 
0  34
 5 
s#  		Rs   *W  W
WW