
    Q3j`                        d Z ddlZddlZddlZddlZddlZddl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 ddlmZmZ ddlmZmZmZ dd	lmZmZmZmZ dd
lm Z  g dZ! edd      \  Z"Z# e       jI                  e"dd       Z%e#dd Z& edd      \  Z"Z# e       jI                  e"dd       Z'e#dd Z(e%e&fe'e(fgZ) eddddd      \  Z*Z+ ee+      Z+e*e+fgZ, e	       Z-e-j\                  Z/e-j`                  Z1d Z2d Z3d Z4ejj                  jm                  de)      d        Z7ejj                  jm                  de,      d        Z8ejj                  jm                  de)      d        Z9ejj                  jm                  de,      d        Z:d Z;d Z<d  Z=d! Z>d" Z?d# Z@d$ ZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGejj                  jm                  d+e       d,        ZHd- ZId. ZJejj                  jm                  d/eeg      d0        ZKd1 ZLd2 ZMejj                  jm                  d/eeg      d3        ZNd4 ZOejj                  j                  d5      d6        ZQd7 ZRd8 ZSd9 ZTd: ZUejj                  jm                  d;ej                  ej                  g      ejj                  jm                  d<eeg      d=               ZXd> ZYejj                  jm                  d<eeg      d?        ZZejj                  jm                  d/eeg      d@        Z[ejj                  jm                  d/eeg      ejj                  jm                  dAg dB      dC               Z\ejj                  jm                  d/eeg      dD        Z]dE Z^dF Z_dG Z`dH Zay)IzD
Testing for Multi-layer Perceptron module (sklearn.neural_network)
    N)load_digits	load_irismake_classificationmake_multilabel_classificationmake_regression)ConvergenceWarning)PoissonRegressor)roc_auc_score)MLPClassifierMLPRegressor)LabelBinarizerMinMaxScalerscale)assert_allcloseassert_almost_equalassert_array_equalignore_warnings)CSR_CONTAINERS)identitylogistictanhrelu   T)n_class
return_X_y      
   g      4@g      Y@   )	n_samples
n_featuresbiasnoiserandom_statec            
          t         d d } t        d d }g }t        j                  d      }d }|D ]  }t	        d|d      }t        t              5  |j                  | |       d d d        |j                  t        j                   ||j                  d          ||j                  d         g              t        t        |      dz
        D ]   }||   ||dz      kD  j                         r J  y # 1 sw Y   xY w)	Nd   r   c                 R    t        j                  t        j                  |             S N)npsumabs)xs    R/DATA/.local/lib/python3.12/site-packages/sklearn/neural_network/tests/test_mlp.py<lambda>ztest_alpha.<locals>.<lambda>G   s    RVVBFF1I.    r      )hidden_layer_sizesalphar$   categoryr   )X_digits_binaryy_digits_binaryr)   aranger   r   r   fitappendarraycoefs_rangelenall)Xyalpha_vectorsalpha_valuesabsolute_sumr2   mlpis           r-   
test_alpharF   @   s    AAM99Q<L.LrQO&89GGAqM :HHl3::a=1<

13NOP	
	  3|$q()a =Q#77<<>>> * :9s   C44C=	c            
         t        j                  g dg      } t        j                  dg      }t        dddddddd      }dgdz  |_        dgdz  |_        d|_        t        j                  dd	gd
dgddgg      |j                  d<   t        j                  dgd	gg      |j                  d<   t        j                  ddg      |j                  d<   t        j                  dg      |j                  d<   g dz  |_        g dz  |_        d|_        d|_	        d|_
        d|_        dg|j                  dz
  z  |_        dg|j                  dz
  z  |_        d|_        d|_        t         j                  |_        g |_        d|_        |j                  D cg c]  }t        j$                  |       c}|_        |j                  D cg c]  }t        j$                  |       c}|_        |j+                  | |ddg       t-        |j                  d   t        j                  ddgddgddgg      d       t-        |j                  d   t        j                  dgdgg      d       t-        |j                  d   t        j                  ddg      d       t-        |j                  d   t        j                  d      d       t-        |j/                  |       d   dd       y c c}w c c}w )N)g333333?皙?gffffff?r   sgd皙?r   r0   r   )solverlearning_rate_initr2   
activationr$   max_iterr1   momentum皙?g333333?      ?      ?r   classesgJ+?guX?gડ2?g'?g.NV?gVSbb)decimalgF??g#070?gY,?g~?gZd;O?)r   r0   gS?)r)   r:   r   r;   intercepts_
n_outputs__coef_grads_intercept_gradsn_features_in_n_iter_learning_rate_	n_layers_out_activation_t_inf
best_loss_loss_curve__no_improvement_count
zeros_like_intercept_velocity_coef_velocitypartial_fitr   predict_proba)r?   r@   rD   
interceptscoefss        r-   test_fitrk   U   s   
/"#A
!A
	C qCJcAgCOCNHHsCj3*sAh?@CJJqMHHsecU^,CJJqM3*-COOA3%COOA1fCO6CC CKC CM cS]]Q./CO3#--!"34C$CCFVVCNCO !C47OO4Cjj!OC =@JJGJ5"--.JGCOOAq1a&O)> 

1
5(#i%:Y	<RST
 

1rxx'XJ0G'HRST*BHHh5H,ISTU*BHHV,<aH ))!,T2E1Ei Hs   K*K/c                  l   dD ]  } d}d}t         j                  j                  d      }|j                  ||      dt        j                  t        j
                  |      dz   |       z   }t               j                  |      t        D ]  }t        |dddd	dd
      t        j                         5  t        j                  dt               j                  |       d d d        t        j                  j                   j"                  z   D cg c]  }|j%                          c}      }j&                  d   gj(                  gz   j*                  gz   }g g g g j-                         t/        j0                  dz
        D ]  }	j-                  t        j2                  j&                  d   ||	dz      f             j-                  t        j2                  j&                  d   ||	dz      f             ||	   }
||	dz      }j-                  t        j2                  |
|f             j-                  t        j2                  |              fd} ||      \  }}t        j4                  t        j6                  |            }t        j6                  |d      }t        j8                  |      }d}t/        |      D ]4  }	|d d |	f   |z  } |||z         d    |||z
        d   z
  |dz  z  ||	<   6 t;        ||         y # 1 sw Y   =xY wc c}w )N)r   r      r   *   )seedr0   lbfgsh㈵>rP   )rM   r1   rK   r2   rL   rN   r$   ignorer   c           
      4    j                  | d       S r(   )_loss_grad_lbfgs)tr?   Yactivations
coef_gradsdeltasintercept_gradsrD   s    r-   loss_grad_funz$test_gradient.<locals>.loss_grad_fun   s'    ++q!T;
O r/   g       @)r)   randomRandomStaterandmodr7   r   fit_transformACTIVATION_TYPESr   warningscatch_warningssimplefilterr   r8   hstackr;   rV   ravelshaper1   rW   r9   r<   r]   emptyzerossizeeyer   )n_labelsr    r!   r$   r@   rM   lthetalayer_unitsrE   fan_infan_outr{   valuegradnumgradnEepsilondthetar?   rv   rw   rx   ry   rz   rD   s                       @@@@@@@r-   test_gradientr      s    	
yy,,",5i4ryy+a/::**1-**J%#%#&C ((*%%h0BC1 + II#**s2NO2NQqwwy2NOPE771:,#*@*@)AAS^^DTTKKFJ Oq!3==1,-""288QWWQZQU9K,L#MNbhh
KA4F'GHI$Q%a!e,!!"((FG+<"=>&&rxx'89 . 
 *%0MUDhhrwwu~.Gq!Aq	AG1X1a47*!%&.1!4}UV^7TUV7WWs]$
 
  .e + $ +* Ps   <-L$L1$L.zX,yc           	      l   | d d }|d d }| dd  }|j                   d   |j                  j                  f}t        D ]w  }t	        ddddd|      }|j                  ||       |j                  |      }|j                  ||      dkD  sJ |j                   d   |j                  j                  f|k(  rwJ  y )	N   r   rp   2   Tr0   )rK   r1   rN   shuffler$   rM   ffffff?)r   dtypekindr   r   r8   predictscore)	r?   r@   X_trainy_trainX_testexpected_shape_dtyperM   rD   	y_predicts	            r-   test_lbfgs_classificationr      s    
 gGgGstWF"LLOW]]-?-?@&
!!
 	!KK'	yy'*T111"IOO$8$89=QQQQ 'r/   c           
          t         D ]Z  }t        dddddd|      }|j                  | |       |dk(  r|j                  | |      d	kD  rBJ |j                  | |      d
kD  rZJ  y )Nrp   r   r   MbP?Tr0   )rK   r1   rN   tolr   r$   rM   r   rH   g\(\?)r   r   r8   r   )r?   r@   rM   rD   s       r-   test_lbfgs_regressionr     sv     '
!!
 	1#99Q?T))) 99Q?T))) 'r/   c           
          d}t         D ]Z  }t        ddd|dd|      }t        j                  t              5  |j                  | |       ||j                  k\  sJ 	 d d d        \ y # 1 sw Y   gxY w)Nr   rp   r   r   Tr0   )rK   r1   rN   max_funr   r$   rM   )r   r   pytestwarnsr   r8   r[   r?   r@   r   rM   rD   s        r-    test_lbfgs_classification_maxfunr   '  sq     G&
!!
 \\,-GGAqMckk))) .- ' .-s   $A''A0	c                     d}t         D ][  }t        dddd|dd|      }t        j                  t              5  |j                  | |       ||j                  k\  sJ 	 d d d        ] y # 1 sw Y   hxY w)	Nr   rp   r   g        r   Tr0   )rK   r1   r   rN   r   r   r$   rM   )r   r   r   r   r   r8   r[   r   s        r-   test_lbfgs_regression_maxfunr   <  st     G&
!!	
 \\,-GGAqMckk))) .- ' .-s   $A((A1	c            	         ddgddgddgddgg} g d}d	D ]  }t        d
d|ddd      }t        t              5  |j                  | |       |j                  j
                  }|j                  | |       |j                  j
                  }d d d        |dk(  rk(  rJ |dk(  s|j                  t        d|j                        z  k(  rJ  y # 1 sw Y   GxY w)Nr   r   r0      rm   )r0   r0   r0   r   )
invscalingconstantrI      g      ?T)rK   r1   learning_raterN   power_t
warm_startr3   r   r   	   )	r   r   r   r8   
_optimizerr   rL   powr   )r?   r@   r   rD   prev_etapost_etas         r-   test_learning_rate_warmstartr   R  s    
Q!Q!Q"b*AA3 '
 &89GGAqM~~33HGGAqM~~33H	 : J&x'''l*))Cs{{,CCxOOO% 4 :9s   ACC	c            	         t        ddd      \  } }t        ddddddd	
      }|j                  | |       |j                  | |      dkD  sJ t        ddddddd	      }t	        d      D ]  }|j                  | |g d        |j                  | |      dkD  sJ t        d      }|j                  | |      j                  |        y )Nr   r   Tr    r$   return_indicatorrp   rq   r   r   rP   )rK   r1   r2   rN   r$   rM   rL   g
ףp=
?rI   )rK   r1   rN   r$   rM   r2   rL   r&   )r   r0   r   r   r   rS   ?early_stopping)r   r   r8   r   r<   rg   r   )r?   r@   rD   rE   s       r-   test_multilabel_classificationr   k  s     *1tDAq C GGAqM99Q?T!!! C 3Z1o6 99Q?S    t
,CGGAqM!r/   c                      t        ddd      \  } }t        ddddd	      }|j                  | |       |j                  | |      d
kD  sJ y )Nr   rm      )r    	n_targetsr$   rp   r   {Gz?r0   )rK   r1   rN   r   r$   r   )r   r   r8   r   r?   r@   rD   s      r-   test_multioutput_regressionr     sQ    SABGDAq
2TUC GGAqM99Q?S   r/   c                      ddgg} dg}t        d      }|j                  | |ddg       t        j                  t              5  |j                  | |ddg       d d d        y # 1 sw Y   y xY w)Nr   r   r   rI   rK   r0   rS   )r   rg   r   raises
ValueErrorr?   r@   clfs      r-   test_partial_fit_classes_errorr     sb    
QA	
A
u
%COOAq1a&O)	z	"1q!f- 
#	"	"s   A$$A-c            	         t         D ]  \  } }t        dddddd      }t        t              5  |j	                  | |       d d d        |j                  |       }t        dddd	      }t        d      D ])  }|j                  | |t        j                  |      
       + |j                  |       }t        ||       |j                  | |      dkD  rJ  y # 1 sw Y   xY w)NrI   r&   r0   r   rq   rP   )rK   rN   r$   r   r2   rL   r3   )rK   r$   r2   rL   rS   r   )classification_datasetsr   r   r   r8   r   r<   rg   r)   uniquer   r   )r?   r@   rD   pred1rE   pred2s         r-   test_partial_fit_classificationr     s     (1"
 &89GGAqM :Aq
 sAOOAq"))A,O7 A5%(yyA%%%) ( :9s   CC 	c                      t        d      } | j                  dgdgdggg dg d       | j                  d	ggd
g       | j                  dgdgdgd	ggg d      dkD  sJ y )Nr   )r$   r0   r   r   )abc)r   r   r   drS   r   r   )r   rg   r   )r   s    r-   test_partial_fit_unseen_classesr     sl     Q
'COOaS1#sO_>ROSOOaSEC5!99qcA3aS)+?@1DDDr/   c            
          t         } t        }dD ]  }t        ddddd| j                  d   |      }t	        j
                         5  t	        j                  d	t               |j                  | |       d d d        |j                  |       }t        dddd| j                  d   |
      }t        d      D ]  }|j                  | |        |j                  |       }t        ||       |j                  | |      }|dkD  rJ  y # 1 sw Y   xY w)N)r   r   rI   r&   r   r0   r   r   )rK   rN   rM   r$   rL   
batch_sizerO   rr   )rK   rM   rL   r$   r   rO   g?)X_regy_regr   r   r   r   r   r   r8   r   r<   rg   r   r   )r?   r@   rO   rD   r   rE   r   r   s           r-   test_partial_fit_regressionr     s     	AA#wwqz
 $$&!!(,>?GGAqM ' A#wwqz
 sAOOAq!  Au%		!Qt||9  '&s   -DD	c                      ddgddgg} ddg}t        j                  t              5  t        d      j	                  | |dg       d d d        t        t        d	      d
      rJ y # 1 sw Y   "xY w)Nr   r   r0   r   r   rI   r   rS   rp   rg   )r   r   r   r   rg   hasattr)r?   r@   s     r-   test_partial_fit_errorsr     so    
Q!QA	
AA 
z	"U#//1qc/B 
# }G4mDDDD	 
#	"s    A''A0c                  
   t         j                  j                  d      } d}t        j                  t         j                        j
                  }|| j                  |df      z  }| j                  |      }t               }d}t        j                  t        |      5  t        j                         5  t        j                  d       |j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r   )r   zrSolver produced non-finite parameter weights. The input data may contain large values and need to be preprocessed.matchrr   )r)   r|   r}   finfofloat64maxuniformstandard_normalr   r   r   r   r   r   r   r8   )rngr    fmaxr?   r@   r   msgs          r-   test_nonfinite_paramsr     s     ))


"CI88BJJ##Ds{{A{//A+A
.C	/  
z	-$$&!!(+GGAqM ' 
.	-&& 
.	-s$   C94(C-C9-C6	2C99Dc                     t         d d } t        d d }t        ddd      }t        t              5  |j                  | |       d d d        |j                  |       }|j                  |       }|j                  d   d}}|j                  d	      }|j                  d	      }|j                  ||fk(  sJ t        ||       t        |t        j                  |             t        ||d d df         d
k(  sJ y # 1 sw Y   xY w)Nr   rm   r   r0   )r1   rM   r$   r3   r   r   axisrR   )r5   r6   r   r   r   r8   rh   predict_log_probar   argmaxr   r   r)   logr
   	r?   r@   r   y_probay_log_probar    	n_classes	proba_maxproba_log_maxs	            r-   test_predict_proba_binaryr    s    AA
1RS
TC	"4	51 
6"G''*KWWQZ	YA&I&&A&.M==Y	2222y-0K1GAqDM*c111 
6	5s   C::Dc                     t         d d } t        d d }t        d      }t        t              5  |j                  | |       d d d        |j                  |       }|j                  |       }|j                  d   t        j                  |      j                  }}|j                  d      }|j                  d      }|j                  ||fk(  sJ t        ||       t        |t        j                  |             y # 1 sw Y   xY w)Nr   rm   )r1   r3   r   r0   r   )X_digits_multiy_digits_multir   r   r   r8   rh   r   r   r)   r   r   r   r   r   r   r   s	            r-   test_predict_proba_multiclassr	  (  s    sAsA
1
-C	"4	51 
6"G''*KWWQZ1):):	YA&I&&A&.M==Y	2222y-0K1 
6	5s   C==Dc                     t        ddd      \  } }|j                  \  }}t        ddd      }|j                  | |       |j	                  |       }|j                  ||fk(  sJ t        |dkD  |       |j                  |       }|j                  d	
      }|j                  d	
      }|j                  d	      d	z
  j                  |j                  d	      d	z
        dkD  sJ t        ||       t        |t        j                  |             y )Nr   r   Tr   rp      rK   r1   r$   rQ   r0   r   g|=)r   r   r   r8   rh   r   r   r   r*   dotr   r)   r   )	r?   rv   r    r  r   r   r  r  r  s	            r-   test_predict_proba_multilabelr  =  s     *1tDAq 77Iy
w2A
NCGGAqM"G==Y	2222w}a(''*KA&I&&A&.MKKNQ##GKKNQ$67%???y-0K1r/   c                     t        dddd      \  } }dD ]  }t        dddd|      }t        dddd|      }t        j                         5  t        j                  dt
               |j                  | |       |j                  | |       d d d        t        j                  |j                  d   |j                  d         rJ  t        ddddd	      }t        ddddd
      }t        j                         5  t        j                  dt
               |j                  | |       |j                  | |       d d d        t        j                  |j                  d   |j                  d         rJ y # 1 sw Y   xY w# 1 sw Y   HxY w)Nr   rm   r0   r   )r    r!   r   r$   )TF)r1   rN   r   r$   r   rr   TF)
r   r   r   r   r   r   r8   r)   array_equalr;   )r?   r@   r   mlp1mlp2s        r-   test_shuffler  U  sd   RAQRSDAq ! 
  
 $$&!!(,>?HHQNHHQN '
 ~~dkk!ndkk!n===) !. qQQPTD qQQPUD 
	 	 	"h(:;AA 
#
 ~~dkk!ndkk!n====' '& 
#	"s   ?E5;?F5E>	F
csr_containerc                 T   t         d d }t        d d } | |      }t        ddd      }|j                  ||       |j	                  |      }|j                  ||       |j	                  |      }t        ||       |j	                  |      }|j	                  |      }t        ||       y )Nr   rp      r0   r  )r5   r6   r   r8   r   r   r   )r  r?   r@   X_sparserD   r   r   s          r-   test_sparse_matricesr    s     	AAQH
w2A
NCGGAqMKKNEGGHaKK!Eu%KKNEKK!Eue$r/   c                      ddgddgg} ddg}t        ddd	      }|j                  | |       |j                  |j                  kD  sJ y )
Nr   r   r0   r   r   rQ     rI   )r   rN   rK   )r   r8   rN   r[   r   s      r-   test_tolerancer    sP     Q!QA	
AA
C$u
=CGGAqM<<#++%%%r/   c                     ddgddgg}ddg}t        dddd      }t        t        	      5  |j                  ||       d d d        |j	                  ||       | j                         \  }}d
|v sJ y # 1 sw Y   5xY w)Nr   r   r0   r   r   rI   r   )rK   rN   verboser1   r3   	Iteration)r   r   r   r8   rg   
readouterr)capsysr?   r@   r   out_s         r-   test_verbose_sgdr#    s    
Q!QA	
AA
uq"QR
SC	"4	51 
6OOAq FC# 
6	5s   A33A<MLPEstimatorc                    t         d d }t        d d }d} | |ddd      }|j                  ||       |j                  |j                  kD  sJ |j
                  J t        |j                  t              sJ |j                  }|j                  }t        |      |k(  sJ ||z   |d   kD  sJ ||z   |d   kD  sJ  | |ddd	      }|j                  ||       |j                  J |j                  J |j
                  J y )
Nr&   rP   r  rI   T)r   rN   rK   r   r   F)r5   r6   r8   rN   r[   ra   
isinstancevalidation_scores_listbest_validation_score_r   )r$  r?   r@   r   mlp_estimatorvalid_scoresbest_valid_scores          r-   test_early_stoppingr.    s>   AA
C $uTM a!!M$9$9999##+++m66=== 33L$;;| 0000c!L$4444c!L$4444 !$uUM a++333//777##///r/   c                      ddgddgg} ddg}t        dddd	
      }|j                  | |       |j                  |j                  kD  sJ d|j                  j
                  kD  sJ y )Nr   r   r0   r   r   rQ   r  rI   adaptive)r   rN   rK   r   gư>)r   r8   rN   r[   r   r   r   s      r-   test_adaptive_learning_rater1    sh    
Q!QA	
AA
C$uJ
WCGGAqM<<#++%%%#.......r/   c                  v   t         } t        }t        j                  dgdz  dgdz  z         }t        j                  dgdz  dgdz  z   dgdz  z         }t        j                  dgdz  dgdz  z   dgdz  z         }t        j                  dgd	z  dgd	z  z   dgd
z  z   dgd
z  z         }t        j                  dgdz  dgdz  z   dgdz  z   dgdz  z   dgdz  z         }t	        ddddd      j                  | |      }|j                  | |       |j                  | |       ||||fD ]  }t	        ddddd      j                  | |      }dt        j                  |      z  }	t        j                  t        t        j                  |	            5  |j                  | |       d d d         y # 1 sw Y   xY w)Nr   K   r0   (   r   F   r   r   %   &   r  r   rp   Trn   r   )r1   rK   r   r$   r   z}warm_start can only be used where `y` has the same classes as in the previous call to fit. Previously got [0 1 2], `y` has %sr   )X_irisy_irisr)   r:   r   r8   r   r   r   r   reescape)
r?   r@   
y_2classes
y_3classesy_3classes_alt
y_4classes
y_5classesr   y_imessages
             r-   test_warm_startrC    s   AA1#(aS2X-.J1#(aS2X-b89JXXqcBh!r1QC"H<=N1#(aS2X-b8A38CDJ1#(aS2X-b8A38CqcBhNOJ WBTX	c!Qi  GGAqMGGAzNJ
C 
 #a) 	246IIcNC 	
 ]]:RYYw-?@GGAsO A@ D A@s   F//F8	c                 L   t         t        }}d} | ddd|      }t        j                         5  t        j                  dt
               |j                  ||       ||j                  k(  sJ |j                  ||       ||j                  k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r   rI   T)r1   rK   r   rN   rr   )r8  r9  r   r   r   r   r8   r[   )r$  r?   r@   rN   r   s        r-   test_warm_start_full_iterationrE    s     6qAH
UthC 
	 	 	"h(:;13;;&&&13;;&&& 
#	"	"s   A!BB#c                      t         d d } t        d d }d}d}dD ]H  }t        ||d|      }|j                  | |       |j                  |dz   k(  sJ ||j
                  kD  rHJ  y )Nr&   r   r  )r   rm   r   r   r&   rI   r   rN   rK   n_iter_no_changer0   )r5   r6   r   r8   rc   r[   )r?   r@   r   rN   rH  r   s         r-   test_n_iter_no_changerI    s     	AA
CH 0huGW
 	1 ((,<q,@@@@#++%%% 0r/   z-ignore::sklearn.exceptions.ConvergenceWarningc                      t         d d } t        d d }d}t        j                  }d}t	        ||d|      }|j                  | |       |j                  |k(  sJ |j                  |j                  dz
  k(  sJ y )Nr&   g    eAr  rI   rG  r0   )r5   r6   r)   r`   r   r8   r[   rc   )r?   r@   r   rH  rN   r   s         r-   test_n_iter_no_change_infrK    s     	AA C vvH
(5CSC GGAqM ;;(""" $$a777r/   c                      ddgddgddgddgg} g d}t        d      }t        j                  t        d	
      5  |j	                  | |       d d d        y # 1 sw Y   y xY w)Nr0   r   r   r   rm   )r   r   r   r0   Tr   zaThe least populated classes in y have only 1 member.*Classes with too few members are: \['True'\]r   )r   r   r   r   r8   r   s      r-   test_early_stopping_stratifiedrM  3  sb    
Q!Q!Q!Q(AA
t
,C	/
 	1
 
 
   AAc                  p   t        ddddd      \  } }t        j                  g dt              }||   }t	        d	d
d      }|j                  | |       |j                  J t        |j                        |j                  k(  sJ t        j                  |j                        j                         sJ y)zCheck that labels can be strings when `early_stopping=True`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/33760
    r   r   r   rm   rn   )r    r!   r  n_informativer$   )class_aclass_bclass_c)r   Tr   )r   rN   r$   N)r   r)   r:   objectr   r8   r(  r=   r[   isfiniter>   )r?   r@   labelsrD   s       r-   %test_mlp_early_stopping_string_labelsrW  C  s     DAq XX7vFFq	A
tbr
JCGGAqM!!---s%%&#++555;;s--.22444r/   c                  f   t        ddddd      } | j                  t        d d t        d d        | j	                  t        dd        }| j                  t        dd        }t        ddddd      }|j                  t        d d j                  t        j                        t        d d        |j	                  t        dd  j                  t        j                              }|j                  t        dd  j                  t        j                              }t        ||       t        ||d	       y )
Nrq   rm   r   r0   r&   rJ   r2   r1   r$   rN   r   ,  r   rtol)r   r8   X_digitsy_digitsr   rh   astyper)   float32r   r   )mlp_64pred_64proba_64mlp_32pred_32proba_32s         r-   "test_mlp_classifier_dtypes_castingrh  [  s    vAQUF JJx~x~.nnXcd^,G##HSTN3HvAQUF JJx~$$RZZ0(4C.AnnXcd^222::>?G##HSTN$9$9"**$EFHw(HhU3r/   c                     t        ddddd      } | j                  t        d d t        d d        | j	                  t        dd        }t        ddddd      }|j                  t        d d j                  t        j                        t        d d        |j	                  t        dd  j                  t        j                              }t        ||d	       y )
Nrq   rY  r0   r   r   rZ  r[  gMb@?r\  )	r   r8   r^  r_  r   r`  r)   ra  r   )rb  rc  re  rf  s       r-   !test_mlp_regressor_dtypes_castingrj  o  s    vAQUF JJx~x~.nnXcd^,GvAQUF JJx~$$RZZ0(4C.AnnXcd^222::>?GGW51r/   r   	Estimatorc                    t         j                  |       t        }} |ddddd      }|j                  |d d |d d        |j	                  |dd        }t        |j                  D cg c]  }|j                  | k(   c}      sJ t        |j                  D cg c]  }|j                  | k(   c}      sJ |t        k(  r|j                  | k(  sJ y y c c}w c c}w )Nrq   rY  r0   r   rJ   rZ  r[  )
r^  r`  r_  r8   r   r>   rV   r   r;   r   )r   rk  r?   r@   rD   pred	interceptcoefs           r-   test_mlp_param_dtypesrp    s    
 ??5!8qA
vAPTC GGAdsGQtW;;qwD#//J/Y	5(/JKKK

;


e#
;<<<L zzU""" !	 K;s   (CCc                 D   t        dddd      }dggdg}}|j                  ||       | dz  }t        j                  ||       t        j                  |      }dggd	g}}t        d      D ]  }|j                  ||        |j                  |      }	t        |	|d
       y)zYLoading from MLP and partial fitting updates weights. Non-regression
    test for #19626.)rn   rn   r   r   )r1   r$   rL   rN   r   r   zmlp.pklr0   -C6?r\  N)	r   r8   joblibdumploadr<   rg   r   r   )
tmp_pathpre_trained_estimatorfeaturestargetpickled_fileload_estimatorfine_tune_featuresfine_tune_targetr"  predicted_values
             r-   (test_mlp_loading_from_joblib_partial_fitr    s     ) rdUX uqcfH h/ i'L
KK%|4[[.N ./C51#(3Z""#57GH  %,,-?@OO%5DAr/   c                    t        j                  d      }t        j                  j	                  d      }|j                  |j                  dd      ddg      }|j                  t        j                  dd      d	
      } | dd      }t        j                         5  t        j                  dt               |j                  ||       ddd       y# 1 sw Y   yxY w)zCheck that feature names are preserved when early stopping is enabled.

    Feature names are required for consistency checks during scoring.

    Non-regression test for gh-24846
    pandasr   r   r   	colname_a	colname_b)datacolumnsr0   	colname_y)r  nameTrP   )r   validation_fractionerrorN)r   importorskipr)   r|   r}   	DataFramerandnSeriesfullr   r   r   UserWarningr8   )rk  pdr   r?   r@   models         r-   test_preserve_feature_namesr    s     
		X	&B
))


"C
#))B*[+4NOA
		rwwr1~K	8ATsCE		 	 	"g{3		!Q 
#	"	"s   -CCc                     | dddd      }t        j                         5  t        j                  dt               |j	                  t
        t               t        |j                        }|j                  d       |j	                  t
        t               ddd       t        |j                        kD  sJ y# 1 sw Y   $xY w)	z0Check that early stopping works with warm start.r   r   T)rN   r$   r   r   rr      rN   N)
r   r   r   r   r8   r8  r9  r=   r(  
set_params)r$  rD   n_validation_scoress      r-   'test_mlp_warm_start_with_early_stoppingr    s     !TC 
	 	 	"h(:;!#"8"89# 
# s%%&)<<<< 
#	"s   A6B::CrK   )rI   adamrp   c                     | |dddt         j                  d      }t        j                  t              5  |j                  t        t               ddd       |j                  dk(  sJ |j                  d       t        j                  t              5  |j                  t        t               ddd       |j                  dk(  sJ y# 1 sw Y   zxY w# 1 sw Y   'xY w)	zCheck that we stop the number of iteration at `max_iter` when warm starting.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/24764
    TFr   r   )rK   r   r   rN   rH  r$   Nr  r  )
r)   r`   r   r   r   r8   r8  r9  r[   r  )r$  rK   r  s      r-   "test_mlp_warm_start_no_convergencer    s     E 
(	)		&&! 
*==B	b!	(	)		&&! 
*==B 
*	)
 
*	)s   C
C
CCc                      | dd      j                  t        t              }d}t        j                  t
        |      5  |j                  t        t               ddd       y# 1 sw Y   yxY w)zoCheck partial fit does not fail after fit when early_stopping=True.

    Non-regression test for gh-25693.
    Tr   r   r$   z0partial_fit does not support early_stopping=Truer   N)r8   r8  r9  r   r   r   rg   )r$  rD   r   s      r-   test_mlp_partial_fit_after_fitr    sJ     d
;
?
?
OC
<C	z	-' 
.	-	-s    A$$A-c                     t        dddddddddd	d
      } t        j                         5  t        j                  dt               t        j                  dt
               | j                  t        t               ddd       t        | j                  d         t        t        j                        k(  sJ t        | j                  d   t              sJ y# 1 sw Y   ]xY w)zTest that a diverging model does not raise errors when early stopping is enabled.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/29504
    r&   r   rI   rr  r   r0   Tr  r   r   )r1   rM   rK   r2   r   rL   r   rN   r   rH  r$   rr   Nr&  )r   r   r   r   RuntimeWarningr   r8   r8  r9  strr(  r)   nanr'  float)rD   s    r-   test_mlp_diverging_lossr    s      C 
	 	 	" 	h7h(:; 
# s%%b)*c"&&k999c,,R0%888 
#	"s   ACCc            	      B   t        dddd      \  } }t        j                  |      }t        ddddddd	      }t	        di |}|j                  | ||
       t	        di |j                  | |d 
      }t        |j                  |       |j                  |              y )Nr&   r   rn   )r    r!   rP  r$   r   r  Tr   )r1   rK   r   r   rL   r   r$   )sample_weight )r   r)   	ones_likedictr   r8   r   r   )r?   r@   swparamsm1m2s         r-   *test_mlp_sample_weight_with_early_stoppingr    s    	DAq 
aBF 
 


B FF1arF"				#	#Aq	#	=BBJJqM2::a=1r/   c                    d}t         j                  j                  |       }t        j                  dd|      }|j	                  t        j
                  |dz               }|j                  |d      }t        dd      j                  ||      }t        ddd	dd
dt         j                  j                  | dz               j                  ||      }t        |j                  |      |j                  |      d       t        ddd	dd
dt         j                  j                  | dz               j                  ||      }t        j                  |j                  |      |j                  |      d      rJ y)z:Test MLP with Poisson loss and no hidden layer equals GLM.r&   r   r0   r&  gHz>)r2   r   poisson)r0   r   rp   )lossr1   rM   r2   rK   r   r$   rr  r\  squared_errorN)r)   r|   default_rnglinspacer  expreshaper	   r8   r   r}   r   r   allclose)global_random_seedr   r   r?   r@   glmrD   s          r-   "test_mlp_vs_poisson_glm_equivalentr  5  sF   A
))

 2
3C
Aq!ABFF1q5M"A			!RA

-
1
1!Q
7C YY**+=+AB 
c!Qi  CKKNCKKN> YY**+=+AB 
c!Qi  {{3;;q>3;;q>EEEEr/   c                      t        ddd      \  } }t        dd      }t        j                  t        d      5  |j                  | |       d	d	d	       y	# 1 sw Y   y	xY w)
z9Check error message when the validation set is too small.r   rm   r   )r    r!   r$   Tr  zThe validation set is too smallr   N)r   r   r   r   r   r8   )r?   r@   r  s      r-   test_minimum_input_sample_sizer  Z  sI    Q11EDAq1=E	z)J	K		!Q 
L	K	KrN  )b__doc__r:  r   rs  numpyr)   r   sklearn.datasetsr   r   r   r   r   sklearn.exceptionsr   sklearn.linear_modelr	   sklearn.metricsr
   sklearn.neural_networkr   r   sklearn.preprocessingr   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   r^  r_  r   r  r  r5   r6   r   r   r   regression_datasetsirisr  r8  ry  r9  rF   rk   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r#  r.  r1  rC  rE  rI  filterwarningsrK  rM  rW  rh  rj  ra  r   rp  r  r  r  r  r  r  r  r  r  r  r/   r-   <module>r     s   
      2 1 ) > E E  /;  t< (--htn=$3 t< (...x~>4C. ^$o& 
 bt5qu 	eu~& {		?*^FB@/F  78R 9R0  34* 5*(  78* 9*(  34* 5**P2#L!.&6E"J
E*2.2*20'>T .9% :% & -)FG0 H0</D -)FG' H'$&( KL8 M82 504(2  2::rzz":;}l&CD# E <#$B6 }l&CD E( -)FG= H= -)FG#;< = H2 -)FG	( H	(9@26"FJr/   