
    hv                     D   d 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m	Z
 ddlmZmZmZ ddlmZ ddlmZ ddlmZ ddlZddlmZmZmZmZ 	 dd	lmZ ej<                  d
        Zde e   fdZ! e!       Z"de#fdZ$ ej<                         d        Z% ej<                         d        Z& ej<                         d        Z'd Z(ej<                  d        Z)ej<                  d        Z*ej<                  d        Z+ej<                  d        Z, G d d      Z-y# e$ r eZY w xY w)a  
Tests here include reading/writing to different types of spatial databases.
The spatial database tests may not work without additional system
configuration. postGIS tests require a test database to have been setup;
see geopandas.tests.util for more information.
    N)	find_spec)GeoDataFrame	read_fileread_postgis)
HAS_PYPROJ)	_get_conn)_write_postgis)create_postgiscreate_spatialitemockvalidate_boro_df)textc                     t        |       }|S )N)r   )nybb_filenamedfs     N/var/www/html/immo/lib/python3.12/site-packages/geopandas/io/tests/test_sql.pydf_nybbr   %   s    	=	!BI    returnc                  z    g } t        d      r| j                  d       t        d      r| j                  d       | S )zWork out which of psycopg2 and psycopg are available.
    This prevents tests running if the relevant package isn't installed
    (rather than being skipped, as skips are treated as failures during postgis CI)
    psycopgpsycopg2)r   append)driverss    r   check_available_postgis_driversr   +   s6    
 Gy!z"Nr   c                      dt         j                  j                  d      t         j                  j                  d      t         j                  j                  d      t         j                  j                  d      dS )zBGather postgres connection credentials from environment variables.test_geopandasPGUSER
PGPASSWORDPGHOSTPGPORT)dbnameuserpasswordhostport)osenvironget r   r   prepare_database_credentialsr+   ;   sQ     #

x(JJNN<0

x(

x( r   c              #   |  K   t        j                  | j                        }	  |j                  di t	               }t        j                         5  t        j                  dd        ddd       j                          y# |j
                  $ r t        j                  d       Y ow xY w# 1 sw Y   DxY ww)zCreate a postgres connection using either psycopg2 or psycopg.

    Use this as an indirect fixture, where the request parameter is POSTGIS_DRIVERS.'Cannot connect with postgresql databaseignorez-pandas only supports SQLAlchemy connectable.*messageNr*   )pytestimportorskipparamconnectr+   OperationalErrorskipwarningscatch_warningsfilterwarningsclose)requestr   cons      r   connection_postgisr=   F   s     
 !!'--0G?goo? < >? 
	 	 	" M	
 		
 IIK ## ?=>? s?    B<B B<B0-B<$B-*B<,B--B<0B95B<c              #   l  K   t        j                  d      }ddlm} t	               }	 |j                  |j                  d| j                   |d   |d   |d   |d   |d	   
            }|j                           |j                          y# t        $ r t        j                  d       Y 5w xY ww)z
    Initiate a sqlalchemy connection engine using either psycopg2 or psycopg.

    Use this as an indirect fixture, where the request parameter is POSTGIS_DRIVERS.
    
sqlalchemyr   )URLzpostgresql+r#   r"   r$   r%   r&   )
drivernameusernamedatabaser$   r%   r&   r-   N)r1   r2   sqlalchemy.engine.urlr@   r+   create_enginecreater3   r4   	Exceptionr6   dispose)r;   r?   r@   credentialsr<   s        r   engine_postgisrJ   Y   s      $$\2J).0K?&&JJ(8$V,$X.$Z0 ( (  	
 	 IKKM	  ?=>?s)   &B4AB ;B4B1.B40B11B4c               #   z  K   t        j                  d      } 	 | j                  d      5 }|j                  d       |j	                  d       |j                  d       ddd        |j                          y# 1 sw Y   xY w# t        $ r( j                          t        j                  d       Y Qw xY ww)a2  
    Return a memory-based SQLite3 connection with SpatiaLite enabled & initialized.

    `The sqlite3 module must be built with loadable extension support
    <https://docs.python.org/3/library/sqlite3.html#f1>`_ and
    `SpatiaLite <https://www.gaia-gis.it/fossil/libspatialite/index>`_
    must be available on the system as a SQLite module.
    Packages available on Anaconda meet requirements.

    Exceptions
    ----------
    ``AttributeError`` on missing support for loadable SQLite extensions
    ``sqlite3.OperationalError`` on missing SpatiaLite
    sqlite3z:memory:Tmod_spatialitez SELECT InitSpatialMetaData(TRUE)Nz Cannot setup spatialite database)	r1   r2   r4   enable_load_extensionload_extensionexecuterG   r:   r6   )rL   r<   s     r   connection_spatialiterQ   w   s       !!),G8__Z( 	<C%%d+/0KK:;	< IIIK	< 	<  8		678s?   B;B 4A;B &B;;B B .B85B;7B88B;c                    t        j                  d      }|j                  |       j                  |      r|j	                         }t        j                         5  t        j                  dd       |j                  |        d d d        |j                  j                  |      }||j                  | d       y y y # 1 sw Y   <xY w)Nr?   r.   z-Did not recognize type 'geometry' of column.*r/   T)
checkfirst)r1   r2   inspect	has_tableMetaDatar7   r8   r9   reflecttablesr)   drop)conn_or_enginetabler?   metadatas       r   drop_table_if_existsr]      s    $$\2J.)33E:&&($$& 	-##"Q ^,		-
 ##E*JJ~$J7  ;	- 	-s   )B>>Cc            	          ddl m} m}m} t	        j
                  d | ddg       |ddgddgg       |dd      gid	
      }|S )Nr   )
LineStringMultiLineStringPointgeometryr   r      re   )   rf   )   rg   re   	epsg:4326crs)shapely.geometryr_   r`   ra   	geopandasr   )r_   r`   ra   r   s       r   df_mixed_single_and_multirm      s^    CC			FF+,&&!1FF3C DEa	
 	
B Ir   c                      ddl m} m}m}m} t        j                  d |  |g d       |ddg       |dd      g      gid      }|S )	Nr   )GeometryCollectionr_   ra   Polygonrb   )rc   rd   r   re   rc   rd   rh   ri   )rk   ro   r_   ra   rp   rl   r   )ro   r_   ra   rp   r   s        r   df_geom_collectionrr      s]    OO			" 89"FF#34a
	
 
B Ir   c                  R    ddl m}  t        j                  d | d      gid      }|S )Nr   )
LinearRingrb   )rc   rq   rd   )re   r   rh   ri   )rk   rt   rl   r   )rt   r   s     r   df_linear_ringru      s/    +				j!ABCD+
B Ir   c            
          ddl m} m}m} t	        j
                  d | ddg       |g d       |ddd      gid	
      }|S )Nr   )r_   ra   rp   rb   r   r   r   re   re   re   )rw   rx   )r   re   re   re   rf   rh   ri   )rk   r_   ra   rp   rl   r   )r_   ra   rp   r   s       r   df_3D_geomsry      sR    ;;			Iy129:aA	
 	
B Ir   c                   L
   e Zd Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Z	ej                  j                  ded      d        Z
ej                  j                  ded      d	        Zej                  j                  ded      d
        Zej                  j                  ded      d        Zej                  j                  ded      d        Zd Zd Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Zej                  j                  ded      d        Z ej                  j                  ded      d        Z!ej                  j                  ded      d         Z"ej                  j                  ded      d!        Z#ej                  j                  ded      d"        Z$ej                  j                  ded      ej                  jK                  e&jN                   d#$      d%               Z(ej                  j                  ded      d&        Z)ej                  jU                  e+ d'$       e,jZ                  d(      ej                  j                  ded      d)                      Z. e,jZ                  d*      ej                  j                  ded      d+               Z/ej                  j                  ded      d,        Z0y-).TestIOrJ   T)indirectc                    t        j                  d      j                  }|}t        |      5 }t	        ||      sJ 	 d d d        |j                         5 }t        |      5 }t	        ||      sJ 	 d d d        d d d        t        j                  t              5  t        t                     5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   axY w# 1 sw Y   6xY w# 1 sw Y   y xY w)Nzsqlalchemy.engine.base)	r1   r2   
Connectionget_conn
isinstancer4   raises
ValueErrorobject)selfrJ   r~   engineoutputconns         r   test_get_connzTestIO.test_get_conn   s    (()ABMM
f 	2fj111	2^^ 	6$ 66!&*5556	6 ]]:& 	&(# 	 		2 	26 6	6 	6 	 	sS   CC!C1CC1.C%0C1C
C	CC"%C.	*C11C:r=   c                 n    |}t        ||       d}t        ||      }t        |       |j                  J y )NSELECT * FROM nybb;)r
   r   r   rj   r   r=   r   r<   sqlr   s         r   test_read_postgis_defaultz TestIO.test_read_postgis_default   s:     sG$##s# vv~~r   c                 ^    |}d}t        |||       d}t        |||      }t        |       y )Nthe_geomgeom_colr   r
   r   r   r   r=   r   r<   r   r   r   s          r   !test_read_postgis_custom_geom_colz(TestIO.test_read_postgis_custom_geom_col  s3     sGh7##sX6r   c                 p    |}d}d}t        |||       d| d| d}t        |||      }t        |       y)z6Tests that a SELECT {geom} AS {some_other_geom} works.geomr   r   zGSELECT borocode, boroname, shape_leng, shape_area,
                    z as z FROM nybb;Nr   )r   r=   r   r<   	orig_geomout_geomr   r   s           r    test_read_postgis_select_geom_asz'TestIO.test_read_postgis_select_geom_as  sN     !	sGi8KtH:[<#sX6r   c                     |}d}|j                  |      }t        ||d       d}t        ||      }t        |       |j                  |k(  sJ y)z<Tests that an SRID can be read from a geodatabase (GH #451).z	epsg:4269  sridr   Nto_crsr
   r   r   rj   )r   r=   r   r<   rj   	df_reprojr   r   s           r   test_read_postgis_get_sridz!TestIO.test_read_postgis_get_srid  sQ     !NN3'	sID1##s#vv}}r   c                     |}|j                   }t        ||d       d}t        |||      }t        |       |j                   |k(  sJ y)z?Tests that a user specified CRS overrides the geodatabase SRID.r   r   r   ri   N)rj   r
   r   r   )r   r=   r   r<   orig_crsr   r   s          r   test_read_postgis_override_sridz&TestIO.test_read_postgis_override_srid(  sK     !;;sG$/##s1vv!!!r   c                 j    |}t        ||       d}t        j                  ||      }t        |d       y )Nr   Fcase_sensitiver
   r   from_postgisr   r   s         r   test_from_postgis_defaultz TestIO.test_from_postgis_default5  s2     sG$#&&sC0E2r   c                 v    |}d}t        |||       d}t        j                  |||      }t        |d       y )Nr   r   r   Fr   r   r   s          r   !test_from_postgis_custom_geom_colz(TestIO.test_from_postgis_custom_geom_col?  s;     sGh7#&&sC(CE2r   c                     |}|j                   j                  }d|j                   j                  d<   t        ||       d| d| d}t	        |||      }t        |       y)z*Tests that geometry with NULL is accepted.Nr   zDSELECT ogc_fid, borocode, boroname, shape_leng, shape_area, AsEWKB("") AS "" FROM nybbr   )rb   nameiatr   r   r   r   rQ   r   r<   r   r   r   s          r   test_read_postgis_null_geomz"TestIO.test_read_postgis_null_geomJ  sl    ###(("&Q#w'jz> 	 #sX6r   c                     |}|j                   j                  }t        ||       d| d| d}t        |||      }t	        |       y)z/Tests that geometry read as binary is accepted.zISELECT ogc_fid, borocode, boroname, shape_leng, shape_area, ST_AsBinary("r   r   r   N)rb   r   r   r   r   r   s          r   test_read_postgis_binaryzTestIO.test_read_postgis_binaryW  sW    ###((#w'$:WXJkC 	 #sX6r   c                     d}|}t        ||       d}t        j                  t        |||            }t	        |       |j
                  J y)zTest chunksize argumentrf   r   	chunksizeN)r
   pdconcatr   r   rj   r   r=   r   r   r<   r   r   s          r   test_read_postgis_chunksizez"TestIO.test_read_postgis_chunksizec  sL     	 sG$#YY|C	BC vv~~r   c                     |}d}t        ||       t        |||d       t        d| d      }t        ||d      }t	        |       y)	@Tests that GeoDataFrame can be written to PostGIS with defaults.nybbfailr<   r   	if_existsSELECT * FROM ;rb   r   Nr]   write_postgisr   r   r   r   rJ   r   r   r[   r   r   s          r   test_write_postgis_defaultz!TestIO.test_write_postgis_defaultr  sS       	VU+ 	g6H^E7!,-#v
;r   c                     |}d}t        ||       t        |||d       t        d| d      }t        ||d      }t	        |       y)	z?Tests writing GeoDataFrame to PostGIS with uppercase tablename.
aTestTabler   r   zSELECT * FROM "z";rb   r   Nr   r   s          r   &test_write_postgis_uppercase_tablenamez-TestIO.test_write_postgis_uppercase_tablename  sS       	VU+ 	g6H_UG2./#v
;r   c                     |j                         5 }d}t        ||       t        |||d       t        d| d      }t	        ||d      }t        |       ddd       y# 1 sw Y   yxY w)	r   nybb_conr   r   r   r   rb   r   N)beginr]   r   r   r   r   )r   rJ   r   r<   r[   r   r   s          r   (test_write_postgis_sqlalchemy_connectionz/TestIO.test_write_postgis_sqlalchemy_connection  sq     !!# 	!sE !e, 's&Iwa01Cc3<BR 	! 	! 	!s   AA  A)c                     |}d}t        |||d       	 t        |||d       y# t        $ r}dt        |      v rn|Y d}~yd}~ww xY w)z[
        Tests that uploading the same table raises error when: if_replace='fail'.
        r   replacer   r   zalready existsN)r   r   str)r   rJ   r   r   r[   es         r   )test_write_postgis_fail_when_table_existsz0TestIO.test_write_postgis_fail_when_table_exists  sZ    
   	g6K	'vEVL 	3q6) 	s   % 	AAAc                     |}d}t        |||d       t        |||d       t        d| d      }t        ||d      }t        |       y)	zV
        Tests that replacing a table is possible when: if_replace='replace'.
        r   r   r   r   r   rb   r   N)r   r   r   r   r   s          r   ,test_write_postgis_replace_when_table_existsz3TestIO.test_write_postgis_replace_when_table_exists  sU    
   	g6Kg6K^E7!,-#v
;r   c                    |}d}|j                   \  }}t        |||d       t        |||d       t        d| d      }t        ||d      }|j                   \  }	}
|	|d	z  k(  sJ d
|d	z   d|	 f       |
|k(  sJ d
| d|
 f       y)zt
        Tests that appending to existing table produces correct results when:
        if_replace='append'.
        r   r   r   r   r   r   rb   r   rf   zThere should be z rows,found: z columns,found: N)shaper   r   r   )r   rJ   r   r   r[   	orig_rows	orig_colsr   r   new_rowsnew_colss              r   +test_write_postgis_append_when_table_existsz2TestIO.test_write_postgis_append_when_table_exists  s      &}}	9g6Kg6J^E7!,-#v
;XX( 9q=( 	
y1}o]8*E+
 	
( 9$ 	
yk)9(D'
 	
$r   c                    |}d}d|j                   j                  _        t        j                  t
        d      5  t        |||d       ddd       t        dj                  d|d	
            }|j                         5 }|j                  |      j                         d   }ddd       dk(  s
J d|        y# 1 sw Y   qxY w# 1 sw Y   %xY w)z\
        Tests that GeoDataFrame can be written to PostGIS without CRS information.
        r   Nz%Could not parse CRS from the GeoDataFmatchr   r   6SELECT Find_SRID('{schema}', '{table}', '{geom_col}');publicrb   schemar[   r   r   zSRID should be 0, found )rb   arrayrj   r1   warnsUserWarningr   r   formatr4   rP   fetchone)r   rJ   r   r   r[   r   r   target_srids           r   test_write_postgis_without_crsz%TestIO.test_write_postgis_without_crs  s    
   &*"\\+-TU 	P'vEYO	P DKKuz L 

 ^^ 	:,,s+446q9K	:aI#;K=!II	P 	P	: 	:s   B; #C;CCc                 2   |}d}|j                  d      }t        |||d       t        dj                  d|d            }|j	                         5 }|j                  |      j                         d	   }d
d
d
       dk(  s
J d|        y
# 1 sw Y   xY w)z{
        Tests that GeoDataFrame can be written to PostGIS with ESRI Authority
        CRS information (GH #2414).
        r   zESRI:102003r   r   r   r   rb   r   r   Nis zSRID should be 102003, found )r   r   r   r   r4   rP   r   )	r   rJ   r   r   r[   df_nybb_esrir   r   r   s	            r   &test_write_postgis_with_esri_authorityz-TestIO.test_write_postgis_with_esri_authority  s       ~~m4lUiPDKKuz L 

 ^^ 	:,,s+446q9K	:f$S(Ek]&SS$	: 	:s   #BBc                 ~   |}d}t        |||d       t        d| d      }|j                         5 }|j                  |      j	                         d   }ddd       t        d| d	      }t        ||d
      }j                         dk(  sJ |j                  j                         d   dk(  sJ y# 1 sw Y   ^xY w)zS
        Tests that writing a mix of different geometry types is possible.
        geomtype_testsr   r   -SELECT DISTINCT(GeometryType(geometry)) FROM  ORDER BY 1;r   Nr   r   rb   r   GEOMETRYCOLLECTIONro   )	r   r   r4   rP   r   r   upper	geom_typeunique)	r   rJ   rr   r   r[   r   r   r   r   s	            r   &test_write_postgis_geometry_collectionz-TestIO.test_write_postgis_geometry_collection  s       (f5IV B5'VW^^ 	8S)224Q7I	8^E7!,-#v
; $8888||""$Q'+????	8 	8s   #B33B<c                 r   |}d}t        |||d       t        d| d      }|j                         5 }|j                  |      j	                         }ddd       d   d   j                         dk(  sJ |d	   d   j                         d
k(  sJ |d   d   j                         dk(  sJ y# 1 sw Y   [xY w)zU
        Tests that writing a mix of single and MultiGeometries is possible.
        r   r   r   ,SELECT DISTINCT GeometryType(geometry) FROM r   Nr   
LINESTRINGre   MULTILINESTRINGrf   POINT)r   r   r4   rP   fetchallr   )r   rJ   rm   r   r[   r   r   ress           r   'test_write_postgis_mixed_geometry_typesz.TestIO.test_write_postgis_mixed_geometry_types(  s       %6	

 A%UV^^ 	/,,s#,,.C	/1vay L0001vay $55551vay G+++		/ 	/s    B--B6c                     |}d}t        |||d       t        d| d      }|j                         5 }|j                  |      j	                         d   }ddd       j                         dk(  sJ y# 1 sw Y   xY w)	z2
        Tests that writing a LinearRing.
        r   r   r   r   r   r   Nr   )r   r   r4   rP   r   r   )r   rJ   ru   r   r[   r   r   r   s           r   test_write_postgis_linear_ringz%TestIO.test_write_postgis_linear_ring?  s    
   n&u	R B5'VW^^ 	8S)224Q7I	8  L000	8 	8s   #A44A=c                 .   |}d}t        |||dd       t        d| d      }|j                         5 }|j                  |      j	                         d   }ddd       d	k(  sJ t        d
| d      }|j                         5 }|j                  |      j                         }ddd       d   d   j                         dk(  sJ |d   d   j                         dk(  sJ |d   d   j                         dk(  sJ y# 1 sw Y   xY w# 1 sw Y   gxY w)z3
        Tests writing a LinearRing works.
        r   r   re   )r<   r   r   r   zSELECT COUNT(geometry) FROM r   r   Nrg   r   r   r   r   rf   r   )r   r   r4   rP   r   r   r   )	r   rJ   rm   r   r[   r   r   row_cntr   s	            r   test_write_postgis_in_chunksz#TestIO.test_write_postgis_in_chunksQ  s*   
   %	
 1%:;^^ 	6ll3'00215G	6!|| A%UV^^ 	/,,s#,,.C	/1vay L0001vay $55551vay G+++	6 	6	/ 	/s   #C? D?DDc                    |}d}d}t        d| d      }|j                         5 }|j                  |       ddd       t        |||d|       t        d| d	| d      }t	        ||d
      }t        |       y# 1 sw Y   ExY w);
        Tests writing data to alternative schema.
        r   testCREATE SCHEMA IF NOT EXISTS r   Nr   r<   r   r   r   r   .rb   r   )r   r   rP   r   r   r   	r   rJ   r   r   r[   schema_to_user   r   r   s	            r   &test_write_postgis_to_different_schemaz-TestIO.test_write_postgis_to_different_schemao  s    
  1-BC\\^ 	tLL	 	ey	
 ^M?!E7!<=#v
;	 	s   A<<Bc                    |}d}d}t        d| d      }|j                         5 }|j                  |       ddd       	 t        |||d|       t        d| d	| d      }t	        ||d
      }t        |       t        |||d|       t        d| d	| d      }t	        ||d
      }t        |       y# 1 sw Y   xY w# t        $ r Y Sw xY w)r  r   r  r  r   Nr   r	  r   r
  rb   r   r   )r   r   rP   r   r   r   r   r  s	            r   8test_write_postgis_to_different_schema_when_table_existsz?TestIO.test_write_postgis_to_different_schema_when_table_exists  s      1-BC\\^ 	tLL		V%6- awa@ACc6J?BR  	ey	
 ^M?!E7!<=#v
;3	 	  		s   B8;C 8C	CCc                     |}d}t        |||d       t        d| d      }t        ||d      }t        |j                  j
                        g dk(  sJ y	)
zE
        Tests writing a geometries with 3 dimensions works.
        r   r   r   r   r   rb   r   )TTTN)r   r   r   listrb   has_z)r   rJ   ry   r   r[   r   r   s          r    test_write_postgis_3D_geometriesz'TestIO.test_write_postgis_3D_geometries  s]    
   kvEYO ^E7!,-#v
;BKK%%&*<<<<r   c                     |}d}|d   j                         }t        |||d       t        d| d      }t        ||d      }|d   j                         |k(  sJ y	)
z_
        Tests that the row order in db table follows the order of the original frame.
        row_order_testBoroCoder   r   r   r   rb   r   N)tolistr   r   r   )r   rJ   r   r   r[   correct_orderr   r   s           r   test_row_orderzTestIO.test_row_order  sm    
   
+224g6K ^E7!,-#v
;*~$$&-777r   c                     |}d}t        ||       t        |||d       t        d| d      }t        ||d      }t	        |       y)	z`
        Tests that insert works with if_exists='append' when table does not exist yet.
        r   r   r   r   r   rb   r   Nr   r   s          r   test_append_before_table_existsz&TestIO.test_append_before_table_exists  sQ    
  VU+g6J ^E7!,-#v
;r   c                     |}d}t        |||d       |j                  d      }t        j                  t        d      5  t        |||d       d	d	d	       y	# 1 sw Y   y	xY w)
zS
        Tests that the warning is raised if table CRS differs from frame.
        r   r   r     )epsgzCRS of the target tabler   r   N)r   r   r1   r   r   r   rJ   r   r   r[   df_nybb2s         r   test_append_with_different_crsz%TestIO.test_append_with_different_crs  sf    
  g6K >>t>, ]]:-FG 	P(UhO	P 	P 	Ps   AA#c                 r    |}|j                  d d      }d}t        |||d       |}t        |||d       y )NT)allow_overrider   r   r   r   )set_crsr   r  s         r   test_append_without_crszTestIO.test_append_without_crs  sC      //$t/<g6K hF(Kr   zEDuplicate columns are dropped in read_sql with pandas 2.0.0 and 2.0.1)reasonc                     |}d}t        j                  t              5  t        ||d       ddd       y# 1 sw Y   yxY w)za
        Tests that a ValueError is raised if an SQL query returns two geometry columns.
        z>select ST_MakePoint(0, 0) as geom, ST_MakePoint(0, 0) as geom;r   r   N)r1   r   r   r   )r   rJ   r   r   s       r   $test_duplicate_geometry_column_failsz+TestIO.test_duplicate_geometry_column_fails   s;      N]]:& 	7fv6	7 	7 	7s   6?c                     |}|j                  d      }t        ||d       d}t        ||      }t        |       |j                  dk(  sJ y )N
esri:54052ri   $  r   r   
ESRI:54052r   r   s         r   test_read_non_epsg_crszTestIO.test_read_non_epsg_crs  sN     ..\.2sG%0##s#vv%%%r   zpyproj not installedzshapely.get_sridc                 x   t        j                  d      }d|_        |}|j                  d      }t	        ||       d}t        j
                  |j                  j                  d      5  t        j                  t        d      5  t        ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Npyproji rh   ri   r   zcrs not foundr   zCould not find srid 99999)r1   r2   return_valuer   r
   r   
exceptionsCRSErrorr   r   r   )r   mock_get_sridr=   r   r/  r<   r   s          r   test_read_srid_not_in_tablez"TestIO.test_read_srid_not_in_table  s     $$X.%*" ..[.1sG$#]]6,,55_M 	'k1LM 'S#&'	' 	'' '	' 	's$   *B0B$B0$B-	)B00B9z(geopandas.io.sql._get_spatial_ref_sys_dfc                 $   t         j                  j                  |_        |}|j	                  d      }t        ||d       d}t        j                  t        d      5  t        ||      }d d d        j                  dk(  sJ y # 1 sw Y   xY w)	Nrh   ri   r  r   r   z1Could not find the spatial reference system tabler   z	EPSG:4326)r   errorsDatabaseErrorside_effectr   r
   r1   r   r   r   rj   )r   mock_get_spatial_ref_sys_dfr=   r   r<   r   r   s          r   -test_read_no_spatial_ref_sys_table_in_postgisz4TestIO.test_read_no_spatial_ref_sys_table_in_postgis.  s     35))2I2I#/ ..[.1sG$/#\\R
 	( c3'B	(
 vv$$$	( 	(s   BBc                     d}|}|j                  d      }t        ||d       d}t        j                  t	        |||            }t        |       |j                  dk(  sJ y	)
z)Test chunksize argument with non epsg crsrf   r*  ri   r+  r   r   r   r,  N)r   r
   r   r   r   r   rj   r   s          r    test_read_non_epsg_crs_chunksizez'TestIO.test_read_non_epsg_crs_chunksizeC  s`     	 ..\.2sG%0#YY|C	BCvv%%%r   N)1__name__
__module____qualname__r1   markparametrizePOSTGIS_DRIVERSr   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%  xfailcompatPANDAS_GE_202r(  r-  skipifr   r   patchr4  r:  r<  r*   r   r   r{   r{      s4   [[-N O [[1?TR
 S
 [[1?TR S [[1?TR S [[1?TR S [[1?TR
" S
" [[1?TR3 S3 [[1?TR3 S3
 [[1?TR S [[-N O [[-N O [[-N! O! [[-N O& [[-N O" [[-N
 O
4 [[-NJ OJ, [[-NT OT, [[-N@ O@, [[-N, O,, [[-N1 O1" [[-N, O,: [[-N O* [[-N$ O$L [[-N= O= [[-N8 O8  [[-N O" [[-NP OP  [[-NL OL [[-N[[   V  	7	 O
	7 [[1?TR& S& [[J/EFTZZ"#[[1?TR' S $ G'  TZZ:;[[1?TR% S <%& [[1?TR& S&r   r{   ).__doc__r'   r7   importlib.utilr   pandasr   rl   geopandas._compat_compatrD  r   r   r   r   geopandas.io.sqlr   r   r	   r   r1   geopandas.tests.utilr
   r   r   r   r?   r   ImportErrorr   fixturer   r  r   rB  dictr+   r=   rJ   rQ   r]   rm   rr   ru   ry   r{   r*   r   r   <module>rR     sa   
  $   " ; ; ( 2 <    

c 
 23d   $  :  :8     (     k	& k	&M   Ds   D DD