
    h                     f    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  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_graphc                 
    X:H  $ N n1n2s     [/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/tests/test_similarity.py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)nxGraphadd_nodeadd_edge)Gs    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- r7S. r8S/ r9S0 r:S1r;g2)3TestSimilarity%   c                 \    [         R                  " S5      q[         R                  " S5        g )Nnumpyscipy)pytestimportorskipnp)clss    r   setup_classTestSimilarity.setup_class&   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 )N      )roots)r7         )	   r9   )r9   r;   )r;   r;      r7   r   r   r=      )r8   timeout-C6?)r@   )	r#   
star_graphcopyr/   raises
ValueErrorr   NodeNotFoundNetworkXError)selfG0G1s      r   *test_graph_edit_distance_roots_and_timeout9TestSimilarity.test_graph_edit_distance_roots_and_timeout,   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            r=   r?   )r#   r$   r   r   r	   r   rH   rI   rJ   G2G3s        r   test_graph_edit_distance'TestSimilarity.test_graph_edit_distance<   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 )
Nr6   r7   r   redbluecolorr=   c                     U S   US   :H  $ Nr[   r   r   s     r   <lambda>DTestSimilarity.test_graph_edit_distance_node_match.<locals>.<lambda>`       "W+G2Lr   )
node_match)r   nodesitemsr   )rH   rJ   rT   nattrs        r   #test_graph_edit_distance_node_match2TestSimilarity.test_graph_edit_distance_node_matchV   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 )
NrN   r7   r   rY   rZ   r[   r9   c                     U S   US   :H  $ r]   r   r   s     r   r^   DTestSimilarity.test_graph_edit_distance_edge_match.<locals>.<lambda>o   r`   r   )
edge_matchr   edgesrc   minr   )rH   rJ   rT   ere   s        r   #test_graph_edit_distance_edge_match2TestSimilarity.test_graph_edit_distance_edge_matche   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 )NrN   r7   r   rY   rZ   r[   r=   c                     U S   US   :X  a  gg)Nr[   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)Nr[   rZ      2   r   re   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)Nr[   rZ   (   d   r   r|   s    r   node_ins_costHTestSimilarity.test_graph_edit_distance_node_cost.<locals>.node_ins_cost   s    G}&r   )rw   r}   r   )r   rb   rc   r   )rH   rJ   rT   rd   re   rw   r}   r   s           r   "test_graph_edit_distance_node_cost1TestSimilarity.test_graph_edit_distance_node_costt   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 )NrN   r7   r   rY   rZ   r[   r9   c                     U S   US   :X  a  gg)Nr[   {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)Nr[   rZ   皙?      ?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)Nr[   rZ   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?rl   )rH   rJ   rT   ro   re   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 )Nr7   rN   r6   )upper_bound      )r   r   rH   rJ   rT   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 )Nr9   r=   rN   c                 R    [        [        U 5      5      [        [        US S95      4$ )Nc                     S U ;   U 4$ r   r   )xs    r   r^   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   r=   r=   r7   r7   )r>   r>   r<   r<   Nr   r7   )r   r<   r7   r=   )r>   r   r   Nr>   )r>   r=   r   r   )r   r<   r   Nr<   )r>   r<   r7   r   )r>   r<   r   r   )r   r   r   )r   r<   r>   r   )r   r   r   )r   r   r   )r   r   r   len)rH   rJ   rT   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 )Nr7   rN   i  r   )r   r   )rH   rJ   rT   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   r   )r   r   r   )r   r   r   r   r:   r6   r=   )r#   r$   add_edges_fromr   rS   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   r   r   r   r   )r   r   )r   r   r   )r   r   )r   r   r   )r   r   r   r   r?   r7   r:   )r#   DiGraphr   r   rS   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   rN   rO   r?   r=   r7   )r#   
MultiGraphr   r   rS   s        r   test_multigraphTestSimilarity.test_multigraph6  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   r6   )r#   MultiDiGraphr   r   r   s      r   test_multidigraph TestSimilarity.test_multidigraphS  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   r   r   r    ra   rk   r   )r#   r$   r%   r&   r   rC   r   r   rH   r'   s     r   testCopyTestSimilarity.testCopyk  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#   r$   r%   r&   r   r   r   r   s      r   testSameTestSimilarity.testSamet      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   r   r   r    badr   r=   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   r   r   r    Zr   r=   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   r   r   r    r   r   r=   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   r   r   r   r    a-cr   r=   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   r   r   r    r   r   r   r7   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   r   r   r   Er    r"   d-er   r9   r(   r#   r$   r%   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   r   r   r   r   r  r    r!   c-dzc-er   r:   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   r   r   r   r   r  Fr'   r   a-dr  zd-fzd-gze-br   rQ   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   r   r   r   r   r    r!   r
  r   r7   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   r   r   r   r   r    r!   r  r   r7   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   r   r   r   r   r    r!   r   r   r=   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 )Nr6   r=   퓭I?~$oC?퓭I?r   r=   r7   r9   r:   r   absr   Univr   ProfAr7   ProfBr9   StudentAr:   StudentBr>   r   )r=   r9   r7   r:   )r:   r7   )r9   r           (-f?@<yX?gЏw?g$=?gPD?glɋݕ?gs,?皙?)importance_factor)r#   r   rc   r/   approxr   r%   r   )rH   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 )Nr6   r=   r  r  r  r   r   sourcer   r!  r#  r   r$  r7   r%  r9   r&  r:   r'  r(  r*  r+  r,  r-  r.  r8  r#   r   r/   r/  r   r%   r   rH   r  r'   r0  r1  s        r   test_simrank_source_no_target,TestSimilarity.test_simrank_source_no_targeta  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 )Nr6   abcder=   r  r  r  )abcdro   r@  r7  r   r!  r   r#  r   r$  r7   r%  r9   r&  r:   r'  r(  r   r*  r+  r,  )r#  r$  r%  r&  r'  r-  r9  )r#   r   relabel_nodesdict	enumerater/   r/  r   r%   r   get_node_attributesvalues)rH   r  r'   r0  r1  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 )Nr6   r=   r   r8  targetr   r!  r#  r   r$  r7   r%  r9   r&  r:   r'  r(  r+  r-  )r.  r8  rN  gh㈵>r:  r;  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 )Nr6   rt   )max_iterations)r#   r   r/   rD   ExceededMaxIterations)rH   rQ  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)Nr6   Source node 10 not in Gmatchrt   r7  r#   r   r/   rD   rF   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)Nr6   zTarget node 10 not in GrY  rt   )rN  r[  r   s     r   test_simrank_target_not_found,TestSimilarity.test_simrank_target_not_found  r^  r_  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 )Nr6   r=   gLZ??gR9Y@?gR9Y@?r   r   IC?ΫcA?r   r7  Hz>r!  rA   gMbP?)r#   r   r  r/   r/  
similarity_simrank_similarity_python)rH   r'   expected_python_tol4expected_numpy_tol4r1  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 )	Nr6   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   r1   arrayrg  _simrank_similarity_numpytestingassert_allcloserH   r'   r0  r1  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 )Nr6   rn  r   r7  rf  ro  rq  rv  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 )Nr6   r   r   rM  rf  ro  )r#   r   rg  rs  r1   rt  ru  rv  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   r=   r7   r9   r:   r   g      ?)r9   r7   r=   r:   )path_lengthr1   randomseedr#   r$   r&   panther_similarityrH   r'   r0  sims       r   "test_panther_similarity_unweighted1TestSimilarity.test_panther_similarity_unweighted&  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v2r6   )wv3r=   v4r7   r   v5g      ?r   g      ?)r  r  r  r  r  )r  weightr  r  s       r    test_panther_similarity_weighted/TestSimilarity.test_panther_similarity_weighted3  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)r>   r   )r   r9   r<   r)  rX  rY  rt   r7  )r#   r$   r   r/   rD   rF   r  r   s     r   (test_panther_similarity_source_not_found7TestSimilarity.test_panther_similarity_source_not_found@  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)Nr6   zAPanther similarity is not defined for the isolated source node 1.rY  r=   r7  )r#   r$   add_nodes_fromranger/   rD   NetworkXUnfeasibler  r   s     r    test_panther_similarity_isolated/TestSimilarity.test_panther_similarity_isolatedF  sY    HHJ	q"]]!!U
 !!!A.	
 
 
s   A22
B 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 )Nrt   r7   r   r=   r9   r:   r  )r  	index_mapr  )r9   r   r9   )r:   r7   r=   )r7   r=   r   )r7   r   r9   )r9   r   r=   )r:   r7   r   )r9   r   r7   )r7   r=   r7   >   r   r7   r9   r:   r6   rN   rO   r?   >   r=   r7   r:   r6   rO   r;   >   r=   r7   r9   rN   rO   r?   r;   >   r   r9   r:   r6   r?   rN   r   )r#   r$   r&   generate_random_pathslistrH   r  	num_pathsr  r'   r   r   expected_maps           r   %test_generate_random_paths_unweighted4TestSimilarity.test_generate_random_paths_unweightedO  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  rt   rN   r@  rA  g333333?)r  rB  r   rC  r   ro   gffffff?fg?g333333?)r  r  )rC  rB  r  rB  rC  r@  rA  )ro   rB  r  rB  r  rB  ro   )rC  r@  rA  r@  rA  r@  rB  )rA  r@  rC  r@  rA  r@  rA  )rC  r@  rA  r@  rA  r@  rC  )rC  r@  rA  r@  rA  r@  rA  )r  rB  r  rB  r  rB  ro   )rC  r@  rC  r@  rA  r@  rA  )ro   rB  r  rB  ro   rB  rC  >   r   r7   r9   r:   r6   rN   r?   r;   >   r   r=   r7   r6   rO   r;   >   r   r=   rO   r;   >   r   r7   r9   r:   r6   rN   r?   >   r=   rO   r;   )rC  rB  r  r@  rA  ro   )r1   r  r  r#   r$   r&   r  r  r  s           r   #test_generate_random_paths_weighted2TestSimilarity.test_generate_random_paths_weighteds  s   
		r		HHJ	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(((k

 0/////////
 *#&&
 e,,,(((r   c                 N   [        S5        [        S5        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[        S5        [        R                  " X4XS9S:X  d   e[        S	5        [        R                  " XCXS9S:X  d   eg )
Nz%G2 is edge (a,b) and G3 is edge (a,a)z7but node order for G2 is (a,b) while for G3 it is (b,a)r   re   c                 
    X:H  $ r   r   )r   ys     r   r^   CTestSimilarity.test_symmetry_with_custom_matching.<locals>.<lambda>  s    QVr   z!Starting G2 to G3 GED calculationr   r=   z!Starting G3 to G2 GED calculation)printr#   r$   r  r   rb   rm   r   )	rH   r@  rA  rT   rU   r'   rd   ro   rZ  s	            r   "test_symmetry_with_custom_matching1TestSimilarity.test_symmetry_with_custom_matching  s
   56GHXXZ
1&!
A6(#XXZ
1&!
A6(#A%&
6" WW%&
6"  
 $12%%bQUVVVV12%%bQUVVVVr   r   N)<__name__
__module____qualname____firstlineno__classmethodr3   rK   rV   rf   rp   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parametrizer4  r<  rJ  rO  rU  r\  ra  rk  rw  rz  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/")H')RWr   r*   )r/   networkxr#   networkx.algorithms.similarityr   r   r   networkx.generators.classicr   r   r   r	   r   r   r(   r*   r   r   r   <module>r     s<      
 	MW MWr   