
    sgM              	          d dl Zd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZmZmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( ejR                  jU                  dddg      ejR                  jU                  dddg      ejR                  jU                  dddg      d                      Z+ejR                  jU                  dddg      ejR                  jU                  dddg      d               Z,ejR                  jU                  dddg      ejR                  jU                  dddg      d/d              Z-d Z.d Z/d Z0ejR                  jU                  dddg      d        Z1ejR                  jU                  dg d       ejR                  jU                  dddg      d!               Z2ejR                  jU                  d"d#d$g      d%        Z3d& Z4d' Z5ejR                  jU                  d(d)d*gd)d*gfd)d*g ed)       ed*      d+fd)d*gd, fg      d-        Z6d. Z7y)0    N)parallel_backend)assert_allclose)ColumnTransformer)load_diabetes	load_irismake_classificationmake_regression)DummyClassifier)RandomForestClassifierRandomForestRegressor)SimpleImputer)permutation_importance)LinearRegressionLogisticRegression)
get_scorermean_squared_errorr2_score)train_test_split)make_pipeline)KBinsDiscretizerOneHotEncoderStandardScalerscale)_convert_containern_jobs      max_samples      ?      ?sample_weightonesc           
      P   t         j                  j                  d      }d}t        d      \  }}||j	                  d|j
                  d         z   j                  dd	      }t        j                  ||g      }|d
k(  rt        j                  |      n|}t        dd      }	|	j                  ||       t        |	|||||| |      }
|
j                  j
                  |j
                  d	   |fk(  sJ t        j                  |
j                  d   |
j                  d d kD        sJ y )N*      T)
return_X_yMbP?r   r   sizer   r"   
   n_estimatorsrandom_state)r!   	n_repeatsr.   r   r   )nprandomRandomStater   normalshapereshapehstack	ones_liker   fitr   importancesallimportances_mean)r   r   r!   rngr/   Xyy_with_little_noiseweightsclfresults              g/var/www/html/venv/lib/python3.12/site-packages/sklearn/inspection/tests/test_permutation_importance.py9test_permutation_importance_correlated_feature_regressionrD      s    ))


#CID)DAqszzAGGAJzGGPPQSUVW
		1)*+A!.&!8bll1omG
Rb
ACGGAqM#			F ##
I'>>>> 66&))"-0G0G0LLMMM    c           	      |   t        j                  d      }t        j                  j	                  d      }d}t               }|j                  |j                  }}||j                  d|j                  d         z   j                  dd      }|j                  ||j                  	      }||d
<   t        dd      }	|	j                  ||       t        |	||||| |      }
|
j                   j                  |j                  d   |fk(  sJ t        j"                  |
j$                  d   |
j$                  d d kD        sJ y )Npandasr$   r%   r'   r   r(   r*   r   )columnscorrelated_featurer+   r,   r/   r.   r   r   )pytestimportorskipr0   r1   r2   r   datatargetr3   r4   r5   	DataFramefeature_namesr   r8   r   r9   r:   r;   )r   r   pdr<   r/   datasetr=   r>   r?   rA   rB   s              rC   @test_permutation_importance_correlated_feature_regression_pandasrS   C   s-   
 
		X	&B ))


#CIkG<<qAszzAGGAJzGGPPQSUVW 	Q 5 56A1A
 br
BCGGAqM#		F ##
I'>>>> 66&))"-0G0G0LLMMMrE   c           	         t         j                  j                  |      }d}d}d}d}d}||z   }	t        j                  |      }
|j	                  |
|      }t        j
                  |
d | D cg c]  }||k(  j                  dd       c}      }|j                  t         j                        }||k  sJ t        j                  ||j                  ||      gd      }|j                  ||	fk(  sJ t        ||d|	      \  }}}}t        d|
      }|j                  ||       |j                  }|d | }||d  }|j!                         |j#                         k  sJ t%        |||||| |      }|j&                  j                  |j                  d   |fk(  sJ |j(                  d | }|j(                  |d  }t!        t        j*                  |            dkD  sJ |j!                         dk  sJ |j#                         dkD  sJ y c c}w )Nr%     r   r   )r)   r*   )axisr   )	test_sizer.   r,   rJ   gHz>g?g333333?)r0   r1   r2   arangechoicer6   r5   astypefloat32concatenaterandnr4   r   r   r8   feature_importances_maxminr   r9   r;   abs)r   r   seedr<   r/   	n_samples	n_classesn_informative_featuresn_noise_features
n_featuresclassesr>   cr=   X_trainX_testy_trainy_testrA   tree_importancesinformative_tree_importancesnoisy_tree_importancesrinformative_importancesnoisy_importancess                            rC   1test_robustness_to_high_cardinality_noisy_featurert   k   s@    ))


%CIII'*::J
 ii	"G

7
+A
		G<S=S4TUqAF##B*UVA	A "I--- 	399Y0@ABKA77y*----
 (8	1#($GVWf !ac
BCGGGW
 //#34K5K#L -.D.EF'++-0F0J0J0LLLL 		A ==1771:y"9999  001H2HI**+A+BC rvv'()D000  "T))) #&&(4///w Vs   -Hc                     t         j                  j                  d      } d}t        j                  dddt         j                  gg dg      j
                  }t        j                  g d      }t        t               t        d	            }|j                  ||       t        ||||| 
      }|j                  j                  |j                  d   |fk(  sJ t        j                  |j                  d   |j                  d d kD        sJ t         j                  j                  d      } t        ||||| 
      }|j                  j                  |j                  d   |fk(  sJ t        j                  |j                  |j                        rJ t        j                  |j                  d   |j                  d d kD        sJ y )Nr$      r           @      @)r   r   r   r   r   r   r   r   lbfgssolverr/   r.   r   r*   r   )r0   r1   r2   arraynanTr   r   r   r8   r   r9   r4   r:   r;   allclose)r<   r/   r=   r>   rA   rB   result2s          rC   'test_permutation_importance_mixed_typesr      s~   
))


#CI 	3S"&&)<89;;A
A
);7)K
LCGGAqM#CAQTUF##
I'>>>> 66&))"-0G0G0LLMMM ))


"C$S!Q)RUVG$$Y(????{{6--w/B/BCCC 66'**2.1I1I#21NNOOOrE   c                     t        j                  d      } t        j                  j	                  d      }d}| j                  dddt        j                  gg dd      }t        j                  g d	      }t        t               t                     }t        d
|dgfdt               dgfg      }t        |t        d            }|j                  ||       t        |||||      }|j                   j"                  |j"                  d   |fk(  sJ t        j$                  |j&                  d   |j&                  d d kD        sJ y )NrG   r$   r%   r    rw   rx   )abr   r   )col1col2ry   numr   catr   rz   r{   r}   r   r*   )rK   rL   r0   r1   r2   rO   r   r~   r   r   r   r   r   r   r8   r   r9   r4   r:   r;   )	rQ   r<   r/   r=   r>   num_preprocess
preprocessrA   rB   s	            rC   .test_permutation_importance_mixed_types_pandasr      s   			X	&B
))


#CI 	sCbff5?STUA
A"=?N4DEN"
&	*UMOfX,NOJ 
$6g$F
GCGGAqM#CAQTUF##
I'>>>> 66&))"-0G0G0LLMMMrE   c                      t        ddd      \  } }t        |       } t        |      }t               j                  | |      }d|j                  dz  z  }t        || |dd      }t        ||j                  d	d
       y )N  r+   r   rc   rg   r.   r   2   neg_mean_squared_error)r/   scoringg?gư>)rtolatol)r	   r   r   r8   coef_r   r   r;   )r=   r>   lrexpected_importancesresultss        rC   .test_permutation_importance_linear_regresssionr      s~    SRaHDAqaAaA				1	%B rxx{?$
AqB(@G g66TrE   r   c           	         t        ddd      \  }}t               j                  ||      }t        |||ddd|       }|d   j	                         }|d   j                         }||z
  d	kD  sJ t        |||ddd
      }t        |d   |d          t        d      5  t        |||ddd
      }d d d        t        d   |d          y # 1 sw Y   xY w)Nr   r+   r   r   r%   r   rJ   r9   333333?r   )r/   r.   r   	threading)r	   r   r8   r   r`   r_   r   r   )	r   r=   r>   r   importance_sequentialimp_minimp_maximportance_processesimportance_threadings	            rC   ;test_permutation_importance_equivalence_sequential_parallelr     s   
 SRaHDAq				1	%B2
AqAAa[ $M2668G#M2668GWs""" 2
AqAAa ]+-B=-Q
 
+	& 
51! 

 ]+-B=-Q	
 
s   C		C)Nr   r   c           	         t        j                  d      }t        ddd      \  }}|j                  |      }t	        dd      }|j                  |j                  d	d
            }t        j                  ||g      }|j                  j                  dk(  sJ t        |d      r |j                  |j                               }n|j                         }t        |j                        }|||<   ||   j                  |j                  k(  sJ t        j                   t        |            j#                  t$              |_        t)        ddd      }	|	j+                  ||       d}
t-        |	|||
d| |      }|d   j/                         }|d   j1                         }||z
  dkD  sJ t-        |	|||
d| |      }t3        |d   |d          y )NrG   d   r%   r   r      ordinal)n_binsencoder*   r   fCategorical)r-   	max_depthr.   rJ   r9   r   )rK   rL   r	   rO   r   fit_transformr5   r0   r6   dtypekindhasattrr   ravellenrH   rX   rZ   strindexr   r8   r   r`   r_   r   )r   r   rQ   r=   r>   X_dfbinner
cat_columnnew_col_idxrfr/   importance_arrayr   r   importance_dataframes                  rC   7test_permutation_importance_equivalence_array_dataframer   -  s   
 
		X	&B SQQGDAq<<?D Qy9F%%aiiA&67J 			1j/"A77<<3 r=!^^J$4$4$67
%%'
dll#K"D""j&6&6666 3t9%,,S1DJ	A	KBFF1aLI-
		 }-113G}-113GWs""" 2
	 ')=m)LrE   
input_typer~   	dataframec                 0   t        d      d}}t        ||d      \  }}|j                  dkD  sJ t        ||       }t	        d      j                  ||      }d}t        ||||d	
      }t        j                  ||f      }t        ||j                         y )Ng     j@rv   r   r   g    .Aprior)strategyr%   r   )r/   r   )intr   nbytesr   r
   r8   r   r0   zerosr   r9   )	r   rc   rg   r=   r>   rA   r/   rq   r   s	            rC   /test_permutation_importance_large_memmaped_datar   s  s      HazI
DAq 88c>>1j)A
7
+
/
/1
5C IsAqIaHA 88Z$;<(!--8rE   c            	         t         j                  j                  d      } d}d}|dz  }| j                  dd||f      }t        j                  |      }d|d |df   z  |d |df   z   |d | ||d df   d||d df   z  z   ||d  t        d      }|j                  ||       t        |||dd	d
      }|j                  d   |j                  d   z  }|t        j                  dd      k(  sJ t        j                  |      }	t        |||dd	d
|	      }|j                  d   |j                  d   z  }
|
t        j                  |d      k(  sJ t        j                  t        j                  d|      t        j                  d|      g      }	|j                  |||	       t        |||dd	d
|	      }|j                  d   |j                  d   z  }||z  t        j                  dd      k(  sJ y )Nr   rU   r   g        r'   r   F)fit_interceptneg_mean_absolute_error   r.   r   r/   g{Gz?r.   r   r/   r!   g    _Br    )r0   r1   r2   r3   r   r   r8   r   r;   rK   approxr"   r6   repeat)r<   rc   rg   n_half_samplesxr>   r   pix1_x2_imp_ratio_w_nonewx1_x2_imp_ratio_w_onesx1_x2_imp_ratio_ws               rC   )test_permutation_importance_sample_weightr     s&   
 ))


"CIJ!^N

3	:67A
AQ122Q7I5JJAo~>?A-.Q~7I5J1JJAno 
	.BFF1aL
 
 
Aqq*Cs
B  003b6I6I!6LL!V]]1d%;;;; 		A	
		)
B  003b6I6I!6LL!V]]3I4%PPPP 			299X~6		#~8VWXAFF1aO	
		)
B ++A.1D1DQ1GG55q$9OOOOrE   c            
         d } t        j                  ddgddgg      }t        j                  ddg      }t        j                  ddg      }t               }|j                  ||       	 t	        |||d| d       t        j                  t
              5  t	        |||d| d|       d d d        y # t
        $ r t        j                  d       Y Uw xY w# 1 sw Y   y xY w)	Nc                      y)Nr    	estimatorr=   r>   s      rC   	my_scorerzJtest_permutation_importance_no_weights_scoring_function.<locals>.my_scorer  s    rE   r   r   r   rv   r   zpermutation_test raised an error when using a scorer function that does not accept sample_weight even though sample_weight was Noner   )	r0   r~   r   r8   r   	TypeErrorrK   failraises)r   r   r>   r   r   s        rC   7test_permutation_importance_no_weights_scoring_functionr     s     	1a&1a&!"A
!QA
!QA		BFF1aL
r1aaVWX 
y	! 
11i1TU	

 
  
%	


 
s   *B0 C0CCCz list_single_scorer, multi_scorerr2r   r   r   c                 r    t        || j                  |            t        || j                  |             dS )Nr   )r   predictr   r   s      rC   <lambda>r     s7    q)"3"3A"67+=aARARSTAU+V*V% rE   c           	      D   t        ddd      \  }}t               j                  ||      }t        |||d|d      }t	        |j                               t	        |       k(  sJ | D ]8  }||   }t        |||d|d      }t        |j                  |j                         : y )Nr   r+   r   r   r   r   r   )r	   r   r8   r   setkeysr   r9   )	list_single_scorermulti_scorerr   r>   r   multi_importancescorermulti_resultsingle_results	            rC   (test_permutation_importance_multi_metricr     s    0 SRaHDAq				1	%B-
Aqq,! $$&'3/A+BBBB$ M'/.11f
 	00-2K2KLMrE   c                  ,   t        j                  dg      j                  } t        j                  g d      }t               }|j	                  | |       d}t        j                  t        |      5  t        || |d       ddd       y# 1 sw Y   yxY w)zjCheck that a proper error message is raised when `max_samples` is not
    set to a valid input value.
    )r    rw   rx   g      @ry   z max_samples must be <= n_samples)matchr%   )r   N)	r0   r~   r   r   r8   rK   r   
ValueErrorr   )r=   r>   rA   err_msgs       rC   -test_permutation_importance_max_samples_errorr     su     	&'(**A
A

CGGAqM1G	z	1 9sAqa89 9 9s   1B

B)r$   )8numpyr0   rK   joblibr   numpy.testingr   sklearn.composer   sklearn.datasetsr   r   r   r	   sklearn.dummyr
   sklearn.ensembler   r   sklearn.imputer   sklearn.inspectionr   sklearn.linear_modelr   r   sklearn.metricsr   r   r   sklearn.model_selectionr   sklearn.pipeliner   sklearn.preprocessingr   r   r   r   sklearn.utils._testingr   markparametrizerD   rS   rt   r   r   r   r   r   r   r   r   r   r   r   rE   rC   <module>r     sw     # ) -  * J ( 5 E 
 5 * X X 5 Aq6*c
34.9 N : 4 + NF Aq6*c
3#N 4 +#NL Aq6*c
3L0 4 +L0^P<N0$ c
3% 4%P <0c
3A 4 1AH '=>9 ?9,:Pz
> &
(	)D2J+KL+, &*45M*N	
 +,	
(M)(M*9rE   