
    fil                         d dl Z d dlZd dlmZmZmZ d dlmZm	Z	m
Z
mZ e j                            dd          d             Zd Zd Zd	 Z G d
 d          ZdS )    N)graph_edit_distanceoptimal_edit_pathsoptimize_graph_edit_distance)circular_ladder_graphcycle_graph
path_graphwheel_graphsource)
   fooc                    t          j        d           t          j        d          }t          j        |d|           }t          j        t          j        d          5  t          |           d d d            d S # 1 swxY w Y   d S )Nnumpy      )sample_sizer
   zInitial node.*not in Gmatch)pytestimportorskipnxcomplete_graphgenerate_random_pathsraisesNodeNotFoundnext)r
   Gpath_gens      /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/networkx/algorithms/tests/test_similarity.py*test_generate_random_paths_source_not_in_Gr      s    
   
!A'qHHHH	r.F	G	G	G  X                 s    A==BBc                     | |k    S N n1n2s     r   nmatchr&          8O    c                     | |k    S r!   r"   e1e2s     r   ematchr-      r'   r(   c                  t   t          j                    } |                     dd           |                     dd           |                     dd           |                     dd           |                     ddd           |                     ddd           |                     ddd           | S )	NAlabelBCDa-bb-cb-d)r   Graphadd_nodeadd_edge)r   s    r   getCanonicalr;   #   s    


AJJs#JJJs#JJJs#JJJs#JJJsCuJ%%%JJsCuJ%%%JJsCuJ%%%Hr(   c                   0   e Zd Ze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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej         ej!        j"        j#        gZ$e%j&        '                    de$          d             Z(e%j&        '                    de$          d             Z)e%j&        '                    de$          d             Z*e%j&        '                    de$          d              Z+e%j&        '                    d!e$          d"             Z,d# Z-d$ Z.d% Z/d& Z0d' Z1d( Z2d) Z3d* Z4d+ Z5d, Z6e%j&        '                    d-d.          e%j&        '                    d/d0          d1                         Z7d2 Z8d3 Z9d4 Z:d5S )6TestSimilarityc                 V    t          j        d          at          j        d           d S )Nr   scipy)r   r   np)clss    r   setup_classzTestSimilarity.setup_class0   s+      ))G$$$$$r(   c                    t          j        d          }|                                }t          j        t
          t          ||dg           t          j        t
          t          ||g d           t          j        t           j        t          ||d           t          j        t           j        t          ||d           t          j        t           j        t          ||d           t          ||d          d	k    sJ t          ||d
          dk    sJ t          ||dd          d	k    sJ t          ||d
d          dk    sJ t          ||d
d          J t          j        t           j        t          ||d	           d S )Nr      )roots)rD   r      )	   r   )r   rG   )rG   rG      rD   r   r   rI      )rE   timeout-C6?)rL   )	r   
star_graphcopyr   r   
ValueErrorr   r   NetworkXError)selfG0G1s      r   *test_graph_edit_distance_roots_and_timeoutz9TestSimilarity.test_graph_edit_distance_roots_and_timeout6   s|   ]1WWYYj"5r2aSIIIIj"5r2YYYOOOObo':B&QQQQbo':B&QQQQbo':B&QQQQ"2r888A===="2r888A===="2rCCCqHHHH"2rCCCqHHHH"2rHHHPPPb&(;RQOOOOOOr(   c                 F   t          j                    }t          d          }t          d          }t	          d          }t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ d S )	N      r            rI   rK   )r   r8   r   r   r	   r   rR   rS   rT   G2G3s        r   test_graph_edit_distancez'TestSimilarity.test_graph_edit_distanceF   s   XZZ]]^^^^"2r**a////"2r**b0000"2r**b0000"2r**b0000"2r**b0000"2r**b0000"2r**b0000"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a//////r(   c                 \   t          d          }t          d          }|j                                        D ]\  }}|dz  dk    rdnd|d<   |j                                        D ]\  }}|dz  dk    rdnd|d<   t          ||          dk    sJ t          ||d 	          dk    sJ d S )
Nr   rD   r   redbluecolorrI   c                 &    | d         |d         k    S Nrc   r"   r#   s     r   <lambda>zDTestSimilarity.test_graph_edit_distance_node_match.<locals>.<lambda>j       "W+G2L r(   )
node_match)r   nodesitemsr   )rR   rT   r]   nattrs        r   #test_graph_edit_distance_node_matchz2TestSimilarity.test_graph_edit_distance_node_match`   s    ^^^^x~~'' 	< 	<GAt%&UaZZEEVDMMx~~'' 	< 	<GAt%&UaZZEEVDMM"2r**a////B#L#L        r(   c                    t          d          }t          d          }|j                                        D ]"\  }}t          |          dz  dk    rdnd|d<   #|j                                        D ]"\  }}t          |          dz  dk    rdnd|d<   #t	          ||          dk    sJ t	          ||d 	          dk    sJ d S )
NrW   rD   r   ra   rb   rc   r   c                 &    | d         |d         k    S re   r"   r*   s     r   rf   zDTestSimilarity.test_graph_edit_distance_edge_match.<locals>.<lambda>y   rg   r(   )
edge_matchr   edgesrj   minr   )rR   rT   r]   erl   s        r   #test_graph_edit_distance_edge_matchz2TestSimilarity.test_graph_edit_distance_edge_matcho   s    ]]]]x~~'' 	A 	AGAt%(VVaZ1__EE&DMMx~~'' 	B 	BGAt%(VVq[A%5%5EE6DMM"2r**a////B#L#L        r(   c                 D   t          d          }t          d          }|j                                        D ]\  }}|dz  dk    rdnd|d<   |j                                        D ]\  }}|dz  dk    rdnd|d<   d }d	 }d
 }t          |||||          dk    sJ d S )NrW   rD   r   ra   rb   rc   rI   c                 .    | d         |d         k    rdS dS )Nrc   rI   r   r"   )uattrvattrs     r   node_subst_costzJTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_subst_cost   s    W~w//qrr(   c                 "    | d         dk    rdS dS )Nrc   rb      2   r"   rl   s    r   node_del_costzHTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_del_cost   s    G}&&rrr(   c                 "    | d         dk    rdS dS )Nrc   rb   (   d   r"   r~   s    r   node_ins_costzHTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_ins_cost   s    G}&&rsr(   )rz   r   r   )r   ri   rj   r   )rR   rT   r]   rk   rl   rz   r   r   s           r   "test_graph_edit_distance_node_costz1TestSimilarity.test_graph_edit_distance_node_cost~   s    ]]]]x~~'' 	< 	<GAt%&UaZZEEVDMMx~~'' 	< 	<GAt%&UaZZEEVDMM	 	 		 	 		 	 	   /++        r(   c                 x   t          d          }t          d          }|j                                        D ]"\  }}t          |          dz  dk    rdnd|d<   #|j                                        D ]"\  }}t          |          dz  dk    rdnd|d<   #d }d	 }d
 }t	          |||||          dk    sJ d S )NrW   rD   r   ra   rb   rc   r   c                 .    | d         |d         k    rdS dS )Nrc   {Gz?皙?r"   )gattrhattrs     r   edge_subst_costzJTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_subst_cost   s    W~w//tsr(   c                 "    | d         dk    rdS dS )Nrc   rb   皙?      ?r"   r~   s    r   edge_del_costzHTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_del_cost       G}&&ssr(   c                 "    | d         dk    rdS dS )Nrc   rb   g?      ?r"   r~   s    r   edge_ins_costzHTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_ins_cost   r   r(   )r   r   r   gq=
ףp?rq   )rR   rT   r]   rt   rl   r   r   r   s           r   "test_graph_edit_distance_edge_costz1TestSimilarity.test_graph_edit_distance_edge_cost   s   ]]]]x~~'' 	A 	AGAt%(VVaZ1__EE&DMMx~~'' 	B 	BGAt%(VVq[A%5%5EE6DMM	 	 		 	 		 	 	   /++        r(   c                     t          d          }t          d          }t          ||d          J t          ||d          dk    sJ t          ||          dk    sJ d S )NrD   rW   r   )upper_bound      )r   r   rR   rT   r]   s      r   $test_graph_edit_distance_upper_boundz3TestSimilarity.test_graph_edit_distance_upper_bound   sx    "1%%"1%%"2rq999AAA"2rr:::b@@@@"2r**b000000r(   c                 B   t          d          }t          d          }t          ||          \  }}|dk    sJ t          |          dk    sJ d g dg dfg dg dfg d	g d
fg dg dfg dg dfg dg dfg}fd|D             fd|D             k    sJ d S )Nr   rI   rW   c                 x    t          t          |                     t          t          |d                     fS )Nc                     d | v | fS r!   r"   )xs    r   rf   zKTestSimilarity.test_optimal_edit_paths.<locals>.canonical.<locals>.<lambda>   s    tqy!n r(   )key)tuplesorted)vertex_path	edge_paths     r   	canonicalz9TestSimilarity.test_optimal_edit_paths.<locals>.canonical   s;    f[))**fY,D,DEEEFF r(   )r   r   rI   rI   rD   rD   )rJ   rJ   rH   rH   Nr   rD   )r   rH   rD   rI   )rJ   r   r   NrJ   )rJ   rI   r   r   )r   rH   r   NrH   )rJ   rH   rD   r   )rJ   rH   r   r   )r   r   r   )r   rH   rJ   r   )r   r   r   )r   r   r   c                     h | ]} | S r"   r"   .0pr   s     r   	<setcomp>z9TestSimilarity.test_optimal_edit_paths.<locals>.<setcomp>   s    ---!		1---r(   c                     h | ]} | S r"   r"   r   s     r   r   z9TestSimilarity.test_optimal_edit_paths.<locals>.<setcomp>   s    1X1X1XA))Q-1X1X1Xr(   )r   r   r   len)rR   rT   r]   pathscostexpected_pathsr   s         @r   test_optimal_edit_pathsz&TestSimilarity.test_optimal_edit_paths   s:   ]]^^(R00tqyyyy5zzQ	 	 	 )((DDD
 )((DDD
 )((DDD
 )((DDD
 )((DDD
 )((DDD+
4 .---u---1X1X1X1X1X1X1XXXXXXXr(   c                     t          d          }t          d          }d}t          ||          D ]}||k     sJ |}|dk    sJ d S )NrD   rW   i  r   )r   r   )rR   rT   r]   bestcostr   s        r   !test_optimize_graph_edit_distancez0TestSimilarity.test_optimize_graph_edit_distance   s_    "1%%"1%%0R88 	 	D(????HH2~~~~~~r(   c                    t          j                    }t          j                    }|                    d           t          j                    }|                    d           t          j                    }|                    d           t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ d S )N)r/   r/   r/   r2   )r   r2   r2   )r   r   r   r   rF   r   rI   )r   r8   add_edges_fromr   r\   s        r   test_selfloopszTestSimilarity.test_selfloops  s#   XZZXZZ
2333XZZ
2333XZZ
>???"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a//////r(   c                    t          j                    }t          j                    }|                    d           t          j                    }|                    d           t          j                    }|                    d           t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ d S )N)r   r2   r3   r3   r4   )r4   r/   )r   r   r   )r/   r4   )r   r/   r3   )r2   r4   r   r   rK   rD   rF   )r   DiGraphr   r   r\   s        r   test_digraphzTestSimilarity.test_digraph#  s#   Z\\Z\\
JKKKZ\\
JKKKZ\\
JKKK"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a//////r(   c                    t          j                    }t          j                    }|                    d           t          j                    }|                    d           t          j                    }|                    d           t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          d	k    sJ t          ||          d	k    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ t          ||          dk    sJ d S )
N)r   r   r   )r   r   r   r   )r   r   r   r   r   r   rW   rX   rK   rI   rD   )r   
MultiGraphr   r   r\   s        r   test_multigraphzTestSimilarity.test_multigraph@  s#   ]__]__
>???]__
JKKK]__
VWWW"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a////"2r**a//////r(   c                     t          j                    }|                    d           t          j                    }|                    d           t          ||          dk    sJ t          ||          dk    sJ d S )N))hardwarekernel)r   r   )r   	userspace)r   r   ))winterspring)r   summer)r   autumn)r   r   r   )r   MultiDiGraphr   r   r   s      r   test_multidigraphz TestSimilarity.test_multidigraph]  s    _
	
 	
 	
 _
	
 	
 	
 #2r**a////"2r**a//////r(   c                 "   t          j                    }|                    dd           |                    dd           |                    ddd           t	          ||                                t          t                    dk    sJ d S Nr/   r0   r2   r5   rh   rp   r   )r   r8   r9   r:   r   rO   r&   r-   rR   r   s     r   testCopyzTestSimilarity.testCopyu  s    HJJ	

3c
"""	

3c
"""	

35
)))166886RRRVWWWWWWWr(   c                    t          j                    }|                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    ddd           t	          ||t
          t                    dk    sJ d S r   r   r8   r9   r:   r   r&   r-   r   s      r   testSamezTestSimilarity.testSame~      XZZ
Cs###
Cs###
CE***XZZ
Cs###
Cs###
CE***"2rfPPPTUUUUUUUr(   c                    t          j                    }|                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    ddd           t	          ||t
          t                    dk    sJ d S )Nr/   r0   r2   r5   badr   rI   r   r   s      r   testOneEdgeLabelDiffz#TestSimilarity.testOneEdgeLabelDiff  r   r(   c                    t          j                    }|                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    ddd           t	          ||t
          t                    dk    sJ d S )Nr/   r0   r2   r5   Zr   rI   r   r   s      r   testOneNodeLabelDiffz#TestSimilarity.testOneNodeLabelDiff  r   r(   c                    t          j                    }|                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    ddd           |                    dd           t	          ||t
          t                    dk    sJ d S )Nr/   r0   r2   r5   r3   r   rI   r   r   s      r   testOneExtraNodezTestSimilarity.testOneExtraNode  s    XZZ
Cs###
Cs###
CE***XZZ
Cs###
Cs###
CE***
Cs###"2rfPPPTUUUUUUUr(   c                 j   t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           t	          ||t
          t                    dk    sJ d S )	Nr/   r0   r2   r3   r5   a-cr   rI   r   r   s      r   testOneExtraEdgezTestSimilarity.testOneExtraEdge  s#   XZZ
Cs###
Cs###
Cs###
Cs###
CE***XZZ
Cs###
Cs###
Cs###
CE***
CE***"2rfPPPTUUUUUUUr(   c                    t          j                    }|                    dd           |                    dd           |                    ddd           t          j                    }|                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           t	          ||t
          t                    dk    sJ d S )	Nr/   r0   r2   r5   r3   r   r   rD   r   r   s      r   testOneExtraNodeAndEdgez&TestSimilarity.testOneExtraNodeAndEdge  s    XZZ
Cs###
Cs###
CE***XZZ
Cs###
Cs###
Cs###
CE***
CE***"2rfPPPTUUUUUUUr(   c                    t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           |                    ddd           t          ||t          t          	          d
k    sJ d S )Nr/   r0   r2   r4   Er5   r7   d-er   r   r;   r   r8   r9   r:   r   r&   r-   r   s      r   
testGraph1zTestSimilarity.testGraph1      ^^XZZ
Cs###
Cs###
Cs###
Cs###
CE***
CE***
CE***"2rfPPPTUUUUUUUr(   c                 4   t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           |                    ddd	           |                    ddd
           t          ||t          t                    dk    sJ d S )Nr/   r0   r2   r3   r4   r   r5   r6   c-dzc-er   rF   r   r   s      r   
testGraph2zTestSimilarity.testGraph2  s   ^^XZZ
Cs###
Cs###
Cs###
Cs###
Cs###
CE***
CE***
CE***
CE***"2rfPPPTUUUUUUUr(   c                    t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    ddd	           |                    ddd
           |                    ddd           |                    ddd           |                    ddd           |                    ddd           t          ||t          t                    dk    sJ d S )Nr/   r0   r2   r3   r4   r   Fr   r   a-dr   zd-fzd-gze-br   rZ   r   r   s      r   
testGraph3zTestSimilarity.testGraph3  si   ^^XZZ
Cs###
Cs###
Cs###
Cs###
Cs###
Cs###
Cs###
CE***
CE***
CE***
CE***
CE***
CE***"2rfPPPTVVVVVVVr(   c                    t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           |                    ddd           t          ||t          t          	          d
k    sJ d S )Nr/   r0   r2   r3   r4   r5   r6   r   r   rD   r   r   s      r   
testGraph4zTestSimilarity.testGraph4  r   r(   c                    t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           |                    ddd           t          ||t          t          	          d
k    sJ d S )Nr/   r0   r2   r3   r4   r5   r6   r   r   rD   r   r   s      r   testGraph4_azTestSimilarity.testGraph4_a  r   r(   c                    t                      }t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    ddd           |                    ddd           |                    ddd           t          ||t          t          	          d
k    sJ d S )Nr/   r0   r2   r3   r4   r5   r6   r   r   rI   r   r   s      r   testGraph4_bzTestSimilarity.testGraph4_b  r   r(   simrank_similarityc           
          t          j        d          }ddddddddddddddddddddddddddddddd} ||          }|                                D ]'\  }}|t          j        ||         d          k    sJ (t          j                    }|                    d	d
           |                    dd           |                    dd           |                    dd           |                    dd           |                    g d           ddddddddddddddddddddddddddddddd} ||d          }|                                D ]'\  }}|t          j        ||         d          k    sJ (d S )Nr   rI   퓭I?~$oC?퓭I?r   rI   rD   r   rF   r   absr   Univr0   ProfArD   ProfBr   StudentArF   StudentBrJ   r   )rI   r   rD   rF   )rF   rD   )r   r           (-f?@<yX?gЏw?g$=?gPD?glɋݕ?gs,?皙?)importance_factor)r   r   rj   r   approxr   r9   r   )rR   r  r   expectedactualkvs          r    test_simrank_no_source_no_targetz/TestSimilarity.test_simrank_no_source_no_target  sq   N1 %%%%  &%%%  &%%%  &%%%  &%%% ;$
 $
J $#A&&NN$$ 	; 	;DAqfQiT:::::::: JLL	

1F
###	

1G
$$$	

1G
$$$	

1J
'''	

1J
'''	IIIJJJ !3@STT1!3@STT%%&&  3#61ASTT&&&% 
 
( $#A===NN$$ 	; 	;DAqfQiT::::::::	; 	;r(   c                 .   t          j        d          }dddddd} ||d          }|t          j        |d	
          k    sJ t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |                    g d           dddddd} ||dd          }|t          j        |d	
          k    sJ d S )Nr   rI   r  r  r	  r
  r   r
   r   r  r  r0   r  rD   r  r   r  rF   r  r  r  r  r  r  r  r
   r   r   r   r  r   r9   r   rR   r  r   r  r  s        r   test_simrank_source_no_targetz,TestSimilarity.test_simrank_source_no_targetk  sK   N1!!!!
 
 $#Aa0006=T::::::: JLL	

1F
###	

1G
$$$	

1G
$$$	

1J
'''	

1J
'''	IIIJJJS%7CDWXX##AQGGG6=T:::::::::r(   c                 8   t          j        d          }t          j        |t          t	          d                              }dddddd} ||d	          }|t          j        |d
          k    sJ t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           |	                    g d           t          t	          t          j
        |d                                                              }t          j        ||          }dddddd} ||dd          }|t          j        |d
          k    sJ d S )Nr   abcderI   r  r  r	  )abcdrt   r'  r   r   r  r   r  r0   r  rD   r  r   r  rF   r  r  r1   r  r  r  )r  r  r  r  r  r  r!  )r   r   relabel_nodesdict	enumerater   r  r   r9   r   get_node_attributesvalues)rR   r  r   r  r  node_labelss         r   test_simrank_noninteger_nodesz,TestSimilarity.test_simrank_noninteger_nodes  s   N1QYw%7%7 8 899####
 
 $#Ac2226=T::::::: JLL	

1F
###	

1G
$$$	

1G
$$$	

1J
'''	

1J
'''	IIIJJJ9R%;Aw%G%G%N%N%P%PQQRRQ,, '+
 
 $#AVLLL6=T:::::::::r(   c                    t          j        d          }d} ||dd          }|t          j        |d          k    sJ t          j                    }|                    dd           |                    dd	           |                    d
d           |                    dd           |                    dd           |                    g d           d} ||ddd
          }|t          j        |d          k    sJ d S )Nr   rI   r   r
   targetr   r  r  r0   r  rD   r  r   r  rF   r  r  r  r  )r  r
   r4  gh㈵>r"  r#  s        r   test_simrank_source_and_targetz-TestSimilarity.test_simrank_source_and_target  s)   N1##Aa:::6=T::::::: JLL	

1F
###	

1G
$$$	

1G
$$$	

1J
'''	

1J
'''	IIIJJJ% $#AQqQQQ6=T:::::::::r(   algc                 r    t          j        d          }t          j        t           j        ||d           d S )Nr   r   )max_iterations)r   r   r   r   ExceededMaxIterations)rR   r6  r   s      r   test_simrank_max_iterationsz*TestSimilarity.test_simrank_max_iterations  s3    N1b.QrJJJJJJr(   c                     t          j        d          }t          j        t           j        d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   Source node 10 not in Gr   r   r   r   r   r   r   r   r  r   s     r   test_simrank_source_not_foundz,TestSimilarity.test_simrank_source_not_found      N1]2?2KLLL 	0 	0!!B////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0   AA Ac                     t          j        d          }t          j        t           j        d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   zTarget node 10 not in Gr   r   )r4  r=  r   s     r   test_simrank_target_not_foundz,TestSimilarity.test_simrank_target_not_found  r?  r@  c                    t          j        d          }dddddd}ddd	d	dd}t          j        |d
          }|t          j        |d          k    sJ |t          j        |d          k    sJ |t          j        |d          k    sJ t           j                            |d
          }|t          j        |d          k    sJ |t          j        |d          k    sJ |t          j        |d          k    sJ d S )Nr   rI   gLZ??gR9Y@?gR9Y@?r
  r   IC?ΫcA?r   r   Hz>r  rM   gMbP?)r   r   r  r   r  
similarity_simrank_similarity_python)rR   r   expected_python_tol4expected_numpy_tol4r  s        r   test_simrank_between_versionsz,TestSimilarity.test_simrank_between_versions  sD   N1  !!  
  
 !  !
 
 &q333"fmF&E&E&EEEEE#v}V'F'F'FFFFF#v}V'F'F'FFFFF99!A9FF#v}V'F'F'FFFFF"fmF&E&E&EEEEE"fmF&E&E&EEEEEEEr(   c                    t          j        d          }t                              g dg dg dg dg dg          }t           j                            |          }t          j                            ||d           d S )	Nr   r   rD  rE  rE  rD  )rD  r   rD  rE  rE  )rE  rD  r   rD  rE  )rE  rE  rD  r   rD  )rD  rE  rE  rD  r   rF  atolr   r   r@   arrayrG  _simrank_similarity_numpytestingassert_allcloserR   r   r  r  s       r   &test_simrank_numpy_no_source_no_targetz5TestSimilarity.test_simrank_numpy_no_source_no_target  s    N188          ;$&
 &
N 88;;

""8V$"?????r(   c                     t          j        d          }t                              g d          }t           j                            |d          }t          j                            ||d           d S )Nr   rM  r   r   rF  rN  rP  rU  s       r   #test_simrank_numpy_source_no_targetz2TestSimilarity.test_simrank_numpy_source_no_target  sr    N188  
 
 8818EE

""8V$"?????r(   c                     t          j        d          }d}t           j                            |dd          }t          j                            ||d           d S )Nr   r   r   r3  rF  rN  )r   r   rG  rR  r@   rS  rT  rU  s       r   $test_simrank_numpy_source_and_targetz3TestSimilarity.test_simrank_numpy_source_and_target*  sU    N1881Q8OO

""8V$"?????r(   c                    t           j                            d           t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           ddddd	}t          j        |dd
          }||k    sJ d S )N*   r   rI   rD   r   rF   r   g      ?)r   rD   rI   rF   )path_lengthr@   randomseedr   r8   r:   panther_similarityrR   r   r  sims       r   "test_panther_similarity_unweightedz1TestSimilarity.test_panther_similarity_unweighted0  s    
	rHJJ	

1a	

1a	

1a	

1a	

1assu55#Aqa888hr(   c                    t           j                            d           t          j                    }|                    ddd           |                    ddd           |                    ddd	           |                    ddd
           |                    ddd           ddddd}t          j        |dd	d          }||k    sJ d S )Nr\  v1v2r   )wv3rI   v4rD   r   v5g      ?r   g      ?)ri  rj  rg  rk  rh  )r]  weightr^  rb  s       r    test_panther_similarity_weightedz/TestSimilarity.test_panther_similarity_weighted=  s    
	rHJJ	

4
###	

4
###	

4
###	

4
%%%	

4
###cDAA#At3GGGhr(   c                     t          j                    }|                    g d           t          j        t           j        d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )NrJ   r   )r   r   rH   r  r<  r   r   r   )r   r8   r   r   r   r   ra  r   s     r   (test_panther_similarity_source_not_foundz7TestSimilarity.test_panther_similarity_source_not_foundJ  s    HJJ	AAABBB]2?2KLLL 	0 	0!!B////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   A//A36A3c                    t          j                    }|                    t          d                     t	          j        t           j        d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   zAPanther similarity is not defined for the isolated source node 1.r   rI   r   )r   r8   add_nodes_fromranger   r   NetworkXUnfeasiblera  r   s     r    test_panther_similarity_isolatedz/TestSimilarity.test_panther_similarity_isolatedP  s    HJJ	q"""]!U
 
 
 	/ 	/ !!A....		/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   A::A>A>	num_paths)rI   r   r   r
   rJ   c                 V   t          j        g d          }i }t          j        ||d|          }t          |          }t	          |          |k    sJ t          fd|D                       sJ t          |                   t          t          |                    k    sJ d S )Nro  rD   )r]  	index_mapr
   c              3   0   K   | ]}|d          k    V  dS )r   Nr"   )r   r   r
   s     r   	<genexpr>zGTestSimilarity.test_generate_random_paths_with_start.<locals>.<genexpr>k  s+      11a1Q46>111111r(   )r   r8   r   listr   allr   rs  )rR   rv  r
   r   rx  r   r   s     `    r   %test_generate_random_paths_with_startz4TestSimilarity.test_generate_random_paths_with_startY  s     H===>>	+
 
 
 X 5zzY&&&&1111511111111 i'((Dy1A1A,B,BBBBBBBr(   c                    i }d}d}t          j                    }|                    dd           |                    dd           |                    dd           |                    dd           |                    dd           t          j        ||||d          }g d	g d
g dg dg dg dg dg dg dg dg
}h dh dh dh dddhd}|t	          |          k    sJ ||k    sJ d S )Nr   rD   r   rI   r   rF   r\  )r]  rx  r`  )r   r   r   )rF   rD   rI   )rD   rI   r   )rD   r   r   )r   r   rI   )rF   rD   r   )r   r   rD   )rD   rI   rD   >   r   rD   r   rF   r   rW   rX   rK   >   rI   rD   rF   r   rX   rG   >   rI   rD   r   rW   rX   rK   rG   >   r   r   rF   r   rK   rW   r
  )r   r8   r:   r   r{  rR   rx  rv  r]  r   r   r   expected_maps           r   %test_generate_random_paths_unweightedz4TestSimilarity.test_generate_random_paths_unweightedp  sX   		HJJ	

1a	

1a	

1a	

1a	

1a(ykYR
 
 
 IIIIIIIIIIIIIIIIIIII
 (''!!!$$$1v
 
 e,,,,y((((((r(   c                 j   t           j                            d           i }d}d}t          j                    }|                    ddd           |                    ddd	           |                    dd
d           |                    ddd           |                    ddd           |                    dd
d           t          j        ||||          }g dg dg dg dg dg dg dg dg dg dg
}h dh dh dh dh dh dd }|t          |          k    sJ ||k    sJ d S )!Nr\  r   rW   r'  r(  g333333?)rl  r)  r   r*  r   rt   gffffff?fg?g333333?)r]  rx  )r*  r)  r  r)  r*  r'  r(  )rt   r)  r  r)  r  r)  rt   )r*  r'  r(  r'  r(  r'  r)  )r(  r'  r*  r'  r(  r'  r(  )r*  r'  r(  r'  r(  r'  r*  )r*  r'  r(  r'  r(  r'  r(  )r  r)  r  r)  r  r)  rt   )r*  r'  r*  r'  r(  r'  r(  )rt   r)  r  r)  rt   r)  r*  >   r   rD   r   rF   r   rW   rK   rG   >   r   rI   rD   r   rX   rG   >   r   rI   rX   rG   >   r   rD   r   rF   r   rW   rK   >   rI   rX   rG   )r*  r)  r  r'  r(  rt   )r@   r_  r`  r   r8   r:   r   r{  r  s           r   #test_generate_random_paths_weightedz2TestSimilarity.test_generate_random_paths_weighted  s   
	r		HJJ	

3C
(((	

3C
(((	

3C
(((	

3C
(((	

3C
(((	

3C
((((ykY
 
 

 0/////////////////////////////
 *))###&&&&&&
 
 e,,,,y((((((r(   c                    d\  }}t          j                    }|                    ||f           |                    ||fg           t          j                    }|                    ||f           |                    ||fg           ||fD ]1}|D ]}||j        |         d<   |j        D ]}||j        |         d<   2d }t          j        ||||          dk    sJ t          j        ||||          dk    sJ dS )zgG2 has edge (a,b) and G3 has edge (a,a) but node order for G2 is (a,b)
        while for G3 it is (b,a)r   rl   c                     | |k    S r!   r"   )r   ys     r   
user_matchzETestSimilarity.test_symmetry_with_custom_matching.<locals>.user_match  s    6Mr(   r   rI   N)r   r8   rr  r   ri   rr   r   )	rR   r'  r(  r]   r^   r   rk   rt   r  s	            r   "test_symmetry_with_custom_matchingz1TestSimilarity.test_symmetry_with_custom_matching  s^    1XZZ
1a&!!!
Aq6(###XZZ
1a&!!!
Aq6(###b 	' 	'A ' '%&
6""W ' '%&
6""'	 	 	 "2rjZXXX    "2rjZXXX     r(   N);__name__
__module____qualname__classmethodrB   rU   r_   rm   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  
algorithmsrG  rH  simrank_algsr   markparametrizer  r$  r1  r5  r:  r>  rB  rK  rV  rX  rZ  rd  rm  rp  ru  r}  r  r  r  r"   r(   r   r=   r=   /   s       % % [%
P P P 0 0 04
 
 

 
 
#
 #
 #
J#
 #
 #
J1 1 1'Y 'Y 'YR  0 0 0:0 0 0:0 0 0:0 0 00
 
 
	V 	V 	V	V 	V 	V	V 	V 	V
V 
V 
VV V VV V V
V 
V 
VV V VW W W$
V 
V 
V
V 
V 
V
V 
V 
V 	
 ;L
 [1<@@K; K; A@K;Z [1<@@; ; A@;6 [1<@@"; "; A@";H [1<@@; ; A@;, [UL11K K 21K0 0 0
0 0 0
F F F<*@ *@ *@X@ @ @@ @ @    0 0 0/ / / [[*55[Xv..C C /. 65C*") ") ")H') ') ')R
 
 
 
 
r(   r=   )r   networkxr   networkx.algorithms.similarityr   r   r   networkx.generators.classicr   r   r   r	   r  r  r   r&   r-   r;   r=   r"   r(   r   <module>r     s                
            ;//  0/    	 	 	i
 i
 i
 i
 i
 i
 i
 i
 i
 i
r(   