o
    `^hwY                     @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZ d dl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mZ d d
lmZ ejddgddgddgddgddgddggddZeg dZ eg dZ!ejdgdgdgdgdgdggddZ"ed d gddgddgddgddgddgddgddgddgg	Z#eg dZ$eg dZ%edgdgdgdgd gdgdgdgdgg	Z&edd gdd gdd gdd gd d gdd gdd gdd gdd gg	Z'eg dZ(ej)e*de+df Z,eg dZ-g dZ.dd Z/ej01dddgej01dg d d!d" Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9ej01d1e:d2d3d4 Z;d5d6 Z<ej01d7dd8gej01dd8dgd9d: Z=ej01d;ej>ej>fej?ej?fej@ej?fejAej?fgd<d= ZBd>d? ZCd@dA ZDdBdC ZEej01dDg dEdFdG ZFdHdI ZGdJdK ZHej0jIedLdMdNdO ZJdPdQ ZKej01dg d dRdS ZLdTdU ZMdS )V    N)linalg)KMeans)
LedoitWolfShrunkCovarianceledoit_wolf)
make_blobs)LinearDiscriminantAnalysisQuadraticDiscriminantAnalysis_cov)StandardScaler)check_random_state)_convert_containerassert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)_IS_WASM      fdtype)r   r   r   r   r   r   )r   r   r   r      r   r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r      )r   r   )r   r   r   r   r   r   r   r   )	)svdN)lsqrN)eigenN)r   auto)r   r   )r   Q?)r   r    )r   r   )r   r!   c            	      C   s  t D ]n} | \}}t||d}|ttt}t|td|  |ttt}t|td|  |t}t|d d df dkd td|  |	t}t
t||ddd| d |ttt}t|tkspJ d| qtddd}tt |tt W d    n1 sw   Y  td	d
t d}tjtdd |tt W d    n1 sw   Y  tdt d}tjtdd |tt W d    n1 sw   Y  td	tdddd}tt |tt W d    d S 1 sw   Y  d S )Nsolver	shrinkagez	solver %sr         ?ư>)rtolatolerr_msgr   r    r   皙?)r#   r$   covariance_estimatorz[covariance_estimator and shrinkage parameters are not None. Only one of the two can be set.match)r#   r+   z.covariance estimator is not supported with svdr   )
n_clustersn_init)solver_shrinkager   fitXypredictr   X1predict_probapredict_log_probar   npexpy3anypytestraisesNotImplementedErrorr   
ValueErrorr   r   )		test_caser#   r$   clfy_predy_pred1y_proba_pred1y_log_proba_pred1y_pred3 rG   f/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/tests/test_discriminant_analysis.pytest_lda_predictH   sX   
$
	"rI   	n_classesr#   r   r   r   c              
      s  ddd}t ddgddgddggd  }t ddgdd	gggt| }|d
||dd\}}t| dd d||}t|j|dd t|j|d dd t	|d }g  g t
t|d D ]2}	 t |||	 |d  d d t jf  t d||	 |d  t jd d f   d  qat ddggdd t  fddt
d D }
dt |
 }tddt fddt
d D   }|t|ksJ t|t |
|gt j dd d S )Nc                    sT   t |t fddt |D }t fddtt D }||fS )zNGenerate a multivariate normal data given some centers and
        covariancesc                    s(   g | ]\}}j ||t  d qS )size)multivariate_normallen).0meancovcenters	n_samplesrngrG   rH   
<listcomp>   s    zDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>c                    s   g | ]}|gt    qS rG   )rO   rP   clazz)rT   rU   rG   rH   rW      s    )r   r8   vstackziphstackrangerO   )rU   rT   covariancesrandom_stater2   r3   rG   rS   rH   generate_dataset   s   z0test_lda_predict_proba.<locals>.generate_datasetr   (   i   
   d   i_ *   )rU   rT   r^   r_   T)r#   store_covariancer$   r*   )r(   r   r         i   c                 S   s"   t || t | ||   S N)r8   r9   dotitem)samplecoef	interceptrY   rG   rG   rH   discriminant_func   s   "z1test_lda_predict_proba.<locals>.discriminant_funcc              
      sF   g | ]}t  |d t fddtd  D   qS )r   c                       g | ]	} |qS rG   rG   rX   alpha_k	alpha_k_0rp   rm   rG   rH   rW          z5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>)floatsumr]   rX   rs   rt   rp   rJ   rm   rG   rH   rW      s    
z*test_lda_predict_proba.<locals>.<listcomp>c                    rq   rG   rG   rX   rr   rG   rH   rW      ru   {Gz?rj   )r8   arrayrO   r   r1   r   means_covariance_r   invr]   appendrk   newaxisrw   rv   r<   approxr6   r\   )r#   rJ   r`   blob_centers	blob_stdsr2   r3   lda	precisionrY   probprob_ref
prob_ref_2rG   rx   rH   test_lda_predict_proba   sb   
$ 
$ 


r   c                  C   s   t ddg} t| d}d}tjt|d |tt W d    n1 s&w   Y  tddgd}|tt t ddg} t ddg}t| d}t	t
 |tt W d    n1 saw   Y  t|j|d	 d S )
Nr%   rh   priorszpriors must be non-negativer,   333333??g?r   )r8   rz   r   r<   r=   r?   r1   r2   r3   warnsUserWarningr   priors_)r   rA   msg
prior_normrG   rG   rH   test_lda_priors   s   

r   c                  C   s   d} d}d}t || |dd\}}tdd}tdd}tdd}||| ||| ||| t|j|jd	 t|j|jd	 t|j|jd	 d S )
Nr   i     rU   
n_featuresrT   r_   r   r#   r   r   r   )r   r   r1   r   coef_)r   rJ   rU   r2   r3   clf_lda_svdclf_lda_lsqrclf_lda_eigenrG   rG   rH   test_lda_coefs   s   



r   c                  C   s   t ddd} | ttt}|jd dksJ t ddd} | ttt}|jd dks0J t ddd} | tt d}tjt|d | t W d    d S 1 sVw   Y  d S )Nr   r   )r#   n_componentsr   r   z$transform not implemented for 'lsqr'r,   )	r   r1   r2   r3   	transformshaper<   r=   r>   )rA   X_transformedr   rG   rG   rH   test_lda_transform  s   "r   c                  C   s   t jd} | jdddd}| jdddd}tdd	}||| t|j	 d
d |jj
dks4J dtdd	}||| t|j	 d
d |jj
dksRJ dt|j|j d S )Nr   re   )rb      )locscalerM   r   )rb   rL   r   r         ?)r   z/Unexpected length for explained_variance_ratio_r   )r8   randomRandomStatenormalrandintr   r1   r   explained_variance_ratio_rw   r   r   )stater2   r3   r   r   rG   rG   rH   !test_lda_explained_variance_ratio'  s$   

r   c               	   C   sz  t g dg dg dg dg} t g dg dg dg dg d	g d
g}| d d t jd d f |t jd d d d f  d}t t | jd |jd }tdd||}|	| }|d |d  }|d |d  }|t 
t |d  }|t 
t |d  }tt |	|jt d tt t |d d ddgd tt t |d d ddgd d S )N)r   r   r   )r   r   r   )r   r   r   )r   r      )r*   r   r   )皙r   r   )r   r*   r   )r   r   r   )r   r   r*   )r   r   r   )r   r   r   r   r   r   r   r   r   )r8   rz   r   reshaperepeataranger   r   r1   r   sqrtrw   r   rR   Teyeabsrk   )meansscatterr2   r3   rA   means_transformedd1d2rG   rG   rH   test_lda_orthogonalityD  s*   "6
$(r   c                  C   s   d} t jd}|dd| dfg d }|dd| dfg d }t ||fg d }dg|  dg|   }d	D ]}t|d
}|||||dksRJ d| q9d S )Nre   i  r   r   r   )ra   r   r   )rd   r   r   )r   re   i'  rK   r   r   zusing covariance: %s)r8   r   r   uniformrZ   r   r1   score)nrV   x1x2xr3   r#   rA   rG   rG   rH   test_lda_scalingm  s   
&r   c                  C   s   dD ]2} t | dtt}t|dsJ t | ddtt}t|ds%J t|jtddgddgg qt d	dtt}t|drEJ t | ddtt}t|dsVJ t|jtddgddgg d S )
N)r   r   r   r|   T)r#   rg   gil?gam?g	^?r   )	r   r1   X6y6hasattrr   r|   r8   rz   )r#   rA   rG   rG   rH   test_lda_store_covariance~  s"   r   seedrd   c                 C   s   t j| }|dd}|jddd}tdddd}tdtdd	dd
}||| ||| t|j	|j	 t|j
|j
 d S )Nre   rd   r   rL   Tr%   r   rg   r$   r#   )r$   rg   r+   r#   )r8   r   r   randr   r   r   r1   r   r{   r|   )r   rV   r2   r3   c1c2rG   rG   rH   test_lda_shrinkage  s   r   c                  C   s   G dd d} t jd}|dd}|jddd}td	d
dd}td	|  dd}||| ||| t|j|j t|j	|j	 d S )Nc                   @   s   e Zd Zdd ZdS )z3test_lda_ledoitwolf.<locals>.StandardizedLedoitWolfc                 S   sR   t  }||}t|d }|jd d tjf | |jtjd d f  }|| _d S )Nr   )r   fit_transformr   scale_r8   r   r|   )selfr2   scX_scsrG   rG   rH   r1     s
   
,
z7test_lda_ledoitwolf.<locals>.StandardizedLedoitWolf.fitN)__name__
__module____qualname__r1   rG   rG   rG   rH   StandardizedLedoitWolf  s    r   r   re   rd   r   )re   rL   Tr    r   r   r   )
r8   r   r   r   r   r   r1   r   r{   r|   )r   rV   r2   r3   r   r   rG   rG   rH   test_lda_ledoitwolf  s    	r   r   r   c           
   	   C   s   t d}d}|||}tt| ||  d d | }t|| d }|d d |fD ]}t|d}||| q*|d t|| d d fD ]&}t|d}d}	t	j
t|	d ||| W d    n1 sfw   Y  qEd S )Nr   rd   r   )r   z#n_components cannot be larger than r,   )r   randnr8   tiler]   minr   r1   maxr<   r=   r?   )
rJ   r   rV   rU   r2   r3   max_componentsr   r   r   rG   rG   rH   test_lda_dimension_warning  s     

r   zdata_type, expected_typec                 C   sF   t D ]\}}t||d}|t| t|  |jj|ks J qd S )Nr"   )r0   r   r1   r2   astyper3   r   r   )	data_typeexpected_typer#   r$   rA   rG   rG   rH   test_lda_dtype_match  s
   
r   c                  C   sx   t D ]7\} }t| |d}|ttjttj t| |d}|ttjttj d}t	|j
|j
|d qd S )Nr"   r&   )r'   )r0   r   r1   r2   r   r8   float32r3   float64r   r   )r#   r$   clf_32clf_64r'   rG   rG   rH   ,test_lda_numeric_consistency_float32_float64  s   r   c                  C   s   t  } | ttt}t|t | ttt}t|t | t}t|d d df dkd t | t}t	t
||d | ttt}t
|tksSJ tt | tt W d    d S 1 sjw   Y  d S )Nr   r%   r   )r	   r1   r   r   r4   r   X7r6   r7   r   r8   r9   y7r;   r<   r=   r?   y4)rA   rB   rC   rD   rE   rF   rG   rG   rH   test_qda  s   



"r   c                  C   sr   t  } | ttt}t|dk}d}t t|d| gd} | ttt}t|dk}||ks7J d S )Nr   g|=r   r   )r	   r1   r   r   r4   r8   rw   rz   )rA   rB   n_posnegn_pos2rG   rG   rH   test_qda_priors  s   r   priors_type)listtuplerz   c                 C   sF   ddg}t tddg| dtt}t|jtjsJ t	|j| dS )z$Check that priors accept array-like.r%   r   N)
r	   r   r1   r   r   
isinstancer   r8   ndarrayr   )r   r   rA   rG   rG   rH   test_qda_prior_type,  s   r   c                  C   sR   t ddg} t| dtt}t|j|j d| d< |jd |jd ks'J dS )zCCheck that altering `priors` without `fit` doesn't change `priors_`r%   r   g?r   N)	r8   rz   r	   r1   r2   r3   r   r   r   )r   qdarG   rG   rH   test_qda_prior_copy7  s
   r   c                  C   s   t  tt} t| drJ t ddtt} t| dsJ t| jd tddgddgg t| jd tdd	gd	d
gg d S )Nr|   T)rg   r   gffffff?r   r   gQUU?gQUUտgvWUU?)	r	   r1   r   r   r   r   r|   r8   rz   )rA   rG   rG   rH   test_qda_store_covarianceD  s   "r   zcno floating point exceptions, see https://github.com/numpy/numpy/pull/21895#issuecomment-1311525881)reasonc                  C   sL  d} t  }tjtj| d |tt}W d    n1 sw   Y  |t}t	
|tks1J t dd}t  td W d    n1 sJw   Y  |tt |t}t|t t  }tjtj| d |tt W d    n1 s{w   Y  t dd}tjtj| d |tt W d    d S 1 sw   Y  d S )Nz2The covariance matrix of class .+ is not full rankr,   ry   )	reg_paramerrorg333333?)r	   r<   r   r   LinAlgWarningr1   X2r   r4   r8   r;   warningscatch_warningssimplefilterr   X5y5)r   rA   rB   rG   rG   rH   test_qda_regularizationU  s,   





"r  c                  C   st   t ddddd\} }t| t| jd d | jd | jd } t| d}t||j t| d}t||j d S )	Nre   r   r   rf   r   r   	empiricalr    )	r   r8   rk   r   r   r   r
   r   r   )r   r3   c_ec_srG   rG   rH   test_covariance~  s   0

r  c                 C   sn   t ddgddgg}t ddg}t| d}tjtdd ||| W d   dS 1 s0w   Y  dS )	zg
    Tests that if the number of samples equals the number
    of classes, a ValueError is raised.
    r%   r   abr   z"The number of samples must be morer,   N)r8   rz   r   r<   r=   r?   r1   )r#   r2   r3   rA   rG   rG   rH   =test_raises_value_error_on_same_number_of_classes_and_samples  s   
"r	  c                     sT   t  tt} |  }d  tj fddt| j	j
d D td}t|| dS )z6Check get_feature_names_out uses class name as prefix.r   c                    s   g | ]}  | qS rG   rG   )rP   iclass_name_lowerrG   rH   rW     s    
z.test_get_feature_names_out.<locals>.<listcomp>r   r   N)r   r1   r2   r3   get_feature_names_outlowerr8   rz   r]   r   r   objectr   )est	names_outexpected_names_outrG   r  rH   test_get_feature_names_out  s   
r  )Nr   numpyr8   r<   scipyr   sklearn.clusterr   sklearn.covariancer   r   r   sklearn.datasetsr   sklearn.discriminant_analysisr   r	   r
   sklearn.preprocessingr   sklearn.utilsr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   rz   r2   r3   r:   r5   r   r   r   r   r   r   c_r   zerosr   r  r0   rI   markparametrizer   r   r   r   r   r   r   r   r]   r   r   r   r   r   int32int64r   r   r   r   r   r   r   xfailr  r  r	  r  rG   rG   rG   rH   <module>   s    28.8?^)





	


"
