
    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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# d dl$Z$	 d dl%Z%n# e&$ r Y nw xY wd
 Z'e$j(        )                    de           d             Z*d Z+d Z,d Z-d Z.e#d             Z/d Z0d Z1e$j(        )                    dddg dfddgg fdg dddgfdddgddgfg          d             Z2e$j(        )                    d d!d"g          d#             Z3d$ Z4d% Z5d& Z6d' Z7d( Z8e$j(        )                    d)g d*          d+             Z9d, Z:d- Z;d. Z<e#e$j(        )                    d/d0d d gd1d2d3g          d4                         Z=e#d5             Z>e#e$j(        )                    d6d7d8gfd9d:d;gfd<g d=fd>g d?fg          d@                         Z?e#dA             Z@e#dB             ZAdC ZBdD ZCdE ZDdF ZEdG ZFe$j(        )                    dHddIg          dJ             ZGdK ZHdL ZIdM ZJdN ZKdO ZLdP ZMdQ ZNe$j(        )                    dRdS e$jO        dTe$j(        P                    edUk     dVW          X          g          dY             ZQe$j(        )                    de           dZ             ZRe$j(        )                    d[d\g          d]             ZSe$j(        )                    d^d_  e jT                    D                       d`             ZUda ZVdb ZWdc ZXe$j(        Y                    dd          e$j(        )                    d[dedfg          dg                         ZZdh Z[e$j(        Y                    dd          e$j(        )                    d[dedfg          di                         Z\dj Z]e$j(        )                    ddkdlg          dm             Z^dn Z_e$j(        )                    ddkdlg          do             Z`dp Zadq Zbdr Zcds Zddt Zee$j(        )                    ddkdug          dv             Zfe$j(        )                    dwdxdyg          dz             Zge"e$j(        P                    d{ e            vd|W          d}                         Zhe$j(        Y                    dd          e$j(        )                    d^d~dg          d                         Zid Zje$j(        )                    d^ddg          d             Zke$j(        )                    d^d~dg          d             Zld Zmd Zne$j(        )                    dg d          e$j(        )                    d e$jO        dde$j(        P                    ejo        dk    dW          X           e$jO        dde$j(        P                    ejo        dk    dW          X          ddg          d                         Zpe$j(        )                    d e$jO        dde$j(        P                    ejo        dk    dW          X           e$jO        dde$j(        P                    ejo        dk    dW          X          ddg          d             Zqe$j(        )                    ddkdug          d             Zrd Zsd Ztd Zue$j(        P                    edW          d             ZvdS )    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_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                                         g d	k    sJ t          |          d
k    sJ t          |          t          |d                   k    sJ |d         d d         dk    sJ d S )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        i/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/pyogrio/tests/test_raw_io.py	test_readr4   '   s    $%8 9 9D!Xv;+%%%% I----
w&&&&>4''''>  "" ' ' '     v;;!x==Cq	NN**** A;rr?9999999    extc                    |dk    rt           st          j        d           t          || |          }|                                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
                                         g dk    sJ t          |          dk    sJ t          |          t          |d                   k    sJ d S )N	.gpkg.zipz(.gpkg.zip not supported for gdal < 3.7.0)dst_dirr6   r   r   r   )MultiPolygonr   Unknownr   r    r!   r"   r$   r#   r   )	r   pytestskipr   existsr   r,   r-   r.   )tmp_pathr/   r6   testfiler0   r1   r2   r!   s           r3   test_read_autodetect_driverrA   >   s4    k*>??? 3X3OOOH?? $XD!Xv;+%%%% $JJJJJ
w&&&&>4''''>  "" ' ' '     v;;!x==Cq	NN******r5   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)r<   warnsUserWarningr   )data_dirs    r3   )test_read_arrow_unspecified_layer_warningrH   Y   s    	k)E	F	F	F * *X(()))* * * * * * * * * * * * * * * * * *s   <A A c                    t          j        t          d          5  t          | d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )	Nz#Layer 'invalid' could not be openedrC   invalid)layerzLayer '-1' could not be openedzLayer '2' could not be opened   )r<   raisesr   r   r/   s    r3   test_read_invalid_layerrP   _   s   	~-R	S	S	S 3 3 	22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
~-M	N	N	N , , ++++, , , , , , , , , , , , , , , 
~-L	M	M	M + + ****+ + + + + + + + + + + + + + + + + +s1   :>> A>>BB$CC
Cc                     | \  }} t          t          |           ddgg          sJ t          |           d         }|j        dk    sJ d S )Nr/   r   rM   )   )r   r	   r   r,   )naturalearth_lowres_vsir1   r2   s      r3   test_vsi_read_layersrT   j   sn    !8A+,,0Ey/Q.R     +,,Q/H>V######r5   c                 <    t          | d          d         }|J d S )NF)read_geometryrM   )r   )r/   r2   s     r3   test_read_no_geometryrW   t   s,    'u===a@Hr5   c                     t          | dt          j        dd                    dd          \  }}t          j        |d         dg          sJ |J d S )NF7   )rV   maskrM      CAN)r   shapelyPointnpr   r/   r2   r!   s      r3   test_read_no_geometry__maskrb   z   sp    ]4$$   bb	
Hf >&)eW-----r5   c                     t          | dd          dd          \  }}t          j        |d         dg          sJ |J d S )NF)     @[     K@rd   re   )rV   bboxrM   r\   r]   )r   r`   r   ra   s      r3   test_read_no_geometry__bboxrg      sd    )   bb	
Hf >&)eW-----r5   c                     t          j        t          d          5  t          | g dd          }d d d            d S # 1 swxY w Y   d S )Nz^at least one of read_geometry or return_fids must be True or columns must be None or non-emptyrC   FcolumnsrV   return_fidsr<   rN   
ValueErrorr   r/   r1   s     r3   (test_read_no_geometry_no_columns_no_fidsro      s    	#
 
 
 	
 	
 5e
 
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
   =AAzdescr, columns, exp_columnsallr$   case_sensitiveNAMErepeats_dropped)r&   r&   r'   r&   r'   keep_original_orderr%   c                 z    t          | |d          \  }}}}t          |d         |          sJ d|             d S )NF)rj   rV   r!   zFailed for )r   r   )r/   descrrj   exp_columnsr0   _fids	_geometry_fieldss           r3   test_read_columnsr|      s[     '+WE' ' '#D%G tH~{33JJ5J55J5JJJJJJr5   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 d S )NrM   r}   r   rL   )r   maxr.   r`   r   )naturalearth_lowres_all_extr}   expected_geometryexpected_fieldsr2   r!   expected_counts          r3   test_read_skip_featuresr      s    )-.I)J)J122)N&7}UUU	Hf
 .//-?CCNx==N****vay>>^++++>($5mnn$EFFFFF>&*ob&9-..&IJJJJJJJr5   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 >= 0rC   rL   r   rl   rO   s    r3    test_read_negative_skip_featuresr      s    	z)G	H	H	H 4 4 33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4   ;??c                 f   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 d S )NrM   max_featuresr   rL   r   r.   r`   r   )r/   r   r   r2   r!   s        r3   test_read_max_featuresr      s    )-.A)B)B122)F&/a@@@DHfx==Avay>>Q>($5bqb$9:::::>&*ob&9"1"&=>>>>>>>r5   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 >= 0rC   rL   r   rl   rO   s    r3   test_read_negative_max_featuresr      s    	z)F	G	G	G 3 3 r22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 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 d S )N whererM   rR   r#   r   iso_a3 = 'CAN'   r\   r]   z+POP_EST >= 10000000 AND POP_EST < 100000000K   i i ziso_a3 = 'INVALID')r   r.   minr   ra   s      r3   test_read_wherer      s   /r:::122>Hfx==Cv;;!vay>>S     /7GHHHLHfx==Av;;!vay>>Q!9 #P  bb
Hf x==Bvay>>X%%%%vay>>I%%%% /7KLLLQRRPHfx==Ar5   c                     t          j        t          d          5  t          | d           d d d            d S # 1 swxY w Y   d S )NzInvalid SQLrC   rJ   r   rl   rO   s    r3   test_read_where_invalidr      s    	z	7	7	7 3 3 	22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3r   rf   ))r   )r   rM   r   rM   r\   c                     t          j        t          d          5  t          | |           d d d            d S # 1 swxY w Y   d S )NzInvalid bboxrC   rf   rl   )r/   rf   s     r3   test_read_bbox_invalidr      s    	z	8	8	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 d S )	N)r   r   h㈵>r   r   rM   r   i   ir~   r\   PANCRIr   )r   r2   r!   s      r3   test_read_bboxr      s    7>VWWW	Hf x==A7>OPPPQRQSQSTHfx==A>&)eU^4444444r5   c                     t          | dd          d         }t          |d                   dk    sJ t          j        |d         dg          sJ d S )NL2   Z   DSELECT * from naturalearth_lowres where iso_a3 not in ('USA', 'RUS'))rf   sqlr\   r   r]   r   r   r!   s     r3   test_read_bbox_sqlr   	  sj    #!R   		F
 vay>>Q>&)eW-------r5   c                     t          | dd          d         }t          |d                   dk    sJ t          j        |d         dg          sJ d S )Nr   iso_a3 not in ('USA', 'RUS'))rf   r   r\   r   r]   r   r   s     r3   test_read_bbox_wherer     sj    #!,   		F
 vay>>Q>&)eW-------r5   r[   r_   )typecoordinatesz({"type": "Point", "coordinates": [0, 0]}rJ   c                     t          j        t          d          5  t          | |           d d d            d S # 1 swxY w Y   d S )Nz+'mask' parameter must be a Shapely geometryrC   r[   rl   )r/   r[   s     r3   test_read_mask_invalidr     s     
z)V	W	W	W - - t,,,,- - - - - - - - - - - - - - - - - -r   c           	          t          j        t          d          5  t          | dt	          j        dd                     d d d            d S # 1 swxY w Y   d S )Nz!cannot set both 'bbox' and 'mask'rC   r   rY   rZ   )rf   r[   )r<   rN   rm   r   r^   r_   rO   s    r3   test_read_bbox_mask_invalidr   +  s    	z)L	M	M	M X X '8w}TSU?V?VWWWWX X X X X X X X X X X X X X X X X Xs   &A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 d S )Nr   rM   r\   )r^   from_wktr   r`   r   r.   )r   r[   expectedr2   r!   s        r3   test_read_maskr   1  st    6 D!!D7dCCCABBGHf>&)X.....x==CMM))))))r5   c           	          t          | t          j        dddd          d          d         }t          |d                   dk    sJ t	          j        |d         d	g          sJ d S )
Nr   r   r   r   r   )r[   r   r\   r   r]   r   r^   boxr.   r`   r   r   s     r3   test_read_mask_sqlr   T  sz    #[r4,,R   		F
 vay>>Q>&)eW-------r5   c           	          t          | t          j        dddd          d          d         }t          |d                   dk    sJ t	          j        |d         d	g          sJ d S )
Nr   r   r   r   r   )r[   r   r\   r   r]   r   r   s     r3   test_read_mask_wherer   _  sz    #[r4,,,   		F
 vay>>Q>&)eW-------r5   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         |                   sJ d S )	NTrk   r   )r   r~   r#   )fidsrk   r\   r   rL   )r   r`   arrayr.   r   )	r/   expected_fidsr   r   subsetr   indexr2   r!   s	            r3   test_read_fidsr   j  s?   8<9 9 9bb9
5M$o ZZF&))* G G"&f$#
 #
 #

""#x 4yyA~~~~8}}!!!!6!9~~""""~e]6%:;;;;;~h(9&(ABBBBB~fRj/"*=f*EFFFFFFG Gr5   c                    t          j        t          d          5  t          | dg           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | dg           d d d            d S # 1 swxY w Y   d S )NzCAttempt to read shape with feature id \(-1\) out of available rangerC   rL   )r   zDAttempt to read shape with feature id \(200\) out of available ranger   )r<   rN   r   r   rO   s    r3   test_read_fids_out_of_boundsr   ~  s'   	T
 
 
 - - 	 t,,,,	- - - - - - - - - - - - - - - 
U
 
 
 . . 	 u----	. . . . . . . . . . . . . . . . . .s   ;??!BBBc           	         t          j        t          d          5  t          | dgd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | dgd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | dgd	           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | dgd
           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | dgd           d d d            n# 1 swxY w Y   t          r\t          j        t          d          5  t          | dgt          j        dd                     d d d            d S # 1 swxY w Y   d S d S )Nz!cannot set both 'fids' and any ofrC   r   r   )r   r   )it   r   -   )r   rf   r#   )r   r}   )r   r   )r   r   -C6?r   r   )r   r[   )r<   rN   rm   r   r   r^   r_   rO   s    r3   #test_read_fids_unsupported_keywordsr     s   	z)L	M	M	M D D s2BCCCCD D D D D D D D D D D D D D D 
z)L	M	M	M G G s1EFFFFG G G G G G G G G G G G G G G 
z)L	M	M	M = = s!<<<<= = = = = = = = = = = = = = = 
z)L	M	M	M < < s;;;;< < < < < < < < < < < < < < < 
z)L	M	M	M I I s1GHHHHI I I I I I I I I I I I I I I  J]:-PQQQ 	J 	J$A3W]1a5H5HIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	JJ Jsi   <A A "BB	B(CCC.DDD4EEE'F55F9<F9c                 0   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 d S )
Nr   Fr   TrM   )rk   r}   r   r\   int64dtype)r   r   r`   r   r   r   )r/   r   s     r3   test_read_return_fidsr     s    #$$Q'D<<<#777:D<<<#QUVWWW	D :!!!!>$!Qw ? ? ?@@@@@@@r5   c                     t          | g dd          \  }}}}|J t          |          dk    sJ |J t          |          dk    sJ d S )NFTri   rR   r   )r   r.   )r/   r1   r   r2   
field_datas        r3   test_read_return_only_fidsr     sv    $(Ru$% % %!AtXz t99z??ar5   r   
ISO-8859-1c                    t          |          \  }}}}| dz  }||d<   t          |||fi | |                                sJ dD ]+}|                    |                                          sJ ,||nd}	t	          |                    d                    5 }
|
                                 }||	k    sJ 	 d d d            d S # 1 swxY w Y   d S )Ntest.shpr   )z.dbfz.prjr    .cpg)r   r   r>   with_suffixopen)r?   r/   r   r0   r1   r2   r   filenamer6   expected_encodingcpg_fileresult_encodings               r3   test_write_shpr     sE   $()<$=$=!D!Xz*$HD	(Hj11D111?? 2 2##C((//111111 %-$8g	h""6**	+	+ 4x"--//"3333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   CC	C	c                     t          |          \  }}}}|                    ddi           | dz  }t          |||fddi| |                                sJ d S )Nr   r:   	test.gpkgdriverGPKG)r   updater   r>   r?   r/   r0   r1   r2   r   r   s          r3   test_write_gpkgr     su    $()<$=$=!D!XzKK.1222+%H	(Hj@@@4@@@??r5   c                 X   t          |          \  }}}}d|d<   | dz  }t          |||fddd| |                                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 d S )Nr:   r   r   r   firstr   rK   second)r   r   r>   r`   r   r	   r   s          r3   test_write_gpkg_multiple_layersr     s    $()<$=$=!D!Xz*D+%H	(HjOwOO$OOO??>+h//7N2K1LMMMMM	(HjPxPP4PPP>H. 9Hn;UV      r5   c                 6   t          |          \  }}}}| dz  }t          |||fddi| |                                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 )Nz	test.jsonr   GeoJSONr   FeatureCollectionr'   testr   featuresr!   r   
properties)
r   r   r>   jsonloadsr   r.   set
differencekeys)r?   r/   r0   r1   r2   r   r   datas           r3   test_write_geojsonr    s3   $()<$=$=!D!Xz+%H	(HjCCCdCCC??:d8nn))++,,D<.....<6!!!!D====tJ  CMM1111DN&&tJ'7':<'H'M'M'O'OPP      r5   c                    t          |          \  }}}}d}d|d<   d|d<   | dz  }t          |||fddi| |                                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 dS )z3Test writing file with no fields/attribute columns.Nr!   r:   r   r   r   r   r   r   r   r    r   r   rR   r*   r+   )r   r   r>   r,   r.   r?   r/   r0   r1   r2   r   r   r!   s           r3   test_write_no_fieldsr    s9    %))<$=$=!D!XzJDN +D +%H	(Hj@@@4@@@ ?? $XD!Xv;+%%%% N2222
w&&&&>4''''v;;!x==C A;rr?9999999r5   c                    t          |          \  }}}}d}d|d<   | dz  }t          |||fddi| |                                sJ t          |          \  }}}}|d         J |d         J |d         dk    sJ |d	         j        d
k    sJ |d	                                         g dk    sJ t          |          dk    sJ t          |d                   dk    sJ dS )z*Test writing file with no geometry column.Nr   r   r   r   r   r   r    r!   r"   r$   r#   r   rR   r   r   r>   r,   r-   r.   r  s           r3   test_write_no_geomr    s@    %))<$=$=!D!XzH D +%H	(Hj@@@4@@@ ?? $XD!Xv; (((
w&&&&>4''''>  "" ' ' '     v;;!vay>>S      r5   c                    t          |          \  }}}}d}| dz  }t          |||fddi| |                                sJ t          |          \  }}}}	|d         J |d         J |d         dk    sJ |d	         j        d
k    sJ |d	                                         g dk    sJ t          |	          dk    sJ t          |	d                   dk    sJ |J dS )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   rR   r
  )
r?   r/   r0   r1   r2   r   r   result_metaresult_geometryresult_field_datas
             r3   test_write_no_geom_datar  <  sO    %))<$=$=!D!Xz H +%H	(Hj@@@4@@@ ??9=h6KO%6u%%%'///z"g----x &$....x '')) . . .      !!Q&&&& #$$++++"""""r5   c                      t          j        t          d          5  t          dddd           ddd           dS # 1 swxY w Y   dS )z>Test writing file with no geometry column nor fields -> error.z6You must provide at least a geometry column or a fieldrC   r   N)r2   r   r!   )r<   rN   rm   r    r5   r3   test_write_no_geom_no_fieldsr  b  s    	F
 
 
 H H 	kDT$GGGG	H H H H H H H H H H H H H H H H H Hrp   write_int64FTr\   	   r   z<OpenFileGDB write support for int64 values for GDAL >= 3.9.0)reason)marksc           	         t          j        t                              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            n# 1 swxY w Y   t          |          \  }	}
}}|s|d                             d          |d<   |d                             d          |d<   |	d         |d         k    sJ t          j        |	d         |d                   sJ t          j        ||          sJ t          t!          |                    D ]C}||         j        ||         j        k    sJ t          j        ||         ||                   sJ Dd S )N*010100000000000000000000000000000000000000r\   r   TFTboolr   int16int32r   float32float64r  r  r  r   r  r   r_   r   )r   r   r!   ztest.gdbTARGET_ARCGIS_VERSIONARCGIS_PRO_3_2_OR_LATERr  z&Integer64 will be written as a Float64rC   r   OpenFileGDBr   r   r!   )r`   r   bytesfromhexobjectr   
contextlibnullcontextr<   rE   RuntimeWarningr   r   astyper   ranger.   r   )r?   r  r   expected_field_datar   expected_metar   write_paramsctxr0   r1   r2   r   is                 r3   test_write_openfilegdbr2  k  s    	C	D	DEIQW   	$$$F333
'***
'***
'***
),,,
),,, POOO ! M *$H ALS	 ";<<QS   
&22$&&l"J
 
 
 
 
 
	
 	
 !		

 	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 %)NN!D!Xz J!4Q!7!>!>y!I!IA 13::7CC;-.....>$x.-*ABBBBB>($5666663*++,, E E!}"&9!&<&BBBBB~jm-@-CDDDDDDE Es   D99D= D=c                 T   |dk    rt          j        d           t          |          \  }}}}d|d<   | d| z  }t          |||fi | |                                sJ t          |          d         dk    sJ t          |||fdd	i| t          |          d         d
k    sJ d S )Nr8   z$Append to .gpkg.zip is not supportedr:   r   r   r   rR   appendTib  )r<   r=   r   r   r>   r
   )r?   r/   r6   r0   r1   r2   r   r   s           r3   test_write_appendr5    s    
k:;;;$()<$=$=!D!Xz +D,,,&H	(Hj11D111??Xz*c1111 
(Hj>>>>>>Xz*c111111r5   z
driver,ext)GMLz.gmlc                 N   t          |          \  }}}}| d| z  }t          |||fd|i| |                                sJ t          |d          d         dk    sJ t	          j        t                    5  t          |||f|dd| d d d            d S # 1 swxY w Y   d S )Nr   r   T)force_feature_countr   rR   )r   r4  )r   r   r>   r
   r<   rN   r   )	r?   r/   r   r6   r0   r1   r2   r   r   s	            r3   test_write_append_unsupportedr9    s,   $()<$=$=!D!Xz ,,,&H	(Hj@@@4@@@??X4888DKKKK		'	' R Rh*QVDQQDQQQR R R R R R R R R R R R R R R R R Rs   :BB!Br   c                     h | ]}|d v|	S ))ESRI Shapefiler   r   r  ).0r   s     r3   	<setcomp>r=    s.       >>> 	>>>r5   c                     t          |dg          \  }}}}d|d<   | dt          |          z  }t          ||dd         fd |D             |d	| |                                sJ dS )
zATest drivers known to work that are not specifically tested abover(   )rj   r:   r   r   Nr   c                 "    g | ]}|d d         S )Nr   r  )r<  fs     r3   
<listcomp>z(test_write_supported.<locals>.<listcomp>  s     ...aAbqbE...r5   )r   r   )r   r   r   r>   )r?   r/   r   r0   r1   r2   r   r   s           r3   test_write_supportedrB    s     %))<xj$Q$Q$Q!D!Xz
 +D5F!3555H	! /.:...	 
    ??r5   c                     t          |          \  }}}}| dz  }t          j        t          d          5  t	          |||fddi| ddd           dS # 1 swxY w Y   dS )z:Test writing using a driver that does not support writing.ztest.topojsonz$does not support write functionalityrC   r   TopoJSONN)r   r<   rN   r   r   r   s          r3   test_write_unsupportedrE    s    $()<$=$=!D!Xz/)H	.T	U	U	U I Ih*HHZH4HHHI I I I I I I I I I I I I I I I I Is   AAAc                     t          |           \  }}}}d}t          dddd           t          j        t          d          5  t          |||fi | d d d            d S # 1 swxY w Y   d S )Nz%s3://non-existing-bucket/test.geojsonrJ   T)AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_NO_SIGN_REQUESTz#Failed to write features to datasetrC   )r   r   r<   rN   r   r   )r/   r0   r1   r2   r   r   s         r3   test_write_gdalclose_errorrJ    s    $()<$=$=!D!Xz6H !*%.#'	
 	
   
.S	T	T	T 6 6h*555556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   A""A&)A&c                    | \  }}}}|\  }}}}	t          j        |d         |d                   sJ t          j        ||          sJ t          d t          ||	          D                       sJ t          rOt          j        t          j        |          t          j        |          d                                          sJ d S d S )Nr!   c              3   F   K   | ]\  }}t          j        ||          V  d S Nr`   r   r<  f1f2s      r3   	<genexpr>z&assert_equal_result.<locals>.<genexpr>  s2      RR&"br~b"%%RRRRRRr5   r   )	tolerance)r`   r   rq   zipr   r^   equals_exactfrom_wkb)
result1result2meta1index1	geometry1field_data1meta2index2	geometry2field_data2s
             r3   assert_equal_resultra    s    ,3)E69k,3)E69k>%/5?;;;;;>&&)))))RRC[4Q4QRRRRRRRR  #Y'')9))D)DPW
 
 

#%%	 	 		 	 	r5   z"ignore:File /vsimem:RuntimeWarning)r   geojson)r   gpkgc                 L   t          |          \  }}}}|                    ddi           | d| z  }t          |||fd|i| t          |d          5 }	|	                                 }
d d d            n# 1 swxY w Y   t          |
          }t	          ||||f|           d S Nr   r;   test.r   rbr   r   r   r   ra  )r?   r/   r   r6   r0   r   r2   r   r   r@  bufferrX  s               r3   test_read_from_bytesrj  (  s     )--@(A(A%D%:KK),----#--'H	(Hj@@@4@@@	h		                6llGuh
;WEEEEEs   A66A:=A:c                     | \  }}t          |          \  }}}}t          |d          5 }|                                 }d d d            n# 1 swxY w Y   t          |          }	t          ||||f|	           d S )Nrg  )r   r   ra  )
rS   pathvsi_pathr0   r   r2   r   r@  ri  rX  s
             r3   test_read_from_bytes_zippedrn  7  s    ,ND((,X%D%:	dD		 Q               6llGuh
;WEEEEEs   AAAc                 $   t          |          \  }}}}|                    ddi           | d| z  }t          |||fd|i| t          |d          5 }	t          |	          }
d d d            n# 1 swxY w Y   t	          ||||f|
           d S re  rh  )r?   r/   r   r6   r0   r   r2   r   r   r@  rX  s              r3   test_read_from_file_likerp  B  s     )--@(A(A%D%:KK),----#--'H	(Hj@@@4@@@	h		 q''               uh
;WEEEEEs   A11A58A5c                 ~    t          |           \  }}}}|d         j        dk    sJ t          |          dk    sJ d S )Nr!   r  r   )r   r,   r.   )nonseekable_bytesr0   r1   r2   s       r3    test_read_from_nonseekable_bytesrs  P  sN     122D!Xq>4''''x==Ar5   rc  fgbc           	         t          j        t                              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    sJ d S )Nr  r\   r   r  r  r   r  r  r   r  r   r!  r_   r   Fr   r   spatial_indexrf  c              3   F   K   | ]\  }}t          j        ||          V  d S rM  rN  rO  s      r3   rR  z5test_read_write_data_types_numeric.<locals>.<genexpr>j  s2      LL&"br~b"%%LLLLLLr5   c              3   <   K   | ]\  }}|j         |j         k    V  d S rM  r   rO  s      r3   rR  z5test_read_write_data_types_numeric.<locals>.<genexpr>k  s/      JJBrx28#JJJJJJr5   ))int8r  )uint8r  )uint16r  )uint32r   )uint64r   r   .colr   )r`   r   r%  r&  r'  r   r   rq   rT  	enumerater   r   )r?   r6   r2   r   r!   r0   r   resultr1  r   result_dtypes              r3   "test_read_write_data_types_numericr  V  s]    x	C	D	DEIQW  H 	$$$F333
'***
'***
'***
),,,
),,,J GFFF$[5QQD-#--'H	(Hj&99D999(^^AFLLC
4K4KLLLLLLLLJJ#fj2I2IJJJJJJJJ %.	
 	
 	
% % , ,  E< hyyy6667
.Q.....h*ug>>>>>h"1%~fbhyyy&9&9:::::||+++++, ,r5   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                              d          gdz  t
                    }dddd}| dz  }t          ||||fi | t          |          d         }t          |          D ]g\  }}|dk    r7t          j	        ||         ||         
                    d	                    sJ Bt          j	        ||         ||         d          sJ hd S )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  rM   r_   r   Frv  r   r\   r  T)	equal_nan)r`   r   
datetime64r%  r&  r'  r   r   r  r   r+  )	r?   r   r!   r2   r0   r   r  idxfields	            r3   test_read_write_datetimer    s   
,-_EEE
$&;<OTTT
!:;CS	
 	
 	
 	!:;CS	
 	
 	
 	!@A"	
 	
 	

 	"-&&-5EFFFJ   F x	C	D	DEIQW  H %[5QQD+%H	(Hj&99D999(^^AF'' P P
U+++>&+z#/E/EFV/W/WXXXXXX>&+z#$OOOOOOOP Pr5   c                 |   t          j        t                              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 d S )Nr  r\   r   )r   l   o] r   overflow_int64r_   r   Frv  rf  r   )	r`   r   r%  r&  r'  r   r   r   r   )r?   r6   r2   r   r!   r0   r   r  s           r3   test_read_write_int64_larger    s    
 x	C	D	DEIQW  H (...g>>>?JF$[5QQD-#--'H	(Hj&99D999(^^AF>&*-----!9?jm1111111r5   c                     t          |           d         }t          |          D ]B\  }}t          j        |d                   sJ |dk    r|j        dk    sJ 5|j        dk    sJ Cd S )Nr\   rL   r  r  r   )r   r  r`   isnanr   )test_gpkg_nullsr!   r1  r  s       r3   &test_read_data_types_numeric_with_nullr    s    /""1%Ff%% , ,5xb	""""" 66;)+++++;)+++++, ,r5   c                     t          |           d         d         }|j        dk    sJ |d         t          j        d          k    sJ |d         t          j        d          k    sJ d S )Nr\   r   r  2020-01-01 09:00:00.123r   2020-01-01 10:00:00.000)r   r   r`   r  )datetime_filer  s     r3   test_read_datetime_millisecondr    ss    "1%E;*****8r}%>??????8r}%>????????r5   c                 :   | dz  }t          |d          5 }|                    d           |                    d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |           d d d            d S # 1 swxY w Y   d S )Ntest.unsupportedwcolumn1,column2
data1,data2z0.* by prefixing the file path with '<DRIVER>:'.*rC   )r   r   r<   rN   r   r   )r?   test_unsupported_pathfiles      r3   test_read_unsupported_extr    s*   $'99	#S	)	) "T

&'''

=!!!" " " " " " " " " " " " " " " 
Q
 
 
 $ $ 	"###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s#   +AAA3BBBc                 (   | dz  }t          |d          5 }|                    d           |                    d           d d d            n# 1 swxY w Y   t          d|           \  }}}}t          |          dk    sJ |d         dk    sJ d S )	Nr  r  r  r  zCSV:rM   r   data1)r   r   r   r.   )r?   r  r  r1   r   s        r3   %test_read_unsupported_ext_with_prefixr    s    $'99	#S	)	) "T

&'''

=!!!" " " " " " " " " " " " " " " =&;==>>Aq!Zz??aa=G######s   +AAA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 t          d
k     r|d         dk    sJ |d         dk    sJ d S |d         dk    sJ |d         dk    sJ d S )Nr\   r   r  r  r   r  T)datetime_as_stringr'  )r\      r   z2020/01/01 09:00:00.123-05z2020/01/01 10:00:00-05z2020-01-01T09:00:00.123-05:00z2020-01-01T10:00:00-05:00)r   r   r`   r  r   )datetime_tz_filer  s     r3   test_read_datetime_as_stringr    s   !""1%a(E;*****8r}%>??????8r}%>??????!d;;;A>qAE;("""")##Qx77777Qx3333333Qx:::::Qx6666666r5   rb  c                    t          j        t                              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 d S )Nr  r   r   rM   r  r  r_   r   r   r   rc  Frw  rf  r   )r`   r   r%  r&  r'  r   r   r   )	r?   r6   r2   r   r!   r0   r   r  result_fieldss	            r3   test_read_write_null_geometryr    s     x	C	D	DdK  H (Aq61112JWF$[99D
f}} %_-#--'H	(Hj&99D999%)(^^ABB%7"O]>/844444>-*JqM:::::::r5   r   r  r   c                 j   t          j        t                              d          gdz  t                    }t          j        dt           j        g|          g}dg}ddd}| d	z  }t          ||||fi | t          |          5 }|                                }d d d            n# 1 swxY w Y   d
|v sJ |dk    rt          j
        t          d          }	nt          j                    }	|	5  t          ||||fi |ddi d d d            n# 1 swxY w Y   t          |          5 }|                                }d d d            n# 1 swxY w Y   d|v sJ t          ||||fi |ddd t          |          5 }|                                }d d d            n# 1 swxY w Y   d|v sJ d S )Nr  rM   r         ?r  r_   r   r  test.geojsonz{ "col": null }r  z$NaN of Infinity value found. SkippedrC   nan_as_nullFz"properties": { }YES)r  WRITE_NON_FINITE_VALUESz{ "col": NaN })r`   r   r%  r&  r'  nanr   r   r   r<   rE   r*  r(  r)  )
r?   r   r2   r   r!   r0   r   r@  contentr0  s
             r3   test_write_float_nan_nullr    s    x	C	D	DEI  H (C=6667JWF$[99D.(H 
(Hj&99D999	h 1&&((              '''' 	l>1WXXX$&&	 Q Qh*fPPPP%PPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q	h 1&&((              ')))) 
	 
   %     
h 1&&((              w&&&&&&sH   B((B,/B,0DDD+EEEF""F&)F&ArrowzArrow driver is not availablec                    dd l }t          j        t                              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        	                    |          }|d         
                                                                ddgk    sJ t          ||||fddd| |j        	                    |          }|d         
                                                                ddgk    sJ t          j        d          }|                    |d                                                   ddgk    sJ d S )Nr   r  rM   r   r  r   r  r_   r   r  z
test.arrowr   r  FT)r   r  zpyarrow.compute)pyarrow.featherr`   r   r%  r&  r'  r  r   feather
read_tableis_null	to_pylistr<   importorskipis_nan)	r?   pyarrowr2   r   r!   r0   fnametablepcs	            r3   test_write_float_nan_null_arrowr  >  s   
  x	C	D	DEI  H (C=	:::;JWF$[99D|#E 
%:vFFgFFFFO&&u--E<!!++--%>>>> 
xV4; RV   O&&u--E<!!++--%????		.	/	/B99U5\"",,..5$-??????r5   r   r   c                    t          |           \  }}}}|                    ddi           t                      }t          |||f|dd| t	          |                                          dk    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 d S )Nr   r:   r   r   r   r!   )	r   r   r   r   r.   	getbufferr	   r`   r   )
r/   r   r0   r1   r2   r   ri  actual_metaactual_geometryactual_field_datas
             r3   test_write_memoryr  ^  s    %))<$=$=!D!XzKK.1222YYF	&(JLvVLLtLLLv!!""Q&&&&vq!!$....9=f6KO%6>+h/h@@@@@>+Z888883x==000000r5   c                     t          |           \  }}}}t                      }t          j        t          d          5  t          |||fd dd| d d d            d S # 1 swxY w Y   d S )Nz2driver must be provided to write to in-memory filerC   r   r   r   r   r<   rN   rm   r   r/   r0   r1   r2   r   ri  s         r3   !test_write_memory_driver_requiredr  q  s    $()<$=$=!D!XzYYF	B
 
 
 O O 	fh
N4vNNNNN	O O O O O O O O O O O O O O O O O Os   AA"%A"r;  r$  c                     t          |           \  }}}}t                      }t          j        t          d|           5  t          |||f|ddd| d d d            d S # 1 swxY w Y   d S )Nz/writing to in-memory file is not supported for rC   r   Tr   rK   r4  r  r/   r   r0   r1   r2   r   ri  s          r3   $test_write_memory_unsupported_driverr  |  s    $()<$=$=!D!XzYYF	TFTT
 
 
 
 
 		
 	
 	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A""A&)A&c                    t          |           \  }}}}|                    ddi           t                      }t          j        t
          d          5  t          |||f|ddd| d d d            d S # 1 swxY w Y   d S )Nr   r:   z+append is not supported for in-memory filesrC   r   Tr  )r   r   r   r<   rN   NotImplementedErrorr   r  s          r3   $test_write_memory_append_unsupportedr    s    $()<$=$=!D!XzKK.1222YYF	#P
 
 
 
 
 		
 	
 	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A66A:=A:c                     t          |           \  }}}}t          d          }t          j        t          d          5  t          |||fddd| d d d            d S # 1 swxY w Y   d S )Ns   0000z5writing to existing in-memory object is not supportedrC   r   r   r   )r   r   r<   rN   r  r   r  s         r3   &test_write_memory_existing_unsupportedr    s    $()<$=$=!D!XzWF	E
 
 
 T T 	fh
S9FSSdSSS	T T T T T T T T T T T T T T T T T Ts   AA#&A#c           	      L   t          |          \  }}}}t          j        t          d          5  t	          | dz  d          5 }t          |||fdd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          |||fdd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           dS # 1 swxY w Y   dS )zEVerify that writing to an open file handle is not currently supportedz3writing to an open file handle is not yet supportedrC   r  wbr   r   r   Nztest.geojson.zipr  )r   r<   rN   r  r   r   r   )r?   r/   r0   r1   r2   r   r@  zs           r3   test_write_open_file_handler    s    %))<$=$=!D!Xz 
#X
 
 
 S S (^+T22 	Sa!XzR)6RRTRRR	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	S 	SS S S S S S S S S S S S S S S 
#X
 
 
 W W X 22C88 	WA,, Wa:VivVVQUVVVW W W W W W W W W W W W W W W	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	WW W W W W W W W W W W W W W W W W Ws   A:A#A:#A'	'A:*A'	+A::A>A> D4DC*D*C..D1C.2D5DD	DD		DD D)rt  rc  rb  zread_encoding,write_encodingwin32z&must specify write encoding on Windowsr    )Nr    )r    r    c                 R   t          j        t                              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 d S )Nr  r      العربية   ᓀᐦᐃᔭᐍᐏᐣ   中文r_   r   r   r   r   rf  r   r!   )	r`   r   r%  r&  r'  r   r   r   r
   )r?   r6   read_encodingwrite_encodingr2   arabiccreemandarinr   r!   r0   r   r  r1   r  s                  r3   test_encoding_ior    sN   0 x	C	D	DEV  H F"DH
&(((
$v&&&
(6***J
 dH%F$[nUUD-#--'H	(Hj&99D999+/=+Q+Q+Q(KA(>&+h"788888>*&788888>&)H}"M"M"Mh"WXXXXXXXr5   c                    t          j        t                              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 ||
	                    d          
                                 t          |
|          \  }}}}t          j        ||d                   sJ t          j        ||          sJ t          j        |t          |
|          d                   sJ d S d S )Nr  r   r  r  r  r#   r\   r_   r   r    r  r   r  r!   r   )r`   r   r%  r&  r'  r   r   r   r
   r   unlink)r?   r  r  r2   r  r  r  r   r!   r0   r   r  r1   r  s                 r3   test_encoding_io_shapefiler    s   . x	C	D	DEV  H F"DH
&(((
$v&&&
(6***J RaRj$rr(H-F$[gNND*$H 
(Hj&99D999+/=+Q+Q+Q(KA(>&+h"788888>*&788888>&)H}"M"M"Mh"WXXXXX  V$$++---/3H}/U/U/U,Q,~fk(&;<<<<<~j*;<<<<<~Ih???I
 
 	
 	
 	
 ! 
	
 	
r5   c                    |\  }}t          j        t                              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           n# 1 swxY w Y   t          j        t                    5  t          |	           ddd           n# 1 swxY w Y   t          |	|          \  }
}}}|
d	         d
         |k    sJ |d
         |k    sJ t          |	|          d	         d
         |k    sJ dS )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  rf  Nr  r!   r   )r`   r   r%  r&  r'  r   r<   rN   UnicodeDecodeErrorr   r
   )r?   r6   encoded_textr   textr2   r   r!   r0   r   r  r1   r  s                r3   test_non_utf8_encoding_ior  4  s    "NHd x	C	D	DEV  H (D60001JVF$[hOOD-#--'H	(Hj&99D999 
)	*	*  X               
)	*	*  (               ,08+L+L+L(KA(x #t++++Q4''''X111(;A>$FFFFFFs$   B--B14B1C--C14C1c                 ^   |\  }}t          j        t                              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 |                    d	          	                                 |
                    |                              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           d S # t          dd i           w xY w)Nr  r   r_   r   r  r   r!   r   r   r   r  SHAPE_ENCODINGCP1254)r`   r   r%  r&  r'  r   r   r
   r   r  encodedecoder   r   )r?   r  r   r  r2   r   r!   r0   r   r  r1   r  miscodedbad_metabad_field_datas                  r3   #test_non_utf8_encoding_io_shapefiler  [  s   !NHd x	C	D	DEV  H (D60001JVF$[hOOD*$H	(Hj&99D999
 ,0>>(KA(x #t++++Q4''''Xx(+t3333   ''))) {{8$$++L99H%)(^^"HaNHa H,,,,!((((Xx(+x7777 ,08+L+L+L(KA(x #t++++Q4''''X111(;A>$FFFF:!18 <===H---%&6778CCCCC 	 !14 899999!14 89999s   7H H,c                 h   t          j        t                              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        	                    |d         t          j        dt           j
        dg                     t          j        ddg          g}t          j        t                    5  t          |||||fi | d d d            n# 1 swxY w Y   t          j        g d          gdz  }t          j        t                    5  t          |||||fi | d d d            d S # 1 swxY w Y   d S )Nr  r\   r   r   r  )FTFr  r_   r   r  r  rM   r   r   FT)r`   r   r%  r&  r'  r   r   r   testingassert_allcloser  r<   rN   rm   )	r?   r2   r   
field_maskr!   r0   r   r  r  s	            r3   test_write_with_maskr    sw   x	C	D	DEI  H (999G4445J(///001JWF$[99D.(H	(Hj&*EEEEE%)(^^ABB%7"O]>/844444J}Q/1bfa.1I1IJJJ (E4=))*J	z	"	" J Jh*fjIIDIIIJ J J J J J J J J J J J J J J (///001A5J	z	"	" J Jh*fjIIDIIIJ J J J J J J J J J J J J J J J J Js$   ,E

EEF''F+.F+c                 f   t          |           5 \  }}t          |t                    sJ t          |t          j        j                  sJ |                                }t          j        	                    t          j
        |          d          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Ns   arrow_array_streamr   )r   
isinstancedictpyogrio_io_ArrowStream__arrow_c_stream__ctypes	pythonapiPyCapsule_IsValid	py_object)r/   r0   readercapsules       r3   0test_open_arrow_capsule_protocol_without_pyarrowr    s     
'	(	( 	
NT6$%%%%%&'+":;;;;;++--.. ))+@      	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   BB&&B*-B*zpyarrow is installedc                     t          j        t                    5  t          | d          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 )NT)use_pyarrow)r<   rN   ImportErrorr   rn   s     r3    test_open_arrow_error_no_pyarrowr    s    
 
{	#	#  +>>> 	!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s.   A:A>	A>	AAA)wr(  r  r   sysior   zipfiler   numpyr`   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  r4   markparametrizerA   rH   rP   rT   rW   rb   rg   ro   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  paramskipifr2  r5  r9  valuesrB  rE  rJ  ra  filterwarningsrj  rn  rp  rs  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  r5   r3   <module>r&     s         



                                       A @ @ @ @ @ @ @ @ @ H H H H H H H H H H / / / / / / / / / /              	NNNN 	 	 	D	: : :. ((+ + )(+4* * *+ + +$ $ $       

 

 

 !	NNNO	F8R(	>>>f@UV	i 89k:RS	 K K K 2s)44K K 54K"4 4 4
? ? ?3 3 3
  63 3 3
 !:!:!:;;- - <;-
5 5 5. . .. . . 
!Q002 - -  -
 X X X
 	UG$	:UENK "!!
	
 "!!	
 2* *3  4* . . . . . .G G G(. . .J J J*A A A"      dL%9::4 4 ;:4$    $  &: : :<! ! !@## ## ##LH H H +$$ 9,U %  	
 	
 	
	 <E <E <E~ ((2 2 )(2, '899R R :9R  $gn&&     *I I I6 6 6$  " @AA(>@P'QRR
F 
F SR BA
FF F F @AA(>@P'QRR	F 	F SR BA	F   00&, &, 10&,R(P (P (PV 002 2 102$, , ,@ @ @	$ 	$ 	$$ $ $7 7 7&  344; ; 54;& 9i"899)' )' :9)'X <<>>!*I   @ @  @8 @AAIv#6771 1 87 BA1"O O O $4m#DEE
 
 FE
& Iv#677
 
 87
(T T TW W W*  : : :;;"+$$'0X %  	
 	
 	
 	+$$'0X %  	
 	
 	
 	! *Y Y+  <;,Y2 "+$$'0X %  	
 	
 	
 	+$$'0X %  	
 	
 	
 	! *(
 (
+ *(
V  344#G #G 54#GL1: 1: 1:hJ J J8
 
 
  K(>??  @?  s   ,A1 1A98A9