
    Vh%                     &   d dl Z d dlZd dlmZmZmZ d dlmZ  G d d      Z	e j                  j                  dd      d        Ze j                  j                  dd      d	        Ze j                  j                  dd
      d        Zd Zd Zd Zy)    N)_remove_nonterminal_leavesmetric_closuresteiner_tree)edges_equalc                   :    e Zd Zed        Zd Zd Zd Zd Zd Z	y)TestSteinerTreec                 F   t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  dd	d       |j                  d	dd       t        j                         }|j                  d
dd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  dd	d       |j                  ddd       |j                  ddd       |j                  d	dd       |j                  d	dd       |j                  d	dd       |j                  d	dd       |j                  d	dd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd       || _        || _        || _        g d| _        g d| _        g d| _        ddg| _	        y )N      
   )weight               r      	                  )r
   r   r   r   r   )r   r   r   )	r
   r   r   r   r   r   r   r   r   koumehlhorn)
nxGraphadd_edgeG1G2G3G1_term_nodesG2_term_nodesG3_term_nodesmethods)clsr   r    r!   s       h/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_steinertree.pysetup_classzTestSteinerTree.setup_class   s   XXZ
Aq$
Aq$
Aq$
Aq$
Aq$
Aq#
Aq#XXZ
Aq#
Aq#
Aq#
Aq#
Aq#
Aq#XXZ
Aq#
Aq#
Aq#
Ar!$
Ar!$
Aq#
Aq#
Ar!$
Ar!$
Aq#
Ar!$
Aq#
Ar!$
Ar!$
Ar!$
Aq#
Ar!$
Ar!$
Aq#
Aq#
Ar!$
Ar!$
Ar!$
Aq#
Ar!$
B1%
B1%
B1%
B1%
B1%
B1%
B1%
B1%
B1%+%;j)    c                     | j                   j                         }|j                  d       t        j                  t
        j                  t        |       y )Nd   )r   copyadd_nodepytestraisesr   NetworkXErrorr   selfGs     r'   test_connected_metric_closurez-TestSteinerTree.test_connected_metric_closureM   s2    GGLLN	

3b&&:r)   c                    t        | j                        }dddddgdfdddg ddfddd	g d
dfdddg ddfddd	g ddfdddg ddfdddddgdfdddg ddfdddg ddfdddg ddfdddddgdfdddddgdfdddg ddfddd	g ddfdddg ddfdddddgdfdddg ddfdddg ddfdddddgdfdddddgdfdddg ddfg}t        t        |j	                  d            |      sJ y )Nr
   r   r   )distancepathr      )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   Tdata)r   r   r   listedges)r2   Mmcs      r'   test_metric_closurez#TestSteinerTree.test_metric_closureR   s   477#QF34I67O<=L9:O<=I67QF34L9:956L9:Aq623QF34L9:O<=I67QF34I67I67QF34Aq623I67+
. 4T 23R888r)   c                    ddddifddddifddddifddddifddddifgddddifddddifddddifddddifddddifgddddifddddifddddifddddifddddifggd	ddd
ifddddifddddifddddifgd	ddd
ifddddifddddifddddifggddddifddddifddddifddddifd
dddifddddifddddifddddifddddifddddifddddifggg}| j                   D ]~  }t        | j                  | j                  | j                  g| j
                  | j                  | j                  g|      D ]*  \  }}}t        |||      t        fd|D              r*J   y )Nr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   methodc              3   h   K   | ])  }t        t        j                  d             |       + yw)Tr;   N)r   r=   r>   ).0
valid_treeSs     r'   	<genexpr>z4TestSteinerTree.test_steiner_tree.<locals>.<genexpr>   s0      "  QWW$W%7 8*Es   /2)
r%   zipr   r    r!   r"   r#   r$   r   any)r2   valid_steiner_treesrD   r3   
term_nodesvalid_treesrH   s         @r'   test_steiner_treez!TestSteinerTree.test_steiner_treem   s    Hb>*Hb>*Ha=)Hb>*Ha=) Hb>*Ha=)Hb>*Hb>*Ha=) Hb>*Hb>*Ha=)Hb>*Ha=)2 Ha=)Ha=)Ha=)Ha=)	 Ha=)Ha=)Ha=)Ha=)	  XqM*XqM*XqM*XqM*XqM*Ha=)XqM*h]+h]+h]+h]+M5
l ll 
	F.1$''477+##T%7%79K9KL#/ 	*:{
 !Jv> &1   	
	r)   c                 F   t        j                         }|j                  dddddifdddddifdddddifdddddifdddddifg       g d	}dddddifdddddifdddddifg}| j                  D ]/  }t	        |||
      }t        |j                  dd      |      r/J  y )Nr
   r   r   r   r   i  r   r   )r   r   r   rC   T)r<   keys)r   
MultiGraphadd_edges_fromr%   r   r   r>   )r2   r3   terminal_nodesexpected_edgesrD   rH   s         r'   test_multigraph_steiner_treez,TestSteinerTree.test_multigraph_steiner_tree   s    MMO	Aq8Q-(Aq8S/*Aq8Q-(Aq8Q-(Aq8Q-(	
 #1xm$1xm$1xm$

 ll 	NFQv>AqwwDtw<nMMM	Nr)   c                 n    t        j                  d      }t        |g d       t        |      g dk(  sJ y )Nr   r:   )r   
path_graphr   r=   r1   s     r'   test_remove_nonterminal_leavesz.TestSteinerTree.test_remove_nonterminal_leaves   s,    MM""1i0Aw)###r)   N)
__name__
__module____qualname__classmethodr(   r4   rA   rO   rV   rY    r)   r'   r   r      s1    =* =*~;
96AFN*$r)   r   rD   )r   r   c                 @   t        j                  d      }t        j                  |t        j	                  |j
                  d      d       t         j                  j                  |ddg| d      }t         j                  j                  |j
                  dd	g      sJ y )
Nr   r   r6   namer
   r   rD   r   r   r
   r   r   )
r   
star_graphset_edge_attributesdictfromkeysr>   approximationr   utilsr   rD   r3   Hs      r'   "test_steiner_tree_weight_attributerm      sw    
aA1dmmAGGR8zJ
%%a!Qz%RA88&&)9:::r)   c                    t        j                  dt         j                        }t        j                  |t        j                  |j                  d      d       |j                  ddd	       t         j                  j                  |t        |      | d
      }t        |j                        dk(  r|j                  ddd      sJ t        d |j                  d      D              dk(  sJ y )Nr   )create_usingr   r6   r`   r   r   r   )r6   rb   r
   )keyc              3   &   K   | ]	  ^ }}|  y w)Nr^   )rF   _dists      r'   rI   z@test_steiner_tree_multigraph_weight_attribute.<locals>.<genexpr>   s     =Dt=s   r;   r   )r   cycle_graphrR   rf   rg   rh   r>   r   ri   r   r=   lenhas_edgesumrk   s      r'   -test_steiner_tree_multigraph_weight_attributerx      s    
qr}}5A1dmmAGGR8zJJJq!aJ 
%%aa
%SAqww<1Aqa!888=AGGG$<==CCCr)   )Nr   r   c                    t        j                  d      }t        j                  ddg      }t         j                  j	                  |ddg|       }t         j
                  j                  |j                  |j                        sJ y )Nr   rc   rd   r
   r   rC   )r   re   r   ri   r   rj   r   r>   )rD   r3   expectedsts       r'   test_steiner_tree_methodsr|      sf    
aAxx()H				&	&q1a&	&	@B88(..999r)   c                      t        j                  d      } t        j                  t        d      5  t         j
                  j                  | ddgd       d d d        y # 1 sw Y   y xY w)Nr   z6invalid_method is not a valid choice for an algorithm.)matchr
   r   invalid_method)rT   rD   )r   re   r.   r/   
ValueErrorri   r   r3   s    r'    test_steiner_tree_method_invalidr      s]    
aA	R
 Y 	%%aAGW%XY Y Ys   %AA(c                      t        j                  d      } | j                  g d       t        | g d       t	        |       g dk(  sJ y )Nr   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   rX   rS   r   r=   r   s    r'   <test_steiner_tree_remove_non_terminal_leaves_self_loop_edgesr      sC     	bA => q,/ 7l"""r)   c                      t        j                         } | j                  t        d      D cg c]	  }||dz   f c}       | j                  g d       t	        | g d       t        |       g dk(  sJ y c c}w )Nr   r
   )r   r   r   r   r   r   )r   rR   rS   ranger   r=   )r3   is     r'   @test_steiner_tree_non_terminal_leaves_multigraph_self_loop_edgesr      sh     	A%)4Qq!a%j45=> q,/ 7l""" 5s   A6)r.   networkxr   -networkx.algorithms.approximation.steinertreer   r   r   networkx.utilsr   r   markparametrizerm   rx   r|   r   r   r   r^   r)   r'   <module>r      s      
 '}$ }$@ #67; 8; #67D 8D #<=: >:Y##r)   