a
    1$e                     @   s  d dl 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 d dlmZmZ d dlmZ d dlmZ d dlZed	ZG d
d dejZG dd dejZejdd Zejdd Zdd Zdd Zejdddd Z dd Z!dd Z"dd Z#d d! Z$dS )"    NPoint)GeoDataFrame	GeoSeries)geocodereverse_geocode)_prepare_geocode_result)assert_geoseries_equalmock)assert_series_equal)assert_geodataframe_equalgeopyc                       s,   e Zd ZdZ fddZ fddZ  ZS )ForwardMockz
    Mock the forward geocoding function.
    Returns the passed in address and (p, p+.5) where p increases
    at each call

    c                    s   t  j|i | d| _d S )Ng        super__init___nselfargskwargs	__class__ X/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopandas/tests/test_geocode.pyr      s    zForwardMock.__init__c                    s:   |d | j | j d ff| _|  j d7  _ t j|i |S )Nr         ?   )r   return_valuer   __call__r   r   r   r   r      s    zForwardMock.__call____name__
__module____qualname____doc__r   r   __classcell__r   r   r   r   r      s   r   c                       s,   e Zd ZdZ fddZ fddZ  ZS )ReverseMockz
    Mock the reverse geocoding function.
    Returns the passed in point and 'address{p}' where p increases
    at each call

    c                    s   t  j|i | d| _d S )Nr   r   r   r   r   r   r   +   s    zReverseMock.__init__c                    s6   d | j|d f| _|  jd7  _t j|i |S )Nz
address{0}r   r   )formatr   r   r   r   r   r   r   r   r   /   s    zReverseMock.__call__r   r   r   r   r   r%   #   s   r%   c                  C   s   ddg} | S )Nz260 Broadway, New York, NYz#77 Massachusetts Ave, Cambridge, MAr   )	locationsr   r   r   r'   5   s    r'   c                  C   s   t ddt ddg} | S )NgXRQgy-E@gVBSgGDrC@r   )pointsr   r   r   r(   ;   s    r(   c                  C   s  t dd} t dd}d| jd fd|jd fd}t|}t|tu sJJ |jd	ksXJ t|d
kshJ d|v stJ |jd d jd }| jd }|d t	|d ksJ |d t	|d ksJ |jd d jd }|jd }|d t	|d ksJ |d t	|d ksJ d S )N皙(@Fgffffff7gYL@address0r   Zaddress1ab	EPSG:4326   addressr-   geometryr   r.   )
r   coordsr   typer   crslenlocpytestZapprox)p0p1ddfr3   testr   r   r   test_prepare_resultA   s     



r>   c                  C   s   t dd} d| jd fdd}t|}t|tu s6J |jdksDJ t|dksTJ d	|v s`J |jd
 }|d jsxJ |d	 d u sJ d S )Nr)   r*   r+   r   NNr,   r/   r0   r1   r.   r2   )	r   r3   r   r4   r   r5   r6   r7   Zis_empty)r9   r;   r<   rowr   r   r   test_prepare_result_noneZ   s    

rA   geocode_result)Nr?   c                 C   s6   d| i}t t gd gddd}t|}t|| d S )Nr   )r2   r1   r/   r5   )r   r   r   r   )rB   resultZexpected_outputoutputr   r   r   *test_prepare_geocode_result_when_result_isp   s    rF   c                  C   sF   ddl m}  t|  tdgd W d    n1 s80    Y  d S )Nr   GeocoderNotFoundzcambridge, mabadprovider)	geopy.excrH   r8   raisesr   rG   r   r   r   test_bad_provider_forward}   s    rL   c                  C   sL   ddl m}  t| " ttddgd W d    n1 s>0    Y  d S )Nr   rG   rI   )rJ   rH   r8   rK   r   r   rG   r   r   r   test_bad_provider_reverse   s    rM   c              	   C   s   ddl m} d|fD ]}tdt 0}t| |dd}t| |jksHJ W d    n1 s\0    Y  t| }t|t	s|J t
dd t|D d	d
}t||d  t|d tj| dd qd S )Nr   Photonphotonzgeopy.geocoders.Photon.geocoder0   providertimeoutc                 S   s"   g | ]}t t|d  t|qS )r   )r   float.0xr   r   r   
<listcomp>       z test_forward.<locals>.<listcomp>r/   rC   r2   r1   name)geopy.geocodersrO   r
   patchr   r   r6   
call_count
isinstancer   r   ranger	   r   pdSeries)r'   r(   rO   rR   mgnexpectedr   r   r   test_forward   s    0rg   c              	   C   s   ddl m} d|fD ]}tdt 0}t||dd}t||jksHJ W d    n1 s\0    Y  t|t	stJ t
|dd}t||d	  tjd
d tt|D dd}t|d | qd S )Nr   rN   rP   zgeopy.geocoders.Photon.reverser0   rQ   r/   rC   r2   c                 S   s   g | ]}d t | qS )r1   )strrU   r   r   r   rX      rY   z test_reverse.<locals>.<listcomp>r1   rZ   )r\   rO   r
   r]   r%   r   r6   r^   r_   r   r   r	   ra   rb   r`   r   )r'   r(   rO   rR   rc   rd   rf   r1   r   r   r   test_reverse   s    0ri   )%Zpandasra   Zshapely.geometryr   Z	geopandasr   r   Zgeopandas.toolsr   r   Zgeopandas.tools.geocodingr   Zgeopandas.tests.utilr	   r
   Zpandas.testingr   Zgeopandas.testingr   r8   Zimportorskipr   Z	MagicMockr   r%   Zfixturer'   r(   r>   rA   markZparametrizerF   rL   rM   rg   ri   r   r   r   r   <module>   s.   



