U
    _»{jN\  ã                   @   sb  d dl mZm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mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* e*egegegegd	œd
d�d d dœdd„ƒZ+G dd„ dƒZ,G dd„ deƒZ-ej. /deeg¡dd„ ƒZ0dd„ Z1ej. /deed ddd�eedddd�g¡dd„ ƒZ2ej. /ded d!dd"œe3d#fedd$d%d"œe3d&fedd dd"œe4d'fed dd(d"œe4d)fedd*dd"œe4d+fg¡d,d-„ ƒZ5d.d/„ Z6d0d1„ Z7ej. /d2e8d3fed3fed4fej9d5fg¡d6d7„ ƒZ:d8d9„ Z;ej. /d:eedd dd�eed ddd�eeddd%d�ed;d<d=hƒeƒ ed
d>�e&ƒ ed?ƒe ƒ eƒ g
¡d@dA„ ƒZ<ej. /dBeeddCd(d�eedDdEdd�feeddCd(d�eedDdEd%d�feeddCd(d�eedFdEdd�feeddCd(d�eedEddd�feeddCd(d�eedFdd%d�feedCddd�eedDdEdd�feedCddd�eedDdEd%d�feedCddd�eedd!dd�feedCddd�eeddDdd�feedCddd�eeddGd%d�feedDdEdd�eeddd(d�feedDdEdd�eedddd�feedDdEdd�eedHdGd%d�feedDdEdd�eedHdGd(d�feedDdEd%d�eedIdJd%d�feedDdEd%d�eedIdJdd�feed!ddd�eed ddd�feedddd�eed ddd�fg¡dKdL„ ƒZ=ej. /d:eƒ ee>ƒeƒ e"ƒ e$ƒ e%ƒ eƒ eeddd%d�g¡dMdN„ ƒZ?ej. /d:eƒ eƒ ee>ƒe"ƒ e$ƒ e%ƒ eƒ e&ƒ eƒ ed
d>�ed;d<d=hƒeedd!dChƒeeddd%d�eed dJd%d�eed dd%d�eedd d%d�eed dd%d�eed ddd�eedd d(d�ed?ƒe ƒ eƒ g¡dOdP„ ƒZ@ej. /dQeed ddd�dRfeed dd%d�dSfed;d<d=hƒd<feeAejBejChƒejCfeDdTdU„ fdVdWdd!gdCdFggfdWe Edd!gdCdFgg¡fdXedd!gdCdFggƒfdYdZejF Gd ¡fd[e,e,ƒ fe8dfed\fd]d^d_ejHfeƒ d*feƒ d`feƒ dfeƒ eId_ƒfeƒ ejHfeƒ dafed?ƒe-d db�fdcg¡ddde„ ƒZJej. /dfeed ddd�efedgdhhƒefeedRdihƒefdWefdXe%fdZe$fde"feDefe8efdjefdke&fed
d>�efed?ƒefdlefd_e!fg¡dmdn„ ƒZKdodp„ ZLdqdr„ ZMdsdt„ ZNdudv„ ZOdwdx„ ZPdydz„ ZQd{d|„ ZRd}d~„ ZSdd€„ ZTd�d‚„ ZUdƒd„„ ZVd…d†„ ZWd‡dˆ„ ZXd‰dŠ„ ZYd‹dŒ„ ZZd�dŽ„ Z[d�d�„ Z\d‘d’„ Z]d“d”„ Z^ej. /d•d
d–g¡d—d˜„ ƒZ_ej. /d™dšd›dœd�g¡dždŸ„ ƒZ`dS )¡é    )ÚIntegralÚRealN)Ú
csr_matrix)Úconfig_contextÚ
get_config)ÚBaseEstimatorÚ_fit_context)ÚLeaveOneOut©Ú
deprecated)Ú
HasMethodsÚHiddenÚIntervalÚInvalidParameterErrorÚMissingValuesÚOptionsÚ
RealNotIntÚ
StrOptionsÚ_ArrayLikesÚ	_BooleansÚ
_CallablesÚ
_CVObjectsÚ_InstancesOfÚ_IterablesNotStringÚ_NanConstraintÚ_NoneConstraintÚ_PandasNAConstraintÚ_RandomStatesÚ_SparseMatricesÚ_VerboseHelperÚgenerate_invalid_param_valÚgenerate_valid_paramÚmake_constraintÚvalidate_params)ÚaÚbÚcÚdT©Úprefer_skip_nested_validation)r'   c                O   s   dS )z/A function to test the validation of functions.N© )r$   r%   r&   r'   ÚargsÚkwargsr*   r*   úh/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/utils/tests/test_param_validation.pyÚ_func(   s    r.   c                   @   sJ   e Zd ZdZedegidd�dd„ ƒZeƒ edegidd�dd„ ƒƒZd	S )
Ú_ClasszJA class to test the _InstancesOf constraint and the validation of methods.r$   Tr(   c                 C   s   dS )zA validated methodNr*   ©Úselfr$   r*   r*   r-   Ú_method3   s    z_Class._methodc                 C   s   dS )zA deprecated validated methodNr*   r0   r*   r*   r-   Ú_deprecated_method7   s    z_Class._deprecated_methodN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r   r2   r   r3   r*   r*   r*   r-   r/   0   s   
r/   c                   @   s@   e Zd ZU dZdegiZeed< dd„ Ze	dd�dd	d
„ƒZ
dS )Ú
_Estimatorz<An estimator to test the validation of estimator parameters.r$   Ú_parameter_constraintsc                 C   s
   || _ d S ©N©r$   r0   r*   r*   r-   Ú__init__B   s    z_Estimator.__init__Tr(   Nc                 C   s   d S r:   r*   ©r1   ÚXÚyr*   r*   r-   ÚfitE   s    z_Estimator.fit)NN)r4   r5   r6   r7   r   r9   ÚdictÚ__annotations__r<   r   r@   r*   r*   r*   r-   r8   =   s
   
r8   Úinterval_typec                 C   s”   t | dddd�}d|kr d|ks$t‚t | dddd�}d|krDd|ksHt‚t | dddd�}d|krhd|kslt‚t | dddd�}d|krŒd|ks�t‚dS )	z.Check the range of values depending on closed.éþÿÿÿé   Úleft©ÚclosedÚrightÚbothÚneitherN)r   ÚAssertionError)rC   Úintervalr*   r*   r-   Útest_interval_rangeJ   s    rN   c                  C   sp   t tdddd�} tj| kst‚t tdddd�} tj | ks>t‚t tdddd�} tj| ks\t‚tj | kslt‚dS )zjCheck that inf is included iff a bound is closed and set to None.

    Only valid for real intervals.
    r   NrI   rG   rF   rK   )r   r   ÚnpÚinfrL   ©rM   r*   r*   r-   Útest_interval_inf_in_boundsZ   s    rR   rM   é   rF   rG   rJ   c                 C   s   t j| kst‚dS )z)Check that np.nan is not in any interval.N)rO   ÚnanrL   rQ   r*   r*   r-   Útest_nan_not_in_intervalj   s    rU   zparams, error, matchç      ð?rE   )ÚtyperF   rI   rH   z=Expecting left to be an int for an interval over the integersg       @rK   z>Expecting right to be an int for an interval over the integersz&left can't be None when closed == leftrI   z(right can't be None when closed == rightéÿÿÿÿzright can't be less than leftc              	   C   s(   t j||d�� tf | Ž W 5 Q R X dS )zNCheck that informative errors are raised for invalid combination of parameters©ÚmatchN)ÚpytestÚraisesr   )ÚparamsÚerrorrZ   r*   r*   r-   Útest_interval_errorss   s     r_   c                  C   sR   t dddhdhd�} |  d¡s"t‚|  d¡s0t‚|  d¡r>t‚dt| ƒksNt‚dS )z*Sanity check for the StrOptions constraintr$   r%   r&   r
   r'   z'c' (deprecated)N)r   Úis_satisfied_byrL   Ústr©Úoptionsr*   r*   r-   Útest_stroptions—   s
    rd   c                  C   sX   t tddtjhdhd�} |  d¡s&t‚|  tj¡s6t‚|  d¡rDt‚dt| ƒksTt‚dS )z'Sanity check for the Options constraintg      à¿ç      à?r
   ç®Gáz®ó?z-0.5 (deprecated)N)r   r   rO   rP   r`   rL   ra   rb   r*   r*   r-   Útest_options¡   s
    rg   ztype, expected_type_nameÚintÚfloatznumpy.ndarrayc                 C   s$   t | ƒ}t|ƒd|› d�ks t‚dS )z?Check the string representation of the _InstancesOf constraint.zan instance of 'ú'N)r   ra   rL   )rW   Zexpected_type_nameÚ
constraintr*   r*   r-   Ú%test_instances_of_type_human_readable«   s    rl   c                  C   s\   t ddgƒ} G dd„ dƒ}G dd„ dƒ}|  |ƒ ¡s8t‚|  |ƒ ¡rHt‚t| ƒdksXt‚dS )	z Check the HasMethods constraint.r$   r%   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ztest_hasmethods.<locals>._Goodc                 S   s   d S r:   r*   ©r1   r*   r*   r-   r$   ¿   s    z test_hasmethods.<locals>._Good.ac                 S   s   d S r:   r*   rm   r*   r*   r-   r%   Â   s    z test_hasmethods.<locals>._Good.bN)r4   r5   r6   r$   r%   r*   r*   r*   r-   Ú_Good¾   s   rn   c                   @   s   e Zd Zdd„ ZdS )ztest_hasmethods.<locals>._Badc                 S   s   d S r:   r*   rm   r*   r*   r-   r$   Æ   s    ztest_hasmethods.<locals>._Bad.aN)r4   r5   r6   r$   r*   r*   r*   r-   Ú_BadÅ   s   ro   z"an object implementing 'a' and 'b'N)r   r`   rL   ra   )rk   rn   ro   r*   r*   r-   Útest_hasmethodsº   s    rp   rk   r$   r%   r&   )Znumeric_onlyr@   c                 C   s   t | ƒ}|  |¡rt‚dS )z>Check that the value generated does not satisfy the constraintN©r    r`   rL   )rk   Ú	bad_valuer*   r*   r-   Útest_generate_invalid_param_valÎ   s    rs   zinteger_interval, real_intervalé   éûÿÿÿé   é   éüÿÿÿiöÿÿÿé   é
   c                 C   sP   t |d�}| |¡rt‚|  |¡r&t‚t | d�}| |¡r>t‚|  |¡rLt‚dS )ztCheck that the value generated for an interval constraint does not satisfy any of
    the interval constraints.
    ©rk   Nrq   )Zinteger_intervalZreal_intervalrr   r*   r*   r-   Ú+test_generate_invalid_param_val_2_intervalsã   s    Q

r|   c              	   C   s"   t  t¡� t| ƒ W 5 Q R X dS )zmCheck that the function raises NotImplementedError when there's no invalid value
    for the constraint.
    N)r[   r\   ÚNotImplementedErrorr    r{   r*   r*   r-   Ú)test_generate_invalid_param_val_all_valid=  s    r~   c                 C   s   t | ƒ}|  |¡st‚dS )z;Check that the value generated does satisfy the constraint.N)r!   r`   rL   )rk   Úvaluer*   r*   r-   Útest_generate_valid_paramR  s    r€   zconstraint_declaration, valuegáz®GáÚ?é*   c                 C   s   | d S )NrS   r*   )Úxr*   r*   r-   Ú<lambda>z  ó    rƒ   )NNz
array-likezsparse matrix)Úrandom_stater   r…   )r…   Nre   )ÚbooleanF)ÚverboserS   rT   g      ð¿Úmissingr;   )Ú	cv_objectrv   c                 C   s   t | ƒ}| |¡st‚dS )z+Sanity check for the is_satisfied_by methodN)r"   r`   rL   )Úconstraint_declarationr   rk   r*   r*   r-   Útest_is_satisfied_bys  s    !r‹   z1constraint_declaration, expected_constraint_classZoption1Zoption2rf   r†   r‡   r‰   c                 C   s   t | ƒ}|j|kst‚dS )zHCheck that make_constraint dispaches to the appropriate constraint classN)r"   Ú	__class__rL   )rŠ   Zexpected_constraint_classrk   r*   r*   r-   Útest_make_constraint˜  s    r�   c                	   C   s&   t jtdd�� tdƒ W 5 Q R X dS )zNCheck that an informative error is raised when an unknown constraint is passedzUnknown constraintrY   znot a valid constraintN)r[   r\   Ú
ValueErrorr"   r*   r*   r*   r-   Útest_make_constraint_unknown²  s    r�   c                	   C   s  t jtdd�� tddd� W 5 Q R X t jtdd�� tddgddiŽ W 5 Q R X t jtdd�� tdddiŽ W 5 Q R X t jtd	d�� tdddd
� W 5 Q R X t jtdd��& tddddgžddiddi—Ž W 5 Q R X t jtdd��& tddddgžddiddi—Ž W 5 Q R X dS )zGCheck that validate_params works no matter how the arguments are passedz"The 'a' parameter of _func must berY   ÚwrongrS   ©r&   z"The 'b' parameter of _func must ber&   ú"The 'c' parameter of _func must bez"The 'd' parameter of _func must be)r&   r'   r   rE   rt   rw   Úerv   ÚfourN)rS   )r   )r   )r[   r\   r   r.   r*   r*   r*   r-   Útest_validate_params¸  s<     ÿ ÿ ÿ ÿ ÿ* ÿr•   c                  C   s(   t dtgidd�dd„ ƒ} | ddƒ dS )	zTCheck that no error is raised when there are parameters without
    constraints
    r$   Tr(   c                 S   s   d S r:   r*   )r$   r%   r*   r*   r-   Úfuncß  s    z1test_validate_params_missing_params.<locals>.funcrS   rE   N)r#   rh   )r–   r*   r*   r-   Ú#test_validate_params_missing_paramsÚ  s    
r—   c               
   C   sx   t ƒ tƒ} tjtdd�� | dddd� W 5 Q R X tjtdd��. tjtdd�� | dddd� W 5 Q R X W 5 Q R X d	S )
z5Check that validate_params functions can be decoratedzFunction _func is deprecatedrY   rS   rE   rt   r‘   r’   r�   N)r   r.   r[   ÚwarnsÚFutureWarningr\   r   )Zdecorated_functionr*   r*   r-   Ú test_decorate_validated_functionæ  s    
 ÿrš   c                
   C   sj   t jtdd�� tƒ  d¡ W 5 Q R X t jtdd��, t jtdd�� tƒ  d¡ W 5 Q R X W 5 Q R X dS )z-Check that validate_params works with methodsz+The 'a' parameter of _Class._method must berY   r�   z)Function _deprecated_method is deprecatedz6The 'a' parameter of _Class._deprecated_method must beN)r[   r\   r   r/   r2   r˜   r™   r3   r*   r*   r*   r-   Útest_validate_params_methodõ  s     ÿþr›   c               	   C   s.   t dƒ} tjtdd�� |  ¡  W 5 Q R X dS )z9Check that validate_params works with Estimator instancesr�   z'The 'a' parameter of _Estimator must berY   N)r8   r[   r\   r   r@   )Zestr*   r*   r-   Útest_validate_params_estimator  s     ÿrœ   c                	   C   s4   t jtdd�� tdddhddhd� W 5 Q R X dS )	z@Check that the deprecated parameter must be a subset of options.z#deprecated options must be a subsetrY   r$   r%   r&   r'   r
   N)r[   r\   rŽ   r   r*   r*   r*   r-   Ú!test_stroptions_deprecated_subset  s    r�   c               	   C   sˆ   t dttƒtgidd�dd„ ƒ} | dddd	œƒ | dddgƒ tjtd
d��}| dd� W 5 Q R X t|jƒ}d|ksxt	‚d|ks„t	‚dS )zECheck that internal constraints are not exposed in the error message.ÚparamTr(   c                 S   s   d S r:   r*   ©rž   r*   r*   r-   Úf  s    z!test_hidden_constraint.<locals>.frS   rE   rt   )r$   r%   r&   úThe 'param' parameterrY   ÚbadrŸ   zan instance of 'dict'zan instance of 'list'N)
r#   r   ÚlistrA   r[   r\   r   ra   r   rL   ©r    Úexc_infoÚerr_msgr*   r*   r-   Útest_hidden_constraint  s      ÿ
 ÿ
r§   c               	   C   s†   t dtdhƒttdhƒƒgidd�dd„ ƒ} | dƒ | dƒ tjtdd	��}| d
d� W 5 Q R X t|jƒ}d|ksvt‚d|ks‚t‚dS )zBCheck that we can have 2 StrOptions constraints, one being hidden.rž   ÚautoÚwarnTr(   c                 S   s   d S r:   r*   rŸ   r*   r*   r-   r    1  s    z!test_hidden_stroptions.<locals>.fr¡   rY   r¢   rŸ   N)	r#   r   r   r[   r\   r   ra   r   rL   r¤   r*   r*   r-   Útest_hidden_stroptions.  s     þ
 ÿ
rª   c                   C   s$   t tdƒst‚t tƒ jdƒs t‚dS )zˆCheck that the validate_params decorator properly sets the parameter constraints
    as attribute of the decorated function/method.
    Z_skl_parameter_constraintsN)Úhasattrr.   rL   r/   r2   r*   r*   r*   r-   Ú4test_validate_params_set_param_constraints_attributeG  s    r¬   c               	   C   sV   t ddgidd�dd„ ƒ} | dƒ | t d¡ƒ tjtdd	�� | d
ƒ W 5 Q R X dS )z’Check that validate_params raise a deprecation message but still passes
    validation when using an int for a parameter accepting a boolean.
    rž   r†   Tr(   c                 S   s   d S r:   r*   rŸ   r*   r*   r-   r    T  s    z1test_boolean_constraint_deprecated_int.<locals>.fFz4Passing an int for a boolean parameter is deprecatedrY   rS   N)r#   rO   Zbool_r[   r˜   r™   ©r    r*   r*   r-   Ú&test_boolean_constraint_deprecated_intO  s    
 ÿr®   c               	   C   sl   t tdgddœdd�ddd„ƒ} tjtdd	�� | d
d� W 5 Q R X G dd„ dƒ}| |d� | |ƒ d� dS )z5Check that validation can be skipped for a parameter.NZno_validation©Úparam1Úparam2Tr(   c                 S   s   d S r:   r*   r¯   r*   r*   r-   r    f  s    ztest_no_validation.<locals>.fzThe 'param1' parameterrY   r�   )r°   c                   @   s   e Zd ZdS )z$test_no_validation.<locals>.SomeTypeN)r4   r5   r6   r*   r*   r*   r-   ÚSomeTyper  s   r²   )r±   )NN©r#   rh   r[   r\   r   )r    r²   r*   r*   r-   Útest_no_validationc  s    þ
r´   c                  C   s>   t  d¡} tƒ }| | j¡s t‚| t dddg¡¡r:t‚dS )z9Add a specific test for checking support for `pandas.NA`.ZpandasrS   rE   rt   N)r[   Zimportorskipr   r`   ZNArL   rO   Úarray)ÚpdZna_constraintr*   r*   r-   Ú$test_pandas_na_constraint_with_pd_nay  s    
r·   c                  C   s>   t ƒ } |  dddg¡st‚|  tdƒ¡s,t‚|  d¡r:t‚dS )zGCheck that a string does not satisfy the _IterableNotString constraint.rS   rE   rt   rz   zsome stringN)r   r`   rL   Úranger{   r*   r*   r-   Útest_iterable_not_string‚  s    r¹   c                  C   sn   t ƒ } |  d¡st‚|  tƒ ¡s$t‚|  ddgddgfddgddgfg¡sNt‚|  d¡s\t‚|  d¡rjt‚dS )zUCheck that the _CVObjects constraint accepts all current ways
    to pass cv objects.rv   rS   rE   rt   rw   Nznot a CV object)r   r`   rL   r	   r{   r*   r*   r-   Útest_cv_objectsŠ  s    *rº   c                  C   s"   G dd„ dt ƒ} | dd� ¡  dS )zÆCheck that the validation from a scikit-learn estimator inherited by a third
    party estimator does not impose a match between the dict of constraints and the
    parameters of the estimator.
    c                       s*   e Zd Z‡ fdd„Zd‡ fdd„	Z‡  ZS )z7test_third_party_estimator.<locals>.ThirdPartyEstimatorc                    s   || _ tƒ jdd� d S )Nr   r;   )r%   Úsuperr<   )r1   r%   ©rŒ   r*   r-   r<   œ  s    z@test_third_party_estimator.<locals>.ThirdPartyEstimator.__init__Nc                    s   t ƒ  ||¡ d S r:   )r»   r@   r=   r¼   r*   r-   r@      s    z;test_third_party_estimator.<locals>.ThirdPartyEstimator.fit)NN)r4   r5   r6   r<   r@   Ú__classcell__r*   r*   r¼   r-   ÚThirdPartyEstimator›  s   r¾   r   ©r%   N)r8   r@   )r¾   r*   r*   r-   Útest_third_party_estimator•  s    
rÀ   c                  C   s0   t tdddd�} |  d¡st‚|  d¡r,t‚dS )z9Check for the type RealNotInt in the Interval constraint.r   rS   rJ   rG   rV   N)r   r   r`   rL   r{   r*   r*   r-   Útest_interval_real_not_int¨  s    rÁ   c                   C   sH   t dtƒst‚t dtƒrt‚t t d¡tƒs0t‚t t d¡tƒrDt‚dS )zCheck for the RealNotInt type.rV   rS   N)Ú
isinstancer   rL   rO   Úfloat64Zint64r*   r*   r*   r-   Útest_real_not_int¯  s    rÄ   c               	   C   sb   t dtgidd�dd„ ƒ} tjtdd�� | dd	� W 5 Q R X tdd
�� | dd	� W 5 Q R X dS )z@Check that param validation can be skipped using config_context.r$   Tr(   c                 S   s   d S r:   r*   r;   r*   r*   r-   r    º  s    z%test_skip_param_validation.<locals>.fúThe 'a' parameterrY   Ú1r;   ©Úskip_parameter_validationN)r#   rh   r[   r\   r   r   r­   r*   r*   r-   Útest_skip_param_validation·  s    
rÉ   r)   Fc              	      s”   t dtgidd�dd„ ƒ‰ t dtgi| d�‡ fdd„ƒ}tjtd	d
�� |dd� W 5 Q R X | rl|dd� n$tjtdd
�� |dd� W 5 Q R X dS )z,Check that nested validation can be skipped.r$   Tr(   c                 S   s   d S r:   r*   r;   r*   r*   r-   r    Ê  s    z&test_skip_nested_validation.<locals>.fr%   c                    s
   ˆ dd�S )NÚinvalid_param_valuer;   r*   r¿   r­   r*   r-   ÚgÎ  s    z&test_skip_nested_validation.<locals>.gzThe 'b' parameterrY   rÊ   r¿   rS   rÅ   Nr³   )r)   rË   r*   r­   r-   Útest_skip_nested_validationÆ  s    
þrÌ   zJskip_parameter_validation, prefer_skip_nested_validation, expected_skipped)TTT)TFT)FTT)FFFc              	   C   sH   t dtgi|d�dd„ ƒ}t| d�� |dƒ}W 5 Q R X ||ksDt‚dS )z5Check interaction between global skip and local skip.r$   r(   c                 S   s
   t ƒ d S )NrÈ   )r   r;   r*   r*   r-   rË   ï  s    z9test_skip_nested_validation_and_config_context.<locals>.grÇ   rS   N)r#   rh   r   rL   )rÈ   r)   Zexpected_skippedrË   Zactual_skippedr*   r*   r-   Ú.test_skip_nested_validation_and_config_contextá  s     ÿ
rÍ   )r   )aÚnumbersr   r   ÚnumpyrO   r[   Zscipy.sparser   Zsklearn._configr   r   Zsklearn.baser   r   Zsklearn.model_selectionr	   Zsklearn.utilsr   Zsklearn.utils._param_validationr   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/   r8   ÚmarkZparametrizerN   rR   rU   Ú	TypeErrorrŽ   r_   rd   rg   rh   Zndarrayrl   rp   rs   r|   r£   r~   r€   rW   Zfloat32rÃ   Úcallablerµ   ÚrandomZRandomStaterT   ri   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-   Ú<module>   sþ  hþ
þ
ýýýýýëþ


üþ	
öþ
þþþþþþþþþþþþþþþþþþ»þM
øþ
êþ


æþ

ñþ
"	
üþ	