
    Ug              
          d dl Zd dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZmZm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mZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB dZC ejD        d          d             ZEejF        G                    deB          ejF        G                    dddg          ejF        G                    d d!d"g          d#                                     ZHd$ ZIejF        G                    d d!d"g          d%             ZJd& ZKejF        G                    dddg          ejF        G                    d d!d"g          d'                         ZLejF        G                    dddg          ejF        G                    d d!d"g          d(                         ZMejF        G                    dddg          ejF        G                    d d!d"g          ejF        G                    d) eNd*                    d+                                     ZOd, ZPejF        G                    deB          d-             ZQejF        G                    dddg          d.             ZRd/ ZSd0 ZTejF        G                    d d!d"g          d1             ZUejF        G                    d d!d"g          d2             ZVejF        G                    d d!d"g          d3             ZWejF        G                    d4ejX        Y                    d5          Z                    d6d7d*          ejX        Y                    d5          Z                    d6d7d*d8          g          d9             Z[ejD        d:             Z\ejD        d;             Z]d< Z^ejF        G                    d= ej_         e5d>?          d*           ej_         e5d>?          d@          g          dA             Z`dB ZadC Zb ejD        d          dD             Zc ejD        d          dE             ZdejF        G                    dFd7dGg          ejF        G                    dHdIdJg          dK                         ZedL ZfejF        G                    dMdNdOg          dP             ZgdQ ZhejF        G                    dRdSdTg          dU             ZidV ZjejF        G                    dWekelg          dX             ZmejF        G                    dWekelg          dY             ZnejF        G                    dZg d[          d\             ZoejF        G                    dddg          ejF        G                    d d!d"g          d]                         ZpejF        G                    d^d_d`g          da             ZqejF        G                    dbdcgeCz   ejr        eC          g          dd             Zsde ZtejF        G                    dddg          ejF        G                    d d!d"g          df                         Zudg Zvdh Zwdi Zxdj Zydk ZzdS )l    N)assert_allclose)BaseEstimatorclone)CalibratedClassifierCVCalibrationDisplay_CalibratedClassifier_sigmoid_calibration_SigmoidCalibrationcalibration_curve)	load_iris
make_blobsmake_classification)DummyClassifier)RandomForestClassifierVotingClassifier)NotFittedError)DictVectorizer)SimpleImputer)IsotonicRegression)LogisticRegressionSGDClassifier)brier_score_loss)KFoldLeaveOneOutcheck_cvcross_val_predictcross_val_scoretrain_test_split)MultinomialNB)Pipelinemake_pipeline)LabelEncoderStandardScaler)	LinearSVC)DecisionTreeClassifier)CheckingClassifier)_convert_containerassert_almost_equalassert_array_almost_equalassert_array_equal)softmax)CSR_CONTAINERS   module)scopec                  >    t          t          dd          \  } }| |fS )N   *   	n_samples
n_featuresrandom_state)r   	N_SAMPLESXys     ]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/tests/test_calibration.pydatar<   7   s#    qrRRRDAqa4K    csr_containermethodsigmoidisotonicensembleTFc                    t           dz  }| \  }}t          j                            d                              |j                  }||                                z  }|d |         |d |         |d |         }
}	}||d          ||d          }}t                                          ||	|
          }|	                    |          d d df         }t          ||j        dz   |          }t          j        t                    5  |                    ||           d d d            n# 1 swxY w Y   ||f ||           ||          ffD ]\  }}t          ||d|	          }|                    ||	|
           |	                    |          d d df         }t          ||          t          ||          k    sJ |                    ||	dz   |
           |	                    |          d d df         }t          ||           |                    |d|	z  dz
  |
           |	                    |          d d df         }t          ||           |                    ||	dz   dz  |
           |	                    |          d d df         }|d
k    rt          |d|z
             ct          ||          t          |dz   dz  |          k    sJ d S )N   r2   seedsizesample_weight   cvrB      r?   rM   rB   r@   )r7   nprandomRandomStateuniformrH   minr   fitpredict_probar   pytestraises
ValueErrorr   r)   )r<   r?   r>   rB   r4   r9   r:   rJ   X_trainy_trainsw_trainX_testy_testclfprob_pos_clfcal_clfthis_X_trainthis_X_testprob_pos_cal_clfprob_pos_cal_clf_relabeleds                       r;   test_calibrationrf   =   s   
 QIDAqI))r)22:::GGMLA "#:I:*9*}ZiZ?XhWGyzz]AijjMFF //

gwh

G
GC$$V,,QQQT2L$SQVaZ(KKKG	z	"	"  Aq              
 
&	w		v!6!67& # #!k )VHUUU 	L'BBB"00==aaadC  558H$9
 9
 
 
 
 

 	L'A+XFFF%,%:%:;%G%G1%M"!"24NOOO 	L!g+/JJJ%,%:%:;%G%G1%M"!"24NOOO 	L7Q;!"38LLL%,%:%:;%G%G1%M"Y%&6<V8VWWWW $FL99<L!q "<= =     C# #s   D++D/2D/c                     | \  }}t          d          }|                    ||           |j        d         j        }t	          |t
                    sJ d S )NrD   rM   r   )r   rU   calibrated_classifiers_	estimator
isinstancer$   )r<   r9   r:   	calib_clfbase_ests        r;   "test_calibration_default_estimatorrn   {   s[    DAq&!,,,IMM!Q03=Hh	*******r=   c                    | \  }}d}t          |          }t          ||          }t          |j        t                     sJ |j        j        |k    sJ |                    ||           |r|nd}t          |j                  |k    sJ d S )NrN   n_splitsrL   rK   )r   r   rk   rM   rq   rU   lenri   )r<   rB   r9   r:   splitskfoldrl   expected_n_clfs           r;   test_calibration_cv_splitterrv      s     DAqF6"""E&%(CCCIilE*****< F****MM!Q'.VVQNy011^CCCCCCr=   c                    | \  }}t          d          }t          |d          }t          j        t          d          5  |                    ||           d d d            n# 1 swxY w Y   t          t                      d          }t          j        t          d          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Ne   rp   TrL   z$Requesting 101-fold cross-validationmatchz!LeaveOneOut cross-validation does)r   r   rW   rX   rY   rU   r   )r<   r9   r:   rt   rl   s        r;   test_calibration_cv_nfoldr{      sR   DAq3E&%$???I	z)O	P	P	P  a               '+--$GGGI	z)L	M	M	M  a                 s$   A%%A),A)(CCCc                 >   t           dz  }| \  }}t          j                            d                              t          |                    }|d |         |d |         |d |         }	}}||d          }
t          d          }t          |||          }|                    |||	           |	                    |
          }|                    ||           |	                    |
          }t          j
                            ||z
            }|dk    sJ d S )	NrD   r2   rE   rG   r6   )r?   rB   rI   皙?)r7   rP   rQ   rR   rS   rr   r$   r   rU   rV   linalgnorm)r<   r?   rB   r4   r9   r:   rJ   rZ   r[   r\   r]   rj   calibrated_clfprobs_with_swprobs_without_swdiffs                   r;   test_sample_weightr      s     QIDAqI))r)22::A:GGM!":I:*9*}ZiZ?XhWGyzz]Fr***I+IfxXXXNwx@@@"0088M w(((%33F;;9>>-*::;;D#::::::r=   c                    | \  }}t          ||d          \  }}}}t          t                      t          d                    }	t	          |	|d|          }
|
                    ||           |
                    |          }t	          |	|d|          }|                    ||           |                    |          }t          ||           dS )zTest parallel calibrationr2   r}   rD   )r?   n_jobsrB   rK   N)r   r!   r#   r$   r   rU   rV   r   )r<   r?   rB   r9   r:   rZ   r]   r[   r^   rj   cal_clf_parallelprobs_parallelcal_clf_sequentialprobs_sequentials                 r;   test_parallel_executionr      s     DAq'712'N'N'N$GVWfn..	r0J0J0JKKI-&X   '***%33F;;N/&X   7G,,,)77??N$455555r=   rF   rD   c                    d }t          d          }t          dd|dd          \  }}d	||d	k    <   t          j        |          j        d
         }|d d d	         |d d d	         }	}|dd d	         |dd d	         }}
|                    ||	           t          || d|          }|                    ||	           |                    |
          }t          t          j	        |d          t          j
        t          |
                               d|                    |
|          cxk     rdk     sn J |                    |
|          d|                    |
|          z  k    sJ  ||t          |                    |
                    |          } ||||          }|d|z  k     sJ t          dd          }|                    ||	           |                    |
          } ||||          }t          || d|          }|                    ||	           |                    |
          } ||||          }|d|z  k     sJ d S )Nc                     t          j        |          |          }t          j        ||z
  dz            |j        d         z  S )NrD   r   )rP   eyesumshape)y_true
proba_pred	n_classesY_onehots       r;   multiclass_brierz5test_calibration_multiclass.<locals>.multiclass_brier   s<    6)$$V,vx*,233hnQ6GGGr=      r}   i  d   
         .@r4   r5   r6   centerscluster_stdrD   r   rK   rN   rO   axis?gffffff?)r   g?   r2   )n_estimatorsr6   )r$   r   rP   uniquer   rU   r   rV   r   r   onesrr   scorer+   decision_functionr   )r?   rB   rF   r   r_   r9   r:   r   rZ   r[   r]   r^   ra   probasuncalibrated_briercalibrated_brier	clf_probscal_clf_probss                     r;   test_calibration_multiclassr      s   H H H 
#
#
#C#D"RV  DAq Aa!eH	!"1%I1vq1vWGqt!tWa1gFFGGGW$SAQQQGKK!!!""6**FBF6***BGCKK,@,@AAA
 #))FF++2222d222222 ==((4#))FF2K2K+KKKKK
 *)--f5566)   (')LLLc$666666 !br
B
B
BCGGGW!!&))I))&)yQQQ$SAQQQGKK!!!))&11M''SSSc$66666666r=   c                  0    G d d          } t          ddddd          \  }}t                                          ||          } |             }t          ||g|j                  }|                    |          }t          |d	|j        z             d S )
Nc                       e Zd Zd ZdS )9test_calibration_zero_probability.<locals>.ZeroCalibratorc                 @    t          j        |j        d                   S )Nr   )rP   zerosr   selfr9   s     r;   predictzAtest_calibration_zero_probability.<locals>.ZeroCalibrator.predict  s    8AGAJ'''r=   N)__name__
__module____qualname__r    r=   r;   ZeroCalibratorr     s#        	( 	( 	( 	( 	(r=   r   2   r   r   r   r   )rj   calibratorsclasses      ?)r   r   rU   r   classes_rV   r   
n_classes_)r   r9   r:   r_   
calibratorra   r   s          r;   !test_calibration_zero_probabilityr     s    
( ( ( ( ( ( ( (
 !RT  DAq 



1
%
%C!!J#J<  G ""1%%F FC#.011111r=   c                    d}t          d|z  dd          \  }}t          j                            d                              |j                  }||                                z  }|d|         |d|         |d|         }}}||d	|z           ||d	|z           ||d	|z           }
}	}|d	|z  d         |d	|z  d         }}t                      }t          |d
          }t          j
        t                    5  |                    ||	           ddd           n# 1 swxY w Y   |                    |||           |                    |          dddf         }||f | |           | |          ffD ]\  }}dD ]}t          ||d
          }|
dfD ]}|                    ||	|           |                    |          }|                    |          }|dddf         }t          |t          j        ddg          t          j        |d                              t%          ||          t%          ||          k    sJ ̌dS )z*Test calibration for prefitted classifiersr      r1   r2   r3   rE   rG   NrD   prefitrh   rK   )rA   r@   )r?   rM   rI   r   r   )r   rP   rQ   rR   rS   rH   rT   r   r   rW   rX   r   rU   rV   r   r*   arrayargmaxr   )r>   r4   r9   r:   rJ   rZ   r[   r\   X_caliby_calibsw_calibr]   r^   r_   	unfit_clfr`   this_X_calibrc   r?   ra   swy_proby_predrd   s                           r;   test_calibration_prefitr   .  s    IY1SUVVVDAqI))r)22:::GGMLA "#:I:*9*}ZiZ?XhWG	)a)m
#$	)a)m
#$i!i-/0 WG
 q9}'1y=??);FF //C&sx888I	~	&	& ( (gw'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( GGGWh'''$$V,,QQQT2L 
&	w		v!6!67&  !k . 	 	F,SHMMMG& 	 	L'DDD ..{;; 55#)!!!Q$< "628QF+;+;BIfST<U<U<U+VWWW'==@P,A A     			 s   D%%D),D)c                    | \  }}t          d          }t          ||dd          }|                    ||           |                    |          }t	          |||dd          }|dk    rt          d	
          }nt                      }|                    ||           |                    ||           |                    |          }	|                    |	          }
t          |d d df         |
           d S )Nr   r}   r   FrO   r   )rM   r?   rA   clip)out_of_boundsrK   )
r$   r   rU   rV   r   r   r
   r   r   r   )r<   r?   r9   r:   r_   ra   
cal_probasunbiased_predsr   clf_dfmanual_probass              r;   test_calibration_ensemble_falser   ^  s    DAq

#
#
#C$SANNNGKK1&&q))J 'sAqQ?RSSSN'f===

(**
NN>1%%%GGAqMMM""1%%F&&v..MJqqq!t$m44444r=   c                  |   t          j        g d          } t          j        g d          }t          j        ddg          }t          |t          | |          d           ddt          j        |d         | z  |d         z             z   z  }t                                          | |                              |           }t          ||d	           t          j	        t                    5  t                                          t          j        | | f          |           d
d
d
           d
S # 1 swxY w Y   d
S )z0Test calibration values with Platt sigmoid model)rN   r   )rK   r   gj=ɿgY90(?r   r   r   rK   r1   N)rP   r   r)   r	   expr
   rU   r   rW   rX   rY   vstack)exFexYAB_lin_libsvmlin_probsk_probs        r;   test_sigmoid_calibrationr   w  sc   
(<<<
 
 C
(;;;

CH24GHIIMm-A#s-K-KQOOOcBF=#3c#9M!<L#LMMMNH!##''S1199#>>Gh333 
z	"	" > >!!")S#J"7"7===> > > > > > > > > > > > > > > > > >s   -7D11D58D5c                     t          j        g d          } t          j        g d          }t          | |d          \  }}t          |          t          |          k    sJ t          |          dk    sJ t	          |ddg           t	          |ddg           t          j        t                    5  t          dgd	g           d
d
d
           n# 1 swxY w Y   t          j        g d          }t          j        g d          }t          ||dd          \  }}t          |          t          |          k    sJ t          |          dk    sJ t	          |ddg           t	          |ddg           t          j        t                    5  t          ||d           d
d
d
           d
S # 1 swxY w Y   d
S )z Check calibration_curve function)r   r   r   rK   rK   rK   )        r~   皙?皙??r   rD   n_binsr   rK   r~   r   gN)r   r   r   r   rK   rK   )r   r~   r         ?r   r   quantiler   strategygUUUUUU?r   
percentile)r   )rP   r   r   rr   r(   rW   rX   rY   )r   r   	prob_true	prob_predy_true2y_pred2prob_true_quantileprob_pred_quantiles           r;   test_calibration_curver     sx   X((())FX44455F,VVAFFFIyy>>S^^++++y>>Q	Aq6***	C:... 
z	"	" ' '1#v&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' h)))**Gh55566G->Z. . .** !""c*<&=&=====!""a''''*QJ777*S#J777 
z	"	" C C'7\BBBBC C C C C C C C C C C C C C C C C Cs$   6CCCF66F:=F:c                 ,   t          ddddd          \  }}t          j        |d<   t          dt	                      fdt          d	
          fg          }t          |dd|           }|                    ||           |                    |           dS )z$Test that calibration can accept nanr   rD   r   r2   )r4   r5   n_informativen_redundantr6   r   r   imputerrfrK   )r   rA   )rM   r?   rB   N)	r   rP   nanr    r   r   r   rU   r   )rB   r9   r:   r_   clf_cs        r;   test_calibration_nan_imputerr     s     !QS  DAq fAdG

]__	%.DRS.T.T.T'UV C #31Z(SSSE	IIaOOO	MM!r=   c                 6   t          ddd          \  }}g d}t          dd          }t          |d	t          d
          |           }|                    ||           t          |                    |                              d          d           d S )Nr   rN   rD   )r4   r5   r   )
rK   rK   rK   rK   rK   r   r   r   r   r   r   r   )Cr6   r@   r   rp   rO   rK   r   )r   r$   r   r   rU   r   rV   r   )rB   r9   _r:   r_   clf_probs         r;   test_calibration_prob_sumr    s     QGGGDAq&&&A
c
*
*
*C%I%"3"3"3h  H LLAH**1--11q1993?????r=   c           	         t           j                            dd          }g dg dz   g dz   }t          d          }t	          |dt          d	          | 
          }|                    ||           | rt          j        d          }t          ddgdd	g          D ]\  }}|j	        |         
                    |          }t          |d d |f         t          j        t          |                               t          j        |d d ||k    f         dk              sJ d S |j	        d         
                    |          }t          |                    d          t          j        |j        d                              d S )N   rN   )r   r   r   rK   )rK   rK   rD   rD   )rD   r   r   r   r   r}   r@   r   rO      r   rD   rK   r   )rP   rQ   randnr%   r   r   rU   arangezipri   rV   r*   r   rr   allr)   r   r   r   )	rB   r9   r:   r_   ra   r   calib_iclass_iprobas	            r;   test_calibration_less_classesr    s    		AA|||#lll2A
 a
0
0
0C$I%((X  G KK1 N)A,, #QFQF 3 3 	< 	<GW3G<JJ1MMEuQQQZ0"(3q662B2BCCC6%7g#5 56:;;;;;;	< 	< /2@@CC!%)))"3"3RWU[^5L5LMMMMMr=   r9   r2      rN   r1   c                     g d} G d dt                     }t           |                      }|                    | |           dS )z;Test that calibration accepts n-dimensional arrays as input)rK   r   r   rK   rK   r   rK   rK   r   r   rK   r   r   rK   r   c                   "    e Zd ZdZdZd Zd ZdS )>test_calibration_accepts_ndarray.<locals>.MockTensorClassifierz*A toy estimator that accepts tensor inputs
classifierc                 8    t          j        |          | _        | S N)rP   r   r   )r   r9   r:   s      r;   rU   zBtest_calibration_accepts_ndarray.<locals>.MockTensorClassifier.fit  s    IaLLDMKr=   c                 l    |                     |j        d         d                              d          S )Nr   r   rK   r   )reshaper   r   r   s     r;   r   zPtest_calibration_accepts_ndarray.<locals>.MockTensorClassifier.decision_function  s-    99QWQZ,,00a0888r=   N)r   r   r   __doc___estimator_typerU   r   r   r=   r;   MockTensorClassifierr    s=        88&	 	 		9 	9 	9 	9 	9r=   r  N)r   r   rU   )r9   r:   r  r   s       r;    test_calibration_accepts_ndarrayr    sn     	655A9 9 9 9 9} 9 9 9 ,,@,@,B,BCCNq!r=   c                  .    dddddddddg} g d}| |fS )NNYadult)stateageTXVTchild)rK   r   rK   r   )	dict_datatext_labelss     r;   r$  r$     sB     w''w''w''I
 ))Kk!!r=   c                     | \  }}t          dt                      fdt                      fg          }|                    ||          S )N
vectorizerr_   )r    r   r   rU   )r$  r9   r:   pipeline_prefits       r;   dict_data_pipeliner)    sQ    DAq
((	)E3I3K3K+LM O q!$$$r=   c                 2   | \  }}|}t          |d          }|                    ||           t          |j        |j                   t	          |d          rJ t	          |d          rJ |                    |           |                    |           dS )aR  Test that calibration works in prefit pipeline with transformer

    `X` is not array-like, sparse matrix or dataframe at the start.
    See https://github.com/scikit-learn/scikit-learn/issues/8710

    Also test it can predict without running into validation errors.
    See https://github.com/scikit-learn/scikit-learn/issues/19637
    r   rh   n_features_in_N)r   rU   r*   r   hasattrr   rV   )r$  r)  r9   r:   r_   rl   s         r;   test_calibration_dict_pipeliner-    s     DAq
C&sx888IMM!Qy)3<888 s,-----y"233333 aAr=   zclf, cvrK   r   r   c                    t          dddd          \  }}|dk    r|                     ||          } t          | |          }|                    ||           |dk    r.t          |j        | j                   |j        | j        k    sJ d S t                                          |          j        }t          |j        |           |j        |j        d         k    sJ d S )	Nr   rN   rD   r   r4   r5   r   r6   r   rh   rK   )r   rU   r   r*   r   r+  r"   r   )r_   rM   r9   r:   rl   r   s         r;   test_calibration_attributesr1  .  s     QUVWWWDAq	X~~ggamm&sr222IMM!Q	X~~9-s|<<<'3+=======..$$Q''09-w777'171:555555r=   c                  L   t          dddd          \  } }t          d                              | |          }t          |d	          }d
}t	          j        t          |          5  |                    | d d d df         |           d d d            d S # 1 swxY w Y   d S )Nr   rN   rD   r   r0  rK   r.  r   rh   zAX has 3 features, but LinearSVC is expecting 5 features as input.ry   r   )r   r$   rU   r   rW   rX   rY   )r9   r:   r_   rl   msgs        r;   2test_calibration_inconsistent_prefit_n_features_inr4  F  s     QUVWWWDAq
a...

Q
"
"C&sx888I
MC	z	-	-	- # #a2A2h"""# # # # # # # # # # # # # # # # # #s   )#BB Bc                      t          dddd          \  } }t          d t          d          D             d	          }|                    | |           t	          |d
          }|                    | |           d S )Nr   rN   rD   r   r0  c                 N    g | ]"}d t          |          z   t                      f#S )lr)strr   ).0is     r;   
<listcomp>z5test_calibration_votingclassifier.<locals>.<listcomp>X  s.    LLLaTCFF]$6$8$89LLLr=   r   soft)
estimatorsvotingr   )rj   rM   )r   r   rangerU   r   )r9   r:   voterl   s       r;   !test_calibration_votingclassifierrA  R  s     QUVWWWDAqLL588LLL  D 	HHQNNN&(CCCIMM!Qr=   c                  "    t          d          S )NT
return_X_y)r   r   r=   r;   	iris_datarE  b  s    %%%%r=   c                 <    | \  }}||dk              ||dk              fS )NrD   r   )rE  r9   r:   s      r;   iris_data_binaryrG  g  s&    DAqQU8Qq1uXr=   r   r   r   rS   r   c                    |\  }}t                                          ||          }t          j        |||||d          }|                    |          d d df         }t          ||||          \  }	}
t          |j        |	           t          |j        |
           t          |j	        |           |j
        dk    sJ dd l}t          |j        |j        j                  sJ |j                                        dk    sJ t          |j        |j        j                  sJ t          |j        |j        j                  sJ |j                                        dk    sJ |j                                        dk    sJ dd	g}|j                                                                        }t7          |          t7          |          k    sJ |D ]}|                                |v sJ d S )
Nr   )r   r   alpharK   r   r   r   z.Mean predicted probability (Positive class: 1)z)Fraction of positives (Positive class: 1)Perfectly calibrated)r   rU   r   from_estimatorrV   r   r   r   r   r   estimator_name
matplotlibrk   line_linesLine2D	get_alphaax_axesAxesfigure_figureFigure
get_xlabel
get_ylabel
get_legend	get_textsrr   get_text)pyplotrG  r   r   r9   r:   r7  vizr   r   r   mplexpected_legend_labelslegend_labelslabelss                  r;    test_calibration_display_computerc  m  s%    DAq				!	!!Q	'	'B

+
Aq(#  C a  A&F,	6&8  Iy CM9---CM9---CJ'''!55555 ci!1222229  C''''cgsx}-----ck3:#4555557#SSSSS7#NNNNN24JKG&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r=   c                    |\  }}t          t                      t                                }|                    ||           t	          j        |||          }|j        dg}|j                                        	                                }t          |          t          |          k    sJ |D ]}|                                |v sJ d S )NrJ  )r!   r#   r   rU   r   rK  rL  rR  rZ  r[  rr   r\  )	r]  rG  r9   r:   r_   r^  r`  ra  rb  s	            r;   $test_plot_calibration_curve_pipelinere    s    DAq
((*<*>*>
?
?CGGAqMMM

+CA
6
6C!02HIG&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r=   zname, expected_label)N_line1)my_estrg  c                    t          j        g d          }t          j        g d          }t          j        g           }t          ||||          }|                                 |g n|g}|                    d           |j                                                                        }t          |          t          |          k    sJ |D ]}	|		                                |v sJ d S )Nr   rK   rK   r   r   r   r   皙?rL  rJ  )
rP   r   r   plotappendrR  rZ  r[  rr   r\  )
r]  nameexpected_labelr   r   r   r^  r`  ra  rb  s
             r;   'test_calibration_display_default_labelsrq    s     &&I---..IXb\\F
Y	6$
O
O
OCHHJJJ#'<RRdV!!"8999G&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r=   c                    t          j        g d          }t          j        g d          }t          j        g           }d}t          ||||          }|j        |k    sJ d}|                    |           |dg}|j                                                                        }t          |          t          |          k    sJ |D ]}|	                                |v sJ d S )Nri  rj  zname onerl  zname tworo  rJ  )
rP   r   r   rL  rm  rR  rZ  r[  rr   r\  )	r]  r   r   r   ro  r^  r`  ra  rb  s	            r;   )test_calibration_display_label_class_plotrt    s    &&I---..IXb\\FD
Y	6$
O
O
OC%%%%DHH$H"$:;G&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r=   constructor_namerK  from_predictionsc                    |\  }}d}t                                          ||          }|                    |          d d df         }t          t          |           }| dk    r|||fn||f}	 ||	d|i}
|
j        |k    sJ |                    d           |
                                 |dg}|
j        	                                
                                }t          |          t          |          k    sJ |D ]}|                                |v sJ |                    d           d}|
                    |           t          |          t          |          k    sJ |D ]}|                                |v sJ d S )	Nzmy hand-crafted namerK   rK  ro  r
  rJ  another_namers  )r   rU   rV   getattrr   rL  closerm  rR  rZ  r[  rr   r\  )ru  r]  rG  r9   r:   clf_namer_   r   constructorparamsr^  r`  ra  rb  s                 r;   ,test_calibration_display_name_multiple_callsr~    s    DAq%H



"
"1a
(
(Cq!!!!!Q$'F,.>??K,0@@@c1a[[q&kF
+v
-H
-
-C))))
LLHHJJJ&(>?G&&((2244M}%;!<!<<<<< ; ;  $::::::
LLHHH(H}%;!<!<<<<< ; ;  $::::::; ;r=   c                 r   |\  }}t                                          ||          }t                                          ||          }t          j        |||          }t          j        ||||j                  }|j                                        d         }|                    d          dk    sJ d S )N)axrK   rJ  )r   rU   r%   r   rK  rR  get_legend_handles_labelscount)	r]  rG  r9   r:   r7  dtr^  viz2rb  s	            r;   !test_calibration_display_ref_liner    s    DAq				!	!!Q	'	'B		!	!	%	%a	+	+B

+B1
5
5C,RA#'BBBDX//11!4F<<.//1444444r=   dtype_y_strc                 L   t           j                            d          }t          j        dgdz  dgdz  z   |           }|                    dd|j                  }d	}t          j        t          |
          5  t          ||           ddd           dS # 1 swxY w Y   dS )zKCheck error message when a `pos_label` is not specified with `str` targets.r2   spamr   eggsrD   dtyper   rG   zy_true takes value in {'eggs', 'spam'} and pos_label is not specified: either make y_true take value in {0, 1} or {-1, 1} or pass pos_label explicitlyry   N)
rP   rQ   rR   r   randintrH   rW   rX   rY   r   )r  rngy1y2err_msgs        r;   *test_calibration_curve_pos_label_error_strr    s     )


#
#C	6(Q,&A-[	A	A	AB	Q	(	(B	$ 
 
z	1	1	1 " ""b!!!" " " " " " " " " " " " " " " " " "s   ;BB Bc                    t          j        g d          }t          j        ddg|           }||         }t          j        g d          }t          ||d          \  }}t          |g d           t          ||dd	          \  }}t          |g d           t          |d
|z
  dd	          \  }}t          |g d           t          |d
|z
  dd	          \  }}t          |g d           dS )z8Check the behaviour when passing explicitly `pos_label`.)	r   r   r   rK   rK   rK   rK   rK   rK   r  eggr  )	r~   r   g333333?rk  r   gffffff?r   r   r   r  r   )r   r   rK   rK   )r   	pos_labelrK   r   )r   r   r   rK   N)rP   r   r   r   )r  r   r   
y_true_strr   r   r  s          r;    test_calibration_curve_pos_labelr    s    X11122Fhk:::GJXDDDEEF %VVA>>>LIqI~~~...$ZUSSSLIqI~~~...$VQZQOOOLIqI~~~...$ZVAQWXXXLIqI~~~.....r=   zpos_label, expected_pos_label))NrK   r   )rK   rK   c                    |\  }}t                                          ||          }t          j        ||||          }|                    |          dd|f         }t          |||          \  }	}
t          |j        |	           t          |j        |
           t          |j	        |           |j
                                        d| dk    sJ |j
                                        d| dk    sJ |j        j        dg}|j
                                                                        }t#          |          t#          |          k    sJ |D ]}|                                |v sJ dS )z?Check the behaviour of `pos_label` in the `CalibrationDisplay`.)r  Nz,Mean predicted probability (Positive class: )z'Fraction of positives (Positive class: rJ  )r   rU   r   rK  rV   r   r   r   r   r   rR  rX  rY  	__class__r   rZ  r[  rr   r\  )r]  rG  r  expected_pos_labelr9   r:   r7  r^  r   r   r   r`  ra  rb  s                 r;   "test_calibration_display_pos_labelr  "  s   
 DAq				!	!!Q	'	'B

+B1	
J
J
JCa  $6!67F,Q)LLLIyCM9---CM9---CJ''' 	O:LOOO	P 	P 	P 	P 	J5GJJJ	K 	K 	K 	K !l35KLG&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r=   c                    t          d          \  }}t                                          |          }|dd         |dd         }}t          j        |          dz  }t          j        |j        d         dz  |j        d         f|j                  }||dddddf<   ||dddddf<   t          j        |j        d         dz  |j                  }||ddd<   ||ddd<   t                      }t          || |d	          }t          |          }	|	                    |||
           |                    ||           t          |	j        |j                  D ])\  }
}t          |
j        j        |j        j                   *|	                    |          }|                    |          }t          ||           dS )zrCheck that passing repeating twice the dataset `X` is equivalent to
    passing a `sample_weight` with a factor 2.TrC  Nr   rD   r   rK   r  r?   rB   rM   rI   )r   r#   fit_transformrP   	ones_liker   r   r  r   r   r   rU   r	  ri   r   rj   coef_rV   )r?   rB   r9   r:   rJ   X_twicey_twicerj   calibrated_clf_without_weightscalibrated_clf_with_weightsest_with_weightsest_without_weightsy_pred_with_weightsy_pred_without_weightss                 r;   ?test_calibrated_classifier_cv_double_sample_weights_equivalencer  C  s   
 %%%DAq&&q))ATcT7AdsdGqALOOa'M h
Q
317CCCGGCCaCFOGADqD!!!GhqwqzA~QW555GGCCaCLGADqDM"$$I%;	& & &" #((F"G"G##Aq#FFF"&&w888 25#;&>2 2 
 
-- 	&,)/	
 	
 	
 	
 6CCAFF;II!LL')?@@@@@r=   fit_params_typelistr   c                     |\  }}t          ||           t          ||           d}t          ddg          }t          |          } |j        ||fi | dS )zTests that fit_params are passed to the underlying base estimator.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/12384
    )abr  r  )expected_fit_paramsN)r'   r&   r   rU   )r  r<   r9   r:   
fit_paramsr_   pc_clfs          r;    test_calibration_with_fit_paramsr  u  sx     DAq?33?33 J
 #s
<
<
<C#C((FFJq!""z"""""r=   rJ   r   c                 ~    |\  }}t          d          }t          |          }|                    |||            dS )zMTests that sample_weight is passed to the underlying base
    estimator.
    T)expected_sample_weightrI   N)r&   r   rU   )rJ   r<   r9   r:   r_   r  s         r;   -test_calibration_with_sample_weight_estimatorr    sH     DAq
D
9
9
9C#C((F
JJq!=J11111r=   c                 $   | \  }}t          j        |          } G d dt                    } |            }t          |          }t	          j        t                    5  |                    |||           ddd           dS # 1 swxY w Y   dS )zCheck that even if the estimator doesn't support
    sample_weight, fitting with sample_weight still works.

    There should be a warning, since the sample_weight is not passed
    on to the estimator.
    c                        e Zd Z fdZ xZS )Ptest_calibration_without_sample_weight_estimator.<locals>.ClfWithoutSampleWeightc                 F    d|vsJ  t                      j        ||fi |S )NrJ   superrU   )r   r9   r:   r  r  s       r;   rU   zTtest_calibration_without_sample_weight_estimator.<locals>.ClfWithoutSampleWeight.fit  s4    "*4444577;q!22z222r=   r   r   r   rU   __classcell__r  s   @r;   ClfWithoutSampleWeightr    s8        	3 	3 	3 	3 	3 	3 	3 	3 	3r=   r  rI   N)rP   r  r&   r   rW   warnsUserWarningrU   )r<   r9   r:   rJ   r  r_   r  s          r;   0test_calibration_without_sample_weight_estimatorr    s     DAqLOOM3 3 3 3 3!3 3 3 3
 !
 
"
"C#C((F	k	"	" 6 6

1a}
5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   BB	B	c                    t          d          \  }}t                                          |          }t          j        |dd         |dd         f          }t          j        |dd         |dd         f          }t          j        |          }d|ddd<   t                      }t          || |d	          }t          |          }|
                    |||
           |
                    |ddd         |ddd                    t          |j        |j                  D ])\  }}	t          |j        j        |	j        j                   *|                    |          }
|                    |          }t          |
|           dS )z|Check that passing removing some sample from the dataset `X` is
    equivalent to passing a `sample_weight` with a factor 0.TrC  N(   r   Z   rK   rD   r  rI   )r   r#   r  rP   r   hstack
zeros_liker   r   r   rU   r	  ri   r   rj   r  rV   )r?   rB   r9   r:   rJ   rj   r  r  r  r  r  r  s               r;   >test_calibrated_classifier_cv_zeros_sample_weights_equivalencer    s   
 %%%DAq&&q))A 		1SbS61RU8$%%A
	1SbS61RU8$%%AM!$$MM##A#"$$I%;	& & &" #((F"G"G##Aq#FFF"&&q1vq1v666 25#;&>2 2 
 
-- 	&,)/	
 	
 	
 	
 6CCAFF;II!LL')?@@@@@r=   c           
           G d dt                     } t           |                      j        | dt          j        t          | d                   dz             i dS )z[Check that CalibratedClassifierCV does not enforce sample alignment
    for fit parameters.c                         e Zd Zd fd	Z xZS )Jtest_calibration_with_non_sample_aligned_fit_param.<locals>.TestClassifierNc                 T    |J t                                          |||          S )NrI   r  )r   r9   r:   rJ   	fit_paramr  s        r;   rU   zNtest_calibration_with_non_sample_aligned_fit_param.<locals>.TestClassifier.fit  s+    (((77;;q!=;AAAr=   )NNr  r  s   @r;   TestClassifierr    sG        	B 	B 	B 	B 	B 	B 	B 	B 	B 	Br=   r  )rj   r  rK   N)r   r   rU   rP   r   rr   )r<   r  s     r;   2test_calibration_with_non_sample_aligned_fit_paramr    s    B B B B B+ B B B
 ;^^%5%5666:	T!W!122    r=   c           	      V   d}d}t           j                            |                               |          }t          j        dgt          ||z            z  dg|t          ||z            z
  z  z             }d|                    d          z  |z   }t          d|d	
          }|                    ||          }|D ]s\  }}	||         ||         }}
||	         }t          d|           }|
                    |
|           |                    |          }|dk                                    sJ tt          t          d|           d          }t          |||d          }t          t          d|           d          }t          |||d          }t          ||           dS )zTest that :class:`CalibratedClassifierCV` works with large confidence
    scores when using the `sigmoid` method, particularly with the
    :class:`SGDClassifier`.

    Non-regression test for issue #26766.
    gq=
ףp?i  rG   rK   r   g     j@)r   rK   NT)rM   r:   r  squared_hinge)lossr6   g     @r@   )r?   roc_auc)scoringrA   )rP   rQ   default_rngnormalr   intr  r   splitr   rU   r   anyr   r   r   )global_random_seedprobnrandom_noiser:   r9   rM   indicestraintestrZ   r[   r]   sgd_clfpredictionsclf_sigmoidscore_sigmoidclf_isotonicscore_isotonics                      r;   @test_calibrated_classifier_cv_works_with_large_confidence_scoresr    s    DA9(();<<CCCKKL
!s1t8}}$sa#a$h--.?'@@AAAaii   </A 
TQ4	0	0	0Bhhq!nnG ) )tU8QuX4_CUVVVGW%%%//77c!&&((((((
 )?9KLLL  K $KAyIIIM *?9KLLL  L %\1aKKKN M>22222r=   c                    t           j                            |           }d}|                    dd|          }|                    ddd          }d}t          |||	          \  }}d
}t          |||	          \  }	}
t          ||          \  }}d}t          ||	|           t          |	||           t          ||
|           t          |
||           d S )NrE   r   r   rD   rG   )lowhighrH   r~   )r  r:   max_abs_prediction_thresholdr   )r  r:   gư>)atol)rP   rQ   rR   r  rS   r	   r   )r  r6   r  r:   predictions_smallthreshold_1a1b1threshold_2a2b2a3b3r  s                 r;   5test_sigmoid_calibration_max_abs_prediction_thresholdr    s(   9((.@(AALAQ**A %,,!#,FF K!%
%0  FB K!%
%0  FB "%
  FB DB&&&&B&&&&B&&&&B&&&&&&r=   c                 r     G d dt                     } |            }t          |          } |j        |   dS )zoCheck that CalibratedClassifierCV works with float32 predict proba.

    Non-regression test for gh-28245.
    c                        e Zd Z fdZ xZS )4test_float32_predict_proba.<locals>.DummyClassifer32c                     t                                          |                              t          j                  S r  )r  rV   astyperP   float32)r   r9   r  s     r;   rV   zBtest_float32_predict_proba.<locals>.DummyClassifer32.predict_probaL  s+    77((++222:>>>r=   )r   r   r   rV   r  r  s   @r;   DummyClassifer32r  K  s8        	? 	? 	? 	? 	? 	? 	? 	? 	?r=   r  N)r   r   rU   )r<   r  modelr   s       r;   test_float32_predict_probar   E  s^    ? ? ? ? ?? ? ? ? E'..JJNDr=   c                      t           j                            d          } dgdz  dgdz  z   }t          d                              | |           dS )	zlCheck that CalibratedClassifierCV works with string targets.

    non-regression test for issue #28841.
    )   r   rG   r  r   r  r   rh   N)rP   rQ   r  r   rU   r8   s     r;   (test_error_less_class_samples_than_foldsr  U  sY    
 		g&&A	
cURZAa   $$Q*****r=   ){numpyrP   rW   numpy.testingr   sklearn.baser   r   sklearn.calibrationr   r   r   r	   r
   r   sklearn.datasetsr   r   r   sklearn.dummyr   sklearn.ensembler   r   sklearn.exceptionsr   sklearn.feature_extractionr   sklearn.imputer   sklearn.isotonicr   sklearn.linear_modelr   r   sklearn.metricsr   sklearn.model_selectionr   r   r   r   r   r   sklearn.naive_bayesr   sklearn.pipeliner    r!   sklearn.preprocessingr"   r#   sklearn.svmr$   sklearn.treer%   sklearn.utils._mockingr&   sklearn.utils._testingr'   r(   r)   r*   sklearn.utils.extmathr+   sklearn.utils.fixesr,   r7   fixturer<   markparametrizerf   rn   rv   r{   r   r   r?  r   r   r   r   r   r   r   r  r  rQ   rR   r  r  r$  r)  r-  paramr1  r4  rA  rE  rG  rc  re  rq  rt  r~  r  r8  objectr  r  r  r  r  r   r  r  r  r  r  r  r   r  r   r=   r;   <module>r      s
        ) ) ) ) ) ) - - - - - - - -                H G G G G G G G G G ) ) ) ) ) )        . - - - - - 5 5 5 5 5 5 ( ( ( ( ( ( / / / / / / B B B B B B B B , , , , , ,                . - - - - - 4 4 4 4 4 4 4 4 > > > > > > > > ! ! ! ! ! ! / / / / / / 5 5 5 5 5 5            * ) ) ) ) ) . . . . . .	 h   
 .99Iz#:;;dE]338 8 43 <; :98v+ + + dE]33D D 43D   Iz#:;;dE]33  43 <;, Iz#:;;dE]336 6 43 <;6, Iz#:;;dE]33 q**:7 :7 +* 43 <;
:7z2 2 22 .99, , :9,^ Iz#:;;5 5 <;50> > >"C C C> dE]33  43 dE]33@ @ 43@ dE]33N N 43N: 
	b!!''Aq11
	b!!''Aq!44   , " " " % % %  4 YY^^^Q''YY^^^X.. 6 6 6"	# 	# 	#    h& &  & h   
 Ar7++i%<==&; &; >= ,+&;R; ; ; -/CD ; ; ; ; ; ;( +.>@R-STT; ; UT;D
5 
5 
5 f66" " 76" f66/ / 76/( 8:U:U:UVV; ; WV;@ Iz#:;;dE]33-A -A 43 <;-A` *VW,=>># # ?>#$ 			 2 2 26 6 6, Iz#:;;dE]33'A 'A 43 <;'AT  /3 /3 /3d&' &' &'R   + + + + +r=   