
    sg                        d Z ddlZddlZddlZddlmZ ddlZddlZddl	Z	ddl
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 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 ZTe	jj                  jm                  d:ej                  ej                  g      e	jj                  jm                  d;eeg      d<               ZWd= ZXe	jj                  jm                  d;eeg      d>        ZYe	jj                  jm                  d/eeg      d?        ZZe	jj                  jm                  d/eeg      e	jj                  jm                  d@g dA      dB               Z[e	jj                  jm                  d/eeg      dC        Z\dD Z]y)EzD
Testing for Multi-layer Perceptron module (sklearn.neural_network)
    N)StringIO)load_digits	load_irismake_multilabel_classificationmake_regression)ConvergenceWarning)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    X/var/www/html/venv/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_sumr1   mlpis           r,   
test_alpharE   @   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<<>>>?	 	s   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   r/   r   )solverlearning_rate_initr1   
activationr#   max_iterr0   momentum皙?g333333?      ?      ?r   classesgJ+?guX?gડ2?g'?g.NV?gVSbb)decimalgF??g#070?gY,?g~?gZd;O?)r   r/   gS?)r(   r9   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?   rC   
interceptscoefss        r,   test_fitrj   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&0j!C =@JJG5"--.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   *   )seedr/   lbfgsh㈵>rO   )rL   r0   rJ   r1   rK   rM   r#   ignorer   c           	      2    j                  |       S r'   )_loss_grad_lbfgs)tr>   Yactivations
coef_gradsdeltasintercept_gradsrC   s    r,   loss_grad_funz$test_gradient.<locals>.loss_grad_fun   s%    ++q![&*o r.   g       @)r(   randomRandomStaterandmodr6   r   fit_transformACTIVATION_TYPESr
   warningscatch_warningssimplefilterr   r7   hstackr:   rU   ravelshaper0   rV   r8   r;   r\   emptyzerossizeeyer   )n_labelsr   r    r#   r?   rL   lthetalayer_unitsrD   fan_infan_outrz   valuegradnumgradnEepsilondthetar>   ru   rv   rw   rx   ry   rC   s                       @@@@@@@r,   test_gradientr      s     :/	
yy,,",5i4ryy+a/::**1-* 2	/J%#%#&C ((* %%h0BC1 II#**s2NOQqwwy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2	/:/$  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   ro   2   Tr/   )rJ   r0   rM   shuffler#   rL   ffffff?)r   dtypekindr   r
   r7   predictscore)	r>   r?   X_trainy_trainX_testexpected_shape_dtyperL   rC   	y_predicts	            r,   test_lbfgs_classificationr      s    
 gGgGstWF"LLOW]]-?-?@& R
!!
 	!KK'	yy'*T111"IOO$8$89=QQQQR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 )Nro   r   r   MbP?Tr/   )rJ   r0   rM   tolr   r#   rL   r   rG   g\(\?)r   r   r7   r   )r>   r?   rL   rC   s       r,   test_lbfgs_regressionr     s{     ' *
!!
 	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   ro   r   r   Tr/   )rJ   r0   rM   max_funr   r#   rL   )r   r
   pytestwarnsr   r7   rZ   r>   r?   r   rL   rC   s        r,    test_lbfgs_classification_maxfunr   '  s     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   ro   r   g        r   Tr/   )rJ   r0   r   rM   r   r   r#   rL   )r   r   r   r   r   r7   rZ   r   s        r,   test_lbfgs_regression_maxfunr   <  s     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   r/      rl   )r/   r/   r/   r   )
invscalingconstantrH      g      ?T)rJ   r0   learning_raterM   power_t
warm_startr2   r   r   	   )	r
   r   r   r7   
_optimizerr   rK   powr   )r>   r?   r   rC   prev_etapost_etas         r,   test_learning_rate_warmstartr   R  s    
Q!Q!Q"b*AA3 P '
 &89 	4GGAqM~~33HGGAqM~~33H		4 J&x'''l*))Cs{{,CCxOOO%P	4 	4s   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_indicatorro   rp   r   r   rO   )rJ   r0   r1   rM   r#   rL   rK   g
ףp=
?rH   )rJ   r0   rM   r#   rL   r1   rK   r%   )r   r/   r   r   r   rR   ?early_stopping)r   r
   r7   r   r;   rf   r   )r>   r?   rC   rD   s       r,   test_multilabel_classificationr   k  s     *1tDAq C GGAqM99Q?T!!! C 3Z 71o67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   rl      )r   	n_targetsr#   ro   r   {Gz?r/   )rJ   r0   rM   r   r#   r   )r   r   r7   r   r>   r?   rC   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   rH   rJ   r/   rR   )r
   rf   r   raises
ValueErrorr>   r?   clfs      r,   test_partial_fit_classes_errorr     sk    
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)NrH   r%   r/   r   rp   rO   )rJ   rM   r#   r   r1   rK   r2   )rJ   r#   r1   rK   rR   r   )classification_datasetsr
   r   r   r7   r   r;   rf   r(   uniquer   r   )r>   r?   rC   pred1rD   pred2s         r,   test_partial_fit_classificationr     s     ( &1"
 &89 	GGAqM	Aq
 s 	8AOOAq"))A,O7	8A5%(yyA%%%)&	 	s   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#   r/   r   r   )abc)r   r   r   drR   r   r   )r
   rf   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   rH   r%   r   r/   r   r   )rJ   rM   rL   r#   rK   
batch_sizerN   rq   )rJ   rL   rK   r#   r   rN   g?)X_regy_regr   r   r   r   r   r   r7   r   r;   rf   r   r   )r>   r?   rN   rC   r   rD   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   r/   r   r   rH   r   rR   ro   rf   )r   r   r   r
   rf   hasattr)r>   r?   s     r,   test_partial_fit_errorsr     sz    
Q!QA	
AA 
z	" CU#//1qc/BC }G4mDDDD	C C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.matchrq   )r(   r{   r|   finfofloat64maxuniformstandard_normalr   r   r   r   r   r   r   r7   )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   rl   r   r/   )r0   rL   r#   r2   r   r   axisrQ   )r4   r5   r
   r   r   r7   rg   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"G''*KWWQZ	YA&I&&A&.M==Y	2222y-0K1GAqDM*c111 s   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   rl   )r0   r2   r   r/   r   )X_digits_multiy_digits_multir
   r   r   r7   rg   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"G''*KWWQZ1):):	YA&I&&A&.M==Y	2222y-0K1 s   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   ro      rJ   r0   r#   rP   r/   r   g|=)r   r   r
   r7   rg   r   r   r   r)   dotr   r(   r   )	r>   ru   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   rl   r/   r   )r   r    r   r#   )TF)r0   rM   r   r#   r   rq   TF)
r   r   r   r   r   r   r7   r(   array_equalr:   )r>   r?   r   mlp1mlp2s        r,   test_shuffler  U  sw   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   ro      r/   r  )r4   r5   r
   r7   r   r   r   )r  r>   r?   X_sparserC   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   r/   r   r   rP     rH   )r   rM   rJ   )r
   r7   rM   rZ   r   s      r,   test_tolerancer    sP     Q!QA	
AA
C$u
=CGGAqM<<#++%%%r.   c                  T   ddgddgg} ddg}t        dddd      }t        j                  }t               xt        _        }t	        t
        	      5  |j                  | |       d d d        |j                  | |       |t        _        d
|j                         v sJ y # 1 sw Y   ;xY w)Nr   r   r/   r   r   rH   r   )rJ   rM   verboser0   r2   	Iteration)	r
   sysstdoutr   r   r   r7   rf   getvalue)r>   r?   r   
old_stdoutoutputs        r,   test_verbose_sgdr#    s    
Q!QA	
AA
uq"QR
SCJ"*$CJ	"4	5 1OOAqCJ&//++++ s   BB'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%   rO   r  rH   T)r   rM   rJ   r   r   F)r4   r5   r7   rM   rZ   r`   
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   r/   r   r   rP   r  rH   adaptive)r   rM   rJ   r   gư>)r
   r7   rM   rZ   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   r/   (   r   F   r   r   %   &   r
  r   ro   Trm   r   )r0   rJ   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(   r9   r
   r7   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	 		 	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   rH   T)r0   rJ   r   rM   rq   )r8  r9  r   r   r   r   r7   rZ   )r$  r>   r?   rM   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   rl   r   r   r%   rH   r   rM   rJ   n_iter_no_changer/   )r4   r5   r
   r7   rb   rZ   )r>   r?   r   rM   rH  r   s         r,   test_n_iter_no_changerI    s     	AA
CH 0 &huGW
 	1 ((,<q,@@@@#++%%%&r.   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  rH   rG  r/   )r4   r5   r(   r_   r
   r7   rZ   rb   )r>   r?   r   rH  rM   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)Nr/   r   r   r   rl   )r   r   r   r/   Tr   z0The least populated class in y has only 1 memberr   )r
   r   r   r   r7   r   s      r,   test_early_stopping_stratifiedrM  5  se    
Q!Q!Q!Q(AA
t
,C	L
  	1  s   AA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 )
Nrp   rl   r   r/   r%   rI   r1   r0   r#   rM   r   ,  r   rtol)r
   r7   X_digitsy_digitsr   rg   astyper(   float32r   r   )mlp_64pred_64proba_64mlp_32pred_32proba_32s         r,   "test_mlp_classifier_dtypes_castingr^  A  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 )
Nrp   rO  r/   r   r   rP  rQ  gMb@?rR  )	r   r7   rT  rU  r   rV  r(   rW  r   )rX  rY  r[  r\  s       r,   !test_mlp_regressor_dtypes_castingr`  U  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 )Nrp   rO  r/   r   rI   rP  rQ  )
rT  rV  rU  r7   r   r=   rU   r   r:   r   )r   ra  r>   r?   rC   pred	interceptcoefs           r,   test_mlp_param_dtypesrf  e  s    
 ??5!8qA
vAPTC GGAdsGQtW;;qwD#//JY	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.)rm   rm   r   r   )r0   r#   rK   rM   r   r   zmlp.pklr/   -C6?rR  N)	r   r7   joblibdumploadr;   rf   r   r   )
tmp_pathpre_trained_estimatorfeaturestargetpickled_fileload_estimatorfine_tune_featuresfine_tune_target_predicted_values
             r,   (test_mlp_loading_from_joblib_partial_fitrv  y  s     ) rdUX uqcfH h/ i'L
KK%|4[[.N ./C51#(3Z I""#57GHI %,,-?@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columnsr/   	colname_y)r{  nameTrO   )r   validation_fractionerrorN)r   importorskipr(   r{   r|   	DataFramerandnSeriesfullr   r   r   UserWarningr7   )ra  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)rM   r#   r   r   rq      rM   N)
r   r   r   r   r7   r8  r9  r<   r(  
set_params)r$  rC   n_validation_scoress      r,   'test_mlp_warm_start_with_early_stoppingr    s     !TC 
	 	 	"  h(:;!#"8"89#  s%%&)<<<<   s   A6B::CrJ   )rH   adamro   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   )rJ   r   r   rM   rH  r#   Nr  r  )
r(   r_   r   r   r   r7   r8  r9  rZ   r  )r$  rJ   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)r7   r8  r9  r   r   r   rf   )r$  rC   r   s      r,   test_mlp_partial_fit_after_fitr    sS     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   rH   rh  r   r/   Tr  r   r   )r0   rL   rJ   r1   r   rK   r   rM   r   rH  r#   rq   Nr&  )r   r   r   r   RuntimeWarningr   r7   r8  r9  strr(  r(   nanr'  float)rC   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)^__doc__r:  r  r   ior   ri  numpyr(   r   sklearn.datasetsr   r   r   r   sklearn.exceptionsr   sklearn.metricsr	   sklearn.neural_networkr
   r   sklearn.preprocessingr   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   rT  rU  r   r  r  r4   r5   r   r   r   regression_datasetsirisr{  r8  ro  r9  rE   rj   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  r^  r`  rW  r   rf  rv  r  r  r  r  r   r.   r,   <module>r     s   
 
       2 ) > 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	4(2  2::rzz":;}l&CD# E <#$B6 }l&CD E( -)FG= H= -)FG#;< = H2 -)FG	( H	(9r.   