U
    _»{jNt ã                   @   sR  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ 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 dd	lmZ dd
lmZmZmZmZmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ 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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZGmHZH ddlFmIZJ ddlKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZS ddlmTZTmUZUmVZV ddlWmXZX ddlYmZZZm[Z[ ddl\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh dd limjZjmkZk dald!d"d#d$gZmd%d&„ Znd'd(„ Zoefepd)�d*d+„ ƒZqd,d-„ Zrd.d/„ Zsd0d1„ Ztd2d3„ Zud4d5„ Zvd6d7„ Zwd8d9„ Zxd:d;„ Zyd<d=„ Zzd>d?„ Z{d@dA„ Z|�ddCdD„Z}dEdF„ Z~dGdH„ ZG dIdJ„ dJƒZ€dKdL„ Z�dMdN„ Z‚ddOdPœdQdR„ZƒdSdT„ Z„efepd)�dUdV„ ƒZ…efepd)�dWdX„ ƒZ†efepd)�dYdZ„ ƒZ‡efepd)�d[d\„ ƒZˆefepd)��dd^d_„ƒZ‰d`da„ ZŠefepe‹fd)�dbdc„ ƒZŒddde„ Z�efdfdg„ ƒZŽdhdi„ Z�efepd)�djdk„ ƒZ�efepd)�dldm„ ƒZ‘dndo„ Z’efepd)�dpdq„ ƒZ“efepd)�drds„ ƒZ”efdtdu„ ƒZ•efdvdw„ ƒZ–efdxdy„ ƒZ—efepd)��ddzd{„ƒZ˜efepd)�d|d}„ ƒZ™efepd)�d~d„ ƒZšefepd)�d€d�„ ƒZ›d‚dƒ„ Zœefd„d…„ ƒZ�efd†d‡„ ƒZžefdˆd‰„ ƒZŸdŠd‹„ Z efepd)�dŒd�„ ƒZ¡efepd)�dŽd�„ ƒZ¢efd�d‘„ ƒZ£ef�dd’d“„ƒZ¤efepd)�d”d•„ ƒZ¥efepd)�d–d—„ ƒZ¦efepd)�d˜d™„ ƒZ§efepd)��ddšd›„ƒZ¨efepd)�dœd�„ ƒZ©efepd)�dždŸ„ ƒZªefepd)�d d¡„ ƒZ«ef�dd¢d£„ƒZ¬d¤d¥„ Z­�dd§d¨„Z®d©dª„ Z¯efepd)�d«d¬„ ƒZ°efepd)�d­d®„ ƒZ±efepd)�d¯d°„ ƒZ²efepd)�d±d²„ ƒZ³efepd)�d³d´„ ƒZ´efepd)��ddµd¶„ƒZµefd·d¸„ ƒZ¶efepd)�d¹dº„ ƒZ·efd»d¼„ ƒZ¸d½d¾„ Z¹d¿dÀ„ Zºefepd)�dÁdÂ„ ƒZ»efepd)�dBej¼fdÃdÄ„ƒZ½efdÅdÆ„ ƒZ¾efepd)�dÇdÈ„ ƒZ¿efepd)�dÉdÊ„ ƒZÀefepd)�dËdÌ„ ƒZÁefepd)�dÍdÎ„ ƒZÂefepd)�dÏdÐ„ ƒZÃefepd)�dÑdÒ„ ƒZÄefepd)�dÓdÔ„ ƒZÅefepd)�dÕdÖ„ ƒZÆefepd)�d×dØ„ ƒZÇdÙdÚ„ ZÈdÛdÜ„ ZÉe7fdÝdÞ„ZÊefepd)�dßdà„ ƒZËefepd)�dádâ„ ƒZÌefepd)�dãdä„ ƒZÍefepd)�dådæ„ ƒZÎefepd)�dçdè„ ƒZÏefepd)�dédê„ ƒZÐdëdì„ ZÑdídî„ ZÒdïdð„ ZÓdñdò„ ZÔdódô„ ZÕdõdö„ ZÖefepd)�d÷dø„ ƒZ×dùdú„ ZØdûdü„ ZÙdýdþ„ ZÚdÿ�d „ ZÛ�d�d„ ZÜ�d�d„ ZÝ�d�d„ ZÞ�d�d„ Zß�d	�d
„ Zà�d�d„ ZádS (  é    N)Údeepcopy)ÚpartialÚwraps)Ú	signature)ÚIntegralÚReal)Úsparse)Úrankdataé   )Úconfig_context)ÚClusterMixinÚRegressorMixinÚcloneÚis_classifierÚis_outlier_detectorÚis_regressor)Ú	load_irisÚ
make_blobsÚmake_classificationÚmake_multilabel_classificationÚmake_regression)ÚDataConversionWarningÚNotFittedErrorÚSkipTestWarning)ÚSelectFromModelÚSelectKBest)ÚLinearRegressionÚLogisticRegressionÚRANSACRegressorÚRidgeÚSGDRegressor)Úaccuracy_scoreÚadjusted_rand_scoreÚf1_score)Úlinear_kernelÚpairwise_distancesÚ
rbf_kernel)ÚShuffleSplitÚtrain_test_split)Ú_safe_split)Úmake_pipeline)ÚStandardScalerÚscale)ÚBaseRandomProjection)Ú_convert_to_numpyÚget_namespace©Údevice)ÚInvalidParameterErrorÚgenerate_invalid_param_valÚmake_constraint)Úparse_versionÚ
sp_version)Úcheck_is_fittedé   )ÚIS_PYPYÚis_scalar_nanÚshuffle)ÚInterval)Ú_DEFAULT_TAGSÚ
_safe_tags)ÚSkipTestÚ	_get_argsÚassert_allcloseÚassert_allclose_dense_sparseÚassert_array_almost_equalÚassert_array_equalÚassert_array_lessÚassert_raise_messageÚcreate_memmap_backed_dataÚignore_warningsÚraisesÚset_random_state)Ú_num_samplesÚhas_fit_parameterZPLSCanonicalZPLSRegressionÚCCAZPLSSVDc                 c   sb  | j j}t| ƒ}tV  tV  tV  t| dƒrntV  tV  t	V  |d snt
V  tV  ttdd�V  ttdd�V  tV  ttdd�V  |d sœtV  tV  tV  |tkrªtV  |d	 sÀ|d sÀtV  |d rÎtV  tV  t| d
ƒrätV  tV  tV  ttdd�V  tV  |d �r^dD ]J}|dk�rLt dd¡D ]\}}tt|||d�V  �q,ntt|d�V  �qd S )NÚsample_weightÚpairwiseÚones)ÚkindÚzerosT©Úreadonly_memmapÚno_validationÚ	allow_nanÚsparsifyZarray_api_support)znumpy.array_apiúcupy.array_apiÚcupyÚtorchrZ   )ÚcpuÚcuda)Úfloat64Úfloat32)Úarray_namespaceÚdtyper1   )r_   )Ú	__class__Ú__name__r>   Úcheck_no_attributes_set_in_initÚcheck_estimators_dtypesÚcheck_fit_score_takes_yrL   Ú"check_sample_weights_pandas_seriesÚ!check_sample_weights_not_an_arrayÚcheck_sample_weights_listÚcheck_sample_weights_shapeÚ$check_sample_weights_not_overwrittenr   Úcheck_sample_weights_invarianceÚ!check_estimators_fit_returns_selfÚcheck_complex_dataÚcheck_dtype_objectÚ$check_estimators_empty_data_messagesÚCROSS_DECOMPOSITIONÚcheck_pipeline_consistencyÚcheck_estimators_nan_infÚcheck_nonsquare_errorÚ!check_estimators_overwrite_paramsÚhasattrÚcheck_sparsify_coefficientsÚcheck_estimator_sparse_dataÚcheck_estimators_pickleÚ%check_estimator_get_tags_default_keysÚ	itertoolsÚproductÚcheck_array_api_input)Ú	estimatorÚnameÚtagsr_   r1   r`   © r€   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/utils/estimator_checks.pyÚ_yield_checksS   s^    



 ÿür‚   c                 c   sÎ   t | ƒ}tV  tV  tV  tV  tV  |d r4tV  tV  ttdd�V  ttddd�V  t	V  |d r~t
V  tV  tV  tV  |d sštV  |d sštV  |d	 r¨tV  d
|  ¡  ¡ kr¾tV  tV  tV  d S )NÚmultioutputTrS   r^   ©rT   ÚX_dtypeZ
multilabelrU   Úmultioutput_onlyÚrequires_fitÚclass_weight)r>   Ú"check_classifier_data_not_an_arrayÚcheck_classifiers_one_labelÚ*check_classifiers_one_label_sample_weightsÚcheck_classifiers_classesÚ'check_estimators_partial_fit_n_featuresÚcheck_classifier_multioutputÚcheck_classifiers_trainr   Ú#check_classifiers_regression_targetÚ6check_classifiers_multilabel_representation_invarianceÚ2check_classifiers_multilabel_output_format_predictÚ8check_classifiers_multilabel_output_format_predict_probaÚ<check_classifiers_multilabel_output_format_decision_functionÚcheck_supervised_y_no_nanÚcheck_supervised_y_2dÚcheck_estimators_unfittedÚ
get_paramsÚkeysÚcheck_class_weight_classifiersÚ'check_non_transformer_estimators_n_iterÚ check_decision_proba_consistency)Ú
classifierr   r€   r€   r�   Ú_yield_classifier_checks—   s6    rž   ©Úcategoryc           
   
   C   sº   t |ƒ}tj d¡}|jdd�}tjtjfD ]ˆ}t d|¡}t||ƒ}|j	}| 
d¡r~d|ks~| d¡s~t |¡rxd}q‚d	}nd }d
| › d�}	tt||	d�� | ||¡ W 5 Q R X q,d S )Nix  )é
   é   ©Úsizer¡   úsklearn.Útest_Ú_testingzJInput (y|Y) contains infinity or a value too large for dtype\('float64'\).zInput (y|Y) contains NaN.ú
Estimator z< should have raised error on fitting array y with inf value.©ÚmatchÚerr_msg)r   ÚnpÚrandomÚRandomStateZstandard_normalÚnanÚinfÚfullÚ_enforce_estimator_tags_yÚ
__module__Ú
startswithÚendswithÚisinfrI   Ú
ValueErrorÚfit)
r~   Úestimator_origr}   ÚrngÚXÚvalueÚyÚmodule_namerª   r«   r€   r€   r�   r•   »   s*    

ÿÿ
ÿ
ÿr•   c                 c   s–   t | ƒ}tV  ttdd�V  ttddd�V  tV  tV  |d rFtV  tV  |d sb|d sbtV  tV  | j	j
}|dkr~tV  |d	 rŒtV  tV  d S )
NTrS   r^   r„   rƒ   rU   r†   rM   r‡   )r>   Úcheck_regressors_trainr   Ú!check_regressor_data_not_an_arrayr�   Úcheck_regressor_multioutputÚ%check_regressors_no_decision_functionr–   r•   ra   rb   Úcheck_regressors_intr—   r›   )Ú	regressorr   r~   r€   r€   r�   Ú_yield_regressor_checksÞ   s$    rÅ   c                 c   s|   t | ƒ}|d stV  tV  |d r*tV  ttdd�V  t | dd�sLtV  ntV  ddd	d
ddg}| jj}||krxt	V  d S )NrU   Úpreserves_dtypeTrS   Ú	stateless©ÚkeyZIsomapZ	KernelPCAZLocallyLinearEmbeddingÚRandomizedLassoÚLogisticRegressionCVZBisectingKMeans)
r>   Ú#check_transformer_data_not_an_arrayÚcheck_transformer_generalÚ!check_transformer_preserve_dtypesr   Úcheck_transformers_unfittedÚ%check_transformers_unfitted_statelessra   rb   Úcheck_transformer_n_iter)Útransformerr   Zexternal_solverr~   r€   r€   r�   Ú_yield_transformer_checks÷   s(    ú	rÓ   c                 c   sD   t V  | jj}|dkr0tV  ttdd�V  tV  t| dƒs@tV  d S )N)ZWardAgglomerationZFeatureAgglomerationTrS   Ú	transform)Ú&check_clusterer_compute_labels_predictra   rb   Úcheck_clusteringr   r�   ru   r›   )Ú	clustererr~   r€   r€   r�   Ú_yield_clustering_checks  s    
rØ   c                 c   s`   t | dƒrtV  t | dƒr tV  t | dƒrVtV  ttdd�V  tV  t| dd�rVtV  tV  d S )NÚcontaminationÚfit_predictÚpredictTrS   r‡   rÈ   )	ru   Úcheck_outlier_contaminationÚcheck_outliers_fit_predictÚcheck_outliers_trainr   r‰   r>   r—   r›   )r}   r€   r€   r�   Ú_yield_outliers_checks#  s    


rß   c                 c   s†  | j j}t| ƒ}d|d kr8t d ||d ¡t¡ d S |d rVt d |¡t¡ d S t| ƒD ]
}|V  q^t| ƒr†t	| ƒD ]
}|V  qzt
| ƒr¢t| ƒD ]
}|V  q–t| dƒrÀt| ƒD ]
}|V  q´t| tƒrÞt| ƒD ]
}|V  qÒt| ƒrút| ƒD ]
}|V  qîtV  |d �stV  tV  tV  tV  tV  tV  tV  tV  tV  tV  |d �srtV  tV  t V  |d	 �rrt!V  |d
 �r‚t"V  d S )NÚ2darrayÚX_typesz8Can't test estimator {} which requires input  of type {}Z
_skip_testz2Explicit SKIP via _skip_test tag for estimator {}.rÔ   Únon_deterministicrU   Z
requires_yÚrequires_positive_X)#ra   rb   r>   ÚwarningsÚwarnÚformatr   r‚   r   rž   r   rÅ   ru   rÓ   Ú
isinstancer   rØ   r   rß   Ú&check_parameters_default_constructibleÚ%check_methods_sample_order_invarianceÚcheck_methods_subset_invarianceÚcheck_fit2d_1sampleÚcheck_fit2d_1featureÚcheck_get_params_invarianceÚcheck_set_paramsÚcheck_dict_unchangedÚcheck_dont_overwrite_parametersÚcheck_fit_idempotentÚcheck_fit_check_is_fittedÚcheck_n_features_inÚcheck_fit1dÚcheck_fit2d_predict1dÚcheck_requires_y_noneÚcheck_fit_non_negative)r}   r~   r   Úcheckr€   r€   r�   Ú_yield_all_checks8  sl     ÿüþ





rù   c              
   C   sŽ   t | ƒrPt| tƒs| jS | js&| jjS d dd„ | j ¡ D ƒ¡}d | jj|¡S t	| dƒrŠt
dd��  t dd	t| ƒ¡W  5 Q R £ S Q R X d
S )a  Create pytest ids for checks.

    When `obj` is an estimator, this returns the pprint version of the
    estimator (with `print_changed_only=True`). When `obj` is a function, the
    name of the function is returned with its keyword arguments.

    `_get_check_estimator_ids` is designed to be used as the `id` in
    `pytest.mark.parametrize` where `check_estimator(..., generate_only=True)`
    is yielding estimators and checks.

    Parameters
    ----------
    obj : estimator or function
        Items generated by `check_estimator`.

    Returns
    -------
    id : str or None

    See Also
    --------
    check_estimator
    ú,c                 S   s   g | ]\}}d   ||¡‘qS )z{}={})ræ   )Ú.0ÚkÚvr€   r€   r�   Ú
<listcomp>�  s     z,_get_check_estimator_ids.<locals>.<listcomp>z{}({})r˜   T)Zprint_changed_onlyz\sÚ N)Úcallablerç   r   rb   ÚkeywordsÚfuncÚjoinÚitemsræ   ru   r   ÚreÚsubÚstr)ÚobjZkwstringr€   r€   r�   Ú_get_check_estimator_idsq  s    

r	  c                 C   s  t | dg ƒ}t|ƒ�r|dgdgfkr|t| tƒr<| tƒ ƒ}n>t| tƒrR| tƒ ƒ}n(t| tƒrl| tdd�ƒ}n| t	dd�ƒ}n„|dgfkrÚt| tƒr¶| d	td
d�fdtdd�fgd�}n"| d	t	d
d�fdt	dd�fgd�}n&d| j
› d|› �}t |t¡ t|ƒ‚n| ƒ }|S )z)Construct Estimator instance if possible.Ú_required_parametersr}   Zbase_estimatorr   ©Úrandom_stater8   )ÚCÚ
estimatorsZest1çš™™™™™¹?©ÚalphaZest2)r  zCan't instantiate estimator z parameters )ÚgetattrÚlenÚ
issubclassr   r   r   r   r   r    r   rb   rä   rå   r   r?   )Ú	EstimatorZrequired_parametersr}   Úmsgr€   r€   r�   Ú_construct_instance—  s4    




ÿþÿÿ
r  c                 C   s8   t | |ƒ\}}|s| |fS |j| ||jj|d�d�S d S )N)Úreason)Zmarks)Ú_should_be_skipped_or_markedÚparamÚmarkZxfail)r}   rø   ÚpytestZshould_be_markedr  r€   r€   r�   Ú_maybe_mark_xfailÃ  s    r  c                    sJ   t ˆ|ƒ\}‰|s|S t|tƒr(|jjn|j‰ t|ƒ‡ ‡‡fdd„ƒ}|S )Nc                     s"   t dˆ › dˆjj› dˆ› �ƒ‚d S )Nz	Skipping z for z: )r?   ra   rb   )ÚargsÚkwargs©Ú
check_namer}   r  r€   r�   ÚwrappedÜ  s    ÿz_maybe_skip.<locals>.wrapped)r  rç   r   r  rb   r   )r}   rø   Zshould_be_skippedr"  r€   r   r�   Ú_maybe_skipÐ  s    r#  c                 C   s@   t |tƒr|jjn|j}t| dd�p&i }||kr<d|| fS dS )NZ_xfail_checksrÈ   T)Fz*placeholder reason that will never be used)rç   r   r  rb   r>   )r}   rø   r!  Zxfail_checksr€   r€   r�   r  å  s
    r  c                    sH   ddl ‰tdd„ ˆ D ƒƒr&d}t|ƒ‚‡ ‡fdd„}ˆjjd|ƒ td	�S )
aù  Pytest specific decorator for parametrizing estimator checks.

    The `id` of each check is set to be a pprint version of the estimator
    and the name of the check with its keyword arguments.
    This allows to use `pytest -k` to specify which tests to run::

        pytest test_check_estimators.py -k check_estimators_fit_returns_self

    Parameters
    ----------
    estimators : list of estimators instances
        Estimators to generated checks for.

        .. versionchanged:: 0.24
           Passing a class was deprecated in version 0.23, and support for
           classes was removed in 0.24. Pass an instance instead.

        .. versionadded:: 0.24

    Returns
    -------
    decorator : `pytest.mark.parametrize`

    See Also
    --------
    check_estimator : Check if estimator adheres to scikit-learn conventions.

    Examples
    --------
    >>> from sklearn.utils.estimator_checks import parametrize_with_checks
    >>> from sklearn.linear_model import LogisticRegression
    >>> from sklearn.tree import DecisionTreeRegressor

    >>> @parametrize_with_checks([LogisticRegression(),
    ...                           DecisionTreeRegressor()])
    ... def test_sklearn_compatible_estimator(estimator, check):
    ...     check(estimator)

    r   Nc                 s   s   | ]}t |tƒV  qd S ©N)rç   Útype)rû   Úestr€   r€   r�   Ú	<genexpr>  s     z*parametrize_with_checks.<locals>.<genexpr>úuPassing a class was deprecated in version 0.23 and isn't supported anymore from 0.24.Please pass an instance instead.c                  3   s>   ˆ D ]4} t | ƒj}t| ƒD ]}t||ƒ}t| |ˆƒV  qqd S r$  )r%  rb   rù   r   r  )r}   r~   rø   ©r  r  r€   r�   Úchecks_generator'  s
    

z1parametrize_with_checks.<locals>.checks_generatorzestimator, check)Zids)r  ÚanyÚ	TypeErrorr  Zparametrizer	  )r  r  r*  r€   r)  r�   Úparametrize_with_checksõ  s    (ÿ  ÿr-  Fc                    sŒ   t ˆ tƒrd}t|ƒ‚tˆ ƒj‰‡ ‡fdd„}|r8|ƒ S |ƒ D ]H\‰ }z|ˆ ƒ W q> tk
r„ } zt t|ƒt¡ W 5 d}~X Y q>X q>dS )a×  Check if estimator adheres to scikit-learn conventions.

    This function will run an extensive test-suite for input validation,
    shapes, etc, making sure that the estimator complies with `scikit-learn`
    conventions as detailed in :ref:`rolling_your_own_estimator`.
    Additional tests for classifiers, regressors, clustering or transformers
    will be run if the Estimator class inherits from the corresponding mixin
    from sklearn.base.

    Setting `generate_only=True` returns a generator that yields (estimator,
    check) tuples where the check can be called independently from each
    other, i.e. `check(estimator)`. This allows all checks to be run
    independently and report the checks that are failing.

    scikit-learn provides a pytest specific decorator,
    :func:`~sklearn.utils.estimator_checks.parametrize_with_checks`, making it
    easier to test multiple estimators.

    Parameters
    ----------
    estimator : estimator object
        Estimator instance to check.

        .. versionadded:: 1.1
           Passing a class was deprecated in version 0.23, and support for
           classes was removed in 0.24.

    generate_only : bool, default=False
        When `False`, checks are evaluated when `check_estimator` is called.
        When `True`, `check_estimator` returns a generator that yields
        (estimator, check) tuples. The check is run by calling
        `check(estimator)`.

        .. versionadded:: 0.22

    Returns
    -------
    checks_generator : generator
        Generator that yields (estimator, check) tuples. Returned when
        `generate_only=True`.

    See Also
    --------
    parametrize_with_checks : Pytest specific decorator for parametrizing estimator
        checks.
    r(  c                  3   s,   t ˆ ƒD ]} tˆ | ƒ} ˆ t| ˆƒfV  qd S r$  )rù   r#  r   )rø   ©r}   r~   r€   r�   r*  l  s    
z)check_estimator.<locals>.checks_generatorN)	rç   r%  r,  rb   r?   rä   rå   r  r   )r}   Zgenerate_onlyr  r*  rø   Ú	exceptionr€   r.  r�   Úcheck_estimator3  s    /
ÿ
r0  c                  C   s8   t d kr4tddddddd�\} }tƒ  | ¡} | |fa t S )NéÈ   r¡   r8   ç      @é   é*   )Ú	n_samplesÚ
n_featuresZn_informativeZbiasÚnoiser  )ÚREGRESSION_DATASETr   r+   Úfit_transform©r»   r½   r€   r€   r�   Ú_regression_dataset}  s    ú
r;  c                 C   s  |   ¡ }| jj}|dkr$| jdd� d|kr@|dkr@| jdd� d|kræ| jd k	rf| jtd| jƒd� |d	krz| jd
d� |dkrŽ| jdd� |dkr¤| jd
dd� | jjdkr¾| jd
dd� |dkrÒ| jdd� |dkræ| jdd� d|krú| jdd� d|k�r| jtd| jƒd� d|k�r.| jdd� d|k�rD| jdd� d|k�rf| d ¡�sf| jdd!� |d"k�r|| jd#d$� |d%k�rŒd&| _|d'k�r¢| jd#d(� t	| d)ƒ�r¼t| j
dƒ| _
t	| d*ƒ�rÎd&| _|d+k�rä| jd,d-� |d.k�rôd| _t| tƒ�r| jdd/� t| tƒ�r$| jd&d0� |d1k�r:| jdd2� |d3k�rP| jd4d5� d6d7g}||k�rzt	| d8ƒ�rz| jd9d:� t	| d;ƒ�r’| jd9d<� |d=k�r¨| jd>d?� |d@k�rÔttdAƒk�rÄdBndC}| j|dD� |tk�rê| jd&d/� |dEk�r | jdFdG� |dHk�r| jd&dI� d S )JNÚTSNEr
   ©Z
perplexityÚn_iterr¢   ©r>  Úmax_iter©r@  )Z	LinearSVRÚ	LinearSVCr3  ZNMFiô  ZDictionaryLearningZ
lasso_lars)r@  Ztransform_algorithmZMiniBatchNMFT)r@  Zfresh_restarts)ZMLPClassifierZMLPRegressoréd   ZMiniBatchDictionaryLearningÚn_resampling)rD  Ún_estimators)rE  Ú
max_trialsr¡   )rF  Ún_init)rG  Ú
batch_sizeZMLP)rH  Z	MeanShiftç      ð?)Ú	bandwidthZTruncatedSVDr8   ZLassoLarsIC)Znoise_varianceÚ
n_clustersÚn_bestZ	SelectFdrç      à?r  ZTheilSenRegressor)Ún_components)rü   )ZHistGradientBoostingClassifierZHistGradientBoostingRegressor)Zmin_samples_leafZDummyClassifierZ
stratified)ZstrategyZRidgeCVZRidgeClassifierCVÚcvé   ©rO  Ún_splits)rR  ZOneHotEncoderÚignore)Zhandle_unknownZQuantileRegressorz1.6.0Zhighszinterior-point)ÚsolverZSpectralEmbeddinggñhãˆµøä>)Z	eigen_tolZHDBSCAN©Zmin_samples)r˜   ra   rb   Ú
set_paramsr@  ÚminrE  r´   rN  ru   rK  rL  Zmax_subpopulationrç   r-   r   r6   r5   rp   )r}   Úparamsr~   Zloo_cvrT  r€   r€   r�   Ú_set_checking_parameters�  sŠ    















rY  c                   @   s*   e Zd ZdZdd„ Zd	dd„Zdd„ ZdS )
Ú_NotAnArrayzvAn object that is convertible to an array.

    Parameters
    ----------
    data : array-like
        The data.
    c                 C   s   t  |¡| _d S r$  )r¬   ÚasarrayÚdata)Úselfr\  r€   r€   r�   Ú__init__  s    z_NotAnArray.__init__Nc                 C   s   | j S r$  )r\  )r]  r`   r€   r€   r�   Ú	__array__  s    z_NotAnArray.__array__c                 C   s"   |j dkrdS td |j ¡ƒ‚d S )NZmay_share_memoryTz%Don't want to call array_function {}!)rb   r,  ræ   )r]  r  Útypesr  r  r€   r€   r�   Ú__array_function__  s    
z_NotAnArray.__array_function__)N)rb   r³   Ú__qualname__Ú__doc__r^  r_  ra  r€   r€   r€   r�   rZ    s   
rZ  c                 C   s   t | ddƒ}t|dkƒS )zõReturns True if estimator accepts pairwise metric.

    Parameters
    ----------
    estimator : object
        Estimator object to test.

    Returns
    -------
    out : bool
        True if _pairwise is set to True and False otherwise.
    ÚmetricNZprecomputed)r  Úbool)r}   rd  r€   r€   r�   Ú_is_pairwise_metric  s    rf  c                 c   s¨   | j dkst‚d|  ¡ fV  dD ]}||  |¡fV  q |  d¡}|j d¡|_|j d¡|_d|fV  dD ]8}|  |¡}|j d¡|_|j d¡|_|d |fV  qjdS )	a;  Generate sparse matrices with {32,64}bit indices of diverse format.

    Parameters
    ----------
    X_csr: CSR Matrix
        Input matrix in CSR format.

    Returns
    -------
    out: iter(Matrices)
        In format['dok', 'lil', 'dia', 'bsr', 'csr', 'csc', 'coo',
        'coo_64', 'csc_64', 'csr_64']
    Úcsr)ZdokZlilZdiaZbsrÚcscÚcoori  Úint64Zcoo_64)rh  rg  Z_64N)	ræ   ÚAssertionErrorÚcopyZasformatÚrowÚastypeÚcolÚindicesZindptr)ÚX_csrZsparse_formatZX_coor»   r€   r€   r�   Ú_generate_sparse_matrix/  s    


rr  r]   )r1   r`   c             
   C   s¬  zt  |¡}W n" tk
r0   t|› d�ƒ‚Y nX zddl}W n tk
rZ   tdƒ‚Y nX | | d¡¡}|dkrŒ|dkrŒ|jsŒtdƒ‚n(|d	kr´ddl	}|j
j ¡ dkr´td
ƒ‚tdd�\}	}
|	j|dd�}	t||	ƒ}	t||
ƒ}
t|ƒ}|j|	|d�}|j|
|d�}| |	|
¡ dd„ t|ƒ ¡ D ƒ}t|ƒ}tdd�� | ||¡ W 5 Q R X | ¡ D ]„\}}t||ƒ}t|ƒd t|ƒd k�s˜td|› d�ƒ‚t|ƒt|ƒk�s®t‚t||d�}t|||› d�t |	j¡jd d� �q\d}|D ]¼}t||dƒ}|dk�r�qê||	ƒ}tdd�� t||ƒ|ƒ}W 5 Q R X t|ƒd t|ƒd k�s^td|› d�ƒ‚t|ƒt|ƒk�stt‚t||d�}t|||› d�t |	j¡jd d� �qêdS )zBCheck that the array_api Array gives the same results as ndarrays.z/ is not installed: not checking array_api inputr   Nz?array_api_compat is not installed: not checking array_api inputr8   rZ   r\   z2PyTorch test requires cuda, which is not available>   rY   rX   z/CuPy test requires cuda, which is not availabler4  r  F©rl  r0   c                 S   s"   i | ]\}}t |tjƒr||“qS r€   )rç   r¬   Úndarray©rû   rÉ   r¼   r€   r€   r�   Ú
<dictcomp>|  s      z)check_array_api_input.<locals>.<dictcomp>T)Zarray_api_dispatchú'z!' attribute is in wrong namespace)Úxpz not the samerC  ©r«   Úatol)Údecision_functionrÛ   Úpredict_log_probaÚpredict_probarÔ   Zinverse_transformz' output is in wrong namespacez# did not the return the same result)Ú	importlibÚimport_moduleÚModuleNotFoundErrorr?   Úarray_api_compatÚImportErrorr/   r[  Zhas_cudarY   r\   ÚruntimeZgetDeviceCountr   rn  Ú_enforce_estimator_tags_Xr²   r   r¸   Úvarsr  r   r  rk  Úarray_devicer.   rA   r¬   Úfinfor`   Úeps)r~   r¹   r_   r1   r`   Z	array_modr�  rx  rY   r»   r½   r&  ZX_xpZy_xpZarray_attributesZest_xprÉ   Ú	attributeZest_xp_paramZest_xp_param_npÚmethodsÚmethod_nameÚmethodÚresultZ	result_xpZresult_xp_npr€   r€   r�   r|   P  s†    ÿ
ÿ




ÿ
ÿ
þü
	
ÿ
þür|   c                 C   sØ  t j d¡}|jdd�}d||dk < t||ƒ}t |¡}d|jdd�  t¡}t	t
d�� t|ƒ}W 5 Q R X t||ƒ}t|ƒ}t|ƒD �]J\}}t	t
d��" t|ƒ}| dkr¸|jd	d
� W 5 Q R X d|krÞd| › d|› d�}	nd| › d�}	tttfddgd|	d��Ê t	t
d�� | ||¡ W 5 Q R X t|dƒ�rz| |¡}
|d �rb|
j|jd dfk�szt‚n|
j|jd fk�szt‚t|dƒ�rÈ| |¡}|d �rª|jd df}n|jd df}|j|k�sÈt‚W 5 Q R X q†d S )Nr   )é(   rP  r£   gš™™™™™é?é   rŽ  rŸ   )ZScalerr+   F)Z	with_meanZ64r¨   z doesn't seem to support z_ matrix, and is not failing gracefully, e.g. by using check_array(X, accept_large_sparse=False)z’ doesn't seem to fail gracefully on sparse data: error message should state explicitly that sparse input is not supported if this is not the case.r   ZSparseT©rª   Úmay_passr«   rÛ   r†   r8   r}  Úbinary_onlyr
   )r¬   r­   r®   Úuniformr„  r   Z
csr_matrixrn  ÚintrH   ÚFutureWarningr   r²   r>   rr  rV  rI   r,  r·   r¸   ru   rÛ   Úshaperk  r}  )r~   r¹   rº   r»   rq  r½   r}   r   Zmatrix_formatr«   ÚpredZprobsZexpected_probs_shaper€   r€   r�   rw   ¹  sN    


ÿ
ÿü



rw   c                 C   s"  t |ƒ}zödd l}t ddgddgddgddgddgddgddgddgddgddgddgddgg¡}|jt||ƒdd�}| ddddddddddddg¡}| dgd ¡}t|d	d
�rÄ|j|dd�}z|j|||d� W n" t	k
rú   t	d 
| ¡ƒ‚Y nX W n tk
�r   tdƒ‚Y nX d S )Nr   r8   r
   rP  r�  Frs  é   r†   rÈ   ©rN   zPEstimator {0} raises error if 'sample_weight' parameter is of type pandas.SerieszUpandas is not installed: not testing for input of type pandas.Series to class weight.)r   Úpandasr¬   ÚarrayÚ	DataFramer„  ÚSeriesr>   r¸   r·   ræ   r‚  r?   )r~   r¹   r}   Úpdr»   r½   Úweightsr€   r€   r�   rf   ï  sF    ôÿ"þÿÿrf   c                 C   sÈ   t |ƒ}t ddgddgddgddgddgddgddgddgddgddgddgddgg¡}tt||ƒƒ}tddddddddddddgƒ}tdgd ƒ}t|dd�r´t|j dd¡ƒ}|j|||d	� d S )
Nr8   r
   rP  r�  r˜  r†   rÈ   éÿÿÿÿr™  )	r   r¬   r›  rZ  r„  r>   r\  Úreshaper¸   )r~   r¹   r}   r»   r½   rŸ  r€   r€   r�   rg     s,    ôÿ rg   c                 C   sd   t |ƒ}tj d¡}d}t||j|dfd�ƒ}t |¡d }t||ƒ}dg| }|j|||d� d S )Nr   é   rP  r£   r™  )	r   r¬   r­   r®   r„  r“  Úaranger²   r¸   )r~   r¹   r}   Úrndr5  r»   r½   rN   r€   r€   r�   rh   8  s    

rh   c                 C   s(  t |ƒ}t ddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgg¡}t ddddddddddddddddg¡}t||ƒ}|j||t t|ƒ¡d� ttƒ�$ |j||t dt|ƒ ¡d� W 5 Q R X ttƒ�$ |j||t t|ƒdf¡d� W 5 Q R X d S )Nr8   rP  r
   r�  r™  )	r   r¬   r›  r²   r¸   rP   r  rI   r·   )r~   r¹   r}   r»   r½   r€   r€   r�   ri   G  s6    ðÿ*

(
ri   rP   c                 C   sè  t |ƒ}t |ƒ}t|dd� t|dd� tjddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggtjd�}tjddddddddddddddddgtd�}|dkrô|}|}tjt|ƒd	�}	d
| › d�}
nz|dk�rjt ||d g¡}t 	|d| g¡}tjt|ƒd d	�}	d|	t|ƒd …< t
|||	dd�\}}}	d
| › d�}
nt‚t||ƒ}t||ƒ}|j||d d� |j|||	d� dD ]<}t||ƒ�r¦t||ƒ|ƒ}t||ƒ|ƒ}t|||
d� �q¦d S )Nr   r  r8   rP  r
   r�  ©r`   rP   )r–  zFor z; sample_weight=None is not equivalent to sample_weight=onesrR   z?, a zero sample_weight is not equivalent to removing the sample)r½   rN   )rÛ   r}  r{  rÔ   ©r«   )r   rJ   r¬   r›  r]   r”  rP   r  ÚvstackZhstackr;   r·   r²   r¸   ru   r  rB   )r~   r¹   rQ   Z
estimator1Z
estimator2ZX1Úy1ZX2Úy2Zsw2r«   rŒ  ÚX_pred1ÚX_pred2r€   r€   r�   rk   l  sb    ðí.
ÿ

ÿ

rk   c                 C   s  t |ƒ}t|dd� tjddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggtjd�}tjddddddddddddddddgtd�}t||ƒ}t |jd ¡}d|d< | 	¡ }|j
|||d	� | › d
�}t|||d� d S )Nr   r  r8   rP  r
   r�  r¥  g      $@r™  z8 overwrote the original `sample_weight` given during fitr¦  )r   rJ   r¬   r›  r]   r”  r²   rP   r–  rl  r¸   rA   )r~   r¹   r}   r»   r½   Zsample_weight_originalZsample_weight_fitr«   r€   r€   r�   rj   ±  s<    ðí.

rj   c              	   C   s  t j d¡}t||jdd�ƒ}| t¡}t|ƒ}|d d …df d  t¡}t	|ƒ}t
||ƒ}| ||¡ t|dƒr|| |¡ t|dƒr�| |¡ ttddd	�� | || t¡¡ W 5 Q R X d
|d krþddi|d< d}tt|d�� | ||¡ W 5 Q R X n| ||¡ d S )Nr   )rŽ  r¡   r£   r�  rÛ   rÔ   zUnknown label typeT©rª   r‘  Ústringrá   ZfooÚbar©r   r   z#argument must be .* string.* number©rª   )r¬   r­   r®   r„  r“  rn  Úobjectr>   r”  r   r²   r¸   ru   rÛ   rÔ   rI   Ú	Exceptionr,  )r~   r¹   rº   r»   r   r½   r}   r  r€   r€   r�   rn   Ù  s(    





rn   c              	   C   s„   t j d¡}|jdd�d|jdd�  }| dd¡}|jdddd	�d }t|ƒ}t|dd
� tt	dd�� | 
||¡ W 5 Q R X d S )Nr4  r¡   r£   y              ð?r   r8   r   r
   ©ÚlowÚhighr¤   r  zComplex data not supportedr°  )r¬   r­   r®   r“  r¡  Úrandintr   rJ   rI   r·   r¸   )r~   r¹   rº   r»   r½   r}   r€   r€   r�   rm   þ  s    rm   c                 C   s   | dkrd S t j d¡}| dkr2d|jdd� }nd|jdd� }t||ƒ}|d d …df  t¡}t|ƒ}t||ƒ}t	|dƒr„d	|_
t	|d
ƒr”d	|_t	|dƒr¤d	|_t|d	ƒ | ||¡ dD ]<}t	||ƒr¾|j ¡ }t||ƒ|ƒ |j|ks¾td| ƒ‚q¾d S )N)ZSpectralCoclusteringr   )r   rP  ©r3  rP  r£   r
   rN  r8   rK  rL  ©rÛ   rÔ   r{  r}  z$Estimator changes __dict__ during %s)r¬   r­   r®   r“  r„  rn  r”  r   r²   ru   rN  rK  rL  rJ   r¸   Ú__dict__rl  r  rk  )r~   r¹   r¤  r»   r½   r}   rŒ  Zdict_beforer€   r€   r�   rï     s2    







ÿrï   c                 C   s   |   d¡p|  d¡ S )NÚ_)r´   rµ   )Úattrr€   r€   r�   Ú_is_public_parameter4  s    r¼  c           	         s  t |jdƒrd S t|ƒ}tj d¡}d|jdd� }t||ƒ}|d d …df  t	¡}t
||ƒ}t |dƒrnd|_t |dƒr~d|_t|dƒ |j ¡ ‰| ||¡ |j‰ d	d
„ ˆ  ¡ D ƒ}‡fdd
„|D ƒ}|rÞtdd |¡ ƒ‚‡ ‡fdd
„|D ƒ}|�r
tdd |¡ ƒ‚d S )NÚdeprecated_originalr   rP  r·  r£   rN  r8   rK  c                 S   s   g | ]}t |ƒr|‘qS r€   )r¼  ©rû   rÉ   r€   r€   r�   rþ   P  s     z3check_dont_overwrite_parameters.<locals>.<listcomp>c                    s   g | ]}|ˆ   ¡ kr|‘qS r€   )r™   r¾  )Údict_before_fitr€   r�   rþ   T  s     z¢Estimator adds public attribute(s) during the fit method. Estimators are only allowed to add private attributes either started with _ or ended with _ but %s addedú, c                    s    g | ]}ˆ| ˆ | k	r|‘qS r€   r€   r¾  ©Zdict_after_fitr¿  r€   r�   rþ   c  s   þz•Estimator changes public attribute(s) during the fit method. Estimators are only allowed to change attributes started or ended with _, but %s changed)ru   r^  r   r¬   r­   r®   r“  r„  rn  r”  r²   rN  rK  rJ   r¹  rl  r¸   r™   rk  r  )	r~   r¹   r}   r¤  r»   r½   Zpublic_keys_after_fitZattrs_added_by_fitZattrs_changed_by_fitr€   rÁ  r�   rð   8  sF    





ÿ
ÿûÿ
þûÿrð   c                 C   s´   t j d¡}d|jdd� }t||ƒ}|d d …df  t¡}t|ƒ}t||ƒ}t	|dƒr^d|_
t	|dƒrnd|_t|dƒ | ||¡ dD ]&}t	||ƒrˆttd	t||ƒ|d ƒ qˆd S )
Nr   rP  r·  r£   rN  r8   rK  r¸  zReshape your data)r¬   r­   r®   r“  r„  rn  r”  r   r²   ru   rN  rK  rJ   r¸   rF   r·   r  )r~   r¹   r¤  r»   r½   r}   rŒ  r€   r€   r�   rõ   s  s(    





   ÿrõ   c                    s~   ˆ |ƒ}|j d ‰‡ ‡fdd„|D ƒ}t|ƒtkrL|d }ttdd„ |ƒƒ}t |¡rj|j}dd„ |D ƒ}t 	|¡t 	|¡fS )Nr8   c                    s   g | ]}ˆ |  d ˆ¡ƒ‘qS )r8   )r¡  )rû   Úbatch©r  r6  r€   r�   rþ   �  s     z%_apply_on_subsets.<locals>.<listcomp>r   c                 S   s   | d S )Nr   r€   )Úxr€   r€   r�   Ú<lambda>•  ó    z#_apply_on_subsets.<locals>.<lambda>c                 S   s   g | ]}|  ¡ ‘qS r€   )Ztoarray)rû   rÄ  r€   r€   r�   rþ   ™  s     )
r–  r%  ÚtupleÚlistÚmapr   ÚissparseÚAr¬   Úravel)r  r»   Úresult_fullÚresult_by_batchr€   rÃ  r�   Ú_apply_on_subsetsŒ  s    

rÏ  c           
      C   sÎ   t j d¡}d|jdd� }t||ƒ}|d d …df  t¡}t|ƒ}t||ƒ}t	|dƒr^d|_
t	|dƒrnd|_t|dƒ | ||¡ dD ]@}d	j|| d
�}t	||ƒrˆtt||ƒ|ƒ\}}	t||	d|d� qˆd S )Nr   rP  r·  r£   rN  r8   rK  ©rÛ   rÔ   r{  Úscore_samplesr}  z={method} of {name} is not invariant when applied to a subset.©rŒ  r~   çH¯¼šò×z>©rz  r«   )r¬   r­   r®   r“  r„  rn  r”  r   r²   ru   rN  rK  rJ   r¸   ræ   rÏ  r  rA   )
r~   r¹   r¤  r»   r½   r}   rŒ  r  rÍ  rÎ  r€   r€   r�   rê   ž  s.    




 ÿ
 ÿrê   c           	      C   s  t j d¡}d|jdd� }t||ƒ}|d d …df  t j¡}t|dd�rVd||dk< t|ƒ}t	||ƒ}t
|d	ƒrxd|_t
|d
ƒrˆd|_t|dƒ | ||¡ t j |jd ¡}dD ]H}dj|| d�}t
||ƒr´tt||ƒ|ƒ| t||ƒ|| ƒd|d� q´d S )Nr   rP  r·  r£   r’  rÈ   r8   r
   rN  rK  rÐ  zY{method} of {name} is not invariant when applied to a datasetwith different sample order.rÒ  ç•Ö&è.>rÔ  )r¬   r­   r®   r“  r„  rn  rj  r>   r   r²   ru   rN  rK  rJ   r¸   Zpermutationr–  ræ   rB   r  )	r~   r¹   r¤  r»   r½   r}   ÚidxrŒ  r  r€   r€   r�   ré   Ã  s8    




 þÿ
üré   c              	   C   sÚ   t j d¡}d|jdd� }t||ƒ}|d d …df  t¡}t|ƒ}t||ƒ}t	|dƒr^d|_
t	|dƒrnd|_t|dƒ | dkrŒ|jd	d
� | dkr |jdd� ddddddg}tt|dd�� | ||¡ W 5 Q R X d S )Nr   rP  )r8   r¡   r£   rN  r8   rK  ZOPTICSrI  rU  r<  rM  r=  z1 samplezn_samples = 1zn_samples=1z
one samplez1 classz	one classTr¬  )r¬   r­   r®   r“  r„  rn  r”  r   r²   ru   rN  rK  rJ   rV  rI   r·   r¸   ©r~   r¹   r¤  r»   r½   r}   Zmsgsr€   r€   r�   rë   ï  s0    




ú	rë   c              	   C   sÒ   t j d¡}d|jdd� }t||ƒ}|d d …df  t¡}t|ƒ}t||ƒ}t	|dƒr^d|_
t	|dƒrnd|_| dkr|d|_| d	krŠd
|_t||ƒ}t|dƒ dddg}tt|dd�� | ||¡ W 5 Q R X d S )Nr   rP  )r¡   r8   r£   rN  r8   rK  ZRandomizedLogisticRegressionr   rM  z1 feature\(s\)zn_features = 1zn_features=1Tr¬  )r¬   r­   r®   r“  r„  rn  r”  r   r²   ru   rN  rK  Zsample_fractionZresidual_thresholdrJ   rI   r·   r¸   r×  r€   r€   r�   rì     s&    






rì   c              	   C   s†   t j d¡}d|jdd� }| t¡}t|ƒ}t||ƒ}t|dƒrHd|_	t|dƒrXd|_
t|dƒ ttƒ� | ||¡ W 5 Q R X d S )Nr   rP  r3  r£   rN  r8   rK  )r¬   r­   r®   r“  rn  r”  r   r²   ru   rN  rK  rJ   rI   r·   r¸   )r~   r¹   r¤  r»   r½   r}   r€   r€   r�   rô   7  s    





rô   c                 C   sb   t ddddgdddggdddd�\}}tƒ  |¡}t||ƒ}|rPt||gƒ\}}t| |||ƒ d S ©Nr¢  r   r8   r
   r  ©r5  Úcentersr  r6  Úcluster_std)r   r+   r9  r„  rG   Ú_check_transformer)r~   rÒ   rT   r»   r½   r€   r€   r�   rÍ   J  s    û

rÍ   c                 C   sz   t ddddgdddggdddd�\}}tƒ  |¡}t||ƒ}t|ƒ}tt |¡ƒ}t| |||ƒ t| || ¡ | ¡ ƒ d S rØ  )	r   r+   r9  r„  rZ  r¬   r[  rÜ  Útolist)r~   rÒ   r»   r½   Zthis_XZthis_yr€   r€   r�   rÌ   \  s    û

rÌ   c              	   C   sD   t ƒ \}}t|ƒ}tttfd| › d�d�� | |¡ W 5 Q R X d S )NzThe unfitted transformer z\ does not raise an error when transform is called. Perhaps use check_is_fitted in transform.r¦  )r;  r   rI   ÚAttributeErrorr·   rÔ   )r~   rÒ   r»   r½   r€   r€   r�   rÏ   n  s    

ý	rÏ   c                 C   sP   t j d¡}|jdd�}t||ƒ}t|ƒ}| |¡}|jd |jd ksLt‚dS )ztCheck that using transform without prior fitting
    doesn't raise a NotFittedError for stateless transformers.
    r   ©r3  r¢   r£   N)	r¬   r­   r®   r“  r„  r   rÔ   r–  rk  )r~   rÒ   rº   r»   ÚX_transr€   r€   r�   rÐ     s    

rÐ   c              	   C   sT  t  |¡j\}}t|ƒ}t|ƒ | tkrpt jt  |¡t  |¡f }|d d d…df  d9  < t|tƒrtt|ƒ}n|}| 	||¡ t|ƒ}|j
||d�}	t|	tƒr¾|	D ]}
|
jd |ks¤t‚q¤n|	jd |ksÐt‚t|dƒ�rP| tk�r| ||¡}|j
||d�}n| |¡}|j
||d�}t|dd��r8| d }t|ƒ‚t|	tƒ�r”t|tƒ�r”t|	||ƒD ]4\}
}}t|
|d	d
| d� t|
|d	d| d� �q\nLt|	|d
| d	d� t|	|d	d| d� t|ƒ|k�sÎt‚t|ƒ|k�sàt‚t|dƒ�rPt|dd��sP|jdk�rP|jd dk�rPttd| › d�d��  | |d d …d d…f ¡ W 5 Q R X d S )Nr
   r8   ©r½   r   rÔ   râ   rÈ   ú is non deterministicç{®Gáz„?z9fit_transform and transform outcomes not consistent in %srÔ  z7consecutive fit_transform outcomes not consistent in %sry  r–  rÇ   zThe transformer zr does not raise an error when the number of features in transform is different from the number of features in fit.r¦  r   )r¬   r[  r–  r   rJ   rp   Úc_rç   rZ  r¸   r9  rÇ  rk  ru   rÔ   r>   r?   ÚziprB   rK   ÚndimrI   r·   )r~   Útransformer_origr»   r½   r5  r6  rÒ   Úy_Ztransformer_cloneZX_predZx_predr«  ZX_pred3r  Zx_pred2Zx_pred3r€   r€   r�   rÜ  Ž  s”    




ÿüÿüÿûÿüÿ
þýü
ýrÜ  c                 C   sÜ   t |dd�r| d }t|ƒ‚tddddgdddggdddd	�\}}t||td
�}t|ƒ}t||ƒ}t|ƒ t|ƒ}| 	||¡ | 	||¡ ddg}|D ]@}t
||d ƒ}	|	d k	r–t
||ƒ}
|	||ƒ}|
||ƒ}t||ƒ q–d S )Nrâ   rÈ   râ  r¢  r   r8   r
   r  rÙ  ©ÚkernelÚscorer9  )r>   r?   r   r„  r&   r   r²   rJ   r*   r¸   r  rB   )r~   r¹   r  r»   r½   r}   ÚpipelineÚfuncsÚ	func_namer  Zfunc_pipeliner�  Zresult_piper€   r€   r�   rq   é  s2    û




rq   c                 C   sà   t j d¡}d}|j|dfd�}t||ƒ}t  |¡d }t|ƒ}t||ƒ}t|ƒ ddddd	g}|D ]v}t	||d ƒ}	|	d k	rd|	||ƒ d
d„ t
|	ƒj ¡ D ƒ}
|
d dkr¶|
dd … }
|
d dksdtd|t|ƒj|
f ƒ‚qdd S )Nr   r¢  rP  r£   r¸   rë  Úpartial_fitrÚ   r9  c                 S   s   g | ]
}|j ‘qS r€   )r~   ©rû   Úpr€   r€   r�   rþ     s     z+check_fit_score_takes_y.<locals>.<listcomp>r]  r8   )r½   ÚYzJExpected y or Y as second argument for method %s of %s. Got arguments: %r.)r¬   r­   r®   r“  r„  r£  r   r²   rJ   r  r   Ú
parametersÚvaluesrk  r%  rb   )r~   r¹   r¤  r5  r»   r½   r}   rí  rî  r  r  r€   r€   r�   re   
  s*    


þÿre   c                 C   sÎ   t j d¡}d|jdd� t j¡ }t||ƒ}| t j¡}| t j¡}| t j	¡}|d d …df }t
||ƒ}ddddg}||||fD ]D}	t|ƒ}
t|
d	ƒ |
 |	|¡ |D ]}t|
|ƒrªt|
|ƒ|	ƒ qªq„d S )
Nr   rP  rß  r£   rÛ   rÔ   r{  r}  r8   )r¬   r­   r®   r“  rn  r^   r„  r]   rj  Úint32r²   r   rJ   r¸   ru   r  )r~   r¹   r¤  Z
X_train_32Z
X_train_64ZX_train_int_64ZX_train_int_32r½   rŠ  ÚX_trainr}   rŒ  r€   r€   r�   rd   (  s     



rd   c                 C   sä   t ddddgdddggddd�\}}tƒ  |¡}t||ƒ}t|dd�D ]˜}| |¡}t|ƒ}t|ƒ | ||¡}| ||¡ 	|¡}t
||gdd	gƒD ]H\}	}
t|	tƒr®|	d }	|	j|ks”t| › d
|
› d|j› d|	j› d�ƒ‚q”qFd S )Nr¢  r   r8   r  )r5  rÚ  r  rÛ  rÆ   rÈ   r9  rÔ   z	 (method=z3) does not preserve dtype. Original/Expected dtype=z, got dtype=Ú.)r   r+   r9  r„  r>   rn  r   rJ   r¸   rÔ   rå  rç   rÇ  r`   rk  rb   )r~   rç  r»   r½   r`   ZX_castrÒ   ZX_trans1ZX_trans2ZXtrŒ  r€   r€   r�   rÎ   ?  s(    ü



ÿrÎ   c                 C   sº   t |ƒ}t|dƒ t d¡ dd¡}d| › d�}tt|d�� | |g ¡ W 5 Q R X t d¡ dd¡}t|t 	ddddddddddddg¡ƒ}d}tt|d	�� | ||¡ W 5 Q R X d S )
Nr8   r   rP  úThe estimator zc does not raise a ValueError when an empty data is used to train. Perhaps use check_array in train.r¦  r˜  zG0 feature\(s\) \(shape=\(\d*, 0\)\) while a minimum of \d* is required.r°  )
r   rJ   r¬   Úemptyr¡  rI   r·   r¸   r²   r›  )r~   r¹   ÚeZX_zero_samplesr«   ZX_zero_featuresr½   r  r€   r€   r�   ro   _  s    

ÿ(ro   c                 C   sf  t j d¡}t||jdd�ƒ}|jdd�}t j|d< |jdd�}t j|d< t  d¡}d|d d…< t||ƒ}d| › d�}d| › d	�}d| › d
�}	||fD ]Ê}
t	t
d��¶ t|ƒ}t|dƒ ttddg|d�� | |
|¡ W 5 Q R X | ||¡ t|dƒ�r"ttddg|d�� | |
¡ W 5 Q R X t|dƒ�rVttddg|	d�� | |
¡ W 5 Q R X W 5 Q R X q–d S )Nr   ©r¡   rP  r£   r¯  r¡   r¢   r¨   z& doesn't check for NaN and inf in fit.z* doesn't check for NaN and inf in predict.z, doesn't check for NaN and inf in transform.rŸ   r8   r°   ÚNaNr©   rÛ   rÔ   )r¬   r­   r®   r„  r“  r¯   r°   rP   r²   rH   r•  r   rJ   rI   r·   r¸   ru   rÛ   rÔ   )r~   r¹   r¤  ZX_train_finiteZX_train_nanZX_train_infr½   Úerror_string_fitÚerror_string_predictZerror_string_transformrö  r}   r€   r€   r�   rr   w  sJ     
ÿ




ÿ
ýýrr   c              	   C   sH   t ddd�\}}t|ƒ}ttd| › d�d�� | ||¡ W 5 Q R X dS )z8Test that error is thrown when non-square data provided.r3  r¡   )r5  r6  zThe pairwise estimator z+ does not raise an error on non-square datar¦  N)r   r   rI   r·   r¸   ©r~   r¹   r»   r½   r}   r€   r€   r�   rs   ¨  s    
ýrs   c                 C   sL  ddddg}t ddddgdddggddd	d
�\}}t||td�}t|ƒ}|d r~tj d¡}|j|jddd�}tj	| 
d¡|< t|ƒ}	t|	|ƒ}t|	ƒ |	 ||¡ |r²t|	ƒ}
nBt |	¡}|	j}| d¡rêd|ksê| d¡sêd|ksêt‚t |¡}
tƒ }|D ] }t|	|ƒrþt|	|ƒ|ƒ||< qþ|D ]"}t|
|ƒ|ƒ}t|| |ƒ �q$dS )z'Test that we can pickle all estimators.rÛ   rÔ   r{  r}  r¢  r   r8   r
   r  rÙ  ré  rV   r4  r¡   F)Úreplacer   r¥   r¦   r§   s   versionN)r   r„  r&   r>   r¬   r­   r®   Úchoicer¤   r¯   r¡  r   r²   rJ   r¸   rG   ÚpickleÚdumpsr³   r´   rµ   rk  ÚloadsÚdictru   r  rB   )r~   r¹   rT   Úcheck_methodsr»   r½   r   rº   Úmaskr}   Zunpickled_estimatorZpickled_estimatorr¾   r�  rŒ  Zunpickled_resultr€   r€   r�   rx   ¸  sH    û




ÿÿ

rx   c              	   C   sÆ   t |dƒsd S t|ƒ}tddd�\}}t||ƒ}t||ƒ}z4t|ƒr`t |¡}|j|||d� n| ||¡ W n t	k
r„   Y d S X t
td| › d�d��" | |d d …d d	…f |¡ W 5 Q R X d S )
Nrï  é2   r8   ©r5  r  ©Úclassesrø  zZ does not raise an error when the number of features changes between calls to partial_fit.r¦  r   )ru   r   r   r„  r²   r   r¬   Úuniquerï  ÚNotImplementedErrorrI   r·   )r~   r¹   r}   r»   r½   r  r€   r€   r�   r�   î  s$    




ýr�   c                 C   s&  d\}}}t |ƒ}t|ƒ}td|||d�\}}| ||¡ | |¡}|j||fkshtd ||f|j¡ƒ‚|jj	dksxt‚t
|dƒrâ| |¡}	t|	tjƒsœt‚|	j||fksÀtd ||f|	j¡ƒ‚|	dk t¡}
|j|
 }t||ƒ t
|d	ƒ�r¼| |¡}t|tƒ�rx|d
 �sxt|ƒD ]^}|| j|dfk�sHtd |df|| j¡ƒ‚ttj|| dd� t¡|d d …|f ƒ �qnD|d
 �s¼|j||fk�s¨td ||f|j¡ƒ‚t| ¡  t¡|ƒ t
|dƒ�r"t
|d	ƒ�r"t|ƒD ]D}| |¡d d …|f }| |¡}tt|ƒt|d d …|f ƒƒ �qÜd S )N)r4  r¢   rP  r4  )r  r5  Ún_labelsÚ	n_classesúSThe shape of the prediction for multioutput data is incorrect. Expected {}, got {}.Úir{  zaThe shape of the decision function output for multioutput data is incorrect. Expected {}, got {}.r   r}  Ú
poor_scorer
   zTThe shape of the probability for multioutput data is incorrect. Expected {}, got {}.r8   ©Zaxis)r>   r   r   r¸   rÛ   r–  rk  ræ   r`   rQ   ru   r{  rç   r¬   rt  rn  r”  Úclasses_rD   r}  rÈ  ÚrangeÚargmaxÚroundr	   )r~   r}   r5  r  r  r   r»   r½   Úy_predÚdecisionÚdec_predÚdec_expÚy_probr  Zy_probaZ
y_decisionr€   r€   r�   rŽ     sr    
   ÿ

 ÿÿ

 þÿ


 þÿ ÿ

 þÿ
rŽ   c                 C   sŒ   t |ƒ}d }}t|ƒs |d }tdd||d�\}}t||ƒ}| ||¡ | |¡}|jt d¡ksttd 	|j¡ƒ‚|j
|j
ksˆtdƒ‚d S )	Nr¡   r8   r4  r¢   )r  Ú	n_targetsr5  r6  r]   zbMultioutput predictions by a regressor are expected to be floating-point precision. Got {} insteadr  )r   rf  r   r„  r¸   rÛ   r`   r¬   rk  ræ   r–  )r~   r}   r5  r6  r»   r½   r  r€   r€   r�   rÁ   H  s*       ÿ


ÿÿÿrÁ   c              	   C   sö  t |ƒ}tddd�\}}t||dd�\}}tƒ  |¡}tj d¡}t ||j	dddd	�g¡}|rtt
|||gƒ\}}}|j\}}	t|d
ƒr”|jdd� t|ƒ | dkr¼|jdd� |jdd� | |¡ | | ¡ ¡ |j}
|
j|fksêt‚t|
|ƒdksüt‚t|dd��rd S t|ƒ tjdd�� | |¡}W 5 Q R X t|
|ƒ |
jt d¡t d¡fk�sbt‚|jt d¡t d¡fk�s‚t‚| |¡}t |¡}t|t |d |d d ¡ƒ |d dk�sÆt‚t|d
ƒ�ròt|d
ƒ}|d |d k�sòt‚d S )Nr  r8   r	  é   r  éýÿÿÿrP  )r¢   r
   r³  rK  )rK  ZAffinityPropagationiœÿÿÿ)Z
preferencerC  rA  gš™™™™™Ù?râ   rÈ   T©Úrecordrõ  rj  r   r   )r   r   )r   r   r;   r+   r9  r¬   r­   r®   Zconcatenater“  rG   r–  ru   rV  rJ   r¸   rÝ  Zlabels_rk  r"   r>   rä   Úcatch_warningsrÚ   rD   r`   r  r£  r  )r~   Úclusterer_origrT   r×   r»   r½   rº   ZX_noiser5  r6  r—  Úpred2ÚlabelsZlabels_sortedrK  r€   r€   r�   rÖ   b  sL    



  

 ÿ
rÖ   c                 C   sd   t ddd�\}}t|ƒ}t|ƒ t|dƒr`| |¡ |¡}|jdd� | |¡ |¡}t||ƒ dS )z2Check that predict is invariant of compute_labels.r3  r   r	  Úcompute_labelsF)r&  N)r   r   rJ   ru   r¸   rÛ   rV  rD   )r~   r#  r»   r½   r×   rª  r«  r€   r€   r�   rÕ   ž  s    
rÕ   c           
   
   C   s¨   d}d}t j d¡}|jdd�}|jdd�}t  d¡}ttd��^ t|ƒ}tt	dd	|d
��}	| 
||¡ W 5 Q R X |	jr†W 5 Q R £ d S t| |¡||d� W 5 Q R X d S )Nz6Classifier can't train when only one class is present.z8Classifier can't predict when only one class is present.r   rû  r£   r¡   rŸ   ÚclassTr�  r¦  )r¬   r­   r®   r“  rP   rH   r•  r   rI   r·   r¸   Úraised_and_matchedrD   rÛ   )
r~   Úclassifier_origrý  rþ  r¤  rö  ÚX_testr½   r�   Úcmr€   r€   r�   rŠ   ­  s&    
   ÿrŠ   c              	   C   sè   | › d�}| › d�}t j d¡}|jdd�}|jdd�}t  d¡d }| ¡ }t|ƒ}	t|	dƒrxd	|g}
tt	f| }}nd
}
t
t	fd }}t||
d|d��D}|	j|||d� |jrÀW 5 Q R £ dS t|	 |¡t  d¡|d� W 5 Q R X dS )z“Check that classifiers accepting sample_weight fit or throws a ValueError with
    an explicit message if the problem is reduced to one class.
    zu failed when fitted on one label after sample_weight trimming. Error message is not explicit, it should have 'class'.z; prediction results should only output the remaining class.r   )r¡   r¡   r£   r¡   r
   rN   z\bclass(es)?\bz\bsample_weight\bNTr�  r™  r¦  )r¬   r­   r®   r“  r£  rl  r   rL   rk  r·   r,  rI   r¸   r(  rD   rÛ   rP   )r~   r)  Z	error_fitZerror_predictr¤  rö  r*  r½   rN   r�   rª   Zerr_typer«   r+  r€   r€   r�   r‹   Ä  s.    ÿ

  ÿr‹   c              
   C   s`  t ddd�\}}| |¡}t||dd�\}}tƒ  |¡}||dk }||dk }| dkrp|| ¡ 8 }|| ¡ 8 }|rŒt||||gƒ\}}}}||fg}t|ƒ}	|	d s´| ||f¡ |D �] \}
}t	 
|¡}t|ƒ}|
j\}}t|ƒ}t||
ƒ}
t||ƒ}t|ƒ |	d	 �s@ttd
| › d�d�� | |
|d d… ¡ W 5 Q R X | |
|¡ | |
 ¡ | ¡ ¡ t|dƒ�spt‚| |
¡}|j|fk�sŒt‚|	d �sªt||ƒdk�sªt‚d}d}|	d	 �s&|	d �rútt| | d¡d�� | |
 dd¡¡ W 5 Q R X n,tt| | d¡d�� | |
j¡ W 5 Q R X t|dƒ�rP�z| |
¡}|dk�rš|	d �sh|j|fk�s|t‚n|j|dfk�s|t‚| ¡ dk t¡}t||ƒ n(|j||fk�s®t‚tt	j |dd�|ƒ |	d	 �s6|	d �r
tt| | d¡d�� | |
 dd¡¡ W 5 Q R X n,tt| | d¡d�� | |
j¡ W 5 Q R X W n t!k
�rN   Y nX t|dƒr¸| "|
¡}|j||fk�sxt‚tt	j |dd�|ƒ t#t	j$|dd�t	 %|¡ƒ |	d	 �s|	d �rîtt| | d¡d�� | "|
 dd¡¡ W 5 Q R X n,tt| | d¡d�� | "|
j¡ W 5 Q R X t|dƒr¸| &|
¡}t'|t	 (|¡ddd� tt	 )|¡t	 )|¡ƒ q¸d S )Né,  r   r	  r  r  r
   )ÚBernoulliNBZMultinomialNBÚComplementNBZCategoricalNBr’  rU   úThe classifier ú¶ does not raise an error when incorrect/malformed input data for fit is passed. The number of training examples is not the same as the number of labels. Perhaps use check_X_y in fit.r¦  r   r  r  g�Âõ(\�ê?zuThe classifier {} does not raise an error when shape of X in  {} is not equal to (n_test_samples, n_training_samples)z|The classifier {} does not raise an error when the number of features in {} is different from the number of features in fit.rO   rÛ   r8   r{  r†   r  r}  r|  é   rÕ  )rz  )*r   rn  r;   r+   r9  rW  rG   r>   Úappendr¬   r  r  r–  r   r„  r²   rJ   rI   r·   r¸   rÝ  ru   rk  rÛ   r!   ræ   r¡  ÚTr{  rÌ  r”  rD   r  r  r}  rC   ÚsumrP   r|  rA   ÚlogÚargsort)r~   r)  rT   r…   ZX_mZy_mZy_bZX_bÚproblemsr   r»   r½   r  r  r5  r6  r�   r  Zmsg_pairwiser  r  r  r  Z
y_log_probr€   r€   r�   r�   é  s¾    







ý	

ÿÿ


þ





þ
þ




þ
þ

r�   c                 C   sV   | |k r| }|d }n|}| d }t  |¡}d}tt  |||… ¡ƒdksRt|ƒ‚d S )Nr8   z«The number of predicted outliers is not equal to the expected number of outliers and this difference is not explained by the number of ties in the decision_function values)r¬   Úsortr  r  rk  )Únum_outliersÚexpected_outliersr  ÚstartÚendZsorted_decisionr  r€   r€   r�   Úcheck_outlier_corruptiont	  s    

ÿr=  Tc              	   C   sö  d}t |dd�\}}t|dd�}|r,t|ƒ}|j\}}t|ƒ}t|ƒ | |¡ | | ¡ ¡ | |¡}|j|fksxt	‚|j
jdksˆt	‚tt |¡t ddg¡ƒ | |¡}	| |¡}
|	|
fD ](}|j
t 
d	¡ksÖt	‚|j|fks¾t	‚q¾ttƒ� | |j¡ W 5 Q R X |	dk t¡}d||dk< t||ƒ ttƒ� | |j¡ W 5 Q R X |
|j }t||	ƒ ttƒ� | |j¡ W 5 Q R X t|d
ƒ�ròt|dƒ�sòd}|| }|j|d� | |¡ | |¡}t |dk¡}||k�rò| |¡}	t|||	ƒ d S )Nr,  r   r	  r  r  r  r   r8   ÚfloatrÙ   Znoveltyr¢  ©rÙ   )r   r;   rG   r–  r   rJ   r¸   rÝ  rÛ   rk  r`   rQ   rD   r¬   r  r›  r{  rÑ  rI   r·   r3  rn  r”  Zoffset_rA   ru   rV  r4  r=  )r~   r¹   rT   r5  r»   rº  r6  r}   r  r  ZscoresÚoutputr  Zy_decr:  rÙ   r9  r€   r€   r�   rÞ   Š	  sP    














rÞ   c                 C   s’   t |dƒsd S d|jkrd S |jd }tdd„ |D ƒƒs@tdƒ‚|D ]H}t|tƒrD|jtkr„|jdkr„|j	dkr„|jdksD|j
d	ksDtd
ƒ‚qDd S )NÚ_parameter_constraintsrÙ   c                 S   s   g | ]}t |tƒ‘qS r€   )rç   r<   )rû   Úcr€   r€   r�   rþ   Þ	  s     z/check_outlier_contamination.<locals>.<listcomp>zDcontamination constraints should contain a Real Interval constraint.ç        rM  r   >   ÚrightÚneitherz:contamination constraint should be an interval in (0, 0.5])ru   rA  r+  rk  rç   r<   r%  r   ÚleftrD  Úclosed)r~   r¹   Zcontamination_constraintsÚ
constraintr€   r€   r�   rÜ   Ò	  s.    


ÿ
ÿþýüüûrÜ   c              	   C   sþ   t dddddddd�\}}t|ƒ}|d d	… |d d	…  }}|d	d … }| ¡ }t|ƒ}t|ƒ}	t|	ƒ |	 ||¡ |¡}
|	 ||¡ |¡}|	 ||¡ |¡}t|
|ƒ t|
|ƒ |
j	|j	ksÂt
‚|
j	|j	ksÒt
‚t|
ƒt|ƒksæt
‚t|
ƒt|ƒksút
‚d S )
NrC  r
   r¢   rP  r  Tr   ©r5  r6  r  r  ÚlengthZallow_unlabeledr  éP   )r   r,   rÝ  rÈ  r   rJ   r¸   rÛ   rD   r`   rk  r%  )r~   r)  r»   r½   rö  Úy_trainr*  Zy_train_list_of_listsZy_train_list_of_arraysr�   r  Zy_pred_list_of_listsZy_pred_list_of_arraysr€   r€   r�   r‘   í	  s:    ù
	ÿÿ

r‘   c              	   C   s8  t |ƒ}t|ƒ d\}}}t|d|ddddd�\}}t|ƒ}|d| … || d…  }}	|d| … || d…  }
}| ||
¡ d	}t||dƒ}|dkr°t| › d
|› d�ƒ‚||	ƒ}t|tj	ƒsÜt
| › dt|ƒ› d�ƒ‚|j|jk�st
| › d|j› d|j› d�ƒ‚|j|jk�s4t
| › d|j› d|j› d�ƒ‚dS )zeCheck the output of the `predict` method for classifiers supporting
    multilabel-indicator targets.©rC  é   r¢   r
   rP  r  Tr   rI  NrÛ   ú does not have a ú method.z2.predict is expected to output a NumPy array. Got ú	 instead.z(.predict outputs a NumPy array of shape ú instead of r÷  z>.predict does not output the same dtype than the targets. Got )r   rJ   r   r,   r¸   r  r?   rç   r¬   rt  rk  r%  r–  r`   )r~   r)  r�   r5  Ú	test_sizeÚ	n_outputsr»   r½   rö  r*  rL  Úy_testÚresponse_method_nameZpredict_methodr  r€   r€   r�   r’   
  s<    
ù
	ÿÿÿr’   c              	   C   s  t |ƒ}t|ƒ d\}}}t|d|ddddd�\}}t|ƒ}|d| … || d…  }}	|d| … }
| ||
¡ d	}t||dƒ}|dkr t| › d
|› d�ƒ‚||	ƒ}t|tƒ�rft	|ƒ|ksàt
d| › dt	|ƒ› d|› d�ƒ‚|D ]~}|j|dfk�st
d| › d|j› d|df› d�ƒ‚|jjdk�s@t
d| › d|j› d�ƒ‚d| › d�}t|jdd�d|d� qänªt|tjƒ�rö|j||fk�s¦t
d| › d|j› d||f› d�ƒ‚|jjdk�sÌt
d| › d|j› d�ƒ‚d| › d�}td||d� t|d|d� ntdt|ƒ› d| › d�ƒ‚dS )zkCheck the output of the `predict_proba` method for classifiers supporting
    multilabel-indicator targets.rM  r
   rP  r  Tr   rI  Nr}  rO  rP  zWhen zn.predict_proba returns a list, the list should be of length n_outputs and contain NumPy arrays. Got length of rR  r÷  zx.predict_proba returns a list, this list should contain NumPy arrays of shape (n_samples, 2). Got NumPy arrays of shape ÚfzW.predict_proba returns a list, it should contain NumPy arrays with floating dtype. Got rQ  z¦.predict_proba returns a list, each NumPy array should contain probabilities for each class and thus each row should sum to 1 (or close to 1 due to numerical errors).r8   r  r¦  zX.predict_proba returns a NumPy array, the expected shape is (n_samples, n_outputs). Got zN.predict_proba returns a NumPy array, the expected data type is floating. Got z .predict_proba returns a NumPy array, this array is expected to provide probabilities of the positive class and should therefore contain values between 0 and 1.zUnknown returned type z by z4.predict_proba. A list or a Numpy array is expected.)r   rJ   r   r,   r¸   r  r?   rç   rÈ  r  rk  r–  r`   rQ   rA   r4  r¬   rt  rE   r·   r%  )r~   r)  r�   r5  rS  rT  r»   r½   rö  r*  rL  rV  Zpredict_proba_methodr  r—  r«   r€   r€   r�   r“   C
  sb    
ù
	ÿÿÿ
ÿÿÿ
ÿÿr“   c              	   C   s"  t |ƒ}t|ƒ d\}}}t|d|ddddd�\}}t|ƒ}|d| … || d…  }}	|d| … }
| ||
¡ d	}t||dƒ}|dkr t| › d
|› d�ƒ‚||	ƒ}t|tj	ƒsÌt
| › dt|ƒ› d�ƒ‚|j||fksút
| › d|j› d||f› d�ƒ‚|jjdk�st
| › d|j› d�ƒ‚dS )zoCheck the output of the `decision_function` method for classifiers supporting
    multilabel-indicator targets.rM  r
   rP  r  Tr   rI  Nr{  rO  rP  z<.decision_function is expected to output a NumPy array. Got rQ  z].decision_function is expected to provide a NumPy array of shape (n_samples, n_outputs). Got rR  r÷  rW  z?.decision_function is expected to output a floating dtype. Got )r   rJ   r   r,   r¸   r  r?   rç   r¬   rt  rk  r%  r–  r`   rQ   )r~   r)  r�   r5  rS  rT  r»   r½   rö  r*  rL  rV  Zdecision_function_methodr  r€   r€   r�   r”   —
  s<    
ù
	ÿÿÿr”   c              	   C   s8   t |ƒ}d| › d�}tt|d�� | ¡  W 5 Q R X dS )zŸCheck the error raised by get_feature_names_out when called before fit.

    Unfitted estimators with get_feature_names_out should raise a NotFittedError.
    r¨   zU should have raised a NotFitted error when fit is called before get_feature_names_outr¦  N)r   rI   r   Úget_feature_names_out)r~   r¹   r}   r«   r€   r€   r�   Ú!check_get_feature_names_out_errorÅ
  s
    
ÿrY  c                 C   s`   t ddd�\}}t||ƒ}t|ƒ}t||ƒ}|r@t||gƒ\}}t|ƒ | ||¡|ks\t‚dS )z+Check if self is returned when calling fit.r   é   ©r  r5  N)r   r„  r   r²   rG   rJ   r¸   rk  )r~   r¹   rT   r»   r½   r}   r€   r€   r�   rl   Õ
  s    

rl   c              
   C   sL   t ƒ \}}t|ƒ}dD ]0}t||ƒrttƒ� t||ƒ|ƒ W 5 Q R X qdS )z}Check that predict raises an exception in an unfitted estimator.

    Unfitted estimators should raise a NotFittedError.
    )r{  rÛ   r}  r|  N)r;  r   ru   rI   r   r  )r~   r¹   r»   r½   r}   rŒ  r€   r€   r�   r—   å
  s    


r—   c              	   C   s"  t |ƒ}tj d¡}d}t||j|dfd�ƒ}t |¡d }t||ƒ}t|ƒ}t	|ƒ | 
||¡ | |¡}t	|ƒ tjdd��8}	t dt¡ t dt¡ | 
||d d …tjf ¡ W 5 Q R X | |¡}
d	d
 dd„ |	D ƒ¡ }|d �st|	ƒdksþt|ƒ‚d|k�st‚t| ¡ |
 ¡ ƒ d S )Nr   r¢  rP  r£   Tr   ÚalwaysrS  z)expected 1 DataConversionWarning, got: %srÀ  c                 S   s   g | ]}t |ƒ‘qS r€   ©r  )rû   Zw_xr€   r€   r�   rþ     s     z)check_supervised_y_2d.<locals>.<listcomp>rƒ   zPDataConversionWarning('A column-vector y was passed when a 1d array was expected)r>   r¬   r­   r®   r„  r“  r£  r²   r   rJ   r¸   rÛ   rä   r"  Úsimplefilterr   ÚRuntimeWarningZnewaxisr  r  rk  rA   rÌ  )r~   r¹   r   r¤  r5  r»   r½   r}   r  ÚwZ	y_pred_2dr  r€   r€   r�   r–   ú
  s4    

$
ÿ
þÿr–   c                 C   s|  t  |¡}t|ƒ}|dkr&| |  ¡ k} t|ƒ | | |¡ | | ¡}t|dƒ�r$| | ¡}t	|t j
ƒsjt‚t|ƒdkrÄ| ¡ dk t¡}|j| }	t|	|d|d tt|	ƒ¡d tt|ƒ¡f d� n`t|dd	ƒd	k�r$t j|d
d� t¡}
|j|
 }t||d|d tt|ƒ¡d tt|ƒ¡f d� |dk�rDtt  |¡t  |¡ƒ t||jd|d tt|ƒ¡d tt|jƒ¡f d� d S )Nr-  r{  r
   r   zKdecision_function does not match classifier for %r: expected '%s', got '%s'rÀ  r¦  Zdecision_function_shapeZovrr8   r  r.  z=Unexpected classes_ attribute for %r: expected '%s', got '%s')r¬   r  r   ÚmeanrJ   r¸   rÛ   ru   r{  rç   rt  rk  r  rÌ  rn  r”  r  rD   r  rÉ  r  r  r  )r»   r½   r~   r)  r  r�   r  r  r  r  Z
decision_yZy_expr€   r€   r�   Úcheck_classifiers_predictions  s`    



ýüý
ýüý
ýÿýrb  c                 C   s   | dkr|S |S )N)ZLabelPropagationZLabelSpreadingÚSelfTrainingClassifierr€   )r~   r½   Úy_namesr€   r€   r�   Ú _choose_check_classifiers_labels_  s    ÿýre  c                 C   s  t dddd�\}}t||dd�\}}tƒ  |¡}||dk }||dk }t||ƒ}t||ƒ}dd	d
g}dd	g}t ||¡}t ||¡}	|||	fg}
t|dd�s®|
 |||f¡ |
D ]8\}}}|| 	d¡fD ]}t
| ||ƒ}t||| |ƒ qÊq²ddg}t ||¡}	t
| ||	ƒ}t||| |ƒ d S )Nr¢  r   r  )r5  r  rÛ  r  r  r
   ÚoneÚtwoÚthreer’  rÈ   ÚOr   r8   )r   r;   r+   r9  r„  r¬   Ztaker>   r2  rn  re  rb  )r~   r)  ZX_multiclassZy_multiclassZX_binaryZy_binaryZlabels_multiclassZlabels_binaryZy_names_multiclassZy_names_binaryr7  r»   r½   rd  Z	y_names_irè  r€   r€   r�   rŒ   i  s4      ÿ



rŒ   c                 C   sð   t ƒ \}}t||d d… ƒ}tj d¡}|jd|jd d�}t||ƒ}tj d¡}t|ƒ}t|ƒ}t	|ƒ t	|ƒ | t
kr¦t |d| |jdt|ƒd� g¡}|j}n|}| ||¡ | |¡}	| || t¡¡ | |¡}
t|	|
d| d� d S )Nr  r   rP  r£   r
   rã  rÔ  )r;  r„  r¬   r­   r®   r¶  r–  r²   r   rJ   rp   r§  r  r3  r¸   rÛ   rn  r>  rA   )r~   Úregressor_origr»   rº  r¤  r½   Zregressor_1Zregressor_2rè  Úpred1r$  r€   r€   r�   rÃ   ‹  s&    

$

rÃ   c           
   	   C   s\  t ƒ \}}| |¡}t|ƒ}t|ƒ}t||ƒ}t||ƒ}| tkrxtj 	d¡}t 
|d| |jdt|ƒd� g¡}|j}n|}|r”t|||gƒ\}}}t|dƒs®t|dƒr®d|_| dkr¼d|_ttd| › d	�d
�� | ||d d… ¡ W 5 Q R X t|ƒ | ||¡ | | ¡ | ¡ ¡ | |¡}	|	j|jk�s4t‚t|dd��sX| ||¡dk�sXt‚d S )Nr   r
   r£   Zalphasr  rã  ZPassiveAggressiveRegressorr/  r0  r¦  r   r  rÈ   rM  )r;  rn  r,   r   r„  r²   rp   r¬   r­   r®   r§  r¶  r  r3  rG   ru   r  r  rI   r·   r¸   rJ   rÝ  rÛ   r–  rk  r>   rë  )
r~   rj  rT   r…   r»   r½   rÄ   r¤  rè  r  r€   r€   r�   r¿   §  s:    



$
ý	
r¿   c                 C   sr   t j d¡}t|ƒ}|jdd�}t||ƒ}t||d d …df ƒ}| ||¡ dddg}|D ]}t||ƒrZt	‚qZd S )Nr   )r¡   r�  r£   r{  r}  r|  )
r¬   r­   r®   r   Únormalr„  r²   r¸   ru   rk  )r~   rj  rº   rÄ   r»   r½   rí  rî  r€   r€   r�   rÂ   Ú  s    

rÂ   c                 C   sN  t |dd�rdg}nddg}|D �]&}t|ddd�\}}t||ddd	�\}}}}	t |d
d�rpt||ƒ}t||ƒ}tt |¡ƒ}|dkr’dddœ}
nddddœ}
t|ƒj|
d�}t	|dƒrÄ|jdd� t	|dƒrÚ|jdd� t	|dƒrð|jdd� t	|dƒ�r|jdd� t
|ƒ | ||¡ | |¡}t |dd�s t |dk¡dks t‚q d S )Nr’  rÈ   r
   rP  r   r3  )rÚ  r  rÛ  rM  ©rS  r  rO   éè  g-Cëâ6?)r   r8   )r   r8   r
   ©rˆ   r>  rC  r?  r@  rA  Úmin_weight_fraction_leafrã  )rp  Ún_iter_no_change)rq  r  g×£p=
×ë?)r>   r   r(   r&   r  r¬   r  r   rV  ru   rJ   r¸   rÛ   ra  rk  )r~   r)  r7  Z	n_centersr»   r½   rö  r*  rL  rU  rˆ   r�   r  r€   r€   r�   rš   ë  s@    
   ÿ





rš   c           
      C   s˜   t |ƒ}t|dƒr|jdd� t|dƒr4|jdd� t|ƒ | ||¡ | |¡}|jdd� | ||¡ | |¡}	t||	d	d
�t||d	d
�ks”t‚d S )Nr>  rC  r?  r@  rn  rA  Úbalancedro  Zweighted)Zaverage)r   ru   rV  rJ   r¸   rÛ   r#   rk  )
r~   r)  rö  rL  r*  rU  rŸ  r�   r  Zy_pred_balancedr€   r€   r�   Ú'check_class_weight_balanced_classifiers  s     



  ÿrs  c           
      C   s&  t  ddgddgddgddgddgg¡}t  dddddg¡}|ƒ }t|dƒrX|jd	d
� t|dƒrn|jd	d� t|dƒr„|jdd� t|ƒ |jdd� | ||¡j ¡ }t|ƒ}t	tt  
|¡ƒƒ}|t  |dk¡|  |t  |dk¡|  dœ}|j|d� | ||¡j ¡ }	t||	d|  d� dS )z4Test class weights with non-contiguous class labels.ç      ð¿r   gš™™™™™é¿rI  rC  r8   r   r>  rn  r?  r@  rA  rO  rP  rQ  rr  ro  )r8   r   z>Classifier %s is not computing class_weight=balanced properly.r¦  N)r¬   r›  ru   rV  rJ   r¸   Úcoef_rl  r  r>  r  r4  rA   )
r~   Ú
Classifierr»   r½   r�   Zcoef_balancedr5  r  rˆ   Zcoef_manualr€   r€   r�   Ú-check_class_weight_balanced_linear_classifier.  s0    (


þýrw  c                 C   s¢   t ddd�\}}t||td�}t|ƒ}t||ƒ}t|ƒ | ¡ }t|ƒ}| ||¡ | ¡ }| 	¡ D ]8\}}	|| }
t
 |
¡t
 |	¡ksdtd| ||	|
f ƒ‚qdd S )Nr   rZ  r[  ré  zTEstimator %s should not change or mutate  the parameter %s from %s to %s during fit.)r   r„  r&   r   r²   rJ   r˜   r   r¸   r  ÚjoblibÚhashrk  )r~   r¹   r»   r½   r}   rX  Zoriginal_paramsÚ
new_paramsÚ
param_nameÚoriginal_valueÚ	new_valuer€   r€   r�   rt   W  s     

þÿrt   c                 C   sÜ   zt |ƒ}W n$ tk
r0   td| › d�ƒ‚Y nX tt|ƒjdƒrFdS tt|ƒjƒ}trtdD ]}||kr\| |¡ q\dd„ dd	„ t|ƒjD ƒD ƒ}t	t
|ƒƒt	|ƒ t	|ƒ }t	d
d„ |D ƒƒ}|rØtd| t|ƒf ƒ‚dS )zCheck setting during init.r¨   z9 should store all parameters as an attribute during init.r½  N)r  c                 S   s   g | ]}|D ]}|‘qqS r€   r€   )rû   Zparams_parentr  r€   r€   r�   rþ   Ž  s    þz3check_no_attributes_set_in_init.<locals>.<listcomp>c                 s   s   | ]}t |ƒV  qd S r$  )r@   )rû   Úparentr€   r€   r�   r'  �  s     z2check_no_attributes_set_in_init.<locals>.<genexpr>c                 S   s   g | ]}|  d ¡s|‘qS )rº  )r´   )rû   r»  r€   r€   r�   rþ   —  s     
 zaEstimator %s should not set any attribute apart from parameters during init. Found attributes %s.)r   rÞ  ru   r%  r^  r@   r9   ÚremoveÚ__mro__Úsetr…  rk  Úsorted)r~   r¹   r}   Úinit_paramsrÉ   Zparents_init_paramsZinvalid_attrr€   r€   r�   rc   y  s.    
ÿ
þ
þÿrc   c                 C   sè   t  ddgddgddgddgddgddgddgddgddgg	¡}t  dddddddddg	¡}t||ƒ}t|ƒ}| ||¡ | |¡}| ¡  t |j	¡sœt
‚| |¡}t||ƒ t t |¡¡}t |j	¡sÐt
‚| |¡}t||ƒ d S )Néþÿÿÿr   r8   r
   rP  )r¬   r›  r²   r   r¸   rÛ   rW   r   rÊ  ru  rk  rD   r  r  r  )r~   r¹   r»   r½   r&  Z	pred_origr—  r€   r€   r�   rv   Ÿ  s2    ÷ÿ




rv   c                 C   s¦   t  ddgddgddgddgddgddgddgddgddgddgddgddgg¡}t||ƒ}t  ddddddddddddg¡}t||ƒ}dD ]}t| ||||ƒ qŒd S )NrP  r   r8   r
   r�  ©Ú
NotAnArrayZPandasDataframe)r¬   r›  r„  r²   Ú"check_estimators_data_not_an_array©r~   r¹   r»   r½   Úobj_typer€   r€   r�   r‰   Â  s(    ôÿ
"
r‰   c                 C   s<   t ƒ \}}t||ƒ}t||ƒ}dD ]}t| ||||ƒ q"d S )Nr…  )r;  r„  r²   r‡  rˆ  r€   r€   r�   rÀ   Û  s
    


rÀ   c                 C   s  | t krtdƒ‚t|ƒ}t|ƒ}t|ƒ t|ƒ |dkrFtd |¡ƒ‚|dkrltt |¡ƒ}tt |¡ƒ}npzRdd l	}	t |¡}|j
dkrš|	j|dd�}n|	j|dd�}|	jt |¡dd�}W n tk
rÚ   td	ƒ‚Y nX | ||¡ | |¡}
| ||¡ | |¡}t|
|d
| d� d S )NzoSkipping check_estimators_data_not_an_array for cross decomposition module as estimators are not deterministic.r…  zData type {0} not supportedr†  r   r8   Frs  zDpandas is not installed: not checking estimators for pandas objects.rã  rÔ  )rp   r?   r   rJ   r·   ræ   rZ  r¬   r[  rš  ræ  r�  rœ  r‚  r¸   rÛ   rA   )r~   r¹   r»   r½   r‰  Zestimator_1Zestimator_2rè  ZX_rž  rk  r$  r€   r€   r�   r‡  ä  s:    ÿ

ÿ


r‡  c                    s"  |j }ttd��� t|ƒ}t|ƒ t|ƒ | ¡ |ks<t‚t|j	d|j	ƒ}z(dd„ ‰ ‡ fdd„t
|ƒj ¡ D ƒ}W n$ ttfk
r˜   Y W 5 Q R £ d S X | ¡ }|tt|dg ƒƒd … }|D �]R}|j|jksètd|jt|ƒjf ƒ‚ttttttd ƒth}| tjjj ¡ ¡ t|jƒ|k�p*t |jƒ}|�svtd	|j› d
|j› dt|jƒj› d|j› dt!dd„ |D ƒƒ› d�ƒ‚|j| "¡ k�r¬|jd ks¾td|j› d
|j› d�ƒ‚q¾||j }	t#|	tj$ƒ�rÒt%|	|jƒ q¾d|j› d�}
t&|	ƒ�r |	|jk�st|
ƒ‚q¾|	|jks¾t|
ƒ‚q¾W 5 Q R X d S )NrŸ   r½  c                 S   s"   | j dko | j| jko | j| jkS )z*Identify hyper parameters of an estimator.r]  )r~   rQ   ÚVAR_KEYWORDÚVAR_POSITIONAL)rñ  r€   r€   r�   Úparam_filter,  s
    

ÿ
ýz<check_parameters_default_constructible.<locals>.param_filterc                    s   g | ]}ˆ |ƒr|‘qS r€   r€   rð  ©rŒ  r€   r�   rþ   4  s     z:check_parameters_default_constructible.<locals>.<listcomp>r
  z(parameter %s for %s has no default valuezParameter 'z' of estimator 'z' is of type z which is not allowed. 'z(' must be a callable or must be of type c                 s   s   | ]}|j V  qd S r$  )rb   )rû   r%  r€   r€   r�   r'  ^  s     z9check_parameters_default_constructible.<locals>.<genexpr>r÷  zEstimator parameter 'zT' is not returned by get_params. If it is deprecated, set its default value to None.z
Parameter z> was mutated on init. All parameters must be stored unchanged.)'ra   rH   r•  r  r   ÚreprrV  rk  r  r^  r   ró  rô  r,  r·   r˜   r  Údefaultrù  r~   r%  rb   r  r”  r>  re  rÇ  Úupdater¬   ÚcoreZnumerictypesZallTypesr   r�  r™   rç   rt  rD   r:   )r~   r  r}   Úinitrƒ  rX  Z
init_paramZallowed_typesZallowed_valueZparam_valueZfailure_textr€   r�  r�   rè     sh    
ÿ


ÿþþù
ù
>ÿÿ
ÿ
rè   c                 C   st   t | dd�r |dt| ¡ ƒ 7 }t | dd�rX|jdkrXt ||jd k||jd d ¡}t | dd�rpt |d¡S |S )NZrequires_positive_yrÈ   r8   r’  r   r†   )r   r8   )r>   ÚabsrW  r¤   r¬   ÚwhereZflatr¡  )r}   r½   r€   r€   r�   r²   |  s    "r²   c                 C   sÀ   dt | dd�kr |d d …df }t | dd�r8|| ¡  }dt | dd�krxt | dd�rZtjntj}t || ¡  ¡ |¡}| jjdkr�|| ¡  }t	| ƒr¦t
|d	d
�}nt | dd�r¼|||ƒ}|S )NZ1darrayrá   rÈ   r   rã   ÚcategoricalrV   ZSkewedChi2SamplerZ	euclidean)rd  rO   )r>   rW  r¬   r]   rõ  r  rn  ra   rb   rf  r%   )r}   r»   rê  r`   r€   r€   r�   r„  Œ  s    
r„  c                 C   s¨   dddddddg}|t 7 }| |kr&d S | dkr@t|ƒjd	d
�}nt|ƒ}t|dƒr¤tƒ }|j|j }}t||ƒ}t|dƒ t	||ƒ}| 
||¡ t |jdk¡s¤t‚d S )Nr   ZRidgeClassifierrÊ   rË   rB  r   rc  Z	LassoLarsrC  r  r@  r   r8   )rp   r   rV  ru   r   r\  Útargetr²   rJ   r„  r¸   r¬   ÚallÚn_iter_rk  )r~   r¹   Znot_run_check_n_iterr}   Zirisr»   rè  r€   r€   r�   r›   ¦  s,    
ù



r›   c                 C   sÖ   t |ƒ}t|dƒrÒ| tkr\dddgdddgdddgdddgg}ddgd	d
gddgddgg}n0tddddgdddggdddd�\}}t||ƒ}t|dƒ | ||¡ | tkrÄ|jD ]}|dks°t‚q°n|jdksÒt‚d S )Nr@  rC  rI  g       @r2  g      @r  gš™™™™™É¿gÍÌÌÌÌÌì?gš™™™™™ñ?g      à¿g333333Ó?r¢  r   r8   r
   rÙ  )	r   ru   rp   r   r„  rJ   r¸   r˜  rk  )r~   r¹   r}   r»   rè  Ziter_r€   r€   r�   rÑ   Ñ  s&    
$û



rÑ   c                    sB   t |ƒ}|jdd�}|jdd�‰ t‡ fdd„| ¡ D ƒƒs>t‚d S )NF©ÚdeepTc                 3   s   | ]}|ˆ   ¡ kV  qd S r$  )r  )rû   Úitem©Zdeep_paramsr€   r�   r'  ø  s     z.check_get_params_invariance.<locals>.<genexpr>)r   r˜   r—  r  rk  )r~   r¹   rú  Zshallow_paramsr€   rœ  r�   rí   ð  s    rí   c                 C   sø  t |ƒ}|jdd�}d}|jf |Ž |jdd�}t| ¡ ƒt| ¡ ƒksPt|ƒ‚| ¡ D ]\}}|| |ksXt|ƒ‚qXtj tjd g}t	|ƒ}	| ¡ D �]Z}
||
 }|D �]>}||	|
< z|jf |	Ž W nÈ t
tfk
�rŽ } z¤|jj}t d ||
| ¡¡ d |¡}|}|jdd�}zHt| ¡ ƒt| ¡ ƒk�s4t‚| ¡ D ]\}}|| |k�s<t‚�q<W n  tk
�r|   t |¡ Y nX W 5 d }~X Y q¨X |jdd�}t|	 ¡ ƒt| ¡ ƒk�s¾t|ƒ‚| ¡ D ] \}}|	| |k�sÆt|ƒ‚�qÆq¨||	|
< q–d S )NFr™  z>get_params result does not match what was passed to set_paramszn{0} occurred during set_params of param {1} on {2}. It is recommended to delay parameter validation until fit.z9Estimator's parameters changed after set_params raised {})r   r˜   rV  r�  r™   rk  r  r¬   r°   r   r,  r·   ra   rb   rä   rå   ræ   )r~   r¹   r}   Zorig_paramsr  Zcurr_paramsrü   rý   Ztest_valuesZtest_paramsr{  Údefault_valuer¼   rú  Ze_typeZchange_warning_msgZparams_before_exceptionr€   r€   r�   rî   û  sX     
  þÿÿÿÿ""rî   c              	   C   sT   t ƒ \}}t||ƒ}t|ƒ}d}t|dd�sPtt|d�� | ||¡ W 5 Q R X d S )NzUnknown label type: rU   rÈ   r°  )r;  r„  r   r>   rI   r·   r¸   )r~   r¹   r»   r½   rú  r  r€   r€   r�   r�   4  s    

r�   c              	      s  ddg}t ddd|ddd�\}}t||d	dd
�\}}}}t|ƒ}	t|	dƒ�r
t|	dƒ�r
|	 ||¡ |	 |¡d d …df jdd�}
|	 |¡jdd�‰ t|
ƒtˆ ƒ ‰}zt	ˆ|ƒ W nT t
k
�r   t ‡ ‡fdd„t ˆ¡D ƒ¡}t |¡}t|t t|ƒ¡ƒ Y nX d S )N)r
   r
   )r�  r�  rC  r   r�  rI  T)r5  r  r6  rÚ  rÛ  r;   çš™™™™™É?rm  r{  r}  r8   r¡   )Zdecimalsc                    s   g | ]}ˆ ˆ|k   ¡ ‘qS r€   )ra  )rû   Úgroup©ÚbZ
rank_probar€   r�   rþ   i  s     z4check_decision_proba_consistency.<locals>.<listcomp>)r   r(   r   ru   r¸   r}  r  r{  r	   rC   rk  r¬   r›  r  r6  rD   r£  r  )r~   r¹   rÚ  r»   r½   rö  r*  rL  rU  r}   ÚaZ
rank_scoreZgrouped_y_scoreZ
sorted_idxr€   r   r�   rœ   B  s:    ú
   ÿÿ
rœ   c                 C   s  d}t |dd�\}}t|dd�}|j\}}t|ƒ}t|ƒ | |¡}|j|fksTt‚|jjdksdt‚t	t
 |¡t
 ddg¡ƒ t|d	ƒr¢| |¡ |¡}t	||ƒ t|d
ƒ�rd}	t|	ƒ| }
|j|
d� | |¡}t
 |dk¡}||	k�rt|dƒ�r| |¡}t||	|ƒ d S )Nr,  r   r	  r  r  r  r   r8   rÛ   rÙ   r¢  r?  r{  )r   r;   r–  r   rJ   rÚ   rk  r`   rQ   rD   r¬   r  r›  ru   r¸   rÛ   r>  rV  r4  r{  r=  )r~   r¹   r5  r»   rº  r6  r}   r  Zy_pred_2r:  rÙ   r9  r  r€   r€   r�   rÝ   o  s2    




 ÿ
rÝ   c              	   C   sP   t  ddgddgg¡}t  ddg¡}t|ƒ}ttƒ� | ||¡ W 5 Q R X d S )Nrt  r8   r
   )r¬   r›  r   rI   r·   r¸   rÿ  r€   r€   r�   r÷   š  s
    
r÷   c              	      s’  ddddg}t j d¡}t|ƒ‰tˆƒ dˆ ¡  ¡ krDˆjdd� d	}|jd	|d
fd�}t	ˆ|ƒ}t
|ƒrz|j|d�}n|jdd
|d�}tˆ|ƒ}ttd|d� |¡ƒ\}}tˆ|||ƒ\}	}
tˆ||||ƒ\‰ }ˆ |	|
¡ ‡ ‡fdd„|D ƒ}tˆƒ ˆ |	|
¡ |D ]€}tˆ|ƒ�rtˆ|ƒˆ ƒ}t  |jt j¡�rPd
t  |j¡j }nd
t  t j¡j }t|| |t|dƒt|dƒd |¡d� �qd S )NrÛ   rÔ   r{  r}  r   Ú
warm_startF©r£  rC  r
   ©Úlocr¤   r£   r³  rž  rm  c                    s&   i | ]}t ˆ|ƒr|tˆ|ƒˆ ƒ“qS r€   )ru   r  )rû   rŒ  ©r*  r}   r€   r�   rv  Ä  s   
þ z(check_fit_idempotent.<locals>.<dictcomp>rÕ  rÓ  z&Idempotency check failed for method {})rz  Zrtolr«   )r¬   r­   r®   r   rJ   r˜   r™   rV  rl  r„  r   r¶  r²   Únextr'   Úsplitr)   r¸   ru   r  Z
issubdtyper`   Zfloatingr‡  rˆ  r]   rB   Úmaxræ   )r~   r¹   r  rº   r5  r»   r½   ÚtrainÚteströ  rL  rU  r�  rŒ  Z
new_resultZtolr€   r§  r�   rñ   ¤  sF    

þûrñ   c              
   C   s  t j d¡}t|ƒ}t|ƒ d| ¡ kr4|jdd� d}|jd|dfd�}t||ƒ}t	|ƒrj|j|d�}n|j
d	d|d
�}t||ƒ}t|ƒ dd¡sÈzt|ƒ t|jj› d�ƒ‚W n tk
rÆ   Y nX | ||¡ zt|ƒ W n. tk
�r } ztdƒ|‚W 5 d }~X Y nX d S )Nr4  r£  Fr¤  rC  r
   r¥  r£   r   r³  rÇ   z) passes check_is_fitted before being fit!zFEstimator fails to pass `check_is_fitted` even though it has been fit.)r¬   r­   r®   r   rJ   r˜   rV  rl  r„  r   r¶  r²   r>   Úgetr7   rk  ra   rb   r   r¸   )r~   r¹   rº   r}   r5  r»   r½   rú  r€   r€   r�   rò   Þ  s:    

ÿÿþrò   c                 C   sÄ   t j d¡}t|ƒ}t|ƒ d| ¡ kr4|jdd� d}|jd|dfd�}t||ƒ}t	|ƒrj|j|d�}n|j
dd|d	�}t||ƒ}t|d
ƒr’t‚| ||¡ t|d
ƒs¬t‚|j|jd ksÀt‚d S )Nr   r£  Fr¤  rC  r
   r¥  r£   r³  Ún_features_in_r8   )r¬   r­   r®   r   rJ   r˜   rV  rl  r„  r   r¶  r²   ru   rk  r¸   r®  r–  )r~   r¹   rº   r}   r5  r»   r½   r€   r€   r�   ró     s     

ró   c              
      s’   t j d¡}t|ƒ}t|ƒ d}|jd|dfd�}t||ƒ}d}z| |d ¡ W n< tk
rŒ ‰  zt	‡ fdd„|D ƒƒs|ˆ ‚W 5 d ‰ Š X Y nX d S )Nr   rC  r
   r¥  )z1requires y to be passed, but the target y is Nonez<Expected array-like (array or non-string sequence), got Nonezy should be a 1d arrayc                 3   s   | ]}|t ˆ ƒkV  qd S r$  r]  )rû   r  ©Úver€   r�   r'  5  s     z(check_requires_y_none.<locals>.<genexpr>)
r¬   r­   r®   r   rJ   rl  r„  r¸   r·   r+  )r~   r¹   rº   r}   r5  r»   Zexpected_err_msgsr€   r¯  r�   rö     s    
rö   c              
   C   sä  t |ƒ}d|d kpd|d k}|r,|d r0d S tj d¡}t|ƒ}t|ƒ d| ¡ krd|jdd� d	}|j|d
fd�}t	||ƒ}t
|ƒr˜|j|d�}n|jdd|d�}t||ƒ}| ||¡ |j|jd ksÒt‚dddddg}	|d d …dgf }
d|jd › d�}|	D ]V}t||ƒ�s�qt||ƒ}|dk�r<t||d�}tt|d�� ||
ƒ W 5 Q R X �qt|dƒ�spd S t|ƒ}t|ƒ�rš|j||t |¡d� n| ||¡ |j|jd k�s¼t‚tt|d�� | |
|¡ W 5 Q R X d S )Nrà   rá   r•  rU   r   r£  Fr¤  é–   r1  r£   r
   r³  r8   rÛ   rÔ   r{  r}  rë  z'X has 1 features, but \w+ is expecting z features as inputrá  r°  rï  r
  )r>   r¬   r­   r®   r   rJ   r˜   rV  rl  r„  r   r¶  r²   r¸   r®  r–  rk  ru   r  r   rI   r·   r   rï  r  )r~   r¹   r   Úis_supported_X_typesrº   r}   r5  r»   r½   r  ÚX_badr  rŒ  Úcallable_methodr€   r€   r�   Ú!check_n_features_in_after_fitting9  sX    ÿ

û


rµ  c                 C   s`   t |ƒ}t|dƒsd S t| ¡  ¡ ƒ}tt ¡ ƒ}| |¡|ks\t| › d|| |¡ › �ƒ‚d S )NÚ	_get_tagsz@._get_tags() is missing entries for the following default tags: )r   ru   r�  r¶  r™   r=   Úintersectionrk  )r~   r¹   r}   Z	tags_keysZdefault_tags_keysr€   r€   r�   ry   ~  s    
ÿry   c                 C   sŒ  zdd l }W n tk
r(   tdƒ‚Y nX t|ƒ}d|d kpHd|d k}|rV|d rZd S tj d¡}t|ƒ}t|ƒ |j	dd�}t
||ƒ}|j\}}	t d	d
„ t|	ƒD ƒ¡}
|j||
dd�}t|ƒrÔ|j	|d�}n|jdd|d�}t||ƒ}t ¡ �$ tjddtdd� | ||¡ W 5 Q R X t|dƒ�s4tdƒ‚t|jtjƒ�sHt‚|jjtk�sZt‚t|j|
ƒ |j }| !d¡�rªd|k�sª| "d¡�sªd|j#k�rªtd| › d�ƒ‚g }dD ]D}t||ƒ�sÆ�q²t$||ƒ}|dk�ræt%||d�}| &||f¡ �q²|D ]8\}}t ¡ �  tjddtdd� ||ƒ W 5 Q R X �qü|
d d d… dfdd
„ t|	ƒD ƒd f|
d d!… d"t'|
d!d … ƒ› d#�fg}d$d%„ | (¡  )¡ D ƒ}t*d&d'„ | +¡ D ƒƒ}|D ]Ö\}}|j||dd�}t, -d(|› �¡}|D ]2\} }t.t|| › d)�d*�� ||ƒ W 5 Q R X �qÜt|d+ƒ�r°|�r&�q°t|ƒ}t/|ƒ�rTt 0|¡}|j1|||d,� n| 1||¡ t.t|d-�� | 1||¡ W 5 Q R X �q°d S ).Nr   úHpandas is not installed: not checking column name consistency for pandasrà   rá   r•  rU   )r±  r1  r£   c                 S   s   g | ]}d |› �‘qS )Zcol_r€   ©rû   r  r€   r€   r�   rþ   §  s     z<check_dataframe_column_names_consistency.<locals>.<listcomp>F©Úcolumnsrl  r
   r³  Úerrorz#X does not have valid feature namesZsklearn)Úmessager    ÚmoduleÚfeature_names_in_zTEstimator does not have a feature_names_in_ attribute after fitting with a dataframer¥   r¦   r§   r¨   z2 does not document its feature_names_in_ attribute)rÛ   rÔ   r{  r}  rë  rÑ  r|  rë  rá  r   z<Feature names must be in the same order as they were in fit.c                 S   s   g | ]}d |› �‘qS )Zanother_prefix_r€   r¹  r€   r€   r�   rþ   í  s     zHFeature names unseen at fit time:
- another_prefix_0
- another_prefix_1
rP  z3Feature names seen at fit time, yet now missing:
- Ú
c                 S   s   i | ]\}}d |kr||“qS )Zearly_stoppingr€   ru  r€   r€   r�   rv  ø  s   þ z<check_dataframe_column_names_consistency.<locals>.<dictcomp>c                 s   s   | ]}|d kV  qdS )TNr€   )rû   r¼   r€   r€   r�   r'  ý  s     z;check_dataframe_column_names_consistency.<locals>.<genexpr>zBThe feature names should match those that were passed during fit.
z did not raiser©   rï  r
  r°  )2rš  r‚  r?   r>   r¬   r­   r®   r   rJ   rl  r„  r–  r›  r  rœ  r   r¶  r²   rä   r"  ÚfilterwarningsÚUserWarningr¸   ru   r·   rç   r¿  rt  rk  r`   r±  rD   r³   r´   rµ   rc  r  r   r2  rW  r˜   r  r+  rô  r  ÚescaperI   r   r  rï  )r~   r¹   rž  r   r²  rº   r}   ZX_origr5  r6  Únamesr»   r½   r¾   r  rŒ  r´  rº  Úinvalid_namesrX  Zearly_stopping_enabledZinvalid_nameZadditional_messager³  Zexpected_msgr  r€   r€   r�   Ú(check_dataframe_column_names_consistency�  sÈ    ÿ
ÿ



üÿÿþþý
ÿ	


üý
þ÷
þÿ  ÿ

rÆ  c              	   C   s¤  |  ¡ }d|d ks|d r d S tddddgdddggdddd	�\}}tƒ  |¡}t|ƒ}t||ƒ}|jd }t|ƒ |}| tkr¶t	j
t	 |¡t	 |¡f }|d d d…df  d9  < |j||d
�}dd„ t|ƒD ƒ}	ttdd�� | |	d d d… ¡ W 5 Q R X | |	¡}
|
d k	�st‚t|
t	jƒ�s,t‚|
jtk�s<t‚tdd„ |
D ƒƒ�sTt‚t|tƒ�rp|d jd }n
|jd }t|
ƒ|k�s td|› dt|
ƒ› �ƒ‚d S )Nrà   rá   rU   r¢  r   r8   r
   r  rÙ  rá  c                 S   s   g | ]}d |› �‘qS )Úfeaturer€   r¹  r€   r€   r�   rþ   6  s     z;check_transformer_get_feature_names_out.<locals>.<listcomp>z'input_features should have length equalr°  c                 s   s   | ]}t |tƒV  qd S r$  )rç   r  )rû   r~   r€   r€   r�   r'  @  s     z:check_transformer_get_feature_names_out.<locals>.<genexpr>ú	Expected ú feature names, got )r¶  r   r+   r9  r   r„  r–  rJ   rp   r¬   rä  r[  r  rI   r·   rX  rk  rç   rt  r`   r±  r—  rÇ  r  )r~   rç  r   r»   r½   rÒ   r6  rè  ÚX_transformZinput_featuresZfeature_names_outÚn_features_outr€   r€   r�   Ú'check_transformer_get_feature_names_out  sF    û





ÿþrÌ  c              	   C   s°  zdd l }W n tk
r(   tdƒ‚Y nX | ¡ }d|d ksF|d rJd S tddddgdddggddd	d
�\}}tƒ  |¡}t|ƒ}t||ƒ}|j	d }t
|ƒ |}| tkràtjt |¡t |¡f }|d d d…df  d9  < dd„ t|ƒD ƒ}	|j||	dd�}
|j|
|d�}dd„ t|ƒD ƒ}ttdd�� | |¡ W 5 Q R X | ¡ }| |	¡}t||ƒ t|tƒ�r||d j	d }n
|j	d }t|ƒ|k�s¬td|› dt|ƒ› �ƒ‚d S )Nr   r¸  rà   rá   rU   r¢  r8   r
   r  rÙ  c                 S   s   g | ]}d |› �‘qS ©ro  r€   r¹  r€   r€   r�   rþ   l  s     zBcheck_transformer_get_feature_names_out_pandas.<locals>.<listcomp>Frº  rá  c                 S   s   g | ]}d |› �‘qS )Úbadr€   r¹  r€   r€   r�   rþ   q  s     z0input_features is not equal to feature_names_in_r°  rÈ  rÉ  )rš  r‚  r?   r¶  r   r+   r9  r   r„  r–  rJ   rp   r¬   rä  r[  r  rœ  rI   r·   rX  rD   rç   rÇ  r  rk  )r~   rç  rž  r   r»   r½   rÒ   r6  rè  Úfeature_names_inÚdfrÊ  Zinvalid_feature_namesZfeature_names_out_defaultZfeature_names_in_explicit_namesrË  r€   r€   r�   Ú.check_transformer_get_feature_names_out_pandasL  sV    ÿ
û


ÿ


ÿþrÑ  c                 C   s„  t j d¡}|jdd�}|jdddd�}t||ƒ}|jdd� ¡ }|r–|j ¡ }t	|ƒt	|ƒ }t	|ƒt	|ƒ }d| › d	|› d
|› �}	||ks–t
|	ƒ‚tddi ƒƒ }
ddddg}|D �]È}|j| }|dkrÎq´tdd„ |D ƒƒ�rtdd„ |D ƒƒ�rtd|› d| › d�ƒ‚d|› d| › d�}| › d|› d�}	t|ƒ}|jf ||
iŽ |D ]l}t||ƒ�s^�qJtt||	d��B tdd„ t|dd �D ƒƒ�ršt||ƒ|ƒ nt||ƒ||ƒ W 5 Q R X �qJd!d"„ |D ƒ}|D ]²}zt|ƒ}W n tk
�rö   Y �qÊY nX |jf ||iŽ |D ]l}t||ƒ�s �qtt||	d��B td#d„ t|dd �D ƒƒ�r\t||ƒ|ƒ nt||ƒ||ƒ W 5 Q R X �q�qÊq´d S )$Nr   rß  r£   r
   r3  Fr™  z>Mismatch between _parameter_constraints and the parameters of z%.
Consider the unexpected parameters z% and expected but missing parameters ZBadTyper€   r¸   rï  r9  rÚ   rU   c                 s   s"   | ]}t |tƒo|jtkV  qd S r$  )rç   r<   r%  r   ©rû   rH  r€   r€   r�   r'  ¨  s   ÿz)check_param_validation.<locals>.<genexpr>c                 s   s"   | ]}t |tƒo|jtkV  qd S r$  )rç   r<   r%  r   rÒ  r€   r€   r�   r'  «  s   ÿzThe constraint for parameter z of zc can't have a mix of intervals of Integral and Real types. Use the type RealNotInt instead of Real.zThe 'z' parameter of z must be .* Got .* instead.z@ does not raise an informative error message when the parameter z% does not have a valid type or value.r©   c                 s   s"   | ]}t |tƒo| d ¡V  qdS ©r%  N)rç   r  rµ   ©rû   ZX_typer€   r€   r�   r'  Æ  s   ÿrá   rÈ   c                 S   s   g | ]}t |ƒ‘qS r€   )r4   rÒ  r€   r€   r�   rþ   Ò  s     z*check_param_validation.<locals>.<listcomp>c                 s   s   | ]}|  d ¡V  qdS rÓ  )rµ   rÔ  r€   r€   r�   r'  â  s   ÿ)r¬   r­   r®   r“  r¶  r²   r˜   r™   rA  r�  rk  r%  r+  r·   r   rV  ru   rI   r2   r>   r  r3   r  )r~   r¹   rº   r»   r½   Zestimator_paramsZvalidation_paramsZunexpected_paramsZmissing_paramsr«   Zparam_with_bad_typeZfit_methodsr{  Úconstraintsrª   r}   rŒ  rH  Z	bad_valuer€   r€   r�   Úcheck_param_validation…  st    

ÿ

þ
þýÿÿ
þ

þ
rÖ  c                    s  |  ¡ }d|d ks|d r d S tj d¡}t|ƒ}|jdd�‰ t|ˆ ƒ‰ |jdddd�‰t|ˆƒ‰t	|ƒ ‡ ‡‡fd	d
„}‡ ‡fdd„}||dœ}| 
¡ D ]b\‰}t|ƒ}t|ˆƒs¸qœ||ƒ}	ˆtkrÐ|	d }	|jdd� ||ƒ}
ˆtkrô|
d }
t|	|
ƒ qœd S )Nrà   rá   rU   r   rß  r£   r
   r3  c                    s.   ˆt kr|  ˆ ˆ¡ ˆ ˆ¡S |  ˆ ˆ¡ ˆ ¡S r$  )rp   r¸   rÔ   ©r&  ©r»   r~   r½   r€   r�   Úfit_then_transformü  s    z6check_set_output_transform.<locals>.fit_then_transformc                    s   |   ˆ ˆ¡S r$  )r9  r×  r:  r€   r�   r9    s    z1check_set_output_transform.<locals>.fit_transform)rÔ   r9  r�  ©rÔ   )r¶  r¬   r­   r®   r   r“  r„  r¶  r²   rJ   r  ru   rp   Ú
set_outputrB   )r~   rç  r   rº   rÒ   rÙ  r9  Ztransform_methodsZtransform_methodZX_trans_no_settingZX_trans_defaultr€   rØ  r�   Úcheck_set_output_transformì  s6    

þ
rÜ  c                    sð   i }d||fd||fd||fd||fg}t ‡ fdd„dD ƒƒrŽ|D ]J\}}}	ˆ  ||¡ |tkrrˆ  |	|¡\}
}n
ˆ  |	¡}
|
ˆ  ¡ f||< qBd|fd	|fg}tˆ d
ƒrì|D ]>\}}|tkrÎˆ  ||¡\}
}nˆ  ||¡}
|
ˆ  ¡ f||< q¬|S )zúGenerate output to test `set_output` for different configuration:

    - calling either `fit.transform` or `fit_transform`;
    - passing either a dataframe or a numpy array to fit;
    - passing either a dataframe or a numpy array to transform.
    zfit.transform/df/dfzfit.transform/df/arrayzfit.transform/array/dfzfit.transform/array/arrayc                 3   s   | ]}t ˆ |ƒV  qd S r$  )ru   )rû   Úmeth©rÒ   r€   r�   r'  ,  s     z-_output_from_fit_transform.<locals>.<genexpr>)r¸   rÔ   zfit_transform/dfzfit_transform/arrayr9  )r—  r¸   rp   rÔ   rX  ru   r9  )rÒ   r~   r»   rÐ  r½   ÚoutputsZcasesÚcaseZdata_fitZdata_transformrà  rº  r\  r€   rÞ  r�   Ú_output_from_fit_transform  s6    üü
þ
rá  c              
   C   s    dd l }|\}}|\}}	t||jƒs(t‚| d¡r6|nd }
|j||	d|
d�}z|j ||¡ W n< tk
rš } zt| › d|› d|› �ƒ|‚W 5 d }~X Y nX d S )Nr   rÐ  F©r»  rl  Úindexz, does not generate a valid dataframe in the z] case. The generated dataframe is not equal to the expected dataframe. The error message is: )rš  rç   rœ  rk  rµ   ZtestingZassert_frame_equal)r~   rà  rã  Úoutputs_defaultÚoutputs_pandasrž  rà  Zfeature_names_defaultZdf_transZfeature_names_pandasZexpected_indexZexpected_dataframerú  r€   r€   r�   Ú_check_generated_dataframeI  s&       ÿÿüræ  c              
   C   s†  zdd l }W n tk
r(   tdƒ‚Y nX | ¡ }d|d ksF|d rJd S tj d¡}t|ƒ}|jdd�}t	||ƒ}|j
ddd	d�}t||ƒ}t|ƒ d
d„ t|jd ƒD ƒ}dd„ t|jd ƒD ƒ}	|j||d|	d�}
t|ƒjdd�}t|| ||
|ƒ}t|ƒjdd�}zt|| ||
|ƒ}W n@ tk
�r\ } z dt|ƒk�sFt|ƒ‚W Y ¢d S d }~X Y nX |D ]}t| ||	|| || ƒ �qbd S )Nr   r¸  rà   rá   rU   rß  r£   r
   r3  c                 S   s   g | ]}d |› �‘qS rÍ  r€   r¹  r€   r€   r�   rþ   z  s     z5check_set_output_transform_pandas.<locals>.<listcomp>r8   c                 S   s   g | ]}d |› �‘qS ©rã  r€   r¹  r€   r€   r�   rþ   {  s     Frâ  r�  rÚ  rš  ú+Pandas output does not support sparse data.)rš  r‚  r?   r¶  r¬   r­   r®   r   r“  r„  r¶  r²   rJ   r  r–  rœ  rÛ  rá  r·   r  rk  ræ  ©r~   rç  rž  r   rº   rÒ   r»   r½   rÏ  rã  rÐ  Ztransformer_defaulträ  Ztransformer_pandasrå  rú  rà  r€   r€   r�   Ú!check_set_output_transform_pandasd  sF    ÿ


    ÿrê  c              
   C   s”  zddl }W n tk
r(   tdƒ‚Y nX | ¡ }d|d ksF|d rJdS tj d¡}t|ƒ}|jdd�}t	||ƒ}|j
dd	d
d�}t||ƒ}t|ƒ dd„ t|jd ƒD ƒ}dd„ t|jd ƒD ƒ}	|j||d|	d�}
t|ƒjdd�}t|| ||
|ƒ}t|ƒ}z*tdd�� t|| ||
|ƒ}W 5 Q R X W n@ tk
�rj } z dt|ƒk�sTt|ƒ‚W Y ¢dS d}~X Y nX |D ]}t| ||	|| || ƒ �qpdS )z`Check that setting globally the output of a transformer to pandas lead to the
    right results.r   Nr¸  rà   rá   rU   rß  r£   r
   r3  c                 S   s   g | ]}d |› �‘qS rÍ  r€   r¹  r€   r€   r�   rþ   ¥  s     z8check_global_output_transform_pandas.<locals>.<listcomp>r8   c                 S   s   g | ]}d |› �‘qS rç  r€   r¹  r€   r€   r�   rþ   ¦  s     Frâ  r�  rÚ  rš  )Ztransform_outputrè  )rš  r‚  r?   r¶  r¬   r­   r®   r   r“  r„  r¶  r²   rJ   r  r–  rœ  rÛ  rá  r   r·   r  rk  ræ  ré  r€   r€   r�   Ú$check_global_output_transform_pandasŽ  sT    ÿ


    ÿ    ÿrë  )NF)rP   )F)F)F)Fr]   )T)F)âr~  rz   r  r  rä   rl  r   Ú	functoolsr   r   Úinspectr   Únumbersr   r   rx  Únumpyr¬   Zscipyr   Zscipy.statsr	   rÿ   r   Úbaser   r   r   r   r   r   Zdatasetsr   r   r   r   r   Ú
exceptionsr   r   r   Zfeature_selectionr   r   Zlinear_modelr   r   r   r   r    Zmetricsr!   r"   r#   Zmetrics.pairwiser$   r%   r&   Zmodel_selectionr'   r(   Zmodel_selection._validationr)   rì  r*   Zpreprocessingr+   r,   Zrandom_projectionr-   Zutils._array_apir.   r/   r1   r†  Zutils._param_validationr2   r3   r4   Zutils.fixesr5   r6   Zutils.validationr7   r9   r:   r;   Z_param_validationr<   Z_tagsr=   r>   r§   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Z
validationrK   rL   r8  rp   r‚   rž   r•  r•   rÅ   rÓ   rØ   rß   rù   r	  r  r  r#  r  r-  r0  r;  rY  rZ  rf  rr  r|   rw   rf   rg   rh   ri   rk   rj   rÂ  rn   rm   rï   r¼  rð   rõ   rÏ  rê   ré   rë   rì   rô   rÍ   rÌ   rÏ   rÐ   rÜ  rq   re   rd   rÎ   ro   rr   rs   rx   r�   rŽ   rÁ   rÖ   rÕ   rŠ   r‹   r�   r=  rÞ   rÜ   r‘   r’   r“   r”   rY  rl   r—   r–   rb  re  rŒ   rÃ   r]   r¿   rÂ   rš   rs  rw  rt   rc   rv   r‰   rÀ   r‡  rè   r²   r„  r›   rÑ   rí   rî   r�   rœ   rÝ   r÷   rñ   rò   ró   rö   rµ  ry   rÆ  rÌ  rÑ  rÖ  rÜ  rá  ræ  rê  rë  r€   r€   r€   r�   Ú<module>   s¸   8D$
"9&,>J{" ÿi6
+


$D(
$
'
:

$
+
(




[
 

 

0
5

<
;


$  ÿ H
(
,
S
-


#
@
"
 ÿ2

,

(
!
%
"


.i
*



8

,+
:'
D 0
9g0-*