
     h`                     <   d 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
 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mZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlm Z m!Z!m"Z"m#Z# dZ$dZ% G d d          Z& eed          Zd Z'eej(        )                    ddddidddfdddddddfdddidddfdddddddfdddidd dfdd!dddd dfd"dd"id#d$d%fd&dd&id'd(dfd&d)d*id'd(dfd+dd+id d,dfd+d)d-id d,dfd.dd.id/d#dfg          ej(        )                    d0d1d2g          ej(        )                    d3dd4g          d5                                                 Z*eej(        )                    ddddidddfdddddddfdddidddfdddddddfdddidd dfdd!dddd dfd"dd"id#d$d%fd&dd&id'd(dfd&d)d*id'd(dfd+dd+id d,dfd+d)d-id d,dfg          ej(        )                    d0d1d2g          d6                                     Z+eej(        )                    dg d7          d8                         Z,eej(        )                    d0d1d2g          d9                         Z-eej(        )                    d0d1d2g          d:                         Z.eej(        )                    d0d1d2g          ej(        )                    d;d<d<d=gg          d>                                     Z/eej(        )                    dg d?          ej(        )                    d0d1d2g          d@                                     Z0eej(        )                    dg dA          ej(        )                    d0d1d2g          dB                                     Z1edC             Z2 ej3        dDE          dF             Z4 ej3        dDE          dG             Z5eej(        )                    dHg dI          ej(        )                    d3dd4g          dJ                                     Z6ej(        7                    dK          ej(        )                    dLd0dMidNfdOdMidPfg          dQ                         Z8ej(        )                    dRddSdTdSdSdTd4d2dTg          dU             Z9dV Z:ej(        7                    dW          ej(        7                    dK          ej(        )                    dLd0d2idXfdOdidYfd2ddZdYfg          d[                                     Z;eej(        7                    dW          ej(        )                    d\d]d^g          d_                                     Z<ed`             Z=ej(        )                    d3dd4g          da             Z>ej(        )                    d3dd4g          db             Z?ej(        )                    d3dd4g          ej(        )                    d0d1d2g          dc                         Z@ej(        )                    d3dd4g          ej(        )                    ddddeiddfddgg          dh                         ZAej(        )                    d3dd4g          ej(        )                    dided)dfieBdjfdddkdlgdmeBdnfd.d.d4doeBdpfdddqddreBdsfdddqd4dreBdsfdddtdmeCdufdddtdlgdmeCdufg          ej(        )                    d0d1d2g          dv                                     ZDej(        )                    dwdxddydgeBdzfdxd{d|eBd}fdxd{dydgeBd}fi eBd~fg          d             ZEej(        )                    d3dd4g          d             ZFej(        )                    d3dd4g          d             ZGej(        )                    d3dd4g          d             ZHej(        )                    d3dd4g          d             ZIej(        )                    ddd4g          d             ZJd ZKd ZLej(        )                    d3dd4g          d             ZMeej(        )                    dg d          d                         ZNd ZOej(        )                    d3dd4g          ej(        )                    d0d          d                         ZPd ZQd ZRd ZSd ZTdS )zTest the openml loader.    N)partial)BytesIO	HTTPError)config_context)Bunchcheck_pandas_support)_open_binary)SkipTestassert_allcloseassert_array_equalfails_if_pypy)fetch_openml)_OPENML_PREFIX_open_openml_url_get_local_path_retry_with_clean_cachez"sklearn.datasets.tests.data.openmlTc                   :    e Zd Zd Zd
dZd Zd Zd Zd Zd Z	d	S )_MockHTTPResponsec                 "    || _         || _        d S N)datais_gzip)selfr   r   s      ^/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/datasets/tests/test_openml.py__init__z_MockHTTPResponse.__init__(   s    	    c                 6    | j                             |          S r   )r   read)r   amts     r   r    z_MockHTTPResponse.read,   s    y~~c"""r   c                 8    | j                                          d S r   )r   closer   s    r   r#   z_MockHTTPResponse.close/   s    	r   c                     | j         rddiS i S )NzContent-Encodinggzipr   r$   s    r   infoz_MockHTTPResponse.info2   s    < 	0&//	r   c                 *    t          | j                  S r   )iterr   r$   s    r   __iter__z_MockHTTPResponse.__iter__7   s    DIr   c                     | S r    r$   s    r   	__enter__z_MockHTTPResponse.__enter__:   s    r   c                     dS )NFr-   )r   exc_typeexc_valexc_tbs       r   __exit__z_MockHTTPResponse.__exit__=   s    ur   N)r   )
__name__
__module____qualname__r   r    r#   r(   r+   r.   r3   r-   r   r   r   r   '   s          # # # #    
        r   r   )	data_homec                 2  	
 dddddt           j        t          dz   d| z   
fd
fd			fd
	fd	fd
fdfd}t          r(|                     t
          j        j        d|           d S d S )Nz$https://openml.org/api/v1/json/data/z-https://openml.org/api/v1/json/data/features/zhttps://openml.org/data/v1/z)https://openml.org/api/v1/json/data/list/z.gz.id_c                 "   t          j        dd| t          d          d                    |z   z   }|                    dd                              dd                              dd	                              d
d                              dd                              dd                              dd                              dd                              dd                              dd                              dd          S )Nz\W-zhttps://openml.org/z-json-data-listz-jdlz-json-data-featuresz-jdfz-json-data-qualitiesz-jdqz
-json-dataz-jdz
-data_namez-dnz	-downloadz-dlz-limitz-lz-data_versionz-dvz-statusz-sz-deactivatedz-dactz-activez-act)resublenreplace)urlsuffixoutputpath_suffixs      r   
_file_namez4_monkey_patch_webbased_functions.<locals>._file_nameV   s    F5#s3'<#=#=#?#?@AAFJ[X 	 NN,f55W*F33W+V44W\5))W\5))W[%((WXt$$W_e,,WY%%W^W--WY''	
r   c                    |                      |          sJ  | |          }t          	|          5 }|r?
r=t          |                                          }t	          |d          cd d d            S  |d          }t          |                                          }t	          |d          cd d d            S # 1 swxY w Y   d S )NTrbF)
startswithr
   r   r    r   )rA   has_gzip_headerexpected_prefixrB   data_file_nameffpdecompressed_frE   data_modulegzip_responseread_fns           r   _mock_urlopen_sharedz>_monkey_patch_webbased_functions.<locals>._mock_urlopen_sharedj   s/   ~~o.....#C00+~66 	4! 4= 4QVVXX&&(T22	4 	4 	4 	4 	4 	4 	4 	4
 ")D!1!1^002233(U33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   5C 7<C  CCc                 "     | |d          S N.jsonrA   rI   rJ   rB   r-   )rA   rI   rR   url_prefix_data_descriptions     r   _mock_urlopen_data_descriptionzH_monkey_patch_webbased_functions.<locals>._mock_urlopen_data_descriptionx   s)    ##+7	
 
 
 	
r   c                 "     | |d          S rT   r-   )rA   rI   rR   url_prefix_data_featuress     r   _mock_urlopen_data_featureszE_monkey_patch_webbased_functions.<locals>._mock_urlopen_data_features   )    ##+4	
 
 
 	
r   c                 "     | |d          S )Nz.arffrV   r-   )rA   rI   rR   url_prefix_download_datas     r   _mock_urlopen_download_datazE_monkey_patch_webbased_functions.<locals>._mock_urlopen_download_data   r\   r   c                    |                                sJ  | d          }t          	|          5 } 
|d          }|                                                    d          }t	          j        |          }d d d            n# 1 swxY w Y   d|v rt          d ddd d           t          	|          5 }|r=t          |                                          }t          |d          cd d d            S  
|d          }t          |                                          }t          |d	          cd d d            S # 1 swxY w Y   d S )
NrU   rG   zutf-8error  Simulated mock errorrA   codemsghdrsrM   TF)	rH   r
   r    decodejsonloadsr   r   r   )rA   rI   rK   rL   rN   	decoded_s	json_datarM   rE   rO   rQ   url_prefix_data_lists           r   _mock_urlopen_data_listzA_monkey_patch_webbased_functions.<locals>._mock_urlopen_data_list   s   ~~233333#C11 +~66 	.!$WQ--N&++--44W==I
9--I	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. is(>Td    +~66 	4! 4QVVXX&&(T22	4 	4 	4 	4 	4 	4 	4 	4
 ")D!1!1^002233(U33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s*   AB		BB<3E<<EE	E	c                    |                                  }|                     d          dk    }|                              r ||          S |                    
          r ||          S |                              r ||          S |                    	          r ||          S t          d|z            )NzAccept-encodingr&   zUnknown mocking URL pattern: %s)get_full_url
get_headerrH   
ValueError)requestargskwargsrA   rI   rX   r[   rn   r_   rW   rZ   rm   r^   s        r   _mock_urlopenz7_monkey_patch_webbased_functions.<locals>._mock_urlopen   s    ""$$!,,->??6I>>.// 		F**3@@@^^455 	F..sODDD^^455 	F..sODDD^^788 	F11#GGG>DEEEr   urlopen)r&   openOPENML_TEST_DATA_MODULEtest_offlinesetattrsklearndatasets_openml)contextdata_idrP   rv   rE   rX   r[   rn   r_   rR   rO   rD   rQ   rW   rZ   rm   r^   s     ` @@@@@@@@@@@@@r    _monkey_patch_webbased_functionsr   H   s    #IN<FKiG)C////AK
 
 
 
 
(4 4 4 4 4 4 4 4
 
 
 
 
 

 
 
 
 
 

 
 
 
 
 
4 4 4 4 4 4 4 40F F F F F F F F F F F F  L(0)]KKKKKL Lr   z9data_id, dataset_params, n_samples, n_features, n_targets=   r            iris)nameversion      &   anneal1        cpu鍞     H      _  
      r   zadult-census  M   MiceProtein  i  parser	liac-arffpandasrP   Fc                    t          j        d          }t          | ||           t          d	dd|d|}	t	          |	j        d                   |k    sJ t          |	t                    sJ t          |	j        |j	                  sJ |	j        j
        |||z   fk    sJ t          |	j        |j	                  sJ |	j        j
        ||fk    sJ |dk    r0t          |	j        |j                  sJ |	j        j
        |fk    sJ n0t          |	j        |j	                  sJ |	j        j
        ||fk    sJ |	j        J dS )
zCheck the behaviour of `fetch_openml` with `as_frame=True`.

    Fetch by ID and/or name (depending if the file was previously cached).
    r   rP   TFas_framecacher   idr   Nr-   )pytestimportorskipr   r   intdetails
isinstancer   frame	DataFrameshaper   targetSeries
categories)
monkeypatchr   dataset_params	n_samples
n_features	n_targetsr   rP   pdbunchs
             r   test_fetch_openml_as_frame_truer      s   R 
	X	&	&B$['WWWW   	 E u}T"##w....eU#####ek2<00000;J,B CCCCCej",/////:	:66666A~~%,	22222|!i\11111%,55555|!i%;;;;;#####r   c                 2   t          j        d           t          | |d           t          d	dd|d|}t	          |j        d                   |k    sJ t          |t                    sJ |j        J t          |j	        t          j                  sJ |j	        j        ||fk    sJ t          |j        t          j                  sJ |dk    r|j        j        |fk    sJ n|j        j        ||fk    sJ t          |j        t                    sJ dS )
znCheck the behaviour of `fetch_openml` with `as_frame=False`.

    Fetch both by ID and/or name + version.
    r   Tr   Fr   r   Nr   r-   )r   r   r   r   r   r   r   r   r   r   npndarrayr   r   r   dict)r   r   r   r   r   r   r   r   s           r    test_fetch_openml_as_frame_falser     sJ   J !!!$['NNNN   	 E u}T"##w....eU#####;ej"*-----:	:66666elBJ/////A~~|!i\11111|!i%;;;;;e&-------r   )r   r   r   c                   
 t          j        d          t          | |d           t          |ddd          }t          |ddd          }|j        |j        c}

fd}|                    |          }j                            |
           |j        |j        c}j                            |j	                 
           fd}|                    |          }	j                            |	           d	S )
z:Check the consistency of the LIAC-ARFF and pandas parsers.r   Tr   Fr   r   r   r   r   c                     | j                  }j        j                            |          r|                     |j                  S | S r   )r   apitypesis_numeric_dtypeastypedtype)seriespandas_seriesdata_pandasr   s     r   convert_numerical_dtypeszFtest_fetch_openml_consistency_parser.<locals>.convert_numerical_dtypesb  sC    #FK06<((77 	==!4555Mr   c                    | j                  }j        j                            |          r|                     |j                  S j        j                            |          r$| j                            |j        j	                  S | S r   )
r   r   r   r   r   r   is_categorical_dtypecatrename_categoriesr   )r   r   frame_pandasr   s     r   (convert_numerical_and_categorical_dtypeszVtest_fetch_openml_consistency_parser.<locals>.convert_numerical_and_categorical_dtypesv  s{    $V[16<((77 
	==!4555V\..}== 	 ://0A0LMMMMr   N)
r   r   r   r   r   applytestingassert_frame_equalr   feature_names)r   r   
bunch_liacbunch_pandas	data_liacr   data_liac_with_fixed_dtypes
frame_liacr   frame_liac_with_fixed_dtypesr   r   r   s             @@@r   $test_fetch_openml_consistency_parserr   I  s]    
	X	&	&B$['NNNN	  J  	  L (_l.?I{      #,//2J"K"KJ!!"={KKK  */1CJ J!!,|/I"JKXXX      $.#3#30$ $  J!!">MMMMMr   c                 
   t          j        d           d}t          | |d           t          |dd|          }t          |dd|          }t	          |j        |j                   t          |j        |j                   dS )z^Check the equivalence of the dataset when using `as_frame=False` and
    `as_frame=True`.
    r   r   Tr   Fr   N)r   r   r   r   r   r   r   r   )r   r   r   bunch_as_frame_truebunch_as_frame_falses        r   -test_fetch_openml_equivalence_array_dataframer     s     !!!G$['NNNN&	   (	   (-/B/GHHH+24G4NOOOOOr   c                 x   t          j        d          }|j        j        j        }d}d}d}d} |g d          }t
          j        gdz  }	g d}
d	}t          | |d
           t          |d
d|          }|j	        }|j
        }|j        }t          ||j                  sJ t          j        |j        |	k              sJ |j        |k    sJ t          j        |j        |
k              sJ t          j        |j        |
k              sJ |j        |gk    sJ t          ||j                  sJ |j        |k    sJ |j        |k    sJ |j        |k    sJ |j        j        sJ t          ||j                  sJ |j        |k    sJ t          j        |j        |	|gz   k              sJ |j        j        sJ dS )z>Check fetching on a numerical only dataset with string labels.r   r   r   r   )r   )r      )zIris-setosazIris-versicolorzIris-virginicar   )sepallength
sepalwidthpetallength
petalwidthclassTFr   N)r   r   r   r   CategoricalDtyper   float64r   r   r   r   r   r   r   alldtypesr   columnsr   target_namesr   r   r   index	is_unique)r   r   r   r   r   
data_shapetarget_shapeframe_shapetarget_dtypedata_dtypes
data_namestarget_namer   r   r   r   s                   r   test_fetch_openml_iris_pandasr     s    
	X	&	&Bv|4GJLK##<<< L :,"KKKKJK$['4@@@	  E :D\FKEdBL)))))6$+,-----:####6$,*,-----6%%344444+....fbi(((((<<''''<<'''';+%%%%<!!!!eR\*****;+%%%%6%,+">>?????;      r   target_columnr   r   c                    t          j        d          }d}t          | |d           t          |dd||          }t          |dd|          }|j                            |j        |j                   t          |t                    rL|j        	                    |j
        j        |                    |                     |j        j        dk    sJ d	S |j
        j        |k    sJ |j        j        dk    sJ d	S )
z@Check that we can force the target to not be the default target.r   r   TF)r   r   r   r   r   r   )r      r   N)r   r   r   r   r   r   r   r   listassert_index_equalr   r   Indexr   r   r   )r   r   r   r   r   bunch_forcing_targetbunch_defaults          r   !test_fetch_openml_forcing_targetsr     s(   
 
	X	&	&BG$['4@@@'#   !	  M J!!"6"<m>QRRR-&& ;

%% '/-1H1H	
 	
 	
 $(.(::::::#*/=@@@@#(.(::::::r   )r   r   r   r   r   c                    t          j        d          }t          | |d           t          |ddd|          }t          |ddd|          \  }}|j                            |j        |           t          ||j                  r"|j        	                    |j
        |           dS |j                            |j
        |           dS )z>Check the behaviour of `return_X_y=True` when `as_frame=True`.r   Tr   Fr   r   r   
return_X_yr   N)r   r   r   r   r   r   r   r   r   assert_series_equalr   )r   r   r   r   r   Xys          r   .test_fetch_openml_equivalence_frame_return_X_yr    s    
 
	X	&	&B$['NNNN  E   DAq J!!%*a000!RY 7

&&u|Q77777

%%elA66666r   )r   r   r   r   c                     t          j        d           t          | |d           t          |ddd|          }t          |ddd|          \  }}t	          |j        |           t	          |j        |           dS )z?Check the behaviour of `return_X_y=True` when `as_frame=False`.r   Tr   Fr   N)r   r   r   r   r   r   r   )r   r   r   r   r  r  s         r   .test_fetch_openml_equivalence_array_return_X_yr  !  s    
 !!!$['NNNN  E   DAq uz1%%%u|Q'''''r   c                     t          j        d           d}t          | |d           d}t          ||dd          }t          ||dd          }|j        j        j        dk    sJ |j        j        d	k    sJ d
S )z9Check the difference between liac-arff and pandas parser.r   r   Tr   Fr   r   rL   ON)r   r   r   r   r   r   kind)r   r   r   bunch_liac_arffr   s        r   $test_fetch_openml_difference_parsersr  >  s     !!!G$['NNNN H"	  O  	  L %*c1111"c))))))r   module)scopec                  2    g dg dg dg dg dg dg ddS )	z+Returns the columns names for each dataset.)r   r   r   r   r   )'familyzproduct-typesteelcarbonhardnesstemper_rolling	conditionformabilitystrength
non-ageingsurface-finishzsurface-qualityenamelabilitybcbfbtbw%2Fmeblmchromphoscbondmarviexptlferrocorrblue%2Fbright%2Fvarn%2Fcleanlustrejurofmspr   thickwidthr?   oilborepackingr   )vendorMYCTMMINMMAXCACHCHMINCHMAXr   )N Mean_Acc1298_Mean_Mem40_CentroidMean_Acc1298_Mean_Mem40_RolloffMean_Acc1298_Mean_Mem40_FluxMean_Acc1298_Mean_Mem40_MFCC_0Mean_Acc1298_Mean_Mem40_MFCC_1Mean_Acc1298_Mean_Mem40_MFCC_2Mean_Acc1298_Mean_Mem40_MFCC_3Mean_Acc1298_Mean_Mem40_MFCC_4Mean_Acc1298_Mean_Mem40_MFCC_5Mean_Acc1298_Mean_Mem40_MFCC_6Mean_Acc1298_Mean_Mem40_MFCC_7Mean_Acc1298_Mean_Mem40_MFCC_8Mean_Acc1298_Mean_Mem40_MFCC_9Mean_Acc1298_Mean_Mem40_MFCC_10Mean_Acc1298_Mean_Mem40_MFCC_11Mean_Acc1298_Mean_Mem40_MFCC_12Mean_Acc1298_Std_Mem40_CentroidMean_Acc1298_Std_Mem40_RolloffMean_Acc1298_Std_Mem40_FluxMean_Acc1298_Std_Mem40_MFCC_0Mean_Acc1298_Std_Mem40_MFCC_1Mean_Acc1298_Std_Mem40_MFCC_2Mean_Acc1298_Std_Mem40_MFCC_3Mean_Acc1298_Std_Mem40_MFCC_4Mean_Acc1298_Std_Mem40_MFCC_5Mean_Acc1298_Std_Mem40_MFCC_6Mean_Acc1298_Std_Mem40_MFCC_7Mean_Acc1298_Std_Mem40_MFCC_8Mean_Acc1298_Std_Mem40_MFCC_9Mean_Acc1298_Std_Mem40_MFCC_10Mean_Acc1298_Std_Mem40_MFCC_11Mean_Acc1298_Std_Mem40_MFCC_12Std_Acc1298_Mean_Mem40_CentroidStd_Acc1298_Mean_Mem40_RolloffStd_Acc1298_Mean_Mem40_FluxStd_Acc1298_Mean_Mem40_MFCC_0Std_Acc1298_Mean_Mem40_MFCC_1Std_Acc1298_Mean_Mem40_MFCC_2Std_Acc1298_Mean_Mem40_MFCC_3Std_Acc1298_Mean_Mem40_MFCC_4Std_Acc1298_Mean_Mem40_MFCC_5Std_Acc1298_Mean_Mem40_MFCC_6Std_Acc1298_Mean_Mem40_MFCC_7Std_Acc1298_Mean_Mem40_MFCC_8Std_Acc1298_Mean_Mem40_MFCC_9Std_Acc1298_Mean_Mem40_MFCC_10Std_Acc1298_Mean_Mem40_MFCC_11Std_Acc1298_Mean_Mem40_MFCC_12Std_Acc1298_Std_Mem40_CentroidStd_Acc1298_Std_Mem40_RolloffStd_Acc1298_Std_Mem40_FluxStd_Acc1298_Std_Mem40_MFCC_0Std_Acc1298_Std_Mem40_MFCC_1Std_Acc1298_Std_Mem40_MFCC_2Std_Acc1298_Std_Mem40_MFCC_3Std_Acc1298_Std_Mem40_MFCC_4Std_Acc1298_Std_Mem40_MFCC_5Std_Acc1298_Std_Mem40_MFCC_6Std_Acc1298_Std_Mem40_MFCC_7Std_Acc1298_Std_Mem40_MFCC_8Std_Acc1298_Std_Mem40_MFCC_9Std_Acc1298_Std_Mem40_MFCC_10Std_Acc1298_Std_Mem40_MFCC_11Std_Acc1298_Std_Mem40_MFCC_12BH_LowPeakAmpBH_LowPeakBPMBH_HighPeakAmpBH_HighPeakBPMBH_HighLowRatioBHSUM1BHSUM2BHSUM3zamazed.suprisedzhappy.pleasedzrelaxing.calmzquiet.stillz
sad.lonelyzangry.aggresive)age	workclasszfnlwgt:z
education:zeducation-num:zmarital-status:zoccupation:zrelationship:zrace:zsex:zcapital-gain:zcapital-loss:zhours-per-week:znative-country:r   )NDYRK1A_NITSN1_NBDNF_NNR1_NNR2A_NpAKT_NpBRAF_N	pCAMKII_NpCREB_NpELK_NpERK_NpJNK_NPKCA_NpMEK_NpNR1_NpNR2A_NpNR2B_NpPKCAB_NpRSK_NAKT_NBRAF_NCAMKII_NCREB_NELK_NERK_NGSK3B_NJNK_NMEK_NTRKA_NRSK_NAPP_N
Bcatenin_NSOD1_NMTOR_NP38_NpMTOR_NDSCR1_NAMPKA_NNR2B_NpNUMB_NRAPTOR_NTIAM1_NpP70S6_NNUMB_NP70S6_NpGSK3B_NpPKCG_NCDK5_NS6_NADARB1_NAcetylH3K9_NRRP1_NBAX_NARC_NERBB4_NnNOS_NTau_NGFAP_NGluR3_NGluR4_NIL1B_NP3525_NpCASP9_NPSD95_NSNCA_NUbiquitin_NpGSK3B_Tyr216_NSHH_NBAD_NBCL2_NpS6_NpCFOS_NSYP_N	H3AcK18_NEGR1_NH3MeK4_NCaNA_Nr   )pclasssurvivedr   sexr  sibspparchticketfarecabinembarkedboatbody	home.destr   r   r   r   r   r   r   r-   r-   r   r   datasets_column_namesr  ^  s     POO(
 (
 (
R SRRO
 O
 O
`
 
 
"O
 O
 O
`
 
 
{m m mr   c                      i i ddddddddd	d
dddddddd
dddddddddddddd
ddddddddddd
dd
i i i ddiddddddd d!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&  r'  r(  r)  r*  r+  r,  r/  r1  r  r   i  r   i  i7  i  i4  )r  r  r  r  r  r  r  r  r-   r-   r   r   datasets_missing_valuesr  Q  sD    
b
a
 
 1	

 "
 b
 R
 "
 "
 "
 q
 !
 
 R
 B
  R!
" R#
$ ,.7
 
 
: !}
 
G, , ,r   zJdata_id, parser, expected_n_categories, expected_n_floats, expected_n_ints))r   r   r   r   r   )r   r   r   r   r   )r   r   !   r   r   )r   r   r  r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   E   r   )r   r   r  r   r   )r   r   r  r   r   )r   r   r   L   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   c	                    t          j        d          }	|	j        j        j        t          | ||           t          |dd|          }
|
j        }t          fd|j	        D                       }t          d |j	        D                       }t          d |j	        D                       }||k    sJ ||k    sJ ||k    sJ |j
                                        ||         k    sJ |                                                                                                }|                                D ])\  }}||                             |d	          }||k    sJ *d
S )zYCheck that `fetch_openml` infer the right number of categories, integers, and
    floats.r   r   TFr   c                 4    g | ]}t          |          |S r-   )r   ).0r   r   s     r   
<listcomp>z5test_fetch_openml_types_inference.<locals>.<listcomp>  s)    PPP5Ju>N,O,OPPPPr   c                 (    g | ]}|j         d k    |S )rL   r
  r  r   s     r   r  z5test_fetch_openml_types_inference.<locals>.<listcomp>  s$    IIIeuzS7H7HE7H7H7Hr   c                 (    g | ]}|j         d k    |S )ir  r  s     r   r  z5test_fetch_openml_types_inference.<locals>.<listcomp>  s$    GGGEUZ35F5F%5F5F5Fr   r   N)r   r   r   r   r   r   r   r   r?   r   r   tolistisnasumto_dictitemsget)r   r   r   expected_n_categoriesexpected_n_floatsexpected_n_intsrP   r  r  r   r   r   n_categoriesn_floatsn_intsframe_feature_to_n_nanr   	n_missingexpected_missingr   s                      @r   !test_fetch_openml_types_inferencer    s   V 
	X	&	&Bv|4$['WWWW	  E KEPPPPELPPP L IIu|IIIJJHGGU\GGGHHF00000(((((_$$$$=!!%:7%CCCCC"ZZ\\--//779917799 - -i27;??aHH,,,,,,- -r   z0ignore:The default value of `parser` will changezparams, err_msgunknownz`parser` must be one ofr   z`as_frame` must be one ofc                     d}t          | |d           t          j        t          |          5  t	          dd|i| d d d            d S # 1 swxY w Y   d S )Nr   Tmatchr   r-   )r   r   raisesrr   r   r   paramserr_msgr   s       r   &test_fetch_openml_validation_parameterr    s     G$['4@@@	z	1	1	1 0 0//W////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AAAr  autor   r   c                    d}	 t          d           t          d          # t          $ rZ t          | |d           d}t	          j        t          |          5  t          d	d|i| ddd           Y dS # 1 swxY w Y   Y dS w xY w)
z=Check that we raise the proper errors when we require pandas.r   !test_fetch_openml_requires_pandas.This test requires pandas to not be installed.Tz;requires pandas to be installed. Alternatively, explicitelyr   r   Nr-   )r	   r   ImportErrorr   r   r  r   )r   r  r   r  s       r   'test_fetch_openml_requires_pandas_errorr    s     GI@AAA GHHH  4 4 4(gtDDDO];g666 	4 	4333F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44s3   " 8BA7)B7A;	;B>A;	?BBc                    ddd}d}	 t          d           t          d          # t          $ rZ t          | |d           d}t	          j        t          |	          5  t          dd
|i| ddd           Y dS # 1 swxY w Y   Y dS w xY w)zICheck that we raise a warning that pandas will be required in the future.Fr  r  r   r
  r  TzGFrom version 1.4, `parser='auto'` with `as_frame=False` will use pandasr   r   Nr-   )r	   r   r  r   r   warnsFutureWarningr   )r   r  r   warn_msgs       r   +test_fetch_openml_requires_pandas_in_futurer    s   622FG
I@AAA GHHH  4 4 4(gtDDDU 	 \-x888 	4 	4333F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44s3   ' 8BA<.B<B 	 BB 	B
Bz2ignore:Version 1 of dataset Australian is inactivez:Sparse ARFF datasets cannot be loaded with parser='pandas'z9Sparse ARFF datasets cannot be loaded with as_frame=True.)r   r   c                     t          j        d           d}t          | |d           t          j        t          |          5  t          d|dd| ddd           dS # 1 swxY w Y   dS )	ztCheck that we raise the expected error for sparse ARFF datasets and
    a wrong set of incompatible parameters.
    r   $  Tr   F)r   r   Nr-   )r   r   r   r  rr   r   r  s       r   #test_fetch_openml_sparse_arff_errorr  	  s    0 !!!G$['4@@@	z	1	1	1 
 
 	
	
 	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A  A$'A$zdata_id, data_type)r   	dataframe)r  sparsec                     t          j        d          }t          | |d           t          |ddd          }|dk    r|j        nt
          j        j        }t          |j	        |          sJ dS )z&Check the auto mode of `fetch_openml`.r   Tr  F)r   r   r   r   r  N)
r   r   r   r   r   scipyr  
csr_matrixr   r   )r   r   	data_typer   r   klasss         r   test_fetch_openml_auto_moder  /  st     
	X	&	&B$['4@@@&uUUUD%44BLL%,:QEdi'''''''r   c                 6   t          j        d           d}t          | |d           d}t          j        t          |          5  t          d          5  t          |dd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 )z[Check that we raise a warning regarding the working memory when using
    LIAC-ARFF parser.r   r   Tz*Could not adhere to working_memory config.r   gư>)working_memoryFr   r   N)r   r   r   r  UserWarningr   r   )r   r   rf   s      r   :test_convert_arff_data_dataframe_warning_low_memory_pandasr!  D  s3    !!!G$['4@@@
6C	k	-	-	-  4000 	 	"	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   BA6*B6A:	:B=A:	>BBBc                     d}d}t          | ||           d}t          j        t          |          5  t	          |ddd           ddd           dS # 1 swxY w Y   dS )	z\Check that a warning is raised when multiple versions exist and no version is
    requested.r   r   zMultiple active versions of the dataset matching the name iris exist. Versions may be fundamentally different, returning version 1.r   Fr   )r   r   r   r   Nr   r   r  r   r   )r   rP   r   	data_namerf   s        r   ,test_fetch_openml_iris_warn_multiple_versionr%  X  s     GI$['=III	 
 
k	-	-	- 
 
		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AAAc                     d}d}d}d}t          | ||           t          ||ddd          }|j        j        ||fk    sJ |j        J dS )z/Check that we can get a dataset without target.r   Nr   r   Fr   r   r   r   r   r   )r   r   r   r   r   )r   rP   r   r   expected_observationsexpected_featuresr   s          r   test_fetch_openml_no_targetr*  o  s     GM$['=III#  D 9?46GHHHHH;r   c                 4   t          j        d           d}t          | ||           t          |dd|          }|j        j        d         }|j        d                                                                         sJ t          |j	        g d           d	S )
zRcheck that missing values in categories are compatible with pandas
    categoricalr   iY  r   FTr   r   r   r   r  )FEMALEMALE_N)
r   r   r   r   r   r   r  anyr   r   )r   rP   r   r   penguins	cat_dtypes         r   test_missing_values_pandasr3    s    
 !!!G$['WWWW	  H $U+I=$$&&**,,,,,y+-D-D-DEEEEEr   r     glass2)r   r   r   c                     d}t          | ||           d}t          j        t          |          5  t	          ddddd|}ddd           n# 1 swxY w Y   |j        j        dk    sJ |j        d	         d
k    sJ dS )z;Check that we raise a warning when the dataset is inactive.r4  z(Version 1 of dataset glass2 is inactive,r   Fr   )r   r   r   N)   r  r   40675r-   )r   r   r  r   r   r   r   r   )r   rP   r   r   rf   r5  s         r   test_fetch_openml_inactiver9    s     G$['=III
4C	k	-	-	- 
 
 
%
 
?M
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ;((((>$7******s   AAAz"data_id, params, err_type, err_msgzNo active dataset glass2 foundr   r   )r   r   z1Can only handle homogeneous multi-target datasets)r   r   zOSTRING attributes are not supported for array representation. Try as_frame=Truer  )r   r   r   zTarget column 'family'	undefinedz(Could not find target_column='undefined'c                    t          | ||           |                    dd          s|dk    rt          j        d           t          j        ||          5  t          dd|d| d d d            d S # 1 swxY w Y   d S )Nr   Tr   r   F)r   r   r-   )r   r  r   r   r  r   )r   rP   r   r  err_typer  r   s          r   test_fetch_openml_errorr=    s    ` %['=IIIzz*d## &v'9'9H%%%	xw	/	/	/ ; ;:5::6:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   A55A9<A9zparams, err_type, err_msgr   r   z?Dataset data_id=-1 and version=version passed, but you can onlynAmE)r   r   z9Dataset data_id=-1 and name=name passed, but you can onlyzFNeither name nor data_id are provided. Please provide name or data_id.c                 |    t          j        ||          5  t          di |  d d d            d S # 1 swxY w Y   d S )Nr   r-   )r   r  r   )r  r<  r  s      r   )test_fetch_openml_raises_illegal_argumentr@    s    4 
xw	/	/	/  v                 s   155c                 .   d}d}d}t          | ||           d}|                    |          }t          j        t          |          5  t          ||ddd           d d d            n# 1 swxY w Y   d	}|                    |          }t          j        t          |          5  t          ||ddd           d d d            n# 1 swxY w Y   d}|                    |          }t          j        t          |          5  t          ||d
gddd           d d d            n# 1 swxY w Y   d	}|                    |          }t          j        t          |          5  t          ||d
gddd           d d d            d S # 1 swxY w Y   d S )Nr   z.target_column='{}' has flag is_row_identifier.z&target_column='{}' has flag is_ignore.MouseIDr   Fr   r'  Genotyper   )r   formatr   r  r   r   )r   rP   r   expected_row_id_msgexpected_ignore_msg
target_colrf   s          r   test_warn_ignore_attributerH    s   GJB$['=IIIJ

$
$Z
0
0C	k	-	-	- 
 
$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 J

$
$Z
0
0C	k	-	-	- 
 
$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 J

$
$Z
0
0C	k	-	-	- 
 
%w/	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 J

$
$Z
0
0C	k	-	-	- 
 
%w/	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sH   
A++A/2A/(C		CCD))D-0D-&F

FFc                     d}t          | ||           d}t          j        t          |          5  t	          |ddd           d d d            d S # 1 swxY w Y   d S )Nr   zJOpenML registered a problem with the dataset. It might be unusable. Error:r   Fr   r,  r#  r   rP   r   rf   s       r   test_dataset_with_openml_errorrK  5  s    G$['=III
VC	k	-	-	- W WWEE+VVVVW W W W W W W W W W W W W W W W W W   AAAc                     d}t          | ||           d}t          j        t          |          5  t	          |ddd           d d d            d S # 1 swxY w Y   d S )Nr   zFOpenML raised a warning on the dataset. It might be unusable. Warning:r   Fr   r,  r#  rJ  s       r    test_dataset_with_openml_warningrN  >  s    G$['=III
RC	k	-	-	- W WWEE+VVVVW W W W W W W W W W W W W W W W W WrL  c                    d}t          | ||           t          j        j        j                            |          }t          |                    d                    }t          ||          }t          ||          }t          j                            |          sJ t          ||          }|                                |                                k    sJ d S )Nr   scikit_learn_data)r   r|   r}   r~   
_DATA_FILErD  strmkdirr   r   ospathisfiler    )	r   rP   tmpdirr   openml_pathcache_directory	response1location	response2s	            r   test_open_openml_url_cacher]  K  s    G$['=III"*5<<WEEK&,,':;;<<O o>>I{O<<H7>>(##### o>>I>>y~~////////r   write_to_diskc                    d}t           j        j        j                            |          }t          |                    d                    }t          ||          fd}|                     t           j        j        d|           t          j
        t          d          5  t          ||           d d d            n# 1 swxY w Y   t          j                                      rJ d S )Nr   rP  c                     r=t          d          5 }|                    d           d d d            n# 1 swxY w Y   t          d          )Nw Invalid request)rx   writerr   )rs   rt   ru   rL   r[  r^  s       r   rv   z>test_open_openml_url_unlinks_local_path.<locals>._mock_urlopenc  s     	h$$               *+++s   6::rw   rc  r   )r|   r}   r~   rQ  rD  rR  rS  r   r{   r   r  rr   r   rT  rU  exists)r   rW  r^  r   rX  rY  rv   r[  s     `    @r   'test_open_openml_url_unlinks_local_pathrf  \  s)   G"*5<<WEEK&,,':;;<<O{O<<H, , , , , , (0)]KKK	z):	;	;	; 7 7o6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 w~~h'''''''s   'CCCc                 b   d}t           j        j        j                            |          }t          |                     d                    }t          ||          t          j	        t          j
                                                 t          d          5 }|                    d           d d d            n# 1 swxY w Y   t          ||          fd            }d}t          j        t"          |          5   |            }d d d            n# 1 swxY w Y   |dk    sJ d S )	Nr   rP  ra  rb  c                  d    t           j                                       rt          d          dS )NzFile exist!r   )rT  rU  re  	Exception)r[  s   r   
_load_dataz/test_retry_with_clean_cache.<locals>._load_data{  s.     7>>(## 	+M***qr   z!Invalid cache, redownloading filer   r   )r|   r}   r~   rQ  rD  rR  rS  r   rT  makedirsrU  dirnamerx   rd  r   r   r  RuntimeWarning)	rW  r   rX  rY  rL   rj  r  resultr[  s	           @r   test_retry_with_clean_cachero  q  s   G"*5<<WEEK&,,':;;<<O{O<<HK))***	h		 	               [/::    ;: 3H	nH	5	5	5                Q;;;;;;s$    CC	CDD #D c                 R   d}t           j        j        j                            |          }t          |                     d                    }t          ||          d             }d}t          j	        t          |          5   |             d d d            d S # 1 swxY w Y   d S )Nr   rP  c                  *    t          d ddd d           )Nrb   rc   rd   r   r-   r   r   rj  z:test_retry_with_clean_cache_http_error.<locals>._load_data  s%    3$:$
 
 
 	
r   rc   r   )r|   r}   r~   rQ  rD  rR  rS  r   r   r  r   )rW  r   rX  rY  rj  	error_msgs         r   &test_retry_with_clean_cache_http_errorrs    s    G"*5<<WEEK&,,':;;<<O[/::
 
 ;:

 'I	y		2	2	2  
                 s   BB #B c                    d }d}t          |                    d                    }t          | ||           t          |d|ddd          \  }}|                     t
          j        j        d|           t          |d|ddd          \  }}	t          j	        
                    ||           t          j	        
                    ||	           d S )	Nc                 J    t          d|                                 z            )NzhThis mechanism intends to test correct cachehandling. As such, urlopen should never be accessed. URL: %s)rr   rp   rs   rt   ru   s      r   _mock_urlopen_raisez4test_fetch_openml_cache.<locals>._mock_urlopen_raise  s/      ""$$%
 
 	
r   r   rP  TFr   )r   r   r7   r  r   r   rw   )rR  rS  r   r   r{   r|   r}   r~   r   r   r   )
r   rP   rW  rw  r   rY  	X_fetched	y_fetchedX_cachedy_cacheds
             r   test_fetch_openml_cacher|    s    
 
 
 G&,,':;;<<O$['=III'!  Iy (0)=PQQQ%!  Hh J!!)X666J!!)X66666r   zas_frame, parser))Tr   )Fr   )Tr   )Fr   c                 Z   |s|dk    rt          j        d           d}t          | |d           t          dz   d| z   }d}|dz  t	          ||          5 }t          j        |d          }	t          |	                                          }
d	|
t          |
          d
z
  <   ddd           n# 1 swxY w Y   t          j
        d          5 }|                    |
           ddd           n# 1 swxY w Y   t          j        j        j        fd}|                     t          j        j        d|           t          j        t$                    5 }t          j                            |d||           ddd           n# 1 swxY w Y   |                    d          sJ dS )z/Check that the checksum is working as expected.r   r   Tr9   r:   zdata-v1-dl-1666876.arff.gzztest_invalid_checksum.arffrG   %   r   Nwbc                     |                                  }|                    d          rZt          d          5 }|                                }d d d            n# 1 swxY w Y   t	          t          |          d          S  |           S )Nzdata/v1/download/1666876rG   Tr'   )rp   endswithrx   r    r   r   )rs   rt   ru   rA   rL   corrupted_datacorrupt_copy_pathmocked_openml_urls         r   swap_file_mockz9test_fetch_openml_verify_checksum.<locals>.swap_file_mock  s    ""$$<<233 	.'.. *!!"* * * * * * * * * * * * * * *$W^%<%<dKKKK$$W---s   AA #A rw   Fr,  1666876)r   r   r   ry   r
   r&   rx   	bytearrayr    r?   GzipFilerd  r|   r}   r~   rw   r{   r  rr   r   r  )r   r   r   rW  r   r   original_data_moduleoriginal_data_file_name	orig_file	orig_gzipr   modified_gzipr  excr  r  s                 @@r   !test_fetch_openml_verify_checksumr    s     &6X%%H%%%G$['4@@@ 3S8???J:!==	*,C	D	D !	Ii..	))** SYY]! ! ! ! ! ! ! ! ! ! ! ! ! ! !
 
($	/	/ "=D!!!" " " " " " " " " " " " " " "  (08. . . . . . (0)^LLL 
z	"	" 
c%%58F 	& 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 99Ys7   AB11B58B5C33C7:C7$F		FFc                    d }|                      t          j        j        d|           d}t	          j        t          t          j        dt          |z    d                    5 }t	          j
        t          d          5  t          |d d	           d d d            n# 1 swxY w Y   t          |          d
k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 (    t          dddd d           )Nrb  i  Simulated network errorr   rv  s      r   _mock_urlopen_network_errorzPtest_open_openml_url_retry_on_network_error.<locals>._mock_urlopen_network_error  s    C!:D$GGGr   rw   zinvalid-urlz+A network error occurred while downloading z. Retrying...r   r  r   )delayr   )r{   r|   r}   r~   r   r  r   r=   escaper   r  r   r   r?   )r   r  invalid_openml_urlrecords       r   +test_open_openml_url_retry_on_network_errorr    s   H H H  )-H   '	iC!33C C C
 

 
 
 	  
]9,EFFF 	@ 	@/Q????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@6{{a	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s6   %CB C B$	$C'B$	(CCC)r   r   c                     |dk    rt          j        d           d}t          | ||           t          j                            |dd|          }|J |d         j        dk    sJ d|d	         vsJ dS )
zCheck that we can load the "zoo" dataset.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/14340
    r   >   Fr,  Nr   )e      animalr   )r   r   r   r|   r}   r   r   )r   rP   r   r   datasets        r   &test_fetch_openml_with_ignored_featurer    s     H%%%G$['=III++uuV ,  G  6? I----7?3333333r   c                 2   t          j        d          }d}t          | |d           dd|d}t          dddi|}t          dddi|}|j                            |j        |j                   |j        j                            d	          	                                rJ |j        j        
                    d	          	                                rJ t          ddd
d|}t          ddd
d|}|j                            |j        d         |j        d                    |j        d         j                            d	          	                                rJ |j        d         j        
                    d	          	                                rJ dS )zCheck that we strip the single quotes when used as a string delimiter.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/23381
    r   r   Fr   rP   Tr   r   r   r   r   'r  )r   r   r   Nr-   )r   r   r   r   r   r  r   rR  rH   r0  r  r   )r   r   r   common_paramsmice_pandasmice_liac_arffs         r   test_fetch_openml_strip_quotesr  %  s    
	X	&	&BG$['QVWWWW!%'JJM@@h@-@@K!FFFFFNJ"";#5~7LMMM!%005599;;;;;!%..s337799999 XhhXX-XXK! ( 6C N J""'"N$8$A    )-88==AACCCCC )-66s;;??AAAAAAAr   c                     t          j        d          }d}t          | |d           dd|d}t          dddi|}t          dddi|}|j                            |j        d	         |j        d	                    d
S )zCheck that we can strip leading whitespace in pandas parser.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/25311
    r   i6  Fr  Tr  r   r   r   Nr-   )r   r   r   r   r   r  r   r   r   r   r  adult_pandasadult_liac_arffs         r   $test_fetch_openml_leading_whitespacer  B  s     
	X	&	&BG$['QVWWWW!%'JJMAAxA=AAL"GG+GGGOJ""7#_%:7%C    r   c                     t          j        d          }d}t          | |d           dd|d}t          d
ddi|}t          d
ddi|}|j                            |j        |j                   d	S )zCheck that we can handle escapechar and single/double quotechar.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/25478
    r   iZ  Fr  Tr  r   r   Nr-   )r   r   r   r   r   r   r   r  s         r   &test_fetch_openml_quotechar_escapecharr  T  s     
	X	&	&BG$['QVWWWW!%'JJMAAxA=AAL"GG+GGGOJ!!,"4o6KLLLLLr   c                     t          j        d           d}t          | |d           t          j        t          d          5  t
          j                            |           ddd           dS # 1 swxY w Y   dS )	z?Check that we raise a deprecation warning for parser parameter.r   r   Fr  z)The default value of `parser` will changer   )r   N)r   r   r   r  r  r|   r}   r   )r   r   s     r   $test_fetch_openml_deprecation_parserr  h  s    
!!!G$['QVWWWW	m+V	W	W	W 7 7%%g%6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   !A22A69A6)U__doc__r&   ri   rT  r=   	functoolsr   ior   urllib.errorr   numpyr   scipy.sparser  r   r|   r   sklearn.utilsr   r	   sklearn.utils.fixesr
   sklearn.utils._testingr   r   r   r   sklearn.datasetsr   fetch_openml_origsklearn.datasets._openmlr   r   r   r   ry   rz   r   r   markparametrizer   r   r   r   r   r   r  r  r  fixturer  r  r  filterwarningsr  r  r  r  r  r!  r%  r*  r3  r9  rr   KeyErrorr=  r@  rH  rK  rN  r]  rf  ro  rs  r|  r  r  r  r  r  r  r  r-   r   r   <module>r     s       				 				             " " " " " "           " " " " " " 5 5 5 5 5 5 5 5 , , , , , ,            ? > > > > >            ?        < w(D999pL pL pLp ? 
i_c1a(	f++S!Q7	
YNBA&	
X!,,b"a8	y#Q*	u++S!Q7	E"BA.		4 "b!,	'R3	E"Ar1-	'B2	E"D"a0' 0 K#:;;4-88($ ($ 98 <;1  6($Z ? 
i_c1a(	f++S!Q7	
YNBA&	
X!,,b"a8	y#Q*	u++S!Q7	E"BA.		4 "b!,	'R3	E"Ar1-	'B2# , K#:;;$. $. <;-  0$.R $5$5$566<N <N 76 <NB K#:;;P P <; P8 K#:;;,! ,! <; ,!b K#:;;<,9V*WXX; ; YX <; ;B $=$=$=>>K#:;;7 7 <; ?> 7: $:$:$:;;K#:;;( ( <; <; (4 * * *> ho o  od h- -  -d P   8 4-88)- )- 989  <)-` NOO
I	 9:
i	 "=> 0 0  PO0 V,,v..h// I I II I I" PQQNOO x H	

 G	

  T22G	
 "
 
#  PO RQ(
$ PQQ ( (  RQ (   & 4-88
 
 98
, 4-88  98& 4-88K#:;;F F <; 98F( 4-88	E(q99 
+ 
+  98
+ 4-88(	"J0PQlG-DEE?		
 511		
 H$GG$		
 H%HH$		
 [996		
 k7-CDD6		
C'* *V K#:;;; ; <;W* * 98Z;  DY??M	
 F++G	
 FyAAG	
 T	
! 2 3 2
 4-88.
 .
 98.
b 4-88W W 98W 4-88W W 98W 4-880 0 980  4-88( ( 98((  .    4-88 7  7 98 7J    *  *   * Z     4 4-88#:;;4 4 <; 984(B B B:  $M M M(7 7 7 7 7r   