
    c</                     H   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	 d dl
mZ d dlmZ d Zd Zd ZeZeZ G d	 d
ej                  Zd Z G d dej                  Z G d dej                  Zedk    r( e j        de j                    ej                     dS dS )    N)assert_array_equal)sparse)
csc_matrix)psic                     t          j        |           }t          j        t          j        t          j        | |z
                                } | |z  } | S )aQ  Log of sum of exponentials.

    Parameters
    ----------
    x : numpy.ndarray
        Input 2d matrix.

    Returns
    -------
    float
        log of sum of exponentials of elements in `x`.

    Warnings
    --------
    By performance reasons, doesn't support NaNs or 1d, 3d, etc arrays like :func:`scipy.special.logsumexp`.

    )npmaxlogsumexp)xx_maxs     9lib/python3.11/site-packages/gensim/test/test_matutils.py	logsumexpr      sF    $ F1IIE
rvbfQY''(())AJAH    c                 T    t          j        t          j        | |z
                      S )zMean absolute difference between two arrays.

    Parameters
    ----------
    a : numpy.ndarray
        Input 1d array.
    b : numpy.ndarray
        Input 1d array.

    Returns
    -------
    float
        mean(abs(a - b)).

    )r   meanabs)abs     r   mean_absolute_differencer   -   s       726!a%==!!!r   c                 Z   t          | j                  dk    r2t          |           t          t          j        |                     z
  }nFt          |           t          t          j        | d                    ddt          j        f         z
  }|                    | j        d          S )aE  For a vector :math:`\theta \sim Dir(\alpha)`, compute :math:`E[log \theta]`.

    Parameters
    ----------
    alpha : numpy.ndarray
        Dirichlet parameter 2d matrix or 1d vector, if 2d - each row is treated as a separate parameter vector.

    Returns
    -------
    numpy.ndarray:
        :math:`E[log \theta]`

       NF)copy)lenshaper   r   r   newaxisastypedtype)alpharesults     r   dirichlet_expectationr"   @   s     5;1 CUc"&--000Uc"&"2"233AAArzMBB==5=111r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestLdaModelInnerc                 h    t           j                                        | _        d| _        d| _        d S )Nd   )r   randomRandomStaterandom_statenum_runs
num_topicsselfs    r   setUpzTestLdaModelInner.setUpZ   s*    I1133r   c                    | j         }t          j        t          j        t          j        fD ]}t          | j                  D ]}|                    dd| j        df          }t          |          }t          j	        |          }d                    |          }|                     t          j        ||          |           d S )Nii  r   sizezlogsumexp failed for dtype={})r)   r   float16float32float64ranger*   uniformr+   r   matutilsformat
assertTrueallclose)r-   rsr   iinput
known_goodtest_valuesmsgs           r   test_log_sum_expz"TestLdaModelInner.test_log_sum_exp_   s    j"*bj9 	K 	KE4=)) K K

5$doq5I
JJ&u--
&0775<<UCCJ D DcJJJJK	K 	Kr   c                    | j         }t          j        t          j        t          j        fD ]}t          | j                  D ]}|                    dd| j        f          }|                    dd| j        f          }t          ||          }t          j	        ||          }d                    |          }|                     t          j        ||          |           d S )Ni'  r0   z,mean_absolute_difference failed for dtype={})r)   r   r2   r3   r4   r5   r*   r6   r+   r   r7   r8   r9   r:   )	r-   r;   r   r<   input1input2r>   r?   r@   s	            r   test_mean_absolute_differencez/TestLdaModelInner.test_mean_absolute_differencem   s    j"*bj9 		K 		KE4=)) K KFE8JKKFE8JKK5ffEE
&?OODKKERRJ D DcJJJJK		K 		Kr   c                    | j         }t          j        t          j        t          j        fD ]}t          | j                  D ]}|                    dd| j        f          }t          |          }t          j	        |          }d                    |          }|                     t          j        ||          |           |                    ddd| j        f          }t          |          }t          j	        |          }d                    |          }|                     t          j        ||          |           d S )Ng{Gz?rC   r0   z,dirichlet_expectation_1d failed for dtype={}r   z,dirichlet_expectation_2d failed for dtype={})r)   r   r2   r3   r4   r5   r*   r6   r+   r"   r7   r8   r9   r:   )	r-   r;   r   r<   input_1dr>   r?   r@   input_2ds	            r   test_dirichlet_expectationz,TestLdaModelInner.test_dirichlet_expectation|   s4   j"*bj9 	K 	KE4=)) K K::c57I:JJ28<<
&<XFFDKKERRJ D DcJJJ ::c54?7L:MM28<<
&<XFFDKKERRJ D DcJJJJK	K 	Kr   N)__name__
__module____qualname__r.   rA   rF   rJ    r   r   r$   r$   Y   s[          
K K KK K KK K K K Kr   r$   c                    |                      t                    } t          j        |           rS|                     |           }dt          j        |                                          z  }|                     |          S t          j        |           s0t          j        | dz            }| t          j        |          z  } | S d S )N      ?   )r   floatr   issparsemultiplyr   sqrtr   )vecvec_sum_of_squaresunitsum_vec_squareds       r   manual_unitvecrZ      s    
**U

Cs  \\#..BG.2244555||D!!!_S!! &**rw'''
 r   c                   h    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S )UnitvecTestCasec                    t          j        t          j        g dg dg                                        t          j                  }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     |                     |j        |j                   d S N)r   r   r   r      )r   r      r_   r   gMbP?)atol)r   
csr_matrixr   asarrayr   r3   r7   unitvecrZ   r9   r:   dataassertEqualr   r-   input_vectorunit_vectorman_unit_vectors       r   test_sparse_npfloat32z%UnitvecTestCase.test_sparse_npfloat32       (___ooo4V)W)WXX__`b`jkk&|44(66K$4o6JQUVVVWWW+[->?????r   c                    t          j        t          j        g dg dg                                        t          j                  }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     |                     |j        |j                   d S r^   )r   rb   r   rc   r   r4   r7   rd   rZ   r9   r:   re   rf   r   rg   s       r   test_sparse_npfloat64z%UnitvecTestCase.test_sparse_npfloat64   rl   r   c                    t          j        t          j        g dg dg                                        t          j                  }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     | 	                    t          j        |j        t          j                             d S r^   )r   rb   r   rc   r   int32r7   rd   rZ   r9   r:   re   
issubdtyper   floatingrg   s       r   test_sparse_npint32z#UnitvecTestCase.test_sparse_npint32       (___ooo4V)W)WXX__`b`hii&|44(66K$4o6JQUVVVWWWk&7EEFFFFFr   c                    t          j        t          j        g dg dg                                        t          j                  }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     | 	                    t          j        |j        t          j                             d S r^   )r   rb   r   rc   r   int64r7   rd   rZ   r9   r:   re   rq   r   rr   rg   s       r   test_sparse_npint64z#UnitvecTestCase.test_sparse_npint64   rt   r   c                 V   t           j                            d                              t           j                  }t          j        |          }t          |          }|                     t          j	        ||                     | 
                    |j        |j                   d S N)   r0   )r   r'   r6   r   r3   r7   rd   rZ   r9   r:   rf   r   rg   s       r   test_dense_npfloat32z$UnitvecTestCase.test_dense_npfloat32       y((d(33::2:FF&|44(66KAABBB+[->?????r   c                 V   t           j                            d                              t           j                  }t          j        |          }t          |          }|                     t          j	        ||                     | 
                    |j        |j                   d S ry   )r   r'   r6   r   r4   r7   rd   rZ   r9   r:   rf   r   rg   s       r   test_dense_npfloat64z$UnitvecTestCase.test_dense_npfloat64   r|   r   c                    t           j                            dd                              t           j                  }t          j        |          }t          |          }|                     t          j	        ||                     |                     t          j
        |j        t           j                             d S N
   rz   r0   r   r'   randintr   rp   r7   rd   rZ   r9   r:   rq   r   rr   rg   s       r   test_dense_npint32z"UnitvecTestCase.test_dense_npint32       y((!(44;;BHEE&|44(66KAABBBk&7EEFFFFFr   c                    t           j                            dd                              t           j                  }t          j        |          }t          |          }|                     t          j	        ||                     |                     t          j
        |j        t           j                             d S r   r   rg   s       r   test_dense_npint64z"UnitvecTestCase.test_dense_npint64   r   r   c                 |   t          j        t          j        g dg dg                                        t
                    }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     |                     |j        |j                   d S r^   )r   rb   r   rc   r   rR   r7   rd   rZ   r9   r:   re   rf   r   rg   s       r   test_sparse_python_floatz(UnitvecTestCase.test_sparse_python_float   s    (___ooo4V)W)WXX__`eff&|44(66K$4o6JQUVVVWWW+[->?????r   c                    t          j        t          j        g dg dg                                        t
                    }t          j        |          }t          |          }| 	                    t          j
        |j        |j        d                     | 	                    t          j        |j        t          j                             d S r^   )r   rb   r   rc   r   intr7   rd   rZ   r9   r:   re   rq   r   rr   rg   s       r   test_sparse_python_intz&UnitvecTestCase.test_sparse_python_int   s    (___ooo4V)W)WXX__`cdd&|44(66K$4o6JQUVVVWWWk&7EEFFFFFr   c                 L   t           j                            d                              t                    }t          j        |          }t          |          }|                     t          j	        ||                     | 
                    |j        |j                   d S ry   )r   r'   r6   r   rR   r7   rd   rZ   r9   r:   rf   r   rg   s       r   test_dense_python_floatz'UnitvecTestCase.test_dense_python_float   s    y((d(33::5AA&|44(66KAABBB+[->?????r   c                 |   t           j                            dd                              t                    }t          j        |          }t          |          }|                     t          j	        ||                     |                     t          j
        |j        t           j                             d S r   )r   r'   r   r   r   r7   rd   rZ   r9   r:   rq   r   rr   rg   s       r   test_dense_python_intz%UnitvecTestCase.test_dense_python_int   s    y((!(44;;C@@&|44(66KAABBBk&7EEFFFFFr   c                 P   t          j        g gt          j                  }t	          j        |d          }|                     t          |t                               |d         }|                     t          |t                               | 
                    |d           d S N)r   Treturn_normr   rP   )r   rb   r   rp   r7   rd   r9   
isinstancetuplerR   rf   r-   rh   return_valuenorms       r   )test_return_norm_zero_vector_scipy_sparsez9UnitvecTestCase.test_return_norm_zero_vector_scipy_sparse   s    ("RX>>>'$GGG
<77888A
4//000s#####r   c                 N   t          j        g t           j                  }t          j        |d          }|                     t          |t                               |d         }|                     t          |t                               | 	                    |d           d S r   )
r   arrayrp   r7   rd   r9   r   r   rR   rf   r   s       r   "test_return_norm_zero_vector_numpyz2UnitvecTestCase.test_return_norm_zero_vector_numpy   s    x"(333'$GGG
<77888A
4//000s#####r   c                    g }t          j        |d          }|                     t          |t                               |d         }|                     t          |t
                               |                     |d           d S )NTr   r   rP   )r7   rd   r9   r   r   rR   rf   r   s       r   *test_return_norm_zero_vector_gensim_sparsez:UnitvecTestCase.test_return_norm_zero_vector_gensim_sparse  sy    '$GGG
<77888A
4//000s#####r   N)rK   rL   rM   rk   rn   rs   rw   r{   r~   r   r   r   r   r   r   r   r   r   rN   r   r   r\   r\      s       @ @ @@ @ @G G GG G G@ @ @@ @ @G G GG G G@ @ @G G G@ @ @G G G$ $ $$ $ $$ $ $ $ $r   r\   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSparse2Corpusc                     t          j        g dg dg dg          | _        t          j        t          | j                            | _        d S )N)r   rQ   r_   )r`   rz      )      	   )r   r   
orig_arrayr7   Sparse2Corpusr   s2cr,   s    r   r.   zTestSparse2Corpus.setUp  sF    (IIIyyy)))#DEE)*T_*E*EFFr   c                    t          | j        d d         j                                        | j        d d d df                    t          | j        dd         j                                        | j        d d ddf                    d S )NrQ   r   r_   r   r   r   toarrayr   r,   s    r   test_getitem_slicez$TestSparse2Corpus.test_getitem_slice  s    48BQB<.6688$/!!!RaR%:PQQQ48AaC=/77994?111aPQc6;RSSSSSr   c                 L    |                      | j        d         g d           d S )Nr   ))r   rQ   )r   rz   )rQ   r   )assertListEqualr   r,   s    r   test_getitem_indexz$TestSparse2Corpus.test_getitem_index  s+    TXa[*B*B*BCCCCCr   c                    t          | j        ddg         j                                        | j        d d ddgf                    t          | j        dg         j                                        | j        d d dgf                    d S Nr   rQ   r   r,   s    r   test_getitem_list_of_indicesz.TestSparse2Corpus.test_getitem_list_of_indices  s    HaV#++--tqqq1a&y/I	
 	
 	
 	48QC=/77994?111qc6;RSSSSSr   c                 ^   t          | j        t          j        ddg                   j                                        | j        d d ddgf                    t          | j        t          j        dg                   j                                        | j        d d dgf                    d S r   )r   r   r   r   r   r   r   r,   s    r   test_getitem_ndarrayz&TestSparse2Corpus.test_getitem_ndarray!  s    HRXq!f%%&-5577QPQF9S	
 	
 	
 	HRXqc]]#*2244doaaa!f6M	
 	
 	
 	
 	
r   c                 H   t          | j        t          dd                   j                                        | j        d d ddgf                    t          | j        t          dd                   j                                        | j        d d dgf                    d S )Nr   r_   rQ   )r   r   r5   r   r   r   r,   s    r   test_getitem_rangez$TestSparse2Corpus.test_getitem_range)  s    HU1a[[!(0022DOAAA1vI4N	
 	
 	
 	HU1a[[!(0022DOAAAsF4K	
 	
 	
 	
 	
r   c                 t    t          | j        d         j                                        | j                   d S )N.r   r,   s    r   test_getitem_ellipsisz'TestSparse2Corpus.test_getitem_ellipsis1  s/    48C=/77994?KKKKKr   N)
rK   rL   rM   r.   r   r   r   r   r   r   rN   r   r   r   r     s        G G GT T TD D DT T T
 
 

 
 
L L L L Lr   r   __main__z)%(asctime)s : %(levelname)s : %(message)s)r8   level)loggingunittestnumpyr   numpy.testingr   scipyr   scipy.sparser   scipy.specialr   gensim.matutilsr7   r   r   r"   dirichlet_expectation_1ddirichlet_expectation_2dTestCaser$   rZ   r\   r   rK   basicConfigDEBUGmainrN   r   r   <module>r      s         , , , , , ,       # # # # # #       " " " " " "
  2" " "&2 2 2* 1 0 7K 7K 7K 7K 7K) 7K 7K 7Kt
 
 
l$ l$ l$ l$ l$h' l$ l$ l$^#L #L #L #L #L) #L #L #LL z GJRYR_````HMOOOOO r   