Ë
    ÷Q(h[  ã            	       óÂ  — d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ d dlmZmZmZ 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. d„ Z/d„ Z0 ed¬«      d„ «       Z1ejd                  jg                  dddg«       ed¬«      d„ «       «       Z4ejd                  jg                  d e
ddd ¬«       ed ¬ «      g«      d!„ «       Z5ejd                  jg                  d"d#dd$œe6d%fd&d'd$œe6d(fd#d'd$œed)fg«      d*„ «       Z7ejd                  jg                  d+ e«        e&«        ed,¬-«      g«      ejd                  jg                  d.g d/¢«      ejd                  jg                  d0eeg«      d1„ «       «       «       Z8ejd                  jg                  d.g d2¢«      d3„ «       Z9d4„ Z:ejd                  jg                  d.g d2¢«      ejd                  jg                  d5 ee«       eed6¬7«      g«      d8„ «       «       Z;ejd                  jg                  d9dd'g«       ed¬«      d:„ «       «       Z<ejd                  jg                  dddg«       ed¬«      d;„ «       «       Z= ed¬«      d<„ «       Z>d=„ Z?ejd                  jg                  d>dd'g«      d?„ «       Z@d@„ ZAdA„ ZBejd                  jg                  d.g dB¢«      dC„ «       ZCejd                  jg                  dDdEdFg«      ejd                  jg                  dGd dg«      dH„ «       «       ZD ed¬«      dI„ «       ZEejd                  jg                  dJg dK¢«      dL„ «       ZFdM„ ZGy)Né    N)Úconfig_context)Úclone)Úload_breast_cancerÚ	load_irisÚmake_classificationÚmake_multilabel_classification)ÚDummyClassifier)ÚGradientBoostingClassifier)ÚNotFittedError)ÚLogisticRegression)Úbalanced_accuracy_scoreÚf1_scoreÚfbeta_scoreÚmake_scorer)Ú_CurveScorer)ÚFixedThresholdClassifierÚStratifiedShuffleSplitÚTunedThresholdClassifierCV)Ú_fit_and_score_over_thresholds)Úmake_pipeline)ÚStandardScaler)ÚSVC)ÚDecisionTreeClassifier)ÚCheckingClassifier)Ú_convert_containerÚassert_allcloseÚassert_array_equalc            
      ó²  — t        dd¬«      \  } }t        j                  d«      t        j                  dd«      }}t        «       }t	        t
        dddi ¬«      }t        || |i |||i ¬	«      \  }}t        j                  |d
d |dd
 k  «      sJ ‚t        |t        j                  «      sJ ‚t        j                  |dk\  |dk  «      j                  «       sJ ‚y
)zCheck that `_fit_and_score_over_thresholds` returns thresholds in ascending order
    for the different accepted curve scorers.éd   r   ©Ú	n_samplesÚrandom_stateé2   é   Úpredict_probaé
   ©Ú
score_funcÚsignÚresponse_methodÚ
thresholdsÚkwargs©Ú
fit_paramsÚ	train_idxÚval_idxÚcurve_scorerÚscore_paramsNéÿÿÿÿ)r   ÚnpÚaranger   r   r   r   ÚallÚ
isinstanceÚndarrayÚlogical_and©ÚXÚyr/   r0   Ú
classifierr1   Úscoresr+   s           úy/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/model_selection/tests/test_classification_threshold.pyÚ0test_fit_and_score_over_thresholds_curve_scorersr@   +   sØ   € ô ¨¸1Ô=�D€A€qÜŸ™ 2›¬¯	©	°"°cÓ(:ˆw€IÜ#Ó%€JäÜ*ØØ'ØØô€Lô 8ØØ	Ø	ØØØØ!Øô	Ñ€FˆJô �6‰6�*˜S˜b�/ Z°° ^Ñ3Ô4Ð4Ð4Ü�fœbŸj™jÔ)Ð)Ð)Ü�>‰>˜& A™+ v°¡{Ó3×7Ñ7Ô9Ð9Ñ9ó    c            
      óœ  — t        dd¬«      \  } }dt        j                  dd«      }}t        d¬«      j	                  | |«      }|j                  | |   ||   «      t        j                  d«      k(  sJ ‚t        t        dd	d
i ¬«      }t        || |i |||i ¬«      \  }}t        j                  |dd |dd k  «      sJ ‚t        |ddg«       y)z-Check the behaviour with a prefit classifier.r   r   r    Nr#   ©r"   g      ð?r$   r%   é   r'   r-   r3   ç      à?)r   r4   r5   r   ÚfitÚscoreÚpytestÚapproxr   r   r   r6   r   r:   s           r?   Ú)test_fit_and_score_over_thresholds_prefitrJ   I   sâ   € ä¨¸1Ô=�D€A€qð œrŸy™y¨¨SÓ1ˆw€IÜ'°QÔ7×;Ñ;¸A¸qÓA€Jð ×Ñ˜A˜g™J¨¨'©
Ó3´v·}±}ÀSÓ7IÒIÐIÐIäÜ*ØØ'ØØô€Lô 8ØØ	Ø	ØØØØ!Øô	Ñ€FˆJô �6‰6�*˜S˜b�/ Z°° ^Ñ3Ô4Ð4Ð4Ü�F˜S #˜JÕ'rA   T)Úenable_metadata_routingc                  ó  — t        d¬«      \  } }| dd |dd }} t        j                  | | |dk(     g«      t        j                  |||dk(     g«      }}t        j                  |«      }|ddxxx dz  ccc t        «       }t        j                  |j                  d   «      }t        j                  |j                  d   «      }t        t        dd	d
i ¬«      }t        |||i |||i ¬«      \  }	}
t        j                  | j                  d   «      t        j                  | j                  d   «      }}t        |j                  d¬«      | |d|i|||j                  d¬«      d|i¬«      \  }}t        |
|«       t        |	|«       y)zICheck that we dispatch the sample-weight to fit and score the classifier.T©Ú
return_X_yNr   r   r#   rD   r$   r%   r&   r'   r-   ©Úsample_weightrP   )r   r4   ÚvstackÚhstackÚ	ones_liker   r5   Úshaper   r   r   Úset_fit_requestÚset_score_requestr   )r;   r<   Ú
X_repeatedÚ
y_repeatedrP   r=   Útrain_repeated_idxÚval_repeated_idxr1   Úscores_repeatedÚthresholds_repeatedr/   r0   r>   r+   s                  r?   Ú0test_fit_and_score_over_thresholds_sample_weightr]   i   sŒ  € ô  Ô%�D€A€qØˆTˆcˆ7�A�d�s�G€q€Aô  ŸY™Y¨¨1¨Q°!©V©9 ~Ó6¼¿	¹	À1ÀaÈÈQÉÁiÀ.Ó8Q�
€Jä—L‘L “O€MØ�#�2Ó˜!ÑÓä#Ó%€JÜŸ™ :×#3Ñ#3°AÑ#6Ó7ÐÜ—y‘y ×!1Ñ!1°!Ñ!4Ó5ÐÜÜ*ØØ'ØØô€Lô ,JØØØØØ$Ø Ø!Øô	,Ñ(€OÐ(ô Ÿ™ 1§7¡7¨1¡:Ó.´·	±	¸!¿'¹'À!¹*Ó0Eˆw€IÜ7Ø×"Ñ"°Ð"Ó6Ø	Ø	Ø# ]Ð3ØØØ!×3Ñ3À$Ð3ÓGØ% }Ð5ô	Ñ€FˆJô Ð'¨Ô4Ü�O VÕ,rA   Úfit_params_typeÚlistÚarrayc           
      ó>  — t        dd¬«      \  }}t        || «      t        || «      dœ}t        ddgd¬«      }|j                  dd¬«       t	        j
                  d	«      t	        j
                  d	d«      }}t        t        d
ddi ¬«      }t        |||||||i ¬«       y)úECheck that we pass `fit_params` to the classifier when calling `fit`.r   r   r    ©ÚaÚbrd   re   ©Úexpected_fit_paramsr"   Tr#   r$   r%   r&   r'   r-   N)	r   r   r   rU   r4   r5   r   r   r   )r^   r;   r<   r.   r=   r/   r0   r1   s           r?   Ú-test_fit_and_score_over_thresholds_fit_paramsrh   š   s¬   € ô ¨¸1Ô=�D€A€qä  ?Ó3Ü  ?Ó3ñ€Jô
 $¸¸c¸
ÐQRÔS€JØ×Ñ ¨ÐÔ.ÜŸ™ 2›¬¯	©	°"°cÓ(:ˆw€IäÜ*ØØ'ØØô€Lô #ØØ	Ø	ØØØØ!Øö	rA   Údataé   r$   )Ú	n_classesÚn_clusters_per_classr"   rC   c                 ó¨   — d}t        j                  t        |¬«      5   t        t	        «       «      j
                  | Ž  ddd«       y# 1 sw Y   yxY w)zHCheck that we raise an informative error message for non-binary problem.z(Only binary classification is supported.©ÚmatchN)rH   ÚraisesÚ
ValueErrorr   r   rF   )ri   Úerr_msgs     r?   Ú)test_tuned_threshold_classifier_no_binaryrs   »   sJ   € ð 9€GÜ	�‰”z¨Ô	1ñ DØ<Ô"Ô#5Ó#7Ó8×<Ñ<¸dÑC÷D÷ Dñ Dús   ž!AÁAzparams, err_type, err_msgÚprefit©ÚcvÚrefitz'When cv='prefit', refit cannot be True.r&   Fz1When cv has several folds, refit cannot be False.z`estimator` must be fitted.c                 óÄ   — t        dd¬«      \  }}t        j                  ||¬«      5  t        t	        «       fi | ¤Žj                  ||«       ddd«       y# 1 sw Y   yxY w)zhCheck that we raise an informative error message when `cv` and `refit`
    cannot be used together.
    r   r   r    rn   N)r   rH   rp   r   r   rF   )ÚparamsÚerr_typerr   r;   r<   s        r?   Ú1test_tuned_threshold_classifier_conflict_cv_refitr{   É   sY   € ô0 ¨¸1Ô=�D€A€qÜ	�‰�x wÔ	/ñ MÜ"Ô#5Ó#7ÑB¸6ÑB×FÑFÀqÈ!ÔL÷M÷ Mñ Mús   ¨%AÁAÚ	estimatoré   )Ún_estimatorsr*   ©r%   Úpredict_log_probaÚdecision_functionÚThresholdClassifierc                 óT  — t        dd¬«      \  }} | |¬«      }t        ||«      t        ||«      k(  sJ ‚|j                  ||«       t        ||«      t        ||«      k(  sJ ‚t        ||«      r; t        ||«      |«      } t        |j                  |«      |«      }t        ||«       yy)zoCheck that `TunedThresholdClassifierCV` exposes the same response methods as the
    underlying estimator.
    r   r   r    ©r|   N)r   ÚhasattrrF   ÚgetattrÚ
estimator_r   )r‚   r|   r*   r;   r<   ÚmodelÚy_pred_cutoffÚy_pred_underlying_estimators           r?   Ú4test_threshold_classifier_estimator_response_methodsr‹   æ   s«   € ô  ¨¸1Ô=�D€A€qá¨)Ô4€EÜ�5˜/Ó*¬g°iÀÓ.QÒQÐQÐQà	‡I�Iˆa�„OÜ�5˜/Ó*¬g°iÀÓ.QÒQÐQÐQäˆu�oÔ&Ø7œ  Ó7¸Ó:ˆØ&P¤g¨e×.>Ñ.>ÀÓ&PÐQRÓ&SÐ#ä˜Ð'BÕCð	 'rA   )Úautor�   r%   c                 óÂ  — t        d¬«      \  }}|dd…dd…f   }t        j                  |dk(  «      }|d|j                  dz   }t        j                  |dk(  «      }t        j                  ||   ||   g«      }t        j
                  ||   ||   g«      }t        t        «       t        «       «      j                  ||«      }d}t        |d	| |d¬
«      }t        ||j                  ||«      j                  |«      «      }t        ||j                  |«      «      }	||	kD  sJ ‚|j                  d   j                  |fk(  sJ ‚|j                  d   j                  |fk(  sJ ‚y)zSCheck that `TunedThresholdClassifierCV` is optimizing a given objective
    metric.TrM   Né   r$   r#   r   r   Úbalanced_accuracy)r|   Úscoringr*   r+   Ústore_cv_resultsr+   r>   )r   r4   ÚflatnonzeroÚsizerQ   rR   r   r   r   rF   r   r   ÚpredictÚcv_results_rT   )
r*   r;   r<   Úindices_posÚindices_negÚlrr+   rˆ   Úscore_optimizedÚscore_baselines
             r?   Ú8test_tuned_threshold_classifier_without_constraint_valuer›     s\  € ô ¨Ô.�D€A€qà	Š!ˆRˆaˆRˆ%‰€Aô —.‘.  a¡Ó(€KØÐ6 × 0Ñ 0°BÑ 6Ð7€KÜ—.‘.  a¡Ó(€Kä
�	‰	�1�[‘> 1 [¡>Ð2Ó3€AÜ
�	‰	�1�[‘> 1 [¡>Ð2Ó3€Aä	”~Ó'Ô);Ó)=Ó	>×	BÑ	BÀ1ÀaÓ	H€BØ€JÜ&ØØ#Ø'ØØô€Eô .¨a°·±¸1¸a³×1HÑ1HÈÓ1KÓL€OÜ,¨Q°·
±
¸1³Ó>€NØ˜^Ò+Ð+Ð+Ø×Ñ˜\Ñ*×0Ñ0°Z°MÒAÐAÐAØ×Ñ˜XÑ&×,Ñ,°°Ò=Ð=Ñ=rA   c                  ó6  — t        d¬«      \  } }t        t        «       t        «       «      j	                  | |«      }t        |t        t        d¬«      ¬«      j	                  | |«      }t        |t        t        d¬«      ¬«      j	                  | |«      }t        |t        t        «      ¬«      j	                  | |«      }|j                  t        j                  |j                  «      k(  sJ ‚|j                  t        j                  |j                  «      k7  sJ ‚y)z¬Check that we can pass a metric with a parameter in addition check that
    `f_beta` with `beta=1` is equivalent to `f1` and different from `f_beta` with
    `beta=2`.
    TrM   r$   )Úbeta)r|   r�   rD   N)r   r   r   r   rF   r   r   r   r   Úbest_threshold_rH   rI   )r;   r<   r˜   Úmodel_fbeta_1Úmodel_fbeta_2Úmodel_f1s         r?   Ú5test_tuned_threshold_classifier_metric_with_parameterr¢   '  sè   € ô
 ¨Ô.�D€A€qÜ	”~Ó'Ô);Ó)=Ó	>×	BÑ	BÀ1ÀaÓ	H€BÜ.Øœk¬+¸AÔ>ôç	�cˆ!ˆQƒið ô /Øœk¬+¸AÔ>ôç	�cˆ!ˆQƒið ô *Øœk¬(Ó3ôç	�cˆ!ˆQƒið ð ×(Ñ(¬F¯M©M¸(×:RÑ:RÓ,SÒSÐSÐSØ×(Ñ(¬F¯M©M¸-×:WÑ:WÓ,XÒXÐXÑXrA   ÚmetricÚcancer)Ú	pos_labelc                 ó°  — t        d¬«      \  }}t        j                  ddgt        ¬«      }||   }t	        t        t        «       t        «       «      || d¬«      j                  ||«      }t        |j                  t        j                  |«      «       |j                  |«      }t        t        j                  |«      t        j                  |«      «       y)	z�Check that targets represented by str are properly managed.
    Also, check with several metrics to be sure that `pos_label` is properly
    dispatched.
    TrM   r¤   Úhealthy)Údtyper   )r|   r�   r*   r+   N)r   r4   r`   Úobjectr   r   r   r   rF   r   Úclasses_Úsortr”   Úunique)r*   r£   r;   r<   Úclassesrˆ   Úy_preds          r?   Ú3test_tuned_threshold_classifier_with_string_targetsr¯   <  s©   € ô ¨Ô.�D€A€qô �h‰h˜ )Ð,´FÔ;€GØ�‰
€AÜ&Ü¤Ó 0Ô2DÓ2FÓGØØ'Øô	÷
 
�cˆ!ˆQƒið 
ô �u—~‘~¤r§w¡w¨wÓ'7Ô8Ø�]‰]˜1Ó€FÜ”r—y‘y Ó(¬"¯'©'°'Ó*:Õ;rA   Úwith_sample_weightc                 ó  — t         j                  j                  |«      }t        dd¬«      \  }}| r6|j	                  |j
                  d   «      }t        j                  ||¬«      }nd}t        «       j                  d¬«      }t        |d¬«      j                  |||¬«      }|j                  |usJ ‚|j                  |||¬«       t        |j                  j                  |j                  «       t        |j                  j                  |j                  «       t        «       j                  d¬«      }|j                  |||¬«       |j                  j                  «       }t        |d	d
¬«      j                  |||¬«      }|j                  |u sJ ‚t        |j                  j                  |«       t        «       j                  d¬«      }t        j                   d«      t        j                   dd«      fg}	t        ||	d
¬«      j                  |||¬«      }|j                  |usJ ‚| r||	d   d      }
nd}
|j                  ||	d   d      ||	d   d      |
¬«       t        |j                  j                  |j                  «       y)z-Check the behaviour of the `refit` parameter.r   r   r    )ÚoutNTrO   ©rw   rt   Fru   r#   )r4   ÚrandomÚRandomStater   ÚrandnrT   Úabsr   rU   r   rF   r‡   r   Úcoef_Ú
intercept_Úcopyr5   )r°   Úglobal_random_seedÚrngr;   r<   rP   r|   rˆ   Úcoefrv   Úsw_trains              r?   Ú%test_tuned_threshold_classifier_refitr¿   \  sU  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ¨¸1Ô=�D€A€qÙØŸ	™	 !§'¡'¨!¡*Ó-ˆÜŸ™˜}°-Ô@‰àˆô #Ó$×4Ñ4À4Ð4ÓH€IÜ& y¸Ô=×AÑAØ	ˆ1˜Mð Bó €Eð ×Ñ 9Ñ,Ð,Ð,Ø‡M�M�!�Q m€MÔ4Ü�E×$Ñ$×*Ñ*¨I¯O©OÔ<Ü�E×$Ñ$×/Ñ/°×1EÑ1EÔFô #Ó$×4Ñ4À4Ð4ÓH€IØ‡M�M�!�Q m€MÔ4Ø�?‰?×ÑÓ!€DÜ& y°XÀUÔK×OÑOØ	ˆ1˜Mð Pó €Eð ×Ñ˜yÑ(Ð(Ð(Ü�E×$Ñ$×*Ñ*¨DÔ1ô #Ó$×4Ñ4À4Ð4ÓH€Iä	�‰�2‹œŸ	™	 " cÓ*Ð+ð
€Bô ' y°R¸uÔE×IÑIØ	ˆ1˜Mð Jó €Eð ×Ñ 9Ñ,Ð,Ð,ÙØ   A¡ q¡Ñ*‰àˆØ‡M�M�!�B�q‘E˜!‘H‘+˜q  A¡ q¡™{¸(€MÔCÜ�E×$Ñ$×*Ñ*¨I¯O©OÕ<rA   c                 óØ   — t        dd¬«      \  }}t        || «      t        || «      dœ}t        ddgd¬«      }|j                  dd¬«       t	        |«      } |j
                  ||fi |¤Ž y	)
rb   r   r   r    rc   rd   re   rf   TN)r   r   r   rU   r   rF   )r^   r;   r<   r.   r=   rˆ   s         r?   Ú*test_tuned_threshold_classifier_fit_paramsrÁ   �  st   € ô ¨¸1Ô=�D€A€qä  ?Ó3Ü  ?Ó3ñ€Jô
 $¸¸c¸
ÐQRÔS€JØ×Ñ ¨ÐÔ.Ü& zÓ2€EØ€E‡I�Iˆa�Ñ!�jÓ!rA   c                  óŽ  — t        d¬«      \  } }t        «       j                  | «      } t        j                  | dd | dd f«      } t        j
                  |dd |dd f«      }t        j                  |«      }d|ddd…<   t        «       j                  d¬	«      }t        |d¬
«      }t        |«      }|j                  | ||¬	«       |j                  | ddd…   |ddd…   «       t        |j                  j                  |j                  j                  «       |j                  | «      }|j                  | «      }t        ||«       y)z|Check that passing removing some sample from the dataset `X` is
    equivalent to passing a `sample_weight` with a factor 0.TrM   Né(   r#   éZ   r$   rD   rO   )rv   )r   r   Úfit_transformr4   rQ   rR   Ú
zeros_liker   rU   r   r   rF   r   r‡   r¸   r%   )r;   r<   rP   r|   Úmodel_without_weightsÚmodel_with_weightsÚy_pred_with_weightsÚy_pred_without_weightss           r?   ÚCtest_tuned_threshold_classifier_cv_zeros_sample_weights_equivalencerË      s;  € ô  Ô%�D€A€qäÓ×&Ñ& qÓ)€Aô 	�	‰	�1�S�b�6˜1˜R ˜8Ð$Ó%€AÜ
�	‰	�1�S�b�6˜1˜R ˜8Ð$Ó%€AÜ—M‘M !Ó$€MØ€M‘#�A�#Ñä"Ó$×4Ñ4À4Ð4ÓH€IÜ6°yÀQÔGÐÜÐ4Ó5Ðà×Ñ˜1˜a¨}ÐÔ=Ø×Ñ˜a¡ ! ™f a©¨!¨¡fÔ-äØ×%Ñ%×+Ñ+Ð-B×-MÑ-M×-SÑ-Sôð -×:Ñ:¸1Ó=ÐØ2×@Ñ@ÀÓCÐÜÐ'Ð)?Õ@rA   c                  óÔ   — t        d¬«      \  } }t        «       }t        j                  ddd«      }t	        ||dd¬«      j                  | |«      }t        |j                  d   |«       y	)
zeCheck that we can pass an array to `thresholds` and it is used as candidate
    threshold internally.r   rC   r$   é   r%   T)r+   r*   r‘   r+   N)r   r   r4   Úlinspacer   rF   r   r•   )r;   r<   r|   r+   Útuned_models        r?   Ú0test_tuned_threshold_classifier_thresholds_arrayrÐ   ¾  si   € ô ¨AÔ.�D€A€qÜ"Ó$€IÜ—‘˜Q  2Ó&€JÜ,ØØØ'Øô	÷
 
�cˆ!ˆQƒið ô �K×+Ñ+¨LÑ9¸:ÕFrA   r‘   c                 ó®   — t        d¬«      \  }}t        «       }t        || ¬«      j                  ||«      }| rt	        |d«      sJ ‚yt	        |d«      rJ ‚y)zCCheck that if `cv_results_` exists depending on `store_cv_results`.r   rC   )r‘   r•   N)r   r   r   rF   r…   )r‘   r;   r<   r|   rÏ   s        r?   Ú0test_tuned_threshold_classifier_store_cv_resultsrÒ   Í  s`   € ô ¨AÔ.�D€A€qÜ"Ó$€IÜ,ØÐ$4ôç	�cˆ!ˆQƒið ñ Ü�{ MÔ2Ð2Ñ2ä˜;¨Ô6Ð6Ð6Ð6rA   c                  óX  — t        d¬«      \  } }d}t        «       }t        ||dd¬«      j                  | |«      }|j                  | |«       t	        d|d¬«      }t        |j                  | |«      «      \  }}t        |«      j                  | |   ||   «      }t        |j                  j                  |j                  «       |j                  d¬	«      j                  | |«       t        |«      j                  | |«      }t        |j                  j                  |j                  «       y
)z0Check the behaviour when `cv` is set to a float.r   rC   g333333Ó?F)rv   rw   r"   r$   )Ún_splitsÚ	test_sizer"   Tr³   N)r   r   r   rF   r   ÚnextÚsplitr   r   r‡   r¸   Ú
set_params)	r;   r<   rÕ   r|   rÏ   rv   r/   r0   Úcloned_estimators	            r?   Ú(test_tuned_threshold_classifier_cv_floatrÚ   Û  s	  € ä¨AÔ.�D€A€qð
 €IÜ"Ó$€IÜ,Ø�i u¸1ôç	�cˆ!ˆQƒið ð ‡O�O�A�qÔä	¨°iÈaÔ	P€BÜ˜bŸh™h q¨!›nÓ-Ñ€IˆwÜ˜YÓ'×+Ñ+¨A¨i©L¸!¸I¹,ÓGÐä�K×*Ñ*×0Ñ0Ð2B×2HÑ2HÔIð ×Ñ ÐÓ&×*Ñ*¨1¨aÔ0Ü˜YÓ'×+Ñ+¨A¨qÓ1Ðä�K×*Ñ*×0Ñ0Ð2B×2HÑ2HÕIrA   c                  óÞ   — t        d¬«      \  } }t        dd¬«      }t        |d¬«      }d}t        j                  t
        |¬	«      5  |j                  | |«       d
d
d
«       y
# 1 sw Y   y
xY w)z�Check that we raise a ValueError if the underlying classifier returns constant
    probabilities such that we cannot find any threshold.
    r   rC   Úconstantr$   )ÚstrategyrÜ   r%   )r*   z1The provided estimator makes constant predictionsrn   N)r   r	   r   rH   rp   rq   rF   )r;   r<   r|   rÏ   rr   s        r?   Ú8test_tuned_threshold_classifier_error_constant_predictorrÞ   ÷  s`   € ô ¨AÔ.�D€A€qÜ¨¸aÔ@€IÜ,¨YÈÔX€KØA€GÜ	�‰”z¨Ô	1ñ Ø�‰˜˜1Ô÷÷ ñ ús   ÁA#Á#A,)rŒ   r%   r�   c                 óp  — t        d¬«      \  }}t        «       j                  ||«      }t        t	        |«      | ¬«      }|j                  ||«       | dv r|j                  |«      dd…df   }d}n|j                  |«      }d}||k\  j                  t        «      }t        |j                  |«      |«       y)	z`Check that `FixedThresholdClassifier` has the same behaviour as the vanilla
    classifier.
    r   rC   )r|   r*   )rŒ   r%   Nr$   rE   g        )r   r   rF   r   r   r%   r�   ÚastypeÚintr   r”   )r*   r;   r<   r=   Úclassifier_default_thresholdÚy_scoreÚ	thresholdÚ	y_pred_lrs           r?   Ú3test_fixed_threshold_classifier_equivalence_defaultræ     s·   € ô ¨AÔ.�D€A€qÜ#Ó%×)Ñ)¨!¨QÓ/€JÜ#;Ü˜
Ó#°_ô$Ð ð !×$Ñ$ Q¨Ô*ð Ð3Ñ3Ø.×<Ñ<¸QÓ?ÂÀ1ÀÑEˆØ‰	à.×@Ñ@ÀÓCˆØˆ	à˜IÑ%×-Ñ-¬cÓ2€IÜÐ0×8Ñ8¸Ó;¸YÕGrA   zresponse_method, threshold)r%   gffffffæ?)r�   g       @r¥   c           	      ó  — t        dd¬«      \  }}t        «       j                  ||«      }t        t	        |«      || |¬«      j                  ||«      }t        |j                  j                  |j                  «       | dk(  r|j                  |«      dd…|f   }n|j                  |«      }|dk(  r|n| }|dk(  rt        j                  ddg«      nt        j                  ddg«      }|||k\  j                  t        «         }	t        |j                  |«      |	«       dD ]d  }
t         t        ||
«      |«       t        ||
«      |«      «       t         t        |j                  |
«      |«       t        ||
«      |«      «       Œf y)	z‚Check that applying `predict` lead to the same prediction as applying the
    threshold to the output of the response method.
    r#   r   r    )r|   rä   r*   r¥   r%   Nr$   r   )r   r   rF   r   r   r   r‡   r¸   r%   r�   r4   r`   rà   rá   r”   r†   )r*   rä   r¥   r;   r<   Úlogistic_regressionrˆ   rã   Úmap_to_labelrå   Úmethods              r?   Útest_fixed_threshold_classifierrë     sz  € ô ¨¸!Ô<�D€A€qÜ,Ó.×2Ñ2°1°aÓ8ÐÜ$ÜÐ+Ó,ØØ'Øô	÷
 
�cˆ!ˆQƒið 
ô �E×$Ñ$×*Ñ*Ð,?×,EÑ,EÔFð ˜/Ò)Ø×%Ñ% aÓ(ª¨I¨Ñ6‰à×)Ñ)¨!Ó,ˆØ&¨!š^‘'°'°ˆð (1°A¢~”2—8‘8˜Q ˜FÔ#¼2¿8¹8ÀQÈÀFÓ;K€LØ˜g¨Ñ2×:Ñ:¼3Ó?Ñ@€IÜ�E—M‘M !Ó$ iÔ0àMò 
ˆÜØ"ŒG�E˜6Ó" 1Ó%Ð'K¤wÐ/BÀFÓ'KÈAÓ'Nô	
ô 	Ø-ŒG�E×$Ñ$ fÓ-¨aÓ0Ø0ŒGÐ'¨Ó0°Ó3õ	
ñ	
rA   c                  ó^  — t        d¬«      \  } }t        j                  |«      }d|ddd…<   t        «       j	                  d¬«      }|j                  | ||¬«       t        t        |«      ¬«      }|j                  | ||¬«       t        |j                  j                  |j                  «       y)z2Check that everything works with metadata routing.r   rC   rD   NTrO   r„   )r   r4   rS   r   rU   rF   r   r   r   r‡   r¸   )r;   r<   rP   r=   râ   s        r?   Ú0test_fixed_threshold_classifier_metadata_routingrí   G  s—   € ô ¨AÔ.�D€A€qÜ—L‘L “O€MØ€M‘#�A�#ÑÜ#Ó%×5Ñ5ÀDÐ5ÓI€JØ‡N�N�1�a }€NÔ5Ü#;ÄeÈJÓFWÔ#XÐ Ø ×$Ñ$ Q¨¸Ð$ÔGÜÐ0×;Ñ;×AÑAÀ:×CSÑCSÕTrA   rê   )r%   r�   r”   r€   c                 ó’   — t        d¬«      \  }}t        «       j                  ||«      }t        |¬«      } t	        || «      |«       y)zMCheck that if the underlying estimator is already fitted, no fit is required.r   rC   r„   N)r   r   rF   r   r†   )rê   r;   r<   r=   Úfixed_threshold_classifiers        r?   Ú0test_fixed_threshold_classifier_fitted_estimatorrð   T  sD   € ô
 ¨AÔ.�D€A€qÜ#Ó%×)Ñ)¨!¨QÓ/€JÜ!9ÀJÔ!OÐà/„GÐ&¨Ó/°Õ2rA   c                  óJ  — t        d¬«      \  } }t        j                  t        d¬«      5  t	        t        «       ¬«      j                   ddd«       t        «       j                  | |«      }t	        |¬«      }t        |j                  |j                  «       y# 1 sw Y   ŒPxY w)z2Check that the classes_ attribute is properly set.r   rC   z+The underlying estimator is not fitted yet.rn   r„   N)	r   rH   rp   ÚAttributeErrorr   r   rª   rF   r   )r;   r<   r=   rï   s       r?   Ú(test_fixed_threshold_classifier_classes_ró   `  sˆ   € ä¨AÔ.�D€A€qÜ	�‰ÜÐKô
ñ Jô 	!Ô+=Ó+?Ô@×IÒI÷Jô
 $Ó%×)Ñ)¨!¨QÓ/€JÜ!9ÀJÔ!OÐÜÐ1×:Ñ:¸J×<OÑ<OÕP÷Jð Jús   «BÂB")HÚnumpyr4   rH   Úsklearnr   Úsklearn.baser   Úsklearn.datasetsr   r   r   r   Úsklearn.dummyr	   Úsklearn.ensembler
   Úsklearn.exceptionsr   Úsklearn.linear_modelr   Úsklearn.metricsr   r   r   r   Úsklearn.metrics._scorerr   Úsklearn.model_selectionr   r   r   Ú1sklearn.model_selection._classification_thresholdr   Úsklearn.pipeliner   Úsklearn.preprocessingr   Úsklearn.svmr   Úsklearn.treer   Úsklearn.utils._mockingr   Úsklearn.utils._testingr   r   r   r@   rJ   r]   ÚmarkÚparametrizerh   rs   rq   r{   r‹   r›   r¢   r¯   r¿   rÁ   rË   rÐ   rÒ   rÚ   rÞ   ræ   rë   rí   rð   ró   © rA   r?   ú<module>r	     s  ðÛ Û å "Ý ÷ó õ *Ý 7Ý -Ý 3÷ó õ 1÷ñ õ
õ +Ý 0Ý Ý /Ý 5÷ñ ò:ò<(ñ@ ¨Ô-ñ--ó .ð--ð` ‡�×ÑÐ*¨V°WÐ,=Ó>Ù¨Ô-ñó .ó ?ðð> ‡�×ÑØ
á a¸aÈaÔPÙ&°AÔ6ðóñDóðDð ‡�×ÑØð  dÑ+ØØ5ð	
ð  Ñ&ØØ?ð	
ð  eÑ,ØØ)ð	
ðóñ(Mó)ð(Mð ‡�×ÑØÙÓ™3›5Ñ"<È!Ô"LÐMóð ‡�×ÑØÒRóð ‡�×ÑØÐ4Ð6PÐQóñDóóó	ðDð* ‡�×ÑØÒEóñ>óð>ò>Yð* ‡�×ÑØÒEóð ‡�×ÑØáÐ+Ó,Ù�H¨Ô1ðóñ<óóð<ð, ‡�×ÑÐ-°°e¨}Ó=Ù¨Ô-ñ/=ó .ó >ð/=ðd ‡�×ÑÐ*¨V°WÐ,=Ó>Ù¨Ô-ñ"ó .ó ?ð"ñ ¨Ô-ñAó .ðAò:Gð ‡�×ÑÐ+¨d°E¨]Ó;ñ
7ó <ð
7òJò8	ð ‡�×ÑØÒEóñHóðHð. ‡�×ÑØ Ð#9Ð;UÐ"Vóð ‡�×Ñ˜ q¨! fÓ-ñ#
ó .óð#
ñL ¨Ô-ñ	Uó .ð	Uð ‡�×ÑØÒTóñ3óð3ó
QrA   