
    -i>                        S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJrJr  S S
KJr  S r\R6                  R9                  S\5      S 5       r\R6                  R9                  S\5      S 5       r\R6                  R9                  S\5      S 5       r\R6                  R9                  S\5      S 5       r \R6                  R9                  S\5      S 5       r!S r"\R6                  R9                  SS5      S 5       r#S r$S r%\\R6                  R9                  S\5      \R6                  R9                  SS5      S 5       5       5       r&\\R6                  R9                  S\5      S 5       5       r'S r(\R6                  R9                  SS5      \R6                  R9                  S\5      S 5       5       r)\R6                  R9                  SS5      \R6                  R9                  S\5      S 5       5       r*\R6                  R9                  S\5      S 5       r+\R6                  R9                  S\5      S 5       r,\R6                  R9                  S\5      S 5       r-\R6                  R9                  S\5      S  5       r.S! r/S" r0\R6                  R9                  S#/ S$Q5      \R6                  R9                  S\5      S% 5       5       r1\R6                  R9                  S\5      S& 5       r2\R6                  R9                  S'S(5      S) 5       r3\R6                  R9                  S'S(5      S* 5       r4g)+    N)StringIO)assert_array_equal)
block_diag)psi)LatentDirichletAllocation)_dirichlet_expectation_1d_dirichlet_expectation_2d)NotFittedError)assert_allcloseassert_almost_equalassert_array_almost_equal!if_safe_multiprocessing_with_blas)CSR_CONTAINERSc                 l    Sn[         R                  " SU[        S9nU/U-  n[        U6 nU " U5      nX4$ )N   )r   r   )dtype)npfullintr   )csr_containern_componentsblockblocksXs        ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_online_lda.py_build_sparse_arrayr      sD     LGGFL4EW|#FFAaA    r   c                     [        U 5      u  pSU-  n[        UUUSS9n[        USS9nUR                  U5      nUR                  U5      n[        Xg5        g )Ng      ?r   )r   doc_topic_priortopic_word_priorrandom_stater   r!   )r   r   fit_transformr   )r   r   r   priorlda_1lda_2topic_distr_1topic_distr_2s           r   test_lda_default_prior_paramsr)   $   sf     *-8OL,E%!	E &<aPE''*M''*M5r   c                 <   [         R                  R                  S5      n[        U 5      u  p#[	        USSUS9nUR                  U5        / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )Nr      batch)r   evaluate_everylearning_methodr!   )r   r+      )r         )         r   randomRandomStater   r   fitcomponents_setargsorttuplesortedr   rngr   r   ldacorrect_idx_grps	componenttop_idxs           r   test_lda_fit_batchrG   6   s     ))


"C)-8OL
#!	C GGAJ8__	i'')"#.tt45VG_%)9999 %r   c                 >   [         R                  R                  S5      n[        U 5      u  p#[	        USSSUS9nUR                  U5        / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )	Nr         $@r+   online)r   learning_offsetr-   r.   r!   r/   r6   r7   r8   rA   s           r   test_lda_fit_onlinerL   J   s     ))


"C)-8OL
#! C GGAJ8__	i'')"#.tt45VG_%)9999 %r   c                 `   [         R                  R                  S5      n[        U 5      u  p#[	        USSUS9n[        S5       H  nUR                  U5        M     / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )	Nr   rI   d   r   rK   total_samplesr!   r   r/   r6   r7   r   r9   r:   r   r   rangepartial_fitr<   r=   r>   r?   r@   	r   rB   r   r   rC   irD   crF   s	            r   test_lda_partial_fitrW   _   s     ))


"C)-8OL
#!	C 1X  9__aiik"#&tt,-VG_%)9999 r   c                 V   [         R                  R                  S5      n[        U 5      u  p#[	        USUS9nUR                  UR                  5       5        / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )Nr   r,   r   r.   r!   r/   r6   r7   )r   r9   r:   r   r   r;   toarrayr<   r=   r>   r?   r@   rA   s           r   test_lda_dense_inputr[   t   s     ))


"C)-8OL
#!7C GGAIIK8__	i'')"#.tt45VG_%)9999 %r   c                     [         R                  R                  S5      n U R                  SSS9nSn[	        X S9nUR                  U5      nUS:  R                  5       (       d   e[        [         R                  " USS	9[         R                  " UR                  S   5      5        UR                  US
S9n[        XEUR                  SS	9S S 2[         R                  4   -  5        g )Nr   r2      
   sizer   r"   g        r+   axisF)	normalize)r   r9   r:   randintr   r#   anyr   sumonesshape	transformnewaxis)rB   r   r   rC   X_transX_trans_unnormalizeds         r   test_lda_transformrn      s     ))


"CAH%AL
#
PC"GcM    bffW15rwww}}Q?O7PQ==e=<(<(@(@a(@(HBJJ(WWr   method)rJ   r,   c                     [         R                  R                  S5      nUR                  SSS9n[	        SXS9nUR                  U5      nUR                  U5      n[        XES5        g )Nr   r_   )2   r^   r`   r2   rY   r1   )r   r9   r:   re   r   r#   rj   r   )ro   rB   r   rC   X_fitrl   s         r   test_lda_fit_transformrs      sc     ))


"CBX&A
#C a EmmAGea0r   c                      [         R                  " SS5      n [        5       nSn[        R                  " [
        US9   UR                  U 5        S S S 5        g ! , (       d  f       g = f)N)r2   r_         z^Negative values in data passedmatch)r   r   r   pytestraises
ValueErrorr;   )r   rC   regexs      r   test_lda_negative_inputr|      sD    
A
#
%C.E	z	/
 
0	/	/s   A
A&c                     [         R                  R                  S5      n U R                  SSS9n[	        5       nSn[
        R                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r1   r]   r`   z}This LatentDirichletAllocation instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.rv   )	r   r9   r:   re   r   rx   ry   r
   
perplexity)rB   r   rC   r{   s       r   test_lda_no_component_errorr      sb    
))


"CAH%A
#
%C	 

 
~U	3q 
4	3	3s   A00
A>c                 >   [        U5      u  p#[        R                  R                  S5      n[	        USU SUS9nUR                  U5        / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )Nr   r0   r+   )r   n_jobsr.   r-   r!   r/   r6   r7   )r   r   r9   r:   r   r;   r<   r=   r>   r?   r@   )	ro   r   r   r   rB   rC   rD   rV   rF   s	            r   test_lda_multi_jobsr      s     *-8OL
))


"C
#!C GGAJ8__aiik"#&tt,-VG_%)9999 r   c                 b   [         R                  R                  S5      n[        U 5      u  p#[	        USSSUS9n[        S5       H  nUR                  U5        M     / SQnUR                   H?  n[        UR                  5       SS  S S S2   5      n[        [        U5      5      U;   a  M?   e   g )	Nr   r0         @   )r   r   rK   rP   r!   r/   r6   r7   rQ   rT   s	            r   test_lda_partial_fit_multi_jobsr      s     ))


"C)-8OL
#!C 1X  9__aiik"#&tt,-VG_%)9999 r   c                  f   [         R                  R                  S5      n U R                  SS5      nU R                  SS5      n[         R                  R                  SUS4S9n[	        USSU S	9nUR                  U5        U R                  SUS
-   U4S9n[        R                  " [        SS9   UR                  X55        S S S 5        U R                  SX!S
-   4S9n[        R                  " [        SS9   UR                  X65        S S S 5        g ! , (       d  f       NV= f! , (       d  f       g = f)Nr   r   r3   r_   r1   r`   r   r^   rO   r+   zNumber of samplesrv   zNumber of topics)
r   r9   r:   re   r   r;   rx   ry   rz   _perplexity_precomp_distr)rB   r   	n_samplesr   rC   invalid_n_samplesinvalid_n_componentss          r   test_lda_preplexity_mismatchr      s   
))


"C;;q!$LAr"I
		!9b/2A
#!	C GGAJAY]L,IJ	z)=	>%%a; 
? ;;q	!;K/L;M	z)<	=%%a> 
>	=	 
?	> 
>	=s   /D6D"
D"
D0c                 2   [        U5      u  p#[        USU SSS9n[        USU SSS9nUR                  U5        UR                  USS9nUR                  U5        UR                  USS9nXg:  d   eUR                  USS9nUR                  USS9n	X:  d   eg )	Nr+   rN   r   r   max_iterr.   rP   r!   r_   Fsub_samplingT)r   r   r;   r~   )
ro   r   r   r   r%   r&   perp_1perp_2perp_1_subsamplingperp_2_subsamplings
             r   test_lda_perplexityr      s    
 *-8OL%!E &!E 
IIaLae4F	IIaLae4F))!$)?))!$)?333r   c                     [        U5      u  p#[        USU SSS9n[        USU SSS9nUR                  U5        UR                  U5      nUR                  U5        UR                  U5      nXv:  d   eg )Nr+   rN   r   r   r_   )r   r   r#   score)ro   r   r   r   r%   r&   score_1score_2s           r   test_lda_scorer     s    
 *-8OL%!E &!E 
kk!nG	kk!nGr   c                     [        U 5      u  p[        USSSSS9nUR                  U5        UR                  U5      nUR                  UR	                  5       5      n[        XE5        g )Nr+   r,   rN   r   r   )r   r   r;   r~   rZ   r   )r   r   r   rC   r   r   s         r   test_perplexity_input_formatr   :  s`     *-8OL
#!C GGAJ^^AF^^AIIK(F'r   c                 "   [        U 5      u  p[        USSS9nUR                  U5        UR                  USS9nUR	                  U5      n[
        R                  " SU[
        R                  " UR                  5      -  -  5      n[        XF5        g )Nr_   r   )r   r   r!   Fr   ru   )
r   r   r;   r~   r   r   exprg   datar   )r   r   r   rC   perplexity_1r   perplexity_2s          r   test_lda_score_perplexityr   L  sy     *-8OL
#!BQC GGAJ>>!%>8LIIaLE66$%"&&."89:L3r   c                     [        U 5      u  p[        USSSSS9nUR                  U5        UR                  nUR	                  U5      n[        XE5        g )Nr+   r,   r   )r   r   r.   r!   r-   )r   r   r;   bound_r~   r   )r   r   r   rC   perplexity1perplexity2s         r   test_lda_fit_perplexityr   [  sY     *-8OL
#!C GGAJ **K ..#K1r   c                    [         R                  " S5      nX" U5      4 Hi  n[        SS9R                  U5      n[	        UR
                  R                  SS9[         R                  " UR
                  R                  S   5      5        Mk     g)z+Test LDA on empty document (all-zero rows).)r2   r1   i  )r   r   rb   r+   N)	r   zerosr   r;   r   r<   rg   rh   ri   )r   Zr   rC   s       r   test_lda_empty_docsr   r  sr     	Aq!"'599!<OOQ'1F1Fq1I)J	
 #r   c                     [         R                  " SSS5      n [         R                  " U 5      n[        U SU5        [	        U[         R
                  " [        U 5      [        [         R                  " U 5      5      -
  5      SS9  U R                  SS5      n [	        [        U 5      [        U 5      [        [         R                  " U SS	9S
S
2[         R                  4   5      -
  SSS9  g
)z9Test Cython version of Dirichlet expectation calculation.ir_   i'  r   gҶOɃ;)atolrN   r+   rb   Ngdy=gA:)>)rtolr   )r   logspace
empty_liker   r   r   r   rg   reshaper	   rk   )xexpectations     r   test_dirichlet_expectationr   }  s    
D"e$A--"KaK0KARVVAY(?!@uM			#sA!!$ARVVAA&q"**}566	r   c           	      x   [        U5      u  pV[        USSU USS9n[        5       n[        R                  Usn	[        l         UR                  U5        U	[        l        UR                  5       R                  S5      n
UR                  5       R                  S5      nX*:X  d   eX;:X  d   eg ! U	[        l        f = f)Nr   r,   r   )r   r   r.   verboser-   r!   
r~   )r   r   r   sysstdoutr;   getvaluecount)r   r-   expected_linesexpected_perplexitiesr   r   r   rC   outold_outn_linesn_perplexitys               r   check_verbosityr     s     *-8OL
#!%C *C**cGSZ

lln""4(G<<>''5L$$$ 000 
s   B, ,B9z;verbose,evaluate_every,expected_lines,expected_perplexities))Fr+   r   r   )Fr   r   r   )Tr   r   r   )Tr+   r   r   )Tr0   r   r+   c                     [        XX#U5        g )N)r   )r   r-   r   r   r   s        r   test_verbosityr     s     r   c                     [        U 5      u  p[        US9R                  U5      nUR                  5       n[	        [        U5       Vs/ s H  nSU 3PM
     snU5        gs  snf )z6Check feature names out for LatentDirichletAllocation.)r   latentdirichletallocationN)r   r   r;   get_feature_names_outr   rR   )r   r   r   rC   namesrU   s         r   test_lda_feature_names_outr     sa     *-8OL
#
>
B
B1
EC%%'E272EF2EQ$QC	(2EFFs   A r.   )r,   rJ   c                 $   [         R                  R                  S5      nUR                  SS9R	                  USS9n[        SSU S9nUR                  U5        UR                  R                  U:X  d   eUR                  R                  U:X  d   eg)	z2Check data type preservation of fitted attributes.r   r]   r`   F)copyr2   r   r!   r.   N)
r   r9   r:   uniformastyper   r;   r<   r   exp_dirichlet_component_)r.   global_dtyperB   r   rC   s        r   test_lda_dtype_matchr     s     ))


"C")),U)CA
#QC GGAJ??  L000''--===r   c                    [         R                  R                  U5      nUR                  SS9nUR	                  [         R
                  5      n[        SXS9R                  U5      n[        SXS9R                  U5      n[        UR                  UR                  5        [        UR                  U5      UR                  U5      5        g)z>Check numerical consistency between np.float32 and np.float64.r]   r`   r2   r   N)r   r9   r:   r   r   float32r   r;   r   r<   rj   )r.   global_random_seedrB   X64X32lda_64lda_32s          r   test_lda_numerical_consistencyr     s     ))

 2
3C
++8+
$C
**RZZ
 C&%7	c#h  '%7	c#h  F&&(:(:;F$$S)6+;+;C+@Ar   )5r   ior   numpyr   rx   numpy.testingr   scipy.linalgr   scipy.specialr   sklearn.decompositionr   &sklearn.decomposition._online_lda_fastr   r	   sklearn.exceptionsr
   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   markparametrizer)   rG   rL   rW   r[   rn   rs   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s{   
    , #  ; .  / .96 :6" .9: ::& .9: ::( .9: ::( .9: :: " #67
1 8
1 #.9#67: 8 : #:& #.9: : #:(?. #67.94 : 84< #67.9 : 84 .9( :(" .94 :4 .92 :2, .9
 :
 12 A	 .9 :	 .9 : *,?@
> A
> *,?@B ABr   