o
    3ήcz9                     @   sL   d dl Z d dlZd dlmZ d dlmZmZ G dd dZG dd dZ	dS )    N)	bipartite)edges_equalnodes_equalc                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestBipartiteProjectc                 C   s   t d}t|ddg}tt|ddgsJ tt| dgs$J t|ddg}tt|ddgs7J tt| dgsCJ d S )N         r   r   r      r   r
   )nx
path_graphr   projected_graphr   listr   edgesselfGP r   W/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/bipartite/tests/test_project.pytest_path_projected_graph	   s   
z.TestBipartiteProject.test_path_projected_graphc                 C   s   t d}|jddd |jddd t|ddg}tt|ddgs&J tt| dgs2J |j	d d	 |j	d d	 ksBJ t|d
dg}tt|d
dgsUJ tt| dgsaJ |j	d d	 |j	d d	 ksqJ d S )Nr   r   one)namer
   twor   r	   r   r   r   )
r   r   add_noder   r   r   r   r   r   nodesr   r   r   r   $test_path_projected_properties_graph   s   
 $z9TestBipartiteProject.test_path_projected_properties_graphc                 C   s   t d}t|ddg}tt|ddgsJ tt| dgs$J d|d d d< t|ddg}tt|ddgs?J tt| dgsKJ d|d d d< d S 	Nr   r   r   r	   weightr   r
   r   )r   r   r   &collaboration_weighted_projected_graphr   r   r   r   r   r   r   r   'test_path_collaboration_projected_graph   s   
z<TestBipartiteProject.test_path_collaboration_projected_graphc                 C      t  }t |td t|ddg}tt|ddgsJ tt|	 dgs+J d|d d d< t|ddg}tt|ddgsFJ tt|	 dgsRJ d|d d d< d S r   )
r   DiGraphadd_pathranger   r    r   r   r   r   r   r   r   r   0test_directed_path_collaboration_projected_graph*      zETestBipartiteProject.test_directed_path_collaboration_projected_graphc                 C   s   t d}tt j t|g d W d    n1 sw   Y  t|ddg}tt|ddgs6J t	t|
 dgsBJ d|d d d< t|ddg}tt|ddgs]J t	t|
 d	gsiJ d|d d d< d S )
Nr   )r   r
   r   r   r   r   r	   r   r   r
   r   )r   r   pytestraisesNetworkXAlgorithmErrorr   weighted_projected_graphr   r   r   r   r   r   r   r   "test_path_weighted_projected_graph6   s   
z7TestBipartiteProject.test_path_weighted_projected_graphc                 C   r"   r   )
r   r#   r$   r%   r   r+   r   r   r   r   r   r   r   r   +test_path_weighted_projected_directed_graphE   r'   z@TestBipartiteProject.test_path_weighted_projected_directed_graphc                 C   s   t d}t|g d}tt|g dsJ tt| g ds%J t|g d}tt|g ds8J tt| g dsEJ t|dg}tt|dgsVJ tt| g saJ d S )Nr   )r   r
   r   ))r   r
   r	   )r
   r   r   )	r   
star_graphr   r   r   r   r   r   r+   r   r   r   r   test_star_projected_graphQ   s   
z.TestBipartiteProject.test_star_projected_graphc                 C   s   t  }|dd |dd |dd |dd t|d}tt| dgs.J t|d}tt| dgs@J tj|ddd}tt| ddgsUJ d S )	Nar   br
   ab)r0   r1   T
multigraph)	r   Graphadd_edger   r   r   r   r   r+   r   r   r   r   test_project_multigraph^   s   z,TestBipartiteProject.test_project_multigraphc                 C   s   t  }|dd |dd |dd |dd |dd |dd |dd t|d}|d d d	 dks@J |d d d	 dksLJ d S )
Nr0   r   r1   r
   cr   r   abcr   )r   r5   r6   r   r    r   r   r   r   test_project_collaborationk   s   z/TestBipartiteProject.test_project_collaborationc                 C   s  t  }|dd |dd |dd |dd t|d}tt| dgs.J t|d}tt| dgs@J |d d d dksLJ tj|ddd	}tt| dgs`J t  }|dd |dd |dd |dd t|d}tt| dgsJ t|d}tt| dgsJ |d d d dksJ tj|ddd	}tt| ddgsJ d S )
NAr   Br
   AB)r;   r<   r   Tr3   )	r   r#   r6   r   r   r   r   r   r+   r   r   r   r   test_directed_projectionx   s0   z-TestBipartiteProject.test_directed_projectionN)__name__
__module____qualname__r   r   r!   r&   r,   r-   r/   r7   r:   r>   r   r   r   r   r      s    	r   c                   @   sP   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )TestBipartiteWeightedProjectionc                 C   sL  t  | _| jdd | jdd | jdd | jdd | jdd | jdd | jdd | jdd | jd	d | jd
d | jd
d | jd
d | jdd t  | _| jdd | jdd | jdd | jdd | jdd | jdd | jdd | jd	d | jd
d d S )Nr;   r   r
   r<   r   r      CDE   F)r   r5   r   r6   N)clsr   r   r   setup_class   s0   

z+TestBipartiteWeightedProjection.setup_classc                 C      g d}t  }|| t| jd}tt| | s!J t| D ]\}}|| | d || | d ks=J q'g d}t  }|| t| j	d}tt| | s_J t| D ]\}}|| | d || | d ks{J qed S )N))r;   r<   r
   r;   rD   r   r<   rD   r   r<   rE   r   r<   rF   r
   rF   rH   r   ABCDEFr   ))r;   r<   r   )r;   rF   r   rM   )r;   rE   r   )r<   rF   r   rN   rO   )rD   rE   r   ABCDE
r   r5   add_weighted_edges_fromr   r+   r   r   r   r   rI   r   r   Panswerr   uvr   r   r   test_project_weighted_shared      
&

&z<TestBipartiteWeightedProjection.test_project_weighted_sharedc                 C   rL   )N))r;   r<   g      ?r;   rD         ?)r<   rD   r]   rO   rP   rQ   rR   r   ))r;   r<   gUUUUUU?)r;   rF   r]   r;   rD   UUUUUU?r;   rE   r_   )r<   rF   r]   r<   rD   r_   r<   rE   r_   rD   rE   r_   rS   )
r   r5   rU   r   r    r   r   r   r   rI   rV   r   r   r   test_project_weighted_newman   r[   z<TestBipartiteWeightedProjection.test_project_weighted_newmanc                 C     g d}t  }|| tj| jddd}tt| | s#J t| D ]\}}|| | d || | d ks?J q)g d}t  }|| tj| j	ddd}tt| | scJ t| D ]\}}|| | d || | d ksJ qid S )N))r;   r<   r_   )r;   rD   UUUUUU?)r<   rD   rf   )r<   rE   rf   r<   rF   r_   )rF   rH   rf   rR   T)ratior   )r;   r<         ?r;   rF   r_   r^   r`   rg   ra   rb   rc   rS   rT   rV   r   r   r   test_project_weighted_ratio      
&

&z;TestBipartiteWeightedProjection.test_project_weighted_ratioc                 C   re   )N)ri   r;   rD   rj   r<   rD   rj   r<   rE   rj   )r<   rF   gUUUUUU?)rF   rH   rj   rR   F)jaccardr   )ri   )r;   rF   rj   rn   )r;   rE   rj   )r<   rF   rj   ro   rp   rD   rE   rj   rS   
r   r5   rU   r    overlap_weighted_projected_graphr   r   r   r   rI   rV   r   r   r   test_project_weighted_overlap  rm   z=TestBipartiteWeightedProjection.test_project_weighted_overlapc                 C   s   g d}t  }|| t| jd}tt| | s!J t| D ]\}}|| | d || | d ks=J q'g d}t  }|| t| j	d}tt| | s_J | D ]\}}|| | d || | d ksyJ qcd S )N))r;   r<   g?r\   )r<   rD   皙?)r<   rE   rv   rg   )rF   rH   r_   rR   r   )ri   rk   r^   r`   rg   ra   rb   rr   rS   rs   rV   r   r   r   test_project_weighted_jaccard9  s   
&

&z=TestBipartiteWeightedProjection.test_project_weighted_jaccardc                 C   sB  dd }t d}tj|g d|d}tt|g dsJ ttt|jdddd	d
difd	dd
difgs9J t|g d}tt|g dsLJ ttt|jdddd	d
difd	dd
difgsgJ t  }t 	|t
d t|g d}tt|g dsJ tt|jdddd	d
difd	dd
difgsJ d S )Nc                 S   s   t t| | t| | @ S N)lenset)r   rX   rY   r   r   r   shared[  s   z\TestBipartiteWeightedProjection.test_generic_weighted_projected_graph_simple.<locals>.sharedrC   )r   r
   r   weight_functionTdatar   r
   r   r   r   )r   r   r    generic_weighted_projected_graphr   r   r   r   r#   r$   r%   )r   r{   r<   r   r   r   r   ,test_generic_weighted_projected_graph_simpleZ  s.   

(zLTestBipartiteWeightedProjection.test_generic_weighted_projected_graph_simplec                 C   s   dd }ddd}t jdd}t| D ]\}\}}|d |j||f d< qtj|ddg|d	}tt|jd
dddddifgsEJ tj|ddg|d	}tt|jd
dddddifgsbJ t|ddg}tt|jd
dddddifgs}J d S )Nc                 S   s0   t | | }t | | }t||@ t||B  S rx   )rz   ry   )r   rX   rY   unbrsvnbrsr   r   r   rq   w  s   z]TestBipartiteWeightedProjection.test_generic_weighted_projected_graph_custom.<locals>.jaccardr   c                 S   sV   d}t | | t | | @ D ]}|| j||f |d| j||f |d 7 }q|S )Nr   r   )rz   r   get)r   rX   rY   r   wnbrr   r   r   	my_weight|  s   2z_TestBipartiteWeightedProjection.test_generic_weighted_projected_graph_custom.<locals>.my_weightr
   r   r   r|   Tr~   rj   
   )r   )r   r   complete_bipartite_graph	enumerater   r   r   r   )r   rq   r   r<   irX   rY   r   r   r   r   ,test_generic_weighted_projected_graph_customv  s   

&
&*zLTestBipartiteWeightedProjection.test_generic_weighted_projected_graph_customN)r?   r@   rA   classmethodrK   rZ   rd   rl   ru   rw   r   r   r   r   r   r   rB      s    
!!!!!rB   )
r(   networkxr   networkx.algorithmsr   networkx.utilsr   r   r   rB   r   r   r   r   <module>   s     