o
    3ήc                     @   sx   d dl Z d dlZd dlZedZed d dlmZ G dd dZG dd deZ	ej
d	ejejfd
d ZdS )    Nnumpyscipy)_pagerank_pythonc                   @   s$  e Zd Zedd Zejdej	e
fdd Zejdej	e
fdd Zdd	 Zd
d Zejdej	e
ejfdd Zejdej	e
ejfdd Zejdej	e
fdd Zejdej	e
fdd Zdd Zejdej	e
ejfdd Zdd Zejdej	e
fdd ZdS )TestPageRankc                 C   sr   t  }g d}|| || _ttt|g d| j_d| _ddddddd| _	ttt|g d| j_
d S )	N)
      )r      )r	   r   )r	   r   )r	      )   r
   )r      )r
   r   )r
   r   )r   r   )gBVr?gnA;L?gGͲ:@?gppR?g0='^?g
HQ?r   r   r	   r   )r   r   r	   r   r
   r   )gB5û?gs?g+K2?gRBU,?g}ڸ0`?g.٢u?)nxDiGraphadd_edges_fromGdictzipsortedpagerankdangling_node_indexdangling_edgesdangling_pagerank)clsr   edges r   \/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/link_analysis/tests/test_pagerank.pysetup_class   s$   
zTestPageRank.setup_classalgc                 C   s   | j }||ddd}|D ]}|| tj|j| ddksJ qdd |D }||dd|d}|D ]}|| tj|j| ddksBJ q0d S )	N?:0yE>alphatol-C6?absc                 S      i | ]}|t   qS r   random.0nr   r   r   
<dictcomp>A       z.TestPageRank.test_pagerank.<locals>.<dictcomp>r!   r"   nstart)r   pytestapproxr   )selfr   r   pr+   r/   r   r   r   test_pagerank:   s   ""zTestPageRank.test_pagerankc                 C   s@   t tj || jdd W d    d S 1 sw   Y  d S Nr   )max_iter)r0   raisesr   PowerIterationFailedConvergencer   )r2   r   r   r   r   test_pagerank_max_iterF   s   "z#TestPageRank.test_pagerank_max_iterc                 C   sB   | j }tj|dd}|D ]}|| tj|j| ddksJ qd S )Nr   r!   r#   r$   )r   r   pagerank_numpyr0   r1   r   )r2   r   r3   r+   r   r   r   test_numpy_pagerankK   s
   "z TestPageRank.test_numpy_pagerankc                 C   s   | j }tj|dt|d}tj|j\}}t|d d df |d d df 	  d d df }t
|| j j D ]\}}|tj|ddksIJ q:d S )Nr   )r!   nodelistr   gHz>r$   )r   r   google_matrixr   nplinalgeigTarraysumr   r   valuesr0   r1   )r2   r   M_evr3   abr   r   r   test_google_matrixQ   s   6zTestPageRank.test_google_matrixc                 C   s`   t d}ddddd}ddddd}||d|d}|D ]}|| tj|| d	d
ks-J qd S )Nr   r   r   r   r   r	   geE}?gJ/1]A?gK/1]A?333333?r!   personalizationr#   r$   r   complete_graphr0   r1   r2   r   r   personalizeanswerr3   r+   r   r   r   test_personalizationY      
 z!TestPageRank.test_personalizationc                 C   s.   t d}ddddd}tjt|||d d S )Nr   r   rL   rO   )r   rQ   r0   r7   ZeroDivisionError)r2   r   r   rS   r   r   r    test_zero_personalization_vectorg   s   
z-TestPageRank.test_zero_personalization_vectorc                 C   s`   t d}ddddd}ddddd}||d|d}|D ]}|| tj|| d	d
ks-J qd S )Nr   r   r   rL   jè'B?ڂDA?rM   rN   r#   r$   rP   rR   r   r   r   &test_one_nonzero_personalization_valuem   rV   z3TestPageRank.test_one_nonzero_personalization_valuec                 C   sZ   t d}ddi}ddddd}||d|d}|D ]}|| tj|| d	d
ks*J qd S )Nr   r	   r   rZ   r[   rL   rM   rN   r#   r$   rP   rR   r   r   r   test_incomplete_personalization{   s   
 z,TestPageRank.test_incomplete_personalizationc                 C   s   | j }| j}t| }tj||d}tj|||d}tt|D ]?}tt|D ]6}|| jkrL|d |v rL|||f t	j
||d  | ddksKJ q)|||f t	j
|||f ddks_J q)q!dS )zd
        Tests that the google_matrix doesn't change except for the dangling
        nodes.
        rW   )rO   danglingr   r#   r$   N)r   r   rD   rE   r   r>   rangelenr   r0   r1   )r2   r   r^   dangling_sumM1M2ijr   r   r   test_dangling_matrix   s   (z!TestPageRank.test_dangling_matrixc                 C   sB   || j | jd}| j D ]}|| tj| j j| ddksJ qd S N)r^   r#   r$   )r   r   r0   r1   r   )r2   r   prr+   r   r   r   test_dangling_pagerank   s   
$z#TestPageRank.test_dangling_pagerankc                 C   sT   t  }t |i ksJ t|i ksJ t |i ksJ t |jdks(J d S )N)r   r   )r   Graphr   r   r;   r>   shaper2   r   r   r   r   
test_empty   s
   zTestPageRank.test_emptyc                 C   sX   t  }|g d ddddd}||}|D ]}|| tj|| ddks)J qd S )	N)r   r   r   r   r	   rn   3r	   ro   gF=?g/ߺ?gv\ቄ?g@?)r   r   r	   rp   r#   r$   )r   
MultiGraphr   r0   r1   )r2   r   r   rT   r3   r+   r   r   r   test_multigraph   s    zTestPageRank.test_multigraphN)__name__
__module____qualname__classmethodr   r0   markparametrizer   r   r   r4   r9   r<   rK   r;   rU   r>   rY   r\   r]   rf   ri   rm   rr   r   r   r   r   r      s.    
'






r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPageRankScipyc                 C   s   | j }tj|ddd}|D ]}|| tj|j| ddksJ qdd |D }tj|dd|d}d	d |D }tj|dd|d
}|D ]}|| tj|j| ddksTJ qBd S )Nr   r   r    r#   r$   c                 S   r&   r   r'   r)   r   r   r   r,      r-   z9TestPageRankScipy.test_scipy_pagerank.<locals>.<dictcomp>)r!   r"   rO   c                 S   r&   r   r'   r)   r   r   r   r,      r-   r.   )r   r   pagerank_scipyr0   r1   r   )r2   r   r3   r+   rS   r/   r   r   r   test_scipy_pagerank   s   ""z%TestPageRankScipy.test_scipy_pagerankc                 C   sB   t tj tj| jdd W d    d S 1 sw   Y  d S r5   )r0   r7   r   r8   rz   r   )r2   r   r   r   test_scipy_pagerank_max_iter   s   "z.TestPageRankScipy.test_scipy_pagerank_max_iterc                 C   sD   t j| j| jd}| jD ]}|| tj| jj| ddksJ qd S rg   )r   rz   r   r   r0   r1   r   )r2   rh   r+   r   r   r   test_dangling_scipy_pagerank   s   
$z.TestPageRankScipy.test_dangling_scipy_pagerankc                 C   s   t  }t |i ksJ d S )N)r   rj   rz   rl   r   r   r   test_empty_scipy   s   z"TestPageRankScipy.test_empty_scipyN)rs   rt   ru   r{   r|   r}   r~   r   r   r   r   ry      s
    ry   pagerank_algc                 C   sL   t t d}tt | |dd W d   dS 1 sw   Y  dS )z\Make sure deprecation warnings are raised.

    To be removed when deprecations expire.
    r   r   r:   N)r   r   
path_graphr0   warnsDeprecationWarning)r   r   r   r   r   test_deprecation_warnings   s   "r   )r(   r0   networkxr   importorskipr?   .networkx.algorithms.link_analysis.pagerank_algr   r   ry   rw   rx   r;   rz   r   r   r   r   r   <module>   s    

 (