
    h$,fv|                        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 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 ddl m!Z! g dZ" edd      \  Z#Z$ e       jK                  e#dd       Z&e$dd Z' edd      \  Z#Z$ e       jK                  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^                  Z0e.jb                  Z2d Z3d Z4d Z5e	jl                  jo                  de*      d        Z8e	jl                  jo                  de-      d        Z9e	jl                  jo                  de*      d        Z:e	jl                  jo                  de-      d        Z;d Z<d  Z=d! Z>d" Z?d# Z@d$ ZAd% ZBd& ZCd' ZDd( ZEd) ZFd* ZGd+ ZHe	jl                  jo                  d,e!      d-        ZId. ZJd/ ZKe	jl                  jo                  d0eeg      d1        ZLd2 ZM eeN3      d4        ZOe	jl                  jo                  d0eeg      d5        ZPd6 ZQ ee3      d7        ZRd8 ZSd9 ZTd: ZUe	jl                  jo                  d;ej                  ej                  g      e	jl                  jo                  d<eeg      d=               ZXd> ZYe	jl                  jo                  d<eeg      d?        ZZe	jl                  jo                  d0eeg      d@        Z[e	jl                  jo                  d0eeg      e	jl                  jo                  dAg dB      dC               Z\e	jl                  jo                  d0eeg      dD        Z]y)EzD
Testing for Multi-layer Perceptron module (sklearn.neural_network)
    N)StringIO)assert_allcloseassert_almost_equalassert_array_equal)load_digits	load_irismake_multilabel_classificationmake_regression)ConvergenceWarning)roc_auc_score)MLPClassifierMLPRegressor)LabelBinarizerMinMaxScalerscale)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    Elib/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   sgdg?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_fitri   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                     dD ]  } d}d}t         j                  j                  d      }|j                  ||      dt        j                  t        j
                  |      dz   |       z   }t               j                  |      t        D ]S  }t        |dddd	dd
      j                  |       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'        j(                  dz
        D ]  }	j%                  t        j*                  j                  d   ||	dz      f             j%                  t        j*                  j                  d   ||	dz      f             ||	   }
||	dz      }j%                  t        j*                  |
|f             j%                  t        j*                  |              fd} ||      \  }}t        j,                  t        j.                  |            }t        j.                  |d      }t        j0                  |      }d}t'        |      D ]4  }	|d d |	f   |z  } |||z         d    |||z
        d   z
  |dz  z  ||	<   6 t3        ||       V  y c c}w )N)r   r      r   *   )seedr/   lbfgsh㈵>rN   )rK   r0   rI   r1   rJ   rL   r#   r   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   r7   hstackr:   rT   ravelshaper0   rU   r8   r;   r[   emptyzerossizeeyer   )n_labelsr   r    r#   r?   rK   lthetalayer_unitsrD   fan_infan_outrx   valuegradnumgradnEepsilondthetar>   rs   rt   ru   rv   rw   rC   s                       @@@@@@@r,   test_gradientr      s     8/	
yy,,",5i4ryy+a/::**1-* 0	/J%#%#&C GGAqM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]$
$
  .a0	/8/( Ps   $K-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   rn   2   Tr/   rI   r0   rL   shuffler#   rK   ffffff?)r   dtypekindr~   r   r7   predictscore)	r>   r?   X_trainy_trainX_testexpected_shape_dtyperK   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 ]Y  }t        ddddd|      }|j                  | |       |dk(  r|j                  | |      dkD  rAJ |j                  | |      d	kD  rYJ  y )
Nrn   r   r   Tr/   r   r   rG   g\(\?)r~   r   r7   r   )r>   r?   rK   rC   s       r,   test_lbfgs_regressionr     sx     ' *
!!
 	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   rn   r   r   Tr/   )rI   r0   rL   max_funr   r#   rK   )r~   r   pytestwarnsr   r7   rY   r>   r?   r   rK   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   rn   r   g        r   Tr/   )rI   r0   tolrL   r   r   r#   rK   )r~   r   r   r   r   r7   rY   r   s        r,   test_lbfgs_regression_maxfunr   9  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/      rk   )r/   r/   r/   r   )
invscalingconstantrH      g      ?T)rI   r0   learning_raterL   power_t
warm_startr2   r   r   	   )	r   r   r   r7   
_optimizerr   rJ   powr   )r>   r?   r   rC   prev_etapost_etas         r,   test_learning_rate_warmstartr   O  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_indicatorrn   ro   r   r   rN   )rI   r0   r1   rL   r#   rK   rJ   g
ףp=
?rH   )rI   r0   rL   r#   rK   r1   rJ   r%   )r   r/   r   r   r   rQ   ?early_stopping)r	   r   r7   r   r;   re   r   )r>   r?   rC   rD   s       r,   test_multilabel_classificationr   h  s     *1tDAq C GGAqM99Q?T!!! C 3Z 71o6799Q?S    t
,CGGAqM!r.   c                      t        dd      \  } }t        dddd      }|j                  | |       |j                  | |      dkD  sJ y )	Nr   rk   )r   	n_targetsrn   r   r/   )rI   r0   rL   r#   r   )r
   r   r7   r   r>   r?   rC   s      r,   test_multioutput_regressionr     sL    SA6DAq
2!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   rI   r/   rQ   )r   re   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   ro   rN   )rI   rL   r#   r   r1   rJ   r2   )rI   r#   r1   rJ   rQ   r   )classification_datasetsr   r   r   r7   r   r;   re   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   drQ   r   r   )r   re   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
                  d	
      5  |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/   {Gz?r   )rI   rL   rK   r#   rJ   
batch_sizerM   T)record)rI   rK   rJ   r#   r   rM   g?)X_regy_regr   r   warningscatch_warningsr7   r   r;   re   r   r   )r>   r?   rM   rC   r   rD   r   r   s           r,   test_partial_fit_regressionr     s     	AA #wwqz
 $$D1 	GGAqM	 A#wwqz
 s 	"AOOAq!	" Au%		!Qt||9	 	s   C,,C5	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   rQ   rn   re   )r   r   r   r   re   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  |j                  ||       d d d        y # 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.match)r(   ry   rz   finfofloat64maxuniformstandard_normalr   r   r   r   r7   )rngr   fmaxr>   r?   r   msgs          r,   test_nonfinite_paramsr     s     ))


"CI88BJJ##Ds{{A{//A+A
.C	/  
z	- 1  s   B;;C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   rk   r   r/   )r0   rK   r#   r2   r   r   axisrP   )r4   r5   r   r   r   r7   rf   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   rk   )r0   r2   r   r/   r   )X_digits_multiy_digits_multir   r   r   r7   rf   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   rn      rI   r0   r#   rO   r/   r   g|=)r	   r   r   r7   rf   r   r   r   r)   dotr   r(   r   )	r>   rs   r   r   r   r   r   r   r   s	            r,   test_predict_proba_multilabelr
  7  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 ]x  }t        dddd|      }t        dddd|      }|j                  | |       |j                  | |       t        j                  |j
                  d   |j
                  d         rxJ  t        ddddd      }t        ddddd	      }|j                  | |       |j                  | |       t        j                  |j
                  d   |j
                  d         rJ y )
Nr   rk   r/   r   )r   r    r   r#   )TF)r0   rL   r   r#   r   TF)r
   r   r7   r(   array_equalr:   )r>   r?   r   mlp1mlp2s        r,   test_shuffler  O  s   RAQRSDAq ! > 
  
 	AA~~dkk!ndkk!n===%>* qQQPTD qQQPUD 	HHQNHHQN~~dkk!ndkk!n====r.   csr_containerc                 T   t         d d }t        d d } | |      }t        ddd      }|j                  ||       |j	                  |      }|j                  ||       |j	                  |      }t        ||       |j	                  |      }|j	                  |      }t        ||       y )Nr   rn      r/   r  )r4   r5   r   r7   r   r   r   )r  r>   r?   X_sparserC   r   r   s          r,   test_sparse_matricesr  u  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   rO     rH   )r   rL   rI   )r   r7   rL   rY   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   )rI   rL   verboser0   r2   	Iteration)	r   sysstdoutr   r   r   r7   re   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%   rN   r  rH   T)r   rL   rI   r   r   F)r4   r5   r7   rL   rY   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   rO   r  rH   adaptive)r   rL   rI   r   gư>)r   r7   rL   rY   r   r   r   s      r,   test_adaptive_learning_rater.    sh    
Q!QA	
AA
C$uJ
WCGGAqM<<#++%%%#.......r.   r2   c                  n   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      j                  | |      }|j                  | |       |j                  | |       ||||fD ]  }t	        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   rn   T)r0   rI   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_startr@    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 1W
N
R
RSTVW
XCGGAqMGGAzNJ
C qTRVVq
2 iin 	 ]]:RYYw-?@ 	GGAsO	 		 	s   F++F4	c                     t         t        }}d} | ddd|      }|j                  ||       ||j                  k(  sJ |j                  ||       ||j                  k(  sJ y )Nr   r   rH   T)r0   rI   r   rL   )r5  r6  r7   rY   )r!  r>   r?   rL   r   s        r,   test_warm_start_full_iterationrB    se     6qAH
UthC GGAqMs{{"""GGAqMs{{"""r.   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   rk   r   r   r%   rH   r   rL   rI   n_iter_no_changer/   )r4   r5   r   r7   ra   rY   )r>   r?   r   rL   rE  r   s         r,   test_n_iter_no_changerF    s     	AA
CH 0 &huGW
 	1 ((,<q,@@@@#++%%%&r.   c                      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   rD  r/   )r4   r5   r(   r^   r   r7   rY   ra   )r>   r?   r   rE  rL   r   s         r,   test_n_iter_no_change_infrH    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   rk   )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_stratifiedrJ  %  se    
Q!Q!Q!Q(AA
t
,C	L
  	1  s   AAc                  b   t        dddd      } | j                  t        d d t        d d        | j	                  t        dd        }| j                  t        dd        }t        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 )	Nro   rk   r   r/   r   r1   r0   r#   rL   ,  r   rtol)r   r7   X_digitsy_digitsr   rf   astyper(   float32r   r   )mlp_64pred_64proba_64mlp_32pred_32proba_32s         r,   "test_mlp_classifier_dtypes_castingr[  1  s    vAF JJx~x~.nnXcd^,G##HSTN3HvAF JJx~$$RZZ0(4C.AnnXcd^222::>?G##HSTN$9$9"**$EFHw(HhU3r.   c                     t        dddd      } | j                  t        d d t        d d        | j	                  t        dd        }t        dddd      }|j                  t        d d j                  t        j                        t        d d        |j	                  t        dd  j                  t        j                              }t        ||d       y )	Nro   rL  r/   r   rM  rN  -C6?rO  )	r   r7   rQ  rR  r   rS  r(   rT  r   )rU  rV  rX  rY  s       r,   !test_mlp_regressor_dtypes_castingr^  E  s    vAF JJx~x~.nnXcd^,GvAF JJx~$$RZZ0(4C.AnnXcd^222::>?GGW51r.   r   	Estimatorc                    t         j                  |       t        }} |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 )Nro   rL  r/   r   rM  rN  )
rQ  rS  rR  r7   r   r=   rT   r   r:   r   )r   r_  r>   r?   rC   pred	interceptcoefs           r,   test_mlp_param_dtypesrd  U  s    
 ??5!8qA
$6TV
WC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.)rl   rl   r   r   )r0   r#   rJ   rL   r   r   zmlp.pklr/   r]  rO  N)	r   r7   joblibdumploadr;   re   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_fitrs  g  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)rx  nameTrN   )r   validation_fractionerrorN)r   importorskipr(   ry   rz   	DataFramerandnSeriesfullr   r   simplefilterUserWarningr7   )r_  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      }|j                  t        t               t        |j                        }|j                  d       |j                  t        t               t        |j                        |kD  sJ y)z0Check that early stopping works with warm start.r   r   T)rL   r#   r   r      rL   N)r7   r5  r6  r<   r%  
set_params)r!  rC   n_validation_scoress      r,   'test_mlp_warm_start_with_early_stoppingr    sn     !TC GGFFc445NNBNGGFFs%%&)<<<<r.   rI   )rH   adamrn   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   )rI   r   r   rL   rE  r#   Nr  r  )
r(   r^   r   r   r   r7   r5  r6  rY   r  )r!  rI   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   r5  r6  r   r   r   re   )r!  rC   r   s      r,   test_mlp_partial_fit_after_fitr    sS     d
;
?
?
OC
<C	z	- ('( ( (s    A$$A-)^__doc__r7  r  r   ior   rf  numpyr(   r   numpy.testingr   r   r   sklearn.datasetsr   r   r	   r
   sklearn.exceptionsr   sklearn.metricsr   sklearn.neural_networkr   r   sklearn.preprocessingr   r   r   sklearn.utils._testingr   sklearn.utils.fixesr   r~   rQ  rR  r}   r  r  r4   r5   r   r   r   regression_datasetsirisrx  r5  rl  r6  rE   ri   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r   r+  r.  RuntimeWarningr@  rB  rF  rH  rJ  r[  r^  rT  r   rd  rs  r  r  r  r   r.   r,   <module>r     s   
 
        2 ) > E E 2 .;  t< (--htn=$3 t< (...x~>4C. ^$o& 
 bt5qu 	eu~& {		?*^FB>/B  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#>L .9% :% &,  -)FG0 H0</ .) *: -)FG# H# &( ,-8 .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	(r.   