U
    _»{jv8  ã                   @   sÔ  d dl Z d dlmZ 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 d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZmZ dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z ej! "dd¡dd„ ƒZ#dd„ Z$dd „ Z%eej! "dd¡d!d"„ ƒƒZ&ed#d$„ ƒZ'd%d&„ Z(ej! "dd¡d'd(„ ƒZ)ej! "dd¡d)d*„ ƒZ*d+d,„ Z+d-d.„ Z,d/d0„ Z-d1d2„ Z.d3d4„ Z/d5d6„ Z0ej! "d7d8d9d:d;d<g¡d=d>„ ƒZ1d?d@„ Z2ej! "dAdB¡dCdD„ ƒZ3ej! "dAdB¡dEdF„ ƒZ4dS )Gé    N)ÚStringIO)Úassert_array_equal)Ú
block_diag)Ú
csr_matrix)Úpsi)ÚLatentDirichletAllocation)Ú_dirichlet_expectation_1dÚ_dirichlet_expectation_2d)ÚNotFittedError)Úassert_allcloseÚassert_almost_equalÚassert_array_almost_equalÚ!if_safe_multiprocessing_with_blasc                  C   s6   d} t jd| td�}|g|  }t|Ž }t|ƒ}| |fS )Né   )r   r   )Údtype)ÚnpÚfullÚintr   r   )Ún_componentsÚblockÚblocksÚX© r   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/decomposition/tests/test_online_lda.pyÚ_build_sparse_mtx   s    
r   c                  C   sP   t ƒ \} }d|  }t| ||dd�}t| dd�}| |¡}| |¡}t||ƒ d S )Ng      ð?r   )r   Zdoc_topic_priorZtopic_word_priorÚrandom_state©r   r   )r   r   Úfit_transformr   )r   r   ZpriorÚlda_1Úlda_2Ztopic_distr_1Ztopic_distr_2r   r   r   Útest_lda_default_prior_params$   s    
ü

r    c                  C   s|   t j d¡} tƒ \}}t|dd| d�}| |¡ dddg}|jD ]6}t| ¡ dd … d d d	… ƒ}t	t
|ƒƒ|ks@t‚q@d S )
Nr   é   Úbatch)r   Úevaluate_everyÚlearning_methodr   ©r   r!   é   ©r   é   é   ©é   é   é   éýÿÿÿéÿÿÿÿ©r   ÚrandomÚRandomStater   r   ÚfitÚcomponents_ÚsetÚargsortÚtupleÚsortedÚAssertionError©Úrngr   r   ÚldaÚcorrect_idx_grpsÚ	componentÚtop_idxr   r   r   Útest_lda_fit_batch5   s    
ü


r@   c                  C   s~   t j d¡} tƒ \}}t|ddd| d�}| |¡ dddg}|jD ]6}t| ¡ d	d … d d d
… ƒ}t	t
|ƒƒ|ksBt‚qBd S )Nr   ç      $@r!   Úonline)r   Úlearning_offsetr#   r$   r   r%   r'   r*   r.   r/   r0   r:   r   r   r   Útest_lda_fit_onlineH   s    
û


rD   c                  C   sŠ   t j d¡} tƒ \}}t|dd| d�}tdƒD ]}| |¡ q.dddg}|jD ]6}t| 	¡ d	d … d d d
… ƒ}t
t|ƒƒ|ksNt‚qNd S )Nr   rA   éd   ©r   rC   Útotal_samplesr   r   r%   r'   r*   r.   r/   ©r   r1   r2   r   r   ÚrangeZpartial_fitr4   r5   r6   r7   r8   r9   ©r;   r   r   r<   Úir=   Úcr?   r   r   r   Útest_lda_partial_fit\   s    
ü

rM   c                  C   s~   t j d¡} tƒ \}}t|d| d�}| | ¡ ¡ dddg}|jD ]6}t| 	¡ dd … d d d… ƒ}t
t|ƒƒ|ksBt‚qBd S )	Nr   r"   ©r   r$   r   r%   r'   r*   r.   r/   )r   r1   r2   r   r   r3   Útoarrayr4   r5   r6   r7   r8   r9   r:   r   r   r   Útest_lda_dense_inputp   s    
  ÿ

rP   c                  C   sh   t j d¡} | jddd�}d}t|| d�}| |¡}|dk ¡ sDt‚tt j	|dd	�t  
|jd ¡ƒ d S )
Nr   r)   ©é   é
   ©Úsizer   r   g        r!   ©Zaxis)r   r1   r2   Úrandintr   r   Úanyr9   r   ÚsumÚonesÚshape)r;   r   r   r<   ÚX_transr   r   r   Útest_lda_transform€   s    
r]   Úmethod)rB   r"   c                 C   sL   t j d¡}|jddd�}td| |d�}| |¡}| |¡}t||dƒ d S )Nr   rS   )é2   rR   rT   r)   rN   r(   )r   r1   r2   rW   r   r   Ú	transformr   )r^   r;   r   r<   ZX_fitr\   r   r   r   Útest_lda_fit_transformŒ   s      ÿ

ra   c               	   C   s>   t  dd¡} tƒ }d}tjt|d�� | | ¡ W 5 Q R X d S )N)r)   rS   ç      ð¿z^Negative values in data passed©Úmatch)r   r   r   ÚpytestÚraisesÚ
ValueErrorr3   )r   r<   Úregexr   r   r   Útest_lda_negative_inputš   s
    ri   c               	   C   sL   t j d¡} | jddd�}tƒ }d}tjt|d�� | |¡ W 5 Q R X d S )Nr   r(   rQ   rT   z}This LatentDirichletAllocation instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rc   )	r   r1   r2   rW   r   re   rf   r
   Ú
perplexity)r;   r   r<   rh   r   r   r   Útest_lda_no_component_error£   s    ÿrk   c                 C   s~   t ƒ \}}tj d¡}t|d| d|d�}| |¡ dddg}|jD ]6}t| ¡ dd … d d d	… ƒ}t	t
|ƒƒ|ksBt‚qBd S )
Nr   r&   r!   )r   Ún_jobsr$   r#   r   r%   r'   r*   r.   r/   )r   r   r1   r2   r   r3   r4   r5   r6   r7   r8   r9   )r^   r   r   r;   r<   r=   rL   r?   r   r   r   Útest_lda_multi_jobs±   s    
û


rm   c                  C   sŒ   t j d¡} tƒ \}}t|ddd| d�}tdƒD ]}| |¡ q0dddg}|jD ]6}t| 	¡ d	d … d d d
… ƒ}t
t|ƒƒ|ksPt‚qPd S )Nr   r&   ç      @é   )r   rl   rC   rG   r   r%   r'   r*   r.   r/   rH   rJ   r   r   r   Útest_lda_partial_fit_multi_jobsÆ   s    
û

rp   c               	   C   sÎ   t j d¡} |  dd¡}|  dd¡}t jjd|dfd�}t|dd| d	�}| |¡ | jd|d
 |fd�}tjtdd�� | 	||¡ W 5 Q R X | jd||d
 fd�}tjtdd�� | 	||¡ W 5 Q R X d S )Nr   r   r+   rS   r(   rT   rn   rR   rF   r!   zNumber of samplesrc   zNumber of topics)
r   r1   r2   rW   r   r3   re   rf   rg   Z_perplexity_precomp_distr)r;   r   Z	n_samplesr   r<   Zinvalid_n_samplesZinvalid_n_componentsr   r   r   Útest_lda_preplexity_mismatchÛ   s"    ü
rq   c           	      C   s–   t ƒ \}}t|d| ddd�}t|d| ddd�}| |¡ |j|dd�}| |¡ |j|dd�}||ksjt‚|j|dd�}|j|dd�}||ks’t‚d S )	Nr!   rE   r   ©r   Úmax_iterr$   rG   r   rS   F©Zsub_samplingT)r   r   r3   rj   r9   )	r^   r   r   r   r   Úperp_1Úperp_2Zperp_1_subsamplingZperp_2_subsamplingr   r   r   Útest_lda_perplexityò   s.    
ûû

rw   c                 C   sf   t ƒ \}}t|d| ddd�}t|d| ddd�}| |¡ | |¡}| |¡ | |¡}||ksbt‚d S )Nr!   rE   r   rr   rS   )r   r   r   Úscorer9   )r^   r   r   r   r   Zscore_1Zscore_2r   r   r   Útest_lda_score  s(    
ûû



ry   c                  C   sL   t ƒ \} }t| ddddd�}| |¡ | |¡}| | ¡ ¡}t||ƒ d S )Nr!   r"   rE   r   rr   )r   r   r3   rj   rO   r   )r   r   r<   ru   rv   r   r   r   Útest_perplexity_input_format,  s    
û

rz   c                  C   sb   t ƒ \} }t| ddd�}| |¡ |j|dd�}| |¡}t d|t |j¡  ¡}t	||ƒ d S )NrS   r   )r   rs   r   Frt   rb   )
r   r   r3   rj   rx   r   ÚexprY   Údatar   )r   r   r<   Zperplexity_1rx   Zperplexity_2r   r   r   Útest_lda_score_perplexity=  s    
  ÿ

r}   c                  C   sD   t ƒ \} }t| ddddd�}| |¡ |j}| |¡}t||ƒ d S )Nr!   r"   r   )r   rs   r$   r   r#   )r   r   r3   Zbound_rj   r   )r   r   r<   Zperplexity1Zperplexity2r   r   r   Útest_lda_fit_perplexityK  s    
û

r~   c                  C   sR   t  d¡} | t| ƒfD ]6}tdd� |¡}t|jjdd�t  |jj	d ¡ƒ qdS )z+Test LDA on empty document (all-zero rows).)r)   r(   iî  )rs   r   rV   r!   N)
r   Zzerosr   r   r3   r   r4   rY   rZ   r[   )ÚZr   r<   r   r   r   Útest_lda_empty_docsa  s    
 ÿr€   c               	   C   s’   t  ddd¡} t  | ¡}t| d|ƒ t|t  t| ƒtt  | ¡ƒ ¡dd� |  dd¡} tt	| ƒt| ƒtt j| dd	�d
d
…t j
f ƒ ddd� d
S )z9Test Cython version of Dirichlet expectation calculation.iœÿÿÿrS   i'  r   g¬Ò¶OÉƒý;)ÚatolrE   r!   rV   Ng•dyáý¥=gßA:ÜÅ)>)Zrtolr�   )r   ZlogspaceZ
empty_liker   r   r{   r   rY   Zreshaper	   Znewaxis)ÚxZexpectationr   r   r   Útest_dirichlet_expectationk  s    
&&ürƒ   c                 C   s‚   t ƒ \}}t|dd| |dd�}tƒ }tj| }t_z| |¡ W 5 |t_X | ¡  d¡}	| ¡  d¡}
||	ksrt‚||
ks~t‚d S )Nr   r"   r   )r   rs   r$   Úverboser#   r   Ú
rj   )	r   r   r   ÚsysÚstdoutr3   ÚgetvalueÚcountr9   )r„   r#   Úexpected_linesÚexpected_perplexitiesr   r   r<   ÚoutZold_outZn_linesZn_perplexityr   r   r   Úcheck_verbosity{  s$    
úr�   z;verbose,evaluate_every,expected_lines,expected_perplexities)Fr!   r   r   )Fr   r   r   )Tr   r   r   )Tr!   r   r   )Tr&   r   r!   c                 C   s   t | |||ƒ d S )N)r�   )r„   r#   rŠ   r‹   r   r   r   Útest_verbosity’  s    rŽ   c                  C   s>   t ƒ \} }t| d� |¡}| ¡ }tdd„ t| ƒD ƒ|ƒ dS )z6Check feature names out for LatentDirichletAllocation.)r   c                 S   s   g | ]}d |› �‘qS )Zlatentdirichletallocationr   )Ú.0rK   r   r   r   Ú
<listcomp>§  s     z.test_lda_feature_names_out.<locals>.<listcomp>N)r   r   r3   Zget_feature_names_outr   rI   )r   r   r<   Únamesr   r   r   Útest_lda_feature_names_out   s    
 ÿr’   r$   )r"   rB   c                 C   s^   t j d¡}|jdd�j|dd�}tdd| d�}| |¡ |jj|ksJt	‚|j
j|ksZt	‚dS )	z2Check data type preservation of fitted attributes.r   rQ   rT   F)Úcopyr)   ©r   r   r$   N)r   r1   r2   ÚuniformÚastyper   r3   r4   r   r9   Zexp_dirichlet_component_)r$   Zglobal_dtyper;   r   r<   r   r   r   Útest_lda_dtype_match«  s      ÿ
r—   c                 C   st   t j |¡}|jdd�}| t j¡}td|| d� |¡}td|| d� |¡}t|j	|j	ƒ t| 
|¡| 
|¡ƒ dS )z>Check numerical consistency between np.float32 and np.float64.rQ   rT   r)   r”   N)r   r1   r2   r•   r–   Zfloat32r   r3   r   r4   r`   )r$   Zglobal_random_seedr;   ZX64ZX32Zlda_64Zlda_32r   r   r   Útest_lda_numerical_consistency¹  s&      ÿþ  ÿþr˜   )5r†   Úior   Únumpyr   re   Znumpy.testingr   Zscipy.linalgr   Zscipy.sparser   Zscipy.specialr   Zsklearn.decompositionr   Z&sklearn.decomposition._online_lda_fastr   r	   Zsklearn.exceptionsr
   Zsklearn.utils._testingr   r   r   r   r   r    r@   rD   rM   rP   r]   ÚmarkZparametrizera   ri   rk   rm   rp   rq   rw   ry   rz   r}   r~   r€   rƒ   r�   rŽ   r’   r—   r˜   r   r   r   r   Ú<module>   sj   
	



ûþ


