
    ZPh9'                        d dl Zd dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ ej        d             Zd	 Zd
 Zd Zd Zej                            d          d             Zd Zd Zd Zej                            dddg          ej                            d          d                         Zej                             eej                    ed          k     d          d             Z!ej                             eej                    ed          k     d          d             Z"dS )    Nmake_classification)GridSearchCVtrain_test_split)assert_allcloseassert_array_equal)parse_version)BalancedRandomForestClassifier)sklearn_versionc                  8    t          dddddddg ddd
  
        S )	N'     r         )g{Gz?皙?gGz?皙?)
	n_samples
n_featuresn_informativen_redundant
n_repeated	n_classesn_clusters_per_classweights	class_seprandom_stater        c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/imblearn/ensemble/tests/test_forest.pyimbalanced_datasetr       s=    """   r   c                    t          dddd          } |j        |   t          j        t          d          5  |                    dd	            |j        |   d d d            n# 1 swxY w Y   |                    d
            |j        |   t          j        t          d          5   |j        |   d d d            d S # 1 swxY w Y   d S )N   allTF)n_estimatorssampling_strategyreplacement	bootstrapzmust be larger or equal to)matchr   )
warm_startr$   
   )r$   zWarm-start fitting without)r
   fitpytestraises
ValueError
set_paramswarnsUserWarning)r    brfs     r   4test_balanced_random_forest_error_warning_warm_startr3      sr   
(%TU  C CG  	z)E	F	F	F % %$Q777#$$% % % % % % % % % % % % % % % NNN###CG  	k)E	F	F	F % %#$$% % % % % % % % % % % % % % % % % %s#   "A''A+.A+-CC	C	c                 8   d}t          |dddd          } |j        |   t          |j                  |k    sJ t          |j                  |k    sJ t          |j                  |k    sJ t          |j                  | d         j        d         k    sJ d S )Nr*   r   r#   TFr$   r   r%   r&   r'   r   )r
   r+   len	samplers_estimators_
pipelines_feature_importances_shape)r    r$   r2   s      r   test_balanced_random_forestr<   -   s    L
(!  C CG  s}----s<////s~,....s'((,>q,A,G,JJJJJJJr   c                 V   | \  }}d}t          |dddd          }|                    ||           t          |          D ]f}|j        |                             ||          \  }}|j        |         j        d                             ||          \  }}	t          ||           t          ||	           |j	        |                             ||          
                    |          }
|j        |                             ||          
                    |          }t          |
|           |j	        |                             ||                              |          }
|j        |                             ||                              |          }t          |
|           hd S )Nr*   r   r#   TFr5   randomundersampler)r
   r+   ranger7   fit_resampler9   named_stepsr   r   r8   predictpredict_proba)r    Xyr$   r2   idxX_resy_resX_res_2y_res_2y_predy_pred_2s               r   &test_balanced_random_forest_attributesrM   >   s   DAqL
(!  C GGAqMMM\"" - -}S)66q!<<uN3+,@ANNqRSTT 	 	w'''5'***%))%77??BB>#&**1a0088;;68,,,%))%77EEaHH>#&**1a00>>qAA68,,,,- -r   c                     t           j                            d          }| \  }}|                    |j        d                   }t          ddddd          }|                    |||           d S )N*   r   r"   r#   TFr5   )nprandomRandomStaterandr;   r
   r+   )r    rngrD   rE   sample_weightr2   s         r   )test_balanced_random_forest_sample_weightrV   [   sx    
)


#
#CDAqHHQWQZ((M
(  C GGAq-     r   z)ignore:Some inputs do not have OOB scoresc           	         | \  }}t          ||d|          \  }}}}t          ddddddd          }|                    ||           |                    ||          }t	          ||j        z
            d	k     sJ t          ddd
ddd          }t          j        t                    ot          j
        dd          5  |                    ||           d d d            d S # 1 swxY w Y   d S )NrO   )r   stratifyTr     r   r#   )	oob_scorer   r$   min_samples_leafr%   r&   r'   皙?r   )rZ   r   r$   r'   r%   r&   ignore)divideinvalid)r   r
   r+   scoreabs
oob_score_r,   r0   r1   rP   errstate)	r    rD   rE   X_trainX_testy_trainy_testest
test_scores	            r   test_balanced_random_forest_oobrj   i   sh   DAq'7	12( ( ($GVWf )  C GGGW66**JzCN*++c1111 )  C 
k	"	"	Ur{(H'U'U'U  1                 s   C%%C),C)c                 h    t          ddd          }t          |dddd          } |j        |   d S )	Nr#   TFr%   r&   r'   )r   r   )r$   	max_depthr   )cv)r
   r   r+   )r    r2   grids      r   'test_balanced_random_forest_grid_searchrp      sQ    
(TU  C f6JJqQQQDDH !!!!r   c                     t           j                            d          } |                     dd          }|                     d          dk    }t	          d| d ddd          }t	          d| dddd          }|                    ||           |                    ||           |j        d         j        }|j        d         j        }d}|j        |j        k    s
J |            d S )	Nr   r   r   r   r#   T)r$   r   max_samplesr%   r&   r'   z=Tree without `max_samples` restriction should have more nodes)	rP   rQ   rR   randnr
   r+   r8   tree_
node_count)rT   rD   rE   est1est2tree1tree2msgs           r   'test_little_tree_with_small_max_samplesr{      s    
)


"
"C		%A		%1A *  D *  D 	HHQNNNHHQNNNQ%EQ%E
ICe.........r   c                     t          ddd          } |j        |   |j        d         j        j        }t          dddd          } |j        |   |j        d         j        j        }||k    sJ d S )Nr#   TFrl   r   gQ?)	ccp_alphar%   r&   r'   )r
   r+   r8   rt   ru   )r    r2   n_nodes_no_pruning
brf_prunedn_nodes_prunings        r   #test_balanced_random_forest_pruningr      s    
(TU  C CG  +1</5de  J JN&'' ,Q/5@O//////r   ratio      ?r\   c                 `   t           j                            d          }d}t          j        |                              dd          }|                    d| |          }t          ddddd	          }|                    ||           t          j        |j	        d
z
            dk     sJ d S )NrO   rY   r   sizeTznot minorityF)rZ   r   r%   r&   r'   r   r\   )
rP   rQ   rR   arangereshapebinomialr
   r+   ra   rb   )r   rT   r   rD   rE   erfs         r   (test_balanced_random_forest_oob_binomialr      s    
 )


#
#CI
	)$$R++AQI..A
((  C GGAqMMM6#.3&''#------r   z1.4zscikit-learn should be >= 1.4)reasonc                     t           j                            d          } d\  }}t          |||           \  }}|                                }t           j        ||                     ddg|j        ddg          <   t          j        |          	                                sJ t          ||d	          \  }}}}	t          d
dd| d          }
|
                    ||           |
                    ||	          }t          ||d	          \  }}}}	t          d
dd| d          }|                    ||           |                    ||	          }|d|z  k    sJ dS )zJCheck that forest can deal with missing values and has decent performance.r   )rY   r*   )r   r   r   FTffffff?r   r   pr   r#   2   )r%   r&   r'   r   r$   r   N)rP   rQ   rR   r   copynanchoicer;   isnananyr   r
   r+   r`   )rT   r   r   rD   rE   	X_missingX_missing_trainX_missing_testrf   rg   forest_with_missingscore_with_missingrd   re   forestscore_without_missings                   r    test_missing_values_is_resilientr      s    )


"
"C$Iz
  DAq
 IIKIcjj%QWtjEEF8I""$$$$$7G118 8 84O^Wf
 9   OW555,22>6JJ (811'M'M'M$GVWf+  F JJw   "LL88 (=!=======r   c                  D   t           j                            d          } d}|                     |df          }|                     dd|          }|                     ddg|d	d
g          }|                    t                    }||          ||<   |                     |          }t           j        ||<   t          j	        |          
                                sJ |                                }||dddf<   t          |||d          \  }}	}
}}}t          dddd                              ||          }t          dddd                              |
|          }|                    |	|          }|dk    sJ ||                    ||          k    sJ dS )z_Check that the forest learns when missing values are only present for
    a predictive feature.r   i,  r*   r   r   )highr   FTr   r   r   Nr"   r   r#   )r%   r&   r'   r   g      ?)rP   rQ   rR   standard_normalrandintr   astypeboolr   r   r   r   r   r
   r+   r`   )rT   r   X_non_predictiverE   X_random_masky_maskpredictive_featureX_predictiveX_predictive_trainX_predictive_testX_non_predictive_trainX_non_predictive_testrf   rg   forest_predictiveforest_non_predictivepredictive_test_scores                    r    test_missing_value_is_predictiver     s    )


"
"CI**B*@@AAI..A JJt}9tJMMMXXd^^F#M22F=,,),<<!#v8&''++-----#((**L+LA 	'7KKK6TUQR  	c
g&&  ;TUQR  	c
 '**  .334EvNN D(((( $9$?$?v% %      r   )#numpyrP   r,   sklearn.datasetsr   sklearn.model_selectionr   r   sklearn.utils._testingr   r   sklearn.utils.fixesr	   imblearn.ensembler
   imblearn.utils._sklearn_compatr   fixturer    r3   r<   rM   rV   markfilterwarningsrj   rp   r{   r   parametrizer   skipifbase_versionr   r   r   r   r   <module>r      sS        0 0 0 0 0 0 B B B B B B B B F F F F F F F F - - - - - - < < < < < < : : : : : :   % % %"K K K"- - -:! ! ! GHH  IHB" " "!4 !4 !4H0 0 0  3*--GHH. . IH .-.& M/.//--2F2FF*   *> *>	 *>Z M/.//--2F2FF*   ) )	 ) ) )r   