
    9 j                          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\ R                  R                  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      z/root/GenerationalWealth/GenerationalWealth/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	zignore::RuntimeWarningc            
         [         R                  " S5        [        R                  " 5       n U R	                  / SQ5        U R                  SS5        [        [        R                  " U SSSSS95      n[        U5      S:X  d   e[        S U 5       5      (       d   e[        S	 U 5       5      (       d   e[        R                  " U SSSSS9n[         R                  " [        S
S9   [        U5        S S S 5        [        R                  " U SSSS9n[         R                  " [        S
S9   [        U5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       g = f)Nr   )r         r   r!   r"   *   )path_lengthr
   seedc              3   >   #    U  H  n[        U5      S :H  v   M     g7f)r   N)len.0paths     r   	<genexpr>Atest_generate_random_paths_with_isolated_nodes.<locals>.<genexpr>%   s     0%$s4yA~%s   c              3   0   #    U  H  oS    S :H  v   M     g7fr   N r(   s     r   r+   r,   &   s     .Aw!|s   zprobabilities contain NaNr   r$   r%   )r   r   r   Graphadd_nodes_fromadd_edgelistr   r'   allr   
ValueError)r   pathsr   s      r   .test_generate_random_paths_with_isolated_nodesr8      s   
 

AYJJq! ))!QAabQREu:??0%00000...... ''1!ABOH	z)D	EX 
F ''1!"EH	z)D	EX 
F	E 
F	E
 
F	Es   &D?*E?
E
Ec                 
    X:H  $ Nr/   n1n2s     r   nmatchr>   3   	    8O    c                 
    X:H  $ r:   r/   e1e2s     r   ematchrE   7   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   r1   add_noder3   )r   s    r   getCanonicalrQ   ;   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;S6 r<S7 r=S8 r>S9 r?S: r@S; rAS< rBS= rCS> rDS? rES@ rFSA rGSB rHSC rISD rJSErKgF)GTestSimilarityG   c                 \    [         R                  " S5      q[         R                  " S5        g )Nr   scipy)r   r   np)clss    r   setup_classTestSimilarity.setup_classH   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   r"   )roots)r"   r      )	   r   )r   r^   )r^   r^   r!   r"   r   r   r!      )r\   timeout-C6?)rb   )	r   
star_graphcopyr   r   r6   r   r   NetworkXError)selfG0G1s      r   *test_graph_edit_distance_roots_and_timeout9TestSimilarity.test_graph_edit_distance_roots_and_timeoutN   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!   ra   )r   r1   r   r   r	   r   rg   rh   ri   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 )
Nr   r"   r   redbluecolorr!   c                     U S   US   :H  $ Nrz   r/   r;   s     r   <lambda>DTestSimilarity.test_graph_edit_distance_node_match.<locals>.<lambda>       "W+G2Lr@   )
node_match)r   nodesitemsr   )rg   ri   rs   nattrs        r   #test_graph_edit_distance_node_match2TestSimilarity.test_graph_edit_distance_node_matchx   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 )
Nrm   r"   r   rx   ry   rz   r   c                     U S   US   :H  $ r|   r/   rB   s     r   r}   DTestSimilarity.test_graph_edit_distance_edge_match.<locals>.<lambda>   r   r@   )
edge_matchr   edgesr   minr   )rg   ri   rs   er   s        r   #test_graph_edit_distance_edge_match2TestSimilarity.test_graph_edit_distance_edge_match   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 )Nrm   r"   r   rx   ry   rz   r!   c                     U S   US   :X  a  gg)Nrz   r!   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)Nrz   ry      2   r/   r   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)Nrz   ry   (   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   r   r   r   )rg   ri   rs   r   r   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 )Nrm   r"   r   rx   ry   rz   r   c                     U S   US   :X  a  gg)Nrz   {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)Nrz   ry   皙?      ?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)Nrz   ry   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?r   )rg   ri   rs   r   r   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 )Nr"   rm   r   )upper_bound      )r   r   rg   ri   rs   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   r!   rm   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!   r"   r"   )r`   r`   r_   r_   Nr   r"   )r   r_   r"   r!   )r`   r   r   Nr`   )r`   r!   r   r   )r   r_   r   Nr_   )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'   )rg   ri   rs   r7   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 )Nr"   rm   i  r   )r   r   )rg   ri   rs   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)rG   rG   rG   rJ   )r   rJ   rJ   )r   r   r   r   r]   r   r!   )r   r1   add_edges_fromr   rr   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   rJ   rK   rK   rL   )rL   rG   )r   r   r   rG   rL   )r   rG   rK   )rJ   rL   r   r   ra   r"   r]   )r   DiGraphr   r   rr   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   rm   rn   ra   r!   r"   )r   
MultiGraphr   r   rr   s        r   test_multigraphTestSimilarity.test_multigraphX  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_multidigraphu  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 NrG   rH   rJ   rM   r   r   r   )r   r1   rP   r3   r   re   r>   rE   rg   r   s     r   testCopyTestSimilarity.testCopy  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   r1   rP   r3   r   r>   rE   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 )NrG   rH   rJ   rM   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 )NrG   rH   rJ   rM   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 )NrG   rH   rJ   rM   rK   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 )	NrG   rH   rJ   rK   rM   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 )	NrG   rH   rJ   rM   rK   r  r  r"   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 )NrG   rH   rJ   rL   ErM   rO   d-er  r   rQ   r   r1   rP   r3   r   r>   rE   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 )NrG   rH   rJ   rK   rL   r   rM   rN   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 )NrG   rH   rJ   rK   rL   r   Fr   r  a-dr!  zd-fzd-gze-br  rp   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 )NrG   rH   rJ   rK   rL   rM   rN   r'  r  r"   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 )NrG   rH   rJ   rK   rL   rM   rN   r,  r  r"   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 )NrG   rH   rJ   rK   rL   rM   rN   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 )Nr   r!   퓭I?~$oC?퓭I?r   r!   r"   r   r]   r   absr   UnivrH   ProfAr"   ProfBr   StudentAr]   StudentBr`   r   )r!   r   r"   r]   )r]   r"   )r   r           (-f?@<yX?gЏw?g$=?gPD?glɋݕ?gs,?皙?)importance_factor)r   r   r   r   approxr   rP   r   )rg   r8  r   expectedactualkvs          r    test_simrank_no_source_no_target/TestSimilarity.test_simrank_no_source_no_target5  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   r!   r:  r;  r<  r=  r   r
   r   r>  r@  rH   rA  r"   rB  r   rC  r]   rD  rE  rG  rH  rI  rJ  rK  r
   r   r   r   rL  r   rP   r   rg   r8  r   rM  rN  s        r   test_simrank_source_no_target,TestSimilarity.test_simrank_source_no_target  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   abcder!   r:  r;  r<  )abcdr   r\  rT  r   r>  r   r@  rH   rA  r"   rB  r   rC  r]   rD  rE  rI   rG  rH  rI  )r@  rA  rB  rC  rD  rJ  rU  )r   r   relabel_nodesdict	enumerater   rL  r   rP   r   get_node_attributesvalues)rg   r8  r   rM  rN  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   r!   r   r
   targetr   r>  r@  rH   rA  r"   rB  r   rC  r]   rD  rE  rH  rJ  )rK  r
   rj  gh㈵>rV  rW  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)rg   rm  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   rT  r   r   r   r   r   r8  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   )rj  ru  r  s     r   test_simrank_target_not_found,TestSimilarity.test_simrank_target_not_found  rx  ry  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   r!   gLZ??gR9Y@?gR9Y@?r=  r   IC?ΫcA?r   rT  Hz>r>  rc   gMbP?)r   r   r8  r   rL  
similarity_simrank_similarity_python)rg   r   expected_python_tol4expected_numpy_tol4rN  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   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  atolr   r   rW   arrayr  _simrank_similarity_numpytestingassert_allcloserg   r   rM  rN  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   r  r   rT  r  r  r  r  s       r   #test_simrank_numpy_source_no_target2TestSimilarity.test_simrank_numpy_source_no_target4  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   ri  r  r  )r   r   r  r  rW   r  r  r  s       r   $test_simrank_numpy_source_and_target3TestSimilarity.test_simrank_numpy_source_and_targetB  sG    NN1881Q8O


""8$"?r@   c                 ,   [         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	S
9nX2:X  d   eg )Nr   r!   r"   r   r]   r   g      ?)r   r"   r!   r]   r#   r0   r   r1   r3   panther_similarityrg   r   rM  sims       r   "test_panther_similarity_unweighted1TestSimilarity.test_panther_similarity_unweightedH  s    HHJ	

1a	

1a	

1a	

1a	

1assu5##AqabAr@   c                 $   [         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S9nX2:X  d   eg )Nv1v2r   )wv3r!   v4r"   r   v5g      ?r   g      ?)r  r  r  r  r  r#   )r$   weightr%   r  r  s       r    test_panther_similarity_weighted/TestSimilarity.test_panther_similarity_weightedS  s    HHJ	

4
#	

4
#	

4
#	

4
%	

4
#cDA##At3RP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   r   r_   rF  rt  r   r   rT  )r   r1   r   r   r   r   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)Nr   zAPanther similarity is not defined for the isolated source node 1.r   r!   rT  )r   r1   r2   ranger   r   NetworkXUnfeasibler  r  s     r    test_panther_similarity_isolated/TestSimilarity.test_panther_similarity_isolatedd  sY    HHJ	q"]]!!U
 !!!A.	
 
 
s   A22
B 	num_paths)r!   r   r   r
   r`   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  r"   )r$   	index_mapr
   c              3   2   >#    U  H  oS    T:H  v   M     g7fr.   r/   )r)   r   r
   s     r   r+   GTestSimilarity.test_generate_random_paths_with_start.<locals>.<genexpr>  s     15aQ46>5s   )r   r1   r   r4   r'   r5   r   r  )rg   r  r
   r   r  r   r7   s     `    r   %test_generate_random_paths_with_start4TestSimilarity.test_generate_random_paths_with_startm  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   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   r"   r   r]   r   rm   rn   ra   >   r!   r"   r]   r   rn   r^   >   r!   r"   r   rm   rn   ra   r^   >   r   r   r]   r   ra   rm   r=  r   r1   r3   r   r4   rg   r  r  r$   r   r7   r   expected_maps           r   %test_generate_random_paths_unweighted4TestSimilarity.test_generate_random_paths_unweighted  s    		HHJ	

1a	

1a	

1a	

1a	

1a((kR
 
 (!$1v
 e,,,(((r@   c                    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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1 Sk1 SkS .nU[	        U5      :X  d   eXq:X  d   eg )!Nr   rm   r\  r]  g333333?r  r^  r   r_  r   r   gffffff?fg?g333333?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\  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   r]   r   rm   ra   r^   >   r   r!   r"   r   rn   r^   >   r   r!   rn   r^   >   r   r"   r   r]   r   rm   ra   >   r!   rn   r^   )r_  r^  r  r\  r]  r   r  r  s           r   #test_generate_random_paths_weighted2TestSimilarity.test_generate_random_paths_weighted  s   		HHJ	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(	

3C
(((kR

 0/////////
 *#&&
 e,,,(((r@   c                     [         R                  " S/5      n[         R                  " 5       n[         R                  " X5      S:X  d   eg )Nr   r"   r   r   r   r   s      r   &test_one_node_one_loop_and_empty_graph5TestSimilarity.test_one_node_one_loop_and_empty_graph  s6    ZZ!ZZ\%%b-222r@   c                     [         R                  " SS/5      n[         R                  " U[         R                  " 5       5      S:X  d   e[         R                  " U[         R                  " 5       5      S:X  d   eg )Nr   r   )r   r   r   r   )rg   ri   s     r   'test_one_node_two_loops_and_empty_graph6TestSimilarity.test_one_node_two_loops_and_empty_graph  sX    __ff-.%%b"**,71<<<%%b"//*;<AAAr@   c                     [         R                  " SS/5      n[         R                  " U[         R                  " 5       5      S:X  d   eg )Nr   r   r]   r  r  s     r   test_two_directed_loops&TestSimilarity.test_two_directed_loops  s6    JJ'(%%a6!;;;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   r   c                 
    X:H  $ r:   r/   )r   ys     r   
user_matchETestSimilarity.test_symmetry_with_custom_matching.<locals>.user_match  s	    6Mr@   r  r!   N)r   r1   r2   r   r   r   r   )	rg   r\  r]  rs   rt   r   r   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@   c           	         [         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                  " USSSSSS9n[	        U5      S:  d   eSU;  d   e[        S U 5       5      (       d   e[        S	 UR                  5        5       5      (       d   eg
)z2Basic test for panther_vector_similarity function.r   r!   r"   r   r]   r#   rL   rO  r$   r%   c              3   *   #    U  H	  oS ;   v   M     g7f)r!   r"   r   r]   Nr/   r)   nodes     r   r+   FTestSimilarity.test_panther_vector_similarity_basic.<locals>.<genexpr>  s     8CD<'Cs   c              3   L   #    U  H  nS Us=:*  =(       a    S:*  Os  v   M     g7fr   r!   Nr/   r)   scores     r   r+   r         =u1????   "$Nr   r1   r3   panther_vector_similarityr'   r5   rd  rg   r   r  s      r   $test_panther_vector_similarity_basic3TestSimilarity.test_panther_vector_similarity_basic  s    HHJ	

1a	

1a	

1a	

1a	

1a**1a1qrR3x!||||8C88888=

=====r@   c           	        ^ [         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                  " USSSSSS9m[	        T5      S:X  d   eST;  d   e[        U4S jS	 5       5      (       d   e[        S
 TR                  5        5       5      (       d   eg)z5Test panther_vector_similarity with unweighted graph.r   r!   r"   r   r]   r#   r  c              3   ,   >#    U  H	  oT;   v   M     g 7fr:   r/   r)   r  r  s     r   r+   KTestSimilarity.test_panther_vector_similarity_unweighted.<locals>.<genexpr>  s     8<43;<   r  c              3   L   #    U  H  nS Us=:*  =(       a    S:*  Os  v   M     g7fr  r/   r  s     r   r+   r    r  r  Nr  r  s     @r   )test_panther_vector_similarity_unweighted8TestSimilarity.test_panther_vector_similarity_unweighted
  s    HHJ	

1a	

1a	

1a	

1a	

1a**1a1qrR3x1}}||8<88888=

=====r@   c           
        ^ [         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  [         R                  " USSSSSSS9m[	        T5      S:X  d   eST;  d   e[        S TR                  5        5       5      (       d   e[        U4S jS 5       5      (       d   eg)z3Test panther_vector_similarity with weighted graph.r  r  r   r  r  r!   r  r"   r   r  r   r]   r  r#   )rL   rO  r$   r  r%   c              3   L   #    U  H  nS Us=:*  =(       a    S:*  Os  v   M     g7fr  r/   r  s     r   r+   ITestSimilarity.test_panther_vector_similarity_weighted.<locals>.<genexpr>)  r  r  c              3   ,   >#    U  H	  oT;   v   M     g 7fr:   r/   r  s     r   r+   r  *  s     >+=43;+=r  )r  r  r  Nr  r  s     @r   'test_panther_vector_similarity_weighted6TestSimilarity.test_panther_vector_similarity_weighted  s    HHJ	

4a
(	

4a
(	

4a
(	

4c
*	

4a
(**tqA1XB
 3x1}}3=

=====>+=>>>>>r@   c                     [         R                  " 5       nUR                  / SQ5        [        R                  " [         R
                  5         [         R                  " USS9  SSS5        g! , (       d  f       g= f)z=Test panther_vector_similarity with non-existent source node.r  r   rT  N)r   r1   r   r   r   r   r  r  s     r   /test_panther_vector_similarity_source_not_found>TestSimilarity.test_panther_vector_similarity_source_not_found,  sH    HHJ	AB]]2??+((26 ,++s   A,,
A:c                 ,   [         R                  " 5       nUR                  [        S5      5        UR	                  SS5        [
        R                  " [         R                  5         [         R                  " USS9  SSS5        g! , (       d  f       g= f)z9Test panther_vector_similarity with isolated source node.r   r   r!   r"   rT  N)	r   r1   r2   r  r3   r   r   r  r  r  s     r   'test_panther_vector_similarity_isolated6TestSimilarity.test_panther_vector_similarity_isolated4  s[    HHJ	q"	

1a]]2001((15 211s   &B
Bc                     [         R                  " S5      n[        R                  " [         R                  5         [         R
                  " USSSS9  SSS5        g! , (       d  f       g= f)z%Test raises when D > number of nodes.r   r   r   )rL   rO  Nr   rd   r   r   r  r  r  s     r   *test_panther_vector_similarity_too_large_D9TestSimilarity.test_panther_vector_similarity_too_large_D=  sB    MM!]]2001((Aa8 211s   A
A*c                     [         R                  " S5      n[        R                  " [         R                  5         [         R
                  " USSS9  SSS5        g! , (       d  f       g= f)z%Test raises when k > number of nodes.r   r   r   )rO  Nr  r  s     r   *test_panther_vector_similarity_too_large_k9TestSimilarity.test_panther_vector_similarity_too_large_kD  s@    MM!]]2001((A3 211s   A
A)c                     [         R                  " 5       nUR                  SS5        [         R                  " USSSSS9n[	        U5      S:X  d   eSU;   d   eUS   S:  d   eg)z7Test panther_vector_similarity with a very small graph.r   r!   r"   r#   )rL   rO  r%   N)r   r1   r3   r  r'   r  s      r   *test_panther_vector_similarity_small_graph9TestSimilarity.test_panther_vector_similarity_small_graphK  s^    HHJ	

1a**1a1C3x1}}Cxx1vzzr@   c                     [         R                  " 5       nUR                  / SQ5        [         R                  " USSSSS9n[         R                  " USSSSS9nX#:X  d   eg)z4Test that results are deterministic with fixed seed.r  r   r   r"   r#   )rL   r$   r%   N)r   r1   r   r  )rg   r   sim1sim2s       r   ,test_panther_vector_similarity_deterministic;TestSimilarity.test_panther_vector_similarity_deterministicV  sV    HHJ	AB++AqA12N++AqA12N||r@   c                     [         R                  " S5        [        R                  " 5       nUR	                  / SQ5        [        R
                  " USSSSS9nSU;  d   e[        S U 5       5      (       d   eg)	z/Test panther_similarity with string node names.r   r   r   r   r   rG   r"   r#   )rO  r$   r%   c              3   B   #    U  H  n[        U[        5      v   M     g 7fr:   
isinstancestrr  s     r   r+   FTestSimilarity.test_panther_similarity_string_nodes.<locals>.<genexpr>j       9ST:dC((S   N)r   r   r   r1   r   r  r5   r  s      r   $test_panther_similarity_string_nodes3TestSimilarity.test_panther_similarity_string_nodesa  se    G$HHJ	IJ##AsaQRH#~~9S99999r@   c           	          [         R                  " S5        [        R                  " 5       nUR	                  / SQ5        [        R
                  " USSSSSS9nSU;  d   e[        S U 5       5      (       d   eg	)
z6Test panther_vector_similarity with string node names.r   r  rG   r   r"   r#   r  c              3   B   #    U  H  n[        U[        5      v   M     g 7fr:   r  r  s     r   r+   MTestSimilarity.test_panther_vector_similarity_string_nodes.<locals>.<genexpr>u  r  r  N)r   r   r   r1   r   r  r5   r  s      r   +test_panther_vector_similarity_string_nodes:TestSimilarity.test_panther_vector_similarity_string_nodesl  sh    G$HHJ	IJ**1cQ!QST#~~9S99999r@   c                    [         R                  " S5        [        R                  " S5      nS H  n[        R                  " USUSS9n[        U5      U:X  d   SU S[        U5       S	35       eSU;  d   S
5       e[        R                  " USUSS9n[        U5      U:X  d   SU S[        U5       S	35       eSU;  a  M   S
5       e   g )Nr   r   )r!   r"   r   r]   r   r   r!   r#   )r
   rO  r%   zpanther_similarity k=z
 returned z resultsz$Source node should not be in resultszpanther_vector_similarity k=)r   r   r   rd   r  r'   r  )rg   r   k_valresult_pantherresult_vectors        r   5test_panther_similarity_k_parameter_returns_k_resultsDTestSimilarity.test_panther_similarity_k_parameter_returns_k_resultsw  s    G$MM#(E221Q%bQN~&%/ 'wj^9L8MXV/ N*R,RR*881TVWM}%. .ugZM@R?SS[\. M)Q+QQ) )r@   r/   N)L__name__
__module____qualname____firstlineno__classmethodrY   rj   ru   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r#  r(  r-  r0  r3  r6  r   r8  
algorithmsr  r  simrank_algsr   markparametrizerQ  rX  rf  rk  rq  rv  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   __static_attributes__r/   r@   r   rS   rS   G   sh   % %
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%)N3
B
<
:> > ?$7694			:	:Rr@   rS   )r   networkxr   networkx.algorithms.similarityr   r   r   networkx.generators.classicr   r   r   r	   r)  r*  r   filterwarningsr8   r>   rE   rQ   rS   r/   r@   r   <module>r0     s      
  ;/ 0 45 6.	R Rr@   