
    0Ph              
          d dl Zd dlZd dlmZ d dlmZ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" 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/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF dZG ejH        d          d             ZIejJ        K                    deF          ejJ        K                    ddd g          ejJ        K                    d!d"d#g          d$                                     ZLd% ZMejJ        K                    d!d"d#g          d&             ZNd' ZOejJ        K                    ddd g          ejJ        K                    d!d"d#g          d(                         ZPejJ        K                    ddd g          ejJ        K                    d!d"d#g          d)                         ZQejJ        K                    ddd g          ejJ        K                    d!d"d#g          ejJ        K                    d* eRd+                    d,                                     ZSd- ZT eBeU.          ejJ        K                    deF          d/                         ZVejJ        K                    ddd g          d0             ZWd1 ZXd2 ZYejJ        K                    d!d"d#g          d3             ZZejJ        K                    d!d"d#g          d4             Z[ejJ        K                    d!d"d#g          d5             Z\ejJ        K                    d6ej]        ^                    d7          _                    d8d9d+          ej]        ^                    d7          _                    d8d9d+d:          g          d;             Z`ejH        d<             ZaejH        d=             Zbd> ZcejJ        K                    d? ejd         e8d@A          d+           ejd         e8d@A          dB          g          dC             ZedD ZfdE Zg ejH        d          dF             Zh ejH        d          dG             ZiejJ        K                    dHd9dIg          ejJ        K                    dJdKdLg          dM                         ZjdN ZkejJ        K                    dOdPdQg          dR             ZldS ZmejJ        K                    dTdUdVg          dW             ZndX ZoejJ        K                    dYepeqg          dZ             ZrejJ        K                    dYepeqg          d[             ZsejJ        K                    d\d]d+d^d_d]d+d^d`g          da             ZtejJ        K                    dbg dc          dd             ZuejJ        K                    ddd g          ejJ        K                    d!d"d#g          de                         ZvejJ        K                    dfdgdhg          di             ZwejJ        K                    djdkgeGz   ejx        eG          g          dl             Zydm Zzdn Z{do Z|dp Z}dq Z~dr ZdS )s    N)assert_allclose)BaseEstimatorClassifierMixinclone)CalibratedClassifierCVCalibrationDisplay_CalibratedClassifier_sigmoid_calibration_SigmoidCalibrationcalibration_curve)	load_iris
make_blobsmake_classification)DummyClassifier)RandomForestClassifierVotingClassifier)NotFittedError)DictVectorizer)FrozenEstimator)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ignore_warnings)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/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_calibration.pydatar?   9   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   r5   seedsizesample_weight   cvrE      rB   rP   rE   rC   )r:   nprandomRandomStateuniformrK   minr!   fitpredict_probar   pytestraises
ValueErrorr   r+   )r?   rB   rA   rE   r7   r<   r=   rM   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_calibrationri   ?   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 )NrG   rP   r   )r   rX   calibrated_classifiers_	estimator
isinstancer&   )r?   r<   r=   	calib_clfbase_ests        r>   "test_calibration_default_estimatorrq   }   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 )NrQ   n_splitsrO   rN   )r   r   rn   rP   rt   rX   lenrl   )r?   rE   r<   r=   splitskfoldro   expected_n_clfs           r>   test_calibration_cv_splitterry      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   rs   TrO   z$Requesting 101-fold cross-validationmatchz!LeaveOneOut cross-validation does)r   r   rZ   r[   r\   rX   r   )r?   r<   r=   rw   ro   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 )	NrG   r5   rH   rJ   r9   )rB   rE   rL   皙?)r:   rS   rT   rU   rV   ru   r&   r   rX   rY   linalgnorm)r?   rB   rE   r7   r<   r=   rM   r]   r^   r_   r`   rm   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 calibrationr5   r   rG   )rB   n_jobsrE   rN   N)r    r#   r%   r&   r   rX   rY   r   )r?   rB   rE   r<   r=   r]   r`   r^   ra   rm   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@   rI   rG   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 )NrG   r   )rS   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   
         .@r7   r8   r9   centerscluster_stdrG   r   rN   rQ   rR   axis?gffffff?)r   g?   r5   )n_estimatorsr9   )r&   r   rS   uniquer   rX   r   rY   r   r   onesru   scorer.   decision_functionr   )rB   rE   rI   r   rb   r<   r=   r   r]   r^   r`   ra   rd   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   )rS   zerosr   selfr<   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   )rm   calibratorsclasses      ?)r   r   rX   r	   classes_rY   r   
n_classes_)r   r<   r=   rb   
calibratorrd   r   s          r>   !test_calibration_zero_probabilityr     s    
( ( ( ( ( ( ( (
 !RT  DAq 



1
%
%C!!J#J<  G ""1%%F FC#.011111r@   )categoryc                    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 ]T\  }}dD ]J}t          ||d
          }t          t          |          |          }|
dfD ]}|                    ||	|           |                    ||	|           |                    |          }|                    |          }|                    |          }|                    |          }|dddf         }|dddf         }t!          ||           t!          |t          j        ddg          t          j        |d                              t'          ||          t'          ||          k    sJ LVdS )z*Test calibration for prefitted classifiersr      r4   r5   r6   rH   rJ   NrG   prefitrk   rN   )rD   rC   )rB   rP   rB   rL   r   r   )r   rS   rT   rU   rV   rK   rW   r!   r   rZ   r[   r   rX   rY   r   r   r,   arrayargmaxr   )rA   r7   r<   r=   rM   r]   r^   r_   X_caliby_calibsw_calibr`   ra   rb   	unfit_clfrc   this_X_calibrf   rB   cal_clf_prefitcal_clf_frozenswy_prob_prefity_prob_frozeny_pred_prefity_pred_frozenprob_pos_cal_clf_prefitprob_pos_cal_clf_frozens                               r>   test_calibration_prefitr   0  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3C8TTTN3OC4H4HQWXXXN&  ""<"KKK""<"KKK . < <[ I I . < <[ I I . 6 6{ C C . 6 6{ C C*71*='*71*='"=-@@@"!28QF#3#3BImRS4T4T4T#U   (==@P3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   FrR   r   )rP   rB   rD   clip)out_of_boundsrN   )
r&   r   rX   rY   r   r   r   r   r   r   )r?   rB   r<   r=   rb   rd   
cal_probasunbiased_predsr   clf_dfmanual_probass              r>   test_calibration_ensemble_falser   j  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)rQ   r   )rN   r   gj=ɿgY90(?r   r   r   rN   r4   N)rS   r   r+   r
   expr   rX   r   rZ   r[   r\   vstack)exFexYAB_lin_libsvmlin_probsk_probs        r>   test_sigmoid_calibrationr     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   rN   rN   rN   )        r   皙?皙??r   rG   n_binsr   rN   r   r   gN)r   r   r   r   rN   rN   )r   r   r         ?r   r   quantiler   strategygUUUUUU?r   
percentile)r   )rS   r   r   ru   r*   rZ   r[   r\   )r   y_pred	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   rG   r   r5   )r7   r8   n_informativen_redundantr9   r   r   imputerrfrN   )r   rD   )rP   rB   rE   N)	r   rS   nanr"   r   r   r   rX   r   )rE   r<   r=   rb   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   rQ   rG   )r7   r8   r   )
rN   rN   rN   rN   rN   r   r   r   r   r   r   r   )Cr9   rC   r   rs   rR   rN   r   )r   r&   r   r   rX   r   rY   r   )rE   r<   _r=   rb   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   rQ   )r   r   r   rN   )rN   rN   rG   rG   )rG   r   r   r   r   r   rC   r   rR      r   rG   rN   r   )rS   rT   randnr'   r   r   rX   arangeziprl   rY   r,   r   ru   allr+   r   r   r   )	rE   r<   r=   rb   rd   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@   r<   r5      rQ   r4   c                     g d} G d dt           t                    }t           |                      }|                    | |           dS )z;Test that calibration accepts n-dimensional arrays as input)rN   r   r   rN   rN   r   rN   rN   r   r   rN   r   r   rN   r   c                       e Zd ZdZd Zd ZdS )>test_calibration_accepts_ndarray.<locals>.MockTensorClassifierz*A toy estimator that accepts tensor inputsc                 8    t          j        |          | _        | S N)rS   r   r   )r   r<   r=   s      r>   rX   zBtest_calibration_accepts_ndarray.<locals>.MockTensorClassifier.fit  s    IaLLDMKr@   c                 l    |                     |j        d         d                              d          S )Nr   r   rN   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__rX   r   r   r@   r>   MockTensorClassifierr    s8        88	 	 		9 	9 	9 	9 	9r@   r$  N)r   r   r   rX   )r<   r=   r$  r   s       r>    test_calibration_accepts_ndarrayr%    sp     	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ddddddg} g d	}| |fS )
NNYadult)stateageTXVTchildCTBR)rN   r   rN   rN   r   r   )	dict_datatext_labelss     r>   r0  r0  
  sX     w''w''w''w''w''I "//Kk!!r@   c                     | \  }}t          dt                      fdt                      fg          }|                    ||          S )N
vectorizerrb   )r"   r   r   rX   )r0  r<   r=   pipeline_prefits       r>   dict_data_pipeliner5    sQ    DAq
((	)E3I3K3K+LM O q!$$$r@   c                 L   | \  }}|}t          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
    rG   rk   n_features_in_N)r   r   rX   r,   r   hasattrr   rY   )r0  r5  r<   r=   rb   ro   s         r>   test_calibration_dict_pipeliner9     s     DAq
C&s';';BBBIMM!Qy)3<888 s,-----y"233333 aAr@   zclf, cvrN   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   rQ   rG   r   r7   r8   r   r9   r   rk   rN   )r   rX   r   r,   r   r7  r$   r   )rb   rP   r<   r=   ro   r   s         r>   test_calibration_attributesr=  :  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                  b   t          dddd          \  } }t          d                              | |          }t          t	          |                    }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   rQ   rG   r   r<  rN   r:  zAX has 3 features, but LinearSVC is expecting 5 features as input.r|   r   )r   r&   rX   r   r   rZ   r[   r\   )r<   r=   rb   ro   msgs        r>   2test_calibration_inconsistent_prefit_n_features_inr@  R  s     QUVWWWDAq
a...

Q
"
"C&s';';<<I
MC	z	-	-	- # #a2A2h"""# # # # # # # # # # # # # # # # # #s   4#B$$B(+B(c                     t          dddd          \  } }t          d t          d          D             d	          }|                    | |           t	          t          |          
          }|                    | |           d S )Nr   rQ   rG   r   r<  c                 N    g | ]"}d t          |          z   t                      f#S )lr)strr   ).0is     r>   
<listcomp>z5test_calibration_votingclassifier.<locals>.<listcomp>d  s.    LLLaTCFF]$6$8$89LLLr@   r   soft)
estimatorsvotingrm   )r   r   rangerX   r   r   )r<   r=   votero   s       r>   !test_calibration_votingclassifierrN  ^  s     QUVWWWDAqLL588LLL  D 	HHQNNN&1F1FGGGIMM!Qr@   c                  "    t          d          S )NT
return_X_y)r   r   r@   r>   	iris_datarR  n  s    %%%%r@   c                 <    | \  }}||dk              ||dk              fS )NrG   r   )rR  r<   r=   s      r>   iris_data_binaryrT  s  s&    DAqQU8Qq1uXr@   r   r   r   rV   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   alpharN   r   r   r   z.Mean predicted probability (Positive class: 1)z)Fraction of positives (Positive class: 1)Perfectly calibrated)r   rX   r   from_estimatorrY   r   r   r   r   y_probestimator_name
matplotlibrn   line_linesLine2D	get_alphaax_axesAxesfigure_figureFigure
get_xlabel
get_ylabel
get_legend	get_textsru   get_text)pyplotrT  r   r   r<   r=   rC  vizrY  r   r   mplexpected_legend_labelslegend_labelslabelss                  r>    test_calibration_display_computerq  y  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 )NrW  )r#   r%   r   rX   r   rX  rZ  r`  rh  ri  ru   rj  )	rk  rT  r<   r=   rb   rl  rn  ro  rp  s	            r>   $test_plot_calibration_curve_pipeliners    s    DAq
((*<*>*>
?
?CGGAqMMM

+CA
6
6C!02HIG&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r@   zname, expected_label)N_line1)my_estru  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   rN   rN   r   r   r   r   皙?rZ  rW  )
rS   r   r   plotappendr`  rh  ri  ru   rj  )
rk  nameexpected_labelr   r   rY  rl  rn  ro  rp  s
             r>   'test_calibration_display_default_labelsr    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 )Nrw  rx  zname onerz  zname twor}  rW  )
rS   r   r   rZ  r{  r`  rh  ri  ru   rj  )	rk  r   r   rY  r}  rl  rn  ro  rp  s	            r>   )test_calibration_display_label_class_plotr    s    &&I---..IXb\\FD
Y	6$
O
O
OC%%%%DHH$H"$:;G&&((2244M}%;!<!<<<<< ; ;  $::::::; ;r@   constructor_namerX  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 namerN   rX  r}  r  rW  another_namer  )r   rX   rY   getattrr   rZ  closer{  r`  rh  ri  ru   rj  )r  rk  rT  r<   r=   clf_namerb   rY  constructorparamsrl  rn  ro  rp  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)axrN   rW  )r   rX   r'   r   rX  r`  get_legend_handles_labelscount)	rk  rT  r<   r=   rC  dtrl  viz2rp  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.r5   spamr   eggsrG   dtyper   rJ   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 explicitlyr|   N)
rS   rT   rU   r   randintrK   rZ   r[   r\   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   rN   rN   rN   rN   rN   rN   r  eggr  )	r   r   g333333?ry  r   gffffff?r   r   r   r  r   )r   r   rN   rN   )r   	pos_labelrN   r   )r   r   r   rN   N)rS   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@   kwargsred-.)clwls)color	linewidth	linestylec                 6   |\  }}t                                          ||          }t          j        |||fi |}|j                                        dk    sJ |j                                        dk    sJ |j                                        dk    sJ dS )z*Check that matplotlib aliases are handled.r  rG   r  N)r   rX   r   rX  r\  	get_colorget_linewidthget_linestyle)rk  rT  r  r<   r=   rC  rl  s          r>   test_calibration_display_kwargsr  .  s     DAq				!	!!Q	'	'B

+B1
?
?
?
?C9  E))))9""$$))))9""$$,,,,,,r@   zpos_label, expected_pos_label))NrN   r  )rN   rN   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: rW  )r   rX   r   rX  rY   r   r   r   r   rY  r`  rf  rg  	__class__r   rh  ri  ru   rj  )rk  rT  r  expected_pos_labelr<   r=   rC  rl  rY  r   r   rn  ro  rp  s                 r>   "test_calibration_display_pos_labelr  A  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.TrP  Nr   rG   r   rN   r  )rB   rE   rP   rL   )r   r%   fit_transformrS   	ones_liker   r   r  r   r   r   rX   r  rl   r   rm   coef_rY   )rB   rE   r<   r=   rM   X_twicey_twicerm   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  b  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   rX   )r  r?   r<   r=   
fit_paramsrb   pc_clfs          r>    test_calibration_with_fit_paramsr    sx     DAq?33?33 J
 #s
<
<
<C#C((FFJq!""z"""""r@   rM   r   c                 ~    |\  }}t          d          }t          |          }|                    |||            dS )zMTests that sample_weight is passed to the underlying base
    estimator.
    T)expected_sample_weightrL   N)r(   r   rX   )rM   r?   r<   r=   rb   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 )NrM   superrX   )r   r<   r=   r  r  s       r>   rX   zTtest_calibration_without_sample_weight_estimator.<locals>.ClfWithoutSampleWeight.fit  s4    "*4444577;q!22z222r@   r   r   r   rX   __classcell__r  s   @r>   ClfWithoutSampleWeightr    s8        	3 	3 	3 	3 	3 	3 	3 	3 	3r@   r  rL   N)rS   r  r(   r   rZ   warnsUserWarningrX   )r?   r<   r=   rM   r  rb   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           
           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 )NrL   r  )r   r<   r=   rM   	fit_paramr  s        r>   rX   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  rK  r  rN   N)r   r   rX   rS   r   ru   )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  rJ   rN   r   g     j@)r   rN   NT)rP   r=   
classifiersquared_hinge)lossr9   g     @rC   r   roc_auc)scoringrD   )rS   rT   default_rngnormalr   intr"  r   splitr   rX   r   anyr   r   r   )global_random_seedprobnrandom_noiser=   r<   rP   indicestraintestr]   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 )NrH   r   r   rG   rJ   )lowhighrK   r   )r  r=   max_abs_prediction_thresholdr   )r  r=   gư>)atol)rS   rT   rU   r  rV   r
   r   )r  r9   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  rY   astyperS   float32)r   r<   r  s     r>   rY   zBtest_float32_predict_proba.<locals>.DummyClassifer32.predict_proba?  s+    77((++222:>>>r@   )r   r   r   rY   r  r  s   @r>   DummyClassifer32r  >  s8        	? 	? 	? 	? 	? 	? 	? 	? 	?r@   r  N)r   r   rX   )r?   r  modelr   s       r>   test_float32_predict_probar  8  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   rJ   r  r   r  r   rk   N)rS   rT   r  r   rX   r;   s     r>   (test_error_less_class_samples_than_foldsr  H  sY    
 		g&&A	
cURZAa   $$Q*****r@   )numpyrS   rZ   numpy.testingr   sklearn.baser   r   r   sklearn.calibrationr   r   r	   r
   r   r   sklearn.datasetsr   r   r   sklearn.dummyr   sklearn.ensembler   r   sklearn.exceptionsr   sklearn.feature_extractionr   sklearn.frozenr   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,   r-   sklearn.utils.extmathr.   sklearn.utils.fixesr/   r:   fixturer?   markparametrizeri   rq   ry   r~   r   r   rL  r   r   FutureWarningr   r   r   r  r
  r  r  rT   rU   r  r%  r0  r5  r9  paramr=  r@  rN  rR  rT  rq  rs  r  r  r  r  rD  objectr  r  r  r  r  r  r   r  r  r  r  r  r  r  r   r@   r>   <module>r8     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5 5 :9 )(5p 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/( 1D))ad;; 	- 	- 	- 8:U:U:UVV; ; WV;@ Iz#:;;dE]33-A -A 43 <;-A` *VW,=>># # ?>#$ 			 2 2 26 6 6,  /3 /3 /3d&' &' &'R   + + + + +r@   