
    shl                         S SK r S SKrS SKJrJrJr  S SKJrJ	r	J
r
Jr  \ R                  R                  SS5      S 5       rS rS rS	 r " S
 S5      rg)    N)graph_edit_distanceoptimal_edit_pathsoptimize_graph_edit_distance)circular_ladder_graphcycle_graph
path_graphwheel_graphsource)
   fooc                    [         R                  " S5        [        R                  " S5      n[        R                  " USU S9n[         R
                  " [        R                  SS9   [        U5        S S S 5        g ! , (       d  f       g = f)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      }/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/networkx/algorithms/tests/test_similarity.py*test_generate_random_paths_source_not_in_Gr      s[    
 
!A''qHH	r.F	GX 
H	G	Gs   &A;;
B	c                 
    X:H  $ N n1n2s     r   nmatchr&      	    8O    c                 
    X:H  $ r!   r"   e1e2s     r   ematchr-      r'   r(   c                     [         R                  " 5       n U R                  SSS9  U R                  SSS9  U R                  SSS9  U R                  SSS9  U R                  SSSS9  U R                  SSSS9  U R                  SSSS9  U $ )	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                   <   \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\ RB                  \ RD                  RF                  RH                  /r%\&RN                  RQ                  S\%5      S 5       r)\&RN                  RQ                  S\%5      S 5       r*\&RN                  RQ                  S\%5      S  5       r+\&RN                  RQ                  S\%5      S! 5       r,\&RN                  RQ                  S"\%5      S# 5       r-S$ r.S% r/S& r0S' r1S( r2S) r3S* r4S+ r5S, r6S- r7\&RN                  RQ                  S.S/5      \&RN                  RQ                  S0S15      S2 5       5       r8S3 r9S4 r:S5 r;S6r<g7)8TestSimilarity/   c                 \    [         R                  " S5      q[         R                  " S5        g )Nr   scipy)r   r   np)clss    r   setup_classTestSimilarity.setup_class0   s"       )G$r(   c                    [         R                  " S5      nUR                  5       n[        R                  " [
        [        XS/S9  [        R                  " [
        [        X/ SQS9  [        R                  " [         R                  [        XSS9  [        R                  " [         R                  [        XSS9  [        R                  " [         R                  [        XSS9  [        XSS9S	:X  d   e[        XS
S9S:X  d   e[        XSSS9S	:X  d   e[        XS
SS9S:X  d   e[        XS
SS9b   e[        R                  " [         R                  [        XS	S9  g )Nr      )roots)rF   r      )	   r   )r   rI   )rI   rI      rF   r   r   rK      )rG   timeout-C6?)rN   )	r   
star_graphcopyr   r   
ValueErrorr   r   NetworkXError)selfG0G1s      r   *test_graph_edit_distance_roots_and_timeout9TestSimilarity.test_graph_edit_distance_roots_and_timeout6   s   ]]1WWYj"5raSIj"5rYOboo':B&Qboo':B&Qboo':B&Q"28A==="28A==="2CqHHH"2CqHHH"2HPPPb&&(;RQOr(   c                    [         R                  " 5       n[        S5      n[        S5      n[	        S5      n[        X5      S:X  d   e[        X5      S:X  d   e[        X!5      S:X  d   e[        X5      S:X  d   e[        X15      S:X  d   e[        X5      S:X  d   e[        XA5      S:X  d   e[        X"5      S:X  d   e[        X#5      S:X  d   e[        X25      S:X  d   e[        X$5      S:X  d   e[        XB5      S:X  d   e[        X35      S:X  d   e[        X45      S:X  d   e[        XC5      S:X  d   e[        XD5      S:X  d   eg )	N      r            rK   rM   )r   r8   r   r   r	   r   rT   rU   rV   G2G3s        r   test_graph_edit_distance'TestSimilarity.test_graph_edit_distanceF   sX   XXZ]^^"2*a///"2*b000"2*b000"2*b000"2*b000"2*b000"2*b000"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///r(   c                 @   [        S5      n[        S5      nUR                  R                  5        H  u  p4US-  S:X  a  SOSUS'   M     UR                  R                  5        H  u  p4US-  S:X  a  SOSUS'   M     [        X5      S:X  d   e[        XS S	9S:X  d   eg )
Nr   rF   r   redbluecolorrK   c                     U S   US   :H  $ Nrg   r"   r#   s     r   <lambda>DTestSimilarity.test_graph_edit_distance_node_match.<locals>.<lambda>j       "W+G2Lr(   )
node_match)r   nodesitemsr   )rT   rV   r`   nattrs        r   #test_graph_edit_distance_node_match2TestSimilarity.test_graph_edit_distance_node_match`   s    ^^xx~~'GA%&UaZEVDM (xx~~'GA%&UaZEVDM ("2*a///#L 	
r(   c                 d   [        S5      n[        S5      nUR                  R                  5        H  u  p4[        U5      S-  S:X  a  SOSUS'   M      UR                  R                  5        H  u  p4[        U5      S-  S:X  a  SOSUS'   M      [	        X5      S:X  d   e[	        XS S	9S:X  d   eg )
NrZ   rF   r   re   rf   rg   r   c                     U S   US   :H  $ ri   r"   r*   s     r   rj   DTestSimilarity.test_graph_edit_distance_edge_match.<locals>.<lambda>y   rl   r(   )
edge_matchr   edgesro   minr   )rT   rV   r`   erq   s        r   #test_graph_edit_distance_edge_match2TestSimilarity.test_graph_edit_distance_edge_matcho   s    ]]xx~~'GA%(VaZ1_E&DM (xx~~'GA%(Vq[A%5E6DM ("2*a///#L 	
r(   c                 4   [        S5      n[        S5      nUR                  R                  5        H  u  p4US-  S:X  a  SOSUS'   M     UR                  R                  5        H  u  p4US-  S:X  a  SOSUS'   M     S nS	 nS
 n[        UUUUUS9S:X  d   eg )NrZ   rF   r   re   rf   rg   rK   c                     U S   US   :X  a  gg)Nrg   rK   r   r"   )uattrvattrs     r   node_subst_costJTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_subst_cost   s    W~w/r(   c                     U S   S:X  a  gg)Nrg   rf      2   r"   rq   s    r   node_del_costHTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_del_cost   s    G}&r(   c                     U S   S:X  a  gg)Nrg   rf   (   d   r"   r   s    r   node_ins_costHTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_ins_cost   s    G}&r(   )r   r   r   )r   rn   ro   r   )rT   rV   r`   rp   rq   r   r   r   s           r   "test_graph_edit_distance_node_cost1TestSimilarity.test_graph_edit_distance_node_cost~   s    ]]xx~~'GA%&UaZEVDM (xx~~'GA%&UaZEVDM (			   /++ 		
r(   c                 X   [        S5      n[        S5      nUR                  R                  5        H  u  p4[        U5      S-  S:X  a  SOSUS'   M      UR                  R                  5        H  u  p4[        U5      S-  S:X  a  SOSUS'   M      S nS	 nS
 n[	        UUUUUS9S:X  d   eg )NrZ   rF   r   re   rf   rg   r   c                     U S   US   :X  a  gg)Nrg   {Gz?皙?r"   )gattrhattrs     r   edge_subst_costJTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_subst_cost   s    W~w/r(   c                     U S   S:X  a  gg)Nrg   rf   皙?      ?r"   r   s    r   edge_del_costHTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_del_cost       G}&r(   c                     U S   S:X  a  gg)Nrg   rf   g?      ?r"   r   s    r   edge_ins_costHTestSimilarity.test_graph_edit_distance_edge_cost.<locals>.edge_ins_cost   r   r(   )r   r   r   gq=
ףp?rx   )rT   rV   r`   r{   rq   r   r   r   s           r   "test_graph_edit_distance_edge_cost1TestSimilarity.test_graph_edit_distance_edge_cost   s    ]]xx~~'GA%(VaZ1_E&DM (xx~~'GA%(Vq[A%5E6DM (			   /++ 		
r(   c                     [        S5      n[        S5      n[        XSS9b   e[        XSS9S:X  d   e[        X5      S:X  d   eg )NrF   rZ   r   )upper_bound      )r   r   rT   rV   r`   s      r   $test_graph_edit_distance_upper_bound3TestSimilarity.test_graph_edit_distance_upper_bound   sQ    "1%"1%"2q9AAA"2r:b@@@"2*b000r(   c                 J   [        S5      n[        S5      n[        X5      u  p4US:X  d   e[        U5      S:X  d   eS n/ SQ/ SQ4/ SQ/ SQ4/ S	Q/ S
Q4/ SQ/ SQ4/ SQ/ SQ4/ SQ/ SQ4/nU Vs1 s H  ou" U6 iM	     snU Vs1 s H  ou" U6 iM	     sn:X  d   eg s  snf s  snf )Nr   rK   rZ   c                 R    [        [        U 5      5      [        [        US S95      4$ )Nc                     S U ;   U 4$ r!   r"   )xs    r   rj   KTestSimilarity.test_optimal_edit_paths.<locals>.canonical.<locals>.<lambda>   s    tqy!nr(   )key)tuplesorted)vertex_path	edge_paths     r   	canonical9TestSimilarity.test_optimal_edit_paths.<locals>.canonical   s)    f[)*fY,DEF r(   )r   r   rK   rK   rF   rF   )rL   rL   rJ   rJ   Nr   rF   )r   rJ   rF   rK   )rL   r   r   NrL   )rL   rK   r   r   )r   rJ   r   NrJ   )rL   rJ   rF   r   )rL   rJ   r   r   )r   r   r   )r   rJ   rL   r   )r   r   r   )r   r   r   )r   r   r   len)rT   rV   r`   pathscostr   expected_pathsps           r   test_optimal_edit_paths&TestSimilarity.test_optimal_edit_paths   s    ]^(0qyy5zQ	 )D
 )D
 )D
 )D
 )D
 )D+
4 (--u!	1u-1XA)Q-1XXXX-1Xs   0BB c                 z    [        S5      n[        S5      nSn[        X5       H  nXC:  d   eUnM     US:X  d   eg )NrF   rZ   i  r   )r   r   )rT   rV   r`   bestcostr   s        r   !test_optimize_graph_edit_distance0TestSimilarity.test_optimize_graph_edit_distance   sG    "1%"1%08D?"?H 9 2~~r(   c                 2   [         R                  " 5       n[         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [        X5      S:X  d   e[        X5      S:X  d   e[        X!5      S:X  d   e[        X5      S:X  d   e[        X15      S:X  d   e[        X5      S:X  d   e[        XA5      S:X  d   e[        X"5      S:X  d   e[        X#5      S:X  d   e[        X25      S:X  d   e[        X$5      S:X  d   e[        XB5      S:X  d   e[        X35      S:X  d   e[        X45      S:X  d   e[        XC5      S:X  d   e[        XD5      S:X  d   eg )N)r/   r/   r/   r2   )r   r2   r2   )r   r   r   r   rH   r   rK   )r   r8   add_edges_fromr   r_   s        r   test_selfloopsTestSimilarity.test_selfloops  s   XXZXXZ
23XXZ
23XXZ
>?"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///r(   c                 2   [         R                  " 5       n[         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [        X5      S:X  d   e[        X5      S:X  d   e[        X!5      S:X  d   e[        X5      S:X  d   e[        X15      S:X  d   e[        X5      S:X  d   e[        XA5      S:X  d   e[        X"5      S:X  d   e[        X#5      S:X  d   e[        X25      S:X  d   e[        X$5      S:X  d   e[        XB5      S:X  d   e[        X35      S:X  d   e[        X45      S:X  d   e[        XC5      S:X  d   e[        XD5      S:X  d   eg )N)r   r2   r3   r3   r4   )r4   r/   )r   r   r   )r/   r4   )r   r/   r3   )r2   r4   r   r   rM   rF   rH   )r   DiGraphr   r   r_   s        r   test_digraphTestSimilarity.test_digraph#  s   ZZ\ZZ\
JKZZ\
JKZZ\
JK"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///r(   c                 2   [         R                  " 5       n[         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [        X5      S:X  d   e[        X5      S:X  d   e[        X!5      S:X  d   e[        X5      S:X  d   e[        X15      S:X  d   e[        X5      S:X  d   e[        XA5      S:X  d   e[        X"5      S:X  d   e[        X#5      S:X  d   e[        X25      S:X  d   e[        X$5      S	:X  d   e[        XB5      S	:X  d   e[        X35      S:X  d   e[        X45      S:X  d   e[        XC5      S:X  d   e[        XD5      S:X  d   eg )
N)r   r   r   )r   r   r   r   )r   r   r   r   r   r   rZ   r[   rM   rK   rF   )r   
MultiGraphr   r   r_   s        r   test_multigraphTestSimilarity.test_multigraph@  s   ]]_]]_
>?]]_
JK]]_
VW"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///"2*a///r(   c                     [         R                  " 5       nUR                  S5        [         R                  " 5       nUR                  S5        [        X5      S:X  d   e[        X!5      S:X  d   eg )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_multidigraph TestSimilarity.test_multidigraph]  sj    __
	
 __
	
 #2*a///"2*a///r(   c                     [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [	        XR                  5       [        [        S9S:X  d   eg Nr/   r0   r2   r5   rm   rw   r   )r   r8   r9   r:   r   rQ   r&   r-   rT   r   s     r   testCopyTestSimilarity.testCopyu  s_    HHJ	

3c
"	

3c
"	

35
)6686RVWW	
Wr(   c                 N   [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [	        X[
        [        S9S:X  d   eg r   r   r8   r9   r:   r   r&   r-   r   s      r   testSameTestSimilarity.testSame~      XXZ
Cs#
Cs#
CE*XXZ
Cs#
Cs#
CE*"2fPTUUUUr(   c                 N   [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [	        X[
        [        S9S:X  d   eg )Nr/   r0   r2   r5   badr   rK   r   r   s      r   testOneEdgeLabelDiff#TestSimilarity.testOneEdgeLabelDiff  r   r(   c                 N   [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [	        X[
        [        S9S:X  d   eg )Nr/   r0   r2   r5   Zr   rK   r   r   s      r   testOneNodeLabelDiff#TestSimilarity.testOneNodeLabelDiff  r   r(   c                 n   [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  UR                  SSS9  [	        X[
        [        S9S:X  d   eg )Nr/   r0   r2   r5   r3   r   rK   r   r   s      r   testOneExtraNodeTestSimilarity.testOneExtraNode  s    XXZ
Cs#
Cs#
CE*XXZ
Cs#
Cs#
CE*
Cs#"2fPTUUUUr(   c                    [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSSS9  UR                  SSSS9  [	        X[
        [        S9S:X  d   eg )	Nr/   r0   r2   r3   r5   a-cr   rK   r   r   s      r   testOneExtraEdgeTestSimilarity.testOneExtraEdge  s    XXZ
Cs#
Cs#
Cs#
Cs#
CE*XXZ
Cs#
Cs#
Cs#
CE*
CE*"2fPTUUUUr(   c                    [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSSS9  [         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSSS9  UR                  SSSS9  [	        X[
        [        S9S:X  d   eg )	Nr/   r0   r2   r5   r3   r  r   rF   r   r   s      r   testOneExtraNodeAndEdge&TestSimilarity.testOneExtraNodeAndEdge  s    XXZ
Cs#
Cs#
CE*XXZ
Cs#
Cs#
Cs#
CE*
CE*"2fPTUUUUr(   c                 Z   [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  [        X[        [        S	9S
:X  d   eg )Nr/   r0   r2   r4   Er5   r7   d-er   r   r;   r   r8   r9   r:   r   r&   r-   r   s      r   
testGraph1TestSimilarity.testGraph1      ^XXZ
Cs#
Cs#
Cs#
Cs#
CE*
CE*
CE*"2fPTUUUUr(   c                    [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSS	S9  UR	                  SSS
S9  [        X[        [        S9S:X  d   eg )Nr/   r0   r2   r3   r4   r  r5   r6   c-dzc-er   rH   r  r   s      r   
testGraph2TestSimilarity.testGraph2  s    ^XXZ
Cs#
Cs#
Cs#
Cs#
Cs#
CE*
CE*
CE*
CE*"2fPTUUUUr(   c                     [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSS	S9  UR	                  SSS
S9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  [        X[        [        S9S:X  d   eg )Nr/   r0   r2   r3   r4   r  Fr   r  a-dr  zd-fzd-gze-br   r]   r  r   s      r   
testGraph3TestSimilarity.testGraph3  s   ^XXZ
Cs#
Cs#
Cs#
Cs#
Cs#
Cs#
Cs#
CE*
CE*
CE*
CE*
CE*
CE*"2fPTVVVVr(   c                 Z   [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  [        X[        [        S	9S
:X  d   eg )Nr/   r0   r2   r3   r4   r5   r6   r  r   rF   r  r   s      r   
testGraph4TestSimilarity.testGraph4  r  r(   c                 Z   [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  [        X[        [        S	9S
:X  d   eg )Nr/   r0   r2   r3   r4   r5   r6   r  r   rF   r  r   s      r   testGraph4_aTestSimilarity.testGraph4_a  r  r(   c                 Z   [        5       n[        R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR	                  SSSS9  UR	                  SSSS9  UR	                  SSSS9  [        X[        [        S	9S
:X  d   eg )Nr/   r0   r2   r3   r4   r5   r6   r   r   rK   r  r   s      r   testGraph4_bTestSimilarity.testGraph4_b  r  r(   simrank_similarityc           
         [         R                  " S5      nSSSSSS.SSSSSS.SSSSSS.SSSSSS.SSSSSS.S.nU" U5      nUR                  5        H"  u  pVU[        R                  " XE   SS9:X  a  M"   e   [         R
                  " 5       nUR                  S	S
S9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  / SQ5        SSSSSS.SSSSSS.SSSSSS.SSSSSS.SSSSSS.S.nU" USS9nUR                  5        H"  u  pVU[        R                  " XE   SS9:X  a  M"   e   g )Nr   rK   퓭I?~$oC?퓭I?r   rK   rF   r   rH   r   absr   Univr0   ProfArF   ProfBr   StudentArH   StudentBrL   r   )rK   r   rF   rH   )rH   rF   )r   r           (-f?@<yX?gЏw?g$=?gPD?glɋݕ?gs,?皙?)importance_factor)r   r   ro   r   approxr   r9   r   )rT   r&  r   expectedactualkvs          r    test_simrank_no_source_no_target/TestSimilarity.test_simrank_no_source_no_target  s   NN1 %%%% &%%% &%%% &%%% &%%%;$
J $A&NN$DAfiT:::: %
 JJL	

1F
#	

1G
$	

1G
$	

1J
'	

1J
'	IJ !3@ST1!3@ST%%&& 3#61AST&&&%
( $A=NN$DAfiT:::: %r(   c                    [         R                  " S5      nSSSSSS.nU" USS9nU[        R                  " US	S
9:X  d   e[         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  / SQ5        SSSSSS.nU" USSS9nU[        R                  " US	S
9:X  d   eg )Nr   rK   r(  r)  r*  r+  r   r
   r   r,  r.  r0   r/  rF   r0  r   r1  rH   r2  r3  r5  r6  r7  r8  r9  r
   r   r   r   r:  r   r9   r   rT   r&  r   r;  r<  s        r   test_simrank_source_no_target,TestSimilarity.test_simrank_source_no_targetk  s    NN1!!!!
 $Aa06==T:::: JJL	

1F
#	

1G
$	

1G
$	

1J
'	

1J
'	IJS%7CDWX#AQG6==T::::r(   c                    [         R                  " S5      n[         R                  " U[        [	        S5      5      5      nSSSSSS.nU" USS	9nU[
        R                  " US
S9:X  d   e[         R                  " 5       nUR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  SSS9  UR                  / SQ5        [        [	        [         R                  " US5      R                  5       5      5      n[         R                  " X%5      nSSSSSS.nU" USSS9nU[
        R                  " US
S9:X  d   eg )Nr   abcderK   r(  r)  r*  )abcdr{   rJ  rB  r   r,  r   r.  r0   r/  rF   r0  r   r1  rH   r2  r3  r1   r5  r6  r7  )r.  r/  r0  r1  r2  r8  rC  )r   r   relabel_nodesdict	enumerater   r:  r   r9   r   get_node_attributesvalues)rT   r&  r   r;  r<  node_labelss         r   test_simrank_noninteger_nodes,TestSimilarity.test_simrank_noninteger_nodes  sK   NN1QYw%7 89####
 $Ac26==T:::: JJL	

1F
#	

1G
$	

1G
$	

1J
'	

1J
'	IJ9R%;%;Aw%G%N%N%PQRQ, '+
 $AVL6==T::::r(   c                    [         R                  " S5      nSnU" USSS9nU[        R                  " USS9:X  d   e[         R                  " 5       nUR                  SSS9  UR                  SS	S9  UR                  S
SS9  UR                  SSS9  UR                  SSS9  UR                  / SQ5        SnU" USSS
S9nU[        R                  " USS9:X  d   eg )Nr   rK   r   r
   targetr   r,  r.  r0   r/  rF   r0  r   r1  rH   r2  r3  r6  r8  )r9  r
   rX  gh㈵>rD  rE  s        r   test_simrank_source_and_target-TestSimilarity.test_simrank_source_and_target  s    NN1#Aa:6==T:::: JJL	

1F
#	

1G
$	

1G
$	

1J
'	

1J
'	IJ% $AQqQ6==T::::r(   algc                 x    [         R                  " S5      n[        R                  " [         R                  XSS9  g )Nr   r   )max_iterations)r   r   r   r   ExceededMaxIterations)rT   r[  r   s      r   test_simrank_max_iterations*TestSimilarity.test_simrank_max_iterations  s&    NN1b..rJr(   c                     [         R                  " S5      n[        R                  " [         R                  SS9   [         R
                  " USS9  S S S 5        g ! , (       d  f       g = f)Nr   Source node 10 not in Gr   r   rB  r   r   r   r   r   r&  r   s     r   test_simrank_source_not_found,TestSimilarity.test_simrank_source_not_found  @    NN1]]2??2KL!!!B/ MLL   A
A'c                     [         R                  " S5      n[        R                  " [         R                  SS9   [         R
                  " USS9  S S S 5        g ! , (       d  f       g = f)Nr   zTarget node 10 not in Gr   r   )rX  rc  r   s     r   test_simrank_target_not_found,TestSimilarity.test_simrank_target_not_found  rf  rg  c                    [         R                  " S5      nSSSSSS.nSSS	S	SS.n[         R                  " US
S9nU[        R                  " USS9:X  d   eU[        R                  " USS9:w  d   eU[        R                  " USS9:X  d   e[         R
                  R                  US
S9nU[        R                  " USS9:X  d   eU[        R                  " USS9:w  d   eU[        R                  " USS9:X  d   eg )Nr   rK   gLZ??gR9Y@?gR9Y@?r+  r   IC?ΫcA?r   rB  Hz>r,  rO   gMbP?)r   r   r&  r   r:  
similarity_simrank_similarity_python)rT   r   expected_python_tol4expected_numpy_tol4r<  s        r   test_simrank_between_versions,TestSimilarity.test_simrank_between_versions  s   NN1  !!  
 !  !
 &&q3"fmmF&EEEE#v}}V'FFFF#v}}V'FFFF99!A9F#v}}V'FFFF"fmmF&EEEE"fmmF&EEEEr(   c                     [         R                  " S5      n[        R                  / SQ/ SQ/ SQ/ SQ/ SQ/5      n[         R                  R                  U5      n[        R                  R                  X#SS9  g )	Nr   r   rl  rm  rm  rl  )rl  r   rl  rm  rm  )rm  rl  r   rl  rm  )rm  rm  rl  r   rl  )rl  rm  rm  rl  r   rn  atolr   r   rA   arrayro  _simrank_similarity_numpytestingassert_allcloserT   r   r;  r<  s       r   &test_simrank_numpy_no_source_no_target5TestSimilarity.test_simrank_numpy_no_source_no_target  sj    NN188;$&
N 88;


""8$"?r(   c                     [         R                  " S5      n[        R                  / SQ5      n[         R                  R                  USS9n[        R                  R                  X#SS9  g )Nr   rv  r   rB  rn  rw  ry  r~  s       r   #test_simrank_numpy_source_no_target2TestSimilarity.test_simrank_numpy_source_no_target  sU    NN188
 8818E


""8$"?r(   c                     [         R                  " S5      nSn[         R                  R                  USSS9n[        R
                  R                  X#SS9  g )Nr   r   r   rW  rn  rw  )r   r   ro  r{  rA   r|  r}  r~  s       r   $test_simrank_numpy_source_and_target3TestSimilarity.test_simrank_numpy_source_and_target*  sG    NN1881Q8O


""8$"?r(   c                 h   [         R                  R                  S5        [        R                  " 5       nUR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        SSSSS	.n[        R                  " USSS
9nX2:X  d   eg )N*   r   rK   rF   r   rH   r   g      ?)r   rF   rK   rH   )path_lengthrA   randomseedr   r8   r:   panther_similarityrT   r   r;  sims       r   "test_panther_similarity_unweighted1TestSimilarity.test_panther_similarity_unweighted0  s    
		rHHJ	

1a	

1a	

1a	

1a	

1assu5##Aqa8r(   c                 `   [         R                  R                  S5        [        R                  " 5       nUR                  SSSS9  UR                  SSSS9  UR                  SSS	S9  UR                  SSS
S9  UR                  SSSS9  SSSSS.n[        R                  " USS	SS9nX2:X  d   eg )Nr  v1v2r   )wv3rK   v4rF   r   v5g      ?r   g      ?)r  r  r  r  r  )r  weightr  r  s       r    test_panther_similarity_weighted/TestSimilarity.test_panther_similarity_weighted=  s    
		rHHJ	

4
#	

4
#	

4
#	

4
%	

4
#cDA##At3Gr(   c                     [         R                  " 5       nUR                  / SQ5        [        R                  " [         R
                  SS9   [         R                  " USS9  S S S 5        g ! , (       d  f       g = f)NrL   r   )r   r   rJ   r4  rb  r   r   rB  )r   r8   r   r   r   r   r  r   s     r   (test_panther_similarity_source_not_found7TestSimilarity.test_panther_similarity_source_not_foundJ  sL    HHJ	AB]]2??2KL!!!B/ MLLs   A++
A9c                    [         R                  " 5       nUR                  [        S5      5        [        R
                  " [         R                  SS9   [         R                  " USS9  S S S 5        g ! , (       d  f       g = f)Nr   zAPanther similarity is not defined for the isolated source node 1.r   rK   rB  )r   r8   add_nodes_fromranger   r   NetworkXUnfeasibler  r   s     r    test_panther_similarity_isolated/TestSimilarity.test_panther_similarity_isolatedP  sY    HHJ	q"]]!!U
 !!!A.	
 
 
s   A22
B 	num_paths)rK   r   r   r
   rL   c                 &  ^ [         R                  " / SQ5      n0 n[         R                  " UUSUTS9n[        U5      n[	        U5      U:X  d   e[        U4S jU 5       5      (       d   e[        UT   5      [        [        U5      5      :X  d   eg )Nr  rF   )r  	index_mapr
   c              3   2   >#    U  H  oS    T:H  v   M     g7f)r   Nr"   ).0r   r
   s     r   	<genexpr>GTestSimilarity.test_generate_random_paths_with_start.<locals>.<genexpr>k  s     15aQ46>5s   )r   r8   r   listr   allr   r  )rT   r  r
   r   r  r   r   s     `    r   %test_generate_random_paths_with_start4TestSimilarity.test_generate_random_paths_with_startY  s     HH=>	++
 X 5zY&&&1511111 i'(Dy1A,BBBBr(   c                    0 nSnSn[         R                  " 5       nUR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        [         R                  " XBX1SS9n/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
n1 Sk1 Sk1 Sk1 SkSS1S.nU[	        U5      :X  d   eXq:X  d   eg )Nr   rF   r   rK   r   rH   r  )r  r  r  )r   r   r   )rH   rF   rK   )rF   rK   r   )rF   r   r   )r   r   rK   )rH   rF   r   )r   r   rF   )rF   rK   rF   >   r   rF   r   rH   r   rZ   r[   rM   >   rK   rF   rH   r   r[   rI   >   rK   rF   r   rZ   r[   rM   rI   >   r   r   rH   r   rM   rZ   r+  )r   r8   r:   r   r  rT   r  r  r  r   r   r   expected_maps           r   %test_generate_random_paths_unweighted4TestSimilarity.test_generate_random_paths_unweightedp  s    		HHJ	

1a	

1a	

1a	

1a	

1a((kR
 
 (!$1v
 e,,,(((r(   c                    [         R                  R                  S5        0 nSnSn[        R                  " 5       nUR                  SSSS9  UR                  SSS	S9  UR                  SS
SS9  UR                  SSSS9  UR                  SSSS9  UR                  SS
SS9  [        R                  " XBX1S9n/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/
n1 Sk1 Sk1 Sk1 Sk1 Sk1 SkS .nU[        U5      :X  d   eXq:X  d   eg )!Nr  r   rZ   rJ  rK  g333333?)r  rL  r   rM  r   r{   gffffff?fg?g333333?)r  r  )rM  rL  r  rL  rM  rJ  rK  )r{   rL  r  rL  r  rL  r{   )rM  rJ  rK  rJ  rK  rJ  rL  )rK  rJ  rM  rJ  rK  rJ  rK  )rM  rJ  rK  rJ  rK  rJ  rM  )rM  rJ  rK  rJ  rK  rJ  rK  )r  rL  r  rL  r  rL  r{   )rM  rJ  rM  rJ  rK  rJ  rK  )r{   rL  r  rL  r{   rL  rM  >   r   rF   r   rH   r   rZ   rM   rI   >   r   rK   rF   r   r[   rI   >   r   rK   r[   rI   >   r   rF   r   rH   r   rZ   rM   >   rK   r[   rI   )rM  rL  r  rJ  rK  r{   )rA   r  r  r   r8   r:   r   r  r  s           r   #test_generate_random_paths_weighted2TestSimilarity.test_generate_random_paths_weighted  s   
		r		HHJ	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(((k

 0/////////
 *#&&
 e,,,(((r(   c                    Su  p[         R                  " 5       nUR                  X45        UR                  X4/5        [         R                  " 5       nUR                  X!45        UR                  X4/5        X44 HA  nU H  nXeR                  U   S'   M     UR
                   H  nXuR
                  U   S'   M     MC     S n[         R                  " X4XS9S:X  d   e[         R                  " XCXS9S:X  d   eg)z_G2 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   rq   c                 
    X:H  $ r!   r"   )r   ys     r   
user_matchETestSimilarity.test_symmetry_with_custom_matching.<locals>.user_match  s	    6Mr(   r   rK   N)r   r8   r  r   rn   ry   r   )	rT   rJ  rK  r`   ra   r   rp   r{   r  s	            r   "test_symmetry_with_custom_matching1TestSimilarity.test_symmetry_with_custom_matching  s     XXZ
1&!
A6(#XXZ
1&!
A6(#A%&
6" WW%&
6"  	 ""2jX	
 ""2jX	
r(   r"   N)=__name__
__module____qualname____firstlineno__classmethodrC   rW   rb   rr   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&  
algorithmsro  rp  simrank_algsr   markparametrizer?  rF  rT  rY  r_  rd  ri  rs  r  r  r  r  r  r  r  r  r  r  r  __static_attributes__r"   r(   r   r=   r=   /   s   % %
P 04

#
J#
J1'YR0:0:0:00
	V	V	V
VVV
VVW$
V
V
V 	
  ;;L
 [[1<@K; AK;Z [[1<@; A;6 [[1<@"; A";H [[1<@; A;, [[UL1K 2K0
0
F<*@X@@0/ [[[*5[[Xv.C / 6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
r(   