a
    1$eZ                     @   s|  d dl Z d dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlZd dlmZ d dlmZmZmZmZ d dlmZ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$m%Z% d dl&Z&ej'pej(oej)Z*e&j+dd Z,e&j+g dddd Z-G dd dZ.d%ddZ/G dd dZ0dd Z1dd Z2dd Z3e&j45ddd gd!d" Z6d#d$ Z7dS )&    N)CRS)CRSError)PointPolygon)GeoDataFrame	GeoSeriespoints_from_xy	read_file)GeometryArrayGeometryDtypefrom_shapely)ignore_shapely2_warnings)assert_geodataframe_equalassert_geoseries_equal)PACKAGE_DIRvalidate_boro_df)assert_frame_equalassert_index_equalassert_series_equalc                 C   sd   t tg dtg dg}t tg dtg dg}tddg|d}tddg|d}||fS )	N))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   )col1geometry)Zcol2r   )r   r   r   )requests1s2df1df2 r#   ]/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopandas/tests/test_geodataframe.pydfs   s    



r%   )unionintersection
differencesymmetric_differenceidentity)paramsc                 C   s   | j S N)param)r   r#   r#   r$   how/   s    r.   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zej	d	d
d Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zej	d.d/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4dadb Z5dcdd Z6dedf Z7dgdh Z8didj Z9dkdl Z:dmdn Z;ej<dog dpej<dqg drejj=e>j?p
e>j@p
e>jA dsdtdudv ZBej<dog dpej<dwdxdygej<dzdxd{gejj=eC d|dtd}d~ ZDejjEdd ZFejjEdd ZGdxS )TestDataFramec                 C   sp   d}t jd}t|| _t | _d| _t	dd t
t|t|D | jd| _ttjtddd	d
| _d S )N
   nybbz	epsg:4326c                 S   s*   g | ]"\}}t |||| || d qS ))r   value1value2r   .0xyr#   r#   r$   
<listcomp>?   s   z.TestDataFrame.setup_method.<locals>.<listcomp>crs	geopandastestsdataznull_geom.geojson)r<   datasetsget_pathr	   dftempfilemkdtemptempdirr;   r   zipranger"   ospathjoinr   df3)selfNnybb_filenamer#   r#   r$   setup_method7   s    

zTestDataFrame.setup_methodc                 C   s   t | j d S r,   )shutilrmtreerD   rK   r#   r#   r$   teardown_methodI   s    zTestDataFrame.teardown_methodc                 C   s(   t | jtu sJ | jj| jks$J d S r,   )typer"   r   r;   rQ   r#   r#   r$   test_df_initL   s    zTestDataFrame.test_df_initc                 C   s   t dt dddd tt dt dD d}t|| jdd}t|d | jd	}t|j| d
|vshJ |jjdksxJ |jdksJ dd tt ddt dD }t	
t |j|dd	 W d    n1 s0    Y  d S )Nr   r   c                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9   T       z<TestDataFrame.test_different_geo_colname.<locals>.<listcomp>ABlocationrZ   r;   r   r:   r   c                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9   ^   rV   r0   Z	dummy_crs)rF   rE   r   r;   r   r   r   name_geometry_column_namepytestraisesr   set_geometry)rK   r>   rA   locsgeom2r#   r#   r$   test_different_geo_colnameP   s    z(TestDataFrame.test_different_geo_colnamez&ignore:Geometry is in a geographic CRSc                 C   sj  t dt dddd tt dt dD d}t|| jdd}t|jtsNJ |d	 |d
< t|jtsjJ |jd |d d ksJ t|d
 trJ t|d tsJ |d|d< t|d tsJ tdd tt dt dD |d< t|d tsJ dd tt dt dD |d
< t|| jd}t|jts>J t|d
 tsRJ t|d trfJ d S )Nr   rU   r   c                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9   g   rV   z2TestDataFrame.test_geo_getitem.<locals>.<listcomp>rW   rZ   r[   rX   r   r   Zbuffc                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9   u   rV   arrayc                 S   s"   g | ]\}}t |d  |d  qS r   r4   r5   r#   r#   r$   r9   x   rV   r:   )	rF   rE   r   r;   
isinstancer   r   bufferr   rK   r>   rA   r#   r#   r$   test_geo_getitemb   s(    $ zTestDataFrame.test_geo_getitemc                 C   s   | j ddg }t|tjsJ t|tr,J | j  }|jddidd}t|tsZJ |ddg }t|tjsvJ t|trJ t	t
||d< |g d }t|tjsJ t|trJ d S )Nr2   r3   r   geomcolumns)r2   r3   r   )r"   rf   pd	DataFramer   copyrenamer`   nparangelen)rK   resrA   r#   r#   r$   test_getitem_no_geometry   s    
z&TestDataFrame.test_getitem_no_geometryc                 C   sf  t dtddd tt dt dD d}t|}tdd tt dt dD }||jfD ]&}||d< t|d | t|j| q`tdd tt d	t d	D }||d< t|d | t|j| ||jfD ] }||d
< t	|d
 jt
sJ qt dtdt ddd tt dt dD d}t|}||jfD ]$}||d
< t	|d
 jt
s<J q<d S )Nr   g      @c                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9      rV   z2TestDataFrame.test_geo_setitem.<locals>.<listcomp>rX   rY   r   c                 S   s   g | ]\}}t ||d  qS re   r4   r5   r#   r#   r$   r9      rV   r   c                 S   s   g | ]\}}t ||d  qS re   r4   r5   r#   r#   r$   r9      rV      
other_geomc                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9      rV   )rX   rY   rx   r   )rF   rq   rr   rE   r   r   valuesr   r   rf   r
   )rK   r>   rA   svalsr    r#   r#   r$   test_geo_setitem   s4      zTestDataFrame.test_geo_setitemc                 C   s   t | jj| jd ddd | j }dd ttt| jtt| jD }||_t||j|j	d}t |j| t |d | |j
dd}||_|j	dksJ d S )	Nr   T)Zcheck_dtypeZcheck_index_typec                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9      s   z8TestDataFrame.test_geometry_property.<locals>.<listcomp>indexr;   	epsg:3857r:   )r   rA   r   ro   rE   rF   rs   r   r~   r;   Zto_crs)rK   rA   Znew_geomgsr#   r#   r$   test_geometry_property   s"    
z$TestDataFrame.test_geometry_propertyc                 C   s  t t& | j }|d= |j W d    n1 s60    Y  t t  | j }d|_W d    n1 sp0    Y  t t  | j }d|_W d    n1 s0    Y  t t. | j }t	t
|jd |_W d    n1 s0    Y  t t( | j }|d= |d  W d    n1 s60    Y  t t  | j }||_W d    n1 sr0    Y  d S )Nr   r2   appler   )r^   r_   AttributeErrorrA   ro   r   
ValueErrorr"   	TypeErrorlistrF   shapeKeyErrorrK   rA   r#   r#   r$   test_geometry_property_errors   s(    
$
$
$
2
(
z+TestDataFrame.test_geometry_property_errorsc                 C   s   | j jjdksJ | j d}|jjdks.J | j jddd}|d u sJJ | j jjdks\J d}tjt|d | j d}W d    n1 s0    Y  tjt|d  | j jddd W d    n1 s0    Y  d S )Nr   new_nameTZinplacez&Column named Shape_Area already existsmatch
Shape_Area)rA   r   r\   Zrename_geometryr^   r_   r   )rK   r"   msgr#   r#   r$   test_rename_geometry   s    *z"TestDataFrame.test_rename_geometryc                 C   sx  t dd ttdtdD }| jj}| j|}| j|usBJ t|j|dd t| jj| t| jd | jj tt	 | jd W d    n1 s0    Y  tt	 | j| j W d    n1 s0    Y  t |dd	}| j|}|j
dks
J | jj|d
d	}|j
d
ks*J |jj
d
ks<J | j|j}|j
| jj
ks^J |jj
| jj
kstJ d S )Nc                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9      rV   z3TestDataFrame.test_set_geometry.<locals>.<listcomp>r   F)Z	check_crsr   znonexistent-columnr   r:   z
epsg:26909)r   rE   rF   rA   r   r`   r   r^   r_   r   r;   ry   )rK   rj   Zoriginal_geomr"   r   Znew_dfr#   r#   r$   test_set_geometry   s(     *,zTestDataFrame.test_set_geometryc                 C   sl   | j j}|d}|| j d< | j d}d|v s4J t|j| | j jddd}d|vs\J t|j| d S )Nd   Zsimplified_geometryT)drop)rA   r   simplifyr`   r   )rK   gZg_simplifiedr"   rJ   r#   r#   r$   test_set_geometry_col  s    

z#TestDataFrame.test_set_geometry_colc                 C   s`   dd t tdtdD }| jj|dd}|d u s8J t|| jj| jjd}t| jj| d S )Nc                 S   s   g | ]\}}t ||qS r#   r4   r5   r#   r#   r$   r9   ,  rV   z;TestDataFrame.test_set_geometry_inplace.<locals>.<listcomp>r   Tr   r}   )	rE   rF   rA   r`   r   r~   r;   r   r   )rK   rj   retr#   r#   r$   test_set_geometry_inplace+  s
    z'TestDataFrame.test_set_geometry_inplacec                 C   s   t t| jd dd| j_i }t t| jD ]}t||||< q,t|}| j|}| D ],\}}||d jksvJ ||d j	ks\J q\d S )Nr   r   )
rF   rs   rA   r~   r   r   r`   Ziterrowsr7   r8   )rK   dir   rA   rr#   r#   r$   test_set_geometry_series2  s    z&TestDataFrame.test_set_geometry_seriesc                 C   sF   t jddgt g d}|d}t|ts0J t|jt jsBJ d S )Nar   )rl   r~   )rm   rn   ZDatetimeIndexr`   rf   r   r~   )rK   rA   resultr#   r#   r$   test_set_geometry_emptyG  s    
z%TestDataFrame.test_set_geometry_emptyc                 C   s>   | j j| j jd d df< | j td}|jjdks:J d S Nr   )rA   r   locr`   rq   int64r\   r   r#   r#   r$   test_set_geometry_np_intM  s    z&TestDataFrame.test_set_geometry_np_intc                 C   s  t  }| jj|d< d}tjt|d |j W d    n1 s@0    Y  g d}| j j| jjd| }tjtdd |j W d    n1 s0    Y  d}d}tjt|d |j W d    n1 s0    Y  tjt|d t  j W d    n1 s
0    Y  d S )	Nrj   z0active geometry column to use has not been set. r   )ZBoroCodeBoroNamerb   rb   zis not present.z)There are columns with geometry data typez5There are no existing columns with geometry data type)r   rA   r   r^   r_   r   ro   assign)rK   rA   Zmsg_geo_col_noneZcol_subset_drop_geometryr"   Zmsg_other_geo_cols_presentZmsg_no_other_geo_colsr#   r#   r$   test_get_geometry_invalidR  s    $$$z'TestDataFrame.test_get_geometry_invalidc                 C   sx   | j j| j jdd}|jd d ddgf }|jdks<J d}tjt|d |j W d    n1 sj0    Y  d S )Nr   rb   r   r   zis not present. r   )	rA   r   r   r`   r   r]   r^   r_   r   )rK   rA   Zmsg_geo_col_missingr#   r#   r$   #test_get_geometry_geometry_inactiveh  s    z1TestDataFrame.test_get_geometry_geometry_inactivec                 C   s  | j }||\}}t|| t|| || \}}t|| t|| | }d |_||\}}t|| |jd usJ t|| |jd u sJ t|jddd}|j|dd\}}t|| t|tjksJ t	|| |j
dd   }|j
d d  }| }tj|j
d< | }	tj|	j
d< ||\}}t|| t||	 | }
d |
_|	 }d |_||
\}}t|| |jd usJ t|| |jd u sJ t|jddd}t|	jddd}|j|dd\}}t|| t|tjks
J t	|| d S )Nr   r   Zaxisr   r   )r"   alignr   ro   r;   rm   rn   r   rS   r   ilocrq   nan)rK   rA   Zres1Zres2Zdf_nocrsZ	df_nogeomr!   r"   Zexp1Zexp2Z	df2_nocrsZ
exp2_nocrsZ
df2_nogeomZexp2_nogeomr#   r#   r$   
test_aligns  sV    












zTestDataFrame.test_alignc                 C   s   | j jdd}t|}|d dks(J t|d dks<J d|d d  v sTJ |d d d	 d
 d d d }tj|ddg d S )NTZto_wgs84rS   FeatureCollectionfeaturesr   idr   r   coordinatesg,;RgyLhHD@)	rA   to_jsonjsonloadsrs   keysrq   testingZassert_allcloserK   textr>   Zcoordr#   r#   r$   test_to_json  s    
 zTestDataFrame.test_to_jsonc                 C   sH   | j  }t|}|d d d d d d d }|ddgksDJ d S )Nr   r   r   r   g  xқ-Ag  `ZA)rA   r   r   r   r   r#   r#   r$   test_to_json_wgs84_false  s    

 z&TestDataFrame.test_to_json_wgs84_falsec                 C   sH   d | j _tjtdd | j jdd W d    n1 s:0    Y  d S )NzCRS is not setr   Tr   )rA   r;   r^   r_   r   r   rQ   r#   r#   r$   test_to_json_no_crs  s    z!TestDataFrame.test_to_json_no_crsz<ignore:Geometry column does not contain geometry:UserWarningc                 C   sp   | j  }|d |d< tt||d< |jddd | }t|}|d dksXJ t|d dkslJ d S )	Nr   rj   Tr   rS   r   r   r   )	rA   ro   rq   rr   rs   r`   r   r   r   )rK   rA   r   r>   r#   r#   r$   test_to_json_geom_col  s    

z#TestDataFrame.test_to_json_geom_colc                 C   sJ   | j dg  }t|}t|d dks.J d|d d  v sFJ d S )Nr   r   r   r   r   rA   r   r   r   rs   r   )rK   r   r>   r#   r#   r$   test_to_json_only_geom_column  s    
z+TestDataFrame.test_to_json_only_geom_columnc                 C   s   t j| jj| jd dkdf< | j }t|}t|d dksDJ |d D ]8}|d }t|dkshJ |d dkrL|d d u sLJ qLd S )Nr   Queensr   r   r   
propertiesr   rq   r   rA   r   r   r   r   rs   rK   r   r>   fpropsr#   r#   r$   test_to_json_na  s    

zTestDataFrame.test_to_json_nac                 C   s<   t t | jjdd W d    n1 s.0    Y  d S )Ngarbagena)r^   r_   r   rA   r   rQ   r#   r#   r$   test_to_json_bad_na  s    z!TestDataFrame.test_to_json_bad_nac                 C   s   t j| jj| jd dkdf< t j| jj| jd dkdf< | jjdd}t|}t|d d	ksdJ |d D ]}|d
 }|d dkrt|dksJ d|vsJ d|v sJ ql|d dkrt|dksJ d|vsJ d|v sJ qlt|dkslJ qld S )Nr   r   r   Bronx
Shape_Lengr   r   r   r   r   r   r   r   r   r#   r#   r$   test_to_json_dropna  s     
z!TestDataFrame.test_to_json_dropnac                 C   s   t j| jj| jd dkdf< t j| jj| jd dkdf< | jjdd}t|}t|d d	ksdJ |d D ]r}|d
 }t|dksJ |d dkrt |d sJ d|v sJ ql|d dkrlt |d sJ d|v slJ qld S )Nr   r   r   r   r   keepr   r   r   r   r   )	rq   r   rA   r   r   r   r   rs   isnanr   r#   r#   r$   test_to_json_keepna  s    
z!TestDataFrame.test_to_json_keepnac                 C   sN   | j jdd}t|}t|d dks,J |d D ]}d| vs4J q4d S )NTZdrop_idr   r   r   r   rK   r   r>   r   r#   r#   r$   test_to_json_drop_id  s
    
z"TestDataFrame.test_to_json_drop_idc                 C   sT   | j dg jdd}t|}t|d dks2J |d D ]}d| vs:J q:d S )Nr   Tr   r   r   r   r   r   r#   r#   r$   %test_to_json_drop_id_only_geom_column  s
    
z3TestDataFrame.test_to_json_drop_id_only_geom_columnc                 C   sZ   t g dgg dtddgd}tjtdd |  W d    n1 sL0    Y  d S )Nr   r   r   )r   br   r   )r>   rl   r   4GeoDataFrame cannot contain duplicated column names.r   )r   r   r^   r_   r   r   r   r#   r#   r$   #test_to_json_with_duplicate_columns  s    z1TestDataFrame.test_to_json_with_duplicate_columnsc                 C   s0   | j  }t|tu sJ | j j|jks,J d S r,   )rA   ro   rS   r   r;   )rK   r"   r#   r#   r$   	test_copy(  s    
zTestDataFrame.test_copyc                 C   s>   t  }| }t|t u sJ |jdd}t|t u s:J d S )NT)deep)r   ro   rS   rK   rA   r"   rJ   r#   r#   r$   test_empty_copy-  s
    zTestDataFrame.test_empty_copyc                 C   s>   t tdg di}t|t u s&J t| t u s:J d S )Nr   r   )r   rm   rn   rS   ro   r   r#   r#   r$   test_no_geom_copy5  s    zTestDataFrame.test_no_geom_copyc                 C   s^   | j | j d jd }t|dks(J |d j}d|v s>J d|v sJJ t|tu sZJ d S )Nr   rY   r   ZBrooklynr   )rA   strcontainsrs   ry   rS   r   )rK   rA   Zborosr#   r#   r$   test_bool_index:  s    
zTestDataFrame.test_bool_indexc                 C   s   | j jddddf jsJ t| j | j jd d d d f  t| j jdd  | j jdd d d f  t| j jdd  | j jd d dd f  t| j jdd  | j jdd dd f  d S )Nr   r   )r"   Zcxemptyr   r   rQ   r#   r#   r$   test_coord_slice_pointsC  s
     **z%TestDataFrame.test_coord_slice_pointsc                 C   sr   dgt ddgd}tj|dd}|jdks0J |jdks>J dgt ddgd}tj|d	d
}|jd	ksnJ d S )Nr   g        )rX   r   i  r:   r   r   )rY   rZ   rZ   r   )r   r   	from_dictr;   r]   rh   r#   r#   r$   test_from_dictJ  s    zTestDataFrame.test_from_dictc                 C   sz   t d}tjd}||}t|}|j}W d    n1 sD0    Y  tj	||d}t
|dd |j|ksvJ d S )Nfionar1   r:   T)case_sensitive)r^   Zimportorskipr<   r?   r@   openr   Zcrs_wktr   from_featuresr   r;   )rK   r   rM   r   r   r;   rA   r#   r#   r$   test_from_featuresT  s    
$z TestDataFrame.test_from_featuresc           
      C   s   t dd}dddi|jd}t dd}dddi|jd}t dd}dd |jd}t|||g}|ddg }tjdtjd	tjdd	tjtjd	g}	t	|	| d S )
Nr   Featurer   r   rS   r   r   r   r   r   )r   r   )
r   __geo_interface__r   r   rm   rn   r   rq   r   r   )
rK   p1f1p2f2Zp3Zf3rA   r   expectedr#   r#   r$   'test_from_features_unaligned_properties_  s*    


"z5TestDataFrame.test_from_features_unaligned_propertiesc                 C   s>   d}d}t |}t|}t |}t|}t|| d S )NaO  {
          "type": "FeatureCollection",
          "features": [
            {
              "type": "Feature",
              "properties": {},
              "geometry": {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      11.3456529378891,
                      46.49461446367692
                    ],
                    [
                      11.345674395561216,
                      46.494097442978195
                    ],
                    [
                      11.346918940544128,
                      46.49385370294394
                    ],
                    [
                      11.347616314888,
                      46.4938352377453
                    ],
                    [
                      11.347514390945435,
                      46.49466985846028
                    ],
                    [
                      11.3456529378891,
                      46.49461446367692
                    ]
                  ]
                ]
              }
            }
          ]
        }aQ  {
          "type": "FeatureCollection",
          "features": [
            {
              "type": "Feature",
              "properties": null,
              "geometry": {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      11.3456529378891,
                      46.49461446367692
                    ],
                    [
                      11.345674395561216,
                      46.494097442978195
                    ],
                    [
                      11.346918940544128,
                      46.49385370294394
                    ],
                    [
                      11.347616314888,
                      46.4938352377453
                    ],
                    [
                      11.347514390945435,
                      46.49466985846028
                    ],
                    [
                      11.3456529378891,
                      46.49461446367692
                    ]
                  ]
                ]
              }
            }
          ]
        })r   r   r   r   r   )rK   Zgeojson_properties_objectZgeojson_properties_nullZgjson_poZgdf1Z
gjson_nullgdf2r#   r#   r$   #test_from_features_empty_properties}  s    )*



z1TestDataFrame.test_from_features_empty_propertiesc                 C   sv   G dd dt }tdd}||d}tdd}||d}t||g}t|jddgks\J |j ||gksrJ d S )Nc                   @   s   e Zd Zdd ZdS )zJTestDataFrame.test_from_features_geom_interface_feature.<locals>.Placemarkc                 S   s   dd|i|j d| _ d S )Nr   r   r   )r   )rK   rj   valr#   r#   r$   __init__  s    zSTestDataFrame.test_from_features_geom_interface_feature.<locals>.Placemark.__init__N)__name__
__module____qualname__r   r#   r#   r#   r$   	Placemark  s   r   r   r   r   r   r   )objectr   r   r   sortedrl   r   tolist)rK   r   r   r   r   r   rA   r#   r#   r$   )test_from_features_geom_interface_feature  s    



z7TestDataFrame.test_from_features_geom_interface_featurec                 C   s   g dg dg dd}t |}dd t|d |d D }t||d	}|g d
 }t|j}t|| t|jd }t|| t|}t|| d S )N)r   r   c)-   .   g     G@)igL^g^)r\   latlonc                 S   s   g | ]}t |qS r#   r4   )r6   Zxyr#   r#   r$   r9     rV   z>TestDataFrame.test_from_feature_collection.<locals>.<listcomp>r  r  r   )r   r\   r  r  r   )rm   rn   rE   r   r   r   r   )rK   r>   rA   r   gdfr   rt   r#   r#   r$   test_from_feature_collection  s    



z*TestDataFrame.test_from_feature_collectionc                 C   s^  t jtt| jt| jjd| jjd}|j	d| jj
d}t|t jsNJ t|ts\J t|j| jj |jjdks|J d|vsJ |j	d| jj
dd}t|t jsJ t|tsJ |jjdksJ d|v sJ d|vsJ d|v sJ d|jd	< |jd	 d
ksJ |jd	 d
ks J tt |j	ddd W d    n1 sP0    Y  d S )N)rX   rZ   r~   rZ   r:   r   T)r;   r   r   r   rX   r   r   )rm   rn   rF   rs   rA   rq   rd   r   r~   r`   r;   rf   r   r   r\   r   r^   r_   r   )rK   rA   gfZgf2r#   r#   r$   test_dataframe_to_geodataframe  s,    
z,TestDataFrame.test_dataframe_to_geodataframec                 C   s   t jtt| j| jjjj| jjjjd| jj	d}|
 }t|t|d |d | jjd}t|t jksnJ d|vszJ t|| t|tsJ t|dsJ d|jd< t|| d	|d
< t|| d S )N)rX   latitude	longituder
  r  r  )r   r;   r      r  r   rX   )rm   rn   rF   rs   rA   r   Zcentroidr8   r7   r~   ro   r   r   r;   rS   r   rf   hasattrr   )rK   rA   Zdf_copyr  r#   r#   r$   test_dataframe_not_manipulated   s,    




z,TestDataFrame.test_dataframe_not_manipulatedc                 C   s8   | j jd dksJ t| j jd | j jd ks4J d S )NrS   r   r   r   )rA   r   rs   r   rQ   r#   r#   r$   test_geodataframe_geointerface;  s    z,TestDataFrame.test_geodataframe_geointerfacec                 C   s  | j jd d  }tj|jd< t|jddd d }|d d u sHJ t|jddd d }d| vspJ t|jd	dd d }t	|d sJ t
|jd
 tju sJ t|jddd }t
|d d tu sJ t|jddd }t
|d d tu sJ t|jd	dd }t
|d d tu s:J |g d }t
|jd
 tju s`J t|jddd }t
|d d tu sJ t|jddd }t
|d d tu sJ t|jd	dd }t
|d d tu sJ tjtdd( |g d }t|  W d    n1 s(0    Y  tddgtddtddgd}tt t|  W d    n1 s0    Y  d S )Nr   )r   r   nullr   r   r   r   r   r   )r   r   r   )r   r   r   r   r   )r   r   r   r   )ry   rj   )rA   r   ro   rq   r   r   r   iterfeaturesr   r   rS   float64floatr^   r_   r   r   r   r   )rK   rA   r   Zdf_only_numerical_colsZdf_with_duplicate_columnsr#   r#   r$   test_geodataframe_iterfeatures?  sB    ,"z,TestDataFrame.test_geodataframe_iterfeaturesc                 C   s   t tddgddggd d}ddgd d}t|jddd d}||ksRJ d	ddgi}t|jd
dd d}||ksJ ddgd d}t|jddd d}||ksJ d S )Nr   r   )r   
non-scalartest_col)r  r  r  r   r   r   r  r   r   )r   r   r   r  get)rK   rA   r   r   r#   r#   r$   *test_geodataframe_iterfeatures_non_scalarst  s    z8TestDataFrame.test_geodataframe_iterfeatures_non_scalarsc                 C   sB   | j jddd}d| vs J |d D ]}d| vs(J q(d S )Nr  Fr   Z	show_bboxbboxr   )rA   _to_geor   rK   Zgeofeaturer#   r#   r$   !test_geodataframe_geojson_no_bbox  s    z/TestDataFrame.test_geodataframe_geojson_no_bboxc                 C   sh   | j jddd}d| v s J t|d dks4J t|d tsFJ |d D ]}d| v sNJ qNd S )Nr  Tr  r  r   r   )rA   r  r   rs   rf   tupler   r#   r#   r$   test_geodataframe_geojson_bbox  s    z,TestDataFrame.test_geodataframe_geojson_bboxc                 C   s*   dd l }||| j}t| j| d S r   )pickler   dumpsrA   r   )rK   r%  r"   r#   r#   r$   test_pickle  s    zTestDataFrame.test_picklec                 C   sH   t j| jd}| j| t|}t| j| | jj	|j	ksDJ d S )Nzdf.pkl)
rG   rH   rI   rD   rA   Z	to_picklerm   Zread_pickler   r;   )rK   filenameZ	unpickledr#   r#   r$   test_pickle_method  s
    
z TestDataFrame.test_pickle_methodc                 C   s2   | j  tdksJ | j dtdks.J d S )Nz
EPSG:32618ZNAD83z
EPSG:26918)rA   Zestimate_utm_crsr   rQ   r#   r#   r$   test_estimate_utm_crs  s    z#TestDataFrame.test_estimate_utm_crsc                 C   sT   ddg}ddg}t |}t |}t||d}t||d}t||  d S )Ns                      s            ?      ?s             @       @s            @      @)Z	geom_col0Z	geom_col1)r   Zfrom_wkbr   rm   rn   r   Zto_wkb)rK   Zwkbs0Zwkbs1gs0gs1r  expected_dfr#   r#   r$   test_to_wkb  s    


zTestDataFrame.test_to_wkbc                 C   sT   ddg}ddg}t |}t |}t||d}t||d}t||  d S )NzPOINT (0 0)zPOINT (1 1)zPOINT (2 2)zPOINT (3 3))r+  r,  )r   Zfrom_wktr   rm   rn   r   Zto_wkt)rK   Zwkts0Zwkts1r+  r,  r  r-  r#   r#   r$   test_to_wkt  s    

zTestDataFrame.test_to_wktr.   )leftinnerright	predicate)Z
intersectsZwithinr   z*sjoin needs `rtree` or `pygeos` dependency)reasonc                 C   sP   t tjd}t tjd}tj||||d}|j|||d}t|| dS )
        Basic test for availability of the GeoDataFrame method. Other
        sjoin tests are located in /tools/tests/test_sjoin.py
        naturalearth_citiesnaturalearth_lowres)r.   r3  N)r	   r<   r?   r@   Zsjoinr   )rK   r.   r3  r0  r2  r   r   r#   r#   r$   
test_sjoin  s
    zTestDataFrame.test_sjoinmax_distanceNr   distance_colZdistancezfPyGEOS >= 0.10.0 must be installed and activated via the geopandas.compat module to test sjoin_nearestc                 C   sT   t tjd}t tjd}tj|||||d}|j||||d}t|| dS )r5  r6  r7  )r.   r9  r:  N)r	   r<   r?   r@   Zsjoin_nearestr   )rK   r.   r9  r:  r0  r2  r   r   r#   r#   r$   test_sjoin_nearest  s    
z TestDataFrame.test_sjoin_nearestc                 C   sT   t tjd}t tjd}||d dk }t||}||}t|| dS )z
        Basic test for availability of the GeoDataFrame method. Other
        clip tests are located in /tools/tests/test_clip.py
        r6  r7  Z	continentzSouth AmericaN)r	   r<   r?   r@   Zclipr   )rK   r0  ZworldZsouth_americar   r   r#   r#   r$   	test_clip  s    
zTestDataFrame.test_clipc                 C   s4   |\}}t j|||d}|j||d}t|| dS )z
        Basic test for availability of the GeoDataFrame method. Other
        overlay tests are located in tests/test_overlay.py
        )r.   N)r<   overlayr   )rK   r%   r.   r!   r"   r   r   r#   r#   r$   test_overlay  s    zTestDataFrame.test_overlay)Hr   r   r   rN   rR   rT   rc   r^   markfilterwarningsri   ru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r"  r$  r'  r)  r*  r.  r/  parametrizeZskipifcompat
USE_PYGEOSUSE_SHAPELY_20Z	HAS_RTREEr8  TEST_NEARESTr;  Zskip_no_sindexr<  r>  r#   r#   r#   r$   r/   6   s   

& 8
		
]5

r/   r   c                 C   sv   t | tsJ t | jtsJ t | | ts0J | j|ks>J | jj|ksNJ t | jjts`J t | jjt	srJ d S r,   )
rf   r   r   r   r]   r\   ry   r
   dtyper   )rA   geometry_columnr#   r#   r$   check_geodataframe  s    rH  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zejjdd Zdd Zdd Zejdddgdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*S )+TestConstructorc                 C   s   t dtddd t dD d}t|}t| t|tdd}t| t|jt	td t|g dd	}t| t|j
t	g d t|d
dgd	}t| t|j
t	d
dg t|d
 tjt dd
d d S )Nr         @c                 S   s   g | ]}t ||qS r#   r4   r6   r7   r#   r#   r$   r9   "  rV   z-TestConstructor.test_dict.<locals>.<listcomp>rv   abcr
  )rY   rX   r   rk   rX   r   r\   )rF   rq   rr   r   rH  r   r   r~   rm   Indexrl   r   Seriesrh   r#   r#   r$   	test_dict  s     zTestConstructor.test_dictc                 C   s   t tdt tdtdd tdD d}t|}t| t|t ddgd}t| t	|j
t ddg |d	  ddgksJ t tdtdtd
d tdD d}tt  t|ddgd W d    n1 s0    Y  d S )Nr   rJ  c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9   9  rV   z7TestConstructor.test_dict_of_series.<locals>.<listcomp>rv   r   r   r
  rX   c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9   H  rV   )rm   rO  rF   rq   rr   r   r   rH  rN  r   r~   r  r^   r_   r   rh   r#   r#   r$   test_dict_of_series5  s     z#TestConstructor.test_dict_of_seriesc                 C   s^  t dtddd t dD d}t|dd}t|d tt t|dd}W d    n1 sf0    Y  t|}tt |j	}W d    n1 s0    Y  |
d}t|d t|dd	dgd
}t|d t|jtd	dg t|d	 tjtdd	d t|dddgd
}t|d t|jtddg t|d tjt ddd d S )Nr   rJ  c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9   Q  rV   z@TestConstructor.test_dict_specified_geometry.<locals>.<listcomp>rX   rY   rx   rx   r   r   rY   )r   rl   rM  rX   )rF   rq   rr   r   rH  r^   r_   r   r   r   r`   r   rl   rm   rN  r   rO  )rK   r>   rA   _r#   r#   r$   test_dict_specified_geometryM  s*    
*$



z,TestConstructor.test_dict_specified_geometryc                 C   s   t dtddd t dD d}t 2 tj|d |d |d gtd	j}W d    n1 sb0    Y  t|g dd
}t| t|g ddd}t|d d S )Nr   rJ  c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9   s  rV   z.TestConstructor.test_array.<locals>.<listcomp>rv   rX   rY   r   )rF  rk   rR  rx   rl   r   )	rF   rq   rr   r   rd   r   Tr   rH  )rK   r>   r   rA   r#   r#   r$   
test_arrayo  s    @zTestConstructor.test_arrayc              	   C   sJ  t dtddd t dD d}t|}t  t|}W d    n1 sR0    Y  t| t|tjksvJ ||fD ]}t|}t| t|t	ddgd}t| t
|jt	ddg |d	  ddgksJ t|d
dgd}t| t
|jt	d
dg tt t|dd W d    q~1 s:0    Y  q~d S )Nr   rJ  c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   z3TestConstructor.test_from_frame.<locals>.<listcomp>rv   r   r   r
  rX   r   rY   rk   rx   r   )rF   rq   rr   r   r   rm   rn   rH  rS   rN  r   r~   r  rl   r^   r_   r   rK   r>   ZgpdfZpddfrA   rt   r#   r#   r$   test_from_frame~  s*    (zTestConstructor.test_from_framec                 C   s   t dtddd t dD d}t|dd}t|d t  t|}W d    n1 s`0    Y  ||fD ]}t|dd}t|d qrt|}t|d d S )Nr   rJ  c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   zFTestConstructor.test_from_frame_specified_geometry.<locals>.<listcomp>rR  rx   r   )rF   rq   rr   r   rH  r   rm   rn   rX  r#   r#   r$   "test_from_frame_specified_geometry  s    
(z2TestConstructor.test_from_frame_specified_geometryc                 C   s   t dd tdD tdddg }t dd tdD d}t| t|| t ddd tdD i}t| t|| t d	d
d tdD id	d}t|d	 |jdd	idd	}t|| d S )Nc                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   z6TestConstructor.test_only_geometry.<locals>.<listcomp>r   )r   otherr   c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   r   c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   rx   c                 S   s   g | ]}t ||qS r#   r4   rK  r#   r#   r$   r9     rV   rk   )r   rF   rH  r   rp   r`   )rK   exprA   r#   r#   r$   test_only_geometry  s"    


z"TestConstructor.test_only_geometryc                 C   sR   t dtdd}t|}t|tks,J tddgi}t|jdgksNJ d S )Nr   rJ  rX   rY   r7   r   )rF   rq   rr   r   rS   r   r7   )rK   r>   rA   r  r#   r#   r$   test_no_geometries  s
    z"TestConstructor.test_no_geometriesc                 C   s<   t  }t|t ksJ t g g dg d}t|t ks8J d S )Nr^  r   )r   rS   r   r#   r#   r$   
test_empty  s    zTestConstructor.test_emptyc                 C   s   t ddt ddt ddg}t|}tg d|dddgdd}t| |jddgk tg d|dddgtg d	dd
}t| |jddgk d S )Nr   r   r   r   )r   r   r   r   rU  )r   r   r   )rl   r~   r   )r   r   r   rH  rl   rm   rN  rK   geomsr   r  r#   r#   r$   test_column_ordering  s"    z$TestConstructor.test_column_orderingc                 C   s   t ddt ddt ddg}t|}tdg di|d}t|dd t ddt ddt ddg}t|d	d
}tdg di|d}t|d	d d S )Nr   r   r   r   r   r   r   )rG  Zmy_geomrM  )r   r   r   rH  ra  r#   r#   r$   test_preserve_series_name  s    z)TestConstructor.test_preserve_series_namec                 C   sv   t g dg dd}t ( t dd tdD }W d    n1 sL0    Y  t||d}t|jt| d S )Nr   )r   r   rw   )r   r   c                 S   s   g | ]}t ||qS r#   r4   )r6   r   r#   r#   r$   r9     rV   z;TestConstructor.test_overwrite_geometry.<locals>.<listcomp>r   r   )	rm   rn   r   rO  rF   r   r   r   r   )rK   r>   rb  rt   r#   r#   r$   test_overwrite_geometry  s
    6z'TestConstructor.test_overwrite_geometryc                 C   s   t dd ttdtdD }|jddid}tt t| W d    n1 sZ0    Y  |jddid}tt t|dd W d    n1 s0    Y  d S )Nc                 S   s&   g | ]\}}t ||t ||d qS ))r   rj   r4   r5   r#   r#   r$   r9      s   z7TestConstructor.test_repeat_geo_col.<locals>.<listcomp>r   rj   r   rk   r   )	rm   rn   rE   rF   rp   r^   r_   r   r   r   r#   r#   r$   test_repeat_geo_col  s    &z#TestConstructor.test_repeat_geo_colrF  r   r   c                 C   s   t tddtddgtddtddgg}||}t jdgddgg|_t|}tj	t
dd |j W d    n1 s0    Y  |d}|j|jksJ t|jtsJ d S )	Nr   r   r   r   r   z .*geometry .* has not been set.*r   )r   r   )rm   rn   r   ZastypeZ
MultiIndexZfrom_productrl   r   r^   r_   r   r   r`   r   rf   r   )rK   rF  rA   r  Zres_gdfr#   r#   r$   #test_multiindex_with_geometry_label  s    .
$
z3TestConstructor.test_multiindex_with_geometry_labelc           
      C   s  d}t dddgi}| }tddgddg}tjt|d ||d< W d    n1 s\0    Y  |jdkstJ | }tjt|d ||_W d    n1 s0    Y  |jdksJ | }tjt	dd d	|d< W d    n1 s0    Y  |jd u sJ | j
|d
}|jdks,J | }||d< ||d< |d}|ddg }	|	jdksjJ ||	d< |	jdksJ d S )Nz:You are adding a column named 'geometry' to a GeoDataFramer   r   r   r   r   r   z)Geometry column does not contain geometryfoor   rb   Zgeom3)r   ro   r   from_xyr^   warnsFutureWarningr]   r   UserWarningr   r`   )
rK   r   r  r   Zgeo_colZgdf4Zgdf5Zgdf3Zgdf6Zsubsetr#   r#   r$   test_default_geo_colname_none  s6    &$&
z-TestConstructor.test_default_geo_colname_nonec                 C   s   d}t jddgddggddgddggd}|d }|d	 }t||t||d
}|j|ks\J |jj|kslJ |jjdks|J |jdksJ |jjdksJ d S )N	EPSG:4326r   r   rZ   r7   r8   rk   )rZ   r7   )rZ   r8   r[   r   	rm   rn   r   r   r;   r   rF  r]   r\   rK   r;   rA   x_coly_colr  r#   r#   r$   (test_multiindex_geometry_colname_2_levelD  s    z8TestConstructor.test_multiindex_geometry_colname_2_levelc                 C   s   d}t jddgddggddgddgddggd}|d	 }|d
 }t||t||d}|j|ksbJ |jj|ksrJ |jjdksJ |jdksJ |jjdksJ d S )Nrn  r   r   rh  rZ   r7   r8   rk   rh  rZ   r7   rh  rZ   r8   r[   r   ro  rp  r#   r#   r$   (test_multiindex_geometry_colname_3_levelT  s     	z8TestConstructor.test_multiindex_geometry_colname_3_levelc                 C   s   d}t jddgddggddgddgddggd}|d	 }|d
 }t|||d< | }|jd|d}|j|kstJ |jdksJ |jj	dksJ |jd|d}|j|ksJ |jdksJ |jj	dksJ d S )Nrn  r   r   rh  rZ   r7   r8   rk   rt  ru  r   r:   )r    rw  )
rm   rn   r   ri  ro   r`   r;   r]   r   r\   )rK   r;   rA   rq  rr  r"   r  r#   r#   r$   0test_multiindex_geometry_colname_3_level_new_colk  s(    	z@TestConstructor.test_multiindex_geometry_colname_3_level_new_colc                 C   sV   t jd}t|}ttdtdd}tj||gdd}|||j< t	|| d S )Nr1   r   )rh  barr   r   )
r<   r?   r@   r	   rm   rn   rF   concatrl   r   )rK   rM   rA   Zother_dfr   r#   r#   r$   test_assign_cols_using_index  s    
z,TestConstructor.test_assign_cols_using_indexN)r   r   r   rP  rQ  rT  rW  rY  rZ  r]  r_  r`  rc  r^   r?  Zxfailrd  re  rf  rA  rg  rm  rs  rv  rx  r{  r#   r#   r#   r$   rI    s*   "	
	
%rI  c                  C   s(   t dgd} d| _| j dks$J d S )Nr   rk   zIGNF:ETRS89UTM28)ZIGNFZETRS89UTM28)r   r;   Zto_authorityr  r#   r#   r$   test_geodataframe_crs  s    r}  c                  C   sJ   t dgd} t|  }d|vs&J d| _t|  }d|vsFJ d S )Nr   rk   r;   i  )r   r   r   r   r;   )r  gdf_geojsonr#   r#   r$   test_geodataframe_nocrs_json  s    r  c                  C   s\   t dgd} d| _t|  }d|v s,J |d dddidksFJ | j}d|vsXJ d S )Nr   rk   id  r;   r\   zurn:ogc:def:crs:EPSG::25833)rS   r   )r   r;   r   r   r   r   )r  r~  Zgdf_geointerfacer#   r#   r$   test_geodataframe_crs_json  s    r  r;   zA+proj=cea +lon_0=0 +lat_ts=45 +x_0=0 +y_0=0 +ellps=WGS84 +units=mz
IGNF:WGS84c                 C   sd   t tddgdg| d}tjtdd t| }W d    n1 sJ0    Y  d|vs`J d S )Ni  r   )rl   r;   z2GeoDataFrame's CRS is not representable in URN OGCr   r;   )r   r   r^   rj  rl  r   r   r   )r;   r  r~  r#   r#   r$   +test_geodataframe_crs_nonrepresentable_json  s    
,r  c                  C   sR   t dgtddgd} | jd u s&J | d jd dks<J t| dd u sNJ d S )Nr   r[   r;   r   )r   r   r;   r   getattrr|  r#   r#   r$   test_geodataframe_crs_colname  s    r  )r   )8r   rG   rO   rB   numpyrq   Zpandasrm   Zpyprojr   Zpyproj.exceptionsr   Zshapely.geometryr   r   r<   Zgeopandas._compat_compatrB  r   r   r   r	   Zgeopandas.arrayr
   r   r   r   Zgeopandas.testingr   r   Zgeopandas.tests.utilr   r   Zpandas.testingr   r   r   r^   rD  ZPYGEOS_GE_010rC  rE  Zfixturer%   r.   r/   rH  rI  r}  r  r  r?  rA  r  r  r#   r#   r#   r$   <module>   sZ   

       d

  r
