
    rbi                        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+ n# e,$ r Y nw xY we"Z- e#j.        d            e#j.        d          Z/d Z0e#j1        2                    ddg dgddgg          d             Z3d Z4e#j1        2                    dddg          d             Z5d Z6e#j1        2                    dg d          d             Z7d Z8e#j1        2                    dg d          d             Z9d  Z:d! Z;d" Z<d# Z=d$ Z>d% Z?d& Z@d' ZAd( ZBd) ZCd* ZDe#j1        2                    d+d,dg d-fd.d/gg fd0g d1dd2gfd3ddgddgfg          d4             ZEe#j1        F                    ed5k    d67          e#j1        2                    d8d9d:g          d;                         ZGe#j1        2                    d<d9d:g          d=             ZHe#j1        F                    ed5k     d>7          d?             ZId@ ZJdA ZKe#j1        F                    edBk     dC7          e#j1        2                    dDe          dE                         ZLe#j1        F                    edBk    dC7          e#j1        2                    dDe          dF                         ZM ejN        eOP                    dG          gdHz  eQI          ZRe!dJ             ZSe#j1        T                    dK          e!dL                         ZUe#j1        T                    dK          e!dM                         ZVe!dN             ZWe!e#j1        2                    dOdP e#jX        dQe#j1        F                    edRk     dS7          T          g          dU                         ZYe#j1        2                    dVdW  e jZ                    D                       e!dX                         Z[e!dY             Z\e#j1        2                    dDe           e!dZ                         Z]e#j1        2                    d[d\g          e!d]                         Z^e!d^             Z_e!e#j1        2                    d2d_d`g          da                         Z`e!db             Zae!dc             Zbe!dd             Zce!de             Zde!df             Zee!dg             Zfe#j1        F                     ee/jg                   edh          k     di7          e!dj                         Zhe#j1        T                    dk          e!dl                         Zie!dm             Zje!e#j1        T                    dn          e#j1        2                    dVdodpg          dq                                     Zke!dr             Zle!e#j1        2                    dVdsdtg          du                         Zme!e#j1        2                    dVdodpg          dv                         Zne!dw             Zoe!dx             Zpe!dy             Zqe!dz             Zre!e#j1        2                    dDd{d|g          d}                         ZsdS )~    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                            d          rd}nd}t          |||           d S )NT	use_arrowF.geojson)check_less_precise)r	   suffix
startswithr   )naturalearth_lowres_all_extresultexpectedr"   s       h/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/pyogrio/tests/test_arrow.pytest_read_arrowr)   0   sl    74HHHF9UKKKH")44Z@@ #!"fhCUVVVVVV    columns	continentiso_a3pop_estc                     t          | |          \  }}|d         J |g d}n|}t          |d                   t          |          k    sJ d S )Nr+   fieldsr.   r,   namer-   
gdp_md_est)r   sorted)naturalearth_lowresr+   meta_tableexpected_fieldss        r(   test_read_arrow_columnsr:   ;   sk    17CCCLD&>%%%RRR!$x.!!VO%<%<<<<<<<r*   c                     t          j        t          d          5  t          | dz             ddd           dS # 1 swxY w Y   dS )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_warningrB   F   s    	k)E	F	F	F 0 08..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   <A A zskip_features, expected)
      )   r   c                 ^    t          | |          d         }t          |          |k    sJ d S )Nskip_features   r   len)r6   rH   r'   tables       r(   test_read_arrow_skip_featuresrM   L   s7    *-HHHKEu::!!!!!!r*   c                     t          j        t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )Nz'skip_features' must be >= 0r<   rG   r>   raises
ValueErrorr   r6   s    r(   &test_read_arrow_negative_skip_featuresrT   R   s    	z)G	H	H	H : :&b9999: : : : : : : : : : : : : : : : : :   ;??zmax_features, expected))r   r   )rC   rC   )rE      )順 rV   c                 ^    t          | |          d         }t          |          |k    sJ d S )Nmax_featuresrI   rJ   )r6   rZ   r'   rL   s       r(   test_read_arrow_max_featuresr[   W   s9     *FFFqIEu::!!!!!!r*   c                     t          j        t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )Nz'max_features' must be >= 0r<   rO   rY   rP   rS   s    r(   %test_read_arrow_negative_max_featuresr]   _   s    	z)F	G	G	G 9 9&R88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9rU   z%skip_features, max_features, expected))r   r   r   )rC   r   r   )rE   r   r   )rI   rE      )r^   rC   rI   )d   r_   M   )r_   rW   r`   c                 `    t          | ||          d         }t          |          |k    sJ d S )N)rH   rZ   rI   rJ   )r6   rH   rZ   r'   rL   s        r(   *test_read_arrow_skip_features_max_featuresrb   d   sF     =|  	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	
                     d S )NTzfid >= 2 AND fid <= 3)r    wherefid_as_indexFr         fid)r3   )r	   r   indexpd
RangeIndexIndex)r%   kwargsdfs      r(   test_read_df_arrow_fidro   y   s    *ABBF	3	R	R%	R6	R	RBrxq!!4!4555	3	Q	Q$	Q&	Q	QBrx1a&u!=!=!=>>>>>r*   c                 n    t          | ddg          }|j                                        ddgk    sJ d S )NTr,   )r    r+   geometry)r	   r+   tolist)r6   r&   s     r(   test_read_df_arrow_columnsrs      sC    /4+WWWF>  ""{J&???????r*   c                     t          | dd          }t          |          t          j        u sJ t          | d                              dg          }t          ||           d S )NTF)r    read_geometryr   rq   r0   )r	   typerj   	DataFramedropr   )r6   r&   r'   s      r(   "test_read_df_arrow_ignore_geometryry      sv    /4uUUUF<<2<''''1TBBBGG H  H vx(((((r*   c                     ddi}t          | dd|          }|j        j        j        dk    sJ t	          j        |j        j        j        g d          sJ d S )Nstrings_to_categoricalTF)ru   r    arrow_to_pandas_kwargscategory)abc)r	   coldtyper3   nparray_equalvalues
categories)no_geometry_filer|   rn   s      r(   #test_read_df_arrow_to_pandas_kwargsr      sp    6=	5	
 
 
B 6<
****>"&-2OOODDDDDDDr*   c                     t          |           \  }}t          |t                    sJ t          |t          j                  sJ d S )N)r   
isinstancedictr   Table)r6   r7   rL   s      r(   test_read_arrow_rawr      sH    011KD%dD!!!!!eW]+++++++r*   c                     t          | d                   d         }t          |          dk    sJ t          dd          g k    sJ d S )NrI   rV   /vsimem/	pyogrio_*pattern)r   rK   r   )naturalearth_lowres_vsirL   s     r(   test_read_arrow_vsir      sW    .q12215Eu:: 
K888B>>>>>>r*   c                     t          |           \  }}|d         j        dk    sJ t          |          dk    sJ t          dd          g k    sJ d S Nr1   )   rg   r   r   r   r   shaperK   r   )geojson_bytesr7   rL   s      r(   test_read_arrow_bytesr      sd    ]++KD%>4''''u::???? 
K888B>>>>>>r*   c                     t          |           \  }}|d         j        dk    sJ t          |          dk    sJ t          dd          g k    sJ d S )Nr1   )r   rI   r   r   r   r   )nonseekable_bytesr7   rL   s      r(   !test_read_arrow_nonseekable_bytesr      se    .//KD%>4''''u::???? 
K888B>>>>>>r*   c                     t          |           \  }}|d         j        dk    sJ t          |          dk    sJ t          dd          g k    sJ d S r   r   )geojson_fileliker7   rL   s      r(   test_read_arrow_fileliker      se    -..KD%>4''''u::???? 
K888B>>>>>>r*   c                 $   t          | d          5 \  }}t          |t                    sJ t          |t          j                  sJ t          |                                t          j                  sJ 	 d d d            d S # 1 swxY w Y   d S )NT)use_pyarrow)r   r   r   r   RecordBatchReaderread_allr   )r6   r7   readers      r(   test_open_arrow_pyarrowr      s    	'T	:	:	: <ntV$%%%%%&'";<<<<<&//++W];;;;;;< < < < < < < < < < < < < < < < < <s   A%BB	B	c                    t          |           \  }}t          j        t          |          dz            }t	          | |d          5 \  }}t          |t                    sJ t          |t          j                  sJ d}g }|D ]}|	                    |           |dz  }|dk    s
J d            t          |d                   |k    s
J d            	 d d d            d S # 1 swxY w Y   d S )Nrf   T)
batch_sizer   r   rI   z4Should be two batches given the batch_size parameterz'First table should match the batch size)
r   mathceilrK   r   r   r   r   r   append)r6   _rL   r   r7   r   counttabless           r(   test_open_arrow_batch_sizer      sa   -..HAu3u::>**J	'JD	Q	Q	Q W V$%%%%%&'";<<<<< 	 	EMM%   QJEEzzzQzzz6!9~~+++-V++++W W W W W W W W W W W W W W W W W Ws   	BC$$C(+C(zdescr, columns, exp_columnsallr2   case_sensitiveNAMErepeats_dropped)r,   r,   r3   r3   keep_original_orderc                    t          | |          5 \  }}t          |t                    sJ t          |t          j        j                  sJ t          j        |          }d d d            n# 1 swxY w Y   t          j	        |d         |          sJ d|             |dgz   }|j
        |k    sJ d|             d S )Nr0   r1   zFailed for wkb_geometry)r   r   r   pyogrio_io_ArrowStreamr   rL   r   r   column_names)r6   descrr+   exp_columnsr7   r   r&   exp_columns_with_geoms           r(   test_open_arrow_columnsr      s    
'	9	9	9 '^dF$%%%%%&'+":;;;;;v&&	' ' ' ' ' ' ' ' ' ' ' ' ' ' ' >$x.+66MM8Me8M8MMMM (>*::"77779Nu9N9N77777s   AA..A25A2)rg      r   z;skip_features supported by Arrow stream API for GDAL>=3.8.0reasonrH   rC   rE   c                     t          j        t          d          5  t          | |          5 \  }}	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )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<   rG   Nr>   rQ   rR   r   )r6   rH   r7   r   s       r(   )test_open_arrow_skip_features_unsupportedr      s     
T
 
 
   +=III 	 N
		 	 	 	 	 	 	 	 	 	 	 	 	 	 		                 1   A?AA	AA	AAArZ   c                     t          j        t          d          5  t          | |          5 \  }}	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z=max_features are not supported for the Arrow stream interfacez4specifying 'max_features' is not supported for Arrowr<   rY   Nr   )r6   rZ   r7   r   s       r(   (test_open_arrow_max_features_unsupportedr     s     
D
 
 
   +,GGG 	 L
		 	 	 	 	 	 	 	 	 	 	 	 	 	 		                 r   z.returns geoarrow metadata only for GDAL>=3.8.0c                 *   t          |           \  }}|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 d S )Nr   s   ARROW:extension:names   geoarrow.wkbs   ARROW:extension:metadatacrsid	authorityEPSGcodei  )r   schemafieldmetadatajsonloads)r6   _metarL   r   parsed_metas        r(   !test_read_arrow_geoarrow_metadatar     s    
 122LE5L~..E>12oEEEE*U^,GHIIKud#K0F::::ud#F+t333333r*   c                 p   t          j        dd           t          |           5 \  }}t          |t                    sJ t          |t
          j        j                  sJ t          j	        |          }d d d            n# 1 swxY w Y   t          |           \  }}|                    |          sJ d S Nr   14)
minversion)r>   importorskipr   r   r   r   r   r   r   rL   r   equals)r6   r7   r   r&   r   r'   s         r(    test_open_arrow_capsule_protocolr   ,  s    
	d3333	'	(	( 'NT6$%%%%%&'+":;;;;;v&&	' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 011KAx=="""""""s   AB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            n# 1 swxY w Y   |t          j        d<   n# |t          j        d<   w xY wt          |           \  }}|                    |          sJ d S r   )r>   r   sysmodulesr   r   r   r   r   r   rL   r   r   )r6   r   r7   r   r&   r   r'   s          r(   0test_open_arrow_capsule_protocol_without_pyarrowr   9  s*   !)===G "CK	)+,, 	+vdD)))))fgk&>?????"W]6**F	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+
 ")II((((011KAx=="""""""s/   B) ABB) BB) BB) )B:)rg   r   rg   z+Arrow bool value bug fixed in GDAL >= 3.8.3extc                    | d| z  }t          j        t                              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                                         |          sJ d S )Ntest*010100000000000000000000000000000000000000r   r   TFTFTbool_col.fgbFspatial_indexPoint	EPSG:4326geometry_typer   rI   )	r   arraybytesfromhexobjectr   r   r   to_numpy)	tmp_pathr   filenamerq   r   
field_datar1   rm   rL   s	            r(   test_arrow_bool_roundtripr   J  s(   
 ,,,&H x	C	D	DEIQW  H x88899HJ\FF
f}}"'		
      
(Jg;    x  #E>%
+4466AAAAAAAr*   c                 P   | d| z  }t          j        t                              d          gdz  t                    }t          j        g d          }|g}dg}t          ||||dd	           |d
v rt          j        t          d          5  t          |          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |g           5  	 d d d            d S # 1 swxY w Y   d S t          |          5  	 d d d            d S # 1 swxY w Y   d S )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<   r0   )
r   r   r   r   r   r   r>   rQ   RuntimeErrorr   )r   r   r   rq   r   r   r1   s          r(   test_arrow_bool_exceptionr   q  sn   
 ,,,&H x	C	D	DEIQW  H x88899HJ\F	(Jg;    ]
 
 
 	 	
 H%%                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "--- 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !! 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ   C B."C.B2	2C5B2	6CC	C	!C00C47C4DD"Dr   rg   r   c           	         t          |          \  }}| dz  }t          |||d         |d         |d         |d         pd           |                                sJ dD ]+}|                    |                                          sJ ,d S )	Ntest.shpr   encodingr   geometry_namer   )r   r   r   r   )z.dbfz.prj)r   r   existswith_suffix)r   r6   r7   rL   r   r   s         r(   test_write_shpr    s    011KD%*$HKj!?+?+=~    ?? 2 2##C((//1111112 2r*   z-ignore:A geometry of type POLYGON is insertedc           	          t          |          \  }}| dz  }t          ||d|d         d|d         pd           |                                sJ d S )N	test.gpkgGPKGr   MultiPolygonr   r   driverr   r   r   )r   r   r   r   r6   r7   rL   r   s        r(   test_write_gpkgr
    su     011KD%+%HK$?+=~    ??r*   c           
         t          |          \  }}d|d<   | dz  }t          ||dd|d         d|d         pd	           |                                sJ t          j        t          |          ddgg          sJ t          ||dd
|d         d|d         pd	           t          j        t          |          ddgd
dgg          sJ d S )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11KD%*D+%HK$?+=~    ??>+h//7N2K1LMMMMMK$?+=~    >H. 9Hn;UV      r*   c           	      b   t          |          \  }}| dz  }t          ||d|d         |d         |d         pd           |                                sJ t          j        t          |                                                    }|d         d	k    sJ |d
         dk    sJ d|v sJ t          |d                   t          |          k    sJ t          t          |d                   	                    |d         d         d         
                                                    rJ d S )N	test.jsonGeoJSONr   r   r   r   r  rv   FeatureCollectionr3   r   featuresr1   r   
properties)r   r   r   r   r   openreadrK   set
differencekeys)r   r6   r7   rL   r   datas         r(   test_write_geojsonr    sM   011KD%+%HK?+?+=~    ??:d8nn))++,,D<.....<6!!!!D====tJ  CJJ....DN&&tJ'7':<'H'M'M'O'OPP      r*   write_int64FTrg   	   r   z<OpenFileGDB write support for int64 values for GDAL >= 3.9.0)marksc           	         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                              d
t          id |D                       }| 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            n# 1 swxY w Y   t          |          \  }}|s|d                             d	          |d<   |d                             d          |d<   |d         |d         k    sJ t          j        ||d                  t                    sJ t          t!          |                    D ]a}	||j        j        |	                                                  }
|
j        ||	         j        k    sJ t          j        |
||	                   sJ bd S )N)TFTboolr   rI   rf   rg   int16int32int64float32float64rq   c                 (    i | ]}|j         j        |S  )r   r3   ).0r   s     r(   
<dictcomp>z*test_write_openfilegdb.<locals>.<dictcomp>  s    HHH5u{HHHr*   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   rg   r   r   )r   r   parL   pointsr   
contextlibnullcontextr>   r?   RuntimeWarningr   r   astyper   rangerK   r   namesr   r   )r   r  expected_field_datarL   r   expected_metawrite_paramsctxr7   ir   s              r(   test_write_openfilegdbr>    s     	$$$F333
'***
'***
'***
),,,
),,, HH	
HH4GHHH	
 E *$HK(M ALS	 ";<<QS   
&22$&&l"J
 
 
 
 	
 	
	
 !!$	
 	
 	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 X&&KD% J!4Q!7!>!>y!I!IA 13::7CC;-..... >%_ 56?????3*++,, > >u|)!,-6688|215;;;;;~f&9!&<======> >s   	D**D.1D.r  c                     h | ]}|d v|	S ))ESRI Shapefiler  r  r+  )r,  r  s     r(   	<setcomp>rA  Q  s.       >>> 	>>>r*   c           	          t          |dgd          \  }}d|d<   | dt          |          z  }t          ||||d         |d         |d         pd	
           |                                sJ dS )zATest drivers known to work that are not specifically tested abover-   rI   )r+   rZ   r  r   r   r   r   r   r  N)r   r   r   r   )r   r6   r  r7   rL   r   s         r(   test_write_supportedrC  O  s     08*STUUUKD%
 +D5F!3555HK?+?+=~    ??r*   c           
          t          |          \  }}t          j        t          d          5  t	          || dz  d|d         |d         |d         pd	           d d d            d S # 1 swxY w Y   d S )
Nz$does not support write functionalityr<   r  ESRIJSONr   r   r   r   r  )r   r>   rQ   r   r   r   r6   r7   rL   s       r(   test_write_unsupportedrG  m  s    011KD%	.T	U	U	U 
 
{"U//A>	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   -A((A,/A,c           	      L   |                     d          r8| j                            t          j                            d                     |dk    rt          j        d           t          |          \  }}d|d<   |d| z  }t          |||d	         |d         |d
         pd           |	                                sJ t          |          d         dk    sJ t          ||d|d	         |d         |d
         pd           t          |          d         dk    sJ d S )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  rV   T)r   r   r   r   ib  )r$   node
add_markerr>   markxfailskipr   r   r   r
   )requestr   r6   r   r7   rL   r   s          r(   test_write_appendrR  |  sj    ~~j!! 
 	K%UVV	
 	
 	
 k;<<<011KD% &D,,,&HK?+?+=~    ??Xz*c1111 K?+?+=~    Xz*c111111r*   z
driver,ext)GMLz.gmlc                    t          |          \  }}| dz  }t          ||d|d         |d         |d         pd           |                                sJ t          |d	          d
         dk    sJ t	          j        t                    5  t          ||dd|d         |d         |d         pd           d d d            d S # 1 swxY w Y   d S )Nztest.gmlrS  r   r   r   r   r  T)force_feature_countr  rV   )r  r   r   r   r   )r   r   r   r
   r>   rQ   r   )r   r6   r  r   r7   rL   r   s          r(   test_write_append_unsupportedrV    sL    011KD% *$HK?+?+=~    ??X4888DKKKK		'	' 	
 	
U//A>	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   +CC	C	c           	         t          |           \  }}d}t          dddd           t          j        t          d          5  t          |||d         |d         |d	         pd
           d d d            d S # 1 swxY w Y   d S )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   rK  )r   r   r>   rQ   r   r   )r6   r7   rL   r   s       r(   test_write_gdalclose_errorr\    s    011KD%6H !*%.#'	
 	
   
.S	T	T	T 
 
U//A>	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   )A99A= A=zgeoarrow.wkbzogc.wkbc                    t          |          \  }}|j                            d          }|j                            |                              d|i          }|                    |j                            ||                    }| dz  }t          |||d         |d                    t          |          \  }	}
|
                    |          sJ d S )Nr   ARROW:extension:nametest_geoarrow.shpr   r   r   r   )	r   r   get_field_indexr   with_metadatacastr  r   r   )r   r6   r3   r7   rL   idx	new_field	new_tabler   r   table_roundtrippeds              r(   "test_write_geometry_extension_typerh    s    
 011KD% ,
&
&~
6
6C""3''557Mt6TUUI

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

5<++C;;<<I	U
 
 
 	
 	
 	**U/		
 	
 	
 	
		
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   %#CCCc                 $   t          |          \  }}|                    d          }| dz  }t          ||           |                                sJ t          |          \  }}|d         J |d         J |                    |          sJ d S )Nr   r  r   r   )r   drop_columnsr   r   r   )r   r6   r   rL   r   r7   r&   s          r(   test_write_no_geomrn    s    -..HAu~..E +%Hx   ??h''LD&; (((<<r*   c                    t          |          \  }}t          j        t          d          5  t	          || dz  |d         |d         pd           d d d            n# 1 swxY w Y   | dz  }t	          |||d         d	|d         pd
           |                                sJ t          |          \  }}|d         d	k    sJ d S )Nz#'geometry_type' keyword is requiredr<   r   r   r   r   )r   r   r  rJ  rK  r   )r   r>   rQ   rR   r   r   )r   r6   r7   rL   r   meta_writtenr   s          r(   test_write_geometry_typerq    s<   011KD% 
z)N	O	O	O 
 
z!U/A>		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 +%HK?+=~    ?? **OL!(I555555s   %AA#&A#c           	          t          |          \  }}t          j        t          d          5  t	          || dz  |d         |d         |d         pdd	           d d d            d S # 1 swxY w Y   d S )
Nz.The 'promote_to_multi' option is not supportedr<   r   r   r   r   r   T)r   r   r   promote_to_multir   r>   rQ   rR   r   rF  s       r(   !test_write_raise_promote_to_multiru  6  s    011KD%	J
 
 
 

 

 	z!U//A>!	
 	
 	
 	


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rH  c                 B   t          |          \  }}| dz  }t          j        t          d          5  t	          |||d         |d         pd           d d d            n# 1 swxY w Y   t          |          \  }}|                    |          sJ |d         J d S )	Nr   z'crs' was not providedr<   r   r   r   )r   r   r   )r   r>   r?   r@   r   r   )r   r6   r7   rL   r   meta_resultr&   s          r(   test_write_no_crsrx  G  s    011KD%*$H	k)A	B	B	B 
 
//A>		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 %X..K<<u%%%%%s   "A!!A%(A%c                     t          j        g d          }t          j        t          d          5  t          || dz  ddd           d d d            d S # 1 swxY w Y   d S )	Nr$  z1The provided data is not recognized as Arrow datar<   ztest_no_arrow_data.shpr   r   rq   rK  )r   r   r>   rQ   rR   r   r   r  s     r(   test_write_non_arrow_datar{  Y  s    8IIID	M
 
 
 	
 	
 	//!$	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   AAAz16.0.0.dev0zCPyCapsule protocol only added to pyarrow.ChunkedArray in pyarrow 16c                     t                               g dg dg          }t          j        t          d          5  t          || dz  ddd	           d d d            d S # 1 swxY w Y   d S )
Nr$  )   r      z9.*should be called on a schema that is a struct of fieldsr<   ztest_no_arrow_tabular_data.shpr   r   rq   rK  )r1  chunked_arrayr>   rQ   r   r   rz  s     r(   !test_write_non_arrow_tabular_datar  h  s     YYY			233D	I
 
 
 

 

 	77!$	
 	
 	
 	
	

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s   A!!A%(A%z,ignore:.*not handled natively:RuntimeWarningc           	      @   t           j                            t                               t                                           t                                                     dt                               g d                                          t                               ddg                    }t                               t          |d          }t          j        t          d          5  t          || d	z  d
dd           d d d            d S # 1 swxY w Y   d S )Nrg   )r   rI   rf   r~   r   )lengthbuffers
dictionaryrq   r   z.*invalid dictionary indexr<   ztest_unsupported_list_type.fgbr   r   rq   rK  )r1  DictionaryArrayfrom_buffersr  r'  stringr   r  rL   r2  r>   rQ   r   r   )r   arrrL   s      r(   test_write_batch_error_messager  |  s8    

)
)
bhhjj"))++..##++--88S#J''	 *  C HH&5566E	~-I	J	J	J 
 
77!$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   .DDDc                    t                               t          t                               ddgd dgggdz  t                               t                               t                                           t                                                                         d          }t          j        t          d          5  t          || dz  d	d
d           d d d            d S # 1 swxY w Y   d S )N)rI   rf   )rg   r}  )r   r~  rg   r  z.*not supportedr<   ztest_unsupported_map_type.shpr   r   rq   rK  )r1  rL   r2  r   list_map_r'  r>   rQ   r   r   )r   rL   s     r(   test_write_schema_error_messager    s#   
 HH886"D6(34q8RXXZZ8899 	
 	
 E 
z):	;	;	; 
 
66!$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s    C%%C),C)z"ignore:File /vsimem:RuntimeWarningr  r  c           
         t          | d          \  }}d|d<   t                      }t          |||d|d         |d         |d         pd	           t          |                                          d
k    sJ t          |          d
         d
         dk    sJ t          |          \  }}t          |          t          |          k    sJ t          j        |d         |d                   sJ d S )NrI   rY   r  r   r   r   r   r   r  r   r1   )r   r   r   rK   	getbufferr   r   r   )r6   r  r7   rL   bufferactual_metaactual_tables          r(   test_write_memoryr    s    0qAAAKD%*DYYFK?+?+=~    v!!""Q&&&&vq!!$.... *6 2 2K|E

****>+h/h@@@@@@@r*   c                 2   t          | d          \  }}t                      }t          j        t          d          5  t          ||d d|d         |d         |d         pd	
           d d d            n# 1 swxY w Y   t          dd          g k    sJ d S )NrI   rY   z2driver must be provided to write to in-memory filer<   r   r   r   r   r   r  r   r   r   )r   r   r>   rQ   rR   r   r   r6   r7   rL   r  s       r(   !test_write_memory_driver_requiredr    s    0qAAAKD%YYF	B
 
 
 
 
 	U//A>	
 	
 	
 	
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
K888B>>>>>>s   +A55A9<A9r@  r0  c                    t          | d          \  }}t                      }t          j        t          d|           5  t          |||d|d         |d         |d         pd	
           d d d            d S # 1 swxY w Y   d S )NrI   rY   z/writing to in-memory file is not supported for r<   r   r   r   r   r   r  )r   r   r>   rQ   rR   r   r6   r  r7   rL   r  s        r(   $test_write_memory_unsupported_driverr    s     0qAAAKD%YYF	TFTT
 
 
 
 
 	U//A>	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   +A99A= A=c                    t          | d          \  }}d|d<   t                      }t          j        t          d          5  t          |||d|d         |d         |d	         pd
d           d d d            d S # 1 swxY w Y   d S )NrI   rY   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>   rQ   rj  r   r  s        r(   $test_write_memory_append_unsupportedr    s     0qAAAKD%*DYYF	#P
 
 
 
 
 	U//A>		
 		
 		
 		

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   ,A<<B B c                    t          | d          \  }}d|d<   t          d          }t          j        t          d          5  t          ||dd	|d
         |d         |d         pd           d d d            d S # 1 swxY w Y   d S )NrI   rY   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AAAKD%*DWF	E
 
 
 
 
 	U//A>	
 	
 	
 	
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   +A<<B B c                    t          |d          \  }}d|d<   t          j        t          d          5  t	          | dz  d          5 }t          ||d	d
|d         |d         |d         pd           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        t          d          5  t          | dz  d          5 }|                    dd          5 }t          ||d	d
|d         |d         |d         pd           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          dd          g k    sJ dS )zEVerify that writing to an open file handle is not currently supportedrI   rY   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>   rQ   rj  r  r   r   r   )r   r6   r7   rL   fzs         r(   test_write_open_file_handler     s    0qAAAKD%*D 
#X
 
 
   (^+T22 		a K"?3"?3E~   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		               
#X
 
 
   X 22C88 
	A,, 	$ U"&"7"&"7"I>   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	                
K888B>>>>>>s   B	+B 4B B	BB	BBB=ED6(+DD6D##D6&D#'D6*E6D:	:E=D:	>EEEc                    |\  }}t                               dt                               t                              d          g          |t                               |g          i          }| dz  }t          ||ddd|           t          |          \  }}|d         d         |k    sJ ||         d                                         |k    sJ |                    d	          	                                 |
                    |                              d
          }t          |          d         }|d         d         |k    sJ t          ||          \  }}|d         d         |k    sJ ||         d                                         |k    sJ 	 t          ddi           t          ||          }	t          d          dk    sJ 	 t          dd i           d S # t          dd i           w xY w)Nrq   r   r   r   r   )r   r   r   r   r1   r   z.cpgz
ISO-8859-1)r   SHAPE_ENCODINGCP1254)r1  rL   r   r   r   r   r   as_pyr  unlinkencodedecoder   r   )
r   encoded_textr   textrL   r   r   miscoded
bad_schemar   s
             r(   #test_non_utf8_encoding_io_shapefiler  J  s/   !NHdHH KLLM  "((D6""	
 E *$H     x((MFE(A$&&&&;q>!!T))))   ''))) {{8$$++L99HH%%a(Jh"h.... x(;;;MFE(A$&&&&;q>!!T)))):!18 <===x(333%&6778CCCCC 	 !14 899999!14 89999s   7G& &G9c                     t          |          \  }}t          j        t          d          5  t	          || dz  |d         d|d         pddd	d
i           ddd           dS # 1 swxY w Y   dS )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_optionsNrt  rF  s       r(   4test_encoding_write_layer_option_collision_shapefiler    s    
 011KD%	
 
 
 
 
 	z!U(/A>%r*	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   *A%%A),A)gpkggeojsonc           	          t          |          \  }}t          j        t          d          5  t	          || d| z  |d         d|d         pdd	           d d d            d S # 1 swxY w Y   d S )
Nz-non-UTF-8 encoding is not supported for Arrowr<   ztest.r   r  r   r   r  )r   r   r   r   rt  )r   r6   r   r7   rL   s        r(   )test_non_utf8_encoding_io_arrow_exceptionr    s     011KD%	I
 
 
 

 

 	}s}}$U(/A>	
 	
 	
 	


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r  )tr3  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>   pandasrj   r   geopandas.testingr   pandas.testingr   r   ImportError
pytestmarkr   r1  r)   rN  parametrizer:   rB   rM   rT   r[   r]   rb   ro   rs   ry   r   r   r   r   r   r   r   r   r   skipifr   r   r   r   r   r   r   r   r   r   r   r2  r  filterwarningsr
  r  r  paramr>  r   rC  rG  rR  rV  r\  rh  rk  rn  rq  ru  rx  r{  __version__r  r  r  r  r  r  r  r  r  r  r  r  r+  r*   r(   <module>r     s         



       % % % % % %                             G F F F F F F F F F B B B B B B B B B B B B              	NNN;;;;;;EEEEEEEEE 	 	 	D	 "
  K      V##W W W T2}x>S$TUU= = VU=0 0 0 2Y4IJJ" " KJ"
: : :
 KKK " " "
9 9 9
 +   " " "? ? ?@ @ @
) ) )
E 
E 
E, , ,? ? ?? ? ?? ? ?? ? ?< < <W W W( !	NNNO	F8R(	>>>f@UV	i 89k:RS	 O O O 	!H    2s)44  54	 
 "c33
 
 43
 y ;   4 4	 4
# 
# 
## # #" y )V    )) B  B *)  BF 	!*W    ))  *) F 

]]?@@AAE

 
 
 2 2 2$ KLL   ML  KLL   MLD   2 +$$ 9,U %  	
 	
 	
	 => =>  =>@  $gn&&       * 
 
 
 (($2 $2  )($2N '899
 
  :9
8 
 
 
0 .)!<==, , >= ,* 
 
 
.       6 6 64 
 
 
  & & &" 
 
 
 GBNggm444P    
 
 	 

 JKK
 
  LK
0 
 
 
0 @AAIv#677A A 87 BA A. ? ? ?, $4m#DEE
 
 FE 
& Iv#677
 
 87 
( 
 
 
( &? &? &?R 5: 5: 5:p 
 
 
0  344
 
 54 
 
 
s   &A= =BB