
    PiS                        d dl m Z  d dlZd dlZd dlmZ d dlmZ d dlZ	d dlm
Z
mZmZmZ d dlmZ  G d d          Zej                            d e d	d
d
           e d	d
d          f e	j        dd           e	j        dd          f e	j        d           e	j        d          f e	j        d d
           e	j        ddd          fg          d             Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    )datetimeN)find_common_type)is_dtype_equal)	DataFrameIndex
MultiIndexSeriesc                   |   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                            d eddd           eddd           eddd          gej        ej        ej        g eddd           eddd           eddd          gfej        ej        ej        g eddd           eddd           eddd          g eddd           eddd           eddd          gf eddd          ej        ej        g eddd           eddd           eddd          g eddd           eddd           eddd          gf eddd           eddd           eddd          g eddd          ej        ej        g eddd           eddd           eddd          gff          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            dddg          d             Zd Z ej                            d d!          d"             Z!d# Z"d$S )%TestDataFrameCombineFirstc                    t          ddgt          d                    }t          t          d          t          d                    }t          ||d          }t          ddgt          dd                    }t          t          d          t          dd                    }t          ||d          }t          t          d          g d	dg d
          }|                    |          }t          j        ||           d S )Nab   indexAB      abab)r      r   r   r   r   r      )r	   ranger   listcombine_firsttmassert_frame_equal)selfr   r   fgexpcombineds          /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/tests/frame/methods/test_combine_first.pytest_combine_first_mixedz2TestDataFrameCombineFirst.test_combine_first_mixed   s    C:U1XX...588588,,,AA&&''C:U1a[[1115885A;;///AA&&''d6ll>>lllSSS??1%%
h,,,,,    c                    |d d         |dd          }}|                     |          }|                    |j                  }t          j        ||           t          j        |j        |j                   t          j        |d         |d                    t          j        |d                             |j                  |d                    t          j        |d                             |j                  |d                    d S )Nr   r   )r   reindexr   r   r   assert_index_equalcolumnsassert_series_equal)r    float_frameheadtailr$   reordered_frames         r%   test_combine_first_disjointz5TestDataFrameCombineFirst.test_combine_first_disjoint!   s     !_k!""od%%d++%--hn==
h888
h.0CDDD
x}oc.BCCC
x}44TZ@@$s)LLL
x}44TZ@@$s)LLLLLr'   c                    |                                 }d|d<   |d= |                                 }d|d<   |d= |                    |          }|d         dk                                    sJ t          j        |d         |d                    t          j        |d         |d                    t          j        |d         |d                    d S )Nr   r   Cr   r   D)copyr   allr   r,   )r    r-   fcopyfcopy2r$   s        r%   test_combine_first_same_indexz7TestDataFrameCombineFirst.test_combine_first_same_index-   s      ""c
#J!!##s3K&&v.."'')))))
x}eCj999
x}fSk:::
x}eCj99999r'   c                 h   |d d                              |dd                    }|                    |j                  }|d d                                         |                                }}d|d<   |                     |          }|d         d d         dk                                    sJ d S )Nr   
   r   r   )r   r)   r   r5   r6   r    r-   r$   r0   r.   r/   s         r%   test_combine_first_overlapz4TestDataFrameCombineFirst.test_combine_first_overlap=   s    rr?00QRRAA%--hn==$SbS)..00/2F2F2H2HdS	%%d++crc"a',,.......r'   c                    |d d                              |dd                    }|                    |j                  }|d d                                         |}}d|j        d d|j                            d          f<   |                     |          }|d         d d         dk                                    sJ d S )Nr   r;   r   r   )r   r)   r   r5   ilocr+   get_locr6   r<   s         r%   "test_combine_first_reverse_overlapz<TestDataFrameCombineFirst.test_combine_first_reverse_overlapE   s    rr?00QRRAA%--hn==$SbS)..00/d45	#2#t|++C0001%%d++crc"a',,.......r'   c                    |                     t                                }t          j        ||           t                                           |          }t          j        ||                                           d S )N)r   r   r   r   
sort_indexr    r-   combs      r%   test_combine_first_with_emptyz7TestDataFrameCombineFirst.test_combine_first_with_emptyN   sh    ((55
dK000{{((55
dK$:$:$<$<=====r'   c                 f    |                     t          ddg                    }d|j        v sJ d S )Nfazboor   )r   r   r   rD   s      r%   !test_combine_first_with_new_indexz;TestDataFrameCombineFirst.test_combine_first_with_new_indexU   s=    ((%)H)H)HII
""""""r'   c                     t          ddgit          ddd          g          }t          dg          }|                    |          }d|v sJ d S )Nr   r   i  r   r   r+   )r   r   r   )r    dfdf2results       r%   test_combine_first_column_unionz9TestDataFrameCombineFirst.test_combine_first_column_unionY   s_    aSz(4A*>*>)?@@@&&&!!#&&f}}}}}}r'   c                    t          g d          }t          g d|          }t          g d|          }t          g d|          }t          |||d          }t          g d          }t          g d|          }t          g d|          }t          g d|          }t          |||d          }|                    |          }t	          |j                  dk    sJ d S )	N)r   r   ce)      @g      "      @g      Y@r   )      r   a   )col0col2col3)r   r   rR   r!   )col1rZ   col5r   )r   r	   r   r   lenr+   )r    idxser1ser2ser3frame1frame2r$   s           r%   test_combine_first_mixed_bugz6TestDataFrameCombineFirst.test_combine_first_mixed_bug`   s   ((())---S999***#666nnnC000D$EEFF((())---S999***#666nnnC000D$EEFF''//8#$$))))))r'   c                 L   t          g dg dgg d          }t          ddggdgddg	          }|                    |          }t          j        ||           t          j        |j        d
<   |                    |          }d|j        d
<   t          j        ||           d S )N)      ?       @FT)rU   rT   TF)r   r   bool1bool2rL   -   r   r   r   r   r+   )r   r   )r   r   r   r   npnanloc)r    rM   otherrO   s       r%   $test_combine_first_same_as_in_updatez>TestDataFrameCombineFirst.test_combine_first_same_as_in_updater   s    $$$&=&=&=>000
 
 

 B8*QC#sDDD!!%((
fb)))v!!%((v
fb)))))r'   c           	         t          dt          j        ddt          j        gt          j        ddt          j        dgd          }t          dddt          j        ddgt          j        t          j        dddd	gd          }|                    |          }t          g d
t          j        dddddgd          }t	          j        ||           d S )Nrg         @rT   rh         @r   rU         @g       @)r   r      r   rv   ru   r   rv   rW   r      r   rm   rn   r   r   r   r    df1rN   rO   expecteds        r%   test_combine_first_doc_examplez8TestDataFrameCombineFirst.test_combine_first_doc_example   s    S"&1c26SV8WXX
 
 3RVS#6fbfc3S9 
 
 ""3''#7#7#7rvq!QPQST>UVVWW
fh/////r'   c                    t          t          j        ddgdt          j        dgt          j        ddgg          }t          dt          j        dgg dgdd	g
          }t          g dd	t                    }|                    |          d	         }t          j        ||           |                    |          d	         }t          j        ||           d S )Nrs   Tgffffffru   FgLE)g      g?Fr   r   r   )TTF)namedtype)r   rm   rn   r	   boolr   r   r,   )r    rz   rN   r{   	result_12	result_21s         r%   -test_combine_first_return_obj_type_with_boolszGTestDataFrameCombineFirst.test_combine_first_return_obj_type_with_bools   s     fc4 4"6e8LM
 
 %.0B0B0BCAq6RRR---ATBBB%%c**1-	
y(333%%c**1-	
y(33333r'   zdata1, data2, data_expectedi  r   r   rv   c                     t          d|i          t          d|i          }}|                    |          }t          d|i          }t          j        ||           d S )Nr   r   r   r   r   )r    data1data2data_expectedrz   rN   rO   r{   s           r%   -test_combine_first_convert_datatime_correctlyzGTestDataFrameCombineFirst.test_combine_first_convert_datatime_correctly   sc    < c5\**IsEl,C,CS""3''c=122
fh/////r'   c                    t          j        d                              d          }t          |dggddg          }t          dgdggdg          }|d         j        d	k    sJ |d         j        d
k    sJ |                    |          }t          |t           j        gddgdddg          }t          j        ||           |d         j        d	k    sJ |d         j        d
k    sJ |j	        d d                             |          }t          t          j        t          j        gddgdddg          }t          j        ||           |d         j        dk    sJ |d         j        d
k    sJ d S )N
2011-01-01sr   r   r   rL   rW   r   zdatetime64[s]int64r   r   r   float64)pd	Timestampas_unitr   r   r   NaTr   r   r?   rm   rn   )r    tsdfadfbresr#   s         r%   test_combine_first_align_nanz6TestDataFrameCombineFirst.test_combine_first_align_nan   s   \,''//44"a	C:666!qc
SE2223x~00003x~(((($$rv,aV,,#J
 
 
 	c3'''3x~00003x~((((hrrl((--rvrv.aV<<sCjQQQ
c3'''3x~****3x~((((((r'   c           
      H   t          j        d                              d                              |          }t	          ddg|t          j        dd|                    }t          j        d	                              d                              |          }t	          dd
g|t          j        dd|                    }|dg                             |          }t	          t          j        dd          t          j        dd          gt          j        dd          t           j        gdddgt          j        ddd|          d| d          }|d         j	        d| dk    sJ |d         j	        d| dk    sJ t          j        ||           d S )Nz20100101 01:01UTCUTCdatetimeabc20140627r   )periodsunit)r+   datar   z20121212 12:12xyz20140628z2010-01-01 01:01tzz2012-12-12 12:12z2010-01-01 01:01:00)r   r   r   r4   )r   freqr   datetime64[, UTC])r+   r   r   )r   to_datetimetz_localizer   r   
date_ranger   r   r   r   r   r   )r    r   r   rz   r   rN   r   r#   s           r%   test_combine_first_timezonez5TestDataFrameCombineFirst.test_combine_first_timezone   s   /00<<UCCKKDQQ"E*-
ADAAA
 
 

 /00<<UCCKKDQQ"E*-
ADAAA
 
 

 =/"0055 L!3>>>L!3>>>  %:uEEErvN  #E*-
ACdKKK,,,,
 
 
 =!'+E+E+E+EEEEE5z#=#=#=#=====
c3'''''r'   c                 ,   t          j        ddd|          }t          d|i          }t          j        ddd|          }t          d|i          }|                    |          }t	          j        ||           |d         j        d| dk    sJ d S )	N
2015-01-01
2015-01-05r   r   r   DATE
2015-01-03r   r   r   r   r   r   r   r   r   r    r   dts1rz   dts2rN   r   s          r%   test_combine_first_timezone2z6TestDataFrameCombineFirst.test_combine_first_timezone2   s    }\<EMMM''}\<EMMM''$$
c3'''6{ $>$$>$>$>>>>>>>r'   c                    t          j        g dd                              |          }t          d|ig d          }t          j        g dd                              |          }t          d|ig d          }|                    |          }t          j        g d	d                              |          }t          d|ig d
          }t          j        ||           d S )N)r   r   
2011-01-03
2011-01-04
US/Easternr   r   r   rv   r   r   r   
2012-01-01
2012-01-02z
2012-01-03r   rW   r   )r   r   r   r   r   r   r   r   rv   rW   r   r   )r   DatetimeIndexr   r   r   r   r   	r    r   r   rz   r   rN   r   exp_dtsr#   s	            r%   test_combine_first_timezone3z6TestDataFrameCombineFirst.test_combine_first_timezone3  s!   ===,
 
 

'$-- 	 lll;;;666<
 
 

'$-- 	 iii888$$"   

 

 

 '$-- 	 )1C1C1CDDD
c3'''''r'   c                 *   t          j        ddd|          }t          d|i          }t          j        dd|          }t          d|i          }|                    |          }t	          j        ||           |d         j        d| d	k    sJ d S )
Nr   r   r   r   r   r   r   r   z, US/Eastern]r   r   s          r%   test_combine_first_timezone4z6TestDataFrameCombineFirst.test_combine_first_timezone4$  s    }\<LtTTT''}\<dCCC'' $$
c3'''6{ $E$$E$E$EEEEEEEr'   c                    t          j        ddd|          }t          d|i          }t          j        dd|          }t          d|i          }|                    |          }t          j        dd          t          j        dd          t          j        d          g}t          d|i          }t          j        ||           |d         j        d	k    sJ d S )
Nr   z
2015-01-02r   r   r   r   r   r   object)r   r   r   r   r   r   r   r   r   s	            r%   test_combine_first_timezone5z6TestDataFrameCombineFirst.test_combine_first_timezone50  s    }\<LtTTT''}\<dCCC''$$L,777L,777L&&

 )**
c3'''6{ H,,,,,,r'   c                    t          j        g d          }t          d|ig d          }t          j        g d          }t          d|ig d          }|                    |          }t          j        g d          }t          d|ig d          }t	          j        ||           |d         j        d	k    sJ d S )
N)1 dayr   3 day4dayTDr   r   )10 day11 dayz12 dayr   )r   r   r   r   r   z4 dayr   ztimedelta64[us])r   TimedeltaIndexr   r   r   r   r   )r    r   rz   r   rN   r   r   r#   s           r%   test_combine_first_timedeltaz6TestDataFrameCombineFirst.test_combine_first_timedelta@  s    !"C"C"CDDu\\\:::!"@"@"@AAuYYY777$$#BBB
 
 w/A/A/ABBB
c3'''4y"3333333r'   c           	         t          j        g dd          }t          d|ig d          }t          j        g dd          }t          d|ig d          }|                    |          }t          j        g d	d          }t          d|ig d
          }t	          j        ||           |d         j        |j        k    sJ t          j        g dd          }t          d|ig d          }|                    |          }t          j        dd          t          j        dd          t           j        t          j        dd          t          j        dd          t          j        dd          g}t          d|ig d
          }t	          j        ||           |d         j        dk    sJ d S )N)2011-01r   2011-032011-04M)r   Pr   r   )r   2012-02z2012-03r   )r   z2012-01r   r   r   r   r   r   r4   r   r   r   r   r   r   )	r   PeriodIndexr   r   r   r   r   Periodr   )	r    r   rz   r   rN   r   r   r#   r   s	            r%   test_combine_first_periodz3TestDataFrameCombineFirst.test_combine_first_periodN  s   GGGcRRReLLL999CCC#NNNeIII666$$.JJJQT
 
 
 g.@.@.@AAA
c3'''3x~,,,, ~HHHsSSSd999555$$Iic***Il---FIl---Iic***Iic***
 g.@.@.@AAA
c3'''3x~))))))r'   c                 N   t          dg did          }t          dddgid          }|                    |          }t          dg di          }t          j        ||           |                    |          }t          dg di          }t          j        ||           d S )Nr   )r   r   rv   r   r   r   r   rW   )r   rW   rv   r   r   )r    rz   rN   r   expected_12r   expected_21s          r%   test_combine_first_intz0TestDataFrameCombineFirst.test_combine_first_intm  s     lll+7;;;q!fW555%%c**	lll 344
i555%%c**	lll 344
i55555r'   valrg   c                     t          d|gi          }t          ddgi          }|                    |          }t          |gdgd          }t          j        ||           d S )NisNumisBoolT)r   r   r   )r    r   rz   rN   r   r#   s         r%   (test_combine_first_with_asymmetric_otherzBTestDataFrameCombineFirst.test_combine_first_with_asymmetric_other{  sq     3%())D6*++$$3%D6::;;
c3'''''r'   c                    t          ddgt          j        gdz  d|          }t          dgt          j        gd|          }|                    ddgd	           |                    ddgd	           |                    |          }t          ddgt          j        gdz  d|                              ddg          }t          j        ||           d S )
N96285r   r   r   r   r   T)inplace)r   r   NA	set_indexr   r   r   )r    nullable_string_dtyperM   rN   rO   r{   s         r%   'test_combine_first_string_dtype_only_nazATestDataFrameCombineFirst.test_combine_first_string_dtype_only_na  s    $-rugk22:O
 
 
 tfBE733;PQQQ
c3Z...sCj$///!!#&&$-rugk22:O
 
 

)S#J

 	 	fh/////r'   zwide_val, dtype))l   +YNJ9 UInt64)l+YNJ9 Int64c                     t          d|dgi|          }t          ddd|gi|          }|                    |          }t          d|d|gi|          }t          j        ||           d S )Nr   r   r   r   r   r   )r    wide_valr   rz   rN   rO   r{   s          r%   (test_combine_first_preserve_EA_precisionzBTestDataFrameCombineFirst.test_combine_first_preserve_EA_precision  s     xm,E:::q!X./u===""3''cHa#:;5III
fh/////r'   c                 ,   t          dt          j        gddggddgddg          }t          g d	d
dt          j        ggg dddg          }|                    |          }t          g dg dgddgg d          }t	          j        ||           d S )Nr   rv   rW   r   Qr   r   )r+   r   )r   r   r   rw   	   )r   r   r   )r   rt   ru   )rv   rU   rU   rl   rx   ry   s        r%   %test_combine_first_non_unique_columnsz?TestDataFrameCombineFirst.test_combine_first_non_unique_columns  s    !RVq!f-Sz#sTTTYYArv'c

 
 
 ""3'']]MMM*3*ooo
 
 
 	fh/////r'   N)#__name__
__module____qualname__r&   r1   r9   r=   rA   rF   rJ   rP   re   rq   r|   r   pytestmarkparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r'   r%   r   r      s*       - - -
M 
M 
M: : : / / // / /> > ># # #  * * *$* * * 0 0 0"4 4 4  [% $1%%xxa';';XXdAq=Q=QR($1%%xxa';';XXdAq=Q=QR ($1%%xxa';';XXdAq=Q=QR$1%%xxa';';XXdAq=Q=QR $1%%rvrv6$1%%xxa';';XXdAq=Q=QR$1%%xxa';';XXdAq=Q=QR $1%%xxa';';XXdAq=Q=QR$1%%rvrv6$1%%xxa';';XXdAq=Q=QR!	
 20 03 20) ) )4( ( (@	? 	? 	?( ( (2
F 
F 
F- - - 4 4 4* * *>6 6 6 [UQH--( ( .-(0 0 0 [	
 0 0 0
0 
0 
0 
0 
0r'   r   zscalar1, scalar2  r   r   z
2020-01-01r4   z
2020-01-02z89 daysz60 min)leftrightrv   r  )r  r  closedc                 0   |}t          ||ggddg          }t          | |ggddg          }t          |j        d         |j        d         g          }t          |d          sL|j        d         |j        d         k    s0|j        d         j        |j        d         j        cxk    rdk    rn n| }n|}|                    |          }t          |||ggg d          }	|	d                             |          |	d<   t          j        ||	           d S )Nr   r   rL   rR   r   r   r   r   rR   )	r   r   dtypesr   kindr   astyper   r   )
scalar1scalar2nulls_fixturena_valueframerp   common_dtyper   rO   r{   s
             r%    test_combine_first_timestamp_bugr    s;    H(+,sCjAAAE)*S#J???E#U\#%6S8I$JKKL 	|X..<S 111<!U\#%6%;BBBBsBBBBB  ''F8S'23___MMMHSM((66HSM&(+++++r'   c            	         t          t          j        t          j        ggddg          } t          t          ddd          t          ddd          ggddg          }|                     |          }t          t          j        t          ddd          t          ddd          ggg d          }t          j        ||           d S )	Nr   r   rL   r   r   r   rR   r  )r   r   r   r   r   r   r   )r  rp   rO   r{   s       r%   $test_combine_first_timestamp_bug_NaTr    s    '(3*===E
4A

q! 4 4	56c
  E   ''F
&(4A&&q!(<(<	=>  H &(+++++r'   c                     t          j        dddddt          j        gg dgddg          } t	          dg di|           }t          j        g dg dgddg          }t          g d|          }|                    t	          d	|i                    }t          j        dddddddddd	t          j        gg d
gddg          }t	          t          j        t          j        dddddt          j        dt          j        dgddt          j        ddt          j        t          j        dt          j        dt          j        gd|          }t          j        ||           d S )Nr   rR   r   )r   r   rv   rW   r   r   names)r   r   r   r   r   r   r   )r   r   rR   r   r   dr  )r   r   rW   r   r   r   r   r   rv   r   r   r   rg   rU   rh   rT   rs   rt   )rR   r  )	r   from_arraysrm   rn   r   r	   r   r   r   )mi1rM   mi2r   r   mi_expectedr{   s          r%   &test_combine_first_with_nan_multiindexr    s    
 
sCc26	*,>,>,>?Sz  C 
C+++,C	8	8	8B

 	'	'	');););<S#J  C 	!!!---A


9c1X..
/
/C(#sCc3S#rvF---	
 Cj  K &"&!Q1aBFAFsBFCbfbfc263PRPVW	
 	
   H #x(((((r'   c                  f   t          ddgt          d                    } t          t          d          t          d                    }t          | |d          }t          ddgt          dd                    }t          t          dd	          t          dd                    }t          ||d
          }t          ddt          j        t          j        gg dt          j        t          j        ddgdg d          }|                    |          }t          j        ||           d S )Nr   r   r   r   r   r   r   r   )r   r3   )r   r   r  r   r   r   r3   r   )r	   r   r   rm   rn   r   r   r   )a_columnb_columnrz   c_columnrN   r{   r$   s          r%   test_combine_preserve_dtypesr!     s"   sCja111HeAhheAhh///H
(22
3
3CsCja444HeBll%1++666H
(22
3
3CsBFBF+&"&#s+	
 	

 ll  H   %%H(H-----r'   c            
         t          dg dit          j        g dt          j        ddggddg          	          } t          d
g dit          j        g dt          j        ddggddg          	          }t          dddt          j        gddt          j        dgdt          j        g dt          j        dddggddg          	          }|                     |          }t          j        ||           d S )Nx)r   r;      r   r   rv   r   r   r   r   r  r   y)rV         )r   r   rW   r   g      "@g      $@g      &@g      (@g      *@g      ,@)r#  r&  )r   r   rv   rW   )r   r   r  rm   rn   r   r   r   )rz   rN   r{   r$   s       r%   7test_combine_first_duplicates_rows_for_nan_index_valuesr)    s2   
	kkk$iii"&!Q%@c
SSS  C
 	lll$iii"&!Q%@c
SSS  C
 tT26*bfd+	
 	
 $\\BFAq!,-c3Z
 
 
  H   %%H(H-----r'   c                      t          g dg dd          } t          g dg dg dd          }|                     |          }t          g dg dg dd          }t          j        ||           d S )Nr%  )rW   r   r   r   )r         )(   2   <   )rV   "   A   r  r   )df_1df_2rO   r{   s       r%   ,test_combine_first_int64_not_cast_to_float64r4  /  s    9999995566D;;;\\\MMNND%%Fyyyyyy|||LLMMH&(+++++r'   c                  0   t          j        ddgt          j        t          j        gg          } t          j        ddgt          j        t          j        gg          }t	          dd dgi|           }t	          dddgi|          }|                    |          }t          j        g dt          j        t          j        t          j        t          j        gg          }t	          dt          j        dddgi|          }t          j        ||           d S )Nr   r   r   rW   r   rv   )r   r   r   r   )r   r  rm   rn   r   r   r   r   )midxmidx2rz   rN   rO   expected_midxr{   s          r%   test_midx_losing_dtyper9  8  s    !Aq6BFBF+;"<==D"QFRVRV,<#=>>E
S4)$D
1
1
1C
S1a&M
/
/
/Cs##F*	78 M #1a01GGGH&(+++++r'   c                      t          ddg          } t          ddg          }|                     |          }t          g d          }t          j        ||           d S )Nr   r   rL   rR   r  r   )r  r  rO   r{   s       r%    test_combine_first_empty_columnsr;  F  sj    c3Z(((DsCj)))E&&F111H&(+++++r'   c                      t          g dg dd          } t          ddgidg          }|                     |          }t          g dg dd          }t          j        ||           d S )	Nr%  )rW   Nr   )r   r   r   r   r   r   )rU   rT   rt   r   )rz   rN   rO   r{   s       r%   (test_combine_first_preserve_column_orderr=  N  s    
))),,,77
8
8C
S1#Jqc
*
*
*Cs##Fyyy??@@H&(+++++r'   ) r   numpyrm   r   pandas.core.dtypes.castr   pandas.core.dtypes.commonr   pandasr   r   r   r   r	   pandas._testing_testingr   r   r   r   r   	TimedeltaIntervalr  r  r  r!  r)  r4  r9  r;  r=  r   r'   r%   <module>rF     s+              4 4 4 4 4 4 4 4 4 4 4 4                     Z0 Z0 Z0 Z0 Z0 Z0 Z0 Z0z 	$1		xxa334	<	%	%yrys'C'CD	i	 	 ,",x"8"89	!1	%	%	%{r{6'R'R'RS	 , , ,6, , ,) ) ):. . .,. . .2, , ,, , ,, , ,, , , , ,r'   