
    >[g              
       b   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j                  d      d        ZIej                  j                  deF      ej                  j                  ddd g      ej                  j                  d!d"d#g      d$                      ZLd% ZMej                  j                  d!d"d#g      d&        ZNd' ZOej                  j                  ddd g      ej                  j                  d!d"d#g      d(               ZPej                  j                  ddd g      ej                  j                  d!d"d#g      d)               ZQej                  j                  ddd g      ej                  j                  d!d"d#g      ej                  j                  d* eRd+            d,                      ZSd- ZT eBeU.      ej                  j                  deF      d/               ZVej                  j                  ddd g      d0        ZWd1 ZXd2 ZYej                  j                  d!d"d#g      d3        ZZej                  j                  d!d"d#g      d4        Z[ej                  j                  d!d"d#g      d5        Z\ej                  j                  d6ej                  j                  d7      j                  d8d9d+      ej                  j                  d7      j                  d8d9d+d:      g      d;        Z`ej                  d<        Zaej                  d=        Zbd> Zcej                  j                  d? ej                   e8d@A      d+       ej                   e8d@A      dB      g      dC        ZedD ZfdE Zg ej                  d      dF        Zh ej                  d      dG        Ziej                  j                  dHd9dIg      ej                  j                  dJdKdLg      dM               ZjdN Zkej                  j                  dOdPdQg      dR        ZldS Zmej                  j                  dTdUdVg      dW        ZndX Zoej                  j                  dYepeqg      dZ        Zrej                  j                  dYepeqg      d[        Zsej                  j                  d\d]d+d^d_d]d+d^d`g      da        Ztej                  j                  dbg dc      dd        Zuej                  j                  ddd g      ej                  j                  d!d"d#g      de               Zvej                  j                  dfdgdhg      di        Zwej                  j                  djdkgeGz   ej                  eG      g      dl        Zydm Zzdn Z{do Z|dp Z}dq Z~dr Zy)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                  4    t        t        dd      \  } }| |fS )N   *   	n_samples
n_featuresrandom_state)r   	N_SAMPLESXys     Y/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/tests/test_calibration.pydatar?   9   s    qrRDAqa4K    csr_containermethodsigmoidisotonicensembleTFc                    t         dz  }| \  }}t        j                  j                  d      j	                  |j
                        }||j                         z  }|d | |d | |d | }
}	}||d  ||d  }}t               j                  ||	|
      }|j                  |      d d df   }t        ||j
                  dz   |      }t        j                  t              5  |j                  ||       d d d        ||f ||       ||      ffD ]>  \  }}t        ||d|	      }|j                  ||	|
       |j                  |      d d df   }t        ||      t        ||      kD  sJ |j                  ||	dz   |
       |j                  |      d d df   }t        ||       |j                  |d|	z  dz
  |
       |j                  |      d d df   }t        ||       |j                  ||	dz   dz  |
       |j                  |      d d df   }|d
k(  rt        |d|z
         t        ||      t        |dz   dz  |      kD  r?J  y # 1 sw Y   axY w)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II))r)2:::GMLA "#:I*9}Zi?XhWGyz]AijMFF /

gwh

GC$$V,QT2L$SQVVaZ(KG	z	"Aq 
#
 
&	w	v!67&!k )VHU 	L'B"00=adC  58H$9
 
 	
 

 	L'A+XF%,%:%:;%G1%M"!"24NO 	L!g+/J%,%:%:;%G1%M"!"24NO 	L7Q;!"38L%,%:%:;%G1%M"Y%&6<V8VW $FL9<L!q "<=   C&	 
#	"s   IIc                     | \  }}t        d      }|j                  ||       |j                  d   j                  }t	        |t
              sJ y )NrG   rP   r   )r   rX   calibrated_classifiers_	estimator
isinstancer&   )r?   r<   r=   	calib_clfbase_ests        r>   "test_calibration_default_estimatorrq   }   sI    DAq&!,IMM!Q003==Hh	***r@   c                    | \  }}d}t        |      }t        ||      }t        |j                  t               sJ |j                  j                  |k(  sJ |j                  ||       |r|nd}t        |j                        |k(  sJ y )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&%(CIillE***<<  F***MM!Q'VQNy001^CCCr@   c                 r   | \  }}t        d      }t        |d      }t        j                  t        d      5  |j                  ||       d d d        t        t               d      }t        j                  t        d      5  |j                  ||       d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)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~      s    DAq3E&%$?I	z)O	Pa 
Q '+-$GI	z)L	Ma 
N	M	 
Q	P 
N	Ms   B!B-!B*-B6c                    t         dz  }| \  }}t        j                  j                  d      j	                  t        |            }|d | |d | |d | }	}}||d  }
t        d      }t        |||      }|j                  |||	       |j                  |
      }|j                  ||       |j                  |
      }t        j                  j                  ||z
        }|dkD  sJ y )	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II))r)2::A:GM!":I*9}Zi?XhWGyz]Fr*I+IfxXNwx@"008M w(%33F;99>>-*::;D#::r@   c                 P   | \  }}t        ||d      \  }}}}t        t               t        d            }	t	        |	|d|      }
|
j                  ||       |
j                  |      }t	        |	|d|      }|j                  ||       |j                  |      }t        ||       y)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$GVWfn.	r0JKI-&X '*%33F;N/&X 7G,)77?N$45r@   rI   rG   c                    d }t        d      }t        dd|dd      \  }}d	||d	kD  <   t        j                  |      j                  d
   }|d d d	   |d d d	   }	}|dd d	   |dd d	   }}
|j                  ||	       t        || d|      }|j                  ||	       |j                  |
      }t        t        j                  |d      t        j                  t        |
                   d|j                  |
|      cxk  rdk  sJ  J |j                  |
|      d|j                  |
|      z  kD  sJ  ||t        |j                  |
            |      } ||||      }|d|z  k  sJ t        dd      }|j                  ||	       |j                  |
      } ||||      }t        || d|      }|j                  ||	       |j                  |
      } ||||      }|d|z  k  sJ y )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<    66)$V,vvx*,23hnnQ6G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 
#C#D"RVDAq Aa!eH		!""1%I1vq1vWGqt!tWa1gFFGGGW$SAQGKK!""6*FBFF6*BGGCK,@A
 #))FF+2d22222 ==(4#))FF2K+KKKK
 *--f56) ()Lc$66666 !br
BCGGGW!!&)I)&)yQ$SAQGKK!))&1M'Sc$66666r@   c                      G d d      } t        ddddd      \  }}t               j                  ||      } |        }t        ||g|j                        }|j                  |      }t        |d	|j                  z         y )
Nc                       e Zd Zd Zy)9test_calibration_zero_probability.<locals>.ZeroCalibratorc                 F    t        j                  |j                  d         S )Nr   )rS   zerosr   selfr<   s     r>   predictzAtest_calibration_zero_probability.<locals>.ZeroCalibrator.predict  s    88AGGAJ''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1r@   )categoryc                    d}t        d|z  dd      \  }}t        j                  j                  d      j	                  |j
                        }||j                         z  }|d| |d| |d| }}}||d	|z   ||d	|z   ||d	|z   }
}	}|d	|z  d |d	|z  d }}t               }t        |d
      }t        j                  t              5  |j                  ||	       ddd       |j                  |||       |j                  |      dddf   }||f | |       | |      ffD ]  \  }}dD ]  }t        ||d
      }t        t        |      |      }|
dfD ]  }|j                  ||	|       |j                  ||	|       |j                  |      }|j                  |      }|j                  |      }|j                  |      }|dddf   }|dddf   }t!        ||       t!        |t        j"                  ddg      t        j$                  |d                t'        ||      t'        ||      kD  rJ    y# 1 sw Y   hxY w)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VDAqII))r)2:::GMLA "#:I*9}Zi?XhWG	)a)m$	)a)m$i!i-0 WG
 q9}'1y=?);FF /C&sx8I	~	&gw' 
' GGGWh'$$V,QT2L 
&	w	v!67&!k .F3C8TN3OC4HQWXN&""<"K""<"K . < <[ I . < <[ I . 6 6{ C . 6 6{ C*71*='*71*='"=-@"!288QF#3BIImRS4T#U (=@P3A    '	 .	& 
'	&s   IIc                    | \  }}t        d      }t        ||dd      }|j                  ||       |j                  |      }t	        |||dd      }|dk(  rt        d	
      }n
t               }|j                  ||       |j                  ||       |j                  |      }	|j                  |	      }
t        |d d df   |
       y )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NGKK1&&q)J 'sAqQ?RSN'f=
(*
NN>1%GGAqM""1%F&&v.MJq!t$m4r@   c                  0   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               j                  | |      j                  |       }t        ||d	       t        j                  t              5  t               j                  t        j                  | | f      |       d
d
d
       y
# 1 sw Y   y
xY w)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     s    
((<
 C
((;
CHH24GHIMm-A#s-KQOcBFF=#3c#9M!<L#LMMNH!#''S199#>Gh3 
z	"!!"))S#J"7= 
#	"	"s   0DD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
       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
       y
# 1 sw Y   xY w# 1 sw Y   y
xY w)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    sT   XX()FXX45F,VVAFIyy>S^+++y>Q	Aq6*	C:. 
z	"1#v& 
# hh)*Ghh56G->Z.** !"c*<&====!"a'''*QJ7*S#J7 
z	"'7\B 
#	"! 
#	"  
#	"s   E+E7+E47F c                     t        ddddd      \  }}t        j                  |d<   t        dt	               fdt        d	
      fg      }t        |dd|       }|j                  ||       |j                  |       y)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 ffAdG

]_	%.DRS.T'UVC #31Z(SE	IIaO	MM!r@   c                     t        ddd      \  }}g d}t        dd      }t        |d	t        d
      |       }|j	                  ||       t        |j                  |      j                  d      d       y )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    sr     QGDAq&A
c
*C%I%"3hH LLAH**1-11q193?r@   c           	         t         j                  j                  dd      }g dg dz   g dz   }t        d      }t	        |dt        d	      | 
      }|j                  ||       | rt        j                  d      }t        ddgdd	g      D ]v  \  }}|j                  |   j                  |      }t        |d d |f   t        j                  t        |                   t        j                  |d d ||k7  f   dkD        rvJ  y |j                  d   j                  |      }t        |j!                  d      t        j"                  |j$                  d                y )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|#l2A
 a
0C$I%(XG KK1))A, #QFQF 3GW33G<JJ1MEuQZ0"((3q62BC66%7g#5 56:;;; !4 //2@@C!%)))"3RWWU[[^5LMr@   r<   r5      rQ   r4   c                 x    g d} G d dt         t              }t         |             }|j                  | |       y)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y)>test_calibration_accepts_ndarray.<locals>.MockTensorClassifierz*A toy estimator that accepts tensor inputsc                 :    t        j                  |      | _        | S N)rS   r   r   )r   r<   r=   s      r>   rX   zBtest_calibration_accepts_ndarray.<locals>.MockTensorClassifier.fit  s    IIaLDMKr@   c                 `    |j                  |j                  d   d      j                  d      S )Nr   r   rN   r   )reshaper   r   r   s     r>   r   zPtest_calibration_accepts_ndarray.<locals>.MockTensorClassifier.decision_function  s)    99QWWQZ,00a088r@   N)r   r   r   __doc__rX   r   r   r@   r>   MockTensorClassifierr    s    8		9r@   r$  N)r   r   r   rX   )r<   r=   r$  r   s       r>    test_calibration_accepts_ndarrayr%    s7     	6A	9 	9 ,,@,B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  
  sE     w'w'w'w'w'I "Kk!!r@   c                 r    | \  }}t        dt               fdt               fg      }|j                  ||      S )N
vectorizerrb   )r"   r   r   rX   )r0  r<   r=   pipeline_prefits       r>   dict_data_pipeliner5    sC    DAq
(	)E3I3K+LMO q!$$r@   c                    | \  }}|}t        t        |      d      }|j                  ||       t        |j                  |j                         t        |d      rJ t        |d      rJ |j                  |       |j                  |       y)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';BIMM!Qy))3<<8 s,---y"2333 aAr@   zclf, cvrN   r  r   c                    t        dddd      \  }}|dk(  r| j                  ||      } t        | |      }|j                  ||       |dk(  r<t        |j                  | j                         |j
                  | j
                  k(  sJ y t               j                  |      j                  }t        |j                  |       |j
                  |j                  d   k(  sJ y )	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WDAq	X~ggam&sr2IMM!Q	X~9--s||<''3+=+====.$$Q'009--w7''1771:555r@   c                  "   t        dddd      \  } }t        d      j                  | |      }t        t	        |            }d}t        j                  t        |	      5  |j                  | d d d d
f   |       d d d        y # 1 sw Y   y xY w)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  sw     QUVWDAq
a.

Q
"C&s';<I
MC	z	-a2A2h" 
.	-	-s    BBc            	         t        dddd      \  } }t        t        d      D cg c]  }dt        |      z   t	               f c}d	      }|j                  | |       t        t        |      
      }|j                  | |       y c c}w )Nr   rQ   rG   r   r<  r   lrsoft)
estimatorsvotingrm   )r   r   rangestrr   rX   r   r   )r<   r=   ivotero   s        r>   !test_calibration_votingclassifierrK  ^  s     QUVWDAqCH8L8aTCF]$6$898LD 	HHQN&1FGIMM!Q Ms   Bc                      t        d      S )NT
return_X_y)r   r   r@   r>   	iris_datarO  n  s    %%r@   c                 ,    | \  }}||dk     ||dk     fS )NrG   r   )rO  r<   r=   s      r>   iris_data_binaryrQ  s  s&    DAqQU8Qq1uXr@   r   r   r   rV   r   c                    |\  }}t               j                  ||      }t        j                  |||||d      }|j	                  |      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                  j!                         dk(  sJ t        |j"                  |j$                  j&                        sJ t        |j(                  |j*                  j,                        sJ |j"                  j/                         dk(  sJ |j"                  j1                         dk(  sJ dd	g}|j"                  j3                         j5                         }t7        |      t7        |      k(  sJ |D ]  }|j9                         |v rJ  y )
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)pyplotrQ  r   r   r<   r=   rB  vizrV  r   r   mplexpected_legend_labelslegend_labelslabelss                  r>    test_calibration_display_computern  y  s    DAq			!	!!Q	'B

+
+
Aq(#C a A&F,	6&8Iy CMM9-CMM9-CJJ'!5555 cii!1!122299 C'''cggsxx}}---ckk3::#4#455577#SSSS77#NNNN24JKGG&&(224M}%;!<<<< $::::  r@   c                 l   |\  }}t        t               t                     }|j                  ||       t	        j
                  |||      }|j                  dg}|j                  j                         j                         }t        |      t        |      k(  sJ |D ]  }|j                         |v rJ  y )NrT  )r#   r%   r   rX   r   rU  rW  r]  re  rf  ru   rg  )	rh  rQ  r<   r=   rb   ri  rk  rl  rm  s	            r>   $test_plot_calibration_curve_pipelinerp    s    DAq
(*<*>
?CGGAqM

+
+CA
6C!002HIGG&&(224M}%;!<<<< $::::  r@   zname, expected_label)N_line1)my_estrr  c                    t        j                  g d      }t        j                  g d      }t        j                  g       }t        ||||      }|j                          |g n|g}|j	                  d       |j
                  j                         j                         }t        |      t        |      k(  sJ |D ]  }	|	j                         |v rJ  y )Nr   rN   rN   r   r   r   r   皙?rW  rT  )
rS   r   r   plotappendr]  re  rf  ru   rg  )
rh  nameexpected_labelr   r   rV  ri  rk  rl  rm  s
             r>   'test_calibration_display_default_labelsr|    s     &I-.IXXb\F
Y	6$
OCHHJ#'<RdV!!"89GG&&(224M}%;!<<<< $::::  r@   c                    t        j                  g d      }t        j                  g d      }t        j                  g       }d}t        ||||      }|j                  |k(  sJ d}|j	                  |       |dg}|j
                  j                         j                         }t        |      t        |      k(  sJ |D ]  }|j                         |v rJ  y )Nrt  ru  zname onerw  zname tworz  rT  )
rS   r   r   rW  rx  r]  re  rf  ru   rg  )	rh  r   r   rV  rz  ri  rk  rl  rm  s	            r>   )test_calibration_display_label_class_plotr    s     &I-.IXXb\FD
Y	6$
OC%%%DHH$H"$:;GG&&(224M}%;!<<<< $::::  r@   constructor_namerU  from_predictionsc                    |\  }}d}t               j                  ||      }|j                  |      d d df   }t        t        |       }| dk(  r|||fn||f}	 ||	d|i}
|
j
                  |k(  sJ |j                  d       |
j                          |dg}|
j                  j                         j                         }t        |      t        |      k(  sJ |D ]  }|j                         |v rJ  |j                  d       d}|
j                  |       t        |      t        |      k(  sJ |D ]  }|j                         |v rJ  y )	Nzmy hand-crafted namerN   rU  rz  r  rT  another_namer~  )r   rX   rY   getattrr   rW  closerx  r]  re  rf  ru   rg  )r  rh  rQ  r<   r=   clf_namerb   rV  constructorparamsri  rk  rl  rm  s                 r>   ,test_calibration_display_name_multiple_callsr    sY    DAq%H


"
"1a
(Cq!!Q$'F,.>?K,0@@c1a[q&kF
v
-H
-C)))
LLHHJ&(>?GG&&(224M}%;!<<<< $::::   LLHHH(H}%;!<<<< $::::  r@   c                 P   |\  }}t               j                  ||      }t               j                  ||      }t        j                  |||      }t        j                  ||||j
                        }|j
                  j                         d   }|j                  d      dk(  sJ y )N)axrN   rT  )r   rX   r'   r   rU  r]  get_legend_handles_labelscount)	rh  rQ  r<   r=   rB  dtri  viz2rm  s	            r>   !test_calibration_display_ref_liner    s    DAq			!	!!Q	'B		!	%	%a	+B

+
+B1
5C,,RA#''BDXX//1!4F<<./1444r@   dtype_y_strc                 >   t         j                  j                  d      }t        j                  dgdz  dgdz  z   |       }|j	                  dd|j
                        }d	}t        j                  t        |
      5  t        ||       ddd       y# 1 sw Y   yxY w)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-[	AB	Q	(B	$ 
 
z	1"b! 
2	1	1s   =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       y)z8Check the behaviour when passing explicitly `pos_label`.)	r   r   r   rN   rN   rN   rN   rN   rN   r  eggr  )	r   r   g333333?rv  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     XX12Fhhk:GJXXDEF %VVA>LIqI~.$ZUSLIqI~.$VQZQOLIqI~.$ZVAQWXLIqI~.r@   kwargsred-.)clwls)color	linewidth	linestylec                 ,   |\  }}t               j                  ||      }t        j                  |||fi |}|j                  j                         dk(  sJ |j                  j                         dk(  sJ |j                  j                         dk(  sJ y)z*Check that matplotlib aliases are handled.r  rG   r  N)r   rX   r   rU  rY  	get_colorget_linewidthget_linestyle)rh  rQ  r  r<   r=   rB  ri  s          r>   test_calibration_display_kwargsr  .  s     DAq			!	!!Q	'B

+
+B1
?
?C99 E)))99""$)))99""$,,,r@   zpos_label, expected_pos_label))NrN   r  )rN   rN   c                    |\  }}t               j                  ||      }t        j                  ||||      }|j	                  |      dd|f   }t        |||      \  }	}
t        |j                  |	       t        |j                  |
       t        |j                  |       |j                  j                         d| dk(  sJ |j                  j                         d| dk(  sJ |j                  j                  dg}|j                  j                         j!                         }t#        |      t#        |      k(  sJ |D ]  }|j%                         |v rJ  y)z?Check the behaviour of `pos_label` in the `CalibrationDisplay`.)r  Nz,Mean predicted probability (Positive class: )z'Fraction of positives (Positive class: rT  )r   rX   r   rU  rY   r   r   r   r   rV  r]  rc  rd  	__class__r   re  rf  ru   rg  )rh  rQ  r  expected_pos_labelr<   r=   rB  ri  rV  r   r   rk  rl  rm  s                 r>   "test_calibration_display_pos_labelr  A  s^   
 DAq			!	!!Q	'B

+
+B1	
JCa $6!67F,Q)LIyCMM9-CMM9-CJJ' 	9:L9MQO	P	P 	45G4HJ	K	K !ll335KLGG&&(224M}%;!<<<< $::::  r@   c                 r   t        d      \  }}t               j                  |      }|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        |      }	|	j                  |||
       |j                  ||       t        |	j                  |j                        D ]9  \  }
}t        |
j                  j                   |j                  j                          ; |	j#                  |      }|j#                  |      }t        ||       y)zrCheck that passing repeating twice the dataset `X` is equivalent to
    passing a `sample_weight` with a factor 2.TrM  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Tc7AdsGqALLOa'M hh
Q
3177CGGCaCFOGADqD!GhhqwwqzA~QWW5GGCaCLGADqDM"$I%;	&" #((F"G##Aq#F"&&w8 25#;;&>>2-- 	&&,,))//	
	2 6CCAF;II!L')?@r@   fit_params_typelistr   c                     |\  }}t        ||       t        ||       d}t        ddg      }t        |      } |j                  ||fi | y)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    sW     DAq?3?3J
 #s
<C#C(FFJJq!"z"r@   rM   r   c                 d    |\  }}t        d      }t        |      }|j                  |||        y)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    s3     DAq
D
9C#C(F
JJq!=J1r@   c                     | \  }}t        j                  |      } G d dt              } |       }t        |      }t	        j
                  t              5  |j                  |||       ddd       y# 1 sw Y   yxY w)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                 2    d|vsJ t        |   ||fi |S )NrM   superrX   )r   r<   r=   r  r  s       r>   rX   zTtest_calibration_without_sample_weight_estimator.<locals>.ClfWithoutSampleWeight.fit  s'    "*4447;q!2z22r@   r   r   r   rX   __classcell__r  s   @r>   ClfWithoutSampleWeightr    s    	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    se     DAqLLOM3!3 3
 !
"C#C(F	k	"

1a}
5 
#	"	"s   A33A<c           
           G d dt               } t         |             j                  | dt        j                  t        | d         dz         i y)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>.TestClassifierc                 0    |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$    (((7;q!=;AAr@   )NNr  r  s   @r>   TestClassifierr    s    	B 	Br@   r  rF  r  rN   N)r   r   rX   rS   r   ru   )r?   r  s     r>   2test_calibration_with_non_sample_aligned_fit_paramr    sM    B+ B
 ;^%56::	T!W!12r@   c           	         d}d}t         j                  j                  |       j                  |      }t        j                  dgt        ||z        z  dg|t        ||z        z
  z  z         }d|j                  d      z  |z   }t        d|d	
      }|j                  ||      }|D ]Y  \  }}	||   ||   }}
||	   }t        d|       }|j                  |
|       |j                  |      }|dkD  j                         rYJ  t        t        d|       d      }t        |||d      }t        t        d|       d      }t        |||d      }t        ||       y)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    sl    DA99(();<CCCKL
!s1t8}$sa#a$h-.?'@@AAaii  </A 
TQ4	0Bhhq!nGtU8QuX4_CUVGW%//7c!&&(((  )?9KLK $KAyIM *?9KLL %\1aKN M>2r@   c                 x   t         j                  j                  |       }d}|j                  dd|      }|j	                  ddd      }d}t        |||	      \  }}d
}t        |||	      \  }	}
t        ||      \  }}d}t        ||	|       t        |	||       t        ||
|       t        |
||       y )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    99((.@(ALAQ*A %,,!#,F K!%
%0FB K!%
%0FB "%
FB DB&B&B&B&r@   c                 d     G d dt               } |       }t        |      } |j                  |   y)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         |   |      j                  t        j                        S r   )r  rY   astyperS   float32)r   r<   r  s     r>   rY   zBtest_float32_predict_proba.<locals>.DummyClassifer32.predict_proba?  s"    7(+222::>>r@   )r   r   r   rY   r  r  s   @r>   DummyClassifer32r  >  s    	? 	?r@   r  N)r   r   rX   )r?   r  modelr   s       r>   test_float32_predict_probar  8  s0    ?? ? E'.JJNNDr@   c                      t         j                  j                  d      } dgdz  dgdz  z   }t        d      j	                  | |       y)	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  sF    
 			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   rG  r   r   FutureWarningr   r   r   r  r
  r  r  rT   rU   r  r%  r0  r5  r9  paramr=  r@  rK  rO  rQ  rn  rp  r|  r  r  r  rH  objectr  r  r  r  r  r  r   r  r  r  r  r
  r  r  r   r@   r>   <module>r5     s     ) > >  H G ) . 5 * ( / B ,  . 4 > ! / 5  * .	 h  
 .9Iz#:;dE]38 4 < :8v+ dE]3D 4D Iz#:;dE]3 4 <, Iz#:;dE]36 4 <6, Iz#:;dE]3 q*:7 + 4 <
:7z22 -(.95 : )5p Iz#:;5 <50>"C> dE]3 4 dE]3@ 4@ dE]3N 4N: 
		b!''Aq1
		b!''Aq!4( 	" 	" % %4 Y^Q'Y^X.66"	#  h&  & h  
 Ar7+i%<=&; > ,&;R; -/CD;; ;( +.>@R-ST; U;D
5 f6" 7" f6/ 7/( 1D)ad;	-	- 8:UV; W;@ Iz#:;dE]3-A 4 <-A` *VW,=># ?#$ 			226,/3d&'R +r@   