
    biF                       d dl mZ d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZmZ d dlmZ  ej$                  d      Z ej$                  d	      Z ej$                  d
        ej$                  d        ej$                  d      ZdZej/                   ej0                  e      d      Zej4                  d        Zd Zej:                  j=                  d      ej:                  j?                  dddg      d               Z d Z!ej:                  jE                  d      d        Z#d Z$d Z%d Z&d Z'ej:                  jQ                  ed      d         Z)d! Z*d" Z+d# Z,d$ Z-d% Z.d& Z/d' Z0d( Z1d) Z2d* Z3d+ Z4ed,        Z5ej:                  j?                  d-d.      ej:                  j?                  d/d0      d1               Z6d2 Z7d3 Z8y)4    )annotationsN)contextmanager)PANDAS_GE_300)read_sqlread_sql_queryread_sql_table)	assert_eqget_string_dtypetmpfilepandaszdask.dataframe
sqlalchemysqlite3numpyzv
name,number,age,negish
Alice,0,33,-5
Bob,1,40,-3
Chris,2,22,3
Dora,3,16,5
Edith,4,53,0
Francis,5,30,0
Garreth,6,20,0
number)	index_colc               #     K   t               5 } d| z  }t        j                  d|dd       | d d d        y # 1 sw Y   y xY ww)Nsqlite:///%stestTreplaceindex	if_exists)r   dfto_sql)furis     [/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/io/tests/test_sql.pydbr   #   sD     	 aq 
		&#TY	?	  s   A#9	AAAc           
        ddl m}m}m}m}m} t               5 }d|z  } |       } ||      }	 |d| |d|d       |d|            }
|j                  |	       t        |
j                  |dd	
      }|j                  j                  dk(  sJ |j                         }|j                  du sJ 	 d d d        y # 1 sw Y   y xY w)Nr   ColumnIntegerMetaDataTablecreate_enginer   empty_tableidTprimary_keycol2   r   npartitions)r   r"   r#   r$   r%   r&   r   
create_allr   namer   computeempty)r   r"   r#   r$   r%   r&   r   r   metadataenginetabledask_dfpd_dataframes                r   
test_emptyr8   +   s    JJ	 *aq :s#4d367#	
 	F# SDaP}}!!T))) (!!T)))#* * *s   BB88CzOignore:The default dtype for empty Series will be 'object' instead of 'float64'use_headTFc           
        ddl m}m}m}m}m} t               5 }d|z  } |       }	 ||      }
 |d|	 |d|d            }|	j                  |
       t        j                  dt        t        d            i      j                  d      }|j                  |j                  |dd	
       |rt        |j                  |dd      }n(t        |j                  |dd|j                   d d d      }|j"                  j                  dk(  sJ |j$                  dk(  sJ |j'                         }t)        ||       d d d        y # 1 sw Y   y xY w)Nr   r!   r   single_columnr(   Tr)   2   r   r      r-   )	head_rowsr.   metar   )r   r"   r#   r$   r%   r&   r   r/   pd	DataFramelistrange	set_indexr   r0   r   ilocr   r.   r1   r	   )r   r9   r"   r#   r$   r%   r&   r   r   r3   r4   r5   	test_datar6   r7   s                  r   test_single_columnrG   B   s6   
 KJ	 +aq :s#4d3

 	F#LL$U2Y!89CCDI	S	J$UZZRSTG$

^^BQ'G }}!!T)))""a'''()\*7+ + +s   DD>>Ec           	        ddl m} t        j                  t	        d      D cg c]  }|t        |      dz  d c}      }t        j                  |d      }t               5 }d|z  }  ||       }t        j                  t        d	      5  |j                  d
|d       d d d        d d d        y c c}w # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )r&      r=   )isr.   r   zExpected URI to be a stringmatchr   r   )r   )r   r&   r@   rA   rC   strddfrom_pandasr   pytestraises
ValueErrorr   )r   r&   rJ   r   ddfr   r4   s          r   /test_passing_engine_as_uri_raises_helpful_errorrV   g   s    (	%(CQQSVaZ0C	DB
...
+C	 <aar"]]:-JK 	<JJvvJ;	<< < D	< 	<< <s)   B2#)CB7!C7C 	<CCzERequires a postgres server. Sqlite does not support multiple schemas.)reasonc            
     Z   ddl m} m}m}m}m}m}m} d}d}d}	d}
d}d|	 d	|
 d
| d	| d| 
}d}d} ||      } |       } ||| |d|d       |d|      |      }|j                  |d | d|z               |j                  |       t        |j                  |d|j                  d      }|j                  j                  dk(  sJ |j                  j                  t         j                  d      k(  sJ |j#                         }|j$                  du sJ |j'                  d|z         y )Nr   )DDLr"   r#   r$   r%   r&   event	localhost5432userpassr   zpostgresql://:@/r'   other_schemar(   Tr)   r+   )schemabefore_createzCREATE SCHEMA IF NOT EXISTS %sr,   )r   rc   r.   int64z DROP SCHEMA IF EXISTS %s CASCADE)r   rY   r"   r#   r$   r%   r&   rZ   listenr/   r   r0   rc   r   r+   dtypenpr1   r2   execute)rY   r"   r#   r$   r%   r&   rZ   pg_hostpg_portpg_userpg_passpg_dbdb_url
table_nameschema_namer4   r3   r5   r6   r7   s                       r   test_empty_other_schemarr   u   sQ    WVV GGGGEWIQwiq	7)1UGLF J K6"FzHtW$/vwE 
LL/3'G+'U#V  

Fd5<<QG
 ==%%%<<'!2222??$L%%% NN5CD    c           
        dd l }|j                   j                         }|j                  d      }t        j	                  t        d      t        d      D cg c]
  }|||z  z    c}g dd      }t        j                  |t        j	                  d||d	z  z   d dd ||d
z  z   d dg      g      }t               }t               5 }d|z  }|j                  d|dd       t        d|dd      }	|j                  d      }
t        |	|
j                  dt        i             t        d|ddd      }	|j                  d      }
t        |	|
       t        d|dd      }	|	j!                  d      j#                         }|j$                  j'                         |t        gk(  sJ |j(                  sJ |j                  d      }
t        |	|
j                  dt        i             t        d|dd|
d d       }	|	j!                  d      j#                         }|j$                  j'                         ||gk(  sJ |j                  d      }
t        |	|
d       d d d        y c c}w # 1 sw Y   y xY w)Nr   r,   secondsghjkl   )TTFTT)abcxi  i  r   r   Fr   r   r=   rz   r.   r   r{      )r.   r   r>      r.   r   r?   check_dtype)datetimenow	timedeltar@   rA   rB   rC   concatr
   r   r   r   rD   r	   astypeboolget_partitionr1   dtypestolistr2   )r   r   r   drJ   r   string_dtyper   r   datadf2parts               r   test_needs_rationalr      sM   





!C1%A	g',Qx0!#A+00	

B 
LLC!d(N>S1t8^$?	


B $%L	 0aq 
		&#Ui	@ fcqCHll3$

C;/0 fcqCSUVll3$ fcrSI!!"%--/{{!!#d';;;;zzzll3$

C;/0 fcqCcRTSTgV!!!$,,.{{!!#l'CCCCll3$/70 0! 1 0 0s   I
FI""I+c                    t        d| dd      j                         }|j                  t        j                  k(  j	                         sJ |j
                  j                  dk(  sJ t        |t               y )Nr   r=   r   r}   )r   r1   r0   r   allr   r	   r   r   s     r   test_simpler      sZ    &"!xHPPRDII %%'''::??h&&&dBrs   c                B   t        d| t        t        j                        dd      }t	        |j
                        dk(  sJ |j                  j                         t        j                  k(  j                         sJ t        d| dgdd      }t        |t        dg          t        d| t        t        j                        dd	      }|j                  d
k(  sJ |j                  j                         t        j                  k(  j                         sJ t        d| t        t        j                        ddd
      }|j                  d
k(  sJ |j                  j                         t        j                  k(  j                         sJ t        d| t        t        j                        ddd
      }|j                  dd      dk  j                         j                         sJ |j                  j                         t        j                  k(  j                         sJ y )Nr   r=   r   )columnsr.   r      r0      z2 GiB)r   bytes_per_chunkr   r,   i   @)r   r   r   r>      Tdeepr   i  )r   rB   r   r   len	divisionsr0   r1   r   r	   r.   memory_usage_per_partition)r   r   data_1s      r   test_npartitionsr      s   D,!xD t~~!###II277*//111VH!xD dBxL!
RZZ D q   II277*//111
RZZ F """KK!RWW,11333
RZZ D 
	(	(d$	(	?#	ENNPTTVVII277*//111rs   c                    t        d| dgg dd      }|j                  dk(  sJ |j                  j                         j	                         dk(  sJ t        |t        dg   t        j                  dk            y )Nr   r0   r   r=   rI   r   )r   r   r   rI   )r   r   r   maxr1   r	   r   r   s     r   test_divisionsr     sl    VH	XD >>Y&&&::>>##%***dBxLQ/0rs   zmemory doesn't matchc           	     \   t        j                  t        d      5  t        d| dgdg dd       d d d        t        d| dd	
      }|j	                  dd      j                         }d|k  j                         r|dk  j                         sJ t        |t               y # 1 sw Y   rxY w)Nz#either 'divisions' or 'npartitions'rM   r   r0   r   r   r   )r   r   r   r.   d   )r   r   Tr   r<      )	rR   rS   	TypeErrorr   r   r1   r   r	   r   )r   outms      r   test_division_or_partitionr     s    	y(M	N 
H	

 x
MC&&D&=EEGAF<<>q3wmmo--c2
 
s   B""B+c           	         t        d| dt        j                  t        d            j	                         }|j
                  t        j
                  k(  j                         sJ |j                  j
                  dk(  sJ t        |t               y )Nr   r   r,   rL   )r   r?   )	r   rP   rQ   r   r1   r0   r   r   r	   r   s     r   	test_metar   *  sm    hR^^BA^-Ngi 	 II %%'''::??h&&&dBrs   c           	        t        d| dt        j                  t        d      dd      }t	        |j
                        dk(  sJ |j                         }|j                  t        j                  k(  j                         sJ |j                  j                  dk(  sJ t        |t               t        d| dt        j                  t        d      g d	d
      }t	        |j
                        dk(  sJ |j                         }|j                  t        j                  k(  j                         sJ |j                  j                  dk(  sJ t        |t               y )Nr   r   r,   rL   r=   r   )r   r?   r.   r>   r   )r   r   r   )r   r?   r   r>   )r   rP   rQ   r   r   r   r1   r0   r   r   r	   r   s     r   test_meta_no_head_rowsr   3  s   
^^BA^.D t~~!###<<>DII %%'''::??h&&&dB
^^BA^.D t~~!###<<>DII %%'''::??h&&&dBrs   c                    t        j                  t              5  t        d| ddd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r,   )r   r>   r.   )rR   rS   rT   r   r   s    r   test_no_meta_no_head_rowsr   Q  s8    	z	" SvrXPQRS S S   4=c                    t        d| ddddg      }|j                  j                         j                         dk(  sJ |j                  j	                         j                         dk(  sJ y )Nr   r=   r   r,   rI   )r.   r   limits)r   r   minr1   r   r   s     r   test_limitsr   V  s_    &"!xQRTUPVWD::>>##%***::>>##%***rs   c            	        dd l } | j                   j                         }| j                  d      }t        j	                  t        d      t        ddd      D cg c]
  }|||z  z    c}d      }t               5 }d	|z  }|j                  d
|dd       t        d
|dd      }|j                  j                  j                  dk(  sJ |j                  d   |j                  j                         k(  sJ |j!                  d      }t#        |j%                  d       |j'                         d       d d d        y c c}w # 1 sw Y   y xY w)Nr   r,   ru   rw   r=   )ry   rz   r   r   Fr   r   rz   r}   Mc                "    | j                         S N)
sort_index)r|   s    r   <lambda>z test_datetimes.<locals>.<lambda>l  s    !,,. rs   r   )r   r   r   r@   rA   rB   rC   r   r   r   r   rg   kindr   rz   r   rD   r	   map_partitionsr   )	r   r   r   rJ   r   r   r   r   r   s	            r   test_datetimesr   \  s*   





!C1%A	7maR8H"I13Q;"IJ
B 
 
aq 
		&#Ui	@fcqCHzz$$+++~~a BDDHHJ...ll3 89NN	

 
 #J
 
s   D<
;B8EE
c                   t        d|ddddi      j                         }dj                  d | j                  D              }|d	k(  sJ t	        |t
               t        d|dddd
i      j                         }dj                  d | j                  D              }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ t	        |t
               y )Nr   r=   r   echoF)r.   r   engine_kwargs
c              3  4   K   | ]  }|j                     y wr   message.0rs     r   	<genexpr>z8test_extra_connection_engine_keywords.<locals>.<genexpr>w       6!AII6    Tc              3  4   K   | ]  }|j                     y wr   r   r   s     r   r   z8test_extra_connection_engine_keywords.<locals>.<genexpr>~  r   r   WHEREFROMSELECTANDz>= ?z< ?z<= ?)r   r1   joinrecordsr	   r   )caplogr   r   r   s       r   %test_extra_connection_engine_keywordsr   r  s    Xfe_gi 	 ))6v~~6
6C"99dBXfd^gi 	 ))6v~~6
6Cc>>S==s??C<<S==C<<S==dBrs   c                   dd l }ddl m} |j                  |j                  d      |j                  d            j	                  |j                  d            }t        || dd      }t        |t        dg          |j                  |j                  |j                  d      |j                  j                        j                  d      |j                  d            j                  |j                  d      dk\        j	                  |j                  d            }t        || dd      }t        |t        j                  dd dgf          y )	Nr   sqlr   r0   r   r=   r}   rx   )r   r   selectcolumnselect_fromr5   r   r	   r   casttypes
BigIntegerlabelwhereloc)r   sar   s1r   s2s         r   
test_queryr     s   	CJJx(#**V*<	=	I	I		&
B RQ(
CCc2vh<  	

GGCJJx("((*=*=>DDXNJJv	
 
szz(#q(	)	SYYv&	'  RQ(
CCc266!"vh,'(rs   c                   ddl m} |j                  d      }|j                  d      }|j                  |||j                  j                  |      j                  d            j                  |j                  d            }t        || dd      }t        j                         }|d   j                  j                         |d<   |j                         j                  d      }t!        ||j"                  d d ddgf          y )	Nr   r   r   r0   lennamer   r=   r}   )r   r   r   r   funclengthr   r   r5   r   r   copyrO   r   reset_indexrD   r	   r   )r   r   r   r0   r   r   
lenname_dfs          r   test_query_index_from_queryr     s    ZZ!F::fD	FD#((//$"7"="=i"H	I	U	U		&
B RQ)
DCJ&v.22668Jy'')33I>Jc:>>!h%7"789rs   c                   ddl m} t        j                  g dd      t        j                  g dd      d}t        j	                  g d	d      }t        j                  ||
      }|j                  |j                  d	      |j                  d      |j                  d            j                  |j                  d            }t        || dd	|      }t        |t        ddg   t        j                  dk7         y )Nr   r   r0   rO   )r0   rg   ageint)r0   r   r   )r   r   r=   r   win32r   )r   r   r@   SeriesIndexrA   r   r   r   r5   r   r	   r   sysplatform)r   r   r   r   r?   r   r   s          r   test_query_with_metar     s     		"6	7yy%uy5D HHRheH4E<<E<*D	

8cjj0#**U2C
k#))F#$  RQ(
NCc2vuo&CLLG4KLrs   c                    t        j                  t              5  t        d| ddd        d d d        y # 1 sw Y   y xY w)Nr   r=   r0   )r.   r   r   )rR   rS   r   r   r   s    r   )test_no_character_index_without_divisionsr     s7    	y	! TvrqFdST T Tr   c                   ddl m} |j                  |j                  d      |j                  d            j	                  |j                  d            }t        || dd      }t        |t        dg          t        d| dd      j                         }|j                  t        j                  k(  j                         sJ |j                  j                  dk(  sJ t        |t               y )Nr   r   r   r0   r   r=   r}   )r   r   r   r   r   r5   r   r	   r   r   r1   r0   r   r   )r   r   rK   r   r   s        r   test_read_sqlr     s    

3::h'F);<HH		&	A 1ba8
<Cc2vh< &"!xHPPRDII %%'''::??h&&&dBrs   c               #  X   K   t               5 } d| z   d d d        y # 1 sw Y   y xY ww)Nr   r   )r   s    r   
tmp_db_urir    s,     	 !aq  ! ! !s   *	*'*r.   )r,   r=   parallel)FTc                V   t         j                  d      }t        j                  t         t         g      }t        j                  t         |       }|j                  d      }t               5 }|j                  d||       t        d|d      }t        t         |       d d d        t               5 }|j                  d||d       t        d|d      }t        t         j                  d      |       t        d|d      }t        ||       d d d        t               5 }|j                  d||       t        d|d      }t        ||       d d d        t        rd}nd	}t               5 }|j                  d
      j                  d|       t        j                  t        d| d      5  t        d|d
       d d d        d d d        t               5 }|j                  d|       t        j                  t        d      5  |j                  d|       d d d        |j                  d||d       t        d|d      }t        ||       |j                  d||d       t        d|d      }t        ||       d d d        t               5 }|j                  d||d      }t        |j!                               }	|	| k(  sJ 	 d d d        y # 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   :xY w# 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   )r  r   F)r  r   negishrO   objectr0   z"Provided index column is of type "zS".  If divisions is not provided the index column type must be numeric or datetime.rM   zTable 'test' already existsappend)r  r   r   )r  r1   )r   rD   r@   r   rP   rQ   r  r   r   r	   r   rR   rS   r   rT   r   r1   )
r.   r  	df_by_agedf_appendedrU   
ddf_by_ager   resultr   actuals
             r   test_to_sqlr    s    U#I))	
K ..[
)Cu%J 
 

63
2X6"f 
 %

63
?X6",,x(&1U3)V$% 
 %&#9U3)V$%
  
 0f$$VS1]]6|n  EX  Y
 	0 63/		00 
 %

63 ]]:-JK 	$JJvs#	$ 	

63X
FX6+v&&#INU3)V$%" 
 %FC(EJ V^^%&$$$% %m % %% %	0 	00 0	$ 	$	% %"% %s{   *2K.AK.K &AK:'K-5K:.L=LA$L6LKK K*-K7	2K::LL	LLL(c                 &   t         j                  t        d      } t               5 }| j	                  d|d       t        j                  t        d      5  | j	                  d|d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr=   r   multi)methodz7to_sql\(\) got an unexpected keyword argument 'unknown'rM   )unknown)rP   rQ   r   r  r   rR   rS   r   )rU   r   s     r   test_to_sql_kwargsr  +  s    
..Q
C	 2

63w
/]]X
 	2 JJvsDJ1	22 2	2 	22 2s#   0BA;*B;B	 BBc           	     &   t         j                  t        d      }t               5 }|j	                  d|ddi       dj                  d | j                  D              }|dk(  sJ t        t        t        d|d	             d d d        t               5 }|j	                  d|dd
i       dj                  d | j                  D              }d|v sJ d|v sJ t        t        t        d|d	             d d d        y # 1 sw Y   |xY w# 1 sw Y   y xY w)Nr=   r   r   F)r   r   c              3  4   K   | ]  }|j                     y wr   r   r   s     r   r   z,test_to_sql_engine_kwargs.<locals>.<genexpr>9       ;q;r   r   r   Tc              3  4   K   | ]  }|j                     y wr   r   r   s     r   r   z,test_to_sql_engine_kwargs.<locals>.<genexpr>?  r  r   CREATEINSERT)	rP   rQ   r   r  r   r   r   r	   r   )r   rU   r   logss       r   test_to_sql_engine_kwargsr  5  s    
..Q
C	 =

63vuo
>yy;FNN;;rzz"nVS(;<	= 
 =

63vtn
=yy;FNN;;44"nVS(;<= == == =s   AC;A D;DD)9
__future__r   ior   
contextlibr   rR   dask.dataframe._compatr   dask.dataframe.io.sqlr   r   r   dask.dataframe.utilsr	   r
   
dask.utilsr   importorskipr@   rP   rh   r   read_csvStringIOr   fixturer   r8   markfilterwarningsparametrizerG   rV   skiprr   r   r   r   r   xfailr   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   rs   r   <module>r,     s   " 	 
 %  0 J J < V"V)*   L !   I V!	 [[T"h[7  *. U dE]3+ 4+B< R  )E)EX30l*2Z1 =)?@ A"<S
+
,.).: M$T ! !
 /]3I% 4 0I%X2=rs   