a
    1$eS                  	   @   s"  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z
d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlZd dlmZmZ d dlmZ d d	lmZmZ d d
lm Z m!Z! d dl"m#Z#m$Z$ zd dl%Z%W n e&y   dZ%Y n0 z$d dl'Z'eee'j(j)edkZ*W n e&yF   dZ'dZ*Y n0 ej+j,e% ddZ-ej+j,e' ddZ.dZ/ej0ej1de.dej1de-dgddd Z2dd Z3ej0dd Z4ej0dd Z5ej0dd Z6ej0d d! Z7g d"Z8d#d$ Z9ej+:d%e8d&d' Z;ej+:d%e8d(d) Z<ej+:d%e8d*d+ Z=e  d,d-d.d/d0d1d2Z>e?d3Z@e>e@Ae>fZBej+j:d4eBd5d6ej+:d%e8d7d8 ZCd9d:gZDd;d< ZEej+:d=eDd>d? ZFej+:d=eDd@dA ZGdBdC ZHej+:d%e8dDdE ZIej+:d%e8dFdG ZJdHdI ZKej+:d%e8dJg dKdL ZLej+:d%e8dMdN ZMdOdP ZNdQdR ZOdSdT ZPdUdV ZQdWdX ZRdYdZ ZSej+:d%e8d[d\ ZTd]d^ ZUej+:d%e8d_d` ZVdaZWdbdc ZXej+jYej+:ddg dedfdg ZZdhdi Z[djdk Z\dldm Z]dndo Z^dpdq Z_drds Z`dtdu Zadvdw Zbdxdy Zcdzd{ Zdd|d} Zed~d Zfdd Zgdd Zhej+iddd Zjdd Zkdd Zldd Zmdd Zne-dd Zodd Zpdd Zqdd Zrdd Zsdd Ztej+iddd Zudd ZvG dd dewZxej+:d%ddgdd Zydd Zzej+:de{ddgdd Z|dd Z}e-e.dd Z~dS )    N)OrderedDict)Version)is_datetime64_any_dtype)assert_series_equal)PointPolygonbox)GeoDataFrame	read_file)PANDAS_GE_20)_detect_driver_EXTENSION_TO_DRIVER)assert_geodataframe_equalassert_geoseries_equal)PACKAGE_DIRvalidate_boro_dfFz1.9.0zpyogrio not installed)reasonzfiona not installedz	epsg:4326fiona)Zmarkspyogrio)paramsc                 C   s   | j S )N)param)request r   X/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopandas/io/tests/test_file.pyengine.   s    r   c                 C   s   | dkrt d d S )Nr   z$not supported for the pyogrio engine)pytestskipr   r   r   r   skip_pyogrio_not_supported8   s    r   c                 C   s   t jd}t|| d}|S )Nnybbr   )	geopandasdatasetsget_pathr
   )r   Z	nybb_pathdfr   r   r   df_nybb=   s    r$   c                   C   s   t tjtddddS Nr    testsdataznull_geom.geojson)r
   ospathjoinr   r   r   r   r   df_nullD   s    r+   c                   C   s   t jtddddS r%   )r(   r)   r*   r   r   r   r   r   	file_pathK   s    r,   c                  C   s0   d} t }tdd tt| t| D |d}|S )N
   c                 S   s*   g | ]"\}}t |||| || d qS ))geometryvalue1value2)r   ).0xyr   r   r   
<listcomp>U   s   zdf_points.<locals>.<listcomp>crs)_CRSr	   ziprange)Nr6   r#   r   r   r   	df_pointsP   s    r;   ))ESRI Shapefile.shp)GeoJSON.geojson)ZGPKG.gpkg)Nr=   )N )Nr?   )Nr@   c                 C   sb   |dkrdnt | }|dkrZtt| }|j|ks:J W d    q^1 sN0    Y  nd S d S )NrA   r<   r   )r   r   openstrdriver)r,   extr   Zexpected_driverfdsr   r   r   assert_correct_driverm   s
    .rG   z
driver,extc                 C   s   t jt| d| }|j|||d tj||d}d|v s@J t|dksPJ t	|d j
|d kslJ t jt| d| }|j|||d tj||d}d|v sJ t|dksJ t	|d	 j
|d	 ksJ t||| d
S )Test to_file and from_fileboros.rD   r   r   r.      BoroName	null_geom   NameN)r(   r)   r*   rC   to_filer	   	from_filelennpalltruevaluesrG   )tmpdirr$   r+   rD   rE   r   tempfilenamer#   r   r   r   test_to_filey   s    rX   c                 C   s   t tjt| d| }|j|||d tj||d}d|v sFJ t	|dksVJ t
|d j|d ksrJ t||| dS )rH   rI   rJ   r   r.   rK   rL   N)pathlibPathr(   r)   r*   rC   rP   r	   rQ   rR   rS   rT   rU   rG   )rV   r$   rD   rE   r   Ztemppathr#   r   r   r   test_to_file_pathlib   s    r[   c                 C   s   t jt| d|}tg dtddtddtddgddd}|j|||d	 t||d
}|dv r|dkr|d 	d|d< n|d 	d|d< t
|| t||| dS )z>Test error raise when writing with a boolean column (GH #437).ztemp.{0})TFTr      rN   )colr.     r5   rJ   r   r=   rA   r   r]   int64int32N)r(   r)   r*   rC   formatr	   r   rP   r
   astyper   rG   rV   rD   rE   r   rW   r#   resultr   r   r   test_to_file_bool   s    
rf   i        r\      +   i\D  zAmerica/New_Yorktime)Znaive_datetimeZdatetime_with_timezone)Zidsc           
      C   s>  |dkr|j durtd |dv r6td| d tjt| d| }tdd}td	d
g||gd||gdd}d}|d j	j
|d|d< |j|||d t||d}	t|jdgd|	jdgd |d j	jdurt|d j	tj|	d j	tj n4|dkr(tr(|d d|d< t|d |	d  dS )z6Test writing a data file with the datetime column typer   Nz%pyogrio doesn't yet support timezonesr_   zDriver corresponding to ext z doesn't support dt fieldsZtest_datetimer         ?       @)abr^   r.   r6   msro   )freqrJ   r   columnszdatetime64[ms])tzinfor   r   r(   r)   r*   rC   r   r	   dtroundrP   r
   r   droptzr   Z
tz_convertpytzutcr   rc   )
rV   rD   rE   rk   r   rW   pointr#   Zfiona_precision_limitdf_readr   r   r   test_to_file_datetime   s*    

 r~   gpkggeojsonc                 C   s   t jt|d| }tdd| gtddtddtddgd}|dkrX|| n4dddid	}|d
kr|ts|t	d |j||dd |S )Nztest_invalid_datetime.z2014-08-26T10:01:23r\   dater.   r   r   r   datetimer.   
propertiesr   z test requires fiona kwarg schemar   schemar   )
r(   r)   r*   rC   r	   r   rP   r   r   r   )date_strrV   rE   r   rW   r#   r   r   r   r   write_invalid_date_file   s    
r   rE   c                 C   sz   d}t || ||}t|}|dkrLt|d s2J t|d jd svJ n*|d jdks^J t|d jd tsvJ d S )Nz9999-99-99T00:00:00r   r   object)	r   r
   r   pdZisnailocdtype
isinstancerC   rV   rE   r   r   rW   resr   r   r   test_read_file_datetime_invalid   s    r   c                 C   sX   |dkrt | d}t|| ||}t|}|d jdks<J t|d jd tsTJ d S )Nr   z9999-12-31T00:00:00r   r   r   )r   r   r
   r   r   r   rC   r   r   r   r   (test_read_file_datetime_out_of_bounds_ns  s    r   c                 C   s   t jt| d}tddgtddtddgd}|| t|}tdkrt	|d s^J t
sjtj}ntjj}|d jj|ksJ nt	|d sJ d S )Nztest_mixed_datetime.geojsonz 2014-08-26 10:01:23.040001+02:00z 2019-03-07 17:31:43.118999+01:00r\   r   r   r   )r(   r)   r*   rC   r	   r   rP   r
   r   r   r   rz   r{   r   timezonerv   ry   )rV   rW   r#   r   r{   r   r   r   %test_read_file_datetime_mixed_offsets  s"    	
r   c           	      C   s   t jt| d| }tddd}tdd}tdddgi||gtd}|j|||d tj||d	}t	|j
|j
 t||| d
S )9Test that 3D geometries are retained in writes (GH #612).Ztest_3Dpointr   i  r\   rn   rN   rp   rJ   r   N)r(   r)   r*   rC   r   r	   r7   rP   rQ   r   r.   rG   )	rV   rE   rD   r   rW   Zpoint3dZpoint2dr#   r}   r   r   r   test_to_file_with_point_z1  s    
r   c           	      C   s   t jt| d| }tg dg dg dg dg}tddgddgddgddgg}tddd	gi||gtd
}|j|||d tj||d}t	|j
|j
 t||| dS )r   Ztest_3Dpoly)r   r   rK   )r   r\   rK   )r\   r\   rK   )r\   r   rK   r   r\   rn   rN   rp   rJ   r   N)r(   r)   r*   rC   r   r	   r7   rP   rQ   r   r.   rG   )	rV   rE   rD   r   rW   Zpoly3dZpoly2dr#   r}   r   r   r   test_to_file_with_poly_z@  s      r   c              	      st   t jt| d}tjtjtjtjtj	tj
tjtjtjg	}|j  fddt|D }t| d}|j||d dS )z)Test various integer type columns (GH#93)zint.shpc                    s(   i | ] \}}t |tjt |d qS )r   )rC   rS   ZarangerR   )r1   ir   r.   r   r   
<dictcomp>^  s   z&test_to_file_types.<locals>.<dictcomp>r   r   N)r(   r)   r*   rC   rS   Zint8int16ra   r`   ZintpZuint8Zuint16Zuint32Zuint64r.   	enumerater	   rP   )rV   r;   r   rW   	int_typesr'   r#   r   r   r   test_to_file_typesO  s"    
r   )ZOGR_GMTz.gmtc                 C   s   t jt| d| }|j}t|d}tjdtj	gd t
 d|d< |j|||d tj|||d}t||dd	d
 |dkrt jt| d| }	| }
|
j|	||d tj|	||d}|d jdksJ d S )Nzint32.r   r\   rK   r   r'   rJ   FTZcheck_dtypeZ
check_liker   zint32_2.ra   )r(   r)   r*   rC   r.   r	   r   arrayrS   nanZ
Int32DtyperP   rQ   r   Zdropnar   )rV   r;   r   rD   rE   rW   r.   r#   r}   Ztempfilename2df2Zdf2_readr   r   r   test_to_file_int32f  s    
 r   c           	      C   s|   t jt| d| }|j}t|d}tjdtj	gd t
 d|d< |j|||d tj|||d}t||dd	d
 d S )Nzint64.r   r\   rK   r   r'   rJ   FTr   )r(   r)   r*   rC   r.   r	   r   r   rS   r   Z
Int64DtyperP   rQ   r   )	rV   r;   r   rD   rE   rW   r.   r#   r}   r   r   r   test_to_file_int64w  s    
 r   c                 C   sZ   t dgd}tjt| d}tt |j||d W d    n1 sL0    Y  d S )Nr.   rs   test.shpr   )	r	   r(   r)   r*   rC   r   warnsUserWarningrP   )rV   r   Zinput_empty_dfrW   r   r   r   test_to_file_empty  s    r   c                 C   sP   t jt| d}tt  tjj	
|| W d    n1 sB0    Y  d S )Nr   )r(   r)   r*   rC   r   r   FutureWarningr    iofilerP   )rV   r$   rW   r   r   r   test_to_file_privacy  s    r   c           	      C   s   t jt| d}tg d}d|d}|dkrvtt* |jdd j	|||d W d   q1 sj0    Y  n^|jdd j	|||d d	dl
}||}|j}W d   n1 s0    Y  ||ksJ dS )
zY
    Ensure that the file is written according to the schema
    if it is specified

    r   ))
Shape_Lengfloat:19.11)rL   zstr:40)BoroCodezint:10)
Shape_Arear   r   r   r   NrN   r   r   )r(   r)   r*   rC   r   r   raises
ValueErrorr   rP   r   rB   r   )	rV   r$   r   rW   r   r   r   fZresult_schemar   r   r   test_to_file_schema  s    
:$r   c                 C   s  t tjd|d}tjt| d}|j||d t	j
||d}|j|jksRJ |dkrtjtdd  |j|d|d W d	   n1 s0    Y  d	S |j|d|d t	j
||d}|jd
ksJ | }d	|_|j|d|d t	j
||d}|jdksJ d	S )zU
    Ensure that the file is written according to the crs
    if it is specified
    r   r   zcrs.shpr   zPassing 'crs' it not supportedmatchi  )r6   r   Nz	epsg:3857i  	epsg:2263)r
   r    r!   r"   r(   r)   r*   rC   rP   r	   rQ   r6   r   r   r   copy)rV   r   r#   rW   re   r   r   r   r   test_to_file_crs  s"    .r   c                 C   sp   t jt| d}|jdd  }dg|d< tjtdd  |j	|d|d	 W d   n1 sb0    Y  dS )
z
    Ensure that a warning about truncation is given when a geodataframe with
    column names longer than 10 characters is saved to shapefile
    r   Nr\   z the column name is 11 charactersZ0123456789Az8Column names longer than 10 characters will be truncatedr   r<   rJ   )
r(   r)   r*   rC   r   r   r   r   r   rP   )rV   r;   r   rW   r#   r   r   r   test_to_file_column_len  s    
r   c                 C   sr   t g dgg dtddgd}tjt| d}tjtdd |j	||d W d    n1 sd0    Y  d S )	N)r\   rN      )rn   ro   rn   r\   )r'   rt   r.   zduplicate.shpz4GeoDataFrame cannot contain duplicated column names.r   r   )
r	   r   r(   r)   r*   rC   r   r   r   rP   )rV   r   r#   rW   r   r   r   #test_to_file_with_duplicate_columns  s     r   c           	      C   s  t jt| d| }|r|nt|}|j|||d |j|d||d tj||d}d|v sbJ t|dksrJ t	j
|gd d	d
}t||d	d |dkrt jt| d| }|j|||d |j|d	||d tj||d}t|t|d ksJ t jt| d| }|j|||d |j|d||d tj||d}d|v sNJ t|dks`J t	j
|gd d	d
}t||d	d dS )z+Test to_file with append mode and from_fileborosrJ   rn   )moderD   r   r   r.   r-   rN   T)Zignore_index)Zcheck_less_preciser   Zboros2)appendrD   r   rM      N)r(   r)   r*   rC   r   rP   r	   rQ   rR   r   concatr   )	rV   r$   r+   rD   rE   r   rW   r#   expectedr   r   r   test_append_file  s.    r   c                 C   sT   t jt| d}tjtdd  |j|d|d W d    n1 sF0    Y  d S )Nzdata.shpz"'mode' should be one of 'w' or 'a'r   r)r   r   )r(   r)   r*   rC   r   r   r   rP   )rV   r$   r   rW   r   r   r   test_mode_unsupported  s    r   c                 C   s   |dkrt d tjt| d| }tg dtddtddtddgd}|j|||d	 t	||d
}|dkr|d|_
t|| dS )z;Test handling of undefined CRS with GPKG driver (GH #1975).r@   z+GPKG is read with Undefined geographic SRS.r   )rl   rm   g      @r   r\   rN   )rn   r.   rJ   r   r?   z	EPSG:4326N)r   Zxfailr(   r)   r*   rC   r	   r   rP   r
   r6   r   rd   r   r   r   test_empty_crs  s    
r   r   c                 C   sP   t tjd| d}t| |jtks*J g d}|jd d |k sLJ d S )Nr   r   )r   rL   r   r   r   )	r
   r    r!   r"   r   r6   NYBB_CRSrt   all)r   r#   Zexpected_columnsr   r   r   test_read_file1  s
    r   url)zahttps://raw.githubusercontent.com/geopandas/geopandas/main/geopandas/tests/data/null_geom.geojsonzZhttps://raw.githubusercontent.com/geopandas/geopandas/main/geopandas/datasets/nybb_16a.zipz*https://geonode.goosocean.org/download/480z5https://demo.pygeoapi.io/stable/collections/obs/itemsc                 C   s    t || d}t|tjsJ d S Nr   r
   r   r    r	   )r   r   gdfr   r   r   test_read_file_url9  s    r   c                 C   s(   d|  }t ||d}t|tjs$J d S )Nzfile://r   r   )r,   r   Z	local_urir   r   r   r   test_read_file_local_uriN  s    r   c                 C   sV   t | }tt |  }t||d}t||d}t|tjsBJ t|tjsRJ d S r   )rB   r   StringIOreadr
   r   r    r	   )r,   r   Zfile_text_streamZfile_stringioZgdf_text_streamZgdf_stringior   r   r   test_read_file_textioT  s    r   c                 C   sZ   t | d}tt | d }t||d}t||d}t|tjsFJ t|tjsVJ d S )Nrbr   )rB   r   BytesIOr   r
   r   r    r	   )r,   r   Zfile_binary_streamZfile_bytesioZgdf_binary_streamZgdf_bytesior   r   r   test_read_file_bytesio]  s    
r   c                 C   s.   t | ddd}t||d}t|tjs*J d S )Nr   r   )	bufferingr   )rB   r
   r   r    r	   )r,   r   Zfile_raw_streamZgdf_raw_streamr   r   r   test_read_file_raw_streamf  s    r   c                 C   s*   t | }t||d}t|tjs&J d S r   )rY   rZ   r
   r   r    r	   )r,   r   Zpath_objectZgdf_path_objectr   r   r   test_read_file_pathlibl  s    
r   c                 C   sF   t  }|d |d tj|| d}t|tjs:J |  d S )Ns   
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [0, 0]
      },
      "properties": {
        "name": "Null Island"
      }
    }
    r   r   )	tempfileTemporaryFilewriteseekr    r
   r   r	   close)r   tempZgdf_tempfiler   r   r   test_read_file_tempfiler  s    
r   c                 C   sj   t d}tjddd  }||d,}t|| d}t|tjsHJ W d    n1 s\0    Y  d S )Nfsspecr      r   r   )	r   importorskipr    r!   r"   rB   r
   r   r	   )r   r   r)   r   r   r   r   r   test_read_binary_file_fsspec  s
    
r   c                 C   sV   t d}|| d,}t||d}t|tjs4J W d    n1 sH0    Y  d S )Nr   r   r   )r   r   rB   r
   r   r    r	   )r,   r   r   r   r   r   r   r   test_read_text_file_fsspec  s    
r   c                 C   st   t jddd  }t|| d}t|t js0J td| | d}t|t jsPJ t|d | d}t|t jspJ d S )Nr   r   r   zfile+file://z	!nybb.shpr    r!   r"   r
   r   r	   r   r)   r   r   r   r   test_infer_zipped_file  s    r   c                 C   s8   dt jddd   }t|| d}t|t js4J d S )Nz/vsizip/r   r   r   r   r   r   r   r   test_allow_legacy_gdal_path  s    r   c                 C   sJ   t jd}d}t|||d}| | d ddg }t||jdd d S )	Nr   7sw/A璢B`Ap/AxAbboxr   rL   BronxQueensTrx   )r    r!   r"   r
   isinr   reset_indexr$   r   nybb_filenamer   filtered_dfr   r   r   r   test_read_file_filtered__bbox  s
    r   c                 C   sT   t jd}tdddd}t|||d}| | d dd	g }t||jd
d d S )Nr   r   r   r   r   r   rL   r   r   Tr   )r    r!   r"   r   r
   r   r   r   r   r   r   r   &test_read_file_filtered__bbox__polygon  s    r   c                 C   s8   t jd}t|d|d}t|| jdgd d f  d S )Nr   r\   rowsr   r   )r    r!   r"   r
   r   r   r$   r   r   r   r   r   r   test_read_file_filtered__rows  s    r   c                 C   sH   t jd}t|tdd|d}t|| jddd d f jdd d S )Nr   r\   r   r   Tr   )r    r!   r"   r
   slicer   r   r   r   r   r   r   #test_read_file_filtered__rows_slice  s    r  zAignore:Layer does not support OLC_FASTFEATURECOUNT:RuntimeWarningc                 C   s  t jd}d}|dkr^tjtdd& t||tdd |d}W d    q~1 sR0    Y  n t||tdd |d}|js~J |dkrtjtdd& t||tdd |d}W d    n1 s0    Y  nLt||tdd |d}|d	 	d
|d	< t
|| jdd d d f jdd d S )Nr   r   r   z''skip_features' must be between 0 and 1r   r   )r   r   r   r   r   r`   Tr   )r    r!   r"   r   r   r   r
   r   emptyrc   r   r   r   )r$   r   r   r   r   r   r   r   "test_read_file_filtered__rows_bbox  s.    &
&r  c                 C   sD   t t& ttjdd| d W d    n1 s60    Y  d S )Nr   Znot_a_slicer   )r   r   	TypeErrorr
   r    r!   r"   r   r   r   r   $test_read_file_filtered_rows_invalid  s    r  c                 C   sF   t jt jdd| d}d|jvs&J t|tjr>t|t jrBJ d S )Nnaturalearth_lowresT)Zignore_geometryr   r.   )	r    r
   r!   r"   rt   r   r   Z	DataFramer	   )r   Zpdfr   r   r   test_read_file__ignore_geometry  s    
r  c                 C   s<   t |  tjtjdg ddd}|j dgks8J d S )Nr  )pop_est	continentnameZiso_a3Z
gdp_md_estr   )Zignore_fieldsr   r.   )r   r    r
   r!   r"   rt   tolistr   r   r   r   r   !test_read_file__ignore_all_fields  s    
r  c                 C   s   t s| dkr>tjtjdd| d}|j  dgksJ nBt	t
( tjtjdddd W d    n1 sv0    Y  d S )Nr   r  zcontinent='Africa')wherer   Africar   )FIONA_GE_19r    r
   r!   r"   r	  uniquer  r   r   NotImplementedErrorr  r   r   r   test_read_file__where_filter  s    

r  c                  C   s6   t jt jdddgdd} | j g dks2J d S )Nr  r
  r  r   )rt   r   )r
  r  r.   )r    r
   r!   r"   rt   r  )r   r   r   r   test_read_file__columns)  s    
r  c                 C   s\   | j }tjd}tjtddddgtd}t|||d}|j }||ksLJ |dksXJ d S )	Nr   r   r   r   r   rp   r   rN   rK   )shaper    r!   r"   r	   r   r   r
   r$   r   full_df_shaper   r   r   filtered_df_shaper   r   r   )test_read_file_filtered_with_gdf_boundary4  s     r  c                 C   sR   t | ttjd}tjtjd||jdk |d}|j}|dksNJ d S )Nr  Znaturalearth_citiesr  maskr   )9   rN   )r   r    r
   r!   r"   r	  r  )r$   r   Zgdf_maskr   r  r   r   r   /test_read_file_filtered_with_gdf_boundary__maskH  s    
r  c                 C   sX   t | | j}tjd}tdddd}t|||d}|j}||ksHJ |dksTJ 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   8test_read_file_filtered_with_gdf_boundary__mask__polygonT  s    r   c                 C   sr   t | | j}tjd}tjtddddgtd}|jddd	 t	|||d
}|j}||ksbJ |dksnJ d S )Nr   r   r   r   r   rp   r^   TZepsginplacer   r  )
r   r  r    r!   r"   r	   r   r   to_crsr
   r  r   r   r   8test_read_file_filtered_with_gdf_boundary_mismatched_crsa  s$    r$  c                 C   st   t | | j}tjd}tjtddddgtd}|jddd	 t	||j
|d
}|j}||ksdJ |dkspJ d S )Nr   r   r   r   r   rp   r^   Tr!  r  r  )r   r  r    r!   r"   r	   r   r   r#  r
   r.   r  r   r   r   >test_read_file_filtered_with_gdf_boundary_mismatched_crs__maskw  s$    r%  zCignore:Layer 'b'test_empty'' does not have any features:UserWarningc              	   C   s   |dkrt std ddlm} i dddtdd	gd
d}t| d}| D t j|dfi |}W d    n1 s~0    Y  W d    n1 s0    Y  t	||d}t
|tjsJ t|jg dksJ d S )Nr   ztest requires fiona to workr   )	fiona_envrA   r<   r   )Azint:9)Zzfloat:24.15r   )r6   Zcrs_wktrD   r   ztest_empty.shpwr   )r'  r(  r.   )r   r   r   geopandas.io.filer&  r   rC   r*   rB   r
   r   r    r	   r   rt   )rV   r   r&  metafname_r  r   r   r   test_read_file_empty_shapefile  s"    


<r.  c                 C   sD   t t& tjjtjd W d    n1 s60    Y  d S )Nr   )	r   r   r   r    r   r   r
   r!   r"   rV   r$   r   r   r   test_read_file_privacy  s    r0  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
FileNumberc                 C   s    t || _|| _|| _d| _d S )Nr   )rC   rV   baserE   fileno)selfrV   r2  rE   r   r   r   __init__  s    
zFileNumber.__init__c                 C   s$   d | j| j| j}tj| j|S )Nz{0}{1:02d}.{2})rb   r2  r3  rE   r(   r)   r*   rV   )r4  filenamer   r   r   __repr__  s    zFileNumber.__repr__c                 C   s   |  j d7  _ t| S )Nr\   )r3  repr)r4  r   r   r   __next__  s    zFileNumber.__next__N)__name__
__module____qualname__r5  r7  r9  r   r   r   r   r1    s   r1  )r<   Zshp)r>   r   c                    s  t | d| fdd}| }t|d |jd}||dd | jd7  _||dd ttdt|d |_t|d |jd}||dd | }t|d |jdjd	d
d}||dd t|jd}||dd | }t|d |jd}d|j_	||dd d|j_	||dd | }|d |d  |d< |j
ddgdd t||jd}||dd dd g|j_||dd d d g|j_||dd | }t|d |jd}|jtd |_||dd d|j_	||dd | }t|d |jd}ttt|d|_|jt|_||dd | }t|d |jd}ttt|dtdgt|  |_ dkr|jt|_||dd d|j_	||dd d S )Ncheckc           
         s  t | j}|d  dkr$dg}ng }|r:t | jj}nd gt| jj }|d gkr^dg}n>t|dkrt|st|D ] \}}|d u rzdt| ||< qzt	}| j
| d d t|d}t|d	kr|d d  }	ng }	|r|	|7 }	|	|dg 7 }	t |j|	ksJ t	}| jj
| d d t|d}|rH|dg }	n
|dg }	t |j|	ksfJ t	}| j
| d
d t|d}t |j|| dg ksJ t	}| jj
| d
d t|d}t |j|dg ksJ t	}| j
| dd t|d}t|d	kr,|dg }	n
|dg }	t |j|	ksJJ t	}| jj
| dd t|d}t |j|dg ksJ d S )Nr.   r<   ZFIDindexr\   Zlevel_)rD   r>  r   r   r   TF)listrt   remover>  namesrR   r   r   rC   nextrP   r
   r.   )
r#   index_is_usedZ
other_colsZ
driver_colZ
index_colslevelZ	index_colrW   Zdf_checkZexpected_colsrD   r   Zfngenr   r   	do_checks  sd    




z+test_write_index_to_file.<locals>.do_checksr/   r   F)rC  r\   rK   r   )ZaxisZ	foo_indexTr>  r0   Zvalue3)r"  firstr-   Zcentiledaysz
1999-12-27r<   r   )r1  r   r	   r.   r>  r?  r9   rR   rx   r
  Z	set_indexrA  rc   floatr   ZTimedeltaIndexrC   ZDatetimeIndex)rV   r;   rD   rE   r   rF  Zdf_pr#   r   rE  r   test_write_index_to_file  sf    P
rJ  c                 C   s4   | d }| | | sJ t|ds0J d S )Nzboros.invalidz*.shp)rP   is_dirr?  glob)Ztmp_pathr$   Zshpdirr   r   r   !test_to_file__undetermined_driverk  s    
rM  	test_filez~/test_file.geojsonc                 C   sZ   t jtddddgtd}|j| dd t j| |d}t||dd ttj	
|  d S )	Nr   r-   rp   r>   )rD   r   T)Z	check_crs)r    r	   r   r7   rP   r
   r   r(   r@  r)   
expanduser)rN  r   r   Zdf_jsonr   r   r   test_write_read_filer  s
    rP  c                 C   sT   |j |d< tjtdd( |tjt| d W d    n1 sF0    Y  d S )NZgeom2z'GeoDataFrame contains multiple geometryr   z
boros.gpkg)	r.   r   r   r   rP   r(   r)   r*   rC   r/  r   r   r   test_multiple_geom_cols_error}  s    
rQ  c               	   C   sj   zPdt j_dd l} | jd }d| jd< t jd}t |}W || jd< d t j_n|| jd< d t j_0 d S )Nr   r   r<   r)  r   )r    optionsZ	io_enginer   Zsupported_driversr!   r"   r
   )r   origr   r-  r   r   r   test_option_io_engine  s    




rT  )r   r   r(   rY   r   collectionsr   numpyrS   Zpandasr   r   rz   Zpackaging.versionr   Zpandas.api.typesr   Zpandas.testingr   Zshapely.geometryr   r   r   r    r	   r
   Zgeopandas._compatr   r*  r   r   Zgeopandas.testingr   r   Zgeopandas.tests.utilr   r   r   ImportErrorr   __version__base_versionr  markZskipifZPYOGRIO_MARKZ
FIONA_MARKr7   Zfixturer   r   r   r$   r+   r,   r;   Zdriver_ext_pairsrG   ZparametrizerX   r[   rf   Z	TEST_DATEr   ZeasternZlocalizeZdatetime_type_testsr~   Zdt_extsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zwebr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  filterwarningsr  r  r  r  r  r  r  r  r   r$  r%  r.  r0  r   r1  rJ  rM  rZ   rP  rQ  rT  r   r   r   r   <module>   s&  










!






 	
#
		


%





 )
