o
    �¨Êh¹6 ã                   @  sÄ  d dl mZ d dl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
 d dlm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mZ d d	lmZmZ d d
lmZ d dlm  mZ d dlZ d dlm!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z- d dl.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< er­d dl=Z=ej> ?d¡Z@ejAdd„ ƒZBdd„ ZC�dôdd„ZD�dôdd„ZE�dôdd„ZFdd„ ZG�dõd!d"„ZH�död%d&„ZI�död'd(„ZJ�d÷d)d*„ZKd+d,„ ZL�død/d0„ZM�dùd2d3„ZNejAd4d5„ ƒZOejAd6d#„ ƒZPejAd7d8„ ƒZQejAd9d:„ ƒZRejAd;d<„ ƒZSd=d>„ ZTd?d@„ ZU�dúdCdD„ZV�dûdFdG„ZWejAdHdI„ ƒZXejAdJdK„ ƒZYejAdLdM„ ƒZZejAdNdO„ ƒZ[ejAdPdQ„ ƒZ\ejAdRdS„ ƒZ]ejAdTdU„ ƒZ^ejAdVdW„ ƒZ_ejAdXdY„ ƒZ`ejAdZd[„ ƒZaejAd\d]„ ƒZbejAd^d_„ ƒZcejAd`da„ ƒZdejAdbdc„ ƒZeejAddde„ ƒZfejAdfdg„ ƒZgejAdhdi„ ƒZhejAdjdk„ ƒZiejAdldm„ ƒZjejAdndo„ ƒZkejAdpdq„ ƒZlejAdrds„ ƒZmejAdtdu„ ƒZnejAdvdw„ ƒZoejAdxdy„ ƒZpejAdzd{„ ƒZqejAd|d}„ ƒZrejAd~d„ ƒZsejAd€d�„ ƒZtejAd‚dƒ„ ƒZuejvdIej>jwd„�ejvdOej>jwd„�gZxejvdKej>jwd„�ejvdQej>jwd„�gZyejvdMej>jwd„�ejvdSej>jwd„�gZzejvdUej>jwd„�ejvd[ej>jwd„�gZ{ejvdWej>jwd„�ejvdcej>jwd„�gZ|ejvdYej>jwd„�ejvdeej>jwd„�gZ}g d…¢Z~g d†¢Zg d‡¢Z€exe{ e~ Z�eye| e Z‚eze} e€ Zƒdyejvd]ej>jwd„�gZ„ejvd_ej>jwd„�ejvd{ej>jwd„�gZ…ejvdaej>jwd„�ejvd}ej>jwd„�gZ†e�dg e„ Z‡e‚d�g e… Zˆeƒdƒg e† Z‰ej> ŠdAe‡¡dˆd‰„ ƒZ‹ej> ŠdAe‡¡dŠd‹„ ƒZŒej> ŠdAe‡¡dŒd�„ ƒZ�ej> ŠdAe‡¡dŽd�„ ƒZŽej> ŠdAe‡¡ej> Šd�dd‘g¡d’d“„ ƒƒZ�ej> ŠdAe‡¡ej> Šd”d•d–g¡d—d˜„ ƒƒZ�ej> ŠdAe‡¡d™dš„ ƒZ‘ej> ŠdAeˆ¡d›dœ„ ƒZ’ej> ŠdAeˆ¡d�dž„ ƒZ“ej> ŠdAe‚¡dŸd „ ƒZ”ej> ŠdAeˆ¡d¡d¢„ ƒZ•ej> ŠdAe‚¡d£d¤„ ƒZ–ej> ŠdAe‚¡d¥d¦„ ƒZ—ej> ŠdAe�¡d§d¨„ ƒZ˜ej> ŠdAe‰¡d©dª„ ƒZ™ej> ŠdAex¡d«d¬„ ƒZšej> ŠdAe{¡ej> Šd­d®d¯g¡d°d±„ ƒƒZ›ej> ŠdAe{¡d²d³„ ƒZœej> ŠdAe‡¡d´dµ„ ƒZ�ej> ŠdAex¡d¶d·„ ƒZžej> ŠdAe{¡d¸d¹„ ƒZŸdºd»„ Z d¼d½„ Z¡d¾d¿„ Z¢dÀdÁ„ Z£ej> ŠdAeˆ¡dÂdÃ„ ƒZ¤ej> ŠdAeˆ¡dÄdÅ„ ƒZ¥ej> ŠdAeˆ¡dÆdÇ„ ƒZ¦ej> ŠdAeˆ¡dÈdÉ„ ƒZ§ej> ŠdAeˆ¡dÊdË„ ƒZ¨ej> ŠdAe‡¡dÌdÍ„ ƒZ©ej> ŠdAe‡¡dÎdÏ„ ƒZªej> ŠdAe‡¡dÐdÑ„ ƒZ«ej> ŠdAe‡¡dÒdÓ„ ƒZ¬ej> ŠdAe‡¡dÔdÕ„ ƒZ­ej> ŠdAe‡¡dÖd×„ ƒZ®ej> ŠdAe‡¡dØdÙ„ ƒZ¯ej> ŠdAe‡¡dÚdÛ„ ƒZ°ej> ŠdAeˆ¡dÜdÝ„ ƒZ±ej> ŠdAe‰¡dÞdß„ ƒZ²ej> ŠdAe‰¡ej> Šdàg dá¢¡ej> Šdâe4j³dãdäfe4j³dådæfe4j;dãdäfe4j<dådæfg¡dçdè„ ƒƒƒZ´ej> ŠdAe‰¡dédê„ ƒZµej> ŠdAe‡¡dëdì„ ƒZ¶ej> ŠdAe‡¡dídî„ ƒZ·ej> ŠdAe‡¡ej> Šdïg dð¢¡dñdò„ ƒƒZ¸ej> ŠdAe‡¡dódô„ ƒZ¹ej> ŠdAe‡¡dõdö„ ƒZºej> ŠdAe‡¡ej> Šd÷de»e¼e»e¼døœg¡dùdú„ ƒƒZ½ej> ŠdAe‡¡dûdü„ ƒZ¾ej> ŠdAe‡¡dýdþ„ ƒZ¿ej> ŠdAe‡¡dÿ�d „ ƒZÀej> ŠdAe‡¡�d�d„ ƒZÁej> ŠdAe‡¡�d�d„ ƒZÂej> ŠdAe‡¡�d�d„ ƒZÃej> ŠdAe‡¡�d�d„ ƒZÄej> ŠdAe‡¡�d	�d
„ ƒZÅej> ŠdAe‡¡�d�d„ ƒZÆej> ŠdAe‡¡�d�d„ ƒZÇej> ŠdAe‡¡�d�d„ ƒZÈej> ŠdAe‡¡�d�d„ ƒZÉej> ŠdAeˆ¡�d�d„ ƒZÊ�d�d„ ZËej> ŠdAe‡¡�d�d„ ƒZÌej> ŠdAe�¡�d�d„ ƒZÍej> ŠdAe�¡ej> Š�d�d�d�d�d�d �d!�d"�d#�d$�d%�d&�d'�d(�d)e»e Îe»¡jÏ�d*k�r�d+n�d,fg¡�d-�d.„ ƒƒZÐej> ŠdAe�¡ej> Š�d/�d0�d1g¡�d2�d3„ ƒƒZÑej> ŠdAe‡¡�d4�d5„ ƒZÒe Ó�d6¡ej> ŠdAe‡¡�d7�d8„ ƒƒZÔej> ŠdAe‚¡�d9�d:„ ƒZÕej> ŠdAe‚¡�d;�d<„ ƒZÖej> ŠdAe‡¡�d=�d>„ ƒZ×�d?�d@„ ZØe Ódæ¡�dA�dB„ ƒZÙe Ódæ¡�dC�dD„ ƒZÚ�dE�dF„ ZÛ�dG�dH„ ZÜ�dI�dJ„ ZÝej> ŠdAe�¡�dK�dL„ ƒZÞej> ŠdAe�¡�dM�dN„ ƒZßej> ŠdAe‡¡�dO�dP„ ƒZàej> ŠdAeˆ¡�dQ�dR„ ƒZáej> ŠdAe‚¡�dS�dT„ ƒZâej> ŠdAe‚¡�dU�dV„ ƒZãej> ŠdAe‚¡�dW�dX„ ƒZäej> ŠdAeƒ¡�dY�dZ„ ƒZåej> ŠdAe�¡�d[�d\„ ƒZæej> ŠdAeƒ¡�d]�d^„ ƒZçej> ŠdAe{¡ej> Š�d_d�d`gg¡�da�db„ ƒƒZèej> ŠdAe{¡�dc�dd„ ƒZéej> ŠdAe{¡�de�df„ ƒZêej> ŠdAe�¡�dg�dh„ ƒZëej> ŠdAe�¡�di�dj„ ƒZìej> ŠdAe�¡�dk�dl„ ƒZíej> ŠdAeƒ¡�dm�dn„ ƒZîej> ŠdAe�¡�do�dp„ ƒZïej> ŠdAe�¡�dq�dr„ ƒZðej> ŠdAe�¡�ds�dt„ ƒZñej> ŠdAe�¡�du�dv„ ƒZòej> ŠdAe�¡�dw�dx„ ƒZóej> ŠdAe�¡�dy�dz„ ƒZôej> ŠdAe�¡�d{�d|„ ƒZõej> ŠdAe�¡�d}�d~„ ƒZöej> ŠdAe‡¡�d�d€„ ƒZ÷ej> ŠdAe‡¡�d��d‚„ ƒZøej> ŠdAe‡¡�dƒ�d„„ ƒZùej> ŠdAe�¡�d…�d†„ ƒZúej> ŠdAe�¡�d‡�dˆ„ ƒZûej> ŠdAe�¡�d‰�dŠ„ ƒZüej> ŠdAe�¡�d‹�dŒ„ ƒZýej> ŠdAe�¡�d��dŽ„ ƒZþej> ŠdAe�¡ej> Š�d��d�ejÿgi�d�ejÿ giejÿ g�d‘g�d’œg¡�d“�d”„ ƒƒ�Z ej> ŠdAe�¡�d•�d–„ ƒ�Zej> ŠdAe‡¡�d—�d˜„ ƒ�Zej> ŠdAe‡¡�d™�dš„ ƒ�Zej> ŠdAe�¡�d›�dœ„ ƒ�Zej> ŠdAe‡¡�d��dž„ ƒ�Z�dŸ�d „ �Z�d¡�d¢„ �Zej> ŠdAe‡¡ej> Š�d£�d¤�d¥g¡�d¦�d§„ ƒƒ�Zej> ŠdAe‡¡ej> Š�d£�d¤�d¨g¡�d©�dª„ ƒƒ�Z	ej> ŠdAe‡¡ej> Š�d£g �d«¢¡�d¬�d­„ ƒƒ�Z
ejA�dü�d¯�d°„ƒ�ZejA�d±�d²„ ƒ�Zej> ŠdAe‡¡�d³�d´„ ƒ�Zej> ŠdAe‡¡ej> Š�dµe�j�d¶g¡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Ã�dÄ„ �ZejA�dÅ�dÆ„ ƒ�Z�dÇ�dÈ„ �Zej>jw�dÉ�dÊ„ ƒ�Zej>jw�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ý�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S (þ  é    )ÚannotationsN)Úclosing)ÚdateÚdatetimeÚtimeÚ	timedelta)ÚStringIO©ÚPath)ÚTYPE_CHECKING)Úlib)Úpa_version_under13p0Úpa_version_under14p1)Úimport_optional_dependency)
Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ	TimestampÚconcatÚ
date_rangeÚisnaÚto_datetimeÚto_timedelta)ÚArrowStringArrayÚStringArray)ÚVersion)Úsql)ÚSQLAlchemyEngineÚSQLDatabaseÚSQLiteDatabaseÚ
get_engineÚpandasSQL_builderÚread_sql_queryÚread_sql_tablez=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                   C  s$   ddddœddddœdd	d
dœdœS )Nz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z7SELECT * FROM iris WHERE `Name`=%s AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%s)ÚsqliteÚmysqlÚ
postgresqlz]
                SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
                zw
                SELECT * FROM iris WHERE
                `Name`=%(name)s AND `SepalLength`=%(length)s
                zw
                SELECT * FROM iris WHERE
                "Name"=%(name)s AND "SepalLength"=%(length)s
                z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%')Úread_parametersÚread_named_parametersÚread_no_parameters_with_percent© r+   r+   r+   úJ/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/test_sql.pyÚsql_stringsE   s   ýøýír-   c            
      C  s‚   dd l } ddl m}m}m}m}m}m} t| jƒtdƒkr|n|}|ƒ }|d||d|ƒ|d|ƒ|d|ƒ|d|ƒ|d	|d
ƒƒƒ}	|	S )Nr   )ÚColumnÚDoubleÚFloatÚMetaDataÚStringÚTablez2.0.0ÚirisÚSepalLengthÚ
SepalWidthÚPetalLengthÚ
PetalWidthÚNameéÈ   )	Ú
sqlalchemyr.   r/   r0   r1   r2   r3   r   Ú__version__)
r;   r.   r/   r0   r1   r2   r3   ÚdtypeÚmetadatar4   r+   r+   r,   Úiris_table_metadatab   s    	ù	r?   Ú	iris_filer
   c                 C  sŒ   d}|   ¡ }| |¡ |jd dd��"}t |¡}t|ƒ d}g }dd„ |D ƒ}| ||¡ W d   ƒ n1 s7w   Y  | ¡  |  ¡  d S )Nz³CREATE TABLE iris (
            "SepalLength" REAL,
            "SepalWidth" REAL,
            "PetalLength" REAL,
            "PetalWidth" REAL,
            "Name" TEXT
        )úutf-8©ÚnewlineÚencodingz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)c                 S  ó>   g | ]}t |d  ƒt |d ƒt |d ƒt |d ƒ|d f‘qS ©r   é   é   é   é   ©Úfloat©Ú.0Úrowr+   r+   r,   Ú
<listcomp>Œ   ó    
ú


ûÿz0create_and_load_iris_sqlite3.<locals>.<listcomp>)	ÚcursorÚexecuteÚopenÚcsvÚreaderÚnextÚexecutemanyÚcloseÚcommit©Úconnr@   ÚstmtÚcurÚcsvfilerV   Úrecordsr+   r+   r,   Úcreate_and_load_iris_sqlite3{   s   

øïra   c              	   C  s    d}|   ¡ �<}| |¡ |jd dd�� }t |¡}t|ƒ d}dd„ |D ƒ}| ||¡ W d   ƒ n1 s6w   Y  W d   ƒ n1 sEw   Y  |  ¡  d S )NzãCREATE TABLE iris (
            "SepalLength" DOUBLE PRECISION,
            "SepalWidth" DOUBLE PRECISION,
            "PetalLength" DOUBLE PRECISION,
            "PetalWidth" DOUBLE PRECISION,
            "Name" TEXT
        )rA   rB   z+INSERT INTO iris VALUES($1, $2, $3, $4, $5)c                 S  rE   rF   rK   rM   r+   r+   r,   rP   ¬   rQ   z3create_and_load_iris_postgresql.<locals>.<listcomp>)rR   rS   rT   rU   rV   rW   rX   rZ   r[   r+   r+   r,   Úcreate_and_load_iris_postgresql�   s   


øð€þrb   c           	   	     sÔ   ddl m} tƒ }|jd dd��P}t |¡}t|ƒ‰ ‡ fdd„|D ƒ}||ƒ |¡}|  ¡ �}|j	|dd� |j
|d	� | |¡ W d   ƒ n1 sKw   Y  W d   ƒ d S W d   ƒ d S 1 scw   Y  d S )
Nr   ©ÚinsertrA   rB   c                   ó   g | ]	}t tˆ |ƒƒ‘qS r+   ©ÚdictÚziprM   ©Úheaderr+   r,   rP   Ä   ó    z(create_and_load_iris.<locals>.<listcomp>T©Ú
checkfirst©Úbind)r;   rd   r?   rT   rU   rV   rW   ÚvaluesÚbeginÚdropÚcreaterS   )	r\   r@   rd   r4   r_   rV   Úparamsr]   Úconr+   ri   r,   Úcreate_and_load_iris¼   s   

ýû"ûrv   c                 C  sÌ   d}t | tjƒr|  ¡ }| |¡ d S tddd�}|r@t | |jƒr@|  ¡ �}| |¡ W d   ƒ n1 s5w   Y  |  ¡  d S ddlm} ||ƒ}|  	¡ �}| |¡ W d   ƒ d S 1 s_w   Y  d S )Nz+CREATE VIEW iris_view AS SELECT * FROM irisúadbc_driver_manager.dbapiÚignore©Úerrorsr   ©Útext)
Ú
isinstanceÚsqlite3Ú
ConnectionrR   rS   r   rZ   r;   r|   rq   )r\   r]   r^   Úadbcr|   ru   r+   r+   r,   Úcreate_and_load_iris_viewÌ   s   
ÿ
"ÿr�   ÚdialectÚstrc                 C  s¤   ddl m}m}m}m}m}m}m}m} | dkr|n|}	| dkr"|n|}
|ƒ }|d||d|ƒ|d|	ƒ|d|ƒ|d|ƒ|d	|ƒ|d
|ƒ|d|
ƒ|d|ƒ|d|
ƒƒ}|S )Nr   )ÚTEXTÚBooleanr.   ÚDateTimer0   ÚIntegerr1   r3   r%   ÚtypesÚTextColÚDateColÚ
IntDateColÚIntDateOnlyColÚFloatColÚIntColÚBoolColÚIntColWithNullÚBoolColWithNull)	r;   r„   r…   r.   r†   r0   r‡   r1   r3   )r‚   r„   r…   r.   r†   r0   r‡   r1   r3   Ú	date_typeÚ	bool_typer>   rˆ   r+   r+   r,   Útypes_table_metadataß   s$   (õr”   Ú
types_dataú
list[dict]c                 C  s€   d}d}t | tjƒr|  ¡ }| |¡ | ||¡ d S |  ¡ �}| |¡ | ||¡ W d   ƒ n1 s5w   Y  |  ¡  d S )Na”  CREATE TABLE types (
                    "TextCol" TEXT,
                    "DateCol" TEXT,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" REAL,
                    "IntCol" INTEGER,
                    "BoolCol" INTEGER,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" INTEGER
                )ze
                INSERT INTO types
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
                )r}   r~   r   rR   rS   rX   rZ   )r\   r•   r]   Úins_stmtr^   r+   r+   r,   Úcreate_and_load_types_sqlite3þ   s   


þr˜   c                 C  sR   |   ¡ �}d}| |¡ d}| ||¡ W d   ƒ n1 sw   Y  |  ¡  d S )NaÍ  CREATE TABLE types (
                        "TextCol" TEXT,
                        "DateCol" TIMESTAMP,
                        "IntDateCol" INTEGER,
                        "IntDateOnlyCol" INTEGER,
                        "FloatCol" DOUBLE PRECISION,
                        "IntCol" INTEGER,
                        "BoolCol" BOOLEAN,
                        "IntColWithNull" INTEGER,
                        "BoolColWithNull" BOOLEAN
                    )zy
                INSERT INTO types
                VALUES($1, $2::timestamp, $3, $4, $5, $6, $7, $8, $9)
                )rR   rS   rX   rZ   )r\   r•   r^   r]   r+   r+   r,   Ú create_and_load_types_postgresql  s   

ír™   c              	   C  s  ddl m} ddlm} t|ƒ}||ƒ |¡}t| |ƒra|  ¡ �7} |  ¡ � |j	| dd� |j
| d� |  |¡ W d   ƒ n1 sBw   Y  W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S |  ¡ � |j	| dd� |j
| d� |  |¡ W d   ƒ d S 1 sƒw   Y  d S )Nr   rc   ©ÚEngineTrl   rn   )r;   rd   Úsqlalchemy.enginer›   r”   rp   r}   Úconnectrq   rr   rs   rS   )r\   r•   r‚   rd   r›   rˆ   r]   r+   r+   r,   Úcreate_and_load_types5  s&   


ýÿ"ÿ
"ýrž   c              	   C  sT  ddl m}m}m}m}m} ddlm} |ƒ }|d||d|dd�ƒƒ}ddidd	ig}	||ƒ |	¡}
t	| |ƒrr|  
¡ �.} |  ¡ � |j| dd
� |j| d� |  |
¡ W d   ƒ n1 s]w   Y  W d   ƒ n1 slw   Y  n&|  ¡ � |j| dd
� |j| d� |  |
¡ W d   ƒ n1 s“w   Y  tddd�tddd�g}t|dd�S )Nr   )r.   r†   r1   r3   rd   rš   ÚdatetzÚDateColWithTzT)Útimezonez2000-01-01 00:00:00-08:00z2000-06-01 00:00:00-07:00rl   rn   z2000-01-01 08:00:00ÚUTC©Útzz2000-06-01 07:00:00©Úname)r;   r.   r†   r1   r3   rd   rœ   r›   rp   r}   r�   rq   rr   rs   rS   r   r   )r\   r.   r†   r1   r3   rd   r›   r>   rŸ   Údatetz_datar]   Úexpected_datar+   r+   r,   Úcreate_and_load_postgres_datetzI  s:   ÿÿü


ý€ÿ€
ý

þr©   Úframer   c                 C  sV   | j jd j}| jd }t|tjƒsJ ‚t |tg d¢| j	dd�¡ | j
dv s)J ‚d S )Nr   ©çffffff@g      @gffffffö?çš™™™™™É?úIris-setosa)Úindexr¦   ))é–   é   )é   r±   )ÚdtypesÚilocÚtypeÚ
issubclassÚnpÚfloatingÚtmÚassert_series_equalr   ÚcolumnsÚshape)rª   ÚpytyperO   r+   r+   r,   Úcheck_iris_framev  s   
ÿr¾   Ú
table_namec                 C  sd  d|› �}t ddd�}t| tjƒr|  ¡ }| |¡ ¡ d S |rGt| |jƒrG|  ¡ �}| |¡ | ¡ d W  d   ƒ S 1 s@w   Y  d S ddlm} ddl	m
} t| tƒr‰z+|| ƒ}| ¡ �} |  |¡ ¡ W  d   ƒ W | ¡  S 1 sxw   Y  W | ¡  d S | ¡  w t| |ƒr«|  ¡ �} |  |¡ ¡ W  d   ƒ S 1 s¤w   Y  d S |  |¡ ¡ S )Nz SELECT count(*) AS count_1 FROM rw   rx   ry   r   )Úcreate_enginerš   )r   r}   r~   r   rR   rS   Úfetchoner;   rÀ   rœ   r›   rƒ   r�   Úexec_driver_sqlÚ
scalar_oneÚdispose)r\   r¿   r]   r€   r^   rÀ   r›   Úenginer+   r+   r,   Ú
count_rows€  s4   



$þ

ÿ
ý

$ÿrÆ   c                 C  s   | ddddƒ}t |ƒS )NÚioÚdatarU   ziris.csvr	   )ÚdatapathÚ	iris_pathr+   r+   r,   rÊ   œ  s   rÊ   c                   C  s0   ddddddddddœ	dd	d
ddddd d dœ	gS )NÚfirstú2000-01-03 00:00:00i wði’·2g333333$@rG   F©	r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   ú2000-01-04 00:00:00i 'âPi\¸2r+   r+   r+   r+   r,   r•   ¢  s*   ÷÷ôc              
   C  s2   ddddddddddœ	}t | ƒ}|| ¡   |¡S )Nrƒ   Úint64rL   rÍ   )r   ÚkeysÚastype)r•   r³   Údfr+   r+   r,   Útypes_data_frame¾  s   ÷rÓ   c                  C  ó   g d¢} g d¢}t || d�S )N)r¯   ÚAÚBÚCÚD))rÌ   gNÿ\^ï?g9\›x`|@g%Ú TO×¿gá(nIŽò¿)rÎ   gî}ÒCÄð?çc×^ÜV¥¿g~q"B¶Ä¿gˆ”æÐ4Ë?)ú2000-01-05 00:00:00gGà Í¿èß?ç2rÂ¹eç?gˆŽ>Ý¦4á¿gÑ‘öÙRŠõ?)ú2000-01-06 00:00:00gÔ?{mXìñ?ç$ôó­ùù?gnk3¥AÓm?gØ
S«›å?©r»   ©r   ©r»   rÈ   r+   r+   r,   Útest_frame1Ï  s   rá   c                  C  rÔ   )N)r¯   rÕ   rÖ   ))rÌ   iÿÿÿgZØÓÍÿ¿)rÎ   iãÿÿÿrÙ   )rÚ   i N  rÛ   )rÜ   iÍ�ûÿrÝ   rÞ   rß   rà   r+   r+   r,   Útest_frame3ó  s   râ   c           
      C  sÈ   t | tjƒr|  d¡}dd„ | ¡ D ƒS tddd�}|rXt | |jƒrXg }|  ¡  ¡  ¡ }|D ]'}|d  |d D ]}|d	  |d
 D ]}|d dkrS|d }| 	|¡ qBq8q.|S ddl
m}	 |	| ƒ ¡ S )Nz0SELECT name FROM sqlite_master WHERE type='view'c                 S  ó   g | ]}|d  ‘qS ©r   r+   )rN   Úviewr+   r+   r,   rP     ó    z!get_all_views.<locals>.<listcomp>rw   rx   ry   Úcatalog_nameÚcatalog_db_schemasÚdb_schema_nameÚdb_schema_tablesÚ
table_typerå   r¿   r   ©Úinspect)r}   r~   r   rS   Úfetchallr   Úadbc_get_objectsÚread_allÚ	to_pylistÚappendr;   rí   Úget_view_names)
r\   Úcr€   ÚresultsÚinfoÚcatalogÚschemaÚtableÚ	view_namerí   r+   r+   r,   Úget_all_viewsÿ  s*   

€ýþrû   c           
      C  s¸   t | tjƒr|  d¡}dd„ | ¡ D ƒS tddd�}|rPt | |jƒrPg }|  ¡  ¡  ¡ }|D ]}|d D ]}|d D ]}|d	 d
krK|d }| 	|¡ q:q4q.|S ddl
m}	 |	| ƒ ¡ S )Nz1SELECT name FROM sqlite_master WHERE type='table'c                 S  rã   rä   r+   )rN   rù   r+   r+   r,   rP     ræ   z"get_all_tables.<locals>.<listcomp>rw   rx   ry   rè   rê   rë   rù   r¿   r   rì   )r}   r~   r   rS   rî   r   rï   rð   rñ   rò   r;   rí   Úget_table_names)
r\   rô   r€   rõ   rö   r÷   rø   rù   r¿   rí   r+   r+   r,   Úget_all_tables  s&   

€ýÿrý   r\   úLsqlite3.Connection | sqlalchemy.engine.Engine | sqlalchemy.engine.Connectionc              	   C  sü   t |tjƒr| dt | ¡› �¡ | ¡  d S tddd�}|rEt ||jƒrE| ¡ �}| d| › d�¡ W d   ƒ d S 1 s>w   Y  d S | 	¡ �+}t 
|¡�}| | ¡ W d   ƒ n1 s_w   Y  W d   ƒ d S W d   ƒ d S 1 sww   Y  d S )NzDROP TABLE IF EXISTS rw   rx   ry   zDROP TABLE IF EXISTS "ú")r}   r~   r   rS   r   Ú_get_valid_sqlite_namerZ   r   rR   rq   r   Ú
drop_table)r¿   r\   r€   r^   ru   Údbr+   r+   r,   r  0  s   
"ÿ
ÿÿ"ÿr  rú   c                 C  sê   dd l }t|tjƒr| dt | ¡› �¡ | ¡  d S tddd�}|rIt||jƒrI| 	¡ �}| d| › d�¡ W d   ƒ d S 1 sBw   Y  d S |j
jj | ¡}| d|› �¡}| ¡ �}| |¡ W d   ƒ d S 1 snw   Y  d S )Nr   zDROP VIEW IF EXISTS rw   rx   ry   zDROP VIEW IF EXISTS "rÿ   )r;   r}   r~   r   rS   r   r   rZ   r   rR   rÅ   r‚   Úidentifier_preparerÚquote_identifierr|   rq   )rú   r\   r;   r€   r^   Úquoted_viewr]   ru   r+   r+   r,   Ú	drop_viewC  s    
"ÿ
ÿ
"ÿr  c                  c  sv   � t  d¡} t  d¡}| jdd|jjji| jjd�}|V  t|ƒD ]}t	||ƒ q!t
|ƒD ]}t||ƒ q-| ¡  d S )Nr;   Úpymysqlz*mysql+pymysql://root@localhost:3306/pandasÚclient_flag)Úconnect_argsÚ	poolclass)ÚpytestÚimportorskiprÀ   Ú	constantsÚCLIENTÚMULTI_STATEMENTSÚpoolÚNullPoolrû   r  rý   r  rÄ   )r;   r  rÅ   rå   Útblr+   r+   r,   Úmysql_pymysql_engineZ  s   €

ýr  c                 c  ó   � t | |ƒ t| ƒ | V  d S ©N©rv   r�   )r  rÊ   r+   r+   r,   Úmysql_pymysql_engine_irisk  ó   €

r  c                 c  ó   � t | |dƒ | V  d S )Nr&   ©rž   )r  r•   r+   r+   r,   Úmysql_pymysql_engine_typesr  ó   €
r  c                 c  ó6   � |   ¡ �}|V  W d   ƒ d S 1 sw   Y  d S r  ©r�   )r  r\   r+   r+   r,   Úmysql_pymysql_connx  ó   €
"ÿr  c                 c  r  r  r  )r  r\   r+   r+   r,   Úmysql_pymysql_conn_iris~  r   r!  c                 c  r  r  r  )r  r\   r+   r+   r,   Úmysql_pymysql_conn_types„  r   r"  c                  c  sj   � t  d¡} t  d¡ | jd| jjd�}|V  t|ƒD ]}t||ƒ qt|ƒD ]}t||ƒ q'| 	¡  d S )Nr;   Úpsycopg2z=postgresql+psycopg2://postgres:postgres@localhost:5432/pandas©r
  ©
r  r  rÀ   r  r  rû   r  rý   r  rÄ   )r;   rÅ   rå   r  r+   r+   r,   Úpostgresql_psycopg2_engineŠ  s   €

þr&  c                 c  r  r  r  )r&  rÊ   r+   r+   r,   Úpostgresql_psycopg2_engine_irisš  r  r'  c                 c  r  )NÚpostgresr  )r&  r•   r+   r+   r,   Ú postgresql_psycopg2_engine_types¡  r  r)  c                 c  r  r  r  )r&  r\   r+   r+   r,   Úpostgresql_psycopg2_conn§  r   r*  c                  c  sŠ   � t  d¡ ddlm}  d}|  |¡�(}|V  t|ƒD ]}t||ƒ qt|ƒD ]}t||ƒ q'| 	¡  W d   ƒ d S 1 s>w   Y  d S )NÚadbc_driver_postgresqlr   ©Údbapiz4postgresql://postgres:postgres@localhost:5432/pandas)
r  r  r+  r-  r�   rû   r  rý   r  rZ   )r-  Úurir\   rå   r  r+   r+   r,   Úpostgresql_adbc_conn­  s   €

"úr/  c                 c  ó‚   � dd l }| }z| d¡ W n |jy!   | ¡  t||ƒ Y nw z| d¡ W n |jy;   | ¡  t|ƒ Y nw |V  d S ©Nr   r4   Ú	iris_view)Úadbc_driver_managerÚadbc_get_table_schemaÚProgrammingErrorÚrollbackrb   r�   )r/  rÊ   Úmgrr\   r+   r+   r,   Úpostgresql_adbc_iris¼  s    €þþ
r8  c                 c  s\   � dd l }| }z| d¡ W n |jy(   | ¡  dd„ |D ƒ}t||ƒ Y nw |V  d S )Nr   rˆ   c                 S  ó   g | ]}t | ¡ ƒ‘qS r+   ©Útuplerp   ©rN   Úentryr+   r+   r,   rP   Ù  ó    z)postgresql_adbc_types.<locals>.<listcomp>)r3  r4  r5  r6  r™   )r/  r•   r7  r\   Únew_datar+   r+   r,   Úpostgresql_adbc_typesÏ  s   €ü
r@  c                 c  r  r  r  )r'  r\   r+   r+   r,   Úpostgresql_psycopg2_conn_irisà  r   rA  c                 c  r  r  r  )r)  r\   r+   r+   r,   Úpostgresql_psycopg2_conn_typesæ  r   rB  c                  c  sF   � t  d¡ t ¡ �} d| › �V  W d   ƒ d S 1 sw   Y  d S )Nr;   ú
sqlite:///)r  r  r¹   Úensure_cleanr¥   r+   r+   r,   Ú
sqlite_strì  s
   €

"ÿrE  c                 c  s`   � t  d¡}|j| |jjd�}|V  t|ƒD ]}t||ƒ qt|ƒD ]}t||ƒ q"| 	¡  d S )Nr;   r$  r%  )rE  r;   rÅ   rå   r  r+   r+   r,   Úsqlite_engineó  s   €
rF  c                 c  r  r  r  )rF  r\   r+   r+   r,   Úsqlite_connÿ  r   rG  c                 C  s2   t  d¡}| | ¡}t||ƒ t|ƒ | ¡  | S )Nr;   )r  r  rÀ   rv   r�   rÄ   )rE  rÊ   r;   rÅ   r+   r+   r,   Úsqlite_str_iris  s   


rH  c                 c  r  r  r  )rF  rÊ   r+   r+   r,   Úsqlite_engine_iris  r  rI  c                 c  r  r  r  )rI  r\   r+   r+   r,   Úsqlite_conn_iris  r   rJ  c                 C  s,   t  d¡}| | ¡}t||dƒ | ¡  | S )Nr;   r%   )r  r  rÀ   rž   rÄ   )rE  r•   r;   rÅ   r+   r+   r,   Úsqlite_str_types  s
   

rK  c                 c  r  )Nr%   r  )rF  r•   r+   r+   r,   Úsqlite_engine_types%  r  rL  c                 c  r  r  r  )rL  r\   r+   r+   r,   Úsqlite_conn_types+  r   rM  c               	   c  sÈ   � t  d¡ ddlm}  t ¡ �J}d|› �}|  |¡�'}|V  t|ƒD ]}t||ƒ q#t	|ƒD ]}t
||ƒ q/| ¡  W d   ƒ n1 sEw   Y  W d   ƒ d S W d   ƒ d S 1 s]w   Y  d S )NÚadbc_driver_sqliter   r,  zfile:)r  r  rN  r-  r¹   rD  r�   rû   r  rý   r  rZ   )r-  r¦   r.  r\   rå   r  r+   r+   r,   Úsqlite_adbc_conn1  s    €



úþ"þrO  c                 c  r0  r1  )r3  r4  r5  r6  ra   r�   )rO  rÊ   r7  r\   r+   r+   r,   Úsqlite_adbc_irisA  s    €þþ
rP  c              	   c  s¢   � dd l }| }z| d¡ W n= |jyK   | ¡  g }|D ]!}t|d ƒ|d< |d d ur6t|d ƒ|d< | t| ¡ ƒ¡ qt||ƒ | 	¡  Y nw |V  d S )Nr   rˆ   r�   r‘   )
r3  r4  r5  r6  Úintrò   r;  rp   r˜   rZ   )rO  r•   r7  r\   r?  r=  r+   r+   r,   Úsqlite_adbc_typesS  s"   €
ö
rR  c               	   c  sr   � t  t d¡¡�&} | �}|V  W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s2w   Y  d S )Nú:memory:)Ú
contextlibr   r~   r�   ©Úclosing_connr\   r+   r+   r,   Úsqlite_buildini  s   €ÿÿ"ÿrW  c                 c  r  r  )ra   r�   )rW  rÊ   r+   r+   r,   Úsqlite_buildin_irisp  r  rX  c                 c  s$   � dd„ |D ƒ}t | |ƒ | V  d S )Nc                 S  r9  r+   r:  r<  r+   r+   r,   rP   y  r>  z(sqlite_buildin_types.<locals>.<listcomp>)r˜   )rW  r•   r+   r+   r,   Úsqlite_buildin_typesw  s   €

rY  )Úmarks)rF  rG  rE  )rI  rJ  rH  )rL  rM  rK  c                 C  s    |  | ¡} |jd| ddd� d S )NÚtestrò   F©r¦   ru   Ú	if_existsr¯   )ÚgetfixturevalueÚto_sql)r\   rá   Úrequestr+   r+   r,   Útest_dataframe_to_sqlÓ  s   
ra  c                 C  sN   | dkr|j  tjjddd�¡ | | ¡} |jd d… }|jd| ddd	� d S )
Nr/  z7postgres ADBC driver cannot insert index with null typeT©ÚreasonÚstrictr   r[  rò   Fr\  )ÚnodeÚ
add_markerr  ÚmarkÚxfailr^  r´   r_  )r\   rá   r`  Úempty_dfr+   r+   r,   Útest_dataframe_to_sql_emptyÚ  s   þÿ
rj  c              	   C  sþ   t  d¡ ttjdgdd�tjtdddƒgdd�tjtdddƒgdd�tjtdƒgdd�tjd	gd
d�dœƒ}d| v rR| dkrF|jdgd�}t	rMt
}d}n	d }d}nt}d}| | ¡} tj||dd�� |jd| ddd� W d   ƒ d S 1 sxw   Y  d S )NÚpyarrowrG   zint8[pyarrow]©r=   éç  útimestamp[ns][pyarrow]zdate32[day][pyarrow]zduration[ns][pyarrow]Úazstring[pyarrow])rQ  r   r   r   Ústringr€   rO  r   rÞ   zis_sparse is deprecatedÚ zthe 'timedelta'F)ÚmatchÚcheck_stacklevelÚ
test_arrowÚreplacer\  )r  r  r   ÚpdÚarrayr   r   r   rr   r   ÚDeprecationWarningÚUserWarningr^  r¹   Úassert_produces_warningr_  )r\   r`  rÒ   Úexp_warningÚmsgr+   r+   r,   Ú"test_dataframe_to_sql_arrow_dtypesé  s2   
ÿùÿ
"ÿr}  c                 C  sL   t  d¡ tdtjtdddƒ|gdd�iƒ}| | ¡} |jd| dd	d
� d S )Nrk  r   rm  rG   rn  rl  rt  ru  Fr\  )r  r  r   rv  rw  r   r^  r_  )r\   r`  Únulls_fixturerÒ   r+   r+   r,   Ú*test_dataframe_to_sql_arrow_dtypes_missing  s   
ÿÿÿ
r  ÚmethodÚmultic                 C  s–   |dkrd| v r|j  tjjddd�¡ | | ¡} t| dd��}|j|d|d� | d¡s/J ‚W d   ƒ n1 s9w   Y  t	| dƒt
|ƒksIJ ‚d S )	Nr�  r€   z)'method' not implemented for ADBC driversTrb  ©Úneed_transactionÚ
test_frame©r€  )re  rf  r  rg  rh  r^  r"   r_  Ú	has_tablerÆ   Úlen)r\   r€  rá   r`  Ú	pandasSQLr+   r+   r,   Útest_to_sql  s   ÿÿ
þr‰  zmode, num_row_coef)ru  rG   )rò   rH   c                 C  s‚   |  | ¡} t| dd��}|j|ddd� |j|d|d� | d¡s#J ‚W d   ƒ n1 s-w   Y  t| dƒ|t|ƒ ks?J ‚d S )NTr‚  r„  Úfail©r]  ©r^  r"   r_  r†  rÆ   r‡  )r\   ÚmodeÚnum_row_coefrá   r`  rˆ  r+   r+   r,   Útest_to_sql_exist+  s   
ýr�  c              	   C  s¬   |  | ¡} t| dd��A}|j|ddd� | d¡sJ ‚d}tjt|d�� |j|ddd� W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S )NTr‚  r„  rŠ  r‹  z!Table 'test_frame' already exists©rr  )r^  r"   r_  r†  r  ÚraisesÚ
ValueError)r\   rá   r`  rˆ  r|  r+   r+   r,   Útest_to_sql_exist_fail6  s   
ÿû"ûr“  c                 C  s\   |  | ¡} td| ƒ}t|ƒ t d| ¡}t|ƒ t d| ¡}|jdks%J ‚d|jv s,J ‚d S )NúSELECT * FROM irisúSELECT * FROM iris where 0=1©r   r±   r6   )r^  r#   r¾   rv  Úread_sqlr¼   r»   ©r\   r`  Ú
iris_framer+   r+   r,   Útest_read_iris_queryB  s   

rš  c                 C  s”   d| v r|j  tjjddd�¡ | | ¡} ttd| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}|jd	ksAJ ‚d
|jv sHJ ‚d S )Nr€   ú,'chunksize' not implemented for ADBC driversTrb  r”  é   ©Ú	chunksizer•  r–  r6   )re  rf  r  rg  rh  r^  r   r#   r¾   rv  r—  r¼   r»   r˜  r+   r+   r,   Útest_read_iris_query_chunksizeN  s   þÿ
rŸ  c           
      C  s¦   d| v r|j  tjjddd�¡ | | ¡} ddlm}m}m	}m
} |ƒ }t| tƒr-|| ƒn| }|d||d�}t||ƒ| d	d
dœd�}	t|	ƒ t| tƒrQ| ¡  d S d S )Nr€   r›  Trb  r   )r1   r3   rÀ   Úselectr4   )Úautoload_withr®   r¬   ©r¦   Úlength©rt   )re  rf  r  rg  rh  r^  r;   r1   r3   rÀ   r   r}   rƒ   r#   r¾   rÄ   )
r\   r`  r1   r3   rÀ   r   r>   Úautoload_conr4   r™  r+   r+   r,   Ú.test_read_iris_query_expression_with_parametera  s&   þÿ
ÿ
ÿr¦  c                 C  sv   d| v r|j  tjjddd�¡ |d  ¡ D ]
\}}|| v r  n	qtd| › d�ƒ‚| | ¡} t|| dd	�}t	|ƒ d S )
Nr€   r›  Trb  r(   zNo part of z( found in sql_strings['read_parameters']©r®   r¬   r¤  )
re  rf  r  rg  rh  ÚitemsÚKeyErrorr^  r#   r¾   )r\   r`  r-   r  Úqueryr™  r+   r+   r,   Ú*test_read_iris_query_string_with_parameter}  s   þÿÿ
r«  c                 C  s4   |  | ¡} td| ƒ}t|ƒ t d| ¡}t|ƒ d S )Nr4   )r^  r$   r¾   rv  r—  r˜  r+   r+   r,   Útest_read_iris_table‘  s
   

r¬  c                 C  sb   d| v r|j  tjjdd�¡ | | ¡} ttd| dd�ƒ}t|ƒ tt	j
d| dd�ƒ}t|ƒ d S )Nr€   ú+chunksize argument NotImplemented with ADBC©rc  r4   rœ  r�  )re  rf  r  rg  rh  r^  r   r$   r¾   rv  r—  r˜  r+   r+   r,   Útest_read_iris_table_chunksize›  s   ÿ
r¯  c                   sŒ   |  | ¡} g ‰ ‡ fdd„}t| dd��}|j|d|d� | d¡s#J ‚W d   ƒ n1 s-w   Y  ˆ dgks9J ‚t| dƒt|ƒksDJ ‚d S )Nc                   s2   ˆ  d¡ ‡ fdd„|D ƒ}| | j ¡ |¡ d S )NrG   c                   re   r+   rf   rM   ©rÐ   r+   r,   rP   °  rk   z8test_to_sql_callable.<locals>.sample.<locals>.<listcomp>)rò   rS   rù   rd   )Úpd_tabler\   rÐ   Ú	data_iterrÈ   ©Úcheckr°  r,   Úsample®  s   
z$test_to_sql_callable.<locals>.sampleTr‚  r„  r…  rG   rŒ  )r\   rá   r`  rµ  rˆ  r+   r³  r,   Útest_to_sql_callable¨  s   
þr¶  c                 C  sè   | }|dkr|  tjjdd�¡ | | ¡} t d| ¡}t|jj	j
tjƒs&J ‚t|jj	j
tjƒs1J ‚d|v rAt|jj	j
tjƒs@J ‚nt|jj	j
tjƒsLJ ‚t|jj	j
tjƒsWJ ‚d|v rgt|jj	j
tƒseJ ‚d S t|jj	j
tjƒsrJ ‚d S )NrY  ú;sqlite_buildin connection does not implement read_sql_tabler®  rˆ   r'   )Úapplymarkerr  rg  rh  r^  r   r$   r¶   r�   r=   rµ   r·   r¸   rŽ   Úintegerr�   Úbool_r�   r‘   Úobject©r\   r`  Ú	conn_namerÒ   r+   r+   r,   Útest_default_type_conversionº  s$   ÿÿ
r¾  c           	   	   C  s   |  | ¡} ddlm} ddlm} tg d¢g d¢dœƒ}|jd| dd	� d
}||ƒ}t| |ƒr]|  ¡ �!}| 	¡ � | 
|¡ W d   ƒ n1 sHw   Y  W d   ƒ n1 sWw   Y  n|  	¡ � |  
|¡ W d   ƒ n1 sqw   Y  t d| ¡}t ||¡ t d| ¡}t ||¡ d S )Nr   r{   rš   ©rG   rH   rI   ©çš™™™™™¹?r­   ç333333Ó?©ro  Úbr„  F©r¦   ru   r¯   z}DROP PROCEDURE IF EXISTS get_testdb;

    CREATE PROCEDURE get_testdb ()

    BEGIN
        SELECT * FROM test_frame;
    ENDzCALL get_testdb();)r^  r;   r|   rœ   r›   r   r_  r}   r�   rq   rS   r   r#   r¹   Úassert_frame_equalr—  )	r\   r`  r|   r›   rÒ   ÚprocÚengine_connÚres1Úres2r+   r+   r,   Útest_read_procedureÚ  s,   



ÿ€ÿ€
ÿrË  Úexpected_countrH   zSuccess!c                   s‚   ‡ fdd„}|  | ¡} tddgddgddgd	œƒ}|jd
| d|d�}ˆ d u r-|d u s,J ‚n|ˆ ks3J ‚t d
| ¡}t ||¡ d S )Nc                   s¬   |j }| ¡ �E}tƒ }t |¡}| |¡ | d¡ d dd„ |D ƒ¡}| jr1| j› d| j	› �}	n| j	}	d|	› d|› d�}
|j
|
|d	� W d   ƒ ˆ S 1 sOw   Y  ˆ S )
Nr   z, c                 S  s   g | ]}d |› d �‘qS )rÿ   r+   )rN   Úkr+   r+   r,   rP     r>  zVtest_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<listcomp>Ú.zCOPY z (z) FROM STDIN WITH CSV)r   Úfile)Ú
connectionrR   r   rU   ÚwriterÚ	writerowsÚseekÚjoinrø   r¦   Úcopy_expert)rù   r\   rÐ   r²  Ú
dbapi_connr^   Ús_bufrÑ  r»   r¿   Ú	sql_query©rÌ  r+   r,   Úpsql_insert_copy  s    




óòzBtest_copy_from_callable_insertion_method.<locals>.psql_insert_copyrG   rH   rÁ  r­   ro  Ún©Úcol1Úcol2Úcol3r„  F)r¦   ru   r¯   r€  ©r^  r   r_  r   r$   r¹   rÆ  )r\   rÌ  r`  rÚ  ÚexpectedÚresult_countÚresultr+   rÙ  r,   Ú(test_copy_from_callable_insertion_methodÿ  s   
ÿrä  c              	     sŽ  |  | ¡} ddlm‰  ddlm} ddlm} ‡ fdd„}|dƒ}t| |ƒrT|  ¡ �!}| 	¡ � | 
|¡ W d   ƒ n1 s?w   Y  W d   ƒ n1 sNw   Y  n|  	¡ � |  
|¡ W d   ƒ n1 shw   Y  tg d¢gtd	ƒd
�}|jd| ddd� tg d¢gtd	ƒd
�}|jd| dd|d�}	t d| ¡}
t |
|¡ |	dks¨J ‚tj| dd��}| d¡ W d   ƒ d S 1 sÀw   Y  d S )Nr   rc   rš   r{   c                   s<   ‡ fdd„|D ƒ}ˆ| j ƒ |¡jdgd�}| |¡}|jS )Nc                   re   r+   rf   rM   r°  r+   r,   rP   0  rk   z\test_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflict.<locals>.<listcomp>ro  )Úindex_elements)rù   rp   Úon_conflict_do_nothingrS   Úrowcount©rù   r\   rÐ   r²  rÈ   r]   rã  rc   r°  r,   Úinsert_on_conflict/  s   þÿ
zHtest_insertion_method_on_conflict_do_nothing.<locals>.insert_on_conflictzx
    CREATE TABLE test_insert_conflict (
        a  integer PRIMARY KEY,
        b  numeric,
        c  text
    );
    ©rG   çÍÌÌÌÌÌ @ro  ÚabcrÞ   Útest_insert_conflictrò   Fr\  ©rG   gš™™™™™	@rÄ  ©r¦   ru   r¯   r]  r€  Tr‚  )r^  Úsqlalchemy.dialects.postgresqlrd   rœ   r›   Úsqlalchemy.sqlr|   r}   r�   rq   rS   r   Úlistr_  r   r$   r¹   rÆ  r   r  )r\   r`  r›   r|   ré  Ú
create_sqlru   rá  Ú	df_insertÚinsertedrã  rˆ  r+   rc   r,   Ú,test_insertion_method_on_conflict_do_nothing&  sJ   

ÿ
	

ÿ€ÿ€
ÿÿû"ÿrö  c                 C  s~   d| v sd| v r|  tjjdd�¡ | | ¡} tg d¢g d¢gtdƒd�}|jd	| d
ddd� tj	d	| dd�}t
 ||¡ d S )Nr%   r&   z2test for public schema only specific to postgresqlr®  rê  )rH   gÍÌÌÌÌÌ@rÄ  rì  rÞ   Útest_public_schemarò   FÚpublic)r¦   ru   r]  r¯   rø   ©rø   )r¸  r  rg  rh  r^  r   rò  r_  r   r$   r¹   rÆ  )r\   r`  Ú	test_dataÚdf_outr+   r+   r,   Útest_to_sql_on_public_schema`  s"   ÿÿ
ûrü  c              	     sŽ  |  | ¡} ddlm‰  ddlm} ddlm} ‡ fdd„}|dƒ}t| |ƒrT|  ¡ �!}| 	¡ � | 
|¡ W d   ƒ n1 s?w   Y  W d   ƒ n1 sNw   Y  n|  	¡ � |  
|¡ W d   ƒ n1 shw   Y  tg d¢gtd	ƒd
�}|jd| ddd� tg d¢gtd	ƒd
�}|jd| dd|d�}	t d| ¡}
t |
|¡ |	dks¨J ‚tj| dd��}| d¡ W d   ƒ d S 1 sÀw   Y  d S )Nr   rc   rš   r{   c                   sH   ‡ fdd„|D ƒ}ˆ| j ƒ |¡}|j|jj|jjd�}| |¡}|jS )Nc                   re   r+   rf   rM   r°  r+   r,   rP   ‚  rk   zXtest_insertion_method_on_conflict_update.<locals>.insert_on_conflict.<locals>.<listcomp>)rÄ  rô   )rù   rp   Úon_duplicate_key_updaterõ  rÄ  rô   rS   rç  rè  rc   r°  r,   ré  �  s
   
zDtest_insertion_method_on_conflict_update.<locals>.insert_on_conflictzv
    CREATE TABLE test_insert_conflict (
        a INT PRIMARY KEY,
        b FLOAT,
        c VARCHAR(10)
    );
    rê  rì  rÞ   rí  rò   Fr\  rî  rï  rH   Tr‚  )r^  Úsqlalchemy.dialects.mysqlrd   rœ   r›   rñ  r|   r}   r�   rq   rS   r   rò  r_  r   r$   r¹   rÆ  r   r  )r\   r`  r›   r|   ré  ró  ru   rÒ   rá  rõ  rã  rˆ  r+   rc   r,   Ú(test_insertion_method_on_conflict_updatex  sF   
ÿ
	

ÿ€ÿ€
ÿû"ÿrÿ  c           
   
   C  s&  |  | ¡} ddlm} ddlm} dt ¡ j› �}dt ¡ j› �}|d|› d|› d|› d	|› d
�	ƒ}t| |ƒre|  	¡ �!}| 
¡ � | |¡ W d   ƒ n1 sPw   Y  W d   ƒ n1 s_w   Y  n|  
¡ � |  |¡ W d   ƒ n1 syw   Y  t|| ƒ}tdgddœƒ}	t ||	¡ d S )Nr   rš   r{   Úgroup_Úgroup_view_z
    CREATE TABLE zF (
        group_id INTEGER,
        name TEXT
    );
    INSERT INTO z- VALUES
        (1, 'name');
    CREATE VIEW z
    AS
    SELECT * FROM z;
    rG   r¦   ©Úgroup_idr¦   )r^  rœ   r›   rñ  r|   ÚuuidÚuuid4Úhexr}   r�   rq   rS   r$   r   r¹   rÆ  )
r\   r`  r›   r|   r¿   rú   Úsql_stmtru   rã  rá  r+   r+   r,   Útest_read_view_postgres­  s<   
ÿûù	÷ÿ


ÿ€ÿ€
ÿ
r  c                 C  sV   d}d}d}|   |¡ |   |¡ |   |¡ t d| ¡}tdgddœƒ}t ||¡ d S )Nz<
CREATE TABLE groups (
   group_id INTEGER,
   name TEXT
);
z,
INSERT INTO groups VALUES
    (1, 'name');
z1
CREATE VIEW group_view
AS
SELECT * FROM groups;
zSELECT * FROM group_viewrG   r¦   r  )rS   rv  r—  r   r¹   rÆ  )rW  Úcreate_tableÚinsert_intoÚcreate_viewrã  rá  r+   r+   r,   Útest_read_view_sqliteÑ  s   


r  c              	   C  s~   t jtdd��. tjtdd�� t d| ¡ W d   ƒ n1 s w   Y  W d   ƒ d S W d   ƒ d S 1 s8w   Y  d S )Nz+pandas.io.sql.execute requires a connectionr�  úP`pandas.io.sql.execute` is deprecated and will be removed in the future version.úselect * from iris)r  r‘  Ú	TypeErrorr¹   rz  ÚFutureWarningr   rS   )rI  r+   r+   r,   Útest_execute_typeerrorê  s   þûÿ"ÿr  c                 C  s@   t jtdd�� t d| ¡ W d   ƒ d S 1 sw   Y  d S )Nr  r�  r  )r¹   rz  r  r   rS   )rJ  r+   r+   r,   Útest_execute_deprecatedô  s   þ"ûr  c                 C  s2   d| v rdS d| v rdS d| v rdS t d| › �ƒ‚)Nr'   r%   r&   zunsupported connection: )r’  )r½  r+   r+   r,   Úflavorþ  s   r  c              	   C  s¬   d| v r|j  tjjddd�¡ | }| | ¡} |d t|ƒ }d}t| ƒ�#}| ¡ � |j	||d�}W d   ƒ n1 s<w   Y  W d   ƒ n1 sKw   Y  t
|ƒ d S )Nr€   ú)'params' not implemented for ADBC driversTrb  r(   r§  r¤  ©re  rf  r  rg  rh  r^  r  r"   Úrun_transactionÚ
read_queryr¾   ©r\   r`  r-   r½  rª  rt   rˆ  r™  r+   r+   r,   Útest_read_sql_iris_parameter	  s$   þÿ


ÿ€ÿr  c              	   C  s²   d| v r|j  tjjddd�¡ | }| | ¡} |d t|ƒ }dddœ}t| ƒ�#}| ¡ � |j	||d	�}W d   ƒ n1 s?w   Y  W d   ƒ n1 sNw   Y  t
|ƒ d S )
Nr€   r  Trb  r)   r®   r¬   r¢  r¤  r  r  r+   r+   r,   Ú"test_read_sql_iris_named_parameter  s$   þÿ



ÿ€ÿr  c              	   C  s´   d| v sd| v rd| vr|  tjjdd�¡ | }| | ¡} |d t|ƒ }t| ƒ�#}| ¡ � |j|d d�}W d   ƒ n1 s@w   Y  W d   ƒ n1 sOw   Y  t	|ƒ d S )Nr&   r'   r€   zbroken testr®  r*   r¤  )
r¸  r  rg  rh  r^  r  r"   r  r  r¾   )r\   r`  r-   r½  rª  rˆ  r™  r+   r+   r,   Ú,test_read_sql_iris_no_parameter_with_percent0  s   


ÿ€ÿr  c                 C  s"   |  | ¡} t d| ¡}t|ƒ d S )NzSELECT * FROM iris_view)r^  r   r#   r¾   r˜  r+   r+   r,   Útest_api_read_sql_viewC  s   
r  c                 C  s\   d| v r|j  tjjdd�¡ | | ¡} d}tj|| dd�}t || ¡}t 	t
|ƒ|¡ d S )Nr€   r­  r®  z1SELECT * FROM iris_view WHERE "SepalLength" < 0.0r±   r�  )re  rf  r  rg  rh  r^  r   r#   r¹   rÆ  r   )r\   r`  rª  Ú
with_batchÚwithout_batchr+   r+   r,   Ú*test_api_read_sql_with_chunksize_no_resultJ  s   ÿ
r  c                 C  sp   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  t |d| ¡ t d| ¡s6J ‚d S )Nrá   Tr‚  )r^  r   r†  r   r  r_  )r\   r`  rá   rˆ  r+   r+   r,   Útest_api_to_sqlW  s   
ÿr   c                 C  sº   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tj|d| dd� t d| ¡s8J ‚d}tjt|d�� tj|d| dd� W d   ƒ d S 1 sVw   Y  d S )NÚtest_frame2Tr‚  rŠ  r‹  z"Table 'test_frame2' already existsr�  )	r^  r   r†  r   r  r_  r  r‘  r’  )r\   r`  rá   rˆ  r|  r+   r+   r,   Útest_api_to_sql_failb  s   
ÿ"ÿr"  c                 C  s¤   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tj|d| dd� tj|d| dd� t d| ¡sAJ ‚t|ƒ}t| dƒ}||ksPJ ‚d S )Nrâ   Tr‚  rŠ  r‹  ru  ©r^  r   r†  r   r  r_  r‡  rÆ   ©r\   r`  rá   rˆ  Únum_entriesÚnum_rowsr+   r+   r,   Útest_api_to_sql_replaceq  s   
ÿ
r'  c                 C  s¸   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tj|d| dd�dks4J ‚tj|d| dd�dksAJ ‚t d| ¡sIJ ‚dt|ƒ }t| dƒ}||ksZJ ‚d S )	NÚtest_frame4Tr‚  rŠ  r‹  rJ   rò   rH   r#  r$  r+   r+   r,   Útest_api_to_sql_appendƒ  s   
ÿ
r)  c                 C  s|   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tj|d| dd� t d| ¡}t ||¡ d S )NÚtest_frame5Tr‚  F©r¯   zSELECT * FROM test_frame5)	r^  r   r†  r   r  r_  r—  r¹   rÆ  )r\   r`  râ   rˆ  rã  r+   r+   r,   Útest_api_to_sql_type_mapping–  s   
ÿr,  c                 C  s–   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  ttjddd�dd�}tj|d| d	d
� t 	d| ¡}t
 | ¡ |¡ d S )NÚtest_seriesTr‚  r±   rÏ   rl  Úseriesr¥   Fr+  zSELECT * FROM test_series)r^  r   r†  r   r  r   r·   Úaranger_  r#   r¹   rÆ  Úto_frame)r\   r`  rˆ  ÚsÚs2r+   r+   r,   Útest_api_to_sql_series£  s   
ÿr3  c                 C  sÂ   | }|  | ¡} t d| ¡r)tj| dd��}| d¡ W d   ƒ n1 s$w   Y  tj|d| d� tjd| d�}d|v rD|jddid	�}|j|_|j	ddd
� |j 
t¡ d |j_t ||¡ d S )NÚtest_frame_roundtripTr‚  ©ru   ú"SELECT * FROM test_frame_roundtripr€   Ú__index_level_0__Úlevel_0rÞ   ©Úinplace)r^  r   r†  r   r  r_  r#   Úrenamer¯   Ú	set_indexrÑ   rQ  r¦   r¹   rÆ  ©r\   r`  rá   r½  rˆ  rã  r+   r+   r,   Útest_api_roundtrip°  s   
ÿr>  c                 C  sž   d| v r|j  tjjdd�¡ | | ¡} t d| ¡r6tj| dd��}| 	d¡ W d   ƒ n1 s1w   Y  tj
|d| ddd	� tjd
| d�}t ||¡ d S )Nr€   r­  r®  r4  Tr‚  FrH   )ru   r¯   rž  r6  r5  )re  rf  r  rg  rh  r^  r   r†  r   r  r_  r#   r¹   rÆ  )r\   r`  rá   rˆ  rã  r+   r+   r,   Útest_api_roundtrip_chunksizeÅ  s$   ÿ
ÿûr?  c                 C  sf   |  | ¡} t | ¡�}| d¡}| ¡ }| ¡  W d   ƒ n1 s"w   Y  t|ƒg d¢ks1J ‚d S ©Nr”  r«   )r^  r   r"   rS   rÁ   rY   rò  )r\   r`  Ú
pandas_sqlÚiris_resultsrO   r+   r+   r,   Útest_api_execute_sqlÛ  s   


ýrC  c              	   C  sø  | }|  | ¡} t d| ¡}d|v s d|v s t|jjjtjƒr J ‚tjd| dgd�}t|jjjtjƒs4J ‚|j 	¡ t
dddd	d	d	ƒt
ddd
d	d	d	ƒgksMJ ‚tjd| ddid�}t|jjjtjƒsbJ ‚|j 	¡ t
dddd	d	d	ƒt
ddd
d	d	d	ƒgks{J ‚tjd| dgd�}t|jjjtjƒs�J ‚|j 	¡ t
dddd	d	d	ƒt
dddd	d	d	ƒgks¨J ‚tjd| ddid�}t|jjjtjƒs½J ‚|j 	¡ t
dddd	d	d	ƒt
dddd	d	d	ƒgksÖJ ‚tjd| ddid�}t|jjjtjƒsëJ ‚|j 	¡ t
dƒt
dƒgksúJ ‚d S )NúSELECT * FROM typesr&   r(  rŠ   ©Úparse_datesiÐ  rG   rI   r   rJ   ú%Y-%m-%d %H:%M:%Sr‹   iÂ  é   é   iÝ  r1  rŒ   z%Y%m%dz
2010-10-10z
2010-12-12)r^  r   r#   r¶   rŠ   r=   rµ   r·   Ú
datetime64Útolistr   r‹   rŒ   r¼  r+   r+   r,   Útest_api_date_parsingæ  sZ   

þý
þ
þ
ÿ
þýþrL  Úerror)rx   ÚraiseÚcoercezread_sql, text, moderD  )r;   Úfallbackrˆ   r;   c           
      C  sÂ   | }|  | ¡} |dkr|dkr| tjjdd�¡ | ddi¡}||| dd|iid�}	d	|v rA|	d
  t¡|	d
< |	d  t¡|	d< |dkrY| ddddœ¡}tsY|d  d¡|d< t	 
|	|¡ d S )Nrˆ   rY  z failing combination of argumentsr®  rŠ   údatetime64[ns]rz   )ru   rF  r(  r�   r‘   r@  Úint32)r‹   rŒ   rŽ   zdatetime64[us])r^  r¸  r  rg  rh  rÑ   rQ  rL   r   r¹   rÆ  )
r\   r`  r—  r|   r�  rM  rÓ   r½  rá  rã  r+   r+   r,   Ú!test_api_custom_dateparsing_error  s4   
ÿÿýýÿrS  c                 C  sP   |  | ¡} tjd| dddgd�}t|jjjtjƒsJ ‚t|j	jjtjƒs&J ‚d S )NrD  rŠ   r‹   )Ú	index_colrF  )
r^  r   r#   r¶   r¯   r=   rµ   r·   rJ  r‹   ©r\   r`  rÒ   r+   r+   r,   Útest_api_date_and_indexU  s   
ürV  c           	      C  sP  | }|  | ¡} t d| ¡r)tj| dd��}| d¡ W d   ƒ n1 s$w   Y  ttddgdd�ƒ ¡ }|dkrD|j 	t
jjd	d
�¡ d|v rPtrMt}nd }nt}tj|dd�� |jd| d�}W d   ƒ n1 skw   Y  |dksvJ ‚t d| ¡}|dkr—ttjddddd�tjddddd�gdd�}n|d  d¡}t |d |¡ d S )NÚtest_timedeltaTr‚  z00:00:01z00:00:03Úfoor¥   rO  z.sqlite ADBC driver doesn't implement timedeltar®  r€   F)rs  ©r¦   ru   rH   zSELECT * FROM test_timedeltar/  r   i@B )ÚmonthsÚdaysÚmicrosecondsÚnanosecondsiÀÆ- rÏ   )r^  r   r†  r   r  r   r   r0  re  rf  r  rg  rh  r   rx  ry  r¹   rz  r_  r#   rv  Ú
DateOffsetrÑ   rº   )	r\   r`  r½  rˆ  rÒ   r{  râ  rã  rá  r+   r+   r,   Útest_api_timedeltad  s@   
ÿÿÿÿþûr_  c                 C  sz   | }|  | ¡} tdddgiƒ}d|v rd}nd}tjt|d�� |jd| d	�d u s+J ‚W d   ƒ d S 1 s6w   Y  d S )
Nro  y      ð?      ð?y               @r€   zdatatypes not supportedzComplex datatypes not supportedr�  Útest_complexr5  )r^  r   r  r‘  r’  r_  )r\   r`  r½  rÒ   r|  r+   r+   r,   Útest_api_complex_raises“  s   
"ÿra  zindex_name,index_label,expected))NNr¯   )NÚother_labelrb  )Ú
index_nameNrc  )rc  rb  rb  )r   NÚ0)Nr   rd  c           	      C  s¼   d| v r|j  tjjdd�¡ | | ¡} t d| ¡r6tj| dd��}| 	d¡ W d   ƒ n1 s1w   Y  t
dtdƒiƒ}||j_d	}tj|d| |d
� t || ¡}|jd |ks\J ‚d S )Nr€   ú-index_label argument NotImplemented with ADBCr®  Útest_index_labelTr‚  rÝ  rJ   úSELECT * FROM test_index_label)Úindex_labelr   )re  rf  r  rg  rh  r^  r   r†  r   r  r   Úranger¯   r¦   r_  r#   r»   )	r\   r`  rc  rh  rá  rˆ  Ú
temp_framerª  rª   r+   r+   r,   Útest_api_to_sql_index_label¡  s   ÿ
ÿrk  c           	      C  s:  | }d|v r|  tjjddd�¡ nd|v r!|j tjjdd�¡ | | ¡} t d| ¡rHtj	| d	d
��}| 
d¡ W d   ƒ n1 sCw   Y  d}tdtdƒit ddg¡d�}t |d| ¡}||ksfJ ‚t d| ¡}|jd dksuJ ‚|jd dks~J ‚tj|d| dddgd�}||ks�J ‚t d| ¡}|jd d…  ¡ ddgks¥J ‚ddg|j_tj|d| dd�}||ksºJ ‚t d| ¡}|jd d…  ¡ ddgksÏJ ‚tj|d| dddgd�}||ksáJ ‚t d| ¡}|jd d…  ¡ ddgksöJ ‚d}tjt|d�� tj|d| ddd� W d   ƒ d S 1 �sw   Y  d S )Nr&   z/MySQL can fail using TEXT without length as keyFrb  r€   re  r®  rf  Tr‚  rJ   rÝ  )ÚA0ÚA1)ÚB0ÚB1r+  rg  r   r8  rG   Úlevel_1ru  rÕ   rÖ   )r]  rh  rH   r‹  r×   rØ   zALength of 'index_label' should match number of levels, which is 2r�  )r¸  r  rg  rh  re  rf  r^  r   r†  r   r  r   ri  r   Úfrom_productr_  r#   r»   rK  r¯   Únamesr‘  r’  )	r\   r`  r½  rˆ  Úexpected_row_countrj  rã  rª   r|  r+   r+   r,   Ú&test_api_to_sql_index_label_multiindexÅ  sz   ÿÿÿ
ÿ
þûûû$ÿrt  c                 C  s    |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tjddgg d¢ddgd	�}|jd| d
� tjd| ddgd�}t	j
||dd� d S )NÚtest_multiindex_roundtripTr‚  ©rG   rë  Úline1©rH   ç      ø?Úline2©rÕ   rÖ   r×   rÕ   rÖ   ©r»   r¯   rY  z'SELECT * FROM test_multiindex_roundtrip©rT  ©Úcheck_index_type)r^  r   r†  r   r  r   Úfrom_recordsr_  r#   r¹   rÆ  )r\   r`  rˆ  rÒ   rã  r+   r+   r,   Útest_api_multiindex_roundtrip  s   
ÿý
ÿr�  r=   ©rÕ   rÖ   c           	      C  sÀ   | }|  | ¡} t d| ¡r)tj| dd��}| d¡ W d   ƒ n1 s$w   Y  tddgddggdd	gd
�}|jd| d�dksBJ ‚| |¡}d|v rNd}nd}tj|| |d�}t	 
||¡ d S )NÚtest_dtype_argumentTr‚  ç333333ó?g333333@çffffff@g333333@rÕ   rÖ   rÞ   rY  rH   r(  z(SELECT "A", "B" FROM test_dtype_argumentz$SELECT A, B FROM test_dtype_argument©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,   Útest_api_dtype_argument#  s   
ÿ
r‡  c                 C  s<   |  | ¡} tddgddggddgd�}tj|d| dd	� d S )
NrG   rH   rI   rJ   r   rÞ   Útest_frame_integer_col_namesru  r‹  )r^  r   r   r_  rU  r+   r+   r,   Útest_api_integer_col_namesC  s   
r‰  c                 C  sJ   d| v r|j  tjjddd�¡ | | ¡} tj|d| d�}d|v s#J ‚d S )Nr€   ú-'get_schema' not implemented for ADBC driversTrb  r[  r5  ÚCREATE©re  rf  r  rg  rh  r^  r   Ú
get_schema©r\   r`  rá   ró  r+   r+   r,   Útest_api_get_schemaJ  s   þÿ
r�  c                 C  sL   d| v r|j  tjjddd�¡ | | ¡} tj|d| dd�}d|v s$J ‚d S )	Nr€   rŠ  Trb  r[  Úpypi)ru   rø   zCREATE TABLE pypi.rŒ  rŽ  r+   r+   r,   Útest_api_get_schema_with_schemaX  s   þÿ
r‘  c                 C  s”   d| v r|j  tjjddd�¡ | }| | ¡} tddgddgd	œƒ}|d
kr)d}nddlm} |}t	j
|d| d|id�}d|v sBJ ‚d|v sHJ ‚d S )Nr€   rŠ  Trb  çš™™™™™ñ?r„  rë  çš™™™™™@rÃ  rW  ÚINTEGERr   )r‡   r[  rÄ  r†  r‹  )re  rf  r  rg  rh  r^  r   r;   r‡   r   r�  )r\   r`  r½  Úfloat_framer=   r‡   ró  r+   r+   r,   Útest_api_get_schema_dtypesg  s"   þÿ
r–  c                 C  s¬   d| v r|j  tjjddd�¡ | }| | ¡} tddgddgd	œƒ}tj|d
| dd�}d|v r2d}nd}||v s:J ‚tj|d
| ddgd�}d|v rLd}nd}||v sTJ ‚d S )Nr€   rŠ  Trb  r’  r„  rë  r“  )ÚCol1ÚCol2r[  r—  )ru   rÐ   r&   z'CONSTRAINT test_pk PRIMARY KEY (`Col1`)z'CONSTRAINT test_pk PRIMARY KEY ("Col1")rÕ   rÖ   z)CONSTRAINT test_pk PRIMARY KEY (`A`, `B`)z)CONSTRAINT test_pk PRIMARY KEY ("A", "B"))	re  rf  r  rg  rh  r^  r   r   r�  )r\   r`  rá   r½  rª   ró  Úconstraint_sentencer+   r+   r,   Útest_api_get_schema_keys  s(   þÿ
rš  c                 C  sº  d| v r|j  tjjdd�¡ | }| | ¡} t d| ¡r8tj| dd��}| 	d¡ W d   ƒ n1 s3w   Y  t
tj d¡ d¡td	ƒd
�}|jd| dd� t d| ¡}t
ƒ }d}g d¢}tjd| dd�D ]}	t||	gdd�}t|	ƒ|| kszJ ‚|d7 }qft ||¡ |dkr«tjtdd�� tjd| dd� W d   ƒ d S 1 s¤w   Y  d S t
ƒ }
d}g d¢}tjd| dd�D ]}	t|
|	gdd�}
t|	ƒ|| ksÐJ ‚|d7 }q¼t ||
¡ d S )Nr€   r­  r®  Útest_chunksizeTr‚  rH   )é   r±   ÚabcderÞ   FrÅ  zselect * from test_chunksizer   )r±   r±   r±   r±   rH   r±   r�  ©Úignore_indexrG   rW  rq  r�  )re  rf  r  rg  rh  r^  r   r†  r   r  r   r·   ÚrandomÚdefault_rngÚstandard_normalrò  r_  r#   r   r‡  r¹   rÆ  r‘  ÚNotImplementedErrorr$   )r\   r`  r½  rˆ  rÒ   rÉ  rÊ  ÚiÚsizesÚchunkÚres3r+   r+   r,   Útest_api_chunksize_readœ  sF   ÿ
ÿÿ
"ÿ
r¨  c                 C  sð   | dkr#t ddd�}|d ur#t|jƒtdƒk r#|j tjjddd�¡ | | ¡} t	 
d	| ¡rJt	j| dd
��}| d	¡ W d   ƒ n1 sEw   Y  tg d¢g d¢dœƒ}| ¡ }|d  d¡|d< |jd	| dd� t	 d| ¡}t ||¡ d S )Nr/  r+  rx   ry   z0.9.0z:categorical dtype not implemented for ADBC postgres driverTrb  Útest_categoricalr‚  r¿  )úJohn P. Doez	Jane Doverª  )Ú	person_idÚperson_namer¬  ÚcategoryFrÅ  zSELECT * FROM test_categorical)r   r   r<   re  rf  r  rg  rh  r^  r   r†  r   r  r   ÚcopyrÑ   r_  r#   r¹   rÆ  )r\   r`  r€   rˆ  rÒ   Údf2Úresr+   r+   r,   Útest_api_categoricalÍ  s0   þÿ
ÿþÿr±  c                 C  s~   |  | ¡} t d| ¡r'tj| dd��}| d¡ W d   ƒ n1 s"w   Y  tddgddggdd	gd
�}|jd| dd� d S )NÚtest_unicodeTr‚  rG   rH   rI   rJ   õ   Ã©rÄ  rÞ   FrÅ  )r^  r   r†  r   r  r   r_  )r\   r`  rˆ  rÒ   r+   r+   r,   Útest_api_unicode_column_nameî  s   
ÿr´  c                 C  sª   | }|  | ¡} t d| ¡r)tj| dd��}| d¡ W d   ƒ n1 s$w   Y  tg d¢dtjdgdœƒ}|jd| dd	� d
|v rEd}nd}t 	|| ¡}t
 ||¡ d S )Nzd1187b08-4943-4c8d-a7f6Tr‚  ©r   rG   rH   r­   r…  r‚  FrÅ  r(  z'SELECT * FROM "d1187b08-4943-4c8d-a7f6"z'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)r^  r   r†  r   r  r   r·   Únanr_  r#   r¹   rÆ  )r\   r`  r½  rˆ  rÒ   rª  r°  r+   r+   r,   Útest_api_escaped_table_nameú  s   
ÿr·  c                 C  sø   d| v r"t  d¡}t|jƒtdƒkr| dv s"|j t jjddd�¡ | | ¡} t	 
d| ¡rIt	j| dd	��}| d¡ W d   ƒ n1 sDw   Y  tg d
¢g d¢ddœƒ}|jd| dd� t d| ¡}tg d¢g d¢g d¢gg d¢d�}t ||¡ d S )Nr€   rk  z16.0)rO  r/  z!pyarrow->pandas throws ValueErrorTrb  Ú
test_tabler‚  r¿  rÀ  rG   ©ro  rÄ  rô   FrÅ  z)SELECT a, b, a +1 as a, c FROM test_table)rG   rÁ  rH   rG   )rH   r­   rI   rG   )rI   rÂ  rJ   rG   )ro  rÄ  ro  rô   rÞ   )r  r  r   r<   re  rf  rg  rh  r^  r   r†  r   r  r   r_  rv  r—  r¹   rÆ  )r\   r`  Úparˆ  rÒ   rã  rá  r+   r+   r,   Ú#test_api_read_sql_duplicate_columns	  s,   
ÿÿ
ÿþr»  c                 C  sf   | }|dkr|  tjjdd�¡ | | ¡} t |d| ¡ ddg}tjd| |d�}|j 	¡ |ks1J ‚d S )NrW  úNot Implementedr®  r„  rÕ   rÖ   rÞ   )
r¸  r  rg  rh  r^  r   r_  r$   r»   rK  )r\   r`  rá   r½  Úcolsrã  r+   r+   r,   Útest_read_table_columns-	  s   
r¾  c                 C  sÊ   | }|dkr|  tjjdd�¡ | | ¡} t |d| ¡ tjd| dd�}|jj	dgks-J ‚tjd| ddgd�}|jj	ddgksAJ ‚tjd| ddgd	d
gd�}|jj	ddgksXJ ‚|j
 ¡ d	d
gkscJ ‚d S )NrW  r¼  r®  r„  r¯   r}  rÕ   rÖ   r×   rØ   )rT  r»   )r¸  r  rg  rh  r^  r   r_  r$   r¯   rr  r»   rK  )r\   r`  rá   r½  rã  r+   r+   r,   Útest_read_table_index_col=	  s   
ÿr¿  c                 C  sr   | dkr|  tjjdd�¡ | | ¡} t d| ¡}t d| ¡}t 	||¡ t 
d| ¡}t d| ¡}t 	||¡ d S )NrX  r·  r®  r”  r4   )r¸  r  rg  rh  r^  r   r#   r—  r¹   rÆ  r$   )r\   r`  Úiris_frame1Úiris_frame2r+   r+   r,   Útest_read_sql_delegateT	  s   ÿÿ
rÂ  c              
   C  s  | }ddl m} ddlm} |dƒ|dƒg}|D ]N}t||ƒrM| ¡ �!}| ¡ � | |¡ W d   ƒ n1 s8w   Y  W d   ƒ n1 sGw   Y  q| ¡ � | |¡ W d   ƒ n1 saw   Y  qt 	d ¡� t
 d|¡ t
 d|¡ W d   ƒ d S 1 s„w   Y  d S )Nr   r{   rš   z,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);Úother_tablezSELECT * FROM other_table)r;   r|   rœ   r›   r}   r�   rq   rS   r¹   rz  r   r$   r#   )rG  r\   r|   r›   Ú
query_listrª  r+   r+   r,   Útest_not_reflect_all_tablesg	  s.   þ


ÿ€ÿ€
ÿ€"þrÅ  c              	   C  sÔ   | }|dks
d|v r|  tjjdd�¡ | | ¡} tjtdd��# t 	| ¡�}| 
dd¡ W d   ƒ n1 s7w   Y  W d   ƒ n1 sFw   Y  t d ¡� |jd	| d
� W d   ƒ d S 1 scw   Y  d S )NrW  r€   zDoes not raise warningr®  z¶The provided table name 'TABLE1' is not found exactly as such in the database after writing the table, possibly due to case sensitivity issues. Consider using lower case table names.r�  ÚTABLE1rq  ÚCaseSensitiverY  )r¸  r  rg  rh  r^  r¹   rz  ry  r   r   Úcheck_case_sensitiver_  )r\   r`  rá   r½  r  r+   r+   r,   Ú(test_warning_case_insensitive_table_name€	  s    
ýÿ€ø"ÿrÉ  c                 C  s†   |  | ¡} ddlm} tdtddgdd�iƒ}t | ¡�}tjd||d	�}t|j	j
d j|ƒs1J ‚W d   ƒ d S 1 s<w   Y  d S )
Nr   )Ú	TIMESTAMPr   ú2014-12-12 01:54ú2014-12-11 02:54T©ÚutcÚ	test_type©rª   )r^  r;   rÊ  r   r   r   r   ÚSQLTabler}   rù   rô   rµ   )r\   r`  rÊ  rÒ   r  rù   r+   r+   r,   Útest_sqlalchemy_type_mapping˜	  s   
ÿ"ýrÒ  zinteger, expected)Úint8ÚSMALLINT)ÚInt8rÔ  )Úuint8rÔ  )ÚUInt8rÔ  )Úint16rÔ  )ÚInt16rÔ  )Úuint16r”  )ÚUInt16r”  )rR  r”  )ÚInt32r”  )Úuint32ÚBIGINT)ÚUInt32rÞ  )rÏ   rÞ  )ÚInt64rÞ  rÏ   rÞ  r”  c                 C  sx   |  | ¡} tddgdg|d�}t | ¡�}tjd||d�}t|jjjj	ƒ}W d   ƒ n1 s/w   Y  ||ks:J ‚d S )Nr   rG   ro  ©r»   r=   rÏ  rÐ  )
r^  r   r   r   rÑ  rƒ   rù   rô   ro  rµ   )r\   r`  r¹  rá  rÒ   r  rù   rã  r+   r+   r,   Útest_sqlalchemy_integer_mapping§	  s   
ýrâ  r¹  Úuint64ÚUInt64c              	   C  sœ   |  | ¡} tddgdg|d�}t | ¡�0}tjtdd�� tjd||d� W d   ƒ n1 s/w   Y  W d   ƒ d S W d   ƒ d S 1 sGw   Y  d S )	Nr   rG   ro  rá  z1Unsigned 64 bit integer datatype is not supportedr�  rÏ  rÐ  )r^  r   r   r   r  r‘  r’  rÑ  )r\   r`  r¹  rÒ   r  r+   r+   r,   Ú(test_sqlalchemy_integer_overload_mappingÇ	  s   
ÿýÿ"ÿrå  c           
      C  sª   t  d¡ | | ¡} t ¡ �+}d| }d}|j||ddd� t ||¡}t ||¡}d}t 	||¡}	W d   ƒ n1 s<w   Y  t 
||¡ t 
||¡ t 
||	¡ d S )Nr;   rC  r4   ru  Fr\  r”  )r  r  r^  r¹   rD  r_  r   r—  r$   r#   rÆ  )
r\   r`  rá   r¦   Údb_urirù   r!  râ   rª  r(  r+   r+   r,   Útest_database_uri_stringÔ	  s   


ùrç  Úpg8000c                 C  sX   t  d¡ | | ¡} d}t jtdd�� t d|¡ W d   ƒ d S 1 s%w   Y  d S )Nr;   z)postgresql+pg8000://user:pass@host/dbnamerè  r�  zselect * from table)r  r  r^  r‘  ÚImportErrorr   r—  )r\   r`  ræ  r+   r+   r,   Ú(test_pg8000_sqlalchemy_passthrough_erroré	  s   

"ÿrê  c                 C  sf   | }|  | ¡} ddlm} d|v r|dƒ}n|dƒ}tj|| ddid�}t|d	 ƒ}|dhks1J ‚d S )
Nr   r{   r(  z%select * from iris where "Name"=:namez#select * from iris where name=:namer¦   zIris-versicolorr¤  r9   )r^  r;   r|   r   r—  Úset)r\   r`  r½  r|   Ú	name_textÚiris_dfÚ	all_namesr+   r+   r,   Útest_query_by_text_objõ	  s   

rï  c                 C  sl   |  | ¡} ddlm}m} tƒ }||ƒ |jj|dƒk¡}tj	|| ddid�}t
|d ƒ}|dhks4J ‚d S )Nr   )Ú	bindparamr   r¦   r®   r¤  r9   )r^  r;   rð  r   r?   Úwhererô   r9   r   r—  rë  )r\   r`  rð  r   r4   Úname_selectrí  rî  r+   r+   r,   Útest_query_by_select_obj
  s   
ró  c                 C  sl   | }|dkr|  tjjdd�¡ | | ¡} tg d¢g d¢dœƒ}|jd| dd	� t d| ¡}t	 
||¡ d S )
NrW  r¼  r®  rµ  ©rI   rJ   r±   )rÕ   z%_variationÚtest_column_percentageFrÅ  )r¸  r  rg  rh  r^  r   r_  r   r$   r¹   rÆ  )r\   r`  r½  rÒ   r°  r+   r+   r,   Útest_column_with_percentage
  s   
rö  c              	   C  sº   t  ¡ �I}tt |¡ƒ�}tj| d|dd�dksJ ‚W d   ƒ n1 s$w   Y  tt |¡ƒ�}t d|¡}W d   ƒ n1 sAw   Y  W d   ƒ n1 sPw   Y  t  | |¡ d S )NÚtest_frame3_legacyFr+  rJ   z!SELECT * FROM test_frame3_legacy;)	r¹   rD  r   r~   r�   r   r_  r#   rÆ  )râ   r¦   r\   rã  r+   r+   r,   Útest_sql_open_close%
  s   
ÿÿ€ürø  c                  C  sH   d} d}t jt|d�� t d| ¡ W d   ƒ d S 1 sw   Y  d S )Nzmysql://root@localhost/pandasz-Using URI string without sqlalchemy installedr�  r”  )r  r‘  ré  r   r—  )r\   r|  r+   r+   r,   Útest_con_string_import_error3
  s
   "ÿrù  c               	   C  sˆ   G dd„ dƒ} t  | dƒ¡�,}t t¡� t d|¡ W d   ƒ n1 s%w   Y  W d   ƒ d S W d   ƒ d S 1 s=w   Y  d S )Nc                   @  s&   e Zd Zd
dd„Zdd„ Zdd„ Zd	S )zhtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnectionÚreturnÚNonec                 _  s   t j|i |¤Ž| _d S r  )r~   r   r\   )ÚselfÚargsÚkwargsr+   r+   r,   Ú__init__>
  s   zqtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__init__c                 S  s   t | j|ƒS r  )Úgetattrr\   )rü  r¦   r+   r+   r,   Ú__getattr__A
  s   zttest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.__getattr__c                 S  s   | j  ¡  d S r  )r\   rY   )rü  r+   r+   r,   rY   D
  s   zntest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed.<locals>.MockSqliteConnection.closeN)rú  rû  )Ú__name__Ú
__module__Ú__qualname__rÿ  r  rY   r+   r+   r+   r,   ÚMockSqliteConnection=
  s    
r  rS  zSELECT 1)rT  r   r¹   rz  ry  r   r—  )r  r\   r+   r+   r,   ÚJtest_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed;
  s   
ÿÿ"ÿr  c                 C  sn   | }t  d|¡}t  d|¡}t ||¡ d}tjt j|d�� t  d|¡ W d   ƒ d S 1 s0w   Y  d S )Nr”  z9Execution failed on sql 'iris': near "iris": syntax errorr�  r4   )r   r#   r—  r¹   rÆ  r  r‘  ÚDatabaseError)rX  r\   rÀ  rÁ  r|  r+   r+   r,   Útest_sqlite_read_sql_delegateL
  s   "ÿr  c                 C  s   t  | d¡}d|v sJ ‚d S )Nr[  r‹  )r   r�  )rá   ró  r+   r+   r,   Útest_get_schema2W
  s   r	  c                 C  s|   | }t dtddgdd�iƒ}t |¡}tjd||d�}| ¡ }| d¡D ]}| ¡ d	  d
¡dkr;| ¡ d dks;J ‚q$d S )Nr   rË  rÌ  TrÍ  rÏ  rÐ  Ú
r   rÿ   rG   rÊ  )r   r   r   r    ÚSQLiteTableÚ
sql_schemaÚsplitÚstrip)rW  r\   rÒ   r  rù   rø   Úcolr+   r+   r,   Útest_sqlite_type_mapping]
  s   ÿ
€þr  c                 C  sÔ   | dkr	t  d¡ | | ¡} ddlm} tg d¢g d¢dœƒ}tj| dd	��}| |d
¡dks1J ‚W d   ƒ n1 s;w   Y  || ƒ}| 	d
¡sKJ ‚tj| dd	��}| 
d
¡ W d   ƒ d S 1 scw   Y  d S )NrE  ú#sqlite_str has no inspection systemr   rì   ©ç      ð?ç       @ç      @ç      @©r  r  r  r  ©ÚoneÚtwoTr‚  rj  rJ   )r  Úskipr^  r;   rí   r   r   r   r_  r†  r  ©r\   r`  rí   rj  rˆ  Úinspr+   r+   r,   Útest_create_tableo
  s   

ÿ"ÿr  c              	   C  s   | dkr	t  d¡ | | ¡} ddlm} tg d¢g d¢dœƒ}t | ¡�b}| ¡ � | 	|d¡d	ks4J ‚W d   ƒ n1 s>w   Y  || ƒ}| 
d¡sNJ ‚| ¡ � | d¡ W d   ƒ n1 sbw   Y  z| ¡  W n	 tyv   Y nw | 
d¡r~J ‚W d   ƒ d S 1 s‰w   Y  d S )
NrE  r  r   rì   r  r  r  rj  rJ   )r  r  r^  r;   rí   r   r   r   r  r_  r†  r  Úclear_cacheÚAttributeErrorr  r+   r+   r,   Útest_drop_table„
  s*   


ÿ
ÿÿ"ór!  c                 C  s¬   | dkr	t  d¡ | }| | ¡} t| ƒ}| ¡ � | |d¡dks#J ‚| d¡}W d   ƒ n1 s2w   Y  d|v rC|jddid	�}|jdd
d� d |j	_
t ||¡ d S )NrE  r  r4  rJ   r6  r€   r7  r8  rÞ   Tr9  )r  r  r^  r"   r  r_  r  r;  r<  r¯   r¦   r¹   rÆ  r=  r+   r+   r,   Útest_roundtripž
  s   


þr"  c              	   C  sŒ   |  | ¡} t| ƒ�)}| ¡ � | d¡}| ¡ }| ¡  W d   ƒ n1 s&w   Y  W d   ƒ n1 s5w   Y  t|ƒg d¢ksDJ ‚d S r@  )r^  r"   r  rS   rÁ   rY   rò  )r\   r`  rˆ  rB  rO   r+   r+   r,   Útest_execute_sql´
  s   




ý€ÿr#  c                 C  s$   |  | ¡} tjd| d�}t|ƒ d S )Nr4   r5  )r^  r   r$   r¾   r˜  r+   r+   r,   Útest_sqlalchemy_read_table¿
  s   
r$  c                 C  s8   |  | ¡} tjd| ddgd�}t |jtddgƒ¡ d S )Nr4   r5   )ru   r»   ÚSepalLength__1)r^  r   r$   r¹   Úassert_index_equalr»   r   r˜  r+   r+   r,   Ú"test_sqlalchemy_read_table_columnsÆ
  s
   

ÿr'  c                 C  sP   |  | ¡} d}tjt|d�� tjd| d� W d   ƒ d S 1 s!w   Y  d S )Nz!Table this_doesnt_exist not foundr�  Úthis_doesnt_existr5  )r^  r  r‘  r’  r   r$   )r\   r`  r|  r+   r+   r,   Útest_read_table_absent_raisesÏ
  s
   
"ÿr)  c                 C  sÂ   | }|dkrt  d¡ nd|v sd|v r| t jjdd�¡ | | ¡} t d| ¡}t|j	j
jtjƒs4J ‚t|jj
jtjƒs?J ‚t|jj
jtjƒsJJ ‚t|jj
jtjƒsUJ ‚t|jj
jtƒs_J ‚d S )NrE  ú.types tables not created in sqlite_str fixturer&   r%   z#boolean dtype not inferred properlyr®  rˆ   )r  r  r¸  rg  rh  r^  r   r$   r¶   r�   r=   rµ   r·   r¸   rŽ   r¹  r�   rº  r�   r‘   r»  r¼  r+   r+   r,   Ú'test_sqlalchemy_default_type_conversion×
  s   ÿ
r+  c                 C  sN   |  | ¡} tddgid�}|jd| dd�dksJ ‚t d| ¡}t ||¡ d S )NÚi64l            )rÈ   Útest_bigintFrÅ  rG   rà  ©r\   r`  rÒ   rã  r+   r+   r,   r-  î
  s
   
r-  c                 C  sd   | }|dkrt  d¡ nd|v r| t jjdd�¡ | | ¡} t d| ¡}t|j	j
jtjƒs0J ‚d S )NrE  r*  r%   z"sqlite does not read date properlyr®  rˆ   )r  r  r¸  rg  rh  r^  r   r$   r¶   rŠ   r=   rµ   r·   rJ  r¼  r+   r+   r,   Útest_default_date_loadù
  s   ÿ
r/  rF  r    c                 C  s6   |  | ¡} t| ƒ}td| |d�}|j}t ||¡ d S )Núselect * from datetzrE  )r^  r©   r#   r    r¹   rº   )r\   r`  rF  rá  rÒ   r  r+   r+   r,   Ú!test_datetime_with_timezone_query	  s
   
r1  c                 C  sB   |  | ¡} t| ƒ}tttd| dd�ƒdd�}|j}t ||¡ d S )Nr0  rG   r�  Trž  )r^  r©   r   rò  r#   r    r¹   rº   )r\   r`  rá  rÒ   r  r+   r+   r,   Ú+test_datetime_with_timezone_query_chunksize  s   
þr2  c                 C  s2   |  | ¡} t| ƒ}t d| ¡}t || ¡ ¡ d S )NrŸ   )r^  r©   r   r$   r¹   rÆ  r0  )r\   r`  rá  rã  r+   r+   r,   Ú!test_datetime_with_timezone_table%  s   
r3  c                 C  sÎ   | }|  | ¡} tdtdddd�iƒ}|jd| dd�dksJ ‚d	|v r-|d j d
¡|d< n
|d j d ¡|d< t d| ¡}t	 
||¡ t d| ¡}d|v r_t|jd tƒsWJ ‚t|d ƒ|d< t	 
||¡ d S )NrÕ   ú2013-01-01 09:00:00rI   ú
US/Pacific©Úperiodsr¤   Útest_datetime_tzFrÅ  r'   r¢   zSELECT * FROM test_datetime_tzr%   ©r   rÕ   )r^  r   r   r_  ÚdtÚ
tz_convertÚtz_localizer   r$   r¹   rÆ  r#   r}   Úlocrƒ   r   )r\   r`  r½  rá  rã  r+   r+   r,   Ú%test_datetime_with_timezone_roundtrip-  s    
ÿr>  c                 C  sj   |  | ¡} tdtdddƒidgd�}|jd| dd�dksJ ‚t d| ¡}ttjgdgd	�}t 	||¡ d S )
Nr   i'  rG   r   r+  Útest_datetime_obbFrÅ  rÞ   )
r^  r   r   r_  r   r$   rv  ÚNaTr¹   rÆ  )r\   r`  rÈ   rã  rá  r+   r+   r,   Útest_out_of_bounds_datetimeL  s   
rA  c                 C  sn   |  | ¡} tdddd� d ¡}tdtdƒi|d�}|jd| dd	�dks%J ‚tjd| dd
�}tj	||dd� d S )Nz
2018-01-01r±   Ú6h©r7  ÚfreqÚnumsr+  Ú	foo_tableÚ	info_date)r¦   ru   rh  r}  F)Úcheck_names)
r^  r   Ú
_with_freqr   ri  r_  r   r$   r¹   rÆ  )r\   r`  Údatesrá  rã  r+   r+   r,   Ú"test_naive_datetimeindex_roundtripW  s   
rK  c                 C  sD  | }|  | ¡} t d| ¡}d|v rtntj}t|jjj	|ƒs J ‚tjd| dgd�}t|jjj	tjƒs4J ‚tjd| ddid�}t|jjj	tjƒsIJ ‚tjd| dddiid�}t|jjj	tjƒs`J ‚tjd| dgd�}t|j
jj	tjƒstJ ‚tjd| ddid�}t|j
jj	tjƒs‰J ‚tjd| dd	diid�}t|j
jj	tjƒs J ‚d S )
Nrˆ   r%   rŠ   rE  rG  Úformatr‹   r1  Úunit)r^  r   r$   r»  r·   rJ  r¶   rŠ   r=   rµ   r‹   )r\   r`  r½  rÒ   Úexpected_typer+   r+   r,   Útest_date_parsingd  s*   

ýrO  c                 C  sÌ   | }|  | ¡} ttddd�t d¡dœƒ}|jd| d�dks J ‚t d| ¡}|jdd	d
�}t	 
||¡ t d| ¡}|jdd	d
�}d|v r^t|jd tƒsNJ ‚t|d ƒ|d< t	 
||¡ d S t	 
||¡ d S )Nr4  rI   ©r7  r  r‚  Útest_datetimerY  r¯   rG   )ÚaxisúSELECT * FROM test_datetimer%   r9  rÕ   )r^  r   r   r·   r/  r_  r   r$   rr   r¹   rÆ  r#   r}   r=  rƒ   r   ©r\   r`  r½  rÒ   rã  r+   r+   r,   rQ  „  s    
ÿrQ  c                 C  sÂ   | }|  | ¡} ttddd�t d¡dœƒ}tj|jd< |jd| dd	�dks'J ‚t 	d| ¡}t
 ||¡ t d
| ¡}d|v rYt|jd tƒsGJ ‚t|d dd�|d< t
 ||¡ d S t
 ||¡ d S )Nr4  rI   rP  r  r‚  ©rG   rÕ   rQ  FrÅ  rS  r%   r9  rÕ   rO  ry   )r^  r   r   r·   r/  r¶  r=  r_  r   r$   r¹   rÆ  r#   r}   rƒ   r   rT  r+   r+   r,   Útest_datetime_NaT�  s   
ÿrV  c                 C  sr   |  | ¡} ttdddƒtdddƒgdgd�}|jd| dd�dks"J ‚td| ƒ}|d }t|d ƒ}t ||¡ d S )	NéÞ  rG   rH   ro  rÞ   Ú	test_dateFrÅ  )r^  r   r   r_  r$   r   r¹   rº   )r\   r`  rÒ   r°  rã  rá  r+   r+   r,   Útest_datetime_dateµ  s   
"
rY  c                 C  s  | }|  | ¡} ttdddƒtdddƒgdgd�}|jd| dd	�d
ks$J ‚td| ƒ}t ||¡ |}tj|d|dd�d
ks>J ‚t d|¡}| 	dd„ ¡}t ||¡ tj|d| dd�d
ks^J ‚d|v rut d| ¡}| 	dd„ ¡}t ||¡ t d| ¡}t ||¡ d S )Né	   r   rG   é   ro  rÞ   Ú	test_timeFrÅ  rH   Ú
test_time2r+  zSELECT * FROM test_time2c                 S  ó
   |   d¡S ©Nz%H:%M:%S.%f©Ústrftime©Ú_r+   r+   r,   Ú<lambda>Ñ  ó   
 z$test_datetime_time.<locals>.<lambda>Ú
test_time3r%   zSELECT * FROM test_time3c                 S  r^  r_  r`  rb  r+   r+   r,   rd  ×  re  )
r^  r   r   r_  r$   r¹   rÆ  r   r#   Úmap)r\   r`  rW  r½  rÒ   r°  rG  Úrefr+   r+   r,   Útest_datetime_timeÂ  s$   
"
ri  c                 C  sn   |  | ¡} tdtjd�}tdtjd�}t||dœƒ}|jd| dd�dks&J ‚t d| ¡}t	j
||dd	d
� d S )Ni  rl  g        )Ús1r2  Útest_read_writeFrÅ  rG   T)Úcheck_dtypeÚcheck_exact)r^  r   r·   rR  Úfloat32r   r_  r   r$   r¹   rÆ  )r\   r`  rj  r2  rÒ   r¯  r+   r+   r,   Útest_mixed_dtype_insertÝ  s   
ro  c                 C  sp   |  | ¡} tg d¢dtjdgdœƒ}|jd| dd�dksJ ‚t d| ¡}t ||¡ t 	d	| ¡}t ||¡ d S )
Nrµ  r­   r…  r‚  Útest_nanFrÅ  rI   úSELECT * FROM test_nan)
r^  r   r·   r¶  r_  r   r$   r¹   rÆ  r#   r.  r+   r+   r,   Útest_nan_numericì  s   
rr  c                 C  sŽ   |  | ¡} tg d¢tjtjtjgdœƒ}|jd| dd�dks J ‚t d| ¡}t ||¡ |d  	d¡|d< d |d< t 
d	| ¡}t ||¡ d S )
Nrµ  r‚  rp  FrÅ  rI   rÖ   r»  rq  )r^  r   r·   r¶  r_  r   r$   r¹   rÆ  rÑ   r#   r.  r+   r+   r,   Útest_nan_fullcolumnü  s   
rs  c                 C  sz   |  | ¡} tg d¢ddtjgdœƒ}|jd| dd�dksJ ‚d |jd	< t d| ¡}t 	||¡ t 
d
| ¡}t 	||¡ d S )Nrµ  ro  rÄ  r‚  rp  FrÅ  rI   ©rH   rÖ   rq  )r^  r   r·   r¶  r_  r=  r   r$   r¹   rÆ  r#   r.  r+   r+   r,   Útest_nan_string  s   

ru  c              	   C  sB  d| v r|j  tjjddd�¡ | }| | ¡} tjddgg d¢dgd	�}d
}t| ƒ�&}| 	¡ � | 
||¡dks:J ‚W d   ƒ n1 sDw   Y  W d   ƒ n1 sSw   Y  |dv r�t d|› d�| ¡}g }|jD ]}t d|› d�| ¡}	| |	j ¡ ¡ qknddlm}
 |
| ƒ}| |¡}dd„ |D ƒ}|dggksŸJ ‚d S )Nr€   z)ADBC implementation does not create indexTrb  rv  rx  r{  rÕ   r|  Útest_to_sql_saves_indexrH   >   rE  rW  zASELECT * FROM sqlite_master WHERE type = 'index' AND tbl_name = 'ú'zPRAGMA index_info(ú)r   rì   c                 S  rã   )Úcolumn_namesr+   )rN   r¤  r+   r+   r,   rP   D  ræ   z*test_to_sql_save_index.<locals>.<listcomp>)re  rf  r  rg  rh  r^  r   r€  r"   r  r_  r   r#   r¦   rò   rK  r;   rí   Úget_indexes)r\   r`  r½  rÒ   Útbl_namerˆ  ÚixsÚix_colsÚix_nameÚix_inforí   r  r+   r+   r,   Útest_to_sql_save_index!  sF   ÿÿ
ÿ

ÿ€ÿÿý
þ
r€  c              	   C  s¦   | }|  | ¡} d}|dkrd|vrddlm} ||ƒ}t| ƒ�*}| ¡ �}| |¡ W d   ƒ n1 s4w   Y  W d   ƒ d S W d   ƒ d S 1 sLw   Y  d S )Nú'CREATE TABLE test_trans (A INT, B TEXT)rW  r€   r   r{   )r^  r;   r|   r"   r  rS   )r\   r`  r½  r]   r|   rˆ  Útransr+   r+   r,   Útest_transactionsI  s   


ÿÿ"ÿrƒ  c              	   C  s¨  | }|  | ¡} t| ƒ�¿}| ¡ �(}d}d|v st|tƒr"| |¡ nddlm} ||ƒ}| |¡ W d   ƒ n1 s;w   Y  G dd„ dtƒ}d}t|t	ƒrYddlm} ||ƒ}z| ¡ �
}| |¡ |dƒ‚1 skw   Y  W n	 |yz   Y nw | ¡ � | 
d	¡}	W d   ƒ n1 s�w   Y  t|	ƒdksœJ ‚| ¡ �}| |¡ | 
d	¡}
W d   ƒ n1 sµw   Y  t|
ƒd
ksÂJ ‚W d   ƒ d S 1 sÍw   Y  d S )Nr�  r€   r   r{   c                   @  s   e Zd ZdS )z1test_transaction_rollback.<locals>.DummyExceptionN)r  r  r  r+   r+   r+   r,   ÚDummyExceptionh  s    r„  z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')rM  zSELECT * FROM test_transrG   )r^  r"   r  r}   r    rS   r;   r|   Ú	Exceptionr   r  r‡  )r\   r`  r½  rˆ  r‚  r]   r|   r„  Úins_sqlr°  rÊ  r+   r+   r,   Útest_transaction_rollbackY  sF   



€ø



þþ
ÿ

þ"Ýr‡  c           
   	   C  sø   | dkr|  tjjdd�¡ | | ¡} ddlm} ddlm} d}t	j
||| d�}|jd d… }||ƒ}t| |ƒrg|  ¡ �!}| ¡ � | |¡ W d   ƒ n1 sRw   Y  W d   ƒ n1 saw   Y  n|  |¡ t	 || ¡}	tj|	|d	d
� d S )NrE  z(test does not support sqlite_str fixturer®  r   r{   rš   Útest_get_schema_create_tabler5  Fr~  )r¸  r  rg  rh  r^  r;   r|   rœ   r›   r   r�  r´   r}   r�   rq   rS   r$   r¹   rÆ  )
r\   r`  râ   r|   r›   r  ró  Úblank_test_dfÚnewconÚreturned_dfr+   r+   r,   rˆ  ƒ  s,   ÿ



ÿ€ÿ€
rˆ  c                 C  sÀ  | dkr	t  d¡ | | ¡} ddlm}m} ddlm} ddg}dd	g}t||d
�}|j	d| d�dks5J ‚|j	d| d|id�dksCJ ‚|ƒ }|j
| d� |jd jd j}	t|	|ƒs\J ‚d}
t jt|
d�� |j	d| dtid� W d   ƒ n1 szw   Y  |j	d| d|dƒid�dks�J ‚|j
| d� |jd jd j}	t|	|ƒs¥J ‚|	jdks¬J ‚|j	d| |d�dks¸J ‚|j
| d� |jd jd j}|jd jd j}t||ƒs×J ‚t||ƒsÞJ ‚d S )NrE  r  r   )r„   r2   ©r1   rÕ   rÖ   ©gš™™™™™é?T©gÍÌÌÌÌÌì?NrÞ   Ú
dtype_testrY  rH   Údtype_test2©r¦   ru   r=   rn   z&The type of B is not a SQLAlchemy typer�  rM  Údtype_test3é
   Úsingle_dtype_test)r  r  r^  r;   r„   r2   Úsqlalchemy.schemar1   r   r_  ÚreflectÚtablesr»   rµ   r}   r‘  r’  rƒ   r£  )r\   r`  r„   r2   r1   r½  rÈ   rÒ   ÚmetaÚsqltyper|  ÚsqltypeaÚsqltypebr+   r+   r,   Ú
test_dtype¡  s:   

ÿ rœ  c                 C  s.  | dkr	t  d¡ | }| | ¡} ddlm}m}m}m} ddlm	} t
dd gƒt
tddd	ƒd gƒt
d	d gd
d�t
dd gƒdœ}t|ƒ}	d}
|	j|
| d�dksPJ ‚t |
| ¡}|ƒ }|j| d� d|v re|n|}|j|
 j}t|d j|ƒswJ ‚t|d j|ƒs�J ‚t|d j|ƒs‹J ‚t|d j|ƒs•J ‚d S )NrE  r  r   )r…   r†   r0   r‡   rŒ  TéÜ  r±   rG   r»  rl  r’  ©ÚBoolÚDateÚIntr0   Únotna_dtype_testrY  rH   rn   r&   rŸ  r   r¡  r0   )r  r  r^  r;   r…   r†   r0   r‡   r•  r1   r   r   r   r_  r   r$   r–  r—  r»   r}   rµ   )r\   r`  r½  r…   r†   r0   r‡   r1   r½  rÒ   r  rc  r˜  Úmy_typeÚcol_dictr+   r+   r,   Útest_notna_dtypeË  s.   



ür¥  c              	   C  sz  | dkr	t  d¡ | | ¡} ddlm}m}m} ddlm} d}t	t
|gdd�t
|gd	d�t
|gd	d�t
d
gdd�t
d
gdd�dœƒ}|jd| ddd|dd�id�dksVJ ‚t d| ¡}t |d jd d¡t |d jd d¡kstJ ‚|ƒ }	|	j| d� |	jd j}
t|
d jƒt|
d jƒks“J ‚t|
d j|ƒs�J ‚t|
d j|ƒs§J ‚t|
d j|ƒs±J ‚t|
d j|ƒs»J ‚d S )NrE  r  r   )Ú
BigIntegerr0   r‡   rŒ  gñYÉBÊÀó?rn  rl  Úfloat64r±   rR  rÏ   )Úf32Úf64Ú
f64_as_f32Úi32r,  Útest_dtypesFru  rª  é   )Ú	precision)r¦   ru   r¯   r]  r=   rG   r©  é   rn   r¨  r«  r,  )r  r  r^  r;   r¦  r0   r‡   r•  r1   r   r   r_  r   r$   r·   Úroundr´   r–  r—  r»   rƒ   rµ   r}   )r\   r`  r¦  r0   r‡   r1   ÚVrÒ   r°  r˜  r¤  r+   r+   r,   Útest_double_precisionð  sB   

ûÿûù	0 r²  c                   sp   |  | ¡} ddlm‰  dd„ ‰dd„ ‰‡‡fdd„‰‡ ‡fd	d
„}tdg d¢iƒjd| d�dks2J ‚|| ƒ d S )Nr   rš   c                 S  s   d}t j|| d�S )Nz'SELECT test_foo_data FROM test_foo_datar5  )r   r#   )rÐ  rª  r+   r+   r,   Útest_select,  s   z3test_connectable_issue_example.<locals>.test_selectc                 S  s   |j d| dd� d S )NÚtest_foo_datarò   )r¦   ru   r]  )r_  )rÐ  rÈ   r+   r+   r,   Útest_append0  s   z3test_connectable_issue_example.<locals>.test_appendc                   s   ˆ| ƒ}ˆ | |ƒ d S r  r+   )r\   Úfoo_data)rµ  r³  r+   r,   Útest_connectable3  s   z8test_connectable_issue_example.<locals>.test_connectablec              	     s„   t | ˆ ƒr<|  ¡ �)}| ¡ � ˆ|ƒ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s5w   Y  d S ˆ| ƒ d S r  )r}   r�   rq   )Úconnectabler\   )r›   r·  r+   r,   Úmain9  s   



ÿÿ"ÿz,test_connectable_issue_example.<locals>.mainr´  rµ  rY  rI   )r^  rœ   r›   r   r_  )r\   r`  r¹  r+   )r›   rµ  r·  r³  r,   Útest_connectable_issue_example$  s   
	ÿrº  ÚinputrX  Úbar)rX  Úinfe0c           	      C  sØ   t |ƒ}| }| | ¡} d|v rRt d¡}t|jƒtdƒk r.d|jv r.tjjdd�}| 	|¡ d}tj
t|d�� |jd	| d
d� W d   ƒ d S 1 sKw   Y  d S |jd	| d
d�dks^J ‚t d	| ¡}t ||¡ d S )Nr&   r  z1.0.3r½  zGH 36465r®  zinf cannot be used with MySQLr�  ÚfoobarFrÅ  rG   )r   r^  r  r  r   r<   r»   rg  rh  r¸  r‘  r’  r_  r   r$   r¹   Úassert_equal)	r\   r`  r»  rÒ   r½  r  rg  r|  r°  r+   r+   r,   Útest_to_sql_with_negative_npinfH  s   


"ÿrÀ  c              	     s  | dkr	t  d¡ | | ¡} ddlm‰ m‰m‰m} ddlm	}m
} d}td|giƒ}|ƒ }G ‡ ‡‡fdd	„d	|ƒ}|| ƒ�<}	|	 ¡ �( |	 ¡ } |j | ¡ |	 ||d
�¡ |	 ¡  tj||jƒ| d�}
W d   ƒ n1 snw   Y  W d   ƒ n1 s}w   Y  t |
|¡ d S )NrE  z&test does not work with str connectionr   )r.   r‡   ÚUnicoder   )ÚSessionÚdeclarative_basezHello, World!Úspamc                      s6   e Zd ZdZddgiZ” ”dd�Z” ”dƒdd�Zd	S )
z'test_temporary_table.<locals>.TemporaryÚ	temp_testÚprefixesÚ	TEMPORARYT©Úprimary_keyr[  F)ÚnullableN)r  r  r  Ú__tablename__Ú__table_args__ÚidrÄ  r+   ©r.   r‡   rÁ  r+   r,   Ú	Temporary~  s
    
rÏ  )rÄ  )r   ru   )r  r  r^  r;   r.   r‡   rÁ  r   Úsqlalchemy.ormrÂ  rÃ  r   rq   rÐ  Ú	__table__rs   ÚaddÚflushr   r#   rÄ  r¹   rÆ  )r\   r`  r   rÂ  rÃ  rú  rá  ÚBaserÏ  ÚsessionrÒ   r+   rÎ  r,   Útest_temporary_tableh  s(   



û€ÿrÖ  c              	   C  s®   | dksd| v r|  tjjdd�¡ | | ¡} d}t| ƒ�0}tjt|d�� |j|ddd	� W d   ƒ n1 s8w   Y  W d   ƒ d S W d   ƒ d S 1 sPw   Y  d S )
NrW  r€   z9SQLiteDatabase/ADBCDatabase does not raise for bad enginer®  z*engine must be one of 'auto', 'sqlalchemy'r�  rá   Ú
bad_engine©rÅ   )	r¸  r  rg  rh  r^  r"   r‘  r’  r_  )r\   r`  rá   r|  rˆ  r+   r+   r,   Útest_invalid_engineŽ  s   ÿÿ

ÿÿ"ÿrÙ  c              	   C  s¢   |  | ¡} t| ƒ�/}| ¡ � |j|ddd�dksJ ‚| d¡s"J ‚W d  ƒ n1 s,w   Y  W d  ƒ n1 s;w   Y  t|ƒ}t| dƒ}||ksOJ ‚dS )z `to_sql` with the `engine` paramrá   ÚautorØ  rJ   N)r^  r"   r  r_  r†  r‡  rÆ   r$  r+   r+   r,   Útest_to_sql_with_sql_enginež  s   


þ€ÿ
rÛ  c              
   C  óÌ   |  | ¡} t dd¡�Q t| ƒ�-}| ¡ � | |d¡dks J ‚| d¡s'J ‚W d   ƒ n1 s1w   Y  W d   ƒ n1 s@w   Y  t|ƒ}t| dƒ}||ksTJ ‚W d   ƒ d S 1 s_w   Y  d S )Núio.sql.enginer;   rá   rJ   ©	r^  rv  Úoption_contextr"   r  r_  r†  r‡  rÆ   r$  r+   r+   r,   Útest_options_sqlalchemy­  ó   


þ€ÿ
"ørà  c              
   C  rÜ  )NrÝ  rÚ  rá   rJ   rÞ  r$  r+   r+   r,   Útest_options_auto¼  rá  râ  c                   C  sÂ   t  d¡ ttdƒtƒsJ ‚t dd¡� ttdƒtƒsJ ‚ttdƒtƒs'J ‚W d   ƒ n1 s1w   Y  t dd¡� ttdƒtƒsFJ ‚ttdƒtƒsOJ ‚W d   ƒ d S 1 sZw   Y  d S )Nr;   rÝ  rÚ  )r  r  r}   r!   r   rv  rß  r+   r+   r+   r,   Útest_options_get_engineË  s   
þ"þrã  c                   C  s   d S r  r+   r+   r+   r+   r,   Ú"test_get_engine_auto_error_messageØ  s   rä  Úfuncr—  r#   c                 C  s  | }|  | ¡} d}|}	|	j|| ddd� t d|¡� tt|ƒd|› �| |d�}
W d   ƒ n1 s2w   Y  ||||ƒ}t |
|¡ d|v rQ| tj	j
d	d
�¡ t d|¡�( tt|ƒd|› �| |dd�}||||ƒ}|D ]}
t |
|¡ qnW d   ƒ d S 1 s‚w   Y  d S )Nr[  Fru  ©r¦   ru   r¯   r]  úmode.string_storageúSelect * from ©Údtype_backendr€   z(adbc does not support chunksize argumentr®  rI   )ru   rê  rž  )r^  r_  rv  rß  r   r¹   rÆ  r¸  r  rg  rh  ©r\   r`  Ústring_storagerå  rê  Údtype_backend_dataÚdtype_backend_expectedr½  rù   rÒ   rã  rá  Úiteratorr+   r+   r,   Útest_read_sql_dtype_backendß  s8   
ÿÿÿüÿ"ørð  r$   c                 C  s  d| v rd| vr|  tjjdd�¡ | }| | ¡} d}|}	|	j|| ddd� t d	|¡� tt|ƒ|| |d
�}
W d   ƒ n1 sAw   Y  ||||ƒ}t	 
|
|¡ d|v rXd S t d	|¡�% tt|ƒ|| |dd�}||||ƒ}|D ]}
t	 
|
|¡ qrW d   ƒ d S 1 s†w   Y  d S )Nr%   r€   zhSQLite actually returns proper boolean values via read_sql_table, but before pytest refactor was skippedr®  r[  Fru  ræ  rç  ré  rI   )rê  rž  )r¸  r  rg  rh  r^  r_  rv  rß  r   r¹   rÆ  rë  r+   r+   r,   Ú!test_read_sql_dtype_backend_table
  s<   þÿ	
ÿüÿ"ørñ  )r—  r$   r#   c                 C  sp   |  | ¡} d}|}|j|| ddd� d}tjt|d�� tt|ƒ|| dd� W d   ƒ d S 1 s1w   Y  d S )	Nr[  Fru  ræ  zPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r�  Únumpyré  )r^  r_  r  r‘  r’  r   rv  )r\   r`  rå  rí  rù   rÒ   r|  r+   r+   r,   Ú)test_read_sql_invalid_dtype_backend_table:  s   
ÿ"ÿró  rú  c                
   C  sb   t tdtjdgdd�tg d¢dd�tdtjdgdd�tg d	¢dd�g d
¢g d¢g d¢g d¢dœƒS )NrG   rI   rà  rl  r¿  ry  ç      @ÚFloat64©ry  r  rô  )TFN©TFTr¹  ©ro  rÄ  N©ro  rÄ  rô   ÚdÚeÚfÚgÚh)r   r   r·   r¶  r+   r+   r+   r,   rí  J  s   øÿrí  c                  C  s   ddd„} | S )Nrú  r   c              
     s˜  | dkrt tjg d¢tjd�ƒ}t tjddtjgtjd�ƒ}n9|dkrAt d¡‰ddlm	‰  ˆ ˆ g d¢¡ƒ}ˆ ˆ g d	¢¡ƒ}nt d¡‰t
ˆ g d¢¡ƒ}t
ˆ g d	¢¡ƒ}ttd
tjdgdd�tg d¢dd�tdtjdgdd�tg d¢dd�tddtjgdd�tg d¢dd�||dœƒ‰|dkr¬t d¡‰ddlm	‰  t‡ ‡‡fdd„ˆjD ƒƒ‰d|v s´d|v rÊ|dkrÂˆ dddœ¡‰ˆS ˆ dddœ¡‰ˆS )NÚpythonr¹  rl  ro  rÄ  rk  r   )ÚArrowExtensionArrayrø  rG   rI   rà  r¿  ry  rô  rõ  rö  TFÚbooleanr÷  rù  c                   s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Úfrom_pandas)rw  )rN   r  ©r   rÒ   rº  r+   r,   Ú
<dictcomp>�  s    ÿÿz8dtype_backend_expected.<locals>.func.<locals>.<dictcomp>r&   r%   Únumpy_nullable)rû  rü  zint64[pyarrow])r   r·   rw  Úobject_rv  ÚNAr  r  Úpandas.arraysr   r   r   r   r¶  r»   rÑ   )Ústoragerê  r½  Ústring_arrayÚstring_array_nar+   r  r,   rå  \  sH   

øÿ
þÿþz$dtype_backend_expected.<locals>.func©rú  r   r+   )rå  r+   r+   r,   rî  Z  s   
3rî  c                 C  s†   d| v r|j  tjjdd�¡ | | ¡} dddœ}tddgd	� |¡}| ¡ }|j	d
| ddd� t
d| |dd�D ]}t ||¡ q8d S )Nr€   r­  r®  rÏ   r»  rÃ  ro  rÄ  rÞ   r[  Fru  ræ  zSELECT * FROM testrG   )r=   rž  )re  rf  r  rg  rh  r^  r   rÑ   r®  r_  r#   r¹   rÆ  )r\   r`  r³   rÒ   rá  rã  r+   r+   r,   Útest_chunksize_empty_dtypes’  s"   ÿ


üúr  rê  r  c                 C  s˜   |  | ¡} d}tg d¢ddœƒ}|j|| ddd� tt|ƒd|› �| d	tji|d
�}ttg d¢tjd�tg d¢|dks=dndd�dœƒ}t 	||¡ d S )Nr[  r¿  r±   rÃ  Fru  ræ  rè  ro  )r=   rê  rl  )r±   r±   r±   r  rÏ   rà  )
r^  r   r_  r   rv  r·   r§  r   r¹   rÆ  )r\   r`  rå  rê  rù   rÒ   rã  rá  r+   r+   r,   Útest_read_sql_dtype¨  s&   
üþþÿ	r  c                 C  sv   | }d}t ddddœddddœgƒ}| d|¡ tjt|d�� |jd|d dd	� W d   ƒ d S 1 s4w   Y  d S )
NzxStarting with pandas version 3.0 all arguments of to_sql except for the arguments 'name' and 'con' will be keyword-only.rG   rH   rI   r{  Úexampler�  ru  r‹  )r   r_  r¹   rz  r  )rF  r\   r|  rÒ   r+   r+   r,   Útest_keyword_deprecationÄ  s   ÿ"ÿr  c                 C  sl   | }t dddgidd�}|jd|dd�dksJ ‚t d ¡� t d|¡ W d   ƒ d S 1 s/w   Y  d S )	Nro  rG   rH   rÏ   rl  Útest_bigintwarningFrÅ  )r   r_  r¹   rz  r   r$   ©rF  r\   rÒ   r+   r+   r,   Útest_bigint_warningÒ  s   "ÿr  c                 C  s`   | }t ddgddgdœƒ}tjtdd�� |jd|d	d
d� W d   ƒ d S 1 s)w   Y  d S )NrG   rH   rI   rJ   ©rÝ  rÞ  zEmpty table name specifiedr�  rq  ru  Fr\  )r   r  r‘  r’  r_  r  r+   r+   r,   Útest_valueerror_exceptionÜ  s
   "ÿr  c           
        s  | }ddl m‰ m‰m‰ ddlm}m} |ƒ }G ‡ ‡‡fdd„d|ƒ}| ¡ � |j 	|¡ W d   ƒ n1 s8w   Y  ||d�}|ƒ �0}t
ddgdd	gd
œƒ}|jd|ddd�dks^J ‚| ¡  | |j|j¡}	t
|	ƒ}W d   ƒ n1 sxw   Y  t|jƒddgksˆJ ‚d S )Nr   ©r.   r‡   r2   )rÃ  Úsessionmakerc                      s(   e Zd ZdZ” ”dd�Z” ”dƒƒZdS )z,test_row_object_is_named_tuple.<locals>.Testr„  TrÈ  é2   N)r  r  r  rË  rÍ  Ústring_columnr+   r  r+   r,   ÚTestõ  s    r  rn   rG   ÚhelloÚworld)rÍ  r  r„  Fru  ræ  rH   rÍ  r  )r;   r.   r‡   r2   rÐ  rÃ  r  rq   r>   Ú
create_allr   r_  rZ   rª  rÍ  r  rò  r»   )
rF  r\   rÃ  r  Ú	BaseModelr  rÂ  rÕ  rÒ   Ú
test_queryr+   r  r,   Útest_row_object_is_named_tupleã  s&   
ÿ
ÿ
ø
r   c                 C  sž   | }t  d¡ d}tdddgiƒ}|j||ddd� t d	d
¡� t||ƒ}W d   ƒ n1 s0w   Y  d}tdddgi|tdg|d�d�}t 	||¡ d S )Nrk  r[  ro  ÚxÚyFru  )ru   r¯   r]  zfuture.infer_stringTzstring[pyarrow_numpy]rl  )r=   r»   )
r  r  r   r_  rv  rß  r$   r   r¹   rÆ  )rF  r\   rù   rÒ   rã  r=   rá  r+   r+   r,   Útest_read_sql_string_inference
  s   
ÿÿr#  c                 C  sT   | }t dtddddƒgidd�}|jd|dd	d
� t d|¡jd }|dks(J ‚d S ©NÚtiä  rH  é   rQ  rl  r[  ru  F)r]  r¯   úselect * from test©r   r   z2020-12-31 12:00:00.000000)r   r   r_  rv  r—  r´   )rF  r\   rÒ   rã  r+   r+   r,   Útest_roundtripping_datetimes  s
   r)  c               	   c  sx   � t  tjdtjd�¡�&} | �}|V  W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s5w   Y  d S )NrS  )Údetect_types)rT  r   r~   r�   ÚPARSE_DECLTYPESrU  r+   r+   r,   Úsqlite_builtin_detect_types&  s   €ÿÿý"ýr,  c                 C  sX   | }t dtddddƒgidd�}|jd|dd	d
� t d|¡jd }|tdƒks*J ‚d S r$  )r   r   r_  rv  r—  r´   r   )r,  r\   rÒ   rã  r+   r+   r,   Ú)test_roundtripping_datetimes_detect_types/  s
   r-  c           
   	   C  sV  | }t ddgddgddgdœƒ}| ¡ �&}| ¡ � | d¡ | d	¡ W d   ƒ n1 s.w   Y  W d   ƒ n1 s=w   Y  |jd
|dd�dksNJ ‚|jd|ddd�dks[J ‚|jd|ddd�dkshJ ‚t d
|¡}t ||¡ t d|¡}t ||¡ tjd|dd�}t ||¡ tjd|dd�}t ||¡ d}t	j
t|d�� tjd|dd� W d   ƒ n1 s¸w   Y  | ¡ �&}| ¡ � | d¡ | d	¡ W d   ƒ n1 sÛw   Y  W d   ƒ n1 sêw   Y  |jd|ddd�dksüJ ‚|jd|dddd� |jd|dddd�dk�sJ ‚tjd|dd�}	t t||gdd�|	¡ d S )NrG   rH   rÁ  r­   ro  rÛ  rÜ  z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;Útest_schema_publicFrÅ  Útest_schema_public_explicitrø  )r¦   ru   r¯   rø   Útest_schema_otherÚotherrù  z!Table test_schema_other not foundr�  )r¦   ru   rø   r¯   ru  )r¦   ru   rø   r¯   r]  rò   Trž  )r   r�   rq   rÂ   r_  r   r$   r¹   rÆ  r  r‘  r’  r   )
r&  r\   rÒ   ru   rÉ  rÊ  r§  Úres4r|  r°  r+   r+   r,   Útest_psycopg2_schema_support8  sr   


þ€ÿüú	ÿ


þ€ÿûû
ù	r3  c           	   	   C  sò   | }ddl m} |dƒ}| ¡ �!}| ¡ � | |¡ W d   ƒ n1 s%w   Y  W d   ƒ n1 s4w   Y  d}t ||¡}tdtddd�gd	 gd
dgd	 d�}t	 
||¡ tj|dd��}| d¡ W d   ƒ d S 1 srw   Y  d S )Nr   r{   zÐ
    CREATE TABLE person
    (
        id serial constraint person_pkey primary key,
        created_dt timestamp with time zone
    );

    INSERT INTO person
        VALUES (1, '2021-01-01T00:00:00Z');
    zHSELECT * FROM "person" AS p1 INNER JOIN "person" AS p2 ON p1.id = p2.id;rG   Ú2021r¢   r£   rH   rÍ  Ú
created_dtrÞ   Tr‚  Úperson)rñ  r|   r�   rq   rS   rv  r—  r   r   r¹   rÆ  r   r   r  )	r&  r\   r|   r	  ru   rØ  rã  rá  rˆ  r+   r+   r,   Útest_self_join_date_columnsƒ  s*   ÿ

ÿ€ÿÿÿ"ÿr7  c              	   C  sÔ   | }t g d¢g d¢dœƒ}t |¡�N}| ¡ � | |d¡dks"J ‚W d   ƒ n1 s,w   Y  | d¡s8J ‚| ¡ � | d¡ W d   ƒ n1 sLw   Y  | d¡rXJ ‚W d   ƒ d S 1 scw   Y  d S )Nr  r  r  Údrop_test_framerJ   )r   r   r   r  r_  r†  r  )rF  r\   rj  rˆ  r+   r+   r,   Útest_create_and_drop_table§  s   
ÿ
ÿ"÷r9  c                 C  s^   | }t tdddƒtdddƒgdgd�}|jd|dd�dksJ ‚td	|ƒ}t || t¡¡ d S )
NrW  rG   rH   ro  rÞ   rX  FrÅ  zSELECT * FROM test_date)r   r   r_  r#   r¹   rÆ  rÑ   rƒ   )rW  r\   rÒ   r°  r+   r+   r,   Útest_sqlite_datetime_date¶  s
   "
r:  Útz_awareFTc                 C  s”   |}| st dddƒt dddƒg}ntdddd�}t| ¡ ƒ d	d
„ ¡}t|dgd�}|jd|dd�dks6J ‚td|ƒ}| dd
„ ¡}t 	||¡ d S )NrZ  r   rG   r[  r4  rH   r5  r6  c                 S  s   |   ¡ S r  )Útimetz)r:  r+   r+   r,   rd  Ç  s    z+test_sqlite_datetime_time.<locals>.<lambda>ro  rÞ   r\  FrÅ  zSELECT * FROM test_timec                 S  r^  r_  r`  rb  r+   r+   r,   rd  Î  re  )
r   r   r   Úto_pydatetimerg  r   r_  r#   r¹   rÆ  )r;  rW  r\   Útz_timesÚtz_dtrÒ   r°  rá  r+   r+   r,   Útest_sqlite_datetime_time¿  s   
r@  c           
      C  sN   |   d|› d�¡}|D ]\}}}}}}	||kr|  S qtd|› d|› d�ƒ‚)NzPRAGMA table_info(rx  zTable z	, column z
 not found)rS   r’  )
r\   rù   ÚcolumnÚrecsÚcidr¦   ÚctypeÚnot_nullÚdefaultÚpkr+   r+   r,   Úget_sqlite_column_typeÒ  s   ÿrH  c                 C  s  | }ddg}ddg}t ||d�}|jd|d�dksJ ‚|jd	|dd
id�dks)J ‚t|ddƒdks3J ‚t|d	dƒd
ks=J ‚d}tjt|d�� |jd|dtid� W d   ƒ n1 s[w   Y  |jd|d
d�dkslJ ‚t|ddƒd
ksvJ ‚t|ddƒd
ks€J ‚d S )NrÕ   rÖ   r�  rŽ  rÞ   r�  rY  rH   r�  ÚSTRINGr‘  r”  z!B \(<class 'bool'>\) not a stringr�  rM  r”  )r   r_  rH  r  r‘  r’  Úbool)rW  r\   r½  rÈ   rÒ   r|  r+   r+   r,   Útest_sqlite_test_dtypeÚ  s   ÿrK  c                 C  s´   | }t dd gƒt tdddƒd gƒt dd gdd�t dd gƒdœ}t|ƒ}d	}|j||d
�dks0J ‚t||dƒdks:J ‚t||dƒdksDJ ‚t||dƒdksNJ ‚t||dƒdksXJ ‚d S )NTr�  r±   rG   r»  rl  r’  rž  r¢  rY  rH   rŸ  r”  r   rÊ  r¡  r0   ÚREAL)r   r   r   r_  rH  )rW  r\   r½  rÒ   r  r+   r+   r,   Útest_sqlite_notna_dtypeð  s   

ürM  c                 C  sæ   | }t ddgddggddgd�}d}tjt|d	�� |jd
|d� W d   ƒ n1 s+w   Y  tg d¢ƒD ]:\}}|j||d�dksEJ ‚t ||¡ t ddgddggd|gd�}d|d›�}|j||d�dksjJ ‚t ||¡ q6d S )NrG   rH   rI   rJ   ro  rÄ  rÞ   z$Empty table or column name specifiedr�  rq  rY  )
ztest_weird_name]ztest_weird_name[ztest_weird_name`ztest_weird_name"ztest_weird_name'z_b.test_weird_name_01-30z"_b.test_weird_name_01-30"Ú99beginswithnumberÚ12345r³  Útest_weird_col_namerú  )r   r  r‘  r’  r_  Ú	enumerater   Útable_exists)rW  r\   rÒ   r|  ÚndxÚ
weird_namer¯  Úc_tblr+   r+   r,   Útest_sqlite_illegal_names  s    ÿÿìrV  c                 G  sŽ   t djtdjtjdjtdjtdjtdjtd ƒdd„ tj	djt
dji	}g }|D ]}t|tƒr3t|ƒr3d }|t|ƒ }| ||ƒ¡ q&| t|ƒ S )Nz'{}'z{:.8f}z{:d}c                 S  s   dS )NÚNULLr+   )r!  r+   r+   r,   rd  +  s    zformat_query.<locals>.<lambda>z{:.10f}z'{!s}')r   rL  rƒ   r·   Ústr_ÚbytesrL   rQ  rµ   r§  rJ  r}   r   rò   r;  )r   rý  Ú_formattersÚprocessed_argsÚargÚ	formatterr+   r+   r,   Úformat_query#  s"   ÷r^  c                 C  sL   t  |¡�}| | ¡ ¡ }W d  ƒ n1 sw   Y  |du r"dS t|ƒS )z#Replace removed sql.tquery functionN)r   r"   rS   rî   rò  )rª  ru   rA  r°  r+   r+   r,   Útquery:  s   ÿr_  c                 C  s  t tj d¡ d¡ttdƒtd�tdddd�d	�}t	j
|d
| dd�dks&J ‚t	 d| ¡}|j|_|}t ||¡ dgt|ƒ |d< | ¡ }tt t|ƒ¡tjd�d }| ¡ |d< t	j
|d| dd�dksfJ ‚t	jd| dd�}| ¡ }||_d|j_t ||¡ d S )NrH   ©r“  rJ   ÚABCDrl  ú
2000-01-01r“  rÖ   rC  r|  r¸  FrÅ  zselect * from test_tablero  ÚtxtÚIdxÚtest_table2zselect * from test_table2r}  )r   r·   r   r¡  r¢  r   rò  r»  r   r   r_  r—  r¯   r¹   rÆ  r‡  r®  r/  rÏ   r¦   )rW  rª   rã  rá  Úframe2Únew_idxr+   r+   r,   Útest_xsqlite_basicA  s(   ýrh  c           	      C  sÀ   t tj d¡ d¡ttdƒtd�tdddd�d	�}tj	|j
d
< t |d¡}|  ¡ }| |¡ d}| ¡ D ]\}}t|g|¢R Ž }t|| d� q4|  ¡  tjd| d�}|j|_tj||dd� d S )NrH   r`  ra  rl  rb  r“  rÖ   rC  r|  r(  r[  z(INSERT INTO test VALUES (%s, %s, %s, %s)r5  r'  gü©ñÒMbP?)Úrtol)r   r·   r   r¡  r¢  r   rò  r»  r   r¶  r´   r   r�  rR   rS   Úiterrowsr^  r_  rZ   r—  r¯   r¹   rÆ  )	rW  rª   ró  r^   Úinsrc  rO   Úfmt_sqlrã  r+   r+   r,   Útest_xsqlite_write_row_by_row\  s"   ý
rm  c                 C  sÔ   t tj d¡ d¡ttdƒtd�tdddd�d	�}t	 
|d
¡}|  ¡ }| |¡ d}|jd }t	 | ¡�}| |t|ƒ¡ W d   ƒ n1 sGw   Y  |  ¡  t	 d| ¡}|jd d… |_t ||d d… ¡ d S )NrH   r`  ra  rl  rb  r“  rÖ   rC  r|  r[  z$INSERT INTO test VALUES (?, ?, ?, ?)r   r'  rG   )r   r·   r   r¡  r¢  r   rò  r»  r   r   r�  rR   rS   r´   r"   r;  rZ   r—  r¯   r¹   rÆ  )rW  rª   ró  r^   rk  rO   rA  rã  r+   r+   r,   Útest_xsqlite_executes  s"   ý

ÿrn  c                 C  sÀ   t tj d¡ d¡ttdƒtd�tdddd�d	�}t	 
|d
¡}| ¡ }|D ]}| d¡}t|ƒdkr@|d dkr@|d dks@J ‚q%t	j
|d
ddgd�}| ¡ }d|v sUJ ‚|  ¡ }| |¡ d S )NrH   r`  ra  rl  rb  r“  rÖ   rC  r|  r[  ú r   rÕ   rG   ÚDATETIMEr°  zPRIMARY KEY ("A", "B"))r   r·   r   r¡  r¢  r   rò  r»  r   r   r�  Ú
splitlinesr  r‡  rR   rS   )rW  rª   ró  ÚlinesÚlineÚtokensr^   r+   r+   r,   Útest_xsqlite_schemaˆ  s"   ý
€ru  c              	   C  s¤   d}|   ¡ }| |¡ t | ¡�8}| d¡ | d¡ tjtjdd�� | d¡ W d   ƒ n1 s3w   Y  W d   ƒ d S W d   ƒ d S 1 sKw   Y  d S )Núc
    CREATE TABLE test
    (
    a TEXT,
    b TEXT,
    c REAL,
    PRIMARY KEY (a, b)
    );
    ú,INSERT INTO test VALUES("foo", "bar", 1.234)z,INSERT INTO test VALUES("foo", "baz", 2.567)zExecution failed on sqlr�  z(INSERT INTO test VALUES("foo", "bar", 7))rR   rS   r   r"   r  r‘  r  )rW  ró  r^   rA  r+   r+   r,   Útest_xsqlite_execute_failœ  s   	


ÿü"ürx  c               	   C  sÀ   d} t  t d¡¡�+}| ¡ }| | ¡ t |¡�}| d¡ W d   ƒ n1 s)w   Y  W d   ƒ n1 s8w   Y  d}tj	tj
|d�� td|d� W d   ƒ d S 1 sYw   Y  d S )Nrv  rS  rw  z$Cannot operate on a closed database.r�  r'  r5  )rT  r   r~   r�   rR   rS   r   r"   r  r‘  r5  r_  )ró  r\   r^   rA  r|  r+   r+   r,   Ú&test_xsqlite_execute_closed_connection±  s   	
ÿ€ü"ÿry  c                 C  s0   t dt d¡iƒ}tj|| ddd�dksJ ‚d S )NÚFromr±   ÚtestkeywordsF©ru   r¦   r¯   )r   r·   Úonesr   r_  )rW  rÒ   r+   r+   r,   Ú$test_xsqlite_keyword_as_column_namesÇ  s   r~  c                 C  sp   t ddgdgd�}tj|| ddd�dksJ ‚| }tdd	„ | d
¡D ƒƒ}|dks*J ‚t d
|¡}t ||¡ d S )NrG   rH   Úc0rÞ   Úmono_dfFr|  c                 s  s   � | ]}|d  V  qdS )r   Nr+   )rN   Úmy_c0r+   r+   r,   Ú	<genexpr>Ô  s   € z4test_xsqlite_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfrI   )r   r   r_  ÚsumrS   r—  r¹   rÆ  )rW  r€  Úcon_xÚthe_sumrã  r+   r+   r,   Ú!test_xsqlite_onecolumn_of_integerÌ  s   r†  c                 C  s¾  t ddgddgdœƒ}t g d¢g d¢dœƒ}d}d	|› �}d
}tjt|d�� tj|| |dd� W d   ƒ n1 s:w   Y  t|| ƒ tj|| |dd� d}tjt|d�� tj|| |dd� W d   ƒ n1 sjw   Y  tj|| |ddd� t|| d�ddgks…J ‚tj|| |ddd�dks“J ‚t|| d�g d¢ksŸJ ‚t|| ƒ tj|| |ddd�dks²J ‚t|| d�ddgks¾J ‚tj|| |ddd�dksÌJ ‚t|| d�g d¢ksØJ ‚t|| ƒ d S )NrG   rH   rÕ   rÖ   r  rô  )r×   rØ   ÚEÚtable_if_existszSELECT * FROM z*'notvalidvalue' is not valid for if_existsr�  Únotvalidvalue)rª   ru   r¦   r]  rŠ  z&Table 'table_if_exists' already existsru  F)rª   ru   r¦   r]  r¯   r5  rU  rt  rI   )©rI   r×   ©rJ   rØ   ©r±   r‡  rò   )rU  rt  rŠ  r‹  rŒ  )r   r  r‘  r’  r   r_  r  r_  )rW  Údf_if_exists_1Údf_if_exists_2r¿   Ú
sql_selectr|  r+   r+   r,   Útest_xsqlite_if_existsÜ  s„   
üÿ
ÿüÿûûù	
ûù	ûù	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  (,  Ú
__future__r   rT  r   rU   r   r   r   r   rÇ   r   Úpathlibr
   r~   Útypingr   r  rò  r·   r  Úpandas._libsr   Úpandas.compatr   r   Úpandas.compat._optionalr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdÚpandasrv  r   r   r   r   r   r   r   r   r   r   Úpandas._testingÚ_testingr¹   Úpandas.core.arraysr   r   Úpandas.util.versionr   Ú	pandas.ior   Úpandas.io.sqlr   r   r    r!   r"   r#   r$   r;   rg  ÚfilterwarningsÚ
pytestmarkÚfixturer-   r?   ra   rb   rv   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/  r8  r@  rA  rB  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rO  rP  rR  rW  rX  rY  Úparamr  Úmysql_connectableÚmysql_connectable_irisÚmysql_connectable_typesÚpostgresql_connectableÚpostgresql_connectable_irisÚpostgresql_connectable_typesÚsqlite_connectableÚsqlite_connectable_irisÚsqlite_connectable_typesÚsqlalchemy_connectableÚsqlalchemy_connectable_irisÚsqlalchemy_connectable_typesÚadbc_connectableÚadbc_connectable_irisÚadbc_connectable_typesÚall_connectableÚall_connectable_irisÚall_connectable_typesÚparametrizera  rj  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,  r3  r>  r?  rC  rL  r—  rS  rV  r_  ra  rk  rt  r�  rQ  rL   r‡  r‰  r�  r‘  r–  rš  r¨  r±  r´  r·  r»  r¾  r¿  rÂ  rÅ  rÉ  rÒ  r=   r¦   râ  rå  rç  Úskip_if_installedrê  rï  ró  rö  rø  rù  r  r  r	  r  r  r!  r"  r#  r$  r'  r)  r+  r-  r/  r1  r2  r3  r>  rA  rK  rO  rQ  rV  rY  ri  ro  rr  rs  ru  r€  rƒ  r‡  rˆ  rœ  r¥  r²  rº  ÚinfrÀ  rÖ  rÙ  rÛ  rà  râ  rã  rä  rð  rñ  ró  rí  rî  r  Ú
no_defaultr  r  r  r  r   r#  r)  r,  r-  r3  r7  r9  r:  r@  rH  rK  rM  rV  r^  r_  rh  rm  rn  ru  rx  ry  r~  r†  r�  r+   r+   r+   r,   Ú<module>   sÊ   0$
ÿ
"-




#



















	










þþþþþþ
ÿ
ÿþþþÿÿ


!
	





	



$%
9

4
#


















7

ý
øþ(

.
þ
I
üþ	

0 "ñþ




'))$3#0þ%).7
'		J#	 