
    c)N                        d 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Zddl	m
Z
mZmZ ddlmZmZmZmZ dZdZdZdZej        d	k    rd
ndZ G d dej                  Zedk    r( ej        dej                    ej                     dS dS )z4
Automated tests for checking the EnsembleLda Class
    N)deepcopy)EnsembleLdaLdaMulticoreLdaModel)datapathget_tmpfilecommon_corpuscommon_dictionary      2   nt-C6?h㈵>c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZdS )TestEnsembleLdac           	      t    t          t          t          t          t          t
          t          t                    S )N)corpusid2word
num_topicspasses
num_modelsrandom_statetopic_model_classr   r	   r
   
NUM_TOPICSPASSES
NUM_MODELSRANDOM_STATEr   selfs    <lib/python3.11/site-packages/gensim/test/test_ensemblelda.pyget_eldazTestEnsembleLda.get_elda    s+     *;
j|&
 
 
 	
    c           
      v    t          t          t          t          t          t
          t          dt                    S )NF)r   r   r   r   r   r   memory_friendly_ttdar   r   r    s    r"   get_elda_mem_unfriendlyz'TestEnsembleLda.get_elda_mem_unfriendly'   s-     *;
j|!&(
 
 
 	
r$   c                 :   t          |j                  dk    sJ |j                            d          }t          j        t          |j                                                t          j                  }t          j                            ||d           dS )zMCheck that ttda has one or more topic and that term probabilities add to one.r      )axisr   rtolN)	lenttdasumnponesastypefloat32testingassert_allclose)r!   eldasum_over_termsexpected_sum_over_termss       r"   assert_ttda_is_validz$TestEnsembleLda.assert_ttda_is_valid.   s}    49~~!!!!A.."$'#di.."9"9"@"@"L"L

"">3JQV"WWWWWr$   c                     |                                  }|j        j        d         t          t                    k    sJ t          |j                  t          t          z  k    sJ |                     |           d S Nr)   )	r#   stable_topicsshaper-   r
   r.   r   r   r9   r!   r6   s     r"   	test_eldazTestEnsembleLda.test_elda5   sn    }} !'*c2C.D.DDDDD49~~j!88888!!$'''''r$   c                 b   |                                  }t          j        t          d                    }t          j                            |j        |j        t                     |j	        
                                dz  }t          j                            |j	        |j	        |           d S )Nensembleldar+   r   )atol)r#   r   loadr   r0   r4   r5   r.   RTOLasymmetric_distance_matrixmax)r!   r6   loaded_eldarB   s       r"   1test_backwards_compatibility_with_persisted_modelzATestEnsembleLda.test_backwards_compatibility_with_persisted_model>   s    }} "&x'>'>??

""49k.>T"JJJ599;;eC

""+2 	# 	
 	
 	
 	
 	
r$   c                    t          j        t          d                    }t          |j        j                  }t          |j                  }t          |                                          }d|_        |	                                 | 
                    |j        j        |           |j        |k    sJ t          j                            |                                |t                     d S )NrA   Tr+   )r   rC   r   r   cluster_modelresultsvalid_clusters
get_topics#asymmetric_distance_matrix_outdated	reclusterassert_clustering_results_equalr0   r4   r5   rD   )r!   r6   loaded_cluster_model_resultsloaded_valid_clustersloaded_stable_topicss        r"   test_reclusterzTestEnsembleLda.test_reclusterJ   s    
  7 788'/0B0J'K'K$ ()< = ='(9(9:: 480,,T-?-GIefff"&;;;;;

""4??#4#46JQU"VVVVVr$   c                 "   |                                  }|                                 |j        j        d         t	          t
                    k    sJ t	          |j                  t          t          z  k    sJ | 	                    |           d S r;   )
r#   rO   r<   r=   r-   r
   r.   r   r   r9   r>   s     r"   <test_recluster_does_nothing_when_stable_topics_already_foundzLTestEnsembleLda.test_recluster_does_nothing_when_stable_topics_already_found]   s~    }} 	!'*c2C.D.DDDDD49~~j!88888!!$'''''r$   c                     t          t          t          t          dt          t
                    }t          |j                  dk    sJ d S Nr   )r   r   r   r   r   r   r   r	   r
   r   r   r   r-   r.   r>   s     r"   "test_not_trained_given_zero_passesz2TestEnsembleLda.test_not_trained_given_zero_passesh   sF     *;
,
 
 
 49~~""""""r$   c                     t          t          t          t          t          t
                    }t          |j                  dk    sJ d S )N)r   r   r   r   r   r   )r   r
   r   r   r   r   r-   r.   r>   s     r"    test_not_trained_given_no_corpusz0TestEnsembleLda.test_not_trained_given_no_corpuso   sC    %*j|
 
 
 49~~""""""r$   c                     t          t          t          t          dt          t
                    }t          |j                  dk    sJ d S )Nr   )r   r   r   
iterationsr   r   rY   r>   s     r"   &test_not_trained_given_zero_iterationsz6TestEnsembleLda.test_not_trained_given_zero_iterationsv   sF     *;
Zl
 
 
 49~~""""""r$   c                     t          t          t          t          t          dt
                    }t          |j                  dk    sJ d S rX   )r   r	   r
   r   r   r   r-   r.   r>   s     r"   "test_not_trained_given_zero_modelsz2TestEnsembleLda.test_not_trained_given_zero_models}   sF     *;
al
 
 
 49~~""""""r$   c                    |                                  }|                                 }t          |j                  t          k    sJ t
          j                            |j        |j        t                     t
          j                            |
                                |
                                t                     |                     |           d S Nr+   )r#   r'   r-   tmsr   r0   r4   r5   r.   rD   rM   r9   )r!   r6   elda_mem_unfriendlys      r"   test_mem_unfriendlyz#TestEnsembleLda.test_mem_unfriendly   s    
 }}"::<<&*++z9999

""49.A.FT"RRR

""4??#4#46I6T6T6V6V]a"bbb!!"566666r$   c                     |                                  }|                                }|                                }t          j                            |                                |t                     d S rc   )r#   generate_gensim_representationrM   r0   r4   r5   rD   )r!   r6   gensim_modeltopicss       r"   #test_generate_gensim_representationz3TestEnsembleLda.test_generate_gensim_representation   s^    }}::<<((**

""4??#4#4f4"HHHHHr$   c                     t           j                            d |D             d |D                        t           j                            d |D             d |D                        dS )z2Assert important attributes of the cluster resultsc                     g | ]	}|j         
S  label.0elements     r"   
<listcomp>zCTestEnsembleLda.assert_clustering_results_equal.<locals>.<listcomp>       ???wW]???r$   c                     g | ]	}|j         
S rn   ro   rq   s     r"   rt   zCTestEnsembleLda.assert_clustering_results_equal.<locals>.<listcomp>   ru   r$   c                     g | ]	}|j         
S rn   is_corerq   s     r"   rt   zCTestEnsembleLda.assert_clustering_results_equal.<locals>.<listcomp>       AAAW_AAAr$   c                     g | ]	}|j         
S rn   rx   rq   s     r"   rt   zCTestEnsembleLda.assert_clustering_results_equal.<locals>.<listcomp>   rz   r$   N)r0   r4   assert_array_equal)r!   clustering_results_1clustering_results_2s      r"   rP   z/TestEnsembleLda.assert_clustering_results_equal   s    

%%??*>?????*>???	
 	
 	
 	
%%AA,@AAAAA,@AAA	
 	
 	
 	
 	
r$   c                    |                                  }|                                 }t          d          }|                    |           t	          j        |          }|                    |           t	          j        |          }|j        J |                                }|j        t          k    sJ |	                                }|j
        }|j        }	t          j                            |	                                |t                     t          j                            |j
        |t                     t          j                            |j        |	t                     |j        j        }
|j        j        }|                     |
|           |                                }|	                                }t          j                            |	                                |t                     d S )Ngensim_models_ensembleldar+   )r#   r'   r   saver   rC   r   rh   r   rM   r.   rE   r0   r4   r5   rD   rJ   rK   rP   )r!   r6   re   fnamerG   loaded_elda_mem_unfriendlyloaded_elda_representationrj   r.   amatrixexpected_clustering_resultsloaded_clustering_results)loaded_elda_mem_unfriendly_representations                r"   test_persistingzTestEnsembleLda.test_persisting   s   }}"::<<788		%!&u--  '''%0%5e%<%<" ,444 &1%O%O%Q%Q" ,8888+66888

""4??#4#4f4"HHH

""49d">>>

""4#BGRV"WWW&*&8&@#$/$=$E!,,-HJcddd 5O4m4m4o4o1:EEGG

""4??#4#4f4"HHHHHr$   c                 n   t           }d}|                                 }t          t          t          t
          t          t          t          |||	  	        }| 	                                }t          t          t          t
          t          t          t          |||d
  
        }t          j                            |                                |                                t                     t          j                            |                                |                                t                     d S )N   )	r   r   r   r   r   r   r   ensemble_workersdistance_workersF)
r   r   r   r   r   r   r   r   r   r&   r+   )r   r#   r   r	   r
   r   r   r   r   r'   r0   r4   r5   rM   rD   )r!   r   workersr6   elda_multiprocessingre   #elda_multiprocessing_mem_unfriendlys          r"   test_multiprocessingz$TestEnsembleLda.test_multiprocessing   s   #
  }}* *;x!&Z%RY 
  
  
 #::<<.9 *;x!&Z%RY!&	/
 /
 /
+ 	
""OO ++-- 	# 	
 	
 	

 	
""**,,/::<< 	# 	
 	
 	
 	
 	
r$   c                    |                                  }t          t          d          }|                    |j        dd                    |                    |j        dd                     |                                 t          j                            |	                                |	                                t                     t          d          }|                    |           t          j        |          }t          j                            |	                                |	                                t                     |                     |           d S )Nr   )r   r   r)   r+   r   )r#   r   r
   	add_modelr.   rO   r0   r4   r5   rM   rD   r   r   rC   test_inference)r!   r6   ensembler   loaded_ensembles        r"   test_add_models_to_emptyz(TestEnsembleLda.test_add_models_to_empty   s$   }}'8QGGG49QqS>***49QRR=)))

""8#6#6#8#8$//:K:KRV"WWW 788e%*511

""?#=#=#?#?ARARY]"^^^O,,,,,r$   c                    d}d}|                                  }t          t          t          |d|dt          t
          dd
  
        }t          |j                  }|j        }|	                    |j                   t          |j                  |t          |j                  z   k    sJ |j        |dz   k    sJ t          |j                  }|j        }|	                    |d           t          |j                  |t          |j                  z   k    sJ |j        |dz   k    sJ t          |j                  }|j        }| 
                                }|	                    ||g           t          |j                  |dt          |j                  z  z   k    sJ |j        |dt          z  z   k    sJ |j        }t          |j                  }|j        }|	                    |           t          |j                  |t          |                                          z   k    sJ |j        |dz   k    sJ t          |j                  }|j        }|	                    ||g           t          |j                  |dt          |                                          z  z   k    sJ |j        |dz   k    sJ |                     |           t          t          t          |d|dt          t
          ddd          }	t          |	j                  }|	j        }|		                    |           t          |	j                  |t          z   k    sJ |	j        |t          z   k    sJ t          |	j                  }|	j        }|		                    ||g           t          |	j                  |dt          z  z   k    sJ |	j        |dt          z  z   k    sJ t          |	j                  }|	j        }|		                    |j        d                    t          |	j                  |dz   k    sJ |	j        |dz   k    sJ t          |	j                  }|	j        }|		                    |j                   t          |	j                  |t          z   k    sJ |	j        |t          z   k    sJ t          |	j                  }|	j        }t!          j        t$                    5  |		                    |j        d                                                    d d d            n# 1 swxY w Y   t          |	j                  |k    sJ |	j        |k    sJ |	j        t          |	j                  k    sJ |                     |	           d S )	Nr   r)   r   )
r   r   r   r   r   r^   r   r   r   r      F)r   r   r   r   r   r^   r   r   r   r   r&   r   )r#   r   r	   r
   r   r   r-   r.   r   r   r'   r   classic_model_representationrM   r9   rd   pytestraises
ValueError)
r!   num_new_modelsnum_new_topics	base_eldacumulative_eldanum_topics_before_add_modelnum_models_before_add_modelbase_elda_mem_unfriendlymodelre   s
             r"   test_add_modelszTestEnsembleLda.test_add_models   s.     MMOO	% *;%aN||	
 
 
 '*/*>&?&?#&5&@#!!).111?'((,G#inJ]J],]]]]])-H1-LLLLL '*/*>&?&?#&5&@#!!)Q///?'((,G#inJ]J],]]]]])-H1-LLLLL '*/*>&?&?#&5&@##'#?#?#A#A !!9.F"GHHH?'((,G!cR[R`NaNaJa,aaaaa)-H1z>-YYYYY 6&)/*>&?&?#&5&@#!!%(((?'((,G#eN^N^N`N`JaJa,aaaaa)-H1-LLLLL '*/*>&?&?#&5&@#!!5%.111?'((,G!cRWRbRbRdRdNeNeJe,eeeee)-H1-LLLLL!!/222 * *;%aN||	
 
 
 '**=*A&B&B#&9&D#%%&>???&*++/JZ/WWWWW"-1Lz1YYYYY '**=*A&B&B#&9&D#%%'?AY&Z[[[&*++/JQQ[^/[[[[["-1LqS]~1]]]]] '**=*A&B&B#&9&D#%%&>&B1&EFFF&*++/JQ/NNNNN"-1Lq1PPPPP '**=*A&B&B#&9&D#%%&>&BCCC&*++/JZ/WWWWW"-1Lz1YYYYY '**=*A&B&B#&9&D#]:&& 	X 	X))*B*Fq*I*T*T*V*VWWW	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X &*++/JJJJJ"-1LLLLL"-5H5L1M1MMMMM!!"566666s   3TT"%T"c                 Z   d}d}d}t          t          t          |d|d|dd	  	        }t          t          t          |d|d|t          dd	
  
        }|                                 }|                                 }|j        |j        k    sJ |j        |j        k    sJ t          j        	                    |j
        |j
        t          
           t          j        	                    |                                |                                t          
           |                    |           |                    |           t          j        	                    |j
        |j
        t          
           t          |j
                  t          |j
                  ||z  z   k    sJ t          |j
                  t          |j
                  ||z  z   k    sJ t          |j                  t           |z   k    sJ |                     |           |                     |           |                                 |                                 t          j        	                    |j        |j                   |                                 |                                 |j        j        }|j        j        }	|                     ||	           |                                 |                                 t          j        	                    |                                |                                           |                                 |                                 t          j        	                    |                                |                                t          
           d S )Nr   r)   
      ldar   )	r   r   r   r   r   r^   r   r   r   F)
r   r   r   r   r   r^   r   r   r   r&   r+   )r   r	   r
   r   r#   r'   r   r0   r4   r5   r.   rD   rM   r   r-   rd   r   r9   $_generate_asymmetric_distance_matrixrE   _generate_topic_clustersrJ   rK   rP   _generate_stable_topicsrh   )
r!   r   r   r   elda_1elda_mem_unfriendly_1elda_2elda_mem_unfriendly_2clustering_results!mem_unfriendly_clustering_resultss
             r"   test_add_and_reclusterz&TestEnsembleLda.test_add_and_reclusterl  s~     *;%b^	
 
 
 !, *;%b^U	!
 !
 !
  $ < < > >"f&99999$15J5WWWWW 	
""6;0E0JQU"VVV

""6#4#4#6#68M8X8X8Z8Zae"fff 	   ''(=>>>

""6;0E0JQU"VVV6;3v{#3#3n~6U#UUUUU(-..#6K6P2Q2QTbesTs2sssss(,--n1LLLLL!!&)))!!"7888 	33555BBDDD

""-!<	
 	
 	
 	'')))66888#19,A,O,W),,-?Abccc 	&&(((55777

""!,,..	
 	
 	

 	--///<<>>> 	
""6#4#4#6#68M8X8X8Z8Zae"fffffr$   Nc                    ||                                  }t          j        |                                dd d f                   }|j        j        dk    sJ ||dfg         }|d         d         dz
  |d         d         k    sJ d S )Nr   r)   g333333?)r#   r0   argmaxrM   r   r^   )r!   r6   max_idinferreds       r"   r   zTestEnsembleLda.test_inference  s     	#==??D 4??,,QT2330;a???? &!&{1~#hqk!n444444r$   )N)__name__
__module____qualname__r#   r'   r9   r?   rH   rT   rV   rZ   r\   r_   ra   rf   rk   rP   r   r   r   r   r   r   rn   r$   r"   r   r      s^       
 
 

 
 
X X X( ( (

 

 

W W W&	( 	( 	(# # ## # ## # ## # #7 7 7I I I	
 	
 	
$I $I $IL#
 #
 #
J- - - l7 l7 l7\Cg Cg CgJ
5 
5 
5 
5 
5 
5r$   r   __main__z)%(asctime)s : %(levelname)s : %(message)s)formatlevel)__doc__osloggingunittestnumpyr0   copyr   r   gensim.modelsr   r   r   gensim.test.utilsr   r   r	   r
   r   r   r   r   namerD   TestCaser   r   basicConfigWARNmainrn   r$   r"   <module>r      s<    
			              = = = = = = = = = = U U U U U U U U U U U U

	 4*uuU\5 \5 \5 \5 \5h' \5 \5 \5~ z GJRYR^____HMOOOOO r$   