
    >ie                    (   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlmZ d d	lm Z  d d
l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 	 d dl5Z6n# e7$ r dZ6Y nw xY w ej8        g dg ddg d           ej8        g dg ddg d           ej8        g dg ddg d          dZ9 e2ddd ej:        g d           ej8                              Z; ej8        e9de;g d          Z<e<=                                Z>e/Z?d Z@d ZAd  ZBd! ZCd" ZDd# ZEd$ ZFd% ZG ej8         ejH        g dd&z  d'(           ejH        g d)d&z  d*(           ejI        g d+d&z            J                    d,           ejI        g d-d&z             ejH        g d.d&z             ejI         ejK        d/d01                     ejI         ejK        d/d0d23                     ejI         ejL        d4d01                    d5          ZMd6 ZNd7 ZOejP        Q                    d8d9d:d; ejR        d<ejP        jS        =          g          d>             ZTejP        U                    e# d?@          ejP        Q                    dAg dB          dC                         ZVdD ZWdE ZXe%rdFndGZYdH ZZdI Z[ejP        Q                    dJdK          ejP        Q                    dLdK          dM                         Z\dN Z]ejP        Q                    dOdPdQg          dR             Z^dS Z_dT Z`dU ZadV ZbdW ZcdX ZddY ZedZ Zfd[ Zgd\ ZhejP        jS        d]             Zid^ Zjd_ Zkd` Zlda Zmdb Zndc Zodd ZpejP        Q                    dedf ejR        dgejP        jq        =          g          dh             ZrejP        Q                    dedf ejR        dgejP        jq        =          g          di             ZsejP        Q                    dedf ejR        dgejP        jq        =          g          dj             ZtejP        Q                    dedf ejR        dgejP        jq        =          g          dk             Zudl Zvdm ZwejP        Q                    dndodpg          dq             ZxejP        Q                    dJdrdsg          dt             Zydu Zzdv Z{dw Z|dx Z}dy Z~ejP        Q                    dzeeed{ g          d|             Zd} Zd~ Zd Zd ZejP        jS        d             ZejP        Q                    d8ddg          d             Zd Zd ZejP        U                    e" d@          d             ZejP        Q                    dddg          d             ZejP        Q                    ddg          d             Zd ZejP        Q                    dg d          ejP        Q                    dddddg ejI        ddg          g          ejP        Q                    ddd:g          d                                     Zd Zd Zd Zd Zd Zd Zd Zd ZejP        Q                    d8dd9g          d             Zd Zd Zd Zd Zd ZejP        Q                    ddrdsg          ejP        Q                    dddddgg          ejP        Q                    dddg          d                                     ZejP        Q                    ddf ejR        dgejP        jq        =          g          ejP        Q                    dddddgddgg          ejP        Q                    ddrdsg          d                                     ZejP        Q                    ddrdsdsdrgdrdsgg          ejP        Q                    dddgddgg          ejP        Q                    dddg          d                                     ZejP        Q                    dddg          ejP        Q                    ddrdsg          ejP        Q                    dddddgg          ejP        Q                    dd9dg          ejP        Q                    d e ed                    dgdz  z    e edd                    z   dgdz   e edd                    z   d e ed                    dgdz  z    e e ed                              dg          d                                                             Zd Zd Zd ZejP        Q                    dddgddgg          ejP        Q                    dd9dg          d                         Zd ZejP        Q                    d8d9d&g          d             ZejP        Q                    d ej8         ed¦           edæ          dĜ          g dŢg dŢg dŢdsff ej8        g dƢg dǢdĜ          g dȢg dɢg dʢdsff ej8        dg dˢi          g d̢g d͢g d΢dsffg          dτ             ZejP        U                    e6du dЬ@          ejP        U                    e$ dѬ@          ejP        Q                    dddgdfddgdfd9dgdfd9dgdfd9dgdf edd9d9           edddަ          gdf ej        d           ej        d          gdf ed           ed          gdf ej        d           ej        d          gdf edd            ed dݦ          gdfg
          d                                     ZdS )    )annotationsN)ProcessPoolExecutor)copy)datetime)Decimal)partial)mock)compute_as_if_collection)PANDAS_GE_140PANDAS_GE_150PANDAS_GE_200PANDAS_GE_220assert_categorical_equaltm)_calculate_divisions_noopmaybe_buffered_partdpartitioning_indexrearrange_by_columnrearrange_by_divisionsshuffle)	assert_eq	make_meta)cull         r         abr   r   r   indexr!         )r   r*      r*   r+   r,   r"   r,   	   )r   r+   r/   r/   r/   r/   )xr   )r2   r   )r2   r   i8)r(   parent_metar2   r   r!   r/   r/   c                   t          t          t          j        |           }t          |t          j                  sJ |j        t          j        k    sJ t          j        |j        |j	        df          }t          j        |j        |j	        df          }t          |j                  t          |j                  z  rJ t          |j                                      t          j                  sJ t          t          t          j                  j	        t          t          t          j                  j	        k    sJ d S )Nr   r   r   )shuffle_funcdr%   
isinstancedd	DataFramenpartitionsdaskget_nameset
issuperset)shuffle_methodsr2   ys       Alib/python3.11/site-packages/dask/dataframe/tests/test_shuffle.pytest_shufflerG   ?   s    Q^444Aa&&&&&=AM))))!'1&&A!'1&&AAC3qs88#$$$qv;;!!!&)))))13%a)=)=)CCCCCCC    c                 n    t          t          t          j                  j        t          j        k    sJ d S N)r   r9   r%   r=    rH   rF   test_default_partitionsrL   M   s(    1ac??&!-777777rH   c                
   t          j        dt          j                            d          i          }t	          j        |d          }t          ||j        | dd          }|                                }|j	        dk    sJ t          |j                                      t          |j                            sJ t          |          t          |          k    sJ t          |j                  t          |j                  k    sJ t          t!          t"          |j                                                            t          t!          t"          |j                                                            k    sJ d S )Nr2   d   
   r=      r!   r   r=   
max_branchpdr<   nprandomr;   from_pandasr   r2   computer=   rA   r>   rB   lenlistcolumnsmaptuplevaluestolistrC   dfddfrD   scs        rF   test_shuffle_npartitionsre   Q   s5   	sBI,,S112	3	3B
.
,
,
,CSUNqQQQA	
B=Bqv;;!!#ch--00000r77c"gg	??d2:......s5")**,,--..#c%AQAQASAS6T6T2U2UUUUUUUrH   c                
   t          j        dt          j                            d          i          }t	          j        |d          }t          ||j        | dd          }|                                }|j	        dk    sJ t          |j                                      t          |j                            sJ t          |          t          |          k    sJ t          |j                  t          |j                  k    sJ t          t!          t"          |j                                                            t          t!          t"          |j                                                            k    sJ d S )Nr2   rN      rP   r*   r   rR   rT   ra   s        rF   ,test_shuffle_npartitions_lt_input_partitionsrh   ^   s5   	sBI,,S112	3	3B
.
,
,
,CSUNaPPPA	
B=Aqv;;!!#ch--00000r77c"gg	??d2:......s5")**,,--..#c%AQAQASAS6T6T2U2UUUUUUUrH   c                    ddl m}  |t          t          t          j        |           t          t          d|                      d S )Nr   list_eqr7   r%   )dask.dataframe.tests.test_multirk   r   r9   r%   )rC   rk   s     rF   test_index_with_non_seriesrm   k   sW    777777G13///C1X1X1X    rH   c                V   t          t          t          dg         |                                           }t          t          dg|                                           }t          t          d|                                           }t          |j                                                  t          |j                                                  k    sJ t          |j                                                  t          |j                                                  k    sJ d S )Nr%   r7   )r   r9   rY   sortedr_   r`   )rC   res1res2res3s       rF   test_index_with_dataframers   s   s    1ah777??AAD1se^444<<>>D1c>222::<<D$+$$&&''6$+2D2D2F2F+G+GGGGG$+$$&&''6$+2D2D2F2F+G+GGGGGGGrH   c                $   t          j        dg di          }t          j        |d          }dD ]_}t	          |d||           }t          |                    d                    t          |                    d                    k    sJ `d S )Nr2   r   r   )r   r   r=   r   sync	scheduler)rU   r<   r;   rX   r   rZ   rY   )rC   rb   r$   ir%   s        rF   ,test_shuffle_from_one_partition_to_one_otherrz   |   s    	sIII&	'	'B
r1A T TAs>BBB199v9..//3qyy6y7R7R3S3SSSSSST TrH   c                *   t          j        dg ddz  i          }t          j        |d          }t	          ||j        d|           }t          t          j        |j        |                                          }|D ]}|j	        |j	        k    sJ d S )Nr2   r   rO   r   rP   r+   ru   )
rU   r<   r;   rX   r   r2   r   r>   __dask_keys__r\   )rC   rb   rc   rD   partsps         rF   test_shuffle_empty_partitionsr      s    	sIIIN+	,	,B
.
+
+
+CSU>BBBA$R\161??;L;LMME & &yAI%%%%%& &rH   r   int32dtype)Ng      @g      @float32r$   r%   ccategory)r9   ef)TFT20130101r/   periods
US/Easternr   tz2000)i32f32catobjbooldtdt_tztdc                 f   t          t          j        d          } | dk     | dk    z                                  sJ t	          t          j        |                     dk    sJ t          t          j        d          t          t          j        d          k                                    sJ t          t          dg         d          } | dk     | dk    z                                  sJ t	          t          j        |                     dk    sJ t          t          g d         d          } d| k    | dk     z                                  sJ t          t          j        d          } | dk     | dk    z                                  sJ t	          t          j        |                     dk    sJ d S )Nr   r   r   r   )r   r   r   r   r!   )r   df2r   allrZ   rV   uniquer(   )ress    rF   test_partitioning_indexr      s   
SWa
(
(C1W"'')))))ry~~""""sw**.@!.L.LLQQSSSSS
S%\1
-
-C1W"'')))))ry~~""""
S!7!7!78!
<
<C#X#'"'')))))
SY
*
*C1W"'')))))ry~~""""""rH   c                 h   t          j        t          t          j                  g ddz  d          } | j                            d          | _        |                                 }|j        j        	                    t          t          |j        j        j                                      |_        t          | j        d          }t          |j        d          }||k                                    sJ t          | d          }t          |d          }||k                                    sJ d S )Nr   r   r   r!      r#   r   r*   )rU   r<   r[   stringascii_lettersr$   astyper   r   set_categoriesreversed
categoriesr   r   )rb   r   r   rq   s       rF   -test_partitioning_index_categorical_on_valuesr      s    	D!566\\\B=NOO	P	PB4;;z""BD
''))CEI$$T(3593G*H*H%I%IJJCE
RT1
%
%CceQ''D4K
R
#
#Cc1%%D4KrH   r=   r   r!   r"      )marksc                   g d}t          j        t          j                            d          t          j                            d          dz  t          j                            |d          dt          j                            d                    }t
          r|                    ddd          }t          j        || 	          }t          |
                    d
          |
                    d
|                     t          |
                    d          |
                    d|                     t          |
                    d          |
                    d|                     t          |
                    |j                  |
                    |j        |                     t          |
                    |j        |j        z             |
                    |j        |j        z   |                     t          |
                    |j        dz             |
                    |j        dz   |                     d S )NalicebobrickyrN   皙?r2   rE   zr'   Float64r   )r2   r   rP   r2   r7   rE   r   r   )rU   r<   rV   rW   choicer   r   r;   rX   r   	set_indexr2   rE   )r=   rC   namesrb   rc   s        rF   test_set_index_generalr      s    &%%E	!!#&&!!#&&#-!!%--	
 	

 is##
 
 
B  8YYYX6677
.
5
5
5Cbll3sN!K!KLLLbll3sN!K!KLLLbll3sN!K!KLLLbll24  #--~-"N"NOOO
RTBD[!!3===#W#W   bll24!8$$cmmCEAI~m&V&VWWWWWrH   z8Only test `string[pyarrow]` on recent versions of pandas)reasonstring_dtype)zstring[python]string[pyarrow]objectc                   |dk    rt          j        d           g d}t          j        t          j                            d          t          j                            |d          dt          j                            d                    }|                    d|i          }t          j	        |d	          }t          |                    d          |                    d| 
                     d S )Nr   pyarrowr   rN   r2   rE   r'   rE   rO   rP   r7   )pytestimportorskiprU   r<   rV   rW   r   r   r;   rX   r   r   )rC   r   r   rb   rc   s        rF   test_set_index_stringr      s     (((I&&&%%%E	!!#&&!!%--	
 	
 is##
 
 
B 
C&	'	'B
.
,
,
,Cbll3sN!K!KLLLLLrH   c                   t          j        t          j                            d          t          j                            d          dz  dt          j                            d                    }t	          j        |d          }t          j        t          d          5  |	                    |j
        | 	          }d d d            n# 1 swxY w Y   ||u sJ t          ||	                    |j
                             d S )
NrN   r   r   r'   r!   rP   zthis is a no-opmatchr7   )rU   r<   rV   rW   r;   rX   r   warnsUserWarningr   r(   r   )rC   rb   r$   r%   s       rF   test_set_index_self_indexr      s$   	is##")*:*:3*?*?3*FGGis##
 
 
B
 	rq)))A	k):	;	;	; 9 9KKK889 9 9 9 9 9 9 9 9 9 9 9 9 9 96666abh''(((((s   %CCCc                   | dk    rt          j        d           t          j        t          j                            d          t          j                            d          dz  dt          j                            d                    }t          j        |d          }t          |	                    d	| 
          j
                  t          |	                    d	| 
          j
                  k    sJ t          |	                    d	| 
          j
                  t          |	                    d| 
          j
                  k    sJ t          |	                    d	d|           j
                  t          |	                    d	d|           j
                  k    sJ t          |	                    d	d|           j
                  t          |	                    d	d|           j
                  k    sJ d S )Ndiskz/dsk names in disk shuffle are not deterministicrN   r   r   r'   r!   rP   r2   r7   rE   rS   r   r   T)dropr   F)r   xfailrU   r<   rV   rW   r;   rX   rA   r   r>   )rC   rb   rc   s      rF   test_set_index_namesr     s   FGGG	is##")*:*:3*?*?3*FGGis##
 
 
B
 .
+
+
+Cs}}S.}99>??3c>227D D     s}}S.}99>??3c>227D D     s}}SQ}GGLMMQTca@@ER R     s}}St^}DDIJJcc~>>CO O      rH   MEMc                   t           j                            ddt          t          t
          dddt           d          }|                    d| 	          }|j        	                                
                    d
           d S )Nr   2004valuenameid2h1r   )freqpartition_freqseedr   r7   rv   rw   )r;   demomake_timeseriesfloatstrintr   r   r   sumrY   )rC   rb   r   s      rF   test_set_index_2r     s~    		 	 C002xx 
! 
 
B ,,v~,
6
6CIMMOOf-----rH   c                F   t          j        t          j                            d          ddg          }t	          j        |d          }|                    d| d|j                  }|                    d          }t          ||           |j        |j        k    sJ d S )	N)rO   r   r2   rE   r\   r*   rP   r   )r   rS   r=   )	rU   r<   rV   rW   r;   rX   r   r=   r   )rC   rb   rc   ddf2r   s        rF   test_set_index_3r   +  s    	bi&&w//#s	D	D	DB
.
+
+
+C==^s   D ,,s

Cc4s......rH   r   TFappendc                   t          j        g dg dd          }t          j        |d          }|j        dk    sJ |                    d          }|                    d          }|j        sJ t          ||                                d	           |                    d| |
          }|                    dd| |          }|j        rJ t          ||d	           dS )zv
    GH10333 - Allow setting index on existing partitions without
    computing new divisions and repartitioning.
    )r   r!   r   r   r*   r   r   r   r!   r*   )col1col2r   rP   r   r   Fsort_results)r   r   )sortr   r   N)	rU   r<   r;   rX   r=   r   known_divisionsr   
sort_index)r   r   rb   rc   	df_result
ddf_results         rF   test_set_index_no_sortr   7  s     
HH	I	IB
.
+
+
+C?Q V$$Iv&&J%%%%j)..00uEEEE
 V$v>>IvEVLLJ))))j)%888888rH   c                8   t          j        g dg dd          }t          j        |d          }|                    d                                          }|                    d|           }t          |j        dd         |j        dd                    d S )	N)r   r   r   r   r   )r/   r,   r"   r   r*   r   r   rP   r2   r7   r   )rU   r<   r;   rX   r   r   r   loc)rC   rb   rc   r   r   s        rF   test_shuffle_sortr   S  s    	OOO///BB	C	CB
.
+
+
+C
,,s


&
&
(
(C==n=55DdhqsmSWQqS\*****rH   rx   threads	processesc                  	 t          j        dt          j                            d          i          }t	          j        |d          }|                    |j        dz            }t          |dd|           }|j	        |j	        k    sJ t          |j                                      |j                  sJ |                    |	          }t          j                            |	          } ||j        |                                          }|j                                        D ]#	t'          	fd
|D                       dk    sJ $d S )Nr2   rO   r!   rP   _partitionsr       r   rw   c              3  D   K   | ]}t          |j                  v V  d S rJ   )rA   r   ).0partry   s     rF   	<genexpr>z!test_rearrange.<locals>.<genexpr>o  s3      @@$1D,---@@@@@@rH   r   )rU   r<   rV   rW   r;   rX   assignr2   r   r=   rA   r>   issubsetrY   baseget_schedulerr|   r   drop_duplicatesr   )
rC   rx   rb   rc   r   resultr$   r?   r}   ry   s
            @rF   test_rearranger  ]  sU   	sBI,,R001	2	2B
.
+
+
+C::#%!):,,D mN  F 0000sx==!!&+..... 	++A
)
!
!I
!
6
6CCV113344E]**,, F F@@@@%@@@@@AEEEEEF FrH   c                 $   t          j        dt          j                            d          i          } t	          j        | d          }|                    |j        dz            }t          j	                    }t          j                            t          |                    5  t          |ddd	
          }|                    d           d d d            n# 1 swxY w Y   t!          t#          j        |                    dk    sJ d S )Nr2   rO   r!   rP   r   temporay_directoryr   r   r   r   r   rw   r   )rU   r<   rV   rW   r;   rX   r   r2   tempfilemkdtempr>   configrA   r   r   rY   rZ   oslistdirrb   rc   r   tmpdirr  s        rF   test_rearrange_cleanupr  r  s(   	sBI,,R001	2	2B
.
+
+
+C::#%!):,,DF	CKK	8	8 . .$T=RQWXXX---. . . . . . . . . . . . . . . rz&!!""a''''''s   (*CC"%C"c                     t          d          )NMock exception!)
ValueError)rb   colr=   r~   s       rF   mock_shuffle_group_3r    s    
&
'
''rH   c            	        t          j        dt                    5  t          j        dt
          j                            d          i          } t          j        | d          }|	                    |j
        dz            }t          j                    }t          j                            t!          |                    5  t#          j        t&          d	
          5  t)          |ddd          }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t-          t/          j        |                    dk    sJ d S )Nz&dask.dataframe.shuffle.shuffle_group_3)newr2   rO   r!   rP   r   r  r  r   r   r   r   r   r   rw   r   )r
   patchr  rU   r<   rV   rW   r;   rX   r   r2   r
  r  r>   r  rA   r   r   raisesr  r   rY   rZ   r  r  r  s        rF   *test_rearrange_disk_cleanup_with_exceptionr    s	    
<BV	W	W	W 6 6\3	 0 0 4 4566nRQ///zzceaiz00!##[__F_<< 	6 	6z1BCCC 6 6,-B   555	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 rz&!!""a''''''sZ   B(ED- *D
D-DD-DD-!E-D1	1E4D1	5EEEc                     ddl m}  t          j        g dg dd          }t	          j        |g d          }t          |dd          } | ||           d S )	Nr   rj   r   r   r   r!   r*   r+   )r   r   r   r   r   r!   r   )r   r!   r*   r2   )r   r   r*   )rl   rk   rU   r<   r;   repartitionr   )rk   Ar$   rb   s       rF   .test_rearrange_by_column_with_narrow_divisionsr     sr    777777
---4F4F4FGGHHA
q)))$$A	3		2	2BGBNNNNNrH   c                   dd l }t                      } |            }t          |j         |j                  sJ t	          j        t	          j        |                    }|j        rJ  |            }t          |j         |j                  sJ t          |           } |            }t          |j         |j                  sJ t          | 
                                          }t          |          dk    sJ |d         j        dk    sJ |d         j        | k    sJ t	          j        t	          j        |                    }	|	j        rJ |	j        | k    sJ d S )Nr   )tempdirr   z.partd)partdr   r:   BufferpickleloadsdumpsbufferFiler[   iterdirrZ   suffixparentr"  )
tmp_pathr#  r   p1f2p2f3p3contentsf4s
             rF   test_maybe_buffered_partdr5    sZ   LLLA	
Bbh-----	fl1oo	&	&By	Bbh
+++++	h	/	/	/B	Bbh-----H$$&&''Hx==AA;))))A;))))	fl2&&	'	'By:!!!!!!rH   c                    t          j        dg dig d          } t          j        | d          }d }t          j                            |          5  |                    dg d	
          }d d d            n# 1 swxY w Y   |j        d	k    sJ |                     d          }t          ||           t          j        t                    5  |                    dg d
           d d d            d S # 1 swxY w Y   d S )Nr2   )r!   r   r   r*   )rO   rg      (   r'   r   rP   c                     t                      rJ   	Exceptionargskwargss     rF   throwz5test_set_index_with_explicit_divisions.<locals>.throw  s    kkrH   rw   )r   r   r*   	divisions)r   r   r*   )rU   r<   r;   rX   r>   r  rA   r   rA  r   r   r  r  )rb   rc   r?  r   r   s        rF   &test_set_index_with_explicit_divisionsrB    s   	sLLL)1A1A1A	B	B	BB
.
+
+
+C   
5	)	) 7 7}}SIII}667 7 7 7 7 7 7 7 7 7 7 7 7 7 7>Y&&&&
,,s

CdC 
z	"	" 0 0cYYY///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s$   A<<B B C99C= C=c                     t          j        dg di          } t          j        | d          }t	          j        t                    5  |                    dg            d d d            d S # 1 swxY w Y   d S )Nr2   r   r   rP   r@  )rU   r<   r;   rX   r   r  r  r   rb   rc   s     rF   #test_set_index_with_empty_divisionsrE    s    	sLLL)	*	*B
.
+
+
+C 
z	"	" ) )cR((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   A--A14A1c                 8   t          j        g dt          d          d          } t          j        | d          }|                    dg d          }|j        dk    sJ t          |                    d	          j        d
d                    ddgk    sJ d S )Nr  abdabdr   r   rE   )r$   r   r9   r@  rv   rw   r9   )	rU   r<   r[   r;   rX   r   rA  rY   r(   )rb   rc   r  s      rF   test_set_index_divisions_2rI    s    	...T(^^DD	E	EB
.Q

C]]3///]::F....006rss;<<c
JJJJJJrH   c                 @   t                               dg dd          } t                               dg dd          }t          | |           t          | t                              d                     t          |t                              d                     t	          | j                  t	          |j                  k    sJ t                               t           j        g dd          }t                               t           j        g dd          }t                                          }|j        |_        t          ||           t          ||           t          ||           t	          |j                  t	          |j                  k    sJ d S )Nr%   )r   r   r/   F)rA  rY   T)	r9   r   r   fullrZ   r>   r%   r   r(   )d2d3d4d5exps        rF    test_set_index_divisions_computerQ    sH   	
SIIIu	=	=B	
SIIIt	<	<Bb"b$..%%&&&b$..%%&&&rw<<#bg,,&&&&	
QSIIIu	=	=B	
QSIIIt	<	<B
))++CCIb"b#b#rw<<#bg,,&&&&&&rH   c                    t          j        g dg dd          } t          j        g dg dd          }t          j        g dg dd          }t          j        | ||dd	| g d
          }|                                }d }t          j                            |          5  |                    d	g dd          }d d d            n# 1 swxY w Y   t          ||                    d	                     t          j                            |          5  |                    dg dd          }d d d            n# 1 swxY w Y   t          ||                    d                     t          j
        t                    5  |                    dg dd           d d d            n# 1 swxY w Y   t          j
        t                    5  |                    dg dd           d d d            d S # 1 swxY w Y   d S )N)rO         )r$   r$   r$   r   )r         )r%   r%   r   )   rQ      )r9   r   r   r1   r2   )NNNNc                      t          d          )NzShouldn't have computedr:  r<  s     rF   r?  z.test_set_index_divisions_sorted.<locals>.throw  s    1222rH   rw   )rO   r   rW  rX  T)rA  ro   rE   )r$   r%   r9   r   )r$   r%   r   r9   r   )r$   r%   r9   r   )rU   r<   r;   rY   r>   r  rA   r   r   r   r  r  )r.  r0  r2  rc   rb   r?  r   s          rF   test_set_index_divisions_sortedrZ    sV   	LLL??	@	@B	LLL??	@	@B	LLL??	@	@B
,r22C=U=U=U C 
B3 3 3 
5	)	) J JmmC+;+;+;DmIIJ J J J J J J J J J J J J J Jc2<<$$%%%	5	)	) N NmmC+?+?+?mMMN N N N N N N N N N N N N N Nc2<<$$%%% 
z	"	" M Mc%>%>%>tLLLM M M M M M M M M M M M M M M 
z	"	" H Hc%9%9%9$GGGH H H H H H H H H H H H H H H H H HsH   &CCCEE	E	F00F47F4G<<H H c            	     p   t          j        t          j                            d          t          j                            d          dz  dt          j                            d                    } t	          j        | d          }|                                }t          j        d          }t          d|          5 }t          t          |d	
          }t          |                    |t          d                              }d d d            n# 1 swxY w Y   t          |          dk    sJ d S )NrN   r   r   r'   r!   rP   spawnr,   r2   )rb   idxr   )rU   r<   rV   rW   r;   rX   clear_divisionsmpget_contextr   r	   
_set_indexrA   r]   rangerZ   )rb   rc   ctxpoolfuncdivisions_sets         rF   #test_set_index_consistent_divisionsrg    sK    
is##")*:*:3*?*?3*FGGis##
 
 
B .
+
+
+C




C
.
!
!C	Q	$	$ 8zcs333DHHT5::66778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 }""""""s   ADDDc                6    |                     |          j        S rJ   )r   rA  )ry   rb   r]  s      rF   ra  ra  #  s    <<&&rH   c                    t          j        dt          j                            d          i          }t	          j        |d          }|                    d| d          }|j        dk     sJ d S )Nr2   rN   2   rP   auto)r   r=   rO   )rU   r<   rV   rW   r;   rX   r   r=   rC   rb   rc   r   s       rF   'test_set_index_reduces_partitions_smallrm  '  sk    	sBI,,S112	3	3B
.
,
,
,C==n&=IIDb      rH   c                    t          j        t          j                            |           t          j                            |           d          S Nr   rU   r<   rV   rW   )ns    rF   	make_partrr  /  s:    <bi..q11	8H8H8K8KLLMMMrH   c                    d}d}t          ||dz  z            t          j        fdt          |          D             dt	          d          d g|dz   z            }|                    d| d|          }d|j        cxk     rd	k     sn J d S )
N    .Arj  r,   c                (    i | ]}d |ft           fS r2   rr  r   ry   rq  s     rF   
<dictcomp>z;test_set_index_reduces_partitions_large.<locals>.<dictcomp>8  #    999a#qIq>999rH   r2   r   rk  r   r=   partition_sizerg   r   r;   r<   rb  rr  r   r=   )rC   nbytesnpartsrc   r   rq  s        @rF   'test_set_index_reduces_partitions_larger  3  s    FFFfqj!""A
,99995==999!	&1*	 C ==^   D t$$$$"$$$$$$$$rH   c                   d}d}t          ||dz  z            t          j        fdt          |          D             dt	          d          d g|dz   z            }|                    d| d|          }|j        |j        k    sJ d S )	Nr   rt  r,   c                (    i | ]}d |ft           fS rv  rw  rx  s     rF   ry  z=test_set_index_doesnt_increase_partitions.<locals>.<dictcomp>H  rz  rH   r2   r   rk  r{  r}  )rC   r  r~  rc   r   rq  s        @rF   )test_set_index_doesnt_increase_partitionsr  C  s    FFFfqj!""A
,99995==999!	&1*	 C ==^   D s......rH   c                
   t          j        t          d          t          d          d          }t          j        |ddd          }|                    d|           }t          |j                  |j        dz  k     sJ d S )	NrN   r   rO   r2   F)r=   r   r   r7   r!   )	rU   r<   rb  r;   rX   r   rZ   r>   r=   rl  s       rF   "test_set_index_detects_sorted_datar  S  sx    	E#JJU3ZZ88	9	9B
.#E
B
B
BC==n=55Dty>>COa///////rH   c            
     B   t          j        g d          } t          j        | d          } g d}g }t	          t          |                    D ]t}t          |d |                   }t          |||dz                      }|                    t          j        d| ||         it	          ||                               ut          j
        |                                          }|                    d          j                                        j        du sJ d S )	N):    ra r      li) r      PG r      /D     $;{lH r  r      r]:x r      .     L7%     ` r  r  r      XTwK     Vv;
M      2M r  r  r      4Sj r      g?     &q r  r      8^WK r      Ceo     JMzl r  r      F2y| r      zr r      ud r  r      ^J;p r  r      j{t r      R~%     4     dw' r  r  r      @z}Z r  r  r  nsunit)rO   $   :   r   	timestampr'   T)rV   arrayrU   to_datetimerb  rZ   r   r   r<   r;   concatr^  r   r(   rY   is_monotonic_increasing)valsbreaksdfsry   lohirc   s          rF   test_set_index_sortsr  [  s   8;	
 ;	
 ;	
= =D| >$T***D\\F
C3v;; R R__AE	"##

2<d2b5k :%B--PPPQQQQ
)C..
(
(
*
*C==%%+3355MQUUUUUUUrH   enginepandascudfc                2   | dk    rt          j        d          }t          j        g dg ddg d          t          j        g dg d	dg d
          t          j        g dg ddg d          d}t	          j        |dt
          g d          }| dk    r|                    |          }|                                }|                    dd          }|j	        dk    sJ |j
        j        dk    sJ t          ||                    d                     |                    |j        d          }|j	        dk    sJ |j
        j        dk    sJ t          ||                    |j                             |                    d          }|j
        j        dk    sJ t          ||                    d                     |                    dg          }|j
        j        dk    sJ t          ||                    dg                     d S )Nr  	dask_cudfr   )r!   r   r+   r#   r&   r'   r)   )r   r*   r,   r-   r.   )r/   r   r,   r0   r1   r2   r5   r%   r   rP   )r   r   rU   r<   r;   metafrom_dask_dataframerY   r   r=   r(   r   r   r%   )	r  r  dskr9   rK  rL  rM  rN  rO  s	            rF   test_set_indexr    s+     '44	 ,YYYYYY??yyyQQQ,YYYYYY??yyyQQQ,YYYYYY??yyyQQQ C
 	S#t\\\22A))!,,99;;D	
Sa	(	(B>Q8=Cb$..%%&&&	
QSa	(	(B>Q8=Cb$..(()))	
S		B8=Cb$..%%&&&	
cU		B8=Cb$..#''(((((rH   c                ~   | dk    r(t          j        d          }t          j        d          }t          j        g dg dd          }| dk    r-|                    |          }|                    |d          }nt          j        |d          }|                    d	d          }|j        dk    sJ t          |j
                  h d
k    sJ |                    dd          }|j
        d         dk    sJ d|j
        d         cxk     r|j
        d         cxk     rdk     sn J |j
        d         dk    sJ d S )Nr  r  )r!   r   r   r   r   )      ?r   r   r   r   r   r   rP   r   r2   >   r   r   r!   rE   r   r  r          @)r   r   rU   r<   rX   	from_cudfr;   r   r=   rA   rA  )r  r  r  rb   gdfr9   d1rL  s           rF   test_set_index_interpolater    sk     "6**'44		OOO2C2C2CDD	E	EBr""33N2q!!	
Sa	(	(B>Qr|			))))	
Sa	(	(B<?c!!!!a88882<?8888S888888<?c!!!!!!rH   c           	        | dk    r(t          j        d          }t          j        d          }t          t          t	          ddd                    dz            }t          j        dd|z  i          }| dk    r-|                    |          }|                    |d          }nt          j        |d          }|
                    dd          }t          d	 |j        D                       sJ d S )
Nr  r  r      rO   r   r2   rP   c              3  n   K   | ]0}t          j        t          |          t           j                  V  1d S rJ   )rV   
issubdtypetypeinteger)r   r2   s     rF   r   z1test_set_index_interpolate_int.<locals>.<genexpr>  s6      HHar}T!WWbj11HHHHHHrH   )r   r   ro   r[   rb  rU   r<   rX   r  r;   r   r   rA  )r  r  r  Lrb   r  r9   r  s           rF   test_set_index_interpolate_intr    s      "6**'44	tE!S"%%&&*++A	sAEl	#	#Br""33N2q!!	
Sb	)	)BHH2<HHHHHHHHHHrH   c                   | dk    r(t          j        d          }t          j        d          }	 t          j        dt	          j        ddgt          j                  i          }| dk    r-|                    |          }|                    |d          }nt          j        |d          }|
                    dd          }|j        dk    sJ t          |j                  ddhk    sJ d S )	Nr  r  r2   l   TH Dl   +7yDr   r   rP   )r   r   rU   r<   rV   r  uint64rX   r  r;   r   r=   rA   rA  )r  r  r  rb   r  r9   r  s          rF   %test_set_index_interpolate_large_uintr    s      "6**'44	 		bh*,>?ryQQQR
 
B r""33N2q!!	
Sa	(	(B>Qr|!35G HHHHHHHrH   c                    t          j        t          j        dd                    } t          j        t          j        ddd                    }t          j        || d          }t	          j        |d          }|                    d	d          }t          j        | j        | j	        
          }|j
        d         | d         cxk    r|d         k    sn J |j
        d         | d         cxk    r|d         k    sn J |                    dd          }t          j        ||j	        
          }|j
        d         |d         k    sJ |j
        d         |d         k    sJ |j
        d         j        |d         j        k    sJ |j
        d         j        J t          j        |j        | j	        
          }|j
        d         |d         k    rJ d S )Nr   r   r   r   r   )r   notzr   rP   r  r   r   r   r   )rU   Series
date_ranger<   r;   rX   r   DatetimeIndexr_   r   rA  r   )	s_naives_awarerb   r9   r  s1rL  s2	s2badtypes	            rF   test_set_index_timezoner  "  s   ij!<<<==Gij!MMMNNG	Wg66	7	7B
rq)))A	
V	+	+B		'.	>	>	>B<?gaj1111BqE111111<wqz2222RU222222 
Tq	)	)B		'	7	7	7B<?be####<r!u$$$$<?A))))<?))) w}EEEI|A)A,......rH   c                     t          j        t          j        g d                    } t          j        | d          } |                                                     dd          }|j        dk    sJ d S )Nr  r  r  r  r  r  r  r  r  Br  r  Cr'   r   rP   r(   r   )rU   r<   Indexr;   rX   reset_indexr   r=   )dataoutputs     rF   test_set_index_npartitionsr  9  s    <hMMM
 
  D
 >$A...D))'q)AAF""""""rH   r  r  usc                *   t          j        ddgddgddgddggd	d
g          }t          j        |j        |           |_        t	          j        |d          }|                    d	          }t          ||                    d	                     d S )Nl   9+wEG, r   l   !|IwEG, r   l   wwEG, r   l   a>hwEG, r   tsrankr   r  rP   )rU   r<   r  r  r;   rX   r   r   )r  rb   rc   s      rF   !test_set_index_datetime_precisionr  E  s     
q!q!q!q!		
 v
 
 
B N25t,,,BE
.
+
+
+C
--

Cc2<<%%&&&&&rH   TFc                   t          j        t          d          g dg dd          }t          j        |d          }t          |                    d|           |                    d|                      t          |                    d|           |                    d|                      t          |                    d	|           |                    d	|                      t          |                    |j        |           |                    |j        |                      t          |                    |j        |           |                    |j        |                      t          |                    |j	        |           |                    |j	        |                      t          j        t          d          g dg dd
          }t          j        |d          }t          |                    d|           |                    d|                      t          |                    d|           |                    d|                      d S )N
ABAABBABAA)
r   r   r   r!   r*   r+   r"   r,   r/   rO   )
r   r   r   r   r   r   r   r!   r   r   )r  r  r  r   r  r   r  r  )r   r   r   r   r   )
rU   r<   r[   r;   rX   r   r   r  r  r  )r   pdfrc   s      rF   test_set_index_dropr  Y  s,   
,l##000///	
 	
 C .a
 
 CcmmCdm++S]]3T]-J-JKKKcmmCdm++S]]3T]-J-JKKKcmmCdm++S]]3T]-J-JKKKcmmCEm--s}}SU}/N/NOOOcmmCEm--s}}SU}/N/NOOOcmmCEm--s}}SU}/N/NOOO ,L!!...---	
 	
 C .a
 
 CcmmADm))3===+F+FGGGcmmADm))3===+F+FGGGGGrH   c                    t          j        g dg dd          } t          j        | d          }d}t	          j        t                    5 }|                    ddg           d d d            n# 1 swxY w Y   |t          |j	                  v sJ t	          j        t                    5 }|                    ddgg           d d d            n# 1 swxY w Y   |t          |j	                  v sJ t	          j        t                    5 }|                    dgg           d d d            n# 1 swxY w Y   |t          |j	                  v sJ d S )N)r   r   r   r!   r*   r+   r"   )r"   r+   r*   r!   r   r   r   r#   r   z1Dask dataframe does not yet support multi-indexesr$   r%   )
rU   r<   r;   rX   r   r  NotImplementedErrorr   r   r   )rb   rc   msgerrs       rF   (test_set_index_raises_error_on_bad_inputr  x  s   	1118M8M8MNN	O	OB
.Q

C
>C	*	+	+ "ssCj!!!" " " " " " " " " " " " " " "#ci..    	*	+	+ $sSzl###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $#ci..    	*	+	+ sug              #ci..      s6   A00A47A4,CCCD11D58D5c                 r   t          j        g dg dg dd          } t          j        | dd          }|j        rJ |                    dd	
          }|j        sJ t          |j                                      t          |j                            sJ dD ]}t          |                    d|          |                     d|                     t          |                    |j
        d	|          |                     | j
        |                     t          |                    |j
        dz   d	|          |                     | j
        dz   |                     t          j        t                    5  |                    |j        d	
           d d d            d S # 1 swxY w Y   d S )Nr   rO   rg   rg   r8  r!   r   r   r   r   r   Fr   r2   Tro   r   r  )ro   r   r   )rU   r<   r;   rX   r   r   rA   r>   r  r   r2   r   r  r  r   )rb   r$   r%   r   s       rF   test_set_index_sorted_truer    s   	LLL/?/?/?lllSS	T	TB
r15)))A    	C%%Aqv;;AF,,,,, 
 
!++c+--r||Cd|/K/KLLLKKDtK44bll24dl6S6S	
 	
 	
 	KKa4K88LLL--	
 	
 	
 	

 
z	"	" & &	AC%%%& & & & & & & & & & & & & & & & & &s   F,,F03F0c                     t          j        g dg dd          } t          j        | d          }t	          |                    dd          |                     d                     d S )	Nr   )r   r   r   r   r   r   rP   r2   Tr  )rU   r<   r;   rX   r   r   rD  s     rF   &test_set_index_sorted_single_partitionr    sg    	LLL|||<<	=	=B
.
+
+
+CcmmCm--r||C/@/@AAAAArH   c                 L   t          j        g dg dd          } t          j        g dg dd          }t          j        |           }t          j        |          }t	          j        ||g|           }|j        rJ |                    dd          }|j        d	k    sJ d S )
Nr   )r   r   r   r   )r   r   r   )r  rE   Tr  )r   r   r   )	rU   r<   r>   delayedr;   from_delayedr   r   rA  )r$   r%   aabbrb   r   s         rF   "test_set_index_sorted_min_max_samer    s    
9999995566A
9999995566A	aB	aB	"b	*	*	*B!!!!
,,s4,
(
(C=I%%%%%%rH   c            
     &   g d} t           t          t          d g}|D ]t          j        fd| D             ddg          }t          j        t          j        |d          t          j        ||j        |j        	                                k             d          g          t          fd	t          j                  D                       sJ t                              d          |                    d                    sJ d S )
Nr   c                .    t          j        | d          S Nr  r  rU   r  rv  s    rF   <lambda>z0test_set_index_empty_partition.<locals>.<lambda>      R^AD-I-I-I rH   c                ,    g | ]} |          |d S r   rK   )r   ry   convs     rF   
<listcomp>z2test_set_index_empty_partition.<locals>.<listcomp>  s)    7774477##777rH   r2   rE   r   r   rP   c              3  p   K   | ]0}                     |                                          j        V  1d S rJ   )get_partitionrY   empty)r   r~   rc   s     rF   r   z1test_set_index_empty_partition.<locals>.<genexpr>  s@      XXA3$$Q''//117XXXXXXrH   )r   r   r   rU   r<   r;   r  rX   rE   maxanyrb  r=   r   r   )	test_vals
convertersrb   r  rc   s      @@rF   test_set_index_empty_partitionr    s'   		Iuc#I#IJJ @ @\7777Y777#s
 
 
 irq111r"$"34!DDD
 
 XXXXsAWAWXXXXXXXXs++R\\#->->??????@ @rH   	converterc                .    t          j        | d          S r  r  rv  s    rF   r  r    r  rH   c                     g d}t          j         fd|D                       }t          j        |d          }|j        dk    sJ ||j        |j                                        k                                 d          }||j        |j                                        k                                 d          }t          ||d          sJ |j        dk    sJ t          d	 |j
        D                       sJ ||j        |j                                        k                                 dd
          }t          ||d          sJ |j        dk    sJ t          d |j
        D                       sJ d S )Nr   c                ,    g | ]} |          |d S r  rK   )r   r2   r  s     rF   r  z+test_set_index_on_empty.<locals>.<listcomp>  s)    FFFqYYq\\22FFFrH   r!   rP   r   r2   F
check_freqc              3  >   K   | ]}t          j        |          V  d S rJ   rU   isnullr   r9   s     rF   r   z*test_set_index_on_empty.<locals>.<genexpr>  *      66ry||666666rH   Tr  c              3  >   K   | ]}t          j        |          V  d S rJ   r  r  s     rF   r   z*test_set_index_on_empty.<locals>.<genexpr>  r  rH   )rU   r<   r;   rX   r=   rE   r  r   r   r   rA  )r  r  rb   rc   actualexpecteds   `     rF   test_set_index_on_emptyr    s    I	FFFFIFFF	G	GB
.
+
+
+C?Q#$..s33F"$#$..s33HVX%888888""""66V%566666666#$..s4.@@FVX%888888""""66V%56666666666rH   c                 ^   t          t          t          j                            } t          t          j                  }t	          j        |           t          j        j        	                    | d          }t          j
        t          j        ||          dd          }t          j        |d                              d          }t          |          t          |          k    sJ t          j        |j        |          }t#          ||                                           d S )	NT)orderedr   r   r  r  r   rP   r  )r[   r   r   r   rW   r   rU   apitypesCategoricalDtyper<   Categoricalr;   rX   r   rZ   rA  r   sort_values)orderr_   r   rb   r  rA  s         rF   test_set_index_categoricalr)    s    &.//00E&&''F
N6FL))%)>>E	BN6???aHH	I	IB^BA...88==Fv;;#b''!!!! v/u===IY	(=(=(?(?@@@@@rH   c                 l   t          j        t          t          d                    g dg dd          } t	          j        | d          }||j        dk                                 dd	
          }| | j        dk                                 d          }|j        dk    sJ t          ||           d S )Nr,   )r   r   r   r   r   r   r!   r*   )r   r   r   r   r   r   r   r   r#   )r(   r  r!   r   r$   Tr  )r        @r+  )
rU   r<   r[   rb  r;   rX   r%   r   rA  r   rb   rc   r  r  s       rF   %test_set_index_with_empty_and_overlapr-    s    	588nn))))))
 

 
 
B .Q

C!_&&s4&88F"$!)}&&s++H....fhrH   c                     ddl m}  t          j        g dg dg ddg d          }t	          j        |d	d
          }|j        rJ  | t          |                    }t          ||d
           |j        sJ d S )Nr   )compute_and_set_divisionsr   r  r  r   )r   r   rO   rg   r'   r   Fr  check_divisions)	dask.dataframe.shuffler/  rU   r<   r;   rX   r   r   r   )r/  rb   r$   r%   s       rF   test_compute_divisionsr3    s    @@@@@@	ll!1!1!1EEnn
 
 
B 	r15)))A    !!$q''**AaE****rH   c                 t   t          j        dt          t          d                    i          } | d         dz  | d<   | d                             t
                    | d<   t          j        | d          }|                    d          }|	                    d          }|
                    d                                           t          ||                     d                     |                    d          }t          ||                     d                              d                     d S )Nr$   rO   r   r%   r   rP   r   )rU   r<   r[   rb  r   r   r;   rX   r   r  r
  rY   r   rD  s     rF   test_empty_partitionsr5    s   	sDrOO,	-	-BgkBsGgnnS!!BsG
.
+
+
+C
--

C
//a/
(
(Ca  """c2<<$$%%%
--

Cc2<<$$..s3344444rH   c                 v   t          j        dt          j        dd          i          } t          j        dt          j        dd          i          }t	          j        |d          }t	          j        | d          }t          j                            d	d
d          5  |	                    |dd          }|
                                }d d d            n# 1 swxY w Y   | 	                    |dd          }t          j        |                    d                              d          |           d S )NKEYr   iP       r   rP   i  tasksrv   )dataframe.shuffle.methodrx   inner)howonTr  )rU   r<   rV   aranger;   rX   r>   r  rA   mergerY   r   assert_frame_equalr'  r  )largesmalldd_leftdd_right	dd_mergedr  r  s          rF   test_gh_2730rG  !  sT   L%1e!4!4566EL%2s!3!3455EnU222G~e555H	gFSS	T	T % %MM(EMBB	""$$% % % % % % % % % % % % % % % {{5g%{88H&,,U33??T?JJHUUUUUs   !-CC!Crk  c                  	 t          j                    fdd d}d}t          ||dz  z            	fdt          |          D             }|                    	fdt          |          D                        t          j        |d d d	          d g|d	z   z            }|                    d| 
           t                    }||k    sJ d S )Nc                 &    t                      d S rJ   )next)counts   rF   	incrementzKtest_set_index_does_not_repeat_work_due_to_optimizations.<locals>.increment7  s    UrH   c                    t          j        t          j                            |          t          j                            |          d          S ro  rp  )dummyrq  s     rF   rr  zKtest_set_index_does_not_repeat_work_due_to_optimizations.<locals>.make_part:  s:    |")"2"21"5"5BI<L<LQ<O<OPPQQQrH   rt  rj  r,   c                    i | ]}d |ff	S )incrK   )r   ry   rL  s     rF   ry  zLtest_set_index_does_not_repeat_work_due_to_optimizations.<locals>.<dictcomp>A  s!    
;
;
;E1:	|
;
;
;rH   c                $    i | ]}d |fd|ffS )r2   rP  rK   )r   ry   rr  rq  s     rF   ry  zLtest_set_index_does_not_repeat_work_due_to_optimizations.<locals>.<dictcomp>B  s*    LLLa9uaj!4LLLrH   r2   r   rP   )		itertoolsrK  r   rb  updater;   r<   r   rJ  )
r=   r~  r  r  rc   ntimesrK  rL  rr  rq  s
         @@@@rF   8test_set_index_does_not_repeat_work_due_to_optimizationsrU  2  s    OE    R R R FFFfqj!""A
;
;
;
;U6]]
;
;
;CJJLLLLLeFmmLLLMMM
,sC4!3!3dVvz5J
K
KCMM#;M///%[[FVrH   c                 *   t          j        g dg dg dd          } t          j        | d          }|                    d           t          j        t                    5  |                    dd	           d d d            d S # 1 swxY w Y   d S )
N)r/   r,   r"   )r+   r*   r!   )r   r   r   r   r   rP   r$   T)inplace)rU   r<   r;   rX   r   r   r  r  rD  s     rF   (test_set_index_errors_with_inplace_kwargrX  J  s    	IIIIIIIIIFF	G	GB
.
+
+
+CMM#	*	+	+ ) )c4((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   #BBBc                 X   t          j        t          j        ddd          dd          } t          j        | d          }t          j        dd	          t          j        d
d	          f}|                     d          }|                    d|          }t          ||j                  D ]C\  }}|	                                |	                                k    sJ |j
        |j
        k    sJ Dt          ||d           t          ||                    d          d           d S )Nr   rT  z
US/Centralr   r   r"  r   z2000-01-01 00:00:00-0600r   z2000-01-12 00:00:00-0600r  r@  Fr  )rU   r<   r  r;   rX   	Timestampr   ziprA  	timetupler   r   )rb   rc   rA  r   ddf_new_divts1ts2s          rF   test_set_index_timestampra  T  s&   	BM&"NNNUVWW	X	XB
.Q

C
/LAAA
/LAAAI ,,s

C--y-99K	;#899    S}}#--//1111vc;51111c3==%%%888888rH   zEA Indexes not supported beforec                     t          j        dt          j        ddgd          d          } t          j        | d          }|                     d          }|                    d          }t          ||           d S )Nr   r   Int64r   r#   rP   r%   )rU   r<   r  r;   rX   r   r   )r  rc   
pdf_resultr   s       rF   test_set_index_ea_dtypere  g  sx    
,QRY1vW%E%E%EFF
G
GC
.!
,
,
,Cs##Js##Jj*%%%%%rH   compressionZLibc                    t           j                            d| i          5  t          d           d d d            d S # 1 swxY w Y   d S )Ndataframe.shuffle.compressionr   )r>   r  rA   rG   rf  s    rF   )test_disk_shuffle_with_compression_optionrk  p  s     
9;G	H	H  V                 s   ?AAUNKOWN_COMPRESSION_ALGOc                $   t           j                            d| i          5  t          j        t
          d                    |                     5  t          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nri  zxNot able to import and load {} as compression algorithm.Please check if the library is installed and supported by Partd.r   r   )r>   r  rA   r   r  ImportErrorformatrG   rj  s    rF   *test_disk_shuffle_with_unknown_compressionrp  w  s    
9;G	H	H 
! 
!]SSYSYT T	
 
 
 		! 		!    		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		! 		!
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
! 
!s5   /BA-!B-A1	1B4A1	5BB	B	c                     d }  | d           } | d          }t          |          t          |          k    sJ d S )Nc                   t          j        dt          t          d                    i          }|d         dz                      t
                    |d<   t          j                            d| i          5   t          dd                       }|
                    d|i           | r|j        j                            d          n|j                            d          }t          |d	          5 }|                                cd d d            cd d d            S # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )
Nr$   i'  {   r%   ri  F)r(  r"  r2   rb)rU   r<   r[   rb  r   r   r>   r  rA   r   r   r#  filenameopenread)rf  df1r.  ru  r   s        rF   generate_raw_partd_filezKtest_disk_shuffle_check_actual_compression.<locals>.generate_raw_partd_file  s   lCeEll!3!3455HsN**3//C[__={KLL 	  	 A%UDAAACCBIIsCj!!! 1<W'',,,ARARSVAWAW  h%%  vvxx             	  	  	  	  	  	  	  	                  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s7   8A<D:4D!D:!D%	%D:(D%	)D::D>D>rj  BZ2rZ   )ry  uncompressed_datacompressed_datas      rF   *test_disk_shuffle_check_actual_compressionr~    sb          0/DAAA--%@@@O !!C$8$8888888rH   ignore_index)NTFr>  r   r   rS   c                (   t           j                            ddt          t          t
          dddt           d          }t          | t                    r|| g                                         }n||                                          }|	                    | |||          }|	                    |||	          }t          ||| 
           |r$|dk    r|j        j        |j        j        k    sJ d S |j        j        |j        j        k    sJ d S )Nr   2001r   r   r   r   )r$  r   r   r   )r   r  rS   )r   r  check_indexr:  )r>   datasets
timeseriesr   r   r   r   r:   r   r   r   r(   r   )r>  r  rS   rC   df_inext_ondf_out_1df_out_2s           rF   test_dataframe_shuffle_on_argr    s*    M$$s#662xx %  E "c "t!!##r!!}}
N*   H }}V^,}WWHh</?AAAA  9'11~#u{'8888888~#u{'8888888rH   c                    t          j        g dt          d          d          } t          j        | d          }|                    dd          }|                    |j        	          }t          ||           d S )
Nr   r   r   r!   r!   r*   r+   r"   abcdabcdkeyr   r   rP   r  Tr  r@  )	rU   r<   r[   r;   rX   r   r  rA  r   )r  r$   r%   s      rF   test_set_index_overlapr    sw    
555Z@P@PQQRRA
qa(((A	E$''A	,,AaOOOOOrH   c                    t          j        t          j        g dd                    } t          j        | d          }|                                                    d                              dd	          }|                                                     d          }t          ||           |j	        dk    sJ d S )
Nr  r(   r   r'   r   rP   r,   Tr  )
rU   r<   r  r;   rX   r  r  r   r   r=   r,  s       rF   test_set_index_overlap_2r    s    	hMMM
 
 

 
 
B .
+
+
+C__**1--777MMF~~))'22Hfh""""""rH   c                     t          j        g ddd          } t          j        | d          }|                     d          }|                    dd          }t          ||           d S )	N)r   r   r   r   r   r   r   r   abc)r  r   r   rP   r  Tr  )rU   r<   r;   rX   r   r   )rb   rc   r  r  s       rF   @test_set_index_overlap_does_not_drop_rows_when_divisions_overlapr    sp    	555FF	G	GB
.
+
+
+C||D!!H]]4]--FhrH   c                    t           t           j        dk                                 d          } |                     d          }|dk    sJ || _        t          | | d           t           t           j        dk                                 d          } |                     d          }|dk    sJ || _        t          | | d           d S )Nr   r$   )r!   r*   r,   r/   Fr0  r   )r   r!   r"   r/   )r9   r$   r'  compute_current_divisionsrA  r   )r$   rA  s     rF   ,test_compute_current_divisions_nan_partitionr    s    	!#'
s##A++C00I$$$$AKaE**** 	
!#'
s##A++C00I$$$$AKaE******rH   c                    t          j        g dt          d          d          } t          j        | d          }t          j        t          d          5  |                    d          }|	                    d|	          }|j
        d
k    sJ d |j        D             ddgk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r   rP   "Partitions have overlapping valuesr   r  r@  r    c                ,    g | ]}t          |          S rK   r{  )r   r~   s     rF   r  z:test_compute_current_divisions_overlap.<locals>.<listcomp>  s    ---1A---rH   r   r*   )rU   r<   r[   r;   rX   r   r   r   r  r   rA  
partitions)r  r$   rA  r%   s       rF   &test_compute_current_divisions_overlapr    s   
555Z@P@PQQRRA
qa(((A	k)M	N	N	N 8 8//66	KKK33{i''''-----!Q77777	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   AB99B= B=c                 f   t          j        t          j        g dd                    } t          j        | d          }|                                                    d          }t          j        t          d	          5  |
                                 d d d            d S # 1 swxY w Y   d S )
Nr  r(   r  r'   r   rP   r,   r  r   )rU   r<   r  r;   rX   r^  r  r   r   r   r  )r  ddf1r   s      rF   (test_compute_current_divisions_overlap_2r    s    <hMMM
 
 
  D >$A...D!!--a00D	k)M	N	N	N ) )&&((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   B&&B*-B*c            
       	 t          j        t          j        dt          j                            ddd          i          d          } |                     ddd          		fd	t          	j	                  D             }	
                                }|                    t          |                    }t          |t          j        j                  sJ t#          d
 |j                                        D                       sJ |j                                        D ]3}t          |t           j        j                  rt+          |d          rJ 4t-          |          t-          |          k     sJ |j                                        D ];\  }}t          |t           j        j                  r|                    d          sJ <t3          |          }t          ||          \  }}||k    sJ d S )Nr$   r   rO   rN   rP   r   r:  r   c                "    g | ]}j         |fS rK   )r@   )r   ry   ddf_shuffleds     rF   r  z*test_shuffle_hlg_layer.<locals>.<listcomp>  s!    MMM\#MMMrH   c              3  T   K   | ]#}t          |t          j        j                  V  $d S rJ   )r:   r;   r   ShuffleLayer)r   layers     rF   r   z)test_shuffle_hlg_layer.<locals>.<genexpr>  sB        7<
5"*122     rH   _cached_dictzshuffle-)r;   rX   rU   r<   rV   rW   randintr   rb  r=   __dask_graph__r   rA   r:   r>   highlevelgraphHighLevelGraphr  layersr_   r  hasattrrZ   items
startswithdict)
rc   keysr  
dsk_culledr  r   dsk_dictdsk_dict_culled_r  s
            @rF   test_shuffle_hlg_layerr  	  s    .
c29,,QC889::  C ;;sq';BBLMMMMU<3K-L-LMMMD 
%
%
'
'C#d))$$Jj$"5"DEEEEE   @C
@Q@Q@S@S       
 ""$$ 6 6eRZ455 	6un55555 z??SXX%%%% z'')) / /eeRZ455 	/??:..... JHh--OQh&&&&&&rH   c            
        t          j        t          j        dt          j                            ddd          it          j                            d                    d          } |                     | d         dz  dd	          }|                                }|j	        
                                D ]C}t          |t           j        j                  r"|j        d
         j        t          j        k    sJ Dd S )Nr$   r   rO   rN   r'   rP   r   r:  r   r   )r;   rX   rU   r<   rV   rW   r  r   r  r  r_   r:   r  
meta_inputr   int64)rc   r  r  r  s       rF   "test_shuffle_partitions_meta_dtyper  1  s    
.
c29,,QC889AQAQRUAVAVWWW  C
 ;;s3x"}G;LLL

%
%
'
'C""$$ E EeRZ455 	E#M28BHDDDDE ErH   rO   c           
        t          j        t          j        dt          j                            ddd          i          |           }|                    ddd          }|                                }|j	        
                                D ]}t          |t           j        j                  s"t          |d	          rJ t          j        t          j        |                    }t#          |          t#          |          k    sJ t          |d	          rJ |                                |                                k    sJ d S )
Nr$   r   rO   rN   rP   r   r:  r   r  )r;   rX   rU   r<   rV   rW   r  r   r  r  r_   r:   SimpleShuffleLayerr  r%  r&  r'  r  r  )r=   rc   r  r  r  layer_roundtrips         rF    test_shuffle_hlg_layer_serializer  @  s;    .
c29,,QC889::  C ;;sq';BBL 
%
%
'
'C""$$ 6 6%!>?? 	5.11111 ,v|E':':;;O$$U3333?N;;;;;##%%555556 6rH   c                 B   t           t           j        dk                                 d           t           t           j        dk                                 dd           t           t           j        dk                                 dd          } t          | |            d S )Nr   r$   r   Tr  )r9   r$   r   r   )r$   s    rF   test_set_index_nan_partitionr  [  sv    acAgJacAgJT***	!#'
S..AaOOOOOrH   c                    g ddz  g ddz  ddgdz  d} t          j        d	d
d          t          j        d          z
  }t          j        | |          }t	          j        |d          }|j        j                            d          }|	                    |          }t	          j        t          j        | |                    d                    d          }t          ||           t          j        d          }|	                    |j        |z             }t	          j        t          j        | ||z             d          }t          ||           t	          j        t          j        |           d          }	|	                    |	j                  }
t	          j        t          j        |           d          }t          |
|           d S )Nr   r   rO   rg   r7  r!   AliceBobr+   )r2   rE   r   
2022-02-2216hrT  startr   r   r7  secondsr'   rP   Dr   days)rU   r  	Timedeltar<   r;   rX   r(   r   floorr   r   )r_   
date_indexrb   rc   	day_indexday_dfr  one_daynext_day_dfno_datesrange_dfs              rF   !test_set_index_with_dask_dt_indexr  b  s   \\A\\A% 1$ F
   
R   !J 
fJ	/	/	/B
.
+
+
+C 	""3''I]]9%%F~
V:#3#3C#8#8999q  H fh l"""G--	G 344K~
V:#7888a  H k8$$$ ~bl622BBBH}}X^,,H~bl622BBBHh!!!!!rH   c            	        t          j        ddd          t          j        d          z
  } t          j        d          }t          j        g d	d
z  g ddz  ddgdz  | |z   | |dz  z   d|           }t	          j        |d
          }|                    |j        |z             }|                    |j        |z             }t          ||           d S )Nr  r  rT  r  r7  r  r   r  r   r   r  r!   r  r  r+   r*   )r2   rE   r   r  rL  r'   rP   )	rU   r  r  r<   r;   rX   r   rL  r   )datesr  rb   rc   r   r  s         rF   (test_set_index_with_series_uses_fastpathr    s   M5"EEEI I I E l"""G	!!e$q('/'A+%	
 	
 	
 	
 	
B .
+
+
+C
--(
)
)C||BEGO,,Hc8rH   c            
        t          j        t          j        dt          j                            ddd          it          j                            d                    d          } |                     dd          } |                                 }|j	        
                                D ]C}t          |t           j        j                  r"|j        d	         j        t          j        k    sJ Dd S )
Nr$   r   rO   rN   r'   rP   r:  r7   r   )r;   rX   rU   r<   rV   rW   r  r   r  r  r_   r:   r   r  r  r   r  rc   r  r  s      rF   $test_set_index_partitions_meta_dtyper    s    
.
c29,,QC889AQAQRUAVAVWWW  C
 --W-
-
-C




C""$$ E EeRZ:;; 	E#M28BHDDDDE ErH   c                    t           j                            ddi          5  t          j        t          j        t          j        	                    ddd          t          j        	                    ddd          dt          j                            d                    d          } | 
                    d	d
                              d          } |                                 }|j                                        D ]C}t          |t          j        j                  r"|j        d         j        t          j        k    sJ D	 d d d            d S # 1 swxY w Y   d S )Nr;  r:  r   rO   rN   r#   r'   rP   r$   r7   r%   r   )r>   r  rA   r;   rX   rU   r<   rV   rW   r  r   r'  r  r  r_   r:   r   r  r  r   r  r  s      rF   5test_sort_values_partitions_meta_dtype_with_divisionsr    s   	4g>	?	? I InL**1b#66**1b#66  i&&s++   	
 	
 	
 mmCm11==cBB  ""Z&&(( 	I 	IE%!>?? I'6<HHHH	I!I I I I I I I I I I I I I I I I I Is   D$EEE	ascendingbyr$   r%   nelemr9  c                ,   t           j                            d           t          j                    }t          j        t          j        |           d d d                   |d<   t          j        d| dz             |d<   t          j        |d          }t          j
                            d	          5  |                    ||
          }d d d            n# 1 swxY w Y   |                    ||
          }t          j        ||dd           d S )Nr   r  r$   rN   r%   rO   rP   single-threadedrw   r  r  F)r  r   rV   rW   r   rU   r<   ascontiguousarrayr?  r;   rX   r>   r  rA   r'  r   r  r  r  rb   rc   gotexpects          rF   test_sort_valuesr    s0    INN1	B"29U#3#3DDbD#9::BsGiUS[))BsG
.
,
,
,C 
#4	5	5 : :ooyo99: : : : : : : : : : : : : : :^^rY^77FLf%eDDDDDD   6CC!Cbackendr   c                   | dk    rt          j        d           t          j        t	          d          g ddz  ddgdz  d	          }t          j        |d
                              |           }|                    ||          }t
          j                            |||d          }t          j	        ||d           d S )Nr  r  rO   r   r   r   dogr*   r   rP   r  r:  )r  r  r   Fr   )
r   r   rU   r<   rb  r;   rX   
to_backendr'  r   )r  r  r  r  rc   r  r  s          rF   test_sort_values_tasks_backendr    s     &K(((
,Biiooo18JKK C ."
-
-
-
8
8
A
AC__i_88F
,
"
"32G
"
T
TCLf5111111rH   c                *   t           j                            d           t          j                    }t          j        t          j        |           d d d                   |d<   t          j        d| dz             |d<   t          j        |d          }t          j
                            d	          5  |                    ||
          }d d d            n# 1 swxY w Y   |                    ||
          }t          j        ||d           d S )Nr   r  r$   rN   r%   r   rP   r  rw   r  Fr  r  r  s          rF   !test_sort_values_single_partitionr    s.    INN1	B"29U#3#3DDbD#9::BsGiUS[))BsG
.
+
+
+C 
#4	5	5 : :ooyo99: : : : : : : : : : : : : : :^^rY^77FLf%000000r  na_positionfirstlastr  r*   r  rj  rN      rV  rg   c                X   t          j        |           }t          j        ||          }t          j                            d          5  |                    |||          }d d d            n# 1 swxY w Y   |                    |||          }t          j        ||d           d S )NrP   r  rw   )r  r  r  Fr  	rU   r<   r;   rX   r>   r  rA   r'  r   )	r  r  r  r  r  rb   rc   r  r  s	            rF   test_sort_values_with_nullsr    s    $ 
d		B
.
0
0
0C 
#4	5	5 S SooykoRRS S S S S S S S S S S S S S S^^rYK^PPFLf%000000s   A00A47A4c                     t          j        dg di          } t          j        | d          }t	          j        t          d          5  |                    dd           d d d            d S # 1 swxY w Y   d S )	Nr$   r   r   r   r   rP   z,na_position must be either 'first' or 'last'r   invalid)r  r  )rU   r<   r;   rX   r   r  r  r'  rD  s     rF   test_shuffle_values_raisesr    s    	sIII&	'	'B
.
+
+
+C	H
 
 
 7 7 	3I6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   
A//A36A3c                 b   t          j        dg di          } t          j        | d          }t          j                            d          5  |                    dgdd	          }d d d            n# 1 swxY w Y   t          j        dg d
i          }t          j        ||d           d S )Nr$   r  r   rP   r  rw   rk  T)r  r=   r  r   Fr  r  )rb   rc   r  r  s       rF   test_shuffle_by_as_listr    s    	sIII&	'	'B
.
+
+
+C	#4	5	5 L Loo#FdoKKL L L L L L L L L L L L L L L\3			*++FLf%000000s   A55A9<A9c                 ^    t          dd           dk    sJ t          dd           dk    sJ d S )Nr   test)r   rK   rH   rF   	test_noopr  "  s<    D>>Q&((((((rH   c                   t          j        g ddz  g ddz  d          }t          j        ||          }d }t          j                            d	          5  |                    | d
         |d| i          }d d d            n# 1 swxY w Y   |                    |           }t          j        ||d           d S )Nr   rg   r!   r*   r+   r"   rV  r#   rP   c                2    |                      |||          S )N)r  r  )r'  )	partition
by_columnsr  r  r>  s        rF   r   z+test_sort_values_custom_function.<locals>.f-  s&    $$) % 
 
 	
rH   r  rw   r   r	  )r  sort_functionsort_function_kwargs)r  Fr  r  )r  r  rb   rc   r   r  r  s          rF    test_sort_values_custom_functionr  '  s    
IIIN1BCC	D	DB
.
0
0
0C
 
 
 
#4	5	5 
 
oo!uA\2<N  
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ^^r^""FLf%000000s   !BBBc                 
   t          j        g ddz  g ddz  d          } t          j        | d          }t	          j        t                    5  |                    dd	d
g           d d d            d S # 1 swxY w Y   d S )Nr   rg   r  rV  r#   rO   rP   r$   TFr  )rU   r<   r;   rX   r   r  r  r'  rD  s     rF   test_sort_values_bool_ascendingr  ;  s    	IIIN1BCC	D	DB
.
,
,
,C 
*	+	+ 9 934-8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   A88A<?A<c                   t           j                            t          j        dd          ddgt          j        dd          ddgt          j        d	d          d
dgt          j        dd          ddgt          j        dd          ddgt          j        dd          ddgt          j        dd          ddgt          j        dd          ddgt          j        dd          ddgt          j        dd          ddgt          j        dd          d d!ggg d"#          }t	          j        || $          }|                    d%          }|                    d%          }t          ||           d S )&Nz2002-01-11 21:00:01+0000UTCrZ  i  g    @z2002-01-14 21:00:01+0000i  g    @z2002-01-15 21:00:01+0000i1  g    @z2002-01-23 21:00:01+0000iu  g    (@z2002-01-29 21:00:01+0000i  g     @z2002-02-01 21:00:01+0000i  g    @i  g    @ig  g    n@z2002-01-22 21:00:01+0000g   g    `#@z2002-01-30 21:00:01+0000iA  g    @@z2002-01-31 21:00:01+0000i/  g     {@)r   id1id2r   rP   r   )rU   r<   from_recordsr[  r;   rX   r'  r   )r=   rb   rc   r  r  s        rF   test_sort_values_timestampr  D  s    
	"	"\4???wO\4???wO\4???P\4???wO\4???wO\4???vN\4???wO\4???wO\4???gN\4???P\4???wO	
 '&& 
# 
 
B  .
5
5
5C__V$$F~~f%%HfhrH   zpdf,expectedaabbccxyyyzzr   )r$   r%   r   r   )r   r   r   r   r!   r*   r"   r,   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,   r   )r*   r+   r"   rO   NrO   r   Nr,   r!   N)r        @g@       @      $@)g      @r  r  r  )g      @r  r  r  c                    t          j        | d          }t          ||d         dd          \  }}}}||d         k    sJ ||d         k    sJ ||d         k    sJ ||d         k    sJ d S )	Nr!   rP   r2   Fr   r   r   r   )r;   rX   r   )r  r  rc   rA  minsmaxes	presorteds          rF   test_calculate_divisionsr   ]  s    8 .!
,
,
,C(<S#c(EST(U(U%ItUI####8A;HQK######rH   zNeed pyarrowz!dtype support not good before 2.0zdata, dtyper      a   bzbinary[pyarrow]r   zint64[pyarrow]zfloat64[pyarrow]zuint64[pyarrow]i  i  rT     zdate32[pyarrow]z
2022-01-01z
2023-01-02ztimestamp[ns][pyarrow]5z6.24
decimal128z1 dayz20 dayszduration[ns][pyarrow]ztime64[ns][pyarrow]c                V   |dk    r't          j        t          j        dd                    }t          j        dt          j        | |          d          }t          j        |d          }|                    d          }|                    d          }t          ||           d S )	Nr%  rO   r   r   r   )r$   	arrow_colrP   r'  )
rU   
ArrowDtypepar%  r<   r  r;   rX   r   r   )r  r   r  rc   rd  r   s         rF   test_set_index_pyarrow_dtyper*    s    0 bmB2233
,QRYt5-I-I-IJJ
K
KC
.!
,
,
,C{++J{++Jj*%%%%%rH   )
__future__r   rR  multiprocessingr_  r  r%  rW   r   r
  concurrent.futuresr   r   datetimer   r   decimalr   	functoolsr	   unittestr
   numpyrV   r  rU   r   r>   dask.dataframe	dataframer;   	dask.baser   dask.dataframe._compatr   r   r   r   r   r   r2  r   r   r   r   r   r   r   dask.dataframe.utilsr   r   dask.optimizationr   r   r)  rn  r<   r  r  r  r9   rY   rK  r8   rG   rL   re   rh   rm   rs   rz   r   r  r  r   r  timedelta_ranger   r   r   markparametrizeparamslowr   skipifr   r   r   r   r   r   r   r   r  r  r  r  r   r5  rB  rE  rI  rQ  rZ  rg  ra  rm  rr  r  r  r  r  gpur  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r)  r-  r3  r5  rG  rU  rX  ra  re  rk  rp  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r[   rb  r   r  r  r  r  r  r  r  r   r[  r  r*  rK   rH   rF   <module>r@     s   " " " " " "         				     2 2 2 2 2 2                                                 . . . . . .                                 6 5 5 5 5 5 5 5 " " " " " "   	BBB bl;;999MMMbl;;999MMMbl;;999MMM 
 y
T("(2t"4"4,",..   BLc4..yy{{D D D8 8 8
V 
V 
V
V 
V 
V  H H HT T T& & & blrx			AW555rx(((1,I>>>ry1,--44Z@@ry1,--,,,q011bij!<<<===2=Q<PPPQQbi**61===>>	 	 # # #&   Aq!\V\"FK4DEEEF X X X8 X    CCC M M  M ) ) )  2 #TT. . .	/ 	/ 	/ //=119 9 21 0/94+ + + y+&>??F F @?F(( ( (( ( (( ( ((  " " ".0 0 0() ) )K K K' ' '&H H H< # # # ' ' '! ! !N N N% % % / / / 0 0 0KV KV KV\ xfFKODDDE #) #) #)L xfFKODDDE " " "4 xfFKODDDE I I I* xfFKODDDE I I I0/ / /.	# 	# 	# $..' ' /.'& $//H H 0/H<! ! !$& & &.B B B& & &@ @ @& #uc#I#IJ 7 7 7*A A A      "   5 5 5  V V V  v77  87.) ) )9 9 9& %.OPP& & QP& v77  87 )B(CDD! ! ED!9 9 9. )<)<)<==4$D&>)B)B
C  ay119 9 21  >=
9<  # # #     + + + 8 8 8
) 
) 
)%' %' %'PE E E 
	 6 6 6(   "  "  "F  ,E E EI I I, tUm44S3*5662s),,E E -, 76 54E ,&,vV[_EEEF  S3*sCjABBtUm44
2 
2 54 CB 

2 tUUDMD%=&QRRc
S#J7882s),,1 1 -, 98 SR1 &(9::tUm44S3*566Aq6**
 eeBiiD6B;.eeBnn1E1EE#UU3__ 5 55	
 	

 eeBiiD6A:-hhuuRyy))**	
 	
	 1 1  +* 76 54 ;:"17 7 71 1 1) ) )
 c
S#J788Ar7++1 1 ,+ 981$9 9 9 A//    0/ 0  BLttH~~DDNNCCDD!!!#7#7#79M9M9MuU	

 BL:::<<<   __lllLLL%@	
 BL#KKKLMM888%%%%%%		
 6$ $7 6$ B$J~66%.QRR
s&'
() Q!"
Q#$
Q"#
$tQ

DDr2..	/1BCR\,''l)C)CD$	
 '#,,	(,7
",w

i!8!8	9;RS
$r1++ttAr{{	#%:;! *& &+  SR 76.& & &s   B B%$B%