
    cT                        d Z ddlZddlZddlZddlZ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mZ ddlmZ ddlmZmZmZ ej                            d	          d
k    Z ee          Zd eD             Zd Z G d dej        ej                   Z! G d de!          Z"e#dk    r( ej$        dej%                    ej&                     dS dS )zN
Automated tests for checking transformation algorithms (the models package).
    N)assert_allclose)mmcorpus
Dictionary)ldamodelldamulticore)matutilsutils)basetmtests)datapathget_tmpfilecommon_texts	RUNNER_OSWindowsc                 B    g | ]}t                               |          S  )
dictionarydoc2bow).0texts     9lib/python3.11/site-packages/gensim/test/test_ldamodel.py
<listcomp>r      s&    	<	<	<t*

T
"
"	<	<	<    c                      t           j                            d          d t           j                            d          dg} | D ]5}t	          t          j        |          t           j        j                  sJ 6d S )Nr   )nprandomseedRandomState
isinstancer	   get_random_state)	testcasestestcases     r   test_random_stater"   !   st    ""D")*?*?*B*BAFI S S%0::BI<QRRRRRRS Sr   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej        ed
          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestLdaModelc                     t          j        t          d                    | _        t          j        | _        |                     t          t          dd          | _        d S Nztestcorpus.mm   d   id2word
num_topicspasses)	r   MmCorpusr   corpusr   LdaModelclass_r   modelselfs    r   setUpzTestLdaModel.setUp(   sF    '(A(ABB'[[RU[VV


r   c                    |                      | j        t          dd          }t          j        | j        j                  |_        |                                 t          | j        	                    d          |	                    d          d           t          | j        
                                |
                                d           t          j                            d          | j        _        t          j                            d          |_        d| j        _        d|_        | j                            | j                   |                    | j                   t          | j        	                    d          |	                    d          d           t          | j        
                                |
                                d           d S )Nr'      )r.   r*   r+   r,   h㈵>rtolr   )r0   r.   r   copydeepcopyr1   state
sync_stater   get_term_topics
get_topicsr   r   r   random_stater,   update)r3   model2s     r   test_sync_statezTestLdaModel.test_sync_state-   s   DKPQZ[\\}TZ%566
22155v7M7Ma7P7PW[\\\\
--//1B1B1D1D4PPPP #%)"7"7":":
 i33A66

$+&&&dk"""
22155v7M7Ma7P7PW[\\\\
--//1B1B1D1D4PPPPPPr   c           	         d}t          d          D ]}|                     t          dd          }|                    | j                   t          t                    d         }||         }t          j        |d          }ddg}t          j	        t          |          t          |          d	
          }|r n2t          j        d|t          |          t          |                     |                     |           d S )NF   r'   r(   r)   r   gp=
ף?gףp=
?g?)atolz:LDA failed to converge on attempt %i (got %s, expected %s))ranger0   r   rA   r.   listr   sparse2fullr   allclosesortedloggingwarning
assertTrue)r3   passedir1   doctransformedvecexpecteds           r   test_transformzTestLdaModel.test_transform@   s     r 	 	AKK
qKMMELL%%% v,,q/C*K&{A66Cd|H[fX.>.>TJJJF OLaQWX[Q\Q\^dem^n^n    	r   c                    |                      t          t          dd          }|                      t          t          dd          }|                     t	          t          j        |j        |j                                       d S )N	symmetric
   )r*   alphar,   auto)r0   r.   r   assertFalseallr   equalrY   r3   model1	modelautos      r   test_alpha_autozTestLdaModel.test_alpha_autoY   sj    VZ{SUVVKK
&QSKTT	 	RXflIODDEEFFFFFr   c                    t          t          dd           }d} | j        di | d|d<    | j        di |}|                     |j        j        |           t          |j        t          j        ddg                     d|d<    | j        di |}|                     |j        j        |           t          |j        dd	gd
           d|d<    | j        di |}|                     |j        j        |           t          |j        t          j        ddg                     d|d<    | j        di |}|                     |j        j        |           t          |j        t          j        ddg                     ddg|d<    | j        di |}|                     |j        j        |           t          |j        t          j        ddg                     t          j        ddg          |d<    | j        di |}|                     |j        j        |           t          |j        t          j        ddg                     g d|d<    | j	        t          | j        fi | dgdgg|d<    | j	        t          | j        fi | dg|d<    | j	        t          | j        fi | d|d<    | j	        t          | j        fi | d S )Nr'   )r*   r+   rY   )r'   rW   rY         ?
asymmetricgY>-?gLM7?r7   r8   333333?   )re   re   re   gensim is coolr   )dictr   r0   assertEqualrY   shaper   r   arrayassertRaisesAssertionError
ValueError)r3   kwargsexpected_shaper1   s       r   
test_alphazTestLdaModel.test_alpha`   s&   
 
 

  	f%w%%f%%*N;;;RXsCj%9%9:::&w%%f%%*N;;;h%9EEEEw%%f%%*N;;;RXsCj%9%9:::w%%f%%*N;;;RXq!f%5%5666*w%%f%%*N;;;RXsCj%9%9:::(C:..w%%f%%*N;;;RXsCj%9%9::: *//w.$+@@@@@53%.w.$+@@@@@%w.$+@@@@@*w*dk<<V<<<<<r   c                     |                      t          t          dd          }|                      t          t          dd          }|                     t	          j        |j        |j                             d S )NrW   rX   )r*   etar,   rZ   )r0   r.   r   r[   r   rJ   rs   r^   s      r   test_eta_autozTestLdaModel.test_eta_auto   sa    VZ[QSTTKK
rKRR	 	VZ??@@@@@r   c                    t          t          dd           }t          t                    }|f} | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       d|d<    | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       d|d<    | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       d|d<    | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       dg|z  |d<    | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       t          j	        dg|z            |d<    | j        di |}|                     |j        j        |           t          |j        t          j	        dg|z                       t          j	        dgt          t                    z  gdz            }||d<    | j        di | |
                    t          t          |j                                      |d<    | j        t          | j        fi | dg|d<    | j        t          | j        fi | dg|dz   z  |d<    | j        t          | j        fi | d	|d<    | j        t          | j        fi | d
|d<    | j        t          | j        fi | d S )Nr'   )r*   r+   rs   rc   rW   rs   re   rf   r6   rg   rd   r   )rh   r   lenr0   ri   rs   rj   r   r   rk   reshapetuplereversedrl   rm   rn   )r3   ro   	num_termsrp   r1   testetas         r   test_etazTestLdaModel.test_eta   s   
 
 

 
OO	# %%f%%.999	28SEI,=#>#>???#u%%f%%.999	28SEI,=#>#>???u%%f%%.999	28SEI,=#>#>???u%%f%%.999	28QC)O#<#<===	)u%%f%%.999	28SEI,=#>#>???#!233u%%f%%.999	28SEI,=#>#>??? (SEC
OO34q899uf  hw}.E.E(F(FGGu.$+@@@@@u.$+@@@@@Q/u.$+@@@@@(u*dk<<V<<<$u*dk<<V<<<<<r   c                    | j                             | j                  }|D ]\  }}|                     t	          |t
                               |                     t	          |t                               |D ]_\  }}|                     t	          |t                               |                     t          j	        |t          j
                             `d S N)r1   
top_topicsr.   rN   r   rH   floatstrr   
issubdtypefloating)r3   r   topicscorevks         r   test_top_topicszTestLdaModel.test_top_topics   s    Z**4;77
& 	? 	?LE5OOJud33444OOJue44555 ? ?1
1c 2 2333a = =>>>>?		? 	?r   c                    | j                             d          }|D ]d\  }}|                     t          |t          j                             |                     t          j        |t          j                             ed S Nr6   )	r1   get_topic_termsrN   r   numbersIntegralr   r   r   )r3   topic_termsr   r   s       r   test_get_topic_termsz!TestLdaModel.test_get_topic_terms   sv    j0033 	; 	;DAqOOJq'*:;;<<<OOBM!R[99::::	; 	;r   z;see <https://github.com/RaRe-Technologies/gensim/pull/2836>c           	      Z   |                      | j        t          ddt          j                            d                    }|                    | j                  }|D ]}|                     t          |t                               |D ]d\  }}|                     t          |t          j                             |                     t          j        |t          j                             e|                    | j        d          }|                     |j        j        t#          t                               |D ]^}|                     t          |t$                               |d         D ]d\  }}|                     t          |t          j                             |                     t          j        |t          j                             e|d         D ]Z\  }}|                     t          |t          j                             |                     t          |t                               [|d         D ]Z\  }}	|                     t          |t          j                             |                     t          |	t                               [`d}
d}|                    | j        dd	d
          }|                     |j        j        t#          t                               |D ]}|                     t          |t$                               |d         D ]\  }}|                     t          |t          j                             |                     t          j        |t          j                             t#          |d                   dk    r|
dz  }
|d         D ]Z\  }}|                     t          |t          j                             |                     t          |t                               [|d         D ]r\  }}	|                     t          |t          j                             |                     t          |	t                               t#          |	          dk    r|dz  }s|                     |j        j        |
k               |                     t'          d t          D                       |k               |                    | j        d         d          \  }}}|D ]d\  }}|                     t          |t          j                             |                     t          j        |t          j                             e|D ]Z\  }}|                     t          |t          j                             |                     t          |t                               [|D ]Z\  }}	|                     t          |t          j                             |                     t          |	t                               [d S )Nr'   r(   r   r*   r+   r,   r@   T)per_word_topicsr6   g?      ?)minimum_probabilityminimum_phi_valuer   c              3   4   K   | ]}t          |          V  d S r~   )rv   )r   rP   s     r   	<genexpr>z8TestLdaModel.test_get_document_topics.<locals>.<genexpr>*  s(      33qCFF333333r   )r0   r.   r   r   r   r   get_document_topicsrN   r   rH   r   r   r   r   ri   r<   numdocsrv   rx   sum)r3   r1   
doc_topicsr   r   r   
all_topicsw
topic_list
phi_valuesdoc_topic_count_naword_phi_count_naword_topics	word_phiss                 r   test_get_document_topicsz%TestLdaModel.test_get_document_topics   s    K#TVT]TbTbcdTeTe  
 
 ..t{;;
 	? 	?EOOJud33444 ? ?1
1g.> ? ?@@@a = =>>>>?
 ..t{D.QQ
,c&kk::: 	> 	>EOOJue44555a ? ?1
1g.> ? ?@@@a = =>>>>!&q > >:
1g.> ? ?@@@
:t < <====!&q > >:
1g.> ? ?@@@
:t < <====>
 ..KSCY] / 
 

 	,c&kk::: 	+ 	+EOOJue44555a , ,1
1g.> ? ?@@@a = =>>>uQx==A% ,&!+&!&q > >:
1g.> ? ?@@@
:t < <====!&q + +:
1g.> ? ?@@@
:t < <===z??a' +%*%	+ 	+.@@AAA33F333336GGHHH-2-F-Ft{ST~gk-F-l-l*
K 	; 	;DAqOOJq'*:;;<<<OOBM!R[99::::( 	: 	:MAzOOJq'*:;;<<<OOJz4889999& 	: 	:MAzOOJq'*:;;<<<OOJz4889999	: 	:r   c           	         |                      | j        t          ddt          j                            d                    }|                    d          }|D ]_\  }}|                     t          |t                               |                     t          j
        |t          j                             `|                    t          |j        d                             }|D ]_\  }}|                     t          |t                               |                     t          j
        |t          j                             `d S )Nr'   r(   r   r   )r0   r.   r   r   r   r   r>   rN   r   intr   r   r   r*   )r3   r1   resulttopic_noprobabilitys        r   test_term_topicszTestLdaModel.test_term_topicsB  s)   K#TVT]TbTbcdTeTe  
 

 &&q))%+ 	E 	E!HkOOJx55666OOBM+r{CCDDDD &&s5=+;'<'<==%+ 	E 	E!HkOOJx55666OOBM+r{CCDDDD	E 	Er   c                 l   d| _         t                      }|                     t          dd          }d }t	          d          D ]:}|                    | j                   |                     ||                     ;dD ]0}|                     t          dd|          }|                      ||          d	           |D ]n}|                    | j                   d
	                    d ||j
        |j        j        fD                       }|                      ||          ||           o|                     |j        j        t          t                    t          |          z             |                     |j
        t          t                    t          |          z             2d S )NTr6   r'   )r*   	chunksizer+   c                 ^    t          | j        d| j        z  | j        z  z   | j                   S r   )powoffsetnum_updatesr   decay)r1   s    r   
final_rhotz,TestLdaModel.test_passes.<locals>.final_rhotc  s/    u|q5+<'<&OORWR]Q]^^^r      )r6   r   rX   2   r(   )r*   r   r+   r,   r   z, c              3   4   K   | ]}t          |          V  d S r~   )r   )r   xs     r   r   z+TestLdaModel.test_passes.<locals>.<genexpr>r  s(      aa1Aaaaaaar   )msg)longMessagerH   r0   r   rG   rA   r.   appendri   joinr   r<   r   assertAlmostEqualrv   )r3   
test_rhotsr1   r   r   r,   	test_rhotr   s           r   test_passeszTestLdaModel.test_passes\  s   VV
J!JJ	_ 	_ 	_ q 	1 	1ALL%%%jj//0000) 	O 	OFKK
aAV\K]]EZZ..444' N N	T[)))iiaa9JEKL_0`aaaaa&&zz%'8'8)&MMMMU[0#f++J2OPPPU.Fc*oo0MNNNN	O 	Or   c                    t          d          }| j        }|                    |           | j                            |          }|                     |j        |j                   |                     t          j	        |j
        |j
                             g }|                     t          j	        ||         ||                              d S )Ngensim_models_lda.tstr   r1   saver0   loadri   r+   rN   r   rJ   expElogbetar3   fnamer1   rB   tstvecs        r   test_persistencezTestLdaModel.test_persistence  s    344


5!!%(()6+<===E$5v7IJJKKKE&M6&>BBCCCCCr   c                    t          d          }| j                            |          }t          d          }| j                            |          }|                     |j        |j                   |                     t          j        |j        |j                             g }|                     t          j        ||         ||                              t          |j
                                                  }t          |j
                                                  }|                     t          |                                          t          |                                                     d S )Nldamodel_python_2_7ldamodel_python_3_5)r   r0   r   ri   r+   rN   r   rJ   r   rh   r*   	iteritemssetkeys)r3   fname_model_2_7	model_2_7fname_model_3_5	model_3_5r   id2word_2_7id2word_3_5s           r   -test_model_compatibility_with_python_versionsz:TestLdaModel.test_model_compatibility_with_python_versions  s1   "#899K$$_55	"#899K$$_55	-y/CDDDI$99;PQQRRRIf$5y7HIIJJJ9,6688999,668899[--//00#k6F6F6H6H2I2IJJJJJr   c                    t          d          }t          j        | j        d          }|                    |d           t          j                            |          }|                     |j        d u            |                    |dg           t          j                            |          }|                     |j        d u            d S )Nz+gensim_models_lda_testPersistenceIgnore.tstr'   )r+   r*   )ignore)r   r   r/   r.   r   r   rN   r*   )r3   r   r1   rB   s       r   test_persistence_ignorez$TestLdaModel.test_persistence_ignore  s    IJJ!$+!<<<

5
+++"''..$.///

5)
---"''..$./////r   c                    t          d          }| j        }|                    |           | j                            |d           }|                     |j        |j                   |                     t          j	        |j
        |j
                             g }|                     t          j	        ||         ||                              d S )Ngensim_models_lda.tst.gzmmapr   r   s        r   test_persistence_compressedz(TestLdaModel.test_persistence_compressed  s    677


5!!%d!33)6+<===E$5v7IJJKKKE&M6&>BBCCCCCr   c                    t          d          }| j        }|                    |d           | j                            |d          }|                     |j        |j                   |                     t          |j	        t          j                             |                     t          j        |j	        |j	                             g }|                     t          j        ||         ||                              d S )Nr   r   	sep_limitrr   )r   r1   r   r0   r   ri   r+   rN   r   r   r   memmaprJ   r   s        r   test_large_mmapzTestLdaModel.test_large_mmap  s    344
 	

5A
&&& !!%c!22)6+<===
6#5ryAABBBE$5v7IJJKKKE&M6&>BBCCCCCr   c                     t          d          }| j        }|                    |d           |                     t          | j        j        |d           d S )Nr   r   r   r   r   )r   r1   r   rl   IOErrorr0   r   )r3   r   r1   s      r   test_large_mmap_compressedz'TestLdaModel.test_large_mmap_compressed  sY    677
 	

5A
&&& 	'4;#3UEEEEEr   c                    t          d          }| j                            |          }|                    dd          }|D ]^}|                     t          |d         t                               |                     t          |d         t                               _t          d          }|	                    |           | j                            |          }|                    dd          }|D ]^}|                     t          |d         t                               |                     t          |d         t                               _d S )Npre_0_13_2_modelr'   rf   )r+   	num_wordsr   r6   z'gensim_models_lda_post_0_13_2_model.tst)
r   r0   r   print_topicsrN   r   r   r   r   r   )r3   pre_0_13_2_fnamemodel_pre_0_13_2model_topicsrP   post_0_13_2_fnamemodel_post_0_13_2model_topics_news           r   (test_random_state_backward_compatibilityz5TestLdaModel.test_random_state_backward_compatibility  sI   #$677;++,<== (44Q4OO 	3 	3AOOJqtS11222OOJqtS112222 ((QRR/000 !K,,->??,99QRS9TT! 	3 	3AOOJqtS11222OOJqtS112222	3 	3r   c                     t          d          }g d}ddg}| j                            |          }||         }|                     t	          j        ||                     d S )Nlda_3_0_1_model))r   r6   )r6   r6   )r'   r6   )r   g~貅?)r6   g\4?)r   r0   r   rN   r   rJ   )r3   lda_3_0_1_fnametest_docexpected_topicsr1   topicss         r   !test_dtype_backward_compatibilityz.TestLdaModel.test_dtype_backward_compatibility  sl    "#455+++35MN   11 xOV<<=====r   N)__name__
__module____qualname__r4   rC   rU   ra   rq   rt   r|   r   r   unittestskipIfGITHUB_ACTIONS_WINDOWSr   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   '   s       W W W
Q Q Q&     2G G G4= 4= 4=lA A A:= := :=x	? 	? 	?; ; ; X_+-jkkL: L: lkL:lE E E4O O OzD D DK K K	0 	0 	0D D DD D DF F F3 3 30> > > > >r   r$   c                       e Zd Zd Zd ZdS )TestLdaMulticorec                     t          j        t          d                    | _        t          j        | _        |                     t          t          dd          | _        d S r&   )	r   r-   r   r.   r   LdaMulticorer0   r   r1   r2   s    r   r4   zTestLdaMulticore.setUp	  sF    '(A(ABB"/[[RU[VV


r   c                 J    |                      t          | j        d           d S )NrZ   )rY   )rl   RuntimeErrorr0   r2   s    r   ra   z TestLdaMulticore.test_alpha_auto  s%    ,6BBBBBr   N)r   r   r   r4   ra   r   r   r   r   r     s:        W W WC C C C Cr   r   __main__z)%(asctime)s : %(levelname)s : %(message)s)formatlevel)'__doc__rL   r   osr   r:   numpyr   numpy.testingr   gensim.corporar   r   gensim.modelsr   r   gensimr   r	   gensim.testr
   gensim.test.utilsr   r   r   environgetr   r   r.   r"   TestCaseTestBaseTopicModelr$   r   r   basicConfigDEBUGmainr   r   r   <module>r     s   
   				       ) ) ) ) ) ) / / / / / / / / 0 0 0 0 0 0 0 0 " " " " " " " " # # # # # # A A A A A A A A A A44	A Z%%
	<	<|	<	<	<S S S\> \> \> \> \>8$k&D \> \> \>BC C C C C| C C C z GJRYR_````HMOOOOO r   