
    hU                        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Z	d dlm
Z
 d dlZd dl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 d dlmZmZmZ d d	lmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%Z%	 d dl&Z&d
 Z(e%jR                  jU                  de       d        Z+d Z,d Z-d Z.d Z/e$d        Z0d Z1d Z2d Z3e%jR                  jU                  dddg      d        Z4d Z5d Z6d Z7d Z8d Z9e%jR                  jU                  dg d      d         Z:d! Z;d" Z<d# Z=e$e%jR                  jU                  d$d%d d gd&d'd(g      d)               Z>e$d*        Z?e$e%jR                  jU                  d+d,d-gfd.d/d0gfd1g d2fd3g d4fg      d5               Z@e$d6        ZAe$d7        ZBd8 ZCd9 ZDd: ZEd; ZFd< ZGe%jR                  jU                  d=dd>g      d?        ZHd@ ZIdA ZJdB ZKdC ZLdD ZMdE ZNdF ZOe%jR                  j                  edGk  dHI      e%jR                  jU                  dJdK e%j                  dLe%jR                  j                  edMk  dNI      O      g      dP               ZRe%jR                  jU                  de       dQ        ZSe%jR                  jU                  dRdSdTg      dU        ZTe%jR                  j                  edVkD  dWI      dX        ZUe%jR                  jU                  dY e j                         D  ch c]  } | dZvr| 
 c}       d[        ZWe%jR                  j                  edGk\  d\I      d]        ZXd^ ZYd_ ZZe%jR                  j                  d`      e%jR                  jU                  dRdadbg      dc               Z\dd Z]e%jR                  j                  d`      e%jR                  jU                  dRdadbg      de               Z^df Z_e%jR                  jU                  ddgdhg      di        Z`dj Zae%jR                  jU                  ddgdhg      dk        Zbdl Zcdm Zddn Zedo Zfdp Zgdq Zhe%jR                  jU                  ddgdrg      ds        Zie%jR                  jU                  dtdudvg      dw        Zje#e%jR                  j                  dx e       vdyI      dz               Zke%jR                  j                  d`      e%jR                  jU                  dYd{d|g      d}               Zld~ Zme%jR                  jU                  dYddg      d        Zne%jR                  jU                  dYd{d|g      d        Zod Zpd Zqe%jR                  jU                  dg d      e%jR                  jU                  d e%j                  dde%jR                  j                  ej                  dk(  dI      O       e%j                  dde%jR                  j                  ej                  dk(  dI      O      ddg      d               Zse%jR                  jU                  d e%j                  dde%jR                  j                  ej                  dk(  dI      O       e%j                  dde%jR                  j                  ej                  dk(  dI      O      ddg      d        Zte%jR                  jU                  ddgdrg      d        Zud Zvd Zwe"d        Zxe%jR                  j                  edI      e"d               Zyy# e'$ r Y jw xY wc c} w )    N)BytesIO)ZipFile)array_equal)__gdal_version__get_gdal_config_optionlist_driverslist_layers	read_infoset_gdal_config_options)
GDAL_GE_37HAS_PYARROWHAS_SHAPELY)DataLayerErrorDataSourceErrorFeatureError)
open_arrowreadwrite)
DRIVER_EXTDRIVERSprepare_testfilerequires_arrow_apirequires_pyarrow_apirequires_shapelyc                 .   t        |       \  }}}}|d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   j                  dk(  sJ |d   j                         g d	k(  sJ t        |      d
k(  sJ t        |      t        |d         k(  sJ |d   d d dk(  sJ y )Ncrs	EPSG:4326geometry_typePolygonencodingUTF-8fields   pop_est	continentnameiso_a3
gdp_md_estr$   r            )r   shapetolistlen)naturalearth_lowresmeta_geometryr"   s        L/var/www/html/immo/lib/python3.12/site-packages/pyogrio/tests/test_raw_io.py	test_readr5   (   s     $%8 9D!Xv;+%%% I---
w&&&>4'''>  " '    v;!x=Cq	N*** A;r?9999    extc                    |dk(  rt         st        j                  d       t        || |      }|j	                         sJ t        |      \  }}}}|d   dk(  sJ |d   dv sJ |d   d	k(  sJ |d
   j                  dk(  sJ |d
   j                         g dk(  sJ t        |      dk(  sJ t        |      t        |d         k(  sJ y )N	.gpkg.zipz(.gpkg.zip not supported for gdal < 3.7.0)dst_dirr7   r   r   r   )MultiPolygonr   Unknownr    r!   r"   r#   r%   r$   r   )	r   pytestskipr   existsr   r-   r.   r/   )tmp_pathr0   r7   testfiler1   r2   r3   r"   s           r4   test_read_autodetect_driverrB   ?   s     k*>? 3X3OH?? $XD!Xv;+%%% $JJJJ
w&&&>4'''>  " '    v;!x=Cq	N***r6   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)r=   warnsUserWarningr   )data_dirs    r4   )test_read_arrow_unspecified_layer_warningrI   Z   s4    	k)E	F *X(()* * *s   4=c                 r   t        j                  t        d      5  t        | d       d d d        t        j                  t        d      5  t        | d       d d d        t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   lxY w# 1 sw Y   GxY w# 1 sw Y   y xY w)	Nz#Layer 'invalid' could not be openedrD   invalid)layerzLayer '-1' could not be openedzLayer '2' could not be opened   )r=   raisesr   r   r0   s    r4   test_read_invalid_layerrQ   `   s    	~-R	S 3 	23 
~-M	N , +, 
~-L	M + *+ +3 3, ,+ +s#   BB!>B-B!B*-B6c                     | \  }} t        t        |       ddgg      sJ t        |       d   }|j                  dk(  sJ y )Nr0   r   rN   )   )r   r	   r   r-   )naturalearth_lowres_vsir2   r3   s      r4   test_vsi_read_layersrU   k   sW    !8A+,0Ey/Q.R   +,Q/H>>V###r6   c                 ,    t        | d      d   }|J y )NF)read_geometryrN   )r   )r0   r3   s     r4   test_read_no_geometryrX   u   s     'u=a@Hr6   c                     t        | dt        j                  dd            dd  \  }}t        j                  |d   dg      sJ |J y )NF7   )rW   maskrN      CAN)r   shapelyPointnpr   r0   r3   r"   s      r4   test_read_no_geometry__maskrc   {   sY    ]]4$ b	
Hf >>&)eW---r6   c                 l    t        | dd      dd  \  }}t        j                  |d   dg      sJ |J y )NF)     @[     K@re   rf   )rW   bboxrN   r]   r^   )r   ra   r   rb   s      r4   test_read_no_geometry__bboxrh      sN    ) b	
Hf >>&)eW---r6   c                     t        j                  t        d      5  t        | g dd      }d d d        y # 1 sw Y   y xY w)Nz^at least one of read_geometry or return_fids must be True or columns must be None or non-emptyrD   FcolumnsrW   return_fidsr=   rO   
ValueErrorr   r0   r2   s     r4   (test_read_no_geometry_no_columns_no_fidsrp      s@    	#
 	
 5e
	
 	
 	
   5>c                     ddg}t        | |d      \  }}}}t        |d   |       g d}t        | |d      \  }}}}t        |d   |d d        y )NNAME	NAME_LONGF)rk   rW   r"   )rs   rt   rs   rN   )r   r   )r0   rk   r1   r2   r3   r"   s         r4   test_read_columnsru      sm    {#G $WE!D!Xv X( ,G $WE!D!Xv X,r6   skip_features
      c                 :   t        |       dd  \  }}t        | |      dd  \  }}t        t        |      |z
  d      }t        |      |k(  sJ t        |d         |k(  sJ t        j                  |||d        sJ t        j                  |d   |d   |d        sJ y )NrN   rv   r   rM   )r   maxr/   ra   r   )naturalearth_lowres_all_extrv   expected_geometryexpected_fieldsr3   r"   expected_counts          r4   test_read_skip_featuresr      s    )-.I)J12)N&7}U	Hf
 ./-?CNx=N***vay>^+++>>($5mn$EFFF>>&*ob&9-.&IJJJr6   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 >= 0rD   rM   rz   rm   rP   s    r4    test_read_negative_skip_featuresr      s1    	z)G	H 4 34 4 4   3<c                 
   t        |       dd  \  }}t        | d      dd  \  }}t        |      dk(  sJ t        |d         dk(  sJ t        j                  ||d d       sJ t        j                  |d   |d   d d       sJ y )NrN   max_featuresr   rM   r   r/   ra   r   )r0   r}   r~   r3   r"   s        r4   test_read_max_featuresr      s    )-.A)B12)F&/a@DHfx=Avay>Q>>($5bq$9:::>>&*ob&9"1&=>>>r6   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 >= 0rD   rM   r   rm   rP   s    r4   test_read_negative_max_featuresr      s1    	z)F	G 3 r23 3 3r   c                    t        | d      dd  \  }}t        |      dk(  sJ t        |      dk(  sJ t        |d         dk(  sJ t        | d      dd  \  }}t        |      dk(  sJ t        |      dk(  sJ t        |d         dk(  sJ |d	   d
k(  sJ t        | d      dd  \  }}t        |      dk(  sJ t        |d         dk\  sJ t        |d         dk  sJ t        | d      dd  \  }}t        |      dk(  sJ y )N whererN   rS   r$   r   iso_a3 = 'CAN'   r]   r^   z+POP_EST >= 10000000 AND POP_EST < 100000000K   i i ziso_a3 = 'INVALID')r   r/   minr{   rb   s      r4   test_read_wherer      sL   /r:12>Hfx=Cv;!vay>S    /7GHLHfx=Av;!vay>Q!9 #Pb
Hf x=Bvay>X%%%vay>I%%% /7KLQRPHfx=Ar6   c                 ~    t        j                  t        d      5  t        | d       d d d        y # 1 sw Y   y xY w)NzInvalid SQLrD   rK   r   rm   rP   s    r4   test_read_where_invalidr      s0    	z	7 3 	23 3 3r   rg   ))r   )r   rN   r   rN   r]   c                 ~    t        j                  t        d      5  t        | |       d d d        y # 1 sw Y   y xY w)NzInvalid bboxrD   rg   rm   )r0   rg   s     r4   test_read_bbox_invalidr      s0    	z	8 - t,- - -r   c                     t        | d      dd  \  }}t        |      dk(  sJ t        | d      dd  \  }}t        |      dk(  sJ t        j                  |d   ddg      sJ y )	N)r   r   h㈵>r   r   rN   r   i   irw   r]   PANCRIr   )r|   r3   r"   s      r4   test_read_bboxr      s}    7>VW	Hf x=A7>OPQRQSTHfx=A>>&)eU^444r6   c                     t        | dd      d   }t        |d         dk(  sJ t        j                  |d   dg      sJ y )NL2   Z   DSELECT * from naturalearth_lowres where iso_a3 not in ('USA', 'RUS'))rg   sqlr]   r   r^   r   r|   r"   s     r4   test_read_bbox_sqlr   	  sQ    #!R 		F
 vay>Q>>&)eW---r6   c                     t        | dd      d   }t        |d         dk(  sJ t        j                  |d   dg      sJ y )Nr   iso_a3 not in ('USA', 'RUS'))rg   r   r]   r   r^   r   r   s     r4   test_read_bbox_wherer     sQ    #!, 		F
 vay>Q>>&)eW---r6   r\   r`   )typecoordinatesz({"type": "Point", "coordinates": [0, 0]}rK   c                 ~    t        j                  t        d      5  t        | |       d d d        y # 1 sw Y   y xY w)Nz+'mask' parameter must be a Shapely geometryrD   r\   rm   )r0   r\   s     r4   test_read_mask_invalidr     s3     
z)V	W - t,- - -r   c           	          t        j                  t        d      5  t        | dt	        j
                  dd             d d d        y # 1 sw Y   y xY w)Nz!cannot set both 'bbox' and 'mask'rD   r   rZ   r[   )rg   r\   )r=   rO   rn   r   r_   r`   rP   s    r4   test_read_bbox_mask_invalidr   +  sD    	z)L	M X '8w}}TSU?VWX X Xs   #AAzmask,expectedzPOINT (-105 55)r^   z/POLYGON ((-80 8, -80 10, -85 10, -85 8, -80 8))r   r   zPOLYGON ((
                6.101929 50.97085,
                5.773002 50.906611,
                5.593156 50.642649,
                6.059271 50.686052,
                6.374064 50.851481,
                6.101929 50.97085
            )))DEUBELNLDzGEOMETRYCOLLECTION (
                POINT (-7.7 53),
                POLYGON ((-80 8, -80 10, -85 10, -85 8, -80 8))
            ))r   r   IRLc                     t        j                  |      }t        | |      dd  \  }}t        j                  |d   |      sJ t        |      t        |      k(  sJ y )Nr   rN   r]   )r_   from_wktr   ra   r   r/   )r|   r\   expectedr3   r"   s        r4   test_read_maskr   1  s[    6 D!D7dCABGHf>>&)X...x=CM)))r6   c           	          t        | t        j                  dddd      d      d   }t        |d         dk(  sJ t	        j
                  |d   d	g      sJ y )
Nr   r   r   r   r   )r\   r   r]   r   r^   r   r_   boxr/   ra   r   r   s     r4   test_read_mask_sqlr   T  s`    #[[r4,R 		F
 vay>Q>>&)eW---r6   c           	          t        | t        j                  dddd      d      d   }t        |d         dk(  sJ t	        j
                  |d   d	g      sJ y )
Nr   r   r   r   r   )r\   r   r]   r   r^   r   r   s     r4   test_read_mask_wherer   _  s`    #[[r4,, 		F
 vay>Q>>&)eW---r6   c                    t        | d      dd  \  }}}g d}|t        j                  |      fD ]  }t        | |d      dd  \  }}}t        |      dk(  sJ t        |      dk(  sJ t        |d         dk(  sJ t        j                  |||         sJ t        j                  |||         sJ t        j                  |d   |d   |         rJ  y )	NTrl   r   )r   rw   r$   )fidsrl   r]   r   rM   )r   ra   arrayr/   r   )	r0   expected_fidsr}   r~   subsetr   indexr3   r"   s	            r4   test_read_fidsr   j  s    8<9b9
5M$o F&)* G"&f$#

"#x 4yA~~8}!!!6!9~"""~~e]6%:;;;~~h(9&(ABBB~~fRj/"*=f*EFFFGr6   c                     t        j                  t        d      5  t        | dg       d d d        t        j                  t        d      5  t        | dg       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)NzCAttempt to read shape with feature id \(-1\) out of available rangerD   rM   )r   zDAttempt to read shape with feature id \(200\) out of available rangerx   )r=   rO   r   r   rP   s    r4   test_read_fids_out_of_boundsr   ~  su    	T
 - 	 t,	- 
U
 . 	 u-	. .- -. .s   A&A2&A/2A;c           	      0   t        j                  t        d      5  t        | dgd       d d d        t        j                  t        d      5  t        | dgd       d d d        t        j                  t        d      5  t        | dgd	       d d d        t        j                  t        d      5  t        | dgd
       d d d        t        j                  t        d      5  t        | dgd       d d d        t        rHt        j                  t        d      5  t        | dgt        j                  dd             d d d        y y # 1 sw Y   %xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz!cannot set both 'fids' and any ofrD   r   r   )r   r   )it   r   -   )r   rg   r$   )r   rv   )r   r   )r   r   -C6?r   r   )r   r\   )r=   rO   rn   r   r   r_   r`   rP   s    r4   #test_read_fids_unsupported_keywordsr     sj   	z)L	M D s2BCD 
z)L	M G s1EFG 
z)L	M = s!<= 
z)L	M < s;< 
z)L	M I s1GHI ]]:-PQ 	J$A3W]]1a5HI	J 	J D DG G= =< <I I	J 	JsG   EEE(5E4(F !$FEE%(E14E= F	Fc                    t        |       d   }|J t        | d      d   }|J t        | ddd      d   }|J |j                  t        j                  k(  sJ t        j                  |t        j
                  ddgd	            sJ y )
Nr   Fr   TrN   )rl   rv   r   r]   int64dtype)r   r   ra   r   r   r   )r0   r   s     r4   test_read_return_fidsr     s    #$Q'D<<#7:D<<#QUVW	D ::!!!>>$!Qw ?@@@r6   c                 |    t        | g dd      \  }}}}|J t        |      dk(  sJ |J t        |      dk(  sJ y )NFTrj   rS   r   r   r/   )r0   r2   r   r3   
field_datas        r4   test_read_return_only_fidsr     s\    $(Ru$%!AtXz t9z?ar6   r    
ISO-8859-1c                 b   t        |      \  }}}}| dz  }||d<   t        |||fi | |j                         sJ dD ]#  }|j                  |      j                         r#J  ||nd}	t	        |j                  d            5 }
|
j                         }||	k(  sJ 	 d d d        y # 1 sw Y   y xY w)Ntest.shpr    )z.dbfz.prjr!   .cpg)r   r   r?   with_suffixopen)r@   r0   r    r1   r2   r3   r   filenamer7   expected_encodingcpg_fileresult_encodings               r4   test_write_shpr     s    $()<$=!D!Xz*$HD	(Hj1D1?? 2##C(//1112 %-$8g	h""6*	+ 4x"--/"33334 4 4s   B%%B.c                     t        |      \  }}}}|j                  ddi       | dz  }t        |||fddi| |j                         sJ y )Nr   r;   	test.gpkgdriverGPKG)r   updater   r?   r@   r0   r1   r2   r3   r   r   s          r4   test_write_gpkgr     sW    $()<$=!D!XzKK.12+%H	(Hj@@4@??r6   c                 6   t        |      \  }}}}d|d<   | dz  }t        |||fddd| |j                         sJ t        j                  t        |      ddgg      sJ t        |||fddd| t        j                  t        |      ddgddgg      sJ y )Nr;   r   r   r   firstr   rL   second)r   r   r?   ra   r   r	   r   s          r4   test_write_gpkg_multiple_layersr     s    $()<$=!D!Xz*D+%H	(HjOwO$O??>>+h/7N2K1LMMM	(HjPxP4P>>H. 9Hn;UV  r6   c                    t        |      \  }}}}| dz  }t        |||fddi| |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 )Nz	test.jsonr   GeoJSONr   FeatureCollectionr(   testr   featuresr"   r   
properties)
r   r   r?   jsonloadsr   r/   set
differencekeys)r@   r0   r1   r2   r3   r   r   datas           r4   test_write_geojsonr     s    $()<$=!D!Xz+%H	(HjCCdC??::d8n))+,D<....<6!!!D==tJ CM111DN&&tJ'7':<'H'M'M'OP   r6   c                 h   t        |      \  }}}}d}d|d<   d|d<   | dz  }t        |||fddi| |j                         sJ t        |      \  }}}}|d   d	k(  sJ |d   dk(  sJ |d
   dk(  sJ |d   j                  dk(  sJ t	        |      dk(  sJ t	        |      dk(  sJ |d   dd dk(  sJ y)z3Test writing file with no fields/attribute columns.Nr"   r;   r   r   r   r   r   r   r    r!   r   r   rS   r+   r,   )r   r   r?   r-   r/   r@   r0   r1   r2   r3   r   r   r"   s           r4   test_write_no_fieldsr    s    %))<$=!D!XzJDN +D +%H	(Hj@@4@ ?? $XD!Xv;+%%% N222
w&&&>4'''v;!x=C A;r?9999r6   c                 r   t        |      \  }}}}d}d|d<   | dz  }t        |||fddi| |j                         sJ t        |      \  }}}}|d   J |d   J |d   dk(  sJ |d	   j                  d
k(  sJ |d	   j	                         g dk(  sJ t        |      dk(  sJ t        |d         dk(  sJ y)z*Test writing file with no geometry column.Nr   r   r   r   r   r    r!   r"   r#   r%   r$   r   rS   r   r   r?   r-   r.   r/   r  s           r4   test_write_no_geomr    s    %))<$=!D!XzH D +%H	(Hj@@4@ ?? $XD!Xv; (((
w&&&>4'''>  " '    v;!vay>S   r6   c                 p   t        |      \  }}}}d}| dz  }t        |||fddi| |j                         sJ t        |      \  }}}}	|d   J |d   J |d   dk(  sJ |d	   j                  d
k(  sJ |d	   j	                         g dk(  sJ t        |	      dk(  sJ t        |	d         dk(  sJ |J y)zTest writing file with no geometry data passed but a geometry_type specified.

    In this case the geometry_type is ignored, so a file without geometry column is
    written.
    Nr   r   r   r   r   r    r!   r"   r#   r%   r$   r   rS   r  )
r@   r0   r1   r2   r3   r   r   result_metaresult_geometryresult_field_datas
             r4   test_write_no_geom_datar
  <  s    %))<$=!D!Xz H +%H	(Hj@@4@ ??9=h6KO%6u%%%'///z"g---x &&$...x '') .     !Q&&& #$+++"""r6   c                      t        j                  t        d      5  t        dddd       ddd       y# 1 sw Y   yxY w)z>Test writing file with no geometry column nor fields -> error.z6You must provide at least a geometry column or a fieldrD   r   N)r3   r   r"   )r=   rO   rn   r    r6   r4   test_write_no_geom_no_fieldsr  b  s=    	F
 H 	kDT$G	H H Hrq   r]   r+   r   :OpenFileGDB write support only available for GDAL >= 3.6.0)reasonwrite_int64FTr]   	   r   z<OpenFileGDB write support for int64 values for GDAL >= 3.9.0)marksc           	      8   t        j                  t        j                  d      gdz  t              }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}g d}dd|d}| dz  }|rddini }|s	t
        dk  rt        j                         }nt        j                  t        d      }|5  t        |||fddi|| d d d        t        |      \  }	}
}}|s|d   j                  d      |d<   |d   j                  d      |d<   |	d   |d   k(  sJ t        j                  |	d   |d         sJ t        j                  ||      sJ t        t!        |            D ]A  }||   j"                  ||   j"                  k(  sJ t        j                  ||   ||         rAJ  y # 1 sw Y   xY w)N*010100000000000000000000000000000000000000r]   r   TFTboolr   int16int32r   float32float64r  r  r  r   r  r  r`   r   )r   r   r"   test.gdbTARGET_ARCGIS_VERSIONARCGIS_PRO_3_2_OR_LATERr  z&Integer64 will be written as a Float64rD   r   OpenFileGDBr   r   r"   )ra   r   bytesfromhexobjectr   
contextlibnullcontextr=   rF   RuntimeWarningr   r   astyper   ranger/   r   )r@   r  r}   expected_field_datar~   expected_metar   write_paramsctxr1   r2   r3   r   is                 r4   test_write_openfilegdbr/  k  s4   & 	C	DEIQW 	$F3
'*
'*
'*
),
), PO !M *$H AL	 ";<QS  &2$$&ll"J
 
 
	
 !		

 	
 	

 %)N!D!Xz!4Q!7!>!>y!IA 13::7C;-....>>$x.-*ABBB>>($56663*+, E!}""&9!&<&B&BBBB~~jm-@-CDDDE-
 
s   HHc                    |dk(  rt         dk  rt        j                  d       |dv rt         dk  rt        j                  d       |dk(  rt        j                  d       t        |      \  }}}}d	|d
<   | d| z  }t	        |||fi | |j                         sJ t        |      d   dk(  sJ t	        |||fddi| t        |      d   dk(  sJ y )Nz.fgbr]   r$   r   z,Append to FlatGeobuf fails for GDAL <= 3.5.0)z	.geojsonl	.geojsonsr  z5Append to GeoJSONSeq only available for GDAL >= 3.6.0r9   z$Append to .gpkg.zip is not supportedr;   r   r   r   rS   appendTib  )r   r=   r>   r   r   r?   r
   )r@   r0   r7   r1   r2   r3   r   r   s           r4   test_write_appendr4    s    
f})Y6BC
((-=	-IKL
k:;$()<$=!D!Xz +DD,&H	(Hj1D1??Xz*c111 
(Hj>>>Xz*c111r6   z
driver,ext)GMLz.gml)
GeoJSONSeqr2  c                 f   |dk(  rt         dk\  rt        j                  d       t        |      \  }}}}| d| z  }t	        |||fd|i| |j                         sJ t        |d      d   d	k(  sJ t        j                  t              5  t	        |||f|dd
| d d d        y # 1 sw Y   y xY w)Nr2  r  z0Append to GeoJSONSeq supported for GDAL >= 3.6.0r   r   T)force_feature_countr   rS   )r   r3  )	r   r=   r>   r   r   r?   r
   rO   r   )	r@   r0   r   r7   r1   r2   r3   r   r   s	            r4   test_write_append_unsupportedr9    s    
k.);FG$()<$=!D!Xz D,&H	(Hj@@4@??X48DKKK		' Rh*QVDQDQR R Rs   B''B0r1  z0segfaults on FlatGeobuf limited to GDAL <= 3.5.0c                     t        |      \  }}}}d|d<   | dz  }t        |||fi | |j                         sJ t        j                  t
              5  t        |||fddi| ddd       y# 1 sw Y   yxY w)zoGDAL <= 3.5.0 segfaults when appending to FlatGeobuf; this test
    verifies that we catch that before segfaultr;   r   ztest.fgbr3  TN)r   r   r?   r=   rO   RuntimeErrorr   s          r4   'test_write_append_prevent_gdal_segfaultr<    s     %))<$=!D!Xz*D*$H	(Hj1D1??	
 C 	h*BTBTBC C Cs   A..A7r   )ESRI Shapefiler   r   c           	          t        |dg      \  }}}}d|d<   | dt        |    z  }t        ||dd f|D cg c]  }|dd 	 c}|d| |j                         sJ yc c}w )	zATest drivers known to work that are not specifically tested abover)   rk   r;   r   r   Nr   )r   r   )r   r   r   r?   )	r@   r0   r   r1   r2   r3   r   r   fs	            r4   test_write_supportedrA     s     %))<xj$Q!D!Xz
 +DDF!3 455H	! $..aAbqE.	
  ?? /s   A
z,OpenFileGDB supports write for GDAL >= 3.6.0c                     t        |      \  }}}}| dz  }t        j                  t        d      5  t	        |||fddi| d d d        y # 1 sw Y   y xY w)Nr  z$does not support write functionalityrD   r   r!  )r   r=   rO   r   r   r   s          r4   test_write_unsupportedrC    s`     %))<$=!D!Xz*$H	.T	U Lh*K]KdKL L Ls   AAc                     t        |       \  }}}}d}t        dddd       t        j                  t        d      5  t        |||fi | d d d        y # 1 sw Y   y xY w)Nz%s3://non-existing-bucket/test.geojsonrK   T)AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_NO_SIGN_REQUESTz#Failed to write features to datasetrD   )r   r   r=   rO   r   r   )r0   r1   r2   r3   r   r   s         r4   test_write_gdalclose_errorrH  )  sj    $()<$=!D!Xz6H !*%.#'	
 
.S	T 6h*556 6 6s   AAc                 r   | \  }}}}|\  }}}}	t        j                  |d   |d         sJ t        j                  ||      sJ t        d t        ||	      D              sJ t        rOt        j                  t        j                  |      t        j                  |      d      j                         sJ y y )Nr"   c              3   N   K   | ]  \  }}t        j                  ||        y wNra   r   .0f1f2s      r4   	<genexpr>z&assert_equal_result.<locals>.<genexpr>A  s     R&"br~~b"%R   #%r   )	tolerance)ra   r   allzipr   r_   equals_exactfrom_wkb)
result1result2meta1index1	geometry1field_data1meta2index2	geometry2field_data2s
             r4   assert_equal_resultrb  ;  s    ,3)E69k,3)E69k>>%/5?;;;>>&&)))RC[4QRRRR ##Y')9)9))DPW

#% 	 	 r6   z"ignore:File /vsimem:RuntimeWarning)r   geojson)r   gpkgc                    t        |      \  }}}}|j                  ddi       | d| z  }t        |||fd|i| t        |d      5 }	|	j                         }
d d d        t        
      }t	        ||||f|       y # 1 sw Y   %xY wNr   r<   test.r   rbr   r   r   r   rb  )r@   r0   r   r7   r1   r   r3   r   r   r@  bufferrY  s               r4   test_read_from_bytesrk  L  s     )--@(A%D%:KK),-E#-'H	(Hj@@4@	h	  6lGuh
;WE	 s   A==Bc                     | \  }}t        |      \  }}}}t        |d      5 }|j                         }d d d        t              }	t        ||||f|	       y # 1 sw Y   %xY w)Nrh  )r   r   rb  )
rT   pathvsi_pathr1   r   r3   r   r@  rj  rY  s
             r4   test_read_from_bytes_zippedro  [  sg    ,ND((,X%D%:	dD	 Q 6lGuh
;WE	 s   AA c                     t        |      \  }}}}|j                  ddi       | d| z  }t        |||fd|i| t        |d      5 }	t        |	      }
d d d        t	        ||||f
       y # 1 sw Y   xY wrf  ri  )r@   r0   r   r7   r1   r   r3   r   r   r@  rY  s              r4   test_read_from_file_likerq  f  s     )--@(A%D%:KK),-E#-'H	(Hj@@4@	h	 q' uh
;WE s   A--A6c                 l    t        |       \  }}}}|d   j                  dk(  sJ t        |      dk(  sJ y )Nr"   r   r   )r   r-   r/   )nonseekable_bytesr1   r2   r3   s       r4    test_read_from_nonseekable_bytesrt  t  s@     12D!Xq>4'''x=Ar6   rd  fgbc           	         t        j                  t        j                  d      gdz  t              }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}g d}dddd}| d| z  }t        ||||fi | t        |      d   }t        d t        ||      D              sJ t        d t        ||      D              sJ t        g d      D ]  \  }\  }	}
t        j                  g d|	      g}| d| d| z  }t        |||dgfi | t        |      d   d   }t        j                  |t        j                  g d            sJ |j                  |
k(  rJ  y )Nr  r]   r   r  r  r   r  r  r   r  r  r  r`   r   Fr   r   spatial_indexrg  c              3   N   K   | ]  \  }}t        j                  ||        y wrK  rL  rM  s      r4   rQ  z5test_read_write_data_types_numeric.<locals>.<genexpr>  s     L&"br~~b"%LrR  c              3   T   K   | ]   \  }}|j                   |j                   k(   " y wrK  r   rM  s      r4   rQ  z5test_read_write_data_types_numeric.<locals>.<genexpr>  s!     JBrxx288#Js   &())int8r  )uint8r  )uint16r  )uint32r   )uint64r   r   .colr   )ra   r   r"  r#  r$  r   r   rT  rU  	enumerater   r   )r@   r7   r3   r   r"   r1   r   resultr.  r   result_dtypes              r4   "test_read_write_data_types_numericr  z  s    xx	C	DEIQWH 	$F3
'*
'*
'*
),
),J GF$[5QDE#-'H	(Hj&9D9(^AFLC
4KLLLLJ#fj2IJJJJ %.	
% ,  E< hhy67
QCq..h*ug>>h"1%~~fbhhy&9:::|||+++,r6   c           
         t        j                  ddgd      t        j                  ddgd      t        j                  ddgd	      t        j                  ddgd
      t        j                  ddgd
      t        j                  t        j                  d      d gd	      g}g d}t        j                  t        j	                  d      gdz  t
              }dddd}| dz  }t        ||||fi | t        |      d   }t        |      D ]X  \  }}|dk(  r.t        j                  ||   ||   j                  d	            r7J t        j                  ||   ||   d      rXJ  y )Nz
2005-02-01z
2005-02-02zdatetime64[D]r   z2001-01-01T12:00z2002-02-03T13:56:03zdatetime64[s]z2002-02-03T13:56:03.072datetime64[ms]zdatetime64[ns]z2002-02-03T13:56:03.072123456NaT)datetime64_ddatetime64_sdatetime64_msdatetime64_nsdatetime64_precise_nsdatetime64_ms_natr  rN   r`   r   Frw  r   r]   r  T)	equal_nan)ra   r   
datetime64r"  r#  r$  r   r   r  r   r(  )	r@   r   r"   r3   r1   r   r  idxfields	            r4   test_read_write_datetimer    sm   
,-_E
$&;<OT
!:;CS	
 	!:;CS	
 	!@A"	

 	"--&-5EFJ F xx	C	DEIQWH %[5QD+%H	(Hj&9D9(^AF' P
U++>>&+z#/E/EFV/WXXX>>&+z#$OOOPr6   c                 j   t        j                  t        j                  d      gdz  t              }t        j                  g dd      g}dg}ddd	d
}| d| z  }t        ||||fi | t        |      d   }t        j                  ||      sJ |d   j                  |d   j                  k(  sJ y )Nr  r]   r   )r   l   o] r   overflow_int64r`   r   Frw  rg  r   )	ra   r   r"  r#  r$  r   r   r   r   )r@   r7   r3   r   r"   r1   r   r  s           r4   test_read_write_int64_larger    s    
 xx	C	DEIQWH ((.g>?JF$[5QDE#-'H	(Hj&9D9(^AF>>&*---!9??jm11111r6   c                     t        |       d   }t        |      D ]G  \  }}t        j                  |d         sJ |dk(  r|j                  dk(  r5J |j                  dk(  rGJ  y )Nr]   rM   r  r  r  )r   r  ra   isnanr   )test_gpkg_nullsr"   r.  r  s       r4   &test_read_data_types_numeric_with_nullr    sl    /"1%Ff% ,5xxb	""" 6;;)+++;;)+++,r6   c                     t        |       d   }t        |      dk(  sJ t        | dg      d   }t        |      dk(  sJ y )Nr]   r   r   r?  r   )list_field_values_filer"   s     r4   test_read_unsupported_typesr    sJ    ()!,Fv;!(7)<Q?Fv;!r6   c                     t        |       d   d   }|j                  dk(  sJ |d   t        j                  d      k(  sJ |d   t        j                  d      k(  sJ y )Nr]   r   r  2020-01-01 09:00:00.123r   2020-01-01 10:00:00.000r   r   ra   r  )datetime_filer  s     r4   test_read_datetime_millisecondr    sa    "1%E;;****8r}}%>????8r}}%>????r6   c                 
   | dz  }t        |d      5 }|j                  d       |j                  d       d d d        t        j                  t        d      5  t        |       d d d        y # 1 sw Y   9xY w# 1 sw Y   y xY w)Ntest.unsupportedwcolumn1,column2
data1,data2z0.* by prefixing the file path with '<DRIVER>:'.*rD   )r   r   r=   rO   r   r   )r@   test_unsupported_pathfiles      r4   test_read_unsupported_extr     s    $'99	#S	) "T

&'

=!" 
Q
 $ 	"#$ $	" "$ $s   #A-A9-A69Bc                     | dz  }t        |d      5 }|j                  d       |j                  d       d d d        t        d|       \  }}}}t        |      dk(  sJ |d   dk(  sJ y # 1 sw Y   7xY w)	Nr  r  r  r  zCSV:rN   r   data1)r   r   r   r/   )r@   r  r  r2   r   s        r4   %test_read_unsupported_ext_with_prefixr    s    $'99	#S	) "T

&'

=!" &;%<=>Aq!Zz?aa=G###" "s   #A++A4c                 ,   t        |       d   d   }|j                  dk(  sJ |d   t        j                  d      k(  sJ |d   t        j                  d      k(  sJ t        | d      d   d   }|j                  d	k(  sJ |d   d
k(  sJ |d   dk(  sJ y )Nr]   r   r  r  r   r  T)datetime_as_stringr$  z2020/01/01 09:00:00.123-05z2020/01/01 10:00:00-05r  )datetime_tz_filer  s     r4   test_read_datetime_as_stringr    s    !"1%a(E;;****8r}}%>????8r}}%>????!d;A>qAE;;("""833338////r6   rc  c                 x   t        j                  t        j                  d      d gt              }t        j                  ddgd      g}dg}ddd	}|d
k(  rd|d<   | d| z  }t        ||||fi | t        |      dd  \  }}t        j                  ||      sJ t        j                  |d   |d         sJ y )Nr  r   r   rN   r  r  r`   r   r   r   rd  Frx  rg  r   )ra   r   r"  r#  r$  r   r   r   )	r@   r7   r3   r   r"   r1   r   r  result_fieldss	            r4   test_read_write_null_geometryr  %  s     xx	C	DdKH ((Aq612JWF$[9D
f} %_E#-'H	(Hj&9D9%)(^AB%7"O]>>/8444>>-*JqM:::r6   r   r  r  c                    t        j                  t        j                  d      gdz  t              }t        j                  dt         j
                  g|      g}dg}ddd}| d	z  }t        ||||fi | t        |      5 }|j                         }d d d        d
v sJ |dk(  rt        j                  t        d      }	nt        j                         }	|	5  t        ||||fi |ddi d d d        t        |      5 }|j                         }d d d        d|v sJ t        ||||fi |ddd t        |      5 }|j                         }d d d        d|v sJ y # 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   fxY w# 1 sw Y   4xY w)Nr  rN   r         ?r  r`   r   r  test.geojsonz{ "col": null }r  z$NaN of Infinity value found. SkippedrD   nan_as_nullFz"properties": { }YES)r  WRITE_NON_FINITE_VALUESz{ "col": NaN })ra   r   r"  r#  r$  nanr   r   r   r=   rF   r'  r%  r&  )
r@   r   r3   r   r"   r1   r   r@  contentr-  s
             r4   test_write_float_nan_nullr  9  s    xx	C	DEIH ((C=67JWF$[9D.(H 
(Hj&9D9	h 1&&(''' 	ll>1WX$$&	 Qh*fPP%PQ	h 1&&('))) 
	
   % 
h 1&&(w&&&9 Q Q  s0   EE)?E5=FE&)E25E>F
ArrowzArrow driver is not availablec                    dd l }t        j                  t        j	                  d      gdz  t
              }t        j                  dt        j                  gd      g}dg}dd	d
}| dz  }t        ||||fddi| |j                  j                  |      }|d   j                         j                         ddgk(  sJ t        ||||fddd| |j                  j                  |      }|d   j                         j                         ddgk(  sJ t        j                  d      }|j                  |d         j                         ddgk(  sJ y )Nr   r  rN   r   r  r  r  r`   r   r  z
test.arrowr   r  FT)r   r  zpyarrow.compute)pyarrow.featherra   r   r"  r#  r$  r  r   feather
read_tableis_null	to_pylistr=   importorskipis_nan)	r@   pyarrowr3   r   r"   r1   fnametablepcs	            r4   test_write_float_nan_null_arrowr  f  sY   
  xx	C	DEIH ((C=	:;JWF$[9D|#E 
%:vFgFFOO&&u-E<!++-%>>> 
xV4;RV OO&&u-E<!++-%???			.	/B99U5\",,.5$-???r6   r   r   c                    t        |       \  }}}}|j                  ddi       t               }t        |||f|dd| t	        |j                               dkD  sJ t        |      d   d   dk(  sJ t        |      \  }}}}	t        j                  |d   |d         sJ t        j                  |	|      sJ t	        |      t	        |      k(  sJ y )Nr   r;   r   r   r   r"   )	r   r   r   r   r/   	getbufferr	   ra   r   )
r0   r   r1   r2   r3   r   rj  actual_metaactual_geometryactual_field_datas
             r4   test_write_memoryr    s     %))<$=!D!XzKK.12YF	&(JLvVLtLv!"Q&&&vq!!$...9=f6KO%6>>+h/h@@@>>+Z8883x=000r6   c                     t        |       \  }}}}t               }t        j                  t        d      5  t        |||fd dd| d d d        y # 1 sw Y   y xY w)Nz2driver must be provided to write to in-memory filerD   r   r   )r   r   r=   rO   rn   r   r0   r1   r2   r3   r   rj  s         r4   !test_write_memory_driver_requiredr    sb    $()<$=!D!XzYF	B
 O 	fh
N4vNN	O O Os   AAr=  r!  c                    |dk(  rt         dk  rt        j                  d       t        |       \  }}}}t	               }t        j
                  t        d|       5  t        |||f|ddd| d d d        y # 1 sw Y   y xY w)	Nr!  r  r  z/writing to in-memory file is not supported for rD   r   Tr   rL   r3  )r   r=   r>   r   r   rO   rn   r   r0   r   r1   r2   r3   r   rj  s          r4   $test_write_memory_unsupported_driverr    s    #3i#?PQ$()<$=!D!XzYF	KF8T
 
 		
 	
 	

 
 
s   A88Bc                     t        |       \  }}}}|j                  ddi       t               }t        j                  t
        d      5  t        |||f|ddd| d d d        y # 1 sw Y   y xY w)Nr   r;   z+append is not supported for in-memory filesrD   r   Tr  )r   r   r   r=   rO   NotImplementedErrorr   r  s          r4   $test_write_memory_append_unsupportedr    s    $()<$=!D!XzKK.12YF	#P
 
 		
 	
 	

 
 
s   	A%%A.c                     t        |       \  }}}}t        d      }t        j                  t        d      5  t        |||fddd| d d d        y # 1 sw Y   y xY w)Ns   0000z5writing to existing in-memory object is not supportedrD   r   r   r   )r   r   r=   rO   r  r   r  s         r4   &test_write_memory_existing_unsupportedr    se    $()<$=!D!XzWF	E
 T 	fh
S9FSdS	T T Ts   AAc           	         t        |      \  }}}}t        j                  t        d      5  t	        | dz  d      5 }t        |||fddd| ddd       ddd       t        j                  t        d      5  t        | d	z  d
      5 }|j	                  dd
      5 }t        |||fddd| ddd       ddd       ddd       y# 1 sw Y   zxY w# 1 sw Y   ~xY w# 1 sw Y   2xY w# 1 sw Y   6xY w# 1 sw Y   yxY w)zEVerify that writing to an open file handle is not currently supportedz3writing to an open file handle is not yet supportedrD   r  wbr   r   r   Nztest.geojson.zipr  )r   r=   rO   r  r   r   r   )r@   r0   r1   r2   r3   r   r@  zs           r4   test_write_open_file_handler    s+    %))<$=!D!Xz 
#X
 S (^+T2 	Sa!XzR)6RTR	SS 
#X
 W X 22C8 	WA, Wa:VivVQUVW	WW W		S 	SS SW W	W 	WW Ws^   CCC9C7	C+C.C+6C7C	CCC($C++C4	0C77D )ru  rd  rc  zread_encoding,write_encodingwin32z&must specify write encoding on Windowsr!   )Nr!   )r!   r!   c                 .   t        j                  t        j                  d      gt              }d}d}d}t        j                  |gt              t        j                  |gt              t        j                  |gt              g}|||g}	dd|d}
| d	| z  }t        ||||	fi |
 t        ||
      \  }}}}t        j                  |	|d         sJ t        j                  ||      sJ t        j                  |	t        ||
      d         sJ y )Nr  r      العربية   ᓀᐦᐃᔭᐍᐏᐣ   中文r`   r   r   r   r    rg  r    r"   )	ra   r   r"  r#  r$  r   r   r   r
   )r@   r7   read_encodingwrite_encodingr3   arabiccreemandarinr   r"   r1   r   r  r2   r  s                  r4   test_encoding_ior    s   0 xx	C	DEVH F"DH
&(
$v&
(6*J
 dH%F$[nUDE#-'H	(Hj&9D9+/=+Q(KA(>>&+h"7888>>*&7888>>&)H}"Mh"WXXXr6   c                 N   t        j                  t        j                  d      gt              }d}d}d}t        j                  |gt              t        j                  |gt              t        j                  |gt              g}|d d |d d |g}dd	d
d}	| dz  }
t        |
|||fi |	 t        |
|      \  }}}}t        j                  ||d         sJ t        j                  ||      sJ t        j                  |t        |
|      d         sJ ||
j                  d      j                          t        |
|      \  }}}}t        j                  ||d         sJ t        j                  ||      sJ t        j                  |t        |
|      d         sJ y y )Nr  r   r  r  r  r$   r]   r`   r   r!   r  r   r  r"   r   )ra   r   r"  r#  r$  r   r   r   r
   r   unlink)r@   r  r  r3   r  r  r  r   r"   r1   r   r  r2   r  s                 r4   test_encoding_io_shapefiler    s   . xx	C	DEVH F"DH
&(
$v&
(6*J Raj$r(H-F$[gND*$H 
(Hj&9D9+/=+Q(KA(>>&+h"7888>>*&7888>>&)H}"Mh"WXXX  V$++-/3H}/U,Q,~~fk(&;<<<~~j*;<<<~~Ih?I
 	
 
 !r6   c                 L   |\  }}t        j                  t        j                  d      gt              }t        j                  |gt              g}|g}dd|d}| d| z  }	t        |	|||fi | t        j                  t              5  t        |	       ddd       t        j                  t              5  t        |	       ddd       t        |	|      \  }
}}}|
d	   d
   |k(  sJ |d
   |k(  sJ t        |	|      d	   d
   |k(  sJ y# 1 sw Y   xxY w# 1 sw Y   WxY w)aK  Verify that we write non-UTF data to the data source

    IMPORTANT: this may not be valid for the data source and will likely render
    them unusable in other tools, but should successfully roundtrip unless we
    disable writing using other encodings.

    NOTE: FlatGeobuff driver cannot handle non-UTF data in GDAL >= 3.9
    r  r   r`   r   r  rg  Nr  r"   r   )ra   r   r"  r#  r$  r   r=   rO   UnicodeDecodeErrorr   r
   )r@   r7   encoded_textr    textr3   r   r"   r1   r   r  r2   r  s                r4   test_non_utf8_encoding_ior  _  s5    "NHd xx	C	DEVH ((D601JVF$[hODE#-'H	(Hj&9D9 
)	* X 
)	* ( ,08+L(KA(x #t+++Q4'''X1(;A>$FFF  s   D8DDD#c                 j   |\  }}t        j                  t        j                  d      gt              }t        j                  |gt              g}|g}dd|d}| dz  }t        ||||fi | t        |      \  }	}
}
}|	d   d   |k(  sJ |d   |k(  sJ t        |      d   d   |k(  sJ |j                  d	      j                          |j                  |      j                  d
      }t        |      \  }}
}
}|d   d   |k(  sJ |d   |k(  sJ t        |      d   d   |k(  sJ t        ||      \  }	}
}
}|	d   d   |k(  sJ |d   |k(  sJ t        ||      d   d   |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)Nr  r   r`   r   r  r   r"   r   r   r   r  SHAPE_ENCODINGCP1254)ra   r   r"  r#  r$  r   r   r
   r   r  encodedecoder   r   )r@   r  r    r  r3   r   r"   r1   r   r  r2   r  miscodedbad_metabad_field_datas                  r4   #test_non_utf8_encoding_io_shapefiler    s   !NHd xx	C	DEVH ((D601JVF$[hOD*$H	(Hj&9D9
 ,0>(KA(x #t+++Q4'''Xx(+t333  '') {{8$++L9H%)(^"HaNHa H,,,!(((Xx(+x777 ,08+L(KA(x #t+++Q4'''X1(;A>$FFF:!18 <=H-%&678CCC 	 !14 89!14 89s   **F# #F2c                 D   t        j                  t        j                  d      gdz  t              }t        j                  g dd      g}t        j                  g d      g}dg}dd	d
}| dz  }t        |||||fi | t        |      dd  \  }}t        j                  ||      sJ t         j                  j                  |d   t        j                  dt         j                  dg             t        j                  ddg      g}t        j                  t              5  t        |||||fi | d d d        t        j                  g d      gdz  }t        j                  t              5  t        |||||fi | d d d        y # 1 sw Y   WxY w# 1 sw Y   y xY w)Nr  r]   r   r   r  )FTFr  r`   r   r  r  rN   r   r   FT)ra   r   r"  r#  r$  r   r   r   testingassert_allcloser  r=   rO   rn   )	r@   r3   r   
field_maskr"   r1   r   r  r  s	            r4   test_write_with_maskr    s~   xx	C	DEIH ((9G45J((/01JWF$[9D.(H	(Hj&*EE%)(^AB%7"O]>>/8444JJ}Q/1bffa.1IJ ((E4=)*J	z	" Jh*fjIDIJ ((/01A5J	z	" Jh*fjIDIJ JJ J
J Js   #F
0F
FFc                 L   t        |       5 \  }}t        |t              sJ t        |t        j                  j
                        sJ |j                         }t        j                  j                  t        j                  |      d      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Ns   arrow_array_streamr   )r   
isinstancedictpyogrio_io_ArrowStream__arrow_c_stream__ctypes	pythonapiPyCapsule_IsValid	py_object)r0   r1   readercapsules       r4   0test_open_arrow_capsule_protocol_without_pyarrowr    s    
 
'	( 	
NT6$%%%&'++":":;;;++-..  )+@ 	
	
 	
 	
s   BBB#zpyarrow is installedc                     t        j                  t              5  t        | d      5 }	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NT)use_pyarrow)r=   rO   ImportErrorr   ro   s     r4    test_open_arrow_error_no_pyarrowr    sO     
{	# +> 	!	 	 	 s   A;AA	 AA)zr%  r  r   sysior   zipfiler   numpyra   r   r  r   r   r   r	   r
   r   pyogrio._compatr   r   r   pyogrio.errorsr   r   r   pyogrio.rawr   r   r   pyogrio.tests.conftestr   r   r   r   r   r   r=   r_   r  r5   markparametrizerB   rI   rQ   rU   rX   rc   rh   rp   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  skipifparamr/  r4  r9  r<  valuesrA  rC  rH  rb  filterwarningsrk  ro  rq  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  platformr  r  r  r  r  r  r  )r   s   0r4   <module>r)     s      
       A @ H H / /  	
:. (+ )+4*+$  

- 2s)4K 5K"4
?3
63
 !:;- <-
5.. 
!Q02- -
 X X
 	UG$	:UENK "
	
 "	
2*3 4* . . . .G(.J*A"  dL%9:4 ;4$$&:<!@##LH y G   ++$$ 9,U % 	
	<E	"<E~ (2 )28 9T'UVR WR$ y =  C	C"  %gnn&>> 	* 	!*X  LL6$" @A(>@P'QR
F S B
FF @A(>@P'QR	F S B	F 0&, 1&,R(PV 02 12$,@	$$0  34; 5;& 9i"89)' :)'X <>!*I  @ @8 @AIv#671 8 B1"O $4m#DE
 F
, Iv#67
 8
(TW*  :;"++$$'0X % 	
 	++$$'0X % 	
 	!*Y+ <,Y2 "++$$'0X % 	
 	++$$'0X % 	
 	!*(
+*(
V  34#G 5#GL1:hJ8 
 
  K(>?  @K.  		|s   .[ )[ 
[[