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

    c                 2    t        |   |i | d| _        y )Ng        super__init___nselfargskwargs	__class__s      O/var/www/html/immo/lib/python3.12/site-packages/geopandas/tests/test_geocode.pyr   zForwardMock.__init__   s    $)&)    c                     |d   | j                   | j                   dz   ff| _        | xj                   dz  c_         t        |   |i |S )Nr         ?   r   return_valuer   __call__r   s      r   r#   zForwardMock.__call__   sG     Gdggtww}%==1w000r   __name__
__module____qualname____doc__r   r#   __classcell__r   s   @r   r   r      s    1 1r   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )ReverseMockz
    Mock the reverse geocoding function.
    Returns the passed in point and 'address{p}' where p increases
    at each call

    c                 2    t        |   |i | d| _        y )Nr   r   r   s      r   r   zReverseMock.__init__,   s    $)&)r   c                 ~    d| j                    |d   f| _        | xj                   dz  c_         t        |   |i |S )Naddressr   r    r!   r   s      r   r#   zReverseMock.__call__0   sA    %dggY/a81w000r   r$   r*   s   @r   r,   r,   $   s    1 1r   r,   c                      ddg} | S )Nz260 Broadway, New York, NYz#77 Massachusetts Ave, Cambridge, MA )	locationss    r   r2   r2   6   s    -/TUIr   c                  6    t        dd      t        dd      g} | S )NgXRQgy-E@gVBSgGDrC@r   )pointss    r   r4   r4   <   s    K,eK.LMFMr   c                     t        dd      } t        dd      }d| j                  d   fd|j                  d   fd}t        |      }t        |      t        u sJ t
        r|j                  d	k(  sJ t        |      d
k(  sJ d|v sJ |j                  d   d   j                  d   }| j                  d   }|d   t        j                  |d         k(  sJ |d   t        j                  |d         k(  sJ |j                  d   d   j                  d   }|j                  d   }|d   t        j                  |d         k(  sJ |d   t        j                  |d         k(  sJ y )N皙(@Fgffffff7gYL@address0r   address1ab	EPSG:4326   r/   r;   geometryr    r<   )r   coordsr
   typer   r   crslenlocpytestapprox)p0p1ddfr@   tests         r   test_prepare_resultrL   B   s]    
tU	B	ud	B299Q<(
BIIaL/IJA	 	#B8|###vv$$$r7a<<??VVC[$++A.F99Q<D!9d1g....!9d1g....VVC[$++A.F99Q<D!9d1g....!9d1g....r   c                     t        dd      } d| j                  d   fdd}t        |      }t        |      t        u sJ t
        r|j                  dk(  sJ t        |      dk(  sJ d	|v sJ |j                  d
   }t        |d   j                        dk(  sJ |d   j                  sJ t        j                  |d	         sJ y )Nr6   r7   r8   r   NNr:   r=   r>   r/   r<   r?   )r   r@   r
   rA   r   r   rB   rC   rD   is_emptypdisna)rG   rI   rJ   rows       r   test_prepare_result_nonerS   \   s    	tU	B299Q<(|<A	 	#B8|###vv$$$r7a<<??
&&+C s:%%&!+++z?####773y>"""r   geocode_result)NrN   c                 n    d| i}t        t               gd gdd      }t        |      }t        ||       y )Nr   )r?   r/   r=   rB   )r   r   r
   r   )rT   resultexpected_outputoutputs       r   *test_prepare_geocode_result_when_result_isrZ   o   s=     F"gYD62O
 %V,Ffo6r   c                  ~    ddl m}  t        j                  |       5  t	        dgd       d d d        y # 1 sw Y   y xY w)Nr   GeocoderNotFoundzcambridge, mabadprovider)	geopy.excr]   rE   raisesr   r\   s    r   test_bad_provider_forwardra   |   s4    *	'	( 2!=12 2 2s   3<c                      ddl m}  t        j                  |       5  t	        t        dd      gd       d d d        y # 1 sw Y   y xY w)Nr   r\   r^   )r_   r]   rE   r`   r	   r   r\   s    r   test_bad_provider_reverserc      s9    *	'	( 6q!}56 6 6s	   =Ac                 
   ddl m} d|fD ]  }t        j                  dt	                     5 }t        | |d      }t        |       |j                  k(  sJ 	 d d d        t        |       }t        t              sJ t        t        |      D cg c]#  }t        t        |      dz   t        |            % c}d	      }t        ||d
          t        |d   t!        j"                  | d              y # 1 sw Y   xY wc c}w )Nr   Photonphotonzgeopy.geocoders.Photon.geocoder>   providertimeoutr   r=   rV   r?   r/   name)geopy.geocodersrf   r   patchr   r   rC   
call_count
isinstancer   r   ranger   floatr   r   rP   Series)	r2   r4   rf   ri   mgnxexpecteds	            r   test_forwardry      s    &v& PZZ8+-H 	2A	Ha@Ay>Q\\111	2 	N!\***6;Ah?U58c>58,?[
 	x:7AiL"))II*NOP	2 	2 @s   )C4(D 
4C=	c           
         ddl m} d|fD ]  }t        j                  dt	                     5 }t        ||d      }t        |      |j                  k(  sJ 	 d d d        t        t              sJ t        |d      }t        ||d	          t        j                  t        t        |            D cg c]  }d
t        |      z    c}d
      }t!        |d
   |        y # 1 sw Y   xY wc c}w )Nr   re   rg   zgeopy.geocoders.Photon.reverser>   rh   r=   rV   r?   r/   rk   )rm   rf   r   rn   r,   r	   rC   ro   rp   r   r   r   rP   rs   rq   strr   )	r2   r4   rf   ri   rt   ru   rx   rw   r/   s	            r   test_reverser|      s    &v& 3ZZ8+-H 	/A1EAv;!,,...	/ !\***V5x:7))).s6{);<AYQ<9
 	AiL'23	/ 	/ =s   )C!1C-
!C*	)'pandasrP   shapely.geometryr   	geopandasr   r   geopandas._compatr   geopandas.toolsr   r	   geopandas.tools.geocodingr
   rE   geopandas.testingr   geopandas.tests.utilr   r   pandas.testingr   importorskipr   	MagicMockr   r,   fixturer2   r4   rL   rS   markparametrizerZ   ra   rc   ry   r|   r1   r   r   <module>r      s     " - ( 4 =  7 = .G$1$.. 1$1$.. 1$  
  
/4#& )+?@	7 A	726P"3r   