
    rh                        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 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       jM                  e$dd       Z'e%dd Z( edd      \  Z$Z% e       jM                  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`                  Z1e/jd                  Z3d Z4d Z5d Z6e	jn                  jq                  de+      d        Z9e	jn                  jq                  de.      d        Z:e	jn                  jq                  de+      d        Z;e	jn                  jq                  de.      d        Z<d Z=d  Z>d! Z?d" Z@d# ZAd$ ZBd% ZCd& ZDd' ZEd( ZFd) ZGd* ZHd+ ZIe	jn                  jq                  d,e"      d-        ZJd. ZKd/ ZLe	jn                  jq                  d0eeg      d1        ZMd2 ZNd3 ZOe	jn                  jq                  d0eeg      d4        ZPd5 ZQe	jn                  j                  d6      d7        ZSd8 ZTd9 ZUd: ZVe	jn                  jq                  d;ej                  ej                  g      e	jn                  jq                  d<eeg      d=               ZYd> ZZe	jn                  jq                  d<eeg      d?        Z[e	jn                  jq                  d0eeg      d@        Z\e	jn                  jq                  d0eeg      e	jn                  jq                  dAg dB      dC               Z]e	jn                  jq                  d0eeg      dD        Z^dE Z_dF Z`dG ZadH Zby)IzD
Testing for Multi-layer Perceptron module (sklearn.neural_network)
    N)StringIO)load_digits	load_iris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    x/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sklearn/neural_network/tests/test_mlp.py<lambda>ztest_alpha.<locals>.<lambda>H   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   A   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   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   V   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   *   )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-* 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   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]]-?-?@& 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 )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     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   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   (  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   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   =  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   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   S  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_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   l  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   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     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)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 	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$   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     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.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"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   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"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   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  V  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   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                  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   r0   r   r   rI   r   )rK   rN   verboser1   r3   	Iteration)	r   sysstdoutr   r   r   r8   rg   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&   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_rater2    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_startrD    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   rI   T)r1   rK   r   rN   rr   )r9  r:  r   r   r   r   r8   r[   )r%  r?   r@   rN   r   s        r-   test_warm_start_full_iterationrF    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   rI  r   s         r-   test_n_iter_no_changerJ    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  rI   rH  r0   )r5   r6   r)   r`   r   r8   r[   rc   )r?   r@   r   rI  rN   r   s         r-   test_n_iter_no_change_infrL    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   z0The least populated class in y has only 1 memberr   )r   r   r   r   r8   r   s      r-   test_early_stopping_stratifiedrN  6  se    
Q!Q!Q!Q(AA
t
,C	L
  	1     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 )
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_castingr`  B  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   rQ  r0   r   r   rR  rS  gMb@?rT  )	r   r8   rV  rW  r   rX  r)   rY  r   )rZ  r[  r]  r^  s       r-   !test_mlp_regressor_dtypes_castingrb  V  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   rQ  r0   r   rJ   rR  rS  )
rV  rX  rW  r8   r   r>   rV   r   r;   r   )r   rc  r?   r@   rD   pred	interceptcoefs           r-   test_mlp_param_dtypesrh  f  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.)rn   rn   r   r   )r1   r$   rL   rN   r   r   zmlp.pklr0   -C6?rT  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_target_predicted_values
             r-   (test_mlp_loading_from_joblib_partial_fitrx  z  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columnsr0   	colname_y)r}  nameTrP   )r   validation_fractionerrorN)r   importorskipr)   r|   r}   	DataFramerandnSeriesfullr   r   r   UserWarningr8   )rc  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   r9  r:  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   rI  r$   Nr  r  )
r)   r`   r   r   r   r8   r9  r:  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   r9  r:  r   r   r   rg   )r%  rD   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   rI   rj  r   r0   Tr  r   r   )r1   rM   rK   r2   r   rL   r   rN   r   rI  r$   rr   Nr'  )r   r   r   r   RuntimeWarningr   r8   r9  r:  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!   n_informativer$   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$   rj  rT  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    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  A  sQ    Q11EDAq1=E	z)J	K 		!Q  rO  )c__doc__r;  r  r   ior   rk  numpyr)   r   sklearn.datasetsr   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   rV  rW  r   r  r  r5   r6   r   r   r   regression_datasetsirisr}  r9  rq  r:  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/  r2  rD  rF  rJ  filterwarningsrL  rN  r`  rb  rY  r   rh  rx  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	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/   