
    {Kg_j                        d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( d#dZ)d Z*d Z+d Z,d Z-d Z.d Z/d Z0ejb                  je                  deeeg      d        Z3d Z4d Z5ejb                  je                  dg d      ejb                  je                  dg d      d               Z6d Z7d Z8ejb                  je                  deeg      d        Z9ejb                  ju                  d       ejb                  je                  d!eefee fg      d"               Z;y)$    )productN)assert_allclose)optimize)	factorialxlogy)DummyRegressor)UndefinedMetricWarning)d2_absolute_error_scored2_pinball_scored2_tweedie_scoreexplained_variance_scoremake_scorer	max_errormean_absolute_errormean_absolute_percentage_errormean_pinball_lossmean_squared_errormean_squared_log_errormean_tweedie_deviancemedian_absolute_errorr2_scoreroot_mean_squared_errorroot_mean_squared_log_error)_check_reg_targets)GridSearchCV)assert_almost_equalassert_array_almost_equalassert_array_equalc           
      
   t        j                  |       }|dz   }|dz
  }t        t        ||      d       t        t	        ||      t        t        j
                  d|z         t        j
                  d|z                      t        t        ||      d       t        t        ||      d       t        t        ||      d       t        t        ||d      d       t        t        ||d      d       t        t        ||      d       t        ||      }t        j                  |      sJ |dkD  sJ t        t        ||      d       t        t        ||      dd	       t        t        ||d
      dd	       t        t        ||      d       t        t        ||d
      d       t        t        ||d      t        ||             t        t        ||d      t        ||             t        j                   |t        j"                  |      z
        j%                         }t'        t)        ||      dt        j                   ||z
        j%                         |z  z
         d}d }t        j*                  ||dz        }t        t-        |||      d ||||      j%                          ||||      j%                         z  z
         t        t)        ||      t-        ||d             t        j                  dd| z         }d	|z  }| }	t        t        ||d      d|	z  |	d	z  d	|	z  z   dz   z         t        t        ||d      |	dz   dt        j
                  d	      z
  z         t        t        ||d	      d	t        j
                  d	      z  dz
         t        t        ||d      dt        j.                  d	      z  dz
  |	z  t        j.                  |      j%                         z         t        t        ||d      t        j$                  d|z        d|	z  z         d	t        j0                  t3        |d	|z  |	dz   z              z  }
t        t        ||d      d|	dz   dt        j
                  d	      z
  z  |
z  z
         d	t        j
                  |	dz   d	z        z  d	|	z  t        j
                  t5        |	            z  z
  }
t        t        ||d	      dd	t        j
                  d	      z  dz
  |
z  z
         y )N         ?      ?皙?alpha333333?    .Agףp=
?   Fforce_finiter   power皙?c                 z    |t        j                  | |z
  d      z  d|z
  t        j                  || z
  d      z  z   S )Nr   r    )npmaximum)y_truey_predr%   s      i/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/metrics/tests/test_regression.py<lambda>z)test_regression_metrics.<locals>.<lambda>M   s=    : 2	
Ubjj&!4425    d   )qg?      ?            )r/   aranger   r   r   logr   r   r   r   isfiniter   r   r   r   r   absmediansumr   r
   
percentiler   sqrtmeanr   r   )	n_samplesr1   r2   y_pred_2mape
dev_medianr%   pinball_loss
y_quantilendev_means              r3   test_regression_metricsrO   &   sx   YYy!FaZFzH*66:C@vv.266!f*-rvva&j/AB +FF;SA)&&93?)&(;SA)&&DcJ)&(#FL-ff=sC)&&9D;;t#::	&&1370%;eDeQO0@#F eDc ffA666* q18FF3K 6!223779J/	BFF6F?#'')J66 E5L v5Ju5	
vvu
-
1
1
3
vz5
1
5
5
78	8 /s3 YYq!i-(FZFAffB7
adQUlQ&' ffA6Q1rvvay=8Q ffA6BFF1I8I ffE:
bggaj.1
	!RWWV_%8%8%:: ffA6q6z8JaRSe8T 2775Vq1u)=>??Hq1	QUq266!9}%00
 2661q5A+&&Q	!1E)EEHq11BFF1I8IX7U3Ur5   c                      t        dggdggd      } t        dggdggd      }t        j                  |       t	        j
                  |      k(  sJ y )Nr    
   
raw_valuesmultioutput)r   r   r/   rE   pytestapprox)msermses     r3   2test_root_mean_squared_error_multioutput_raw_valuerY      sO     qcUbTF
EC"QC5B4&lKD773<6==....r5   c                     t        j                  g dg dg dg      } t        j                  g dg dg dg      }t        | |      }t        |d       t	        | |      }t        |dd	       t        | |      }t        |d
d	       t        | |      }t        |dd	       t        | |      }t        |d       t        | |      }t        |d       t        j                  t        | |      d      }t        j                  |      sJ |dkD  sJ t        | |      }t        |d       t        | |d      }t        |d       t        | |d      }t        |d       t        | |dd      }t        | j                   d         D cg c]  }dt        j"                  | d d |f   |d d |f   z
        j%                         t        j"                  | d d |f   t        j&                  | d d |f         z
        j%                         z  z
   }}t        j(                  t        j*                  |      d|      }t-        ||       t        | |dd      }t        ||j/                                ddg}t        |ddgd      }t        |d       t        |ddgd      }t        |d       t        | |dd      }t        |t         j0                         t        | |dd      }t        |t         j0                         | d d d df   } |d d d df   }t        | |d      }t        | |dd      }t        ||       t        | |d      }t        | |dd      }t        ||       t        |ddgdd      }t        |t         j0                         t        |ddgdd      }t        |t         j2                          y c c}w ) Nr    r   r   r    r   r    r    r    r    r    r   r    r   r   r   r    r    r   r    r    g?guV?r(   decimalr-   g)\(?g?)decimalsr'   r"   variance_weightedrS   g      uniform_averageg      rR   r%   rT   r    g      @r!   gffffff@        FrT   r*   r8   g      @)r/   arrayr   r   r   r   r   r   r   aroundr   r@   r   r   r   rangeshaperA   rC   rB   whereisnanr   rF   naninf)r1   r2   errorscoreiraw_expected_scoreycerror2s           r3   test_multioutput_regressionrv      s   XX|\<@AFXX|\<@AFvv.EBC#FF3Eua0"662Eua0'7Eua0  /E45ff-E45II4VVDqQE;;u3;;!&&1E01VV1DEE}-VV1BCEv&VV3LQE
 v||A'	 (A 	

&&1q!t,
-
1
1
3
&&1		&A, 77
8
<
<
>?	? (	   "((+=">CUVe%78VV3DUVE16689
sBR#s1DEEs#R#s1DEEs# $7eE rvv&VV1BQVWErvv& AssF^FAssF^FVV1DEE$7eF v&VV1BCEff2CRWXFv& 
S#J$7eE rvv&
S#J$7eE w'as   BN<c                     t        t        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t	        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t        dgdg      d       t        t        ddgddg      d       t        t        ddgddg      d       t        t        fD ]  } t         | ddgddg      d       t         | ddgddgd      t        j                          t         | ddgddg      d       t         | ddgddgd      t        j                          d}t        j                   t"        |	      5  t        d
gd
g       d d d        d}t        j                   t"        |	      5  t        g dg d       d d d        d}t        j                   t"        |	      5  t        g dg d       d d d        d}t        j                   t"        |	      5  t%        g dg d       d d d        d}t'        t)        dgdg|      dd|z
  z  d       d}t        j                   t"        |	      5  t)        dgdg|       d d d        t        j                   t"        |	      5  t+        dgdz  dgdz  |       d d d        t        t)        dgdgd      dd       d}d}t        j                   t"        |	      5  t)        dgdg|       d d d        t        j                   t"        |	      5  t+        dgdz  dgdz  |       d d d        d}t'        t)        dgdg|      dd|z
  z         d}t        j                   t"        |	      5  t)        dgdg|       d d d        t        j                   t"        |	      5  t+        dgdz  dgdz  |       d d d        d}t'        t)        dgdg|      dd       d}t        j                   t"        |	      5  t)        dgdg|       d d d        t        j                   t"        |	      5  t+        dgdz  dgdz  |       d d d        d}t'        t)        dgdg|      dd       d}t        j                   t"        |	      5  t)        dgdg|       d d d        t        j                   t"        |	      5  t+        dgdz  dgdz  |       d d d        y # 1 sw Y   |xY w# 1 sw Y   SxY w# 1 sw Y   *xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   (xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrf   r!   r    r   r8   Fr)   zSMean Squared Logarithmic Error cannot be used when targets contain negative values.match      )r!          @      @)r!   g       r|   zXRoot Mean Squared Logarithmic Error cannot be used when targets contain negative values.g333333r+   r(   gMbP?)rtolz-can only be used on strictly positive y_pred.z<only be used on non-negative y and strictly positive y_pred.r9   r{   g:0yE>atolz3can only be used on strictly positive y and y_pred.r|   )r   r   r   r   r   r   r   r   r   r   r   r   r/   ro   rn   rU   raises
ValueErrorr   r   r   r   )smsgr,   s      r3   !test_regression_metrics_at_limitsr      s    *C53%8#>/u=sC.use<cB+SEC593?)3%#7=6useDcJ-secU;SA	3%#/50#>D #qC84c:(#qC8<cB 01Aq!fq"g.4Aq!fq"gEBRVVGLAq!fq!f-s3Aq!fq!f5A266J	 2	#  
z	-vv. 
.	#  
z	-0@A 
.	#  
z	-/A 
.	#  
z	-#$4oF 
. EqcC56QYd :C	z	-secU%8 
.	z	-#SEAIU; 
. -secU!Dc1ME
HC	z	-secU%8 
.	z	-#SEAIU; 
. E)3%#eDa1u9oV
HC	z	-secU%8 
.	z	-#SEAIU; 
. E)3%#eDdQUV
?C	z	-secU%8 
.	z	-#SEAIU; 
. E)3%#eDdQUV
?C	z	-secU%8 
.	z	-#SEAIU; 
.	-} 
.	- 
.	- 
.	- 
.	- 
.	-	-	- 
.	-	-	- 
.	-	-	- 
.	-	-	- 
.	-	-	-s   8U,U"UU(2U5&V?V3VV)V6WW-W!W)UUU%(U25U?VVV&)V36W WWW&)W2c            	      *   dg ddfddgdgdggdfdddgddgddggdfdddgddgddggdfdg d	g d
g dgdfg} t        | d      D ]  \  \  }}}\  }}}||k(  r}||k(  rxt        ||d       \  }}}	}
||k(  sJ |dk(  rAt        |t        j                  |d             t        |	t        j                  |d             wt        ||       t        |	|       t        j                  t              5  t        ||d        d d d         y # 1 sw Y   xY w)N
continuousr    r(   r<   r    r(   r<   zcontinuous-multioutput   r=   )r    r<   r=   )r(   r(   r(   )r<   r    r    )repeat)r8   r    )r   r   r   r/   reshaperU   r   r   )EXAMPLEStype1y1n_out1type2y2n_out2y_typey_check1y_check2rT   s              r3   test__check_reg_targetsr   =  s>    
y!$	aS1#*	!QFQFQF#;Q?	!QFQFQF#;Q?	!Iy)#DaHH 5<HQ4O0F0eRE>f.6HRQU6V3FHhF?"?$"8RZZG-DE"8RZZG-DE"8R0"8R0z*"2r40 +* 5P +*s   0D		D	c                      d} dj                  |       }t        j                  t        |      5  t	        g ddgdgdgg|        d d d        y # 1 sw Y   y xY w)Nthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rx   r   r    r(   r<   )formatrU   r   r   r   )invalid_multioutputexpected_messages     r3   !test__check_reg_targets_exceptionr   V  sT    3PWW	
 
 
z)9	:9sQC!o7JK 
;	:	:s   AAc            	         ddgddgddgddgg} ddgddgdd	gdd
gg}t        | |d      }t        | |d      }t        | |d      }t        | |d      }t	        | |d      }t        | |d      }t        | |dd      }t        | |dd      }	t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t        |	ddgd       ddggd	z  } ddggd	z  }t        | |d      }t        | |d      }t        | |d      }t	        | |d      }t        | |d      }t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t        |ddgd       t	        ddgddggddgddggd      }t        |dd gd       t        j                  |      t	        ddgddggddgddggd!      k(  sJ t        ddgddggddgddggd      }t        |dd"gd       t        ddgddggddgddggdd      }	t        |	t        j                   d"gd       ddgddgg} dd	gddgg}t	        | |d      }
t        |
dd#gd       t        j                  |
      t	        | |d!      k(  sJ t	        | |dd      }t        |t        j                  d#gd       t        t        j                  |      t	        | |d!d             t        | |d      }t        |dd#gd       t        j                  |      t        | |      k(  sJ t        | |dd      }t        |dd$gd       t        | |dd      }	t        |	t        j                  d#gd       t        t        j                  |	      t        | |d%             t        j                  ddgddgdd&gg      } t        j                  ddgddgd'd'gg      }t        | |d      }t        t        j                  d| z         t        j                  d|z         d      }t        ||d       y )(Nr    r(         @r8         @r<   r      r=         @rR   rS   r"   re   Frg   g      ?g      ?r`         ?g      ?g      ?g	g?g2w-!?ffffff?g(\?g-?gv?r   r!   rf   g      rd   g      g      rz   r)   r:   r;   )r   r   r   r   r   r   r   r   r/   rF   ro   rn   r   rh   r   r?   )r1   r2   rW   maepblrI   revsd2psevs2r2r22mslemsle2s                 r3   !test_regression_multioutput_arrayr   a  s   !fsBi#qAq62F!fq"g1v3x0F
VV
FC
ff,
GC
FF
EC)&&lSD\:A
"66|
LCFF#<PD#LuD cE6?A>cD%=!<cHi#8!DdVV$4a@a$q9cD$<;dUENA>dT4L!< !fX\F!fX\F
VV
FC
ff,
GC
FF
EC\:AFFEDcC:q9cC:q9cC:q9a#sQ7dS#J:1b'Aq6"aVaV$4,OAa!TA6771:
R1a&QFQF+9J    #
R1a&QFQF+C cAu:q9#
R1a&
Q!Q 	D dbffWe$4a@ !fq!fF!fq!fF	&&l	;Bb3+q9772;(66?PQQQQ
66|%
PCcBFFD>1=
->US
 #66|
LCcC;:773<3FFCCCCFF#<PDdS$K;#LuD dRVVTNA>
/US
 XXQx!Q!Q01FXXQx!SAq623F!&&lKD
q6zBFF1v:.LE dE15r5   c                  L   ddgddgddgddgg} ddgddgdd	gdd
gg}t        | |ddg      }t        | |ddg      }t        | |ddg      }t        | |ddg      }t	        | |ddg      }t        | |ddg      }t        | |dddg      }t        | |ddgd      }	t        |dd       t        |dd       t        |dd       t        |dd       t        |dd       t        |dd       t        |dd       t        |	dd       t        j                  ddgddgddgg      } t        j                  ddgddgddgg      }t        | |ddg      }
t        t        j                  d| z         t        j                  d|z         ddg      }t        |
|d       y )Nr    r(   r   r8   r   r<   r   r   r=   r   r#   r&   rS   r"   re   Frg   g(\?r`   gzG?gffffff?g|гY?gGz?gPn?r:   r;   g333333?gffffff?)r   r   r   r   r   r   r   r   r/   rh   r   r?   )r1   r2   msewrmsewmaewmapewrwevswd2pswevsw2r   r   s               r3   test_regression_custom_weightsr     s   !fsBi#qAq62F!fq"g1v3x0Fff3*ED#FFc
KEvvC:FD*66SzRE	&&sCj	9B#FFc
KDVV3S#JOE$S#JUE dA.tQ/eQ/vq1D!,dA.ua0tQ/ XXQx!Q!Q01FXXQx!SAq623F!&&sCjID
q6zBFF1v:.S#JE eQ/r5   metricc                     dg}dg}d}t        j                  t        |      5   | ||      }t        j                  |      sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r    z,not well-defined with less than two samples.rx   )rU   warnsr	   r/   rm   )r   r1   r2   warning_msgrq   s        r3   test_regression_single_sampler     sO    SFSF@K 
,K	@vv&xx 
A	@	@s   !AAc                     d} t         j                  j                  d      j                  |       dz   }t         j                  j                  d      j                  |       dz   }t	        t        ||d      t        ||d             t	        t        ||d      t        ||d      d	       t	        t        ||d
      t        ||d      d	       t	        t        ||d      t        ||d      d	       y )Nr6   r   皙?r    g|۽r+   g8   ?gư>r~   g ?r(   go    @)r/   randomRandomStaterandr   r   )rG   r1   r2   s      r3    test_tweedie_deviance_continuityr     s    IYY""1%**95;FYY""1%**95;FffI>ffA6 ffI>ffA6 ffI>ffA6 ffI>ffA6r5   c                      t         j                  j                  d      } | j                  d      }d|z  }t	        ||      t        j                  d      k(  sJ y )N*   r6   sizeg333333?r-   )r/   r   r   exponentialr   rU   rV   )random_number_generatorr1   r2   s      r3   #test_mean_absolute_percentage_errorr     sQ     ii33B7$00c0:F6\F)&&9V]]3=OOOOr5   distribution)normal	lognormalr   uniformtarget_quantile)皙?r"         ?c                    t        t        d      st        j                  d       dt        j                  j                  d      } t        ||             t        j                        }t        j                  |      }t        |      }t        j                  t        j                  dd	d
            }|D ]  }t        j                  |      }t        |      }	|	|t        j                  |j                        j                  z
  k\  sJ ||k     z
  j                         d	z
  z  |k\     |z
  j                         z  z   }
|
z  }
t        |
|	        fd}t!        j"                  |j%                         d      }|j&                  sJ |j(                  t        j*                  |d      k(  sJ |j,                  t        j*                  |      k(  sJ y )NquantilezOThis test requires a more recent version of numpy with support for np.quantile.i  r   r   
fill_valuer$   r   r    r6   c                 N    t        j                  |       }t        |      S )Nr   r$   )r/   fullr   )xconstant_preddatarG   r   s     r3   objective_funczFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funcA  s"    	a8 }OLLr5   zNelder-Mead)methodg{Gz?)rel)hasattrr/   rU   skipr   r   getattrr   r   r   linspacefinfodtypeepsrC   r   r   minimizerF   successr   rV   fun)r   r   rng	best_predbest_constant_predbest_pblcandidate_predictionspredr   r   expected_pblr   resultr   rG   s    `           @@r3   .test_mean_pinball_loss_on_constant_predictionsr     s   
 2z",	
 I
))


#C%73%95D D/2IyA '9QH KKbkk!Q.DE%	d;m?K
 h(..!9!=!===== tD4K005571;NO%
#%/S" " 		!L#.! &(M ~tyy{=QF>>>88v}}YD9999::x0000r5   c                     d} t         j                  j                  d      }|j                  | df      }|j	                  |       }g d}|D ]p  }t        t        |d      }t        dd	
      }t        |t        |      |      j                  ||      }|j                  d   t        j                  |      k(  rpJ  y )Ni  r   r   r   )r   r   r   r"   r   g?r   F)r%   greater_is_betterr   r   )strategyr   )r   )
param_gridscoring)r/   r   r   r   r   r   r   r   r   dictfitbest_params_rU   rV   )	rG   r   Xyall_quantilesr%   neg_mean_pinball_loss	regressorgrid_searchs	            r3   $test_dummy_quantile_parameter_tuningr   L  s    
 I
))


"C

A
'AY'A;M +#!

 #JF	"]3)
 #a)	 	 ''
3v}}U7KKKK r5   c                      t         j                  j                  d      } d}| j                  |      }|j	                         | j                  |      z   }t        ||      t        ||d      dz  k(  sJ y )Ni  r6   r   r"   r$   r(   )r/   r   r   r   copyr   r   r   )r   rM   r1   r2   s       r3   #test_pinball_loss_relation_with_maer  g  sm    
))


$CAZZQZF[[]S[[^+FFF+VV37!;	<	<r5   c                     d}t        j                  d      t        j                  dd      }}t        j                  t        |      5   | ||d       ddd       y# 1 sw Y   yxY w)	z6Check the deprecation warning of the squared parameterzB'squared' is deprecated in version 1.4 and will be removed in 1.6.rQ   r       rx   FsquaredN)r/   r>   rU   r   FutureWarning)r   depr_msgr1   r2   s       r3   %test_mean_squared_deprecation_squaredr  t  sL     THYYr]BIIa$4FF	m8	4vvu- 
5	4	4s   	AA'zignore:'squared' is deprecatedzold_func, new_funcc                 F   t        j                  g dg dg dg      }t        j                  g dg dg dg      }t        j                  ddgddgd	d
gg      }t        j                  ddgddgddgg      }t        j                  t        |            } | ||d      } |||      }t	        ||        | |||d      } ||||      }t	        ||        | ||dd      } |||d      }t	        ||        | |||dd      } ||||d      }t	        ||       y )Nr[   r\   r]   r^   r_   r"   r    r(   r   r:   r   r;   Fr  )sample_weightr  )r
  rR   )rT   r  rS   )r
  rT   r  )r
  rT   )r/   rh   r>   lenr   )old_funcnew_funcr1   r2   swexpectedactuals          r3   test_rmse_rmsle_parameterr  ~  s'    XX|\<@AFXX|\<@AFXXQx!Q!Q01FXXQx!SAq623F	3v;	B6Hff%FHf%b%HHffB7FHf%L%PHff,?FHf%blEH ffBLQFHf%r5   )2   )<	itertoolsr   numpyr/   rU   numpy.testingr   scipyr   scipy.specialr   r   sklearn.dummyr   sklearn.exceptionsr	   sklearn.metricsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.metrics._regressionr   sklearn.model_selectionr   sklearn.utils._testingr   r   r   rO   rY   rv   r   r   r   r   r   markparametrizer   r   r   r   r   r  r  filterwarningsr   r5   r3   <module>r"     s      )  * ( 5    $ ; 0 Wt/T(n[<|12L[6|0D H.>@P#QR SDP E *,=>/1 ?/1dL6	 $68N#OP. Q. <=	45	!<=& >&r5   