
    Wh\                        d dl Z d dlmZ d dlmZ d dlZd dlZd dlmZ d dl	Z	d dl
mZ d dlmZmZmZ d dlmZmZ d dlmZmZmZ d d	lmZ d d
lmZmZmZmZmZ d dl m!Z!m"Z"  ejF                  d      jI                  d      Z%d Z&ejN                  jQ                  dddd ejR                  d      dfg ddfg ddfdd e*dd      df e*d d      df ejV                  g dejX                        df ejV                  g dejZ                        df ejV                  g dej\                        dfddgdfd ejV                  ddg      dfdg d dfd! e*d"d#      df ejV                  g d       df ejV                  g d e/      dfg      d$        Z0d% Z1d& Z2eejN                  jQ                  d' e       e(      d)               Z3ejN                  jQ                  d*g d+      ejN                  jQ                  d,g d-      d.               Z4ejN                  jQ                  d*g d/      ejN                  jQ                  d,g d-      d0               Z5ejN                  jQ                  d*g d1      ejN                  jQ                  d,g d-      ejN                  jQ                  d2d3dgd4d5gg      d6                      Z6ejN                  jQ                  d7ddg      ejN                  jQ                  d8ddg      ejN                  jQ                  d*g d1      ejN                  jQ                  d,d9d:g      ejN                  jQ                  d;d g d<g d=gfd3dd>gd?d@gdAdggfg      dB                                    Z7ejN                  jQ                  d*g d/      ejN                  jQ                  d,g dC      dD               Z8ejN                  jQ                  d*g d1      ejN                  jQ                  d,g dC      ejN                  jQ                  dEd g d<g d=gfd3dd>gd?d@gdAdggfg      dF                      Z9ejN                  jQ                  dGg dH      dI        Z:ejN                  jQ                  d*g d/      dJ        Z;ejN                  jQ                  dGg dK      ejN                  jQ                  d2dd5g      dL               Z<ejN                  jQ                  d*g dM      dN        Z=dO Z>ejN                  jQ                  dPdd>g      dQ        Z?ejN                  jQ                  dRg dS      dT        Z@dU ZAdV ZBejN                  jQ                  d2d d d3g e*d d       ejV                  d d3g      g      dW        ZCejN                  jQ                  d*g dX      dY        ZDejN                  jQ                  dZd[d\ e/       d]fg      d^        ZEejN                  jQ                  d_d`gdagd`dagd`dbgdadbgg      dc        ZFdd ZGde ZHdf ZIdg ZJdh ZKdi ZLdj ZMejN                  jQ                  dke"      dl        ZNdm ZOejN                  jQ                  dne!      do        ZPy)p    N)copy)SkipTest)kstest)parse)_safe_indexingresampleshuffle)_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinations)_determine_key_type_get_column_indices_safe_assign)MockDataFrame)_array_api_for_tests_convert_containerassert_allclose_dense_sparseassert_array_equal'skip_if_array_api_compat_not_configured)CSC_CONTAINERSCSR_CONTAINERS	   )   r   c                     t        j                  dd      } | j                  g dg dg ddd	      }d
dlm} dgddgg ddgdgg}|D ]  }t        ||d      } |||   |        g dddgfg ddgfg}|D ]#  \  }}t        ||d      } ||dd|f   |       % d
dgddgfdgdgfg}	|	D ]#  \  }
}t        ||
d      } ||dd|f   |       % d
dgddgddgg}|D ]  }t        ||d
      } |||   |        y)z,Check _safe_indexing for polars as expected.polarsz0.18.2)
minversion)      r      )r            )r   r   r   
   abcrow)orientr   )assert_frame_equalr%   r$   )r%   r$   r&   r&   r   axisTFT)FFTNr   r   )pytestimportorskip	DataFramepolars.testingr)   r   )pldfr)   str_keyskeyout	bool_keysbool_keystr_keyint_keysint_keyaxis_0_keyss               [/var/www/html/jupyter_env/lib/python3.12/site-packages/sklearn/utils/tests/test_indexing.pytest_polars_indexingr=   #   sh   			X(	;B	MB5 
 
B 2Sz?SEC5AH )R1-2c7C() &Sz25IC54QRI& 0'R22aj>3/0 Q#s$sSEl3H$ 0Rq12aj>3/0 q6Aq6Aq6*K )R1-2c7C()    z
key, dtype)r   int)0str)TboolTrB   r   r   r   r?   r@   12rA   )rC   r?   )rD   rA   r   dtypeF))TFrB   )col_0rA   rI   col_1col_2)rJ   rA   beginendc                 $    t        |       |k(  sJ y N)r   )r4   rH   s     r<   test_determine_key_typerQ   D   s    8 s#u,,,r>   c                  z    t        j                  t        d      5  t        d       d d d        y # 1 sw Y   y xY w)NNo valid specification of thematch      ?)r-   raises
ValueErrorr    r>   r<   test_determine_key_type_errorrZ   c   s.    	z)H	I !C ! ! !s   1:c                      t        j                  t        d      5  t        t	        ddd      d       d d d        y # 1 sw Y   y xY w)NzOnly array-like or scalar arerT   r   r   r   F)accept_slice)r-   rW   	TypeErrorr   slicerY   r>   r<   #test_determine_key_type_slice_errorr_   h   s<    	y(G	H @E!QN?@ @ @s	   >Az#array_namespace, device, dtype_name)idsc                    t        | |      }t        j                  d      5  |j                  g d      }t	        |      dk(  sJ |j                  g d      }t	        |      dk(  sJ 	 |j                  g d      }|/t        j                  t        d	      5  t	        |       d d d        d d d        y # t
        $ r d }Y Gw xY w# 1 sw Y   #xY w# 1 sw Y   y xY w)
NT)array_api_dispatchr   r   r   r?   r,   rB   )y      ?      ?y       @       @y      @      @rS   rT   )	r   sklearnconfig_contextasarrayr   r]   r-   rW   rX   )array_namespacedevice
dtype_namexpint_array_keybool_array_keycomplex_array_keys          r<   !test_determine_key_type_array_apirn   m   s     
ov	6B			4	8 7

9-"=1U:::$78">2f<<<	% "

+C D
 (z1PQ 7#$5677 7  	% $	%
7 77 7sH   AC+B8>CC	'C8CCCC	C	CC
array_type)listarraysparse	dataframer   pyarrowindices_type)rp   tuplerq   seriesr^   c                     ddg}|dk(  r t        |d   t              r|dxx   dz  cc<   t        g dg dg dg|       }t        ||      }t        ||d      }t	        |t        g dg dg|              y )	Nr   r   r^   rc   r   r   r       r!   r   r   r*   
isinstancer?   r   r   r   ro   ru   indicesrq   subsets        r<   &test_safe_indexing_2d_container_axis_0r      sv    
 !fGw:gaj##>
a
	9i@*ME ,7GE73F "Iy#9:Fr>   )rp   rq   rw   polars_seriespyarrow_arrayc                     ddg}|dk(  r t        |d   t              r|dxx   dz  cc<   t        g d|       }t        ||      }t        ||d      }t	        |t        ddg|              y )Nr   r   r^   	r   r   r   r   r   r    r{   r!   r   r   r*   r   r|   r~   s        r<   test_safe_indexing_1d_containerr      sl    
 !fGw:gaj##>
a
:JGE ,7GE73F );QFJ)OPr>   )rq   rr   rs   r   rt   r   r   rK   rL   c           	         t        |      }|dk(  r t        |d   t              r|dxx   dz  cc<   g d}t        g dg dg dg| |      }t        ||      }t        |d   t              r9| dv r5d	}t        j                  t        |
      5  t        ||d       d d d        y t        ||d      }t        |t        ddgddgddgg|              y # 1 sw Y   y xY w)Nr^   r   rJ   rc   ry   rz   r   rq   rr   ESpecifying the columns using strings is only supported for dataframesrT   r*   r   r   r   r    r!   r   )
r   r}   r?   r   rA   r-   rW   rX   r   r   )ro   ru   r   indices_convertedcolumns_namerq   err_msgr   s           r<   &test_safe_indexing_2d_container_axis_1r      s     Ww:gaj##>!!.L	Iy):|E ++<lK'!*c"z5H'HS 	 ]]:W5 	=5"3!<	= 	=  '8qA$&AAA'?L	
		= 	=s   CCarray_read_onlyindices_read_onlyrq   rw   zaxis, expected_arrayry   rz   r   r   r    r!   c                 6   t        j                  g dg dg dg      }| r|j                  d       t        ||      }t        j                  ddg      }|r|j                  d       t        ||      }t	        |||      }t        |t        ||             y )	Nrc   ry   rz   F)writer   r   r*   )nprq   setflagsr   r   r   )	r   r   ro   ru   r+   expected_arrayrq   r   r   s	            r<   &test_safe_indexing_2d_read_only_axis_1r      s     HHiI67EU#uj1Ehh1vGu% ,7GE76F );NJ)WXr>   )rp   rv   rq   rw   c                     dgdgdz  z   dgdz  z   }t        g d|       }t        ||      }t        ||d      }t        |t        ddg|              y )	NFTr   r    r   r   r*   r   r   r   r   r~   s        r<   $test_safe_indexing_1d_container_maskr      s^    
 g
"eWq[0G:JGE ,7GE73F );QFJ)OPr>   zaxis, expected_subsetc                     g d}t        g dg dg dg| |      }g d}t        ||      }t        |||      }t        |t        ||              y )NrJ   rc   ry   rz   )FTTr*   r   )ro   ru   r+   expected_subsetr   rq   r   r   s           r<   test_safe_indexing_2d_maskr      sW     /L	Iy):|E "G ,7GE76F "?J?r>   z array_type, expected_output_type))rp   rp   rq   rq   rr   rr   rs   rw   r   r   rt   r   c                     t        g dg dg dg|       }d}t        ||d      }t        g d|      }t        ||       y )Nrc   ry   rz   r   r   r*   r   )ro   expected_output_typerq   r   r   r   s         r<   #test_safe_indexing_2d_scalar_axis_0r      sA     	9i@*MEGE73F'	3GHN 8r>   c                 N    t        g d|       }d}t        ||d      }|dk(  sJ y )Nr   r   r   r*   r   )r   r   )ro   rq   r   r   s       r<   test_safe_indexing_1d_scalarr     s0     :JGEGE73FQ;;r>   )r   r   r   r   r   c                 P   g d}t        g dg dg dg| |      }t        |t              r9| dv r5d}t        j                  t
        |      5  t        ||d	       d d d        y t        ||d	      }g d
}|dk(  rdgdgdgg}t        ||      }t        ||       y # 1 sw Y   y xY w)NrJ   rc   ry   rz   r   r   rT   r   r*   )r   r    r   rr   r   r    r   )r   r}   rA   r-   rW   rX   r   r   )	ro   r   r   r   rq   r   r   expected_outputr   s	            r<   #test_safe_indexing_2d_scalar_axis_1r     s     /L	Iy):|E '3J2E$ES 	 ]]:W5 	35'2	3 	3  wQ7#8+ !sQC!oO+O=QR$V^<	3 	3s   BB%)rp   rq   rr   c                 b    t        g dg dg dg|       }t        |d d      }t        ||       y )Nrc   ry   rz   r   r*   r   )ro   XX_subsets      r<   test_safe_indexing_None_axis_0r   =  s-    Iy)<jIAaA.H 1-r>   c                      t        j                  d      } d}| j                  t              }t        j                  t
        |      5  t        |dgd       d d d        y # 1 sw Y   y xY w)Npandasz&No valid specification of the columns.rT   rV   r   r*   )r-   r.   r/   X_toyrW   rX   r   )pdr   r   s      r<   0test_safe_indexing_pandas_no_matching_cols_errorr   D  sV    			X	&B6G
UA	z	1 )q3%a() ) )s   A!!A*r+   c                     t        j                  t        d      5  t        t        ddg|        d d d        y # 1 sw Y   y xY w)Nz'axis' should be either 0rT   r   r   r*   )r-   rW   rX   r   r   r*   s    r<   test_safe_indexing_error_axisr   L  s6    	z)D	E 1uq!f401 1 1s	   :AX_constructor)rq   rw   r   r   c                    t        t        d            }| dk(  rt        j                  |      } n| dk(  r't	        j
                  d      }|j                  |      } nX| dk(  r(t	        j
                  d      }|j                  |      } n+| dk(  r&t	        j
                  d	      }|j                  |      } d
}t	        j                  t        |      5  t        | ddgd       d d d        y # 1 sw Y   y xY w)Nr   rq   rw   r   r   r   )valuesr   rt   z='X' should be a 2D NumPy array, 2D sparse matrix or dataframerT   r   r   r*   )rp   ranger   rf   r-   r.   Seriesrq   rW   rX   r   )r   r   r   r1   par   s         r<   !test_safe_indexing_1d_array_errorr   R  s     	U1XA

1	(	"  *		!	/	)  *			+	/	)  +MG	z	1 6}q!f156 6 6s   C++C4c                      ddg} g dg dg dg}d}t        j                  t        |      5  t        || d	       d d d        y # 1 sw Y   y xY w)
NrK   rL   rc   ry   rz   z.String indexing is not supported with 'axis=0'rT   r   r*   r-   rW   rX   r   )r   rq   r   s      r<   4test_safe_indexing_container_axis_0_unsupported_typer   j  sL     G	9-E>G	z	1 /ugA./ / /s   AAc                  b   t        j                  d      } t        | j                        }t        |j                        }|t        d      k\  rt        d      | j                  g dg dd      }t        |ddgd	      }t        | j                  d
      r| j                  j                  }n | j                  j                  j                  }t        j                         5  t        j                  d|       d|j                   d<   d d d        |j                   d   dk(  sJ y # 1 sw Y   xY w)Nr   3z;SettingWithCopyWarning has been removed in pandas 3.0.0.devrc   )r   r   r   )r$   r%   r   r   r*   SettingWithCopyWarningerrorr"   )r   r   )r-   r.   parse_version__version__base_versionr   r/   r   hasattrerrorsr   corecommonwarningscatch_warningssimplefilteriloc)r   
pd_versionpd_base_versionr   r   r   s         r<   4test_safe_indexing_pandas_no_settingwithcopy_warningr   r  s     
		X	&Br~~.J#J$;$;<O-,,TUU
9956AA1vA.Fryy23!#!A!A "$!F!F		 	 	" g'=>D 66$<1	 s   "&D%%D.c                     ddgddgddgg}d}t        j                  t        |      5  t        || d	       d
d
d
       y
# 1 sw Y   y
xY w)z@Check that we raise a ValueError when axis=1 with input as list.r   r   r   r   r{   r!   z!axis=1 is not supported for listsrT   r*   Nr   )r   r   r   s      r<   *test_safe_indexing_list_axis_1_unsupportedr     sP     Q!Q!Q A1G	z	1 +q'*+ + +s   AA
)rq   rr   rs   c                    t         j                  j                  d      }|j                  dd      }ddg}|j                  t	        |      |j
                  d         }t        ||       }t        |||       t        ||d      }t        |t        ||              ddg}|j                  |j
                  d   t	        |            }t        ||       }t        |||       t        ||d      }t        |t        ||              d	\  }} |j                  |j
                   }t        ||       }t        |||       t        |t        ||              y
)z,Check that `_safe_assign` works as expected.r   r"   r   r   r   )row_indexerr*   )column_indexer)NNN)
r   randomRandomStaterandnlenshaper   r   r   r   )ro   rngX_arrayr   r   r   assigned_portionr   s           r<   test_safe_assignr     s:    ))


"CiiAGa&KYYs;'q)9:F7J/AF4%a1= ,VZ@ VNYYw}}Q'^)<=F7J/AF>:%aa@ ,VZ@ #-KSYY F7J/AF>: $6vz$JKr>   zkey, err_msg)r"   z all features must be in \[0, 2\])whatever/A given column is not a column of the dataframez%No valid specification of the columnsc                     t        j                  d      }|j                  t        g d      }t        j                  t
        |      5  t        ||        d d d        y # 1 sw Y   y xY w)Nr   rJ   columnsrT   )r-   r.   r/   r   rW   rX   r   )r4   r   r   X_dfs       r<   test_get_column_indices_errorr     sT     
		X	&B<<'B<CD	z	1 'D#&' ' 's   
A  A)r4   col1col2col3c                 \   t        j                  d      }t        j                  dt              }g d}|j                  ||      }dj                  |       }t        j                  t              5 }t        ||        d d d        t        j                        |k(  sJ y # 1 sw Y   $xY w)Nr   )r   r   rG   )r   r   r   r   r   r   z1Selected columns, {}, are not unique in dataframe)r-   r.   r   zerosr?   r/   formatrW   rX   r   rA   value)r4   r   toyr   r   r   exc_infos          r<   6test_get_column_indices_pandas_nonunique_columns_errorr     s     
		X	&B
((6
%C6G
S'*AAHHMG	z	" $hAs#$x~~')))$ $s   2B""B+c            
         t        j                  d      } | j                  g dg dgg d      }t        dd      ddgft        dd      d	dgft        dd      dgfd
dgddgft        dd
      d	dgft        dd      g dft        dd      d	gfddgdd	gfg g fg	}|D ]  \  }}t	        ||      |k(  rJ  d}t        j
                  t        |      5  t	        |dg       ddd       d}t        j
                  t        |      5  t	        |t        ddd             ddd       y# 1 sw Y   GxY w# 1 sw Y   yxY w)z=Check _get_column_indices for edge cases with the interchanger   rc   ry   r#   )schemar   Nr   r   r%   r&   r$   rC   r   rT   not_a_columnzkey.step must be 1 or None)r-   r.   r/   r^   r   rW   rX   NotImplementedError)r1   r2   key_resultsr4   resultmsgs         r<   #test_get_column_indices_interchanger     se   			X	&B 
y),_	EB 
q$!Q 	tQ!Q 	q!qc
saV	sC1a&!	sD	9%	tS	A3
saV	R
K # 6V"2s+v5556 <C	z	- 2B 012 'C	*#	6 5Bc4 345 5	2 25 5s   D(D4(D14D=c                  R   t               J t        j                  t              5  t        dgddg       d d d        t        j                  t              5  t        ddgddgdd       d d d        t	        t        ddgd            dk(  sJ y # 1 sw Y   \xY w# 1 sw Y   3xY w)	Nr   r   Fr   )replace	n_samplesr   r   )r   )r   r-   rW   rX   r   rY   r>   r<   test_resampler     s    : 
z	" !q!f	z	" =!Q!Q!<= xA!,-222 = =s   BBBB&c                  N   t        j                  g d      } t        j                  g d      }g }g }t        d      D ]  }|j	                  t        | j                  |      d|| j                  d         j                                |j	                  t        | |d|| j                  d         j                                 t        j                  |      }t        j                  |      }t        ||      }t        j                  |dk\        sJ |j                  dkD  sJ y )	N)r   r   )r   d   r   r   Tr   )r   random_stater   )sample_weightr   r   r   g?)r   rq   rf   r   appendr   repeatr   meanr   allpvalue)datar   mean_repeatedmean_reweightedseedtest_results         r<   test_resample_weightedr
    s    88JDJJ{+MMOc
 
M*!**Q-	
 df	
 	+!**Q- df	

& JJ}-Mjj1O8K66/Q&''' $$$r>   c                     t         j                  j                  d      } d}d}| j                  |df      }| j	                  d||      }t        ||ddd       \  }}t        j                  |dk(        sJ t        ||dd|      \  }}t        j                  |dk(        rJ t        j                  |      dk(  sJ y )	Nr   r   g?r   sizer"   r   r   stratifyr   )r   r   r   normalbinomialr   r  sum)r   r   pr   y_y_not_stratifiedy_stratifieds           r<   test_resample_stratifiedr  )  s    
))


"CIA

A
'AQ	*A"1a2APTUA66"a'(((q!rANOA|vvla'(((66,1$$$r>   c                      t         j                  j                  d      } d}| j                  |df      }| j	                  dd|      }t        ||dd| |      \  }}t        ||d	d| |      \  }}t        j                  |      j                  d   dk  sJ t        j                  |      j                  d   dk(  sJ t        ||dd
| |      \  }}|j                  d   d
k(  sJ t        j                  |      j                  d   dk(  sJ y )Nr   r   r   r  r   T2   )r   r   r   r  Fi  )r   r   r   r  randintr   uniquer   )r   r   r   r  	X_replacer  X_no_replaces          r<    test_resample_stratified_replacer  9  s   
))


"CI

A
'AAqy)A	1dbsQLIq 	1eraOL! 99Y%%a(2---99\"((+r111 	1ddqLIq ??1%%%99Y%%a(C///r>   c                      t         j                  j                  d      } d}| j                  |df      }| j	                  dd|df      }t        ||d| |      \  }}|j                  dk(  sJ y )Nr   r   r   r  r   r  r  )r   r   r   r  r  r   ndim)r   r   r   r  s       r<   test_resample_stratify_2dyr"  R  sm    
))


"CI

A
'AAq	1~.AAqBS1EDAq66Q;;r>   c                     t        j                  t        d      5  t        ddgddgddgd       d d d        t        j                  t        d      5  t        ddgddgddgddg       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)	NzCResampling with sample_weight is only implemented for replace=True.rT   r   r   F)r   r   zCResampling with sample_weight is only implemented for stratify=None)r   r  )r-   rW   r   r   rY   r>   r<   test_notimplementederrorr$  \  s    	S
 F 	!Q!Q1vuE	F 
S
 H 	!Q!Q1vAG	H HF FH Hs   A6B6A?Bcsr_containerc                 L   t         j                  j                  d      }d}|j                  |df      }|j	                  dd|      } | |j                  dd            }t        j                  t        d      5  t        ||d	||
      \  }}d d d        y # 1 sw Y   y xY w)Nr   r   r   r  r   r   zSparse data was passedrT   r  r  )
r   r   r   r  r  reshaper-   rW   r]   r   )r%  r   r   r   r  r  s         r<   #test_resample_stratify_sparse_errorr(  j  s     ))


"CI

A
'AAqy)AQYYr1-.H	y(@	A Q1xP1Q Q Qs   =BB#c                      d } t        j                  ddgddggddgdd	ggg      }t         | |            }t        |       t         | |            |k(  sJ y )
Nc                 &    t        d | D              S )Nc              3   @   K   | ]  }t        d  |D                yw)c              3   2   K   | ]  }t        |        y wrP   rv   ).0Cs     r<   	<genexpr>zPtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>.<genexpr>x  s     /58/s   Nr-  )r.  Bs     r<   r0  zFtest_shuffle_on_ndim_equals_three.<locals>.to_tuple.<locals>.<genexpr>x  s     ;AU/Q//;s   r-  )As    r<   to_tuplez3test_shuffle_on_ndim_equals_three.<locals>.to_tuplew  s    ;;;;r>   r   r   r   r   r   r    r{   r!   )r   rq   setr	   )r3  r2  Ss      r<   !test_shuffle_on_ndim_equals_threer6  v  sb    < 	Aq6Aq6"aVaV$456AHQKAAJx{q   r>   csc_containerc           	         g d}t        j                  g dt              }g d}t        t        j                  ddgddgdd	ggt                    } | t        j                  d
      j                  dd	            }t        |||||d      \  }}}}	}
|g dk(  sJ t        |      t        k(  sJ t        |g d       |j                  t        k(  sJ |g dk(  sJ t        |      t        k(  sJ t        |	t        j                  dd	gddgddggt                     t        |	      t        k(  sJ t        |
j                         t        j                  ddgd	dgddgg             y )Nr#   rG   rc   r$   r   r%   r   r&   r   r    r   )r   )r&   r%   r$   )r   r   r   r   r   )r   rq   objectr   aranger'  r	   typerp   r   rH   toarray)r7  r$   r%   r&   dea_sb_sc_sd_se_ss              r<   "test_shuffle_dont_convert_to_arrayrD    sF    	A
/AAbhha3(S!H=VLMAbiil**1a01A%aAq!!DCc3/!!!9sO,99)9sBHHsAha3(%C6RS9%%%s{{}bhhAAA/G&HIr>   )Qr   r   unittestr   numpyr   r-   scipy.statsr   rd   $sklearn.externals._packaging.versionr   r   sklearn.utilsr   r   r	   sklearn.utils._array_apir
   r   sklearn.utils._indexingr   r   r   sklearn.utils._mockingr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   r   r:  r'  r   r=   markparametrizebool_r^   rq   int32int64uint8r9  rQ   rZ   r_   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r"  r$  r(  r6  rD  rY   r>   r<   <module>rU     s          G ; ; 
 1  ? 			!V$)B 	$ 	E	%  	tT	D!	q!e	)288	,e4	)288	,e4	)288	,e4
	4-	 &)	$e,,	w	&	-	.6	-V	<eD-6-76-!
@
 ))-/'  
7 )7* O )VW	 X	 O )VWQ XQ G )VWaVgw-?$@A
 B X

4 *T5M:,tUm<G '8)<=a)Y!7811v1vPQSTv>V:WXY > = ;Y O )MNQ OQ G )MN)Y	 11v1v1v&>"?@	 O &
9
9 O &	 QL1= 2	=, 'BC. D.) $+1 ,1
 J66*/2 QAaXRXXq!f=M$NO+ P+ 'GHL ILB 1G	:;'' 	VHvh 0662BVVDTU	*	*5<3%%P% 02H .9Q :Q! .9J :Jr>   