U
    ½mœdÇ] ã                   @   sæ  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 d dlZd dlmZ d dlm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 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% d
dl&m'Z' d
dl&m(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/m0Z0m1Z1m2Z2 d
d l3m4Z4m5Z5m6Z6 d
d!l7m8Z8 d
d"l9m:Z: d
d#l9m;Z; d
d$l<m=Z= d
d%l>m?Z? d
d&l>m@Z@ d
d'l>mAZA d
d(lBmCZC d
d)lBmDZD d
d*lEmFZF d
d+lGmHZHmIZImJZJ d
d,lKmLZL d
d-lKmMZM d
d.lNmOZO d
d/lPmQZQ d
d0lPmRZR d
d1lPmSZS dd2lmTZT dd3lUmVZVmWZW dd4lXmYZYmZZZ d
d5l[m\Z\ d
d6l[m]Z] d
d7l^m_Z_m`Z`maZambZb dacd8d9d:d;gZdd<d=„ Zed>d?„ Zfe"egd@�dAdB„ ƒZhdCdD„ ZidEdF„ ZjdGdH„ ZkdIdJ„ ZldKdL„ ZmdMdN„ ZndOdP„ ZodQdR„ ZpdSdT„ ZqdUdV„ ZrdWdX„ Zs�d d[d\„Ztd]d^„ Zud_d`„ ZvG dadb„ dbƒZwdcdd„ Zxdedf„ Zydgdh„ Zze"egd@�didj„ ƒZ{e"egd@�dkdl„ ƒZ|e"egd@�dmdn„ ƒZ}e"egd@�dodp„ ƒZ~e"egd@��d!drds„ƒZdtdu„ Z€e"ege�fd@�dvdw„ ƒZ‚dxdy„ Zƒe"dzd{„ ƒZ„d|d}„ Z…e"egd@�d~d„ ƒZ†e"egd@�d€d�„ ƒZ‡d‚dƒ„ Zˆe"egd@�d„d…„ ƒZ‰e"egd@�d†d‡„ ƒZŠe"dˆd‰„ ƒZ‹e"dŠd‹„ ƒZŒe"dŒd�„ ƒZ�e"egd@��d"dŽd�„ƒZŽe"egd@�d�d‘„ ƒZ�e"egd@�d’d“„ ƒZ�d”d•„ Z‘e"d–d—„ ƒZ’e"d˜d™„ ƒZ“e"dšd›„ ƒZ”dœd�„ Z•e"egd@�dždŸ„ ƒZ–e"egd@�d d¡„ ƒZ—e"d¢d£„ ƒZ˜e"d¤d¥„ ƒZ™e"egd@�d¦d§„ ƒZše"egd@�d¨d©„ ƒZ›e"egd@�dªd«„ ƒZœe"egd@��d#d¬d­„ƒZ�e"egd@�d®d¯„ ƒZže"egd@�d°d±„ ƒZŸe"egd@�d²d³„ ƒZ e"�d$dµd¶„ƒZ¡d·d¸„ Z¢�d%dºd»„Z£d¼d½„ Z¤e"egd@�d¾d¿„ ƒZ¥e"egd@�dÀdÁ„ ƒZ¦e"egd@�dÂdÃ„ ƒZ§e"egd@�dÄdÅ„ ƒZ¨e"egd@�dÆdÇ„ ƒZ©e"egd@��d&dÈdÉ„ƒZªe"dÊdË„ ƒZ«e"egd@�dÌdÍ„ ƒZ¬e"dÎdÏ„ ƒZ­dÐdÑ„ Z®dÒdÓ„ Z¯e"egd@�dÔdÕ„ ƒZ°e"egd@�dYej±fdÖd×„ƒZ²e"dØdÙ„ ƒZ³e"egd@�dÚdÛ„ ƒZ´e"egd@�dÜdÝ„ ƒZµe"egd@�dÞdß„ ƒZ¶e"egd@�dàdá„ ƒZ·e"egd@�dâdã„ ƒZ¸e"egd@�dädå„ ƒZ¹e"egd@�dædç„ ƒZºe"egd@�dèdé„ ƒZ»e"egd@�dêdë„ ƒZ¼dìdí„ Z½dîdï„ Z¾eIfdðdñ„Z¿e"egd@�dòdó„ ƒZÀe"egd@�dôdõ„ ƒZÁe"egd@�död÷„ ƒZÂe"egd@�dødù„ ƒZÃe"egd@�dúdû„ ƒZÄe"egd@�düdý„ ƒZÅdþdÿ„ ZÆ�d �d„ ZÇ�d�d„ ZÈ�d�d„ ZÉ�d�d„ ZÊ�d�d	„ ZËe"egd@��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)ÚReal)Úsparse)Úrankdataé   )ÚIS_PYPYé   )Úconfig_context)ÚInterval©Ú	_get_args)Úassert_raise_message)Úassert_array_equal)Úassert_array_almost_equal)Úassert_allclose)Úassert_allclose_dense_sparse)Úassert_array_less)Úset_random_state)ÚSkipTest)Úignore_warnings)Úcreate_memmap_backed_data)Úraises)Úis_scalar_nan)ÚLinearRegression)ÚLogisticRegression©ÚRANSACRegressor)ÚRidge)ÚSGDRegressor)ÚcloneÚClusterMixinÚis_classifierÚis_regressorÚis_outlier_detectorÚRegressorMixin)Úaccuracy_scoreÚadjusted_rand_scoreÚf1_score)ÚBaseRandomProjection)ÚSelectKBest)ÚSelectFromModel)Úmake_pipeline)ÚDataConversionWarning)ÚNotFittedError)ÚSkipTestWarning)Útrain_test_split)ÚShuffleSplit)Ú_safe_split)Ú
rbf_kernelÚlinear_kernelÚpairwise_distances)Ú
sp_version)Úparse_version)Úcheck_is_fitted©Úmake_constraint)Úgenerate_invalid_param_val)ÚInvalidParameterError)Úshuffle)Ú_DEFAULT_TAGSÚ
_safe_tags)Úhas_fit_parameterÚ_num_samples)ÚStandardScaler)Úscale)Ú	load_irisÚ
make_blobsÚmake_multilabel_classificationÚmake_regressionZPLSCanonicalZPLSRegressionÚCCAZPLSSVDc                 c   sú   | 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V  d S )NÚsample_weightÚpairwiseÚones)ÚkindÚzerosT©Úreadonly_memmapÚno_validationÚ	allow_nanÚsparsify)Ú	__class__Ú__name__rA   Úcheck_no_attributes_set_in_initÚcheck_estimators_dtypesÚcheck_fit_score_takes_yrB   Ú"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)Ú	estimatorÚnameÚtags© rq   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/utils/estimator_checks.pyÚ_yield_checksT   s@    

rs   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ÚmultioutputTrP   Úfloat32©rQ   ÚX_dtypeZ
multilabelrR   Úmultioutput_onlyÚrequires_fitÚclass_weight)rA   Ú"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)Ú
classifierrp   rq   rq   rr   Ú_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Úisinfr   Ú
ValueErrorÚfit)
ro   Úestimator_origrn   ÚrngÚXÚvalueÚyÚmodule_namerœ   r�   rq   rq   rr   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 )
NTrP   ru   rv   rt   rR   rx   rJ   ry   )rA   Úcheck_regressors_trainr   Ú!check_regressor_data_not_an_arrayr   Úcheck_regressor_multioutputÚ%check_regressors_no_decision_functionrˆ   r‡   rU   rV   Úcheck_regressors_intr‰   r�   )Ú	regressorrp   ro   rq   rq   rr   Ú_yield_regressor_checksÏ   s$    r·   c                 c   st   t | ƒ}|d stV  tV  |d r*tV  ttdd�V  t | dd�sJtV  ddd	d
ddg}| jj}||krptV  d S )NrR   Úpreserves_dtypeTrP   Ú	stateless©ÚkeyZIsomapZ	KernelPCAZLocallyLinearEmbeddingÚRandomizedLassoÚLogisticRegressionCVZBisectingKMeans)	rA   Ú#check_transformer_data_not_an_arrayÚcheck_transformer_generalÚ!check_transformer_preserve_dtypesr   Úcheck_transformers_unfittedrU   rV   Úcheck_transformer_n_iter)Útransformerrp   Zexternal_solverro   rq   rq   rr   Ú_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FeatureAgglomerationTrP   Ú	transform)Ú&check_clusterer_compute_labels_predictrU   rV   Úcheck_clusteringr   r   ri   r�   )Ú	clustererro   rq   rq   rr   Ú_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ÚpredictTrP   ry   rº   )	ri   Úcheck_outlier_contaminationÚcheck_outliers_fit_predictÚcheck_outliers_trainr   r{   rA   r‰   r�   )rn   rq   rq   rr   Ú_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_deterministicrR   Z
requires_yÚrequires_positive_X)#rU   rV   rA   ÚwarningsÚwarnÚformatr1   rs   r$   r�   r%   r·   ri   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)rn   ro   rp   Úcheckrq   rq   rr   Ú_yield_all_checks(  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Úvrq   rq   rr   Ú
<listcomp>€  s     z,_get_check_estimator_ids.<locals>.<listcomp>z{}({})rŠ   T)Zprint_changed_onlyz\sÚ N)ÚcallablerØ   r   rV   ÚkeywordsÚfuncÚjoinÚitemsr×   ri   r   ÚreÚsubÚstr)ÚobjZkwstringrq   rq   rr   Ú_get_check_estimator_idsa  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_parametersrn   Zbase_estimatorr   ©Úrandom_stater	   )ÚCÚ
estimatorsZest1çš™™™™™¹?©ÚalphaZest2)rÿ   zCan't instantiate estimator z parameters )ÚgetattrÚlenÚ
issubclassr   r   r'   r    r-   r!   r   rV   rÕ   rÖ   r1   r   )Ú	EstimatorZrequired_parametersrn   Úmsgrq   rq   rr   Ú_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)rn   ré   ÚpytestZshould_be_markedr	  rq   rq   rr   Ú_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   rU   rV   )ÚargsÚkwargs©Ú
check_namern   r	  rq   rr   ÚwrappedÌ  s    ÿz_maybe_skip.<locals>.wrapped)r
  rØ   r   ró   rV   r   )rn   ré   Zshould_be_skippedr  rq   r  rr   Ú_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ó   rV   rA   )rn   ré   r  Zxfail_checksrq   rq   rr   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ì   Úestrq   rq   rr   Ú	<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  rV   rê   r   r  )rn   ro   ré   ©rÿ   r  rq   rr   Úchecks_generator  s
    

z1parametrize_with_checks.<locals>.checks_generatorzestimator, check)Zids)r  ÚanyÚ	TypeErrorr  Zparametrizerú   )rÿ   r  r  rq   r  rr   Úparametrize_with_checkså  s    (ÿ  ÿr  FÚ
deprecatedc                    sÄ   ˆ dkr|dkrd}t |ƒ‚|dkr8d}t |t¡ |‰ tˆ tƒrNd}t|ƒ‚tˆ ƒj‰‡ ‡fdd„}|rp|ƒ S |ƒ D ]H\‰ }z|ˆ ƒ W qv tk
r¼ } zt t	|ƒt
¡ W 5 d}~X Y qvX qvd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.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

    Estimator : estimator object
        Estimator instance to check.

        .. deprecated:: 1.1
            ``Estimator`` was deprecated in favor of ``estimator`` in version 1.1
            and will be removed in version 1.3.

    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.
    Nr  zBEither estimator or Estimator should be passed to check_estimator.ze'Estimator' was deprecated in favor of 'estimator' in version 1.1 and will be removed in version 1.3.r  c                  3   s,   t ˆ ƒD ]} tˆ | ƒ} ˆ t| ˆƒfV  qd S r  )rê   r  r   )ré   ©rn   ro   rq   rr   r  o  s    
z)check_estimator.<locals>.checks_generator)r©   rÕ   rÖ   ÚFutureWarningrØ   r  r  rV   r   rø   r1   )rn   Zgenerate_onlyr  r  r  ré   Ú	exceptionrq   r   rr   Úcheck_estimator#  s*    7ÿ
ÿ
r#  c                  C   s8   t d kr4tddddddd�\} }tƒ  | ¡} | |fa t S )NéÈ   r“   r	   ç      @é   é*   )Ú	n_samplesÚ
n_featuresZn_informativeZbiasÚnoiserý   )ÚREGRESSION_DATASETrI   rD   Úfit_transform©r­   r¯   rq   rq   rr   Ú_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� | 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�r.| jdd� d|k�rP| d¡�sP| jdd� |dk�rf| jd d!� |d"k�rvd#| _|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#d-� |d.k�r$| jdd/� |d0k�r:| jd1d2� d3d4g}||k�rdt	| d5ƒ�rd| jd6d7� t	| d8ƒ�r|| jd6d9� |d:k�r’| jd;d<� |d=k�r¾ttd>ƒk�r®d?nd@}| j|dA� |tk�rÔ| jd#d,� |dBk�rê| jdCdD� d S )ENÚTSNEr   ©Z
perplexityÚn_iterr”   ©r1  Úmax_iter©r3  )Z	LinearSVRÚ	LinearSVCr&  ZNMFiô  ZMiniBatchNMFT)r3  Zfresh_restarts)ZMLPClassifierZMLPRegressoréd   ZMiniBatchDictionaryLearningÚn_resampling)r7  Ún_estimators)r8  Ú
max_trialsr“   )r9  Ún_init)r:  Ú
batch_sizeZMLP)r;  Z	MeanShiftç      ð?)Ú	bandwidthZTruncatedSVDr	   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é   ©rB  Ún_splits)rE  ZOneHotEncoderÚignore)Zhandle_unknownZQuantileRegressorz1.6.0Zhighszinterior-point)ÚsolverZSpectralEmbeddinggñhãˆµøä>)Z	eigen_tol)rŠ   rU   rV   Ú
set_paramsr3  Úminr8  r¦   rA  ri   r>  r?  Zmax_subpopulationrØ   r+   r,   r8   r9   rd   )rn   Úparamsro   Zloo_cvrG  rq   rq   rr   Ú_set_checking_parameters�  s‚    














rK  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)ÚselfrN  rq   rq   rr   Ú__init__  s    z_NotAnArray.__init__Nc                 C   s   | j S r  )rN  )rO  Údtyperq   rq   rr   Ú	__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 {}!)rV   r  r×   )rO  ró   Útypesr  r  rq   rq   rr   Ú__array_function__  s    
z_NotAnArray.__array_function__)N)rV   r¥   Ú__qualname__Ú__doc__rP  rR  rT  rq   rq   rq   rr   rL    s   
rL  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)rn   rW  rq   rq   rr   Ú_is_pairwise_metric  s    rY  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Úcoor\  Úint64Zcoo_64)r[  rZ  Z_64N)	r×   ÚAssertionErrorÚcopyZasformatÚrowÚastypeÚcolÚindicesZindptr)ÚX_csrZsparse_formatZX_coor­   rq   rq   rr   Ú_generate_sparse_matrix,  s    


re  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   )é(   rC  r•   gš™™™™™é?é   rf  r‘   )ZScalerrD   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Ì   rx   r	   Úpredict_probaÚbinary_onlyr   )rž   rŸ   r    ÚuniformÚ_enforce_estimator_tags_Xr   Z
csr_matrixra  Úintr   r!  r"   r¤   rA   re  rH  r   r  r©   rª   ri   rÌ   Úshaper^  rj  )ro   r«   r¬   r­   rd  r¯   rn   rp   Zmatrix_formatr�   ÚpredZprobsZexpected_probs_shaperq   rq   rr   rk   M  sN    


ÿ
ÿü



rk   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¡}| t||ƒ¡}| ddddddddddddg¡}| dgd ¡}t|dd�r¼| |¡}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   r	   r   rC  rg  é   rx   rº   ©rK   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Ú	DataFramerm  ÚSeriesrA   rª   r©   r×   ÚImportErrorr   )ro   r«   rn   Úpdr­   r¯   Úweightsrq   rq   rr   rZ   ƒ  sF    ôÿ"
þÿÿrZ   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 )
Nr	   r   rC  rg  rq  rx   rº   éÿÿÿÿrr  )	r"   rž   rt  rL  rm  rA   rN  Úreshaperª   )ro   r«   rn   r­   r¯   ry  rq   rq   rr   r[   ¯  s,    ôÿ r[   c                 C   sd   t |ƒ}tj d¡}d}t||j|dfd�ƒ}t |¡d }t||ƒ}dg| }|j|||d� d S )Nr   é   rC  r•   rr  )	r"   rž   rŸ   r    rm  rl  Úaranger¤   rª   )ro   r«   rn   Úrndr(  r­   r¯   rK   rq   rq   rr   r\   Ì  s    

r\   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 )Nr	   rC  r   rg  rr  )	r"   rž   rt  r¤   rª   rM   r  r   r©   )ro   r«   rn   r­   r¯   rq   rq   rr   r]   Û  s6    ðÿ*

(
r]   rM   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ü   r	   rC  r   rg  ©rQ  rM   )ro  zFor z; sample_weight=None is not equivalent to sample_weight=onesrO   z?, a zero sample_weight is not equivalent to removing the sample)r¯   rK   )rÌ   rj  Údecision_functionrÅ   ©r�   )r"   r   rž   rt  Úfloat64rn  rM   r  ÚvstackZhstackr?   r©   r¤   rª   ri   r  r   )ro   r«   rN   Z
estimator1Z
estimator2ZX1Úy1ZX2Úy2Zsw2r�   ÚmethodÚX_pred1ÚX_pred2rq   rq   rr   r_      sb    ðí.
ÿ

ÿ

r_   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ü   r	   rC  r   rg  r  g      $@rr  z8 overwrote the original `sample_weight` given during fitr�  )r"   r   rž   rt  r‚  rn  r¤   rM   ro  r_  rª   r   )ro   r«   rn   r­   r¯   Zsample_weight_originalZsample_weight_fitr�   rq   rq   rr   r^   E  s<    ðí.

r^   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   )rf  r“   r•   rg  rÌ   rÅ   zUnknown label typeT©rœ   ri  ÚstringrÒ   ZfooÚbar©r   r   z"argument must be a string.* number©rœ   )rž   rŸ   r    rm  rl  ra  ÚobjectrA   rn  r"   r¤   rª   ri   rÌ   rÅ   r   Ú	Exceptionr  )ro   r«   r¬   r­   rp   r¯   rn   r  rq   rq   rr   rb   m  s(    





rb   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 )Nr'  r“   r•   y              ð?rz  r	   r   r   ©ÚlowÚhighr–   rü   zComplex data not supportedr�  )rž   rŸ   r    rl  r{  Úrandintr"   r   r   r©   rª   )ro   r«   r¬   r­   r¯   rn   rq   rq   rr   ra   �  s    ra   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   rC  ©r&  rC  r•   r   rA  r	   r>  r?  ©rÌ   rÅ   r€  rj  z$Estimator changes __dict__ during %s)rž   rŸ   r    rl  rm  ra  rn  r"   r¤   ri   rA  r>  r?  r   rª   Ú__dict__r_  r  r^  )ro   r«   r~  r­   r¯   rn   r†  Zdict_beforerq   rq   rr   rà   �  s2    







ÿrà   c                 C   s   |   d¡p|  d¡ S )NÚ_)r¦   r§   )Úattrrq   rq   rr   Ú_is_public_parameterÅ  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   rC  r”  r•   rA  r	   r>  c                 S   s   g | ]}t |ƒr|‘qS rq   )r™  ©rì   r»   rq   rq   rr   rï   á  s     z3check_dont_overwrite_parameters.<locals>.<listcomp>c                    s   g | ]}|ˆ   ¡ kr|‘qS rq   )r‹   r›  )Údict_before_fitrq   rr   rï   å  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 rq   rq   r›  ©Zdict_after_fitrœ  rq   rr   rï   ô  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)ri   rP  r"   rž   rŸ   r    rl  rm  ra  rn  r¤   rA  r>  r   r–  r_  rª   r‹   r^  rô   )	ro   r«   rn   r~  r­   r¯   Zpublic_keys_after_fitZattrs_added_by_fitZattrs_changed_by_fitrq   rž  rr   rá   É  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   rC  r”  r•   rA  r	   r>  r•  zReshape your data)rž   rŸ   r    rl  rm  ra  rn  r"   r¤   ri   rA  r>  r   rª   r   r©   r  )ro   r«   r~  r­   r¯   rn   r†  rq   rq   rr   ræ     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 )Nr	   c                    s   g | ]}ˆ |  d ˆ¡ƒ‘qS )r	   )r{  )rì   Úbatch©ró   r)  rq   rr   rï   !  s     z%_apply_on_subsets.<locals>.<listcomp>r   c                 S   s   | d S )Nr   rq   )Úxrq   rq   rr   Ú<lambda>&  ó    z#_apply_on_subsets.<locals>.<lambda>c                 S   s   g | ]
}|j ‘qS rq   )ÚA)rì   r¡  rq   rq   rr   rï   *  s     )
ro  r  ÚtupleÚlistÚmapr   Úissparser¤  rž   Úravel)ró   r­   Úresult_fullÚresult_by_batchrq   r   rr   Ú_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   rC  r”  r•   rA  r	   r>  ©rÌ   rÅ   r€  Úscore_samplesrj  z={method} of {name} is not invariant when applied to a subset.©r†  ro   çH¯¼šò×z>©Úatolr�   )rž   rŸ   r    rl  rm  ra  rn  r"   r¤   ri   rA  r>  r   rª   r×   r¬  r  r   )
ro   r«   r~  r­   r¯   rn   r†  r  rª  r«  rq   rq   rr   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   rC  r”  r•   rk  rº   r	   r   rA  r>  r­  zY{method} of {name} is not invariant when applied to a datasetwith different sample order.r¯  ç•Ö&è.>r±  )rž   rŸ   r    rl  rm  ra  r]  rA   r"   r¤   ri   rA  r>  r   rª   Zpermutationro  r×   r   r  )	ro   r«   r~  r­   r¯   rn   Úidxr†  r  rq   rq   rr   rÚ   U  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   rC  )r	   r“   r•   rA  r	   r>  ZOPTICS)Zmin_samplesr/  r@  r0  z1 samplezn_samples = 1zn_samples=1z
one samplez1 classz	one classTr‰  )rž   rŸ   r    rl  rm  ra  rn  r"   r¤   ri   rA  r>  r   rH  r   r©   rª   ©ro   r«   r~  r­   r¯   rn   Zmsgsrq   rq   rr   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   rC  )r“   r	   r•   rA  r	   r>  ZRandomizedLogisticRegressionr   r@  z1 feature\(s\)zn_features = 1zn_features=1Tr‰  )rž   rŸ   r    rl  rm  ra  rn  r"   r¤   ri   rA  r>  Zsample_fractionZresidual_thresholdr   r   r©   rª   rµ  rq   rq   rr   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   rC  r&  r•   rA  r	   r>  )rž   rŸ   r    rl  ra  rn  r"   r¤   ri   rA  r>  r   r   r©   rª   )ro   r«   r~  r­   r¯   rn   rq   rq   rr   rå   É  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   r	   r   r   ©r(  Úcentersrý   r)  Úcluster_std)rG   rD   r,  rm  r   Ú_check_transformer)ro   rÃ   rQ   r­   r¯   rq   rq   rr   r¿   Ü  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¶  )	rG   rD   r,  rm  rL  rž   rM  rº  Útolist)ro   rÃ   r­   r¯   Zthis_XZthis_yrq   rq   rr   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"   r   ÚAttributeErrorr©   rÅ   )ro   rÃ   r­   r¯   rq   rq   rr   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   r	   ©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 %s)r�   r²  ro  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�  rz  )rž   rM  ro  r"   r   rd   Úc_rØ   rL  rª   r,  r¥  r^  ri   rÅ   rA   r   Úzipr   rC   Úndimr   r©   )ro   Útransformer_origr­   r¯   r(  r)  rÃ   Úy_Ztransformer_cloneZX_predZx_predrˆ  ZX_pred3r  Zx_pred2Zx_pred3rq   rq   rr   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   r	   r   r   r·  ©ÚkernelÚscorer,  )rA   r   rG   rm  r5   r"   r¤   r   r.   rª   r  r   )ro   r«   r  r­   r¯   rn   ÚpipelineÚfuncsÚ	func_nameró   Zfunc_pipelineÚresultZresult_piperq   rq   rr   re   m  s2    û




re   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|  rC  r•   rª   rÇ  Úpartial_fitrË   r,  c                 S   s   g | ]
}|j ‘qS rq   )ro   ©rì   Úprq   rq   rr   rï      s     z+check_fit_score_takes_y.<locals>.<listcomp>rO  r	   )r¯   ÚYzJExpected y or Y as second argument for method %s of %s. Got arguments: %r.)rž   rŸ   r    rl  rm  r}  r"   r¤   r   r  r   Ú
parametersÚvaluesr^  r  rV   )ro   r«   r~  r(  r­   r¯   rn   rÉ  rÊ  ró   r  rq   rq   rr   rY   Ž  s*    


þÿrY   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   rC  ©r&  r”   r•   rÌ   rÅ   r€  rj  r	   )rž   rŸ   r    rl  ra  ru   rm  r‚  r]  Úint32r¤   r"   r   rª   ri   r  )ro   r«   r~  Z
X_train_32Z
X_train_64ZX_train_int_64ZX_train_int_32r¯   ÚmethodsÚX_trainrn   r†  rq   rq   rr   rX   ¬  s     



rX   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   r	   r   )r(  r¸  rý   r¹  r¸   rº   r,  rÅ   z	 (method=z3) does not preserve dtype. Original/Expected dtype=z, got dtype=Ú.)rG   rD   r,  rm  rA   ra  r"   r   rª   rÅ   rÁ  rØ   r¥  rQ  r^  rV   )ro   rÃ  r­   r¯   rQ  ZX_castrÃ   ZX_trans1ZX_trans2ZXtr†  rq   rq   rr   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 )
Nr	   r   rC  úThe estimator zc does not raise a ValueError when an empty data is used to train. Perhaps use check_array in train.r�  rq  zG0 feature\(s\) \(shape=\(\d*, 0\)\) while a minimum of \d* is required.r�  )
r"   r   rž   Úemptyr{  r   r©   rª   r¤   rt  )ro   r«   ÚeZX_zero_samplesr�   ZX_zero_featuresr¯   r  rq   rq   rr   rc   ã  s    

ÿ(rc   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“   rC  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‘   r	   r¢   ÚNaNr›   rÌ   rÅ   )rž   rŸ   r    rm  rl  r¡   r¢   rM   r¤   r   r!  r"   r   r   r©   rª   ri   rÌ   rÅ   )ro   r«   r~  ZX_train_finiteZX_train_nanZX_train_infr¯   Úerror_string_fitÚerror_string_predictZerror_string_transformrÕ  rn   rq   rq   rr   rf   û  sJ     
ÿ




ÿ
ýýrf   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.r&  r“   )r(  r)  zThe pairwise estimator z+ does not raise an error on non-square datar�  N)rG   r"   r   r©   rª   ©ro   r«   r­   r¯   rn   rq   rq   rr   rg   ,  s    
ýrg   c                 C   s>  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|ƒ | ||¡ t |¡}	|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€  rj  r|  r   r	   r   r   r·  rÅ  rS   r'  r“   F)Úreplacerz  r—   r˜   r™   s   versionN)rG   rm  r5   rA   rž   rŸ   r    Úchoicer–   r¡   r{  r"   r¤   r   rª   ÚpickleÚdumpsr¥   r¦   r§   r^  ÚloadsÚdictri   r  r   )ro   r«   Úcheck_methodsr­   r¯   rp   r¬   Úmaskrn   Zpickled_estimatorr°   Zunpickled_estimatorrË  r†  Zunpickled_resultrq   rq   rr   rl   <  sD    û



ÿÿ

rl   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   r	   ©r(  rý   ©Úclassesr×  zZ does not raise an error when the number of features changes between calls to partial_fit.r�  rz  )ri   r"   rG   rm  r¤   r$   rž   ÚuniquerÌ  ÚNotImplementedErrorr   r©   )ro   r«   rn   r­   r¯   rê  rq   rq   rr   r   o  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)r'  r”   rC  r'  )rý   r(  Ú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   rj  Ú
poor_scorer   zTThe shape of the probability for multioutput data is incorrect. Expected {}, got {}.r	   ©Zaxis)rA   r"   rH   rª   rÌ   ro  r^  r×   rQ  rN   ri   r€  rØ   rž   Úndarrayra  rn  Úclasses_r   rj  r¦  ÚrangeÚargmaxÚroundr   )ro   rn   r(  rí  rî  rp   r­   r¯   Úy_predÚdecisionÚdec_predÚdec_expÚy_probrð  Zy_probaZ
y_decisionrq   rq   rr   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“   r	   r'  r”   )rý   Ú	n_targetsr(  r)  r‚  zbMultioutput predictions by a regressor are expected to be floating-point precision. Got {} insteadrï  )r"   rY  rI   rm  rª   rÌ   rQ  rž   r^  r×   ro  )ro   rn   r(  r)  r­   r¯   rø  rq   rq   rr   r³   É  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ç  r	   rè  é   rü   éýÿÿÿrC  )r”   r   r�  r>  )r>  ZAffinityPropagationiœÿÿÿ)Z
preferencer6  r4  gš™™™™™Ù?rÓ   rº   T©ÚrecordrÓ  r]  r   rz  )r   rz  )r"   rG   r?   rD   r,  rž   rŸ   r    Zconcatenaterl  r   ro  ri   rH  r   rª   r»  Zlabels_r^  r)   rA   rÕ   Úcatch_warningsrË   r   rQ  rë  r}  r  )ro   Úclusterer_origrQ   rÈ   r­   r¯   r¬   ZX_noiser(  r)  rp  Úpred2ÚlabelsZlabels_sortedr>  rq   rq   rr   rÇ   ã  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.r&  r   rè  Úcompute_labelsF)r  N)rG   r"   r   ri   rª   rÌ   rH  r   )ro   r  r­   r¯   rÈ   r‡  rˆ  rq   rq   rr   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‘   ÚclassTrh  r�  )rž   rŸ   r    rl  rM   r   r!  r"   r   r©   rª   Úraised_and_matchedr   rÌ   )
ro   Úclassifier_origrÜ  rÝ  r~  rÕ  ÚX_testr¯   r�   Úcmrq   rq   rr   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   rK   z\bclass(es)?\bz\bsample_weight\bNTrh  rr  r�  )rž   rŸ   r    rl  r}  r_  r"   rB   r^  r©   r  r   rª   r  r   rÌ   rM   )ro   r	  Z	error_fitZerror_predictr~  rÕ  r
  r¯   rK   r�   rœ   Zerr_typer�   r  rq   rq   rr   r}   E  s.    ÿ

  ÿr}   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CategoricalNBrk  rR   ú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�  rz  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.rL   rÌ   r	   r€  rx   rò  rj  Úpredict_log_probaé   r³  )r²  )*rG   ra  r?   rD   r,  rI  r   rA   Úappendrž   rë  r  ro  r"   rm  r¤   r   r   r©   rª   r»  ri   r^  rÌ   r(   r×   r{  ÚTr€  r©  rn  r   rö  rì  rj  r   ÚsumrM   r  r   ÚlogÚargsort)ro   r	  rQ   rw   ZX_mZy_mZy_bZX_bÚproblemsrp   r­   r¯   rê  rî  r(  r)  r�   rø  Zmsg_pairwiser  rù  rú  rü  Z
y_log_probrq   rq   rr   r�   j  s¾    







ý	

ÿÿ


þ





þ
þ




þ
þ

r�   c                 C   sV   | |k r| }|d }n|}| d }t  |¡}d}tt  |||… ¡ƒdksRt|ƒ‚d S )Nr	   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ë  r^  )Únum_outliersÚexpected_outliersrù  ÚstartÚendZsorted_decisionr  rq   rq   rr   Úcheck_outlier_corruptionõ  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ð  rz  r	   ÚfloatrÊ   Znoveltyr|  ©rÊ   )rG   r?   r   ro  r"   r   rª   r»  rÌ   r^  rQ  rN   r   rž   rë  rt  r€  r®  r   r©   r  ra  rn  Zoffset_r   ri   rH  r  r  )ro   r«   rQ   r(  r­   r—  r)  rn   rø  rù  ZscoresÚoutputrú  Zy_decr  rÊ   r  rq   rq   rr   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 rq   )rØ   r   )rì   Úcrq   rq   rr   rï   _	  s     z/check_outlier_contamination.<locals>.<listcomp>zDcontamination constraints should contain a Real Interval constraint.ç        r@  r   >   ÚneitherÚrightz:contamination constraint should be an interval in (0, 0.5])ri   r"  r  r^  rØ   r   r  r   Úleftr&  Úclosed)ro   r«   Zcontamination_constraintsÚ
constraintrq   rq   rr   rÍ   S	  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 )
Nr6  r   r”   rC  rç  Tr   ©r(  r)  rî  rí  ÚlengthZallow_unlabeledrý   éP   )rH   rE   r»  r¦  r"   r   rª   rÌ   r   rQ  r^  r  )ro   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_arraysrq   rq   rr   rƒ   n	  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.©r6  é   r”   r   rC  rç  Tr   r*  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"   r   rH   rE   rª   r  r   rØ   rž   ró  r^  r  ro  rQ  )ro   r	  r�   r(  Ú	test_sizeÚ	n_outputsr­   r¯   rÕ  r
  r-  Úy_testÚresponse_method_nameZpredict_methodrø  rq   rq   rr   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.r.  r   rC  rç  Tr   r*  Nrj  r0  r1  zWhen zn.predict_proba returns a list, the list should be of length n_outputs and contain NumPy arrays. Got length of r3  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 r2  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).r	   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"   r   rH   rE   rª   r  r   rØ   r¦  r  r^  ro  rQ  rN   r   r  rž   ró  r   r©   r  )ro   r	  r�   r(  r4  r5  r­   r¯   rÕ  r
  r-  r7  Zpredict_proba_methodrø  rp  r�   rq   rq   rr   r…   Ä	  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.r.  r   rC  rç  Tr   r*  Nr€  r0  r1  z<.decision_function is expected to output a NumPy array. Got r2  z].decision_function is expected to provide a NumPy array of shape (n_samples, n_outputs). Got r3  rÖ  r8  z?.decision_function is expected to output a floating dtype. Got )r"   r   rH   rE   rª   r  r   rØ   rž   ró  r^  r  ro  rQ  rN   )ro   r	  r�   r(  r4  r5  r­   r¯   rÕ  r
  r-  r7  Zdecision_function_methodrø  rq   rq   rr   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"   r   r0   Úget_feature_names_out)ro   r«   rn   r�   rq   rq   rr   Ú!check_get_feature_names_out_errorF
  s
    
ÿr:  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ý   r(  N)rG   rm  r"   r¤   r   r   rª   r^  )ro   r«   rQ   r­   r¯   rn   rq   rq   rr   r`   V
  s    

r`   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Ì   rj  r  N)r.  r"   ri   r   r0   r  )ro   r«   r­   r¯   rn   r†  rq   rq   rr   r‰   f
  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|  rC  r•   Tr   ÚalwaysrF  z)expected 1 DataConversionWarning, got: %sr�  c                 S   s   g | ]}t |ƒ‘qS rq   ©rø   )rì   Zw_xrq   rq   rr   rï   ’
  s     z)check_supervised_y_2d.<locals>.<listcomp>rt   zPDataConversionWarning('A column-vector y was passed when a 1d array was expected)rA   rž   rŸ   r    rm  rl  r}  r¤   r"   r   rª   rÌ   rÕ   r  Úsimplefilterr/   ÚRuntimeWarningZnewaxisrô   r  r^  r   r©  )ro   r«   rp   r~  r(  r­   r¯   rn   rø  ÚwZ	y_pred_2dr  rq   rq   rr   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ovrr	   rò  r  z=Unexpected classes_ attribute for %r: expected '%s', got '%s')rž   rë  r"   Úmeanr   rª   rÌ   ri   r€  rØ   ró  r^  r  r©  ra  rn  rô  r   rô   r§  rø   r  rö  )r­   r¯   ro   r	  rê  r�   rø  rù  rú  rû  Z
decision_yZy_exprq   rq   rr   Úcheck_classifiers_predictionsŸ
  s`    



ýüý
ýüý
ýÿýrC  c                 C   s   | dkr|S |S )N)ZLabelPropagationZLabelSpreadingÚSelfTrainingClassifierrq   )ro   r¯   Úy_namesrq   rq   rr   Ú _choose_check_classifiers_labelsà
  s    ÿýrF  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   )r(  rý   r¹  rþ  rü   r   ÚoneÚtwoÚthreerk  rº   ÚOrz  r	   )rG   r?   rD   r,  rm  rž   ZtakerA   r  ra  rF  rC  )ro   r	  ZX_multiclassZy_multiclassZX_binaryZy_binaryZlabels_multiclassZlabels_binaryZy_names_multiclassZy_names_binaryr  r­   r¯   rE  Z	y_names_irÄ  rq   rq   rr   r~   ê
  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   rC  r•   r   r¿  r±  )r.  rm  rž   rŸ   r    r“  ro  r¤   r"   r   rd   rƒ  r  r  rª   rÌ   ra  r  r   )ro   Úregressor_origr­   r—  r~  r¯   Zregressor_1Zregressor_2rÄ  Úpred1r  rq   rq   rr   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•   Úalphasr  r¿  ZPassiveAggressiveRegressorr  r  r�  rz  rñ  rº   r@  )r.  ra  rE   r"   rm  r¤   rd   rž   rŸ   r    rƒ  r“  r  r  r   ri   r  rþ   r   r©   rª   r   r»  rÌ   ro  r^  rA   rÇ  )
ro   rK  rQ   rw   r­   r¯   r¶   r~  rÄ  rø  rq   rq   rr   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“   rg  r•   r€  rj  r  )
rž   rŸ   r    r"   Únormalrm  r¤   rª   ri   r^  )ro   rK  r¬   r¶   r­   r¯   rÉ  rÊ  rq   rq   rr   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 )Nrk  rº   r   rC  r   r&  )r¸  rý   r¹  r@  ©r4  rý   rL   éè  g-Cëâ6?)r   r	   )r   r	   r   ©rz   r1  r6  r2  r3  r4  Úmin_weight_fraction_leafr¿  )rR  Ún_iter_no_change)rS  rñ  g×£p=
×ë?)rA   rG   r2   r5   r  rž   rë  r"   rH  ri   r   rª   rÌ   rB  r^  )ro   r	  r  Z	n_centersr­   r¯   rÕ  r
  r-  r6  rz   r�   rø  rq   rq   rr   rŒ   l  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 )Nr1  r6  r2  r3  rP  r4  ÚbalancedrQ  Zweighted)Zaverage)r"   ri   rH  r   rª   rÌ   r*   r^  )
ro   r	  rÕ  r-  r
  r6  ry  r�   rø  Zy_pred_balancedrq   rq   rr   Ú'check_class_weight_balanced_classifiersš  s     



  ÿrU  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š™™™™™é¿r<  r$  r	   rz  r1  rP  r2  r3  r4  rB  rC  rD  rT  rQ  )r	   rz  z>Classifier %s is not computing class_weight=balanced properly.r�  N)rž   rt  ri   rH  r   rª   Úcoef_r_  r  r  rë  r  r   )
ro   Ú
Classifierr­   r¯   r�   Zcoef_balancedr(  rî  rz   Zcoef_manualrq   rq   rr   Ú-check_class_weight_balanced_linear_classifier°  s0    (


þýrY  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   r;  r<  rÅ  zTEstimator %s should not change or mutate  the parameter %s from %s to %s during fit.)rG   rm  r5   r"   r¤   r   rŠ   r   rª   rõ   ÚjoblibÚhashr^  )ro   r«   r­   r¯   rn   rJ  Zoriginal_paramsÚ
new_paramsÚ
param_nameÚoriginal_valueÚ	new_valuerq   rq   rr   rh   Ù  s     

þÿrh   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	|ƒ }|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 rq   rq   )rì   Zparams_parentr  rq   rq   rr   rï     s    þz3check_no_attributes_set_in_init.<locals>.<listcomp>c                 s   s   | ]}t |ƒV  qd S r  r   )rì   Úparentrq   rq   rr   r    s     z2check_no_attributes_set_in_init.<locals>.<genexpr>zaEstimator %s should not set any attribute apart from parameters during init. Found attributes %s.)r"   r¼  ri   r  rP  r   r
   ÚremoveÚ__mro__ÚsetÚvarsr^  Úsorted)ro   r«   rn   Úinit_paramsr»   Zparents_init_paramsZinvalid_attrrq   rq   rr   rW   û  s,    
ÿ
þ
þÿrW   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éþÿÿÿrz  r	   r   rC  )rž   rt  r¤   r"   rª   rÌ   rT   r   r¨  rW  r^  r   rá  rã  râ  )ro   r«   r­   r¯   r  Z	pred_origrp  rq   rq   rr   rj     s2    ÷ÿ




rj   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 )NrC  r   r	   r   rg  ©Ú
NotAnArrayZPandasDataframe)rž   rt  rm  r¤   Ú"check_estimators_data_not_an_array©ro   r«   r­   r¯   Úobj_typerq   rq   rr   r{   B  s(    ôÿ
"
r{   c                 C   s<   t ƒ \}}t||ƒ}t||ƒ}dD ]}t| ||||ƒ q"d S )Nrh  )r.  rm  r¤   rj  rk  rq   rq   rr   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 |¡ƒ}ndzFdd l	}	t |¡}|j
dkr–|	 |¡}n
|	 |¡}|	 t |¡¡}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.rh  zData type {0} not supportedri  r   r	   zDpandas is not installed: not checking estimators for pandas objects.r¿  r±  )rd   r   r"   r   r©   r×   rL  rž   rM  rs  rÂ  rv  ru  rw  rª   rÌ   r   )ro   r«   r­   r¯   rl  Zestimator_1Zestimator_2rÄ  ZX_rx  rL  r  rq   rq   rr   rj  d  s:    ÿ


ÿ


rj  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.rO  )ro   rN   ÚVAR_KEYWORDÚVAR_POSITIONAL)rÎ  rq   rq   rr   Úparam_filter¬  s
    

ÿ
ýz<check_parameters_default_constructible.<locals>.param_filterc                    s   g | ]}ˆ |ƒr|‘qS rq   rq   rÍ  ©ro  rq   rr   rï   ´  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  )rV   )rì   r  rq   rq   rr   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.)'rU   r   r!  r  r"   ÚreprrH  r^  r  rP  r   rÐ  rÑ  r  r©   rŠ   r  ÚdefaultrØ  ro   r  rV   rø   rn  r  rX  r¥  Úupdaterž   ÚcoreZnumerictypesZallTypesrñ   rc  r‹   rØ   ró  r   r   )ro   r  rn   Úinitrf  rJ  Z
init_paramZallowed_typesZallowed_valueZparam_valueZfailure_textrq   rp  rr   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º   r	   rk  r   rx   )rz  r	   )rA   ÚabsrI  r–   rž   ÚwhereZflatr{  )rn   r¯   rq   rq   rr   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r\|| ¡   tj¡}| jjdkrt|| ¡  }t| ƒrŠt|dd	�}nt | d
d�r |||ƒ}|S )NZ1darrayrÒ   rº   r   rÔ   ÚcategoricalZSkewedChi2SamplerZ	euclidean)rW  rL   )	rA   rI  ra  rž   rÓ  rU   rV   rY  r7   )rn   r­   rÆ  rq   rq   rr   rm    s    
rm  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½   r5  r   rD  Z	LassoLarsr$  r  r3  r   r	   )rd   r"   rH  ri   rF   rN  Útargetr¤   r   rm  rª   rž   ÚallÚn_iter_r^  )ro   r«   Znot_run_check_n_iterrn   Zirisr­   rÄ  rq   rq   rr   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 )Nr3  r$  r<  g       @r%  g      @r   gš™™™™™É¿gÍÌÌÌÌÌì?gš™™™™™ñ?g      à¿g333333Ó?r|  r   r	   r   r·  )	r"   ri   rd   rG   rm  r   rª   r{  r^  )ro   r«   rn   r­   rÄ  Ziter_rq   rq   rr   rÂ   Q  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_paramsrq   rr   r  x  s     z.check_get_params_invariance.<locals>.<genexpr>)r"   rŠ   rz  rõ   r^  )ro   r«   rÙ  Zshallow_paramsrq   r  rr   rÞ   p  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Š   rH  rc  r‹   r^  rõ   rž   r¢   r   r  r©   rU   rV   rÕ   rÖ   r×   )ro   r«   rn   Zorig_paramsr  Zcurr_paramsrí   rî   Ztest_valuesZtest_paramsr]  Údefault_valuer®   rÙ  Úe_typeZchange_warning_msgZparams_before_exceptionrq   rq   rr   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: rR   rº   r�  )r.  rm  r"   rA   r   r©   rª   )ro   r«   r­   r¯   rÙ  r  rq   rq   rr   r‚   ´  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   )rg  rg  r6  r   rg  r<  T)r(  rý   r)  r¸  r¹  r?   çš™™™™™É?rO  r€  rj  r	   r“   )Zdecimalsc                    s   g | ]}ˆ ˆ|k   ¡ ‘qS rq   )rB  )rì   Úgroup©ÚbZ
rank_probarq   rr   rï   ê  s     z4check_decision_proba_consistency.<locals>.<listcomp>)rG   r2   r"   ri   rª   rj  r÷  r€  r   r   r^  rž   rt  rë  r  r   r}  r  )ro   r«   r¸  r­   r¯   rÕ  r
  r-  r6  rn   ÚaZ
rank_scoreZgrouped_y_scoreZ
sorted_idxrq   r„  rr   rŽ   Â  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ð  rz  r	   rÌ   rÊ   r|  r   r€  )rG   r?   ro  r"   r   rË   r^  rQ  rN   r   rž   rë  rt  ri   rª   rÌ   r  rH  r  r€  r  )ro   r«   r(  r­   r—  r)  rn   rø  Zy_pred_2r  rÊ   r  rù  rq   rq   rr   rÎ   ð  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 )NrV  r	   r   )rž   rt  r"   r   r©   rª   rÞ  rq   rq   rr   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€  rj  r   Ú
warm_startF©r‡  r6  r   ©Úlocr–   r•   r�  r‚  rO  c                    s&   i | ]}t ˆ|ƒr|tˆ|ƒˆ ƒ“qS rq   )ri   r  )rì   r†  ©r
  rn   rq   rr   Ú
<dictcomp>E  s   
þ z(check_fit_idempotent.<locals>.<dictcomp>r³  r°  z&Idempotency check failed for method {})r²  Zrtolr�   )rž   rŸ   r    r"   r   rŠ   r‹   rH  rN  rm  r%   r“  r¤   Únextr3   Úsplitr4   rª   ri   r  Z
issubdtyperQ  ZfloatingZfinfoZepsr‚  r   Úmaxr×   )ro   r«   rå  r¬   r(  r­   r¯   ÚtrainÚtestrÕ  r-  r6  rË  r†  Z
new_resultZtolrq   r‹  rr   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 )Nr'  r‡  Frˆ  r6  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"   r   rŠ   rH  rN  rm  r%   r“  r¤   rA   Úgetr:   r^  rU   rV   r0   rª   )ro   r«   r¬   rn   r(  r­   r¯   rÙ  rq   rq   rr   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ˆ  r6  r   r‰  r•   r�  Ún_features_in_r	   )rž   rŸ   r    r"   r   rŠ   rH  rN  rm  r%   r“  r¤   ri   r^  rª   r“  ro  )ro   r«   r¬   rn   r(  r­   r¯   rq   rq   rr   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   r6  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  ©Úverq   rr   r  ¶  s     z(check_requires_y_none.<locals>.<genexpr>)
rž   rŸ   r    r"   r   rN  rm  rª   r©   r  )ro   r«   r¬   rn   r(  r­   Zexpected_err_msgsrq   r”  rr   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Ò   rx  rR   r   r‡  Frˆ  é–   r  r•   r   r�  r	   rÌ   rÅ   r€  rj  rÇ  z'X has 1 features, but \w+ is expecting z features as inputr½  r�  rÌ  ré  )rA   rž   rŸ   r    r"   r   rŠ   rH  rN  rm  r%   r“  r¤   rª   r“  ro  r^  ri   r  r   r   r©   r$   rÌ  rë  )ro   r«   rp   Úis_supported_X_typesr¬   rn   r(  r­   r¯   rå  ÚX_badr  r†  Úcallable_methodrq   rq   rr   Ú!check_n_features_in_after_fittingº  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"   ri   rc  r›  r‹   r@   Úintersectionr^  )ro   r«   rn   Z	tags_keysZdefault_tags_keysrq   rq   rr   rm   ÿ  s    
ÿrm   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�}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ƒ�s2tdƒ‚t|jtjƒ�sFt‚|jjtk�sXt‚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�}t, -d'|› �¡}|D ]2\} }t.t|| › d(�d)�� ||ƒ W 5 Q R X �qØt|d*ƒ�r®|�r"�q®t|ƒ}t/|ƒ�rPt 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Ò   rx  rR   )r–  r  r•   c                 S   s   g | ]}d |› �‘qS )Zcol_rq   ©rì   rð  rq   rq   rr   rï   (  s     z<check_dataframe_column_names_consistency.<locals>.<listcomp>©Úcolumnsr   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€  rj  rÇ  r®  r  rÇ  r½  rz  z<Feature names must be in the same order as they were in fit.c                 S   s   g | ]}d |› �‘qS )Zanother_prefix_rq   rž  rq   rq   rr   rï   n  s     zHFeature names unseen at fit time:
- another_prefix_0
- another_prefix_1
rC  z3Feature names seen at fit time, yet now missing:
- Ú
c                 S   s   i | ]\}}d |kr||“qS )Zearly_stoppingrq   )rì   r»   r®   rq   rq   rr   rŒ  w  s   þ z<check_dataframe_column_names_consistency.<locals>.<dictcomp>c                 s   s   | ]}|d kV  qdS )TNrq   )rì   r®   rq   rq   rr   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�  )2rs  rw  r   rA   rž   rŸ   r    r"   r   rN  rm  ro  rt  rõ  ru  r%   r“  r¤   rÕ   r  ÚfilterwarningsÚUserWarningrª   ri   r©   rØ   r¤  ró  r^  rQ  rŽ  r   r¥   r¦   r§   rV  r  r   r  rI  rŠ   rõ   r  rÑ  rö   Úescaper   r$   rë  rÌ  )ro   r«   rx  rp   r—  r¬   rn   ZX_origr(  r)  Únamesr­   r¯   r°   rå  r†  r™  r—  Úinvalid_namesrJ  Zearly_stopping_enabledZinvalid_nameZadditional_messager˜  Zexpected_msgrê  rq   rq   rr   Ú(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Ò   rR   r|  r   r	   r   r   r·  r½  c                 S   s   g | ]}d |› �‘qS )Úfeaturerq   rž  rq   rq   rr   rï   µ  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ì   ro   rq   rq   rr   r  ¿  s     z:check_transformer_get_feature_names_out.<locals>.<genexpr>ú	Expected ú feature names, got )r›  rG   rD   r,  r"   rm  ro  r   rd   rž   rÀ  rM  rõ  r   r©   r9  r^  rØ   ró  rQ  rŽ  rz  r¥  r  )ro   rÃ  rp   r­   r¯   rÃ   r)  rÄ  ÚX_transformZinput_featuresZfeature_names_outÚn_features_outrq   rq   rr   Ú'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�}
|j|
|d�}dd„ t|ƒD ƒ}ttdd�� | |¡ W 5 Q R X | ¡ }| |	¡}t||ƒ t|tƒ�rz|d j	d }n
|j	d }t|ƒ|k�sªtd|› dt|ƒ› �ƒ‚d S )Nr   r�  rÑ   rÒ   rR   r|  r	   r   r   r·  c                 S   s   g | ]}d |› �‘qS ©rb  rq   rž  rq   rq   rr   rï   ë  s     zBcheck_transformer_get_feature_names_out_pandas.<locals>.<listcomp>rŸ  r½  c                 S   s   g | ]}d |› �‘qS )Úbadrq   rž  rq   rq   rr   rï   ð  s     z0input_features is not equal to feature_names_in_r�  r­  r®  )rs  rw  r   r›  rG   rD   r,  r"   rm  ro  r   rd   rž   rÀ  rM  rõ  ru  r   r©   r9  r   rØ   r¥  r  r^  )ro   rÃ  rx  rp   r­   r¯   rÃ   r)  rÄ  Úfeature_names_inÚdfr¯  Zinvalid_feature_namesZfeature_names_out_defaultZfeature_names_in_explicit_namesr°  rq   rq   rr   Ú.check_transformer_get_feature_names_out_pandasË  sV    ÿ
û


ÿ


ÿþr¶  c                 C   sH  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´d|› d| › d�}| › d|› d�}	t|ƒ}|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d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   r&  Fr|  z>Mismatch between _parameter_constraints and the parameters of z%.
Consider the unexpected parameters z% and expected but missing parameters ZBadTyperq   rª   rÌ  r,  rË   rR   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_typerq   rq   rr   r  7  s   ÿz)check_param_validation.<locals>.<genexpr>rÒ   rº   c                 S   s   g | ]}t |ƒ‘qS rq   r;   )rì   r)  rq   rq   rr   rï   C  s     z*check_param_validation.<locals>.<listcomp>c                 s   s   | ]}|  d ¡V  qdS r·  )r§   r¸  rq   rq   rr   r  S  s   ÿ)rž   rŸ   r    rl  r“  r¤   rŠ   r‹   r"  rc  r^  r  r"   rH  ri   r   r>   r  rA   r  r=   rì  )ro   r«   r¬   r­   r¯   Zestimator_paramsZvalidation_paramsZunexpected_paramsZmissing_paramsr�   Zparam_with_bad_typeZfit_methodsr]  Úconstraintsrœ   rn   r†  r)  Z	bad_valuerq   rq   rr   Úcheck_param_validation  s`    

ÿ

ÿ
þ

þ
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„}||g}|D ]R}t|ƒ}||ƒ}	ˆt
krº|	d }	|jdd� ||ƒ}
ˆt
krÞ|
d }
t|	|
ƒ q–d S )NrÑ   rÒ   rR   r   rÒ  r•   r   r&  c                    s.   ˆt kr|  ˆ ˆ¡ ˆ ˆ¡S |  ˆ ˆ¡ ˆ ¡S r  )rd   rª   rÅ   ©r  ©r­   ro   r¯   rq   rr   Úfit_then_transformm  s    z6check_set_output_transform.<locals>.fit_then_transformc                    s   |   ˆ ˆ¡S r  )r,  r»  r-  rq   rr   r,  r  s    z1check_set_output_transform.<locals>.fit_transformrr  ©rÅ   )r›  rž   rŸ   r    r"   rl  rm  r“  r¤   r   rd   Ú
set_outputr   )ro   rÃ  rp   r¬   rÃ   r½  r,  Ztransform_methodsZtransform_methodZX_trans_no_settingZX_trans_defaultrq   r¼  rr   Úcheck_set_output_transform]  s.    

rÀ  c                 C   sÐ   i }d||fd||fd||fd||fg}|D ]J\}}}	|   ||¡ |tkr\|  |	|¡\}
}n
|  |	¡}
|
|  ¡ f||< q,d|fd|fg}|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/arrayzfit_transform/dfzfit_transform/array)rª   rd   rÅ   r9  r,  )rÃ   ro   r­   rµ  r¯   ÚoutputsZcasesÚcaseZdata_fitZdata_transformÚX_transr—  rN  rq   rq   rr   Ú_output_from_fit_transformˆ  s2    ü
ü
þrÄ  c              
   C   sŠ   dd l }|\}}|\}}t||jƒs(t‚|j||d�}	z|j ||	¡ W n< tk
r„ }
 zt| › d|› d|
› �ƒ|
‚W 5 d }
~
X Y nX d S )Nr   rŸ  z, does not generate a valid dataframe in the z] case. The generated dataframe is not equal to the expected dataframe. The error message is: )rs  rØ   ru  r^  ÚtestingZassert_frame_equal)ro   rÂ  Úoutputs_defaultÚoutputs_pandasrx  rÃ  Zfeature_names_defaultZdf_transZfeature_names_pandasZexpected_dataframerÙ  rq   rq   rr   Ú_check_generated_dataframe³  s    ÿürÈ  c              
   C   sh  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 ƒ}|j||d�}	t|ƒjdd�}
t|
| ||	|ƒ}t|ƒjdd�}zt|| ||	|ƒ}W n@ tk
�r@ } z t|ƒdk�s*t|ƒ‚W Y ¢d S d }~X Y nX |D ]}t| ||| || ƒ �qFd S )Nr   r�  rÑ   rÒ   rR   rÒ  r•   r   r&  c                 S   s   g | ]}d |› �‘qS r²  rq   rž  rq   rq   rr   rï   ß  s     z5check_set_output_transform_pandas.<locals>.<listcomp>r	   rŸ  rr  r¾  rs  ú+Pandas output does not support sparse data.)rs  rw  r   r›  rž   rŸ   r    r"   rl  rm  r“  r¤   r   rõ  ro  ru  r¿  rÄ  r©   rø   r^  rÈ  ©ro   rÃ  rx  rp   r¬   rÃ   r­   r¯   r´  rµ  Ztransformer_defaultrÆ  Ztransformer_pandasrÇ  rÙ  rÂ  rq   rq   rr   Ú!check_set_output_transform_pandasÉ  sB    ÿ


   ÿrË  c              
   C   sv  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 ƒ}|j||d�}	t|ƒjdd�}
t|
| ||	|ƒ}t|ƒ}z*tdd�� t|| ||	|ƒ}W 5 Q R X W n@ tk
�rN } z t|ƒdk�s8t|ƒ‚W Y ¢dS d}~X Y nX |D ]}t| ||| || ƒ �qTdS )z`Check that setting globally the output of a transformer to pandas lead to the
    right results.r   Nr�  rÑ   rÒ   rR   rÒ  r•   r   r&  c                 S   s   g | ]}d |› �‘qS r²  rq   rž  rq   rq   rr   rï   	  s     z8check_global_ouptut_transform_pandas.<locals>.<listcomp>r	   rŸ  rr  r¾  rs  )Ztransform_outputrÉ  )rs  rw  r   r›  rž   rŸ   r    r"   rl  rm  r“  r¤   r   rõ  ro  ru  r¿  rÄ  r   r©   rø   r^  rÈ  rÊ  rq   rq   rr   Ú$check_global_ouptut_transform_pandasò  sP    ÿ


    ÿ   ÿrÌ  )NFr  )rM   )F)F)Fr‚  )T)F)×rÕ   rá  rö   r_  r   Ú	functoolsr   r   Úinspectr   Únumbersr   Únumpyrž   Zscipyr   Zscipy.statsr   rZ  rð   r
   r   Z_param_validationr   r™   r   r   r   r   r   r   r   r   r   r   r   r   r   Zlinear_modelr   r   r   r    r!   Úbaser"   r#   r$   r%   r&   r'   Zmetricsr(   r)   r*   Zrandom_projectionr+   Zfeature_selectionr,   r-   rÈ  r.   Ú
exceptionsr/   r0   r1   Zmodel_selectionr2   r3   Zmodel_selection._validationr4   Zmetrics.pairwiser5   r6   r7   Zutils.fixesr8   r9   Zutils.validationr:   Zutils._param_validationr<   r=   r>   r?   Z_tagsr@   rA   Z
validationrB   rC   ZpreprocessingrD   rE   ZdatasetsrF   rG   rH   rI   r+  rd   rs   r�   r!  r‡   r·   rÄ   rÉ   rÐ   rê   rú   r  r  r  r
  r  r#  r.  rK  rL  rY  re  rk   rZ   r[   r\   r]   r_   r^   r§  rb   ra   rà   r™  rá   ræ   r¬  rÛ   rÚ   rÜ   rÝ   rå   r¿   r¾   rÁ   rº  re   rY   rX   rÀ   rc   rf   rg   rl   r   r€   r³   rÇ   rÆ   r|   r}   r�   r  rÏ   rÍ   rƒ   r„   r…   r†   r:  r`   r‰   rˆ   rC  rF  r~   rµ   r‚  r±   r´   rŒ   rU  rY  rh   rW   rj   r{   r²   rj  rÙ   r¤   rm  r�   rÂ   rÞ   rß   r‚   rŽ   rÎ   rè   râ   rã   rä   rç   rš  rm   r«  r±  r¶  rº  rÀ  rÄ  rÈ  rË  rÌ  rq   rq   rq   rr   Ú<module>   sØ   	4$
"9&,>]u!6
+


$D(
!
'
:

%
+
(



\
 

 

0

2

<
;


$  ÿ H
(
,
S
-


#
@
"
 ÿ2

-

(
!
#
"


.i
*



8

-+
:'D 09Y++)