o
    3ήc                     @   s   d Z ddlZddlmZ ddlZddlm  mZ	 dd Z
dd ZG dd	 d	ZG d
d dZG dd deZG dd deZdS )z>
    Tests for VF2 isomorphism algorithm for weighted graphs.
    N)eqc            	      C   sz  d} g d}t  t  t  t  fD ]}|| || }| r-t	
dd}nt	dd}t j|||ds=J dD ]z\}}| r[|rOdddii}|rZddiddid	}n|raddi}|rgddi}||  }|r| s||jd d< ||jd d< n||jd d< ||jd d< |r| s||jd d< n||jd d< ||jd d< t j|||drJ q?qd S )
Nweight))r   r      )r   r   g      ?)r   r      )r   r      r   
edge_match))FT)TF)TTr   
   g      @)r   r   )nxGraphDiGraph
MultiGraphMultiDiGraphadd_weighted_edges_fromsubgraphnodesis_multigraphisonumerical_multiedge_matchnumerical_edge_matchis_isomorphiccopyis_directed_adj_succ_pred)	wedgesg1g2emmod1mod2data1data2 r%   ]/tmp/pip-target-vg8gfxp4/lib/python/networkx/algorithms/isomorphism/tests/test_vf2userfunc.pytest_simple   sF    
r'   c                  C   s   t  } t  }| jdddd |jdddd t | |s J tdd}t j| ||d	s0J td
d}t j| ||d	r@J t  }|dd t j| ||d	sTJ d S )NABr   r   CDr   znonexistent attributer   r   )r
   r   add_edger   r   r   )r   r   r    r%   r%   r&   test_weightkey:   s   r.   c                   @   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 )TestNodeMatch_Graphc                 C   s    t  | _t  | _|   d S N)r
   r   r   r   buildselfr%   r%   r&   setup_methodM   s   

z TestNodeMatch_Graph.setup_methodc                 C   sd   t dd| _t dd| _| jjddd | jjdd	d | jjdd
dd | jjdddd d S )Ncolor r   r   r(   red)r5   r+   bluer)   r*   r,   )	r   categorical_node_matchnmr   r    r   add_noder   r-   r2   r%   r%   r&   r1   R   s   zTestNodeMatch_Graph.buildc                 C   s   t | j| js
J d S r0   )r
   r   r   r   r2   r%   r%   r&   test_noweight_nocolor\   s   z)TestNodeMatch_Graph.test_noweight_nocolorc                 C   s   t j| j| j| jdrJ d S )N
node_match)r
   r   r   r   r:   r2   r%   r%   r&   test_color1_      zTestNodeMatch_Graph.test_color1c                 C   s.   d| j jd d< tj| j | j| jdsJ d S )Nr8   r(   r5   r=   )r   r   r
   r   r   r:   r2   r%   r%   r&   test_color2b   s   zTestNodeMatch_Graph.test_color2c                 C      t j| j| j| jdsJ d S Nr   r
   r   r   r   r    r2   r%   r%   r&   test_weight1f   r@   z TestNodeMatch_Graph.test_weight1c                 C   s0   | j jdddd tj| j | j| jdrJ d S )Nr(   r)   r   r*   r   )r   r-   r
   r   r   r    r2   r%   r%   r&   test_weight2i   s   z TestNodeMatch_Graph.test_weight2c                 C   s&   t j| j| j| j| jd}|rJ d S )Nr>   r   )r
   r   r   r   r:   r    r3   r   r%   r%   r&   test_colorsandweights1m   s   z*TestNodeMatch_Graph.test_colorsandweights1c                 C   s6   d| j jd d< tj| j | j| j| jd}|sJ d S )Nr8   r(   r5   rG   )r   r   r
   r   r   r:   r    rH   r%   r%   r&   test_colorsandweights2q   s   z*TestNodeMatch_Graph.test_colorsandweights2c                 C   s4   | j jdddd tj| j | j| j| jdrJ d S )Nr(   r)   r   r*   rG   )r   r-   r
   r   r   r:   r    r2   r%   r%   r&   test_colorsandweights3v   s   z*TestNodeMatch_Graph.test_colorsandweights3N)__name__
__module____qualname__r4   r1   r<   r?   rA   rE   rF   rI   rJ   rK   r%   r%   r%   r&   r/   L   s    
r/   c                   @   sD   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S )TestEdgeMatch_MultiGraphc                 C   s(   t  | _t  | _tj| _|   d S r0   )r
   r   r   r   r   MultiGraphMatcherGMr1   r2   r%   r%   r&   r4      s   

z%TestEdgeMatch_MultiGraph.setup_methodc                 C   sX  | j }| j}|jdddddd |jddddd	d |jdddd
dd |jdddddd |jdddddd |jdddd
dd | rytdd| _tdd| _tddgddg| _	t
ddt| _t
g dg dtttjg| _d S tdd| _tdd| _tddgddg| _	t
ddt| _tg dg dtttjg| _d S )Nr(   r)   greenr         ?)r5   r   sizer7   r   gffffff?r   g?r+   r,   g?r   r5   r6   )r7   r   rS   )r   r   r-   r   r   r   r    categorical_multiedge_matchemcemcmgeneric_multiedge_matchr   emg1mathiscloseemg2r   categorical_edge_matchgeneric_edge_match)r3   r   r   r%   r%   r&   r1      s6   



zTestEdgeMatch_MultiGraph.buildc                 C   rB   rC   rD   r2   r%   r%   r&   test_weights_only   r@   z*TestEdgeMatch_MultiGraph.test_weights_onlyc                 C   &   | j | j| j| jd}| sJ d S rC   )rQ   r   r   rV   r   r3   gmr%   r%   r&   test_colors_only      z)TestEdgeMatch_MultiGraph.test_colors_onlyc                 C   &   | j | j| j| jd}| rJ d S rC   )rQ   r   r   rW   r   ra   r%   r%   r&   test_colorsandweights   rd   z.TestEdgeMatch_MultiGraph.test_colorsandweightsc                 C   r`   rC   )rQ   r   r   rY   r   ra   r%   r%   r&   test_generic1   rd   z&TestEdgeMatch_MultiGraph.test_generic1c                 C   re   rC   )rQ   r   r   r\   r   ra   r%   r%   r&   test_generic2   rd   z&TestEdgeMatch_MultiGraph.test_generic2N)
rL   rM   rN   r4   r1   r_   rc   rf   rg   rh   r%   r%   r%   r&   rO   ~   s    "rO   c                   @      e Zd Zdd ZdS )TestEdgeMatch_DiGraphc                 C   s*   t |  t | _t | _|   d S r0   )r/   r4   r
   r   r   r   r1   r2   r%   r%   r&   r4      s   


z"TestEdgeMatch_DiGraph.setup_methodNrL   rM   rN   r4   r%   r%   r%   r&   rj          rj   c                   @   ri   )TestEdgeMatch_MultiDiGraphc                 C   s2   t |  t | _t | _tj| _| 	  d S r0   )
rO   r4   r
   r   r   r   r   MultiDiGraphMatcherrQ   r1   r2   r%   r%   r&   r4      s
   


z'TestEdgeMatch_MultiDiGraph.setup_methodNrk   r%   r%   r%   r&   rm      rl   rm   )__doc__rZ   operatorr   networkxr
   networkx.algorithms.isomorphism
algorithmsisomorphismr   r'   r.   r/   rO   rj   rm   r%   r%   r%   r&   <module>   s    .2=