
    h                        S SK r S SKrS SKrS SKJrJr  S r " S S5      r " S S5      r	\R                  R                  S\R                  \R                  \R                  \R                  45      S	 5       r\R                  R                  S
SSS.S4SS0SS0S.S445      S 5       r\R                  R                  S\R                  \R                  45      S 5       r\R                  R                  S
SSS.S4SS0SS0S.S445      S 5       r\R                  R                  S\R                  \R                  45      S 5       r\R                  R                  S
SSS.S4SS0SS0S.S445      S 5       rS rS r\R                  R                  S\R                  \R                  \R                  \R                  45      S 5       r\R                  R                  S\R                  \R                  45      S 5       r\R                  R                  S\R                  \R                  45      S 5       rS r\R                  R                  S\R                  \R                  \R                  \R                  /5      S 5       r\R                  R                  S\R                  \R                  \R                  \R                  /5      S  5       rS! r\R                  R                  S\R                  \R                  /5      S" 5       r\R                  R                  S\R                  \R                  /5      S# 5       r S$ r!\R                  R                  S%\R                  " 5       \R                  " 5       \R                  " 5       \R                  " 5       45      S& 5       r"\R                  R                  S%\R                  " 5       \R                  " 5       45      S' 5       r#\R                  R                  S%\R                  " 5       \R                  " 5       45      S( 5       r$g))    N)edges_equalnodes_equalc                  f    [         R                  " 5       n [         R                  " U 5      / :X  d   eg N)nxGraphdegree_histogramGs    V/var/www/html/env/lib/python3.13/site-packages/networkx/classes/tests/test_function.pytest_degree_histogram_emptyr   	   s&    

Aq!R'''    c                       \ 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S rS rSrg)TestFunction   c                 d   [         R                  " / SQ/ SQ/ S.SS9U l        SSSSS	S
.U l        [	        [        S5      5      U l        / SQU l        [         R                  " / SQ/ SQ/ S.5      U l	        SSSSS	S
.U l
        SSS	S	S	S
.U l        [	        [        S5      5      U l        / SQU l        g )N         r   r   r   r   r      Test)namer   r   r   r   )r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   GdegreelistrangeGnodesGedgesDiGraphDGDGin_degreeDGout_degreeDGnodesDGedgesselfs    r   setup_methodTestFunction.setup_method   s    iI"=FKqQ1558nF**yR@A Q1q9 !aA!:E!H~Gr   c                 L   [        U R                  R                  5       [        [        R                  " U R                  5      5      5      (       d   e[        U R
                  R                  5       [        [        R                  " U R
                  5      5      5      (       d   eg r   )r   r   nodesr%   r   r*   r/   s    r   
test_nodesTestFunction.test_nodes   s`    466<<>40@+ABBBB477==?D$''1B,CDDDDr   c           
         [        U R                  R                  5       [        [        R                  " U R                  5      5      5      (       d   e[        U R                  R                  5       5      [        [        R                  " U R                  5      5      :X  d   e[        U R                  R                  / SQS9[        [        R                  " U R                  / SQS95      5      (       d   e[        U R                  R                  / SQS95      [        [        R                  " U R                  / SQS95      :X  d   eg )N)r   r   r   nbunch)r   r   edgesr%   r   sortedr*   r/   s    r   
test_edgesTestFunction.test_edges   s    466<<>40@+ABBBBdggmmo&&$''1B*CCCCFFLL	L*D$&&1S,T
 
 	
 
 dggmm9m56&HHTWWY/;
 
 	
 
r   c           
         [        U R                  R                  5       [        [        R                  " U R                  5      5      5      (       d   e[        U R                  R                  5       5      [        [        R                  " U R                  5      5      :X  d   e[        U R                  R                  SS/S9[        [        R                  " U R                  SS/S95      5      (       d   e[        U R                  R                  SS/S95      [        [        R                  " U R                  SS/S95      :X  d   e[        U R                  R                  SS9[        [        R                  " U R                  SS95      5      (       d   e[        U R                  R                  SS95      [        [        R                  " U R                  SS95      :X  d   eg )Nr   r   r8   weightr?   )r   r   degreer%   r   r;   r*   r/   s    r   test_degreeTestFunction.test_degree(   ss   466==?D4661B,CDDDDdggnn&'6"))DGG2D+EEEEFFMM!QM($ryyA/O*P
 
 	
 
 dggnnQFn34IIdggq!f-9
 
 	
 
 FFMMM*D466(1S,T
 
 	
 
 dggnnHn56&IIdggh/;
 
 	
 
r   c                 L   [        U R                  R                  S5      5      [        [        R                  " U R                  S5      5      :X  d   e[        U R                  R                  S5      5      [        [        R                  " U R                  S5      5      :X  d   eg )Nr   )r%   r   	neighborsr   r*   r/   s    r   test_neighborsTestFunction.test_neighbors8   sn    DFF$$Q'(Ddffa1H,IIIIDGG%%a()T",,tww2J-KKKKr   c                     U R                   R                  5       [        R                  " U R                   5      :X  d   eU R                  R                  5       [        R                  " U R                  5      :X  d   eg r   )r   number_of_nodesr   r*   r/   s    r   test_number_of_nodes!TestFunction.test_number_of_nodes<   V    vv%%'2+=+=dff+EEEEww&&(B,>,>tww,GGGGr   c                     U R                   R                  5       [        R                  " U R                   5      :X  d   eU R                  R                  5       [        R                  " U R                  5      :X  d   eg r   )r   number_of_edgesr   r*   r/   s    r   test_number_of_edges!TestFunction.test_number_of_edges@   rL   r   c                     U R                   R                  5       [        R                  " U R                   5      :X  d   eU R                  R                  5       [        R                  " U R                  5      :X  d   eg r   )r   is_directedr   r*   r/   s    r   test_is_directedTestFunction.test_is_directedD   sR    vv!!#r~~dff'====ww""$tww(????r   c           	      D   U R                   R                  5       n/ SQn[        R                  " X5        [	        UR                  U5      / SQ5      (       d   eU R                   R                  5       n[        R                  " XSS9  [	        UR                  USS9SSS	S04SS
S	S04SSS	S04/5      (       d   eU R                   R                  5       nS/n[        R                  " X5        [        U[        U R                   5      U-   5      (       d   eU R                   R                  5       n/ n[        R                  " X5        [        UR                  U R                  5      (       d   e[	        UR
                  U R                   R
                  5      (       d   eg )N      r      )rW   rX   )rW   r   rW   rY          @r@   TdatarW   rX   r?   r   rY   )
r   copyr   add_starr   r:   r   r%   r4   r'   r0   r   nlists      r   test_add_starTestFunction.test_add_starH   sO   FFKKM 
A1775>+IJJJJFFKKM
AS)GGEG%R(C)R(C)R(C)
 
 	
 
 FFKKM
A1d466lU23333FFKKM
A177DKK0000177DFFLL1111r   c           	         U R                   R                  5       n/ SQn[        R                  " X5        [	        UR                  U5      / SQ5      (       d   eU R                   R                  5       n[        R                  " XSS9  [	        UR                  USS9SSS	S04SS
S	S04S
SS	S04/5      (       d   eU R                   R                  5       nS/n[        R                  " X5        [	        UR                  U5      / 5      (       d   e[        U[        U R                   5      S/-   5      (       d   eU R                   R                  5       n[        S/5      n[        R                  " X5        [	        UR                  S/5      / 5      (       d   e[        U[        U R                   5      S/-   5      (       d   eU R                   R                  5       nS/n[        R                  " X5        [	        UR                  U5      / 5      (       d   e[        U[        U R                   5      S/-   5      (       d   eU R                   R                  5       n[        S/5      n[        R                  " X5        [	        UR                  S/5      / 5      (       d   e[        U[        U R                   5      S/-   5      (       d   eU R                   R                  5       n/ n[        R                  " X5        [	        UR
                  U R                   R
                  5      (       d   e[        U[        U R                   5      5      (       d   eU R                   R                  5       n[        / 5      n[        R                  " X5        [	        UR
                  U R                   R
                  5      (       d   e[        U[        U R                   5      5      (       d   eg )NrV   )rZ   rX   r   r   rY   r\   r@   Tr]   rW   rX   r?   r   rY   node)	r   r_   r   add_pathr   r:   r   r%   iterra   s      r   test_add_pathTestFunction.test_add_pathd   s   FFKKM 
A1775>+IJJJJFFKKM
AS)GGEG%R(C)R(C)R(C)
 
 	
 
 FFKKM
A1775>2....1d466lfX56666FFKKMfX
A177F8,b11111d466lfX56666FFKKM
A1775>2....1d466lbT12222FFKKMbT

A177B4="----1d466lbT12222FFKKM
A177DFFLL11111d466l++++FFKKMR
A177DFFLL11111d466l++++r   c                    U R                   R                  5       n/ SQn/ SQ/ SQ/n[        R                  " X5        [	        UR                  U5      5      U;   d   eU R                   R                  5       nSSSS04SSSS04SS	SS04S	SSS04/SSSS04SS	SS04S	SSS04SSSS04//n[        R                  " XSS
9  [	        UR                  USS95      U;   d   eU R                   R                  5       nS/n[        R                  " X5        [        U[        U R                   5      U-   5      (       d   eU R                   R                  5       n/ n[        R                  " X5        [        UR                  U R                  5      (       d   e[        UR
                  U R                   R
                  5      (       d   eg )NrV   )rZ   r[   rf   rg   )rZ   rf   rg   )rY   rW   rW   rX   r?         ?rY   r   r@   Tr]   )r   r_   r   	add_cycler;   r:   r   r%   r4   r'   r   )r0   r   rb   oklistss       r   test_add_cycleTestFunction.test_add_cycle   s   FFKKM 44
 	Qaggen%000FFKKM R(C)R(C)R(C)R(C)	 R(C)R(C)R(C)R(C)	
 	Qc*agge$g/0G;;;FFKKM
Q1d466lU23333FFKKM
Q177DKK0000177DFFLL1111r   c                    U R                   R                  / SQ5      R                  [        R                  " U R                   / SQ5      R                  :X  d   eU R                  R                  / SQ5      R                  [        R                  " U R                  / SQ5      R                  :X  d   eU R                   R                  / SQ5      R                  [        R
                  " U R                   / SQ5      R                  :X  d   eU R                  R                  / SQ5      R                  [        R
                  " U R                  / SQ5      R                  :X  d   e[        R
                  " U R                   R                  / SQ5      / SQ5      nUR                  U R                   Ld   eUR                  U R                   R                  / SQ5      R                  :X  d   eg )N)r   r   r   r   r   )r   subgraphadjr   r*   induced_subgraph_graph)r0   Hs     r   test_subgraphTestFunction.test_subgraph   sV   FFOOL)--TVV\1R1V1VV	
V GG\*.."++dgg|2T2X2XX	
X FFOOL)--""466<8<<=	
= GG\*..""477L9==>	
>  =yIxxtvv%%%uu	266666r   c                 d   U R                   R                  SS/5      R                  [        R                  " U R                   SS/5      R                  :X  d   eU R                  R                  SS/5      R                  [        R                  " U R                  SS/5      R                  :X  d   eg )Nr#   r    )r   edge_subgraphru   r   r*   r/   s    r   test_edge_subgraphTestFunction.test_edge_subgraph   s    FF  &&!1266(89==>	
> GG!!66"2377&&)9:>>?	
?r   c                 2   [         R                  " U R                  SS9n[        U[	        U R                  5      5      (       d   eUR
                  0 :X  d   eUR                  0 R                  U R                  R                  5       0 5      :X  d   eUR                  0 R                  U R                  R                  5       0 5      :X  d   e[         R                  " U R                  5      n[        U[	        U R                  5      5      (       d   eUR
                  U R                  R
                  :X  d   eUR                  U R                  R                  :X  d   eUR                  0 R                  U R                  R                  5       0 5      :X  d   eg )NF)	with_data)
r   create_empty_copyr   r   r%   graph_nodefromkeysr4   _adjr0   r   s     r   test_create_empty_copy#TestFunction.test_create_empty_copy   s     591d466l++++ww"}}ww"++dffllnb9999vvTVV\\^R8888  (1d466l++++ww$&&,,&&&ww$&&,,&&&vvTVV\\^R8888r   c                 T    [         R                  " U R                  5      / SQ:X  d   eg )N)r   r   r   r   r   )r   r	   r   r/   s    r   test_degree_histogram"TestFunction.test_degree_histogram   s    ""466*o===r   c                     [         R                  " U R                  5      S:X  d   e[         R                  " U R                  5      S:X  d   e[         R                  " 5       nUR                  S5        [         R                  " U5      S:X  d   eg )Ng      ?g333333?r           )r   densityr   r*   r   add_noder   s     r   test_densityTestFunction.test_density   sd    zz$&&!S(((zz$''"c)))HHJ	

1zz!}###r   c                     [         R                  " 5       nUR                  SS5        [         R                  " U5      S:X  d   eUR                  SS5        [         R                  " U5      S:X  d   eg )Nr   r   r   r\   )r   r   add_edger   r   s     r   test_density_selfloop"TestFunction.test_density_selfloop   sU    HHJ	

1azz!}###	

1azz!}###r   c                 2   [         R                  " U R                  5      nUR                  (       d   e[        R
                  " [         R                  UR                  S5        [        R
                  " [         R                  UR                  S/5        [        R
                  " [         R                  UR                  S5        [        R
                  " [         R                  UR                  S/5        [        R
                  " [         R                  UR                  SS5        [        R
                  " [         R                  UR                  S/5        [        R
                  " [         R                  UR                  SS5        [        R
                  " [         R                  UR                  S/5        [        R
                  " [         R                  UR                  5        [        R
                  " [         R                  UR                   5        g )Nr   r   r#   )r   freezer   frozenpytestraisesNetworkXErrorr   add_nodes_fromremove_noderemove_nodes_fromr   add_edges_fromremove_edgeremove_edges_fromclear_edgesclearr   s     r   test_freezeTestFunction.test_freeze   s3   IIdffxxxb&&

A6b&&(8(81#>b&&q9b&&(;(;aSAb&&

Aq9b&&(8(86(Cb&&q!<b&&(;(;fXFb&&6b&&0r   c                    [         R                  " U R                  5      (       a   e[         R                  " U R                  5      nUR                  [         R                  " U R                  5      :X  d   eUR                  (       d   eg r   )r   	is_frozenr   r   r   r   s     r   test_is_frozenTestFunction.test_is_frozen  sW    <<''''IIdffxx2<<////xxxr   c                     [         R                  " [         R                  " S5      5      nUR                  S   nSUS'   US   S:X  d   eg )Nr   r   Tnode_attribute)r   r   
path_graphr4   )r0   r   rh   s      r   6test_node_attributes_are_still_mutable_on_frozen_graphCTestFunction.test_node_attributes_are_still_mutable_on_frozen_graph  sE    IIbmmA&'wwqz!%$%---r   c                     [         R                  " [         R                  " S5      5      nUR                  S   nSUS'   US   S:X  d   eg )Nr   r   Tedge_attribute)r   r   r   r:   )r0   r   edges      r   6test_edge_attributes_are_still_mutable_on_frozen_graphCTestFunction.test_edge_attributes_are_still_mutable_on_frozen_graph  sE    IIbmmA&'wwv!%$%---r   c                    [         R                  " S5      n[        R                  " [	        U5      S5      n[	        [         R
                  " XS   5      5      n[        U5      [        U5      S-
  :X  d   e[         R                  " S5      n[        R                  " [	        U5      S5      S   n[	        [         R
                  " X5      5      nUS:w  a  US:w  a  [        U5      S:X  d   eO[        U5      S:X  d   e[         R                  " S5      n[	        [         R
                  " US5      5      n[        U5      S:X  d   eg )Nd   r   r   c   r   )	r   complete_graphrandomsampler%   rE   lenr   
star_graphr0   r   popnborsrh   s        r   test_neighbors_complete_graph*TestFunction.test_neighbors_complete_graph  s    !!#&mmDK+R\\%Q015zSZ!^+++c"}}T%[!,Q/R\\%./19u:?"?u:?"? b!R\\%+,5zRr   c                    [         R                  " S5      n[        R                  " [	        U5      S5      n[         R
                  " XS   5      n[        U5      S:X  d   e[         R                  " S5      n[        R                  " [	        U5      S5      S   n[         R
                  " X5      nUS:w  a  US:w  a  [        U5      S:X  d   eO[        U5      S:X  d   e[         R                  " S5      n[         R
                  " US5      n[        U5      S:X  d   e[         R                  " 5       nUR                  [        S5      5        [         R
                  " US5      n[        U5      S:X  d   eg )	Nr   r   r   r   a   b   
   	   )r   r   r   r   r%   non_neighborsr   r   r   r   r   r&   r   s        r   test_non_neighborsTestFunction.test_non_neighbors.  s%   !!#&mmDK+  A/5zQc"}}T%[!,Q/  -19u:###u:### b!  *5zQ 
U2Y'  *5zQr   c                    [         R                  " S5      n[        [         R                  " U5      5      n[	        U5      S:X  d   e[         R
                  " S5      n/ SQn[        [         R                  " U5      5      nU H  u  pEXE4U;   a  M  XT4U;   a  M   e   [         R                  " S5      n/ SQn[        [         R                  " U5      5      nU H  u  pEXE4U;   a  M  XT4U;   a  M   e   [         R                  " 5       nUR                  / SQ5        / SQn[        [         R                  " U5      5      nU H
  nXb;   a  M
   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%   	non_edgesr   r   r   r)   r   )r0   r   nedgesexpecteduves          r   test_non_edgesTestFunction.test_non_edgesI  s   !!!$bll5)*6{aa +bll5)*DA6V#v'777  a Cbll5)*DA6V#v'777  

56+bll5)*A;; r   c                    [         R                  " 5       n[         R                  " U5      (       a   e[         R                  " S5      n[         R                  " U5      (       a   e[         R                  " US5      (       a   eUR	                  S5        UR                  SSSS9  [         R                  " U5      (       a   e[         R                  " US5      (       d   e[         R                  " 5       nUR                  / SQ5        [         R                  " U5      (       d   e[         R                  " US5      (       d   eUR                  5       n[         R                  " U5      (       d   e[         R                  " US5      (       d   e[        R                  " [         R                  [         R                  US5        g )	Nr   r   r   r@   r   )03r   r   1)r   r   r   r   2r   )r   r   r   r   r   r   r   r   r#   )r   r   is_weightedr   r   r   r)   add_weighted_edges_fromto_undirectedr   r   r   r   s     r   test_is_weightedTestFunction.test_is_weightedc  sE   HHJ>>!$$$$MM!>>!$$$$>>!V,,,,	

1	

1a
">>!$$$$~~a((((JJL	!!		
 ~~a    ~~a,,,,OO~~a    ~~a,,,,b&&6Br   c                    [         R                  " 5       n[         R                  " U5      (       a   eUR                  S5        UR	                  / SQ5        [         R                  " U5      (       a   eUR                  SSSS9  [         R                  " US5      (       a   eUR                  / SQ5        SUS   S	   S
'   [         R                  " U5      (       a   e[         R                  " US5      (       a   eSUS   S   S'   [         R                  " US5      (       d   e[         R                  " U5      (       d   e[         R                  " 5       nUR                  / SQ5        [         R                  " U5      (       d   e[         R                  " US5      (       a   e[         R                  " US5      (       d   e[        R                  " [         R                  [         R                  US5        g )Nr   )r   r   r   r   r   r   r@   r#   )r   r   )r      bluer   colorr   r?   r   )r   r   )r   r   r   r   )r   r   r   )r   r   r   r   )r   r   is_negatively_weightedr   r   r   r   r)   r   r   r   r   r   s     r   test_is_negatively_weighted(TestFunction.test_is_negatively_weighted  s   HHJ,,Q////	

1	&,,Q////	

1a
",,Q7777	12!!Q,,Q////,,Q7777!Q((F3333((++++JJL	!!		
 ((++++,,Q
;;;;((J7777b&&(A(A1fMr   )	r*   r.   r+   r-   r,   r   r$   r(   r'   N)__name__
__module____qualname____firstlineno__r1   r5   r<   rB   rF   rJ   rO   rS   rc   rk   rq   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r   r   r   r      s    	HE

 LHH@282,h$2L7(

9>$$1.. *64CB#Nr   r   c                   N    \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
rg)TestCommonNeighborsi  c                 n   ^  [        [        R                  5      T l        U 4S jn[        U5      T l        g )Nc                 J   > [        TR                  XU5      5      nXC:X  d   eg r   )r;   func)r   r   r   r   resultclss        r   	test_func2TestCommonNeighbors.setup_class.<locals>.test_func  s$    CHHQ1-.F%%%r   )staticmethodr   common_neighborsr   test)r   r   s   ` r   setup_classTestCommonNeighbors.setup_class  s(     3 34	&  	*r   c                 \    [         R                  " S5      nU R                  USS/ SQ5        g )Nr   r   r   )r   r   r   r   r   r  r   s     r   test_K5TestCommonNeighbors.test_K5  s$    a 		!Q9%r   c                 Z    [         R                  " S5      nU R                  USSS/5        g )Nr   r   r   r   )r   r   r  r   s     r   test_P3TestCommonNeighbors.test_P3  $    MM!		!QA3r   c                 Z    [         R                  " S5      nU R                  USSS/5        g )Nr   r   r   r   )r   r   r  r   s     r   test_S4TestCommonNeighbors.test_S4  r  r   c                     [         R                  " [        R                  5         [        R                  " 5       nUR                  SS/5        U R                  USS5        S S S 5        g ! , (       d  f       g = f)Nr   r#   r   r   )r   r   r   NetworkXNotImplementedr)   r   r   r   s     r   test_digraph TestCommonNeighbors.test_digraph  sN    ]]2445

Aff-.IIaA 655s   <A**
A8c                 t   [         R                  " S5      n[        R                  " [         R                  [         R
                  USS5        [        R                  " [         R                  [         R
                  USS5        [        R                  " [         R                  [         R
                  USS5        g )Nr   r   r   )r   r   r   r   r   r   r   s     r   test_nonexistent_nodes*TestCommonNeighbors.test_nonexistent_nodes  sr    a b&&(;(;Q1Eb&&(;(;Q1Eb&&(;(;Q1Er   c                 |    [         R                  " 5       nUR                  SS/5        U R                  USS/ 5        g)zCase of no common neighbors.r   r   N)r   r   r   r  r   s     r   test_custom1 TestCommonNeighbors.test_custom1  s1    HHJ	!Q 		!Q2r   c                 \    [         R                  " S5      nU R                  USS/ SQ5        g)zCase of equal nodes.r   r   r   Nr  r   s     r   test_custom2 TestCommonNeighbors.test_custom2  s$    a 		!Q9%r   r   N)r   r   r   r   classmethodr  r  r	  r  r  r  r  r  r   r   r   r   r   r     s8    + +&  F&r   r   
graph_typec           
         [         R                  " SU S9nSnSn[         R                  " XU5        UR                  S   U   U:X  d   eUR                  S   U   U:X  d   eUR                  S   U   U:X  d   e[         R                  " SU S9n[	        [        [        UR                  5       5      [        [        U5      5      5      5      nSn[         R                  " XU5        UR                  S   U   S:X  d   eUR                  S   U   S:X  d   eUR                  S   U   S:X  d   e[         R                  " SU S9nSS	S
.n[        R                  UR                  5       U5      nUR                  S5        [         R                  " X5        UR                  S   0 :X  d   eUR                  S   S   S:X  d   eUR                  S   S   S	:X  d   eg )Nr   create_usingr   hellor   r   r   hi   r"  r!  )r   r   set_node_attributesr4   dictzipr;   r&   r   r   r   )r  r   valsattrds        r   test_set_node_attributesr+    s   
 	aj1ADD1D)771:dt###771:dt###771:dt### 	aj1AF1779%uSV}56DD1D)771:dq   771:dq   771:dq    	aj1A3A==A&DHHQK1#771:771:dq   771:g#%%%r   )valuesr   redr   r   r   c                     [         R                  " 5       nUR                  S5        [         R                  " X U5        UR                  S   S   S:X  d   eSUR                  ;  d   eg)zy
When `values` is a dict or dict-of-dict keyed by nodes, ensure that keys
that correspond to nodes not in G are ignored.
r   r   r-  r   N)r   r   r   r%  r4   r,  r   r   s      r   ,test_set_node_attributes_ignores_extra_nodesr0    sW     	
AJJqM1d+771:g%'''AGGr   c           
         [         R                  " SU S9nSnSn[         R                  " XU5        US   S   U   U:X  d   eUS   S   U   U:X  d   e[         R                  " SU S9nSnSS	/n[        [	        U[        [        U5      5      5      5      n[         R                  " XU5        US   S   U   S:X  d   eUS   S   U   S:X  d   e[         R                  " SU S9nSS
S.nS/n[        R                  XE5      n[         R                  " X5        US   S   S   S:X  d   eUS   S   S   S
:X  d   eUS   S   0 :X  d   eg )Nr   r  r!  r   r   r   r"  r   r#   r#  r$  r   r   set_edge_attributesr&  r'  r&   r   r   r  r   r)  r(  r:   r*  s         r   test_set_edge_attributesr5    si    	aj1ADD1D)Q474=D   Q474=D    	aj1ADVEE5U,-.D1D)Q474=AQ474=A 	aj1A3AHE=="D1#Q474=AQ477s"""Q47b==r   rn   r\   )r   r   r?   c                     [         R                  " S/5      n[         R                  " X U5        US   S   S   S:X  d   eSUR                  ;  d   eg)~If `values` is a dict or dict-of-dicts containing edges that are not in
G, data associate with these edges should be ignored.
r   r   r   r?   rn   r   N)r   r   r3  r:   r/  s      r   ,test_set_edge_attributes_ignores_extra_edgesr8  +  sQ     	&A1d+Q478###   r   c           
         [         R                  " SU S9nSnSn[         R                  " XU5        US   S   S   U   U:X  d   eUS   S   S   U   U:X  d   e[         R                  " SU S9nSnSS	/n[        [	        U[        [        U5      5      5      5      n[         R                  " XU5        US   S   S   U   S:X  d   eUS   S   S   U   S:X  d   e[         R                  " SU S9nSS
S.nS/n[        R                  XE5      n[         R                  " X5        US   S   S   S   S:X  d   eUS   S   S   S   S
:X  d   eUS   S   S   0 :X  d   eg )Nr   r  r!  r   r   r   r"  r   r   r   r   r#  r$  r2  r4  s         r   test_set_edge_attributes_multir;  <  s    	aj1ADD1D)Q471:dt###Q471:dt### 	aj1AD	"EE5U,-.D1D)Q471:dq   Q471:dq    	aj1A3AKE=="D1#Q471:dq   Q471:g#%%%Q471:r   )r:  r   r   r   c                     [         R                  " SS/5      n[         R                  " X U5        US   S   S   S   S:X  d   eUS   S   S   0 :X  d   eSUR                  5       ;  d   eg)	r7  r:  r   r   r   r   r   r?   rn   r   N)r   
MultiGraphr3  r:   r/  s      r   2test_set_edge_attributes_multi_ignores_extra_edgesr@  Z  st     	y),-A1d+Q471:h3&&&Q471:"""r   c                     [         R                  " 5       [         R                  " 5       [         R                  " 5       [         R                  " 5       /n U  H  n[         R
                  " SUS9nSnSn[         R                  " XU5        [         R                  " X5      nUS   U:X  d   eUS   U:X  d   eUS   U:X  d   eSnUR                  S5        [         R                  " XUS	9nUS   U:X  a  M   e   g )
Nr   r  r!  r   r   r   r   r   default)	r   r   r)   r?  MultiDiGraphr   r%  get_node_attributesr   )graphsr   r)  r(  attrsdefault_vals         r   test_get_node_attributesrI  l  s    hhj"**,9JKFMM!!,
q-&&q/Qx4Qx4Qx4	

1&&qDQx;&&& r   c                  P   [         R                  " 5       [         R                  " 5       [         R                  " 5       [         R                  " 5       /n U  H  n[         R
                  " SUS9nSnSn[         R                  " XU5        [         R                  " X5      n[        U5      S:X  d   eUR                   H  nXE   U:X  a  M   e   UnUR                  SS5        [         R                  " XUS9n[        U5      S:X  d   eUR                   H  nXu   U:X  a  M   e   M     g )	Nr   r  r!  r   r   r   r   rB  )r   r   r)   r?  rD  r   r3  get_edge_attributesr   r:   r   )rF  r   r)  r(  rG  r   rH  deafult_attrss           r   test_get_edge_attributesrM  }  s    hhj"**,9JKFMM!!,
q-&&q/5zQGGD;$&&&  	

1a..qL=!Q&&&GGD &$... ! r   c                 
   [         R                  " SU S9nSnSn[         R                  " XU5        [         R                  " X5        X1R                  S   ;  d   eX1R                  S   ;  d   eX1R                  S   ;  d   e[         R                  " SU S9nSnS	n[         R                  " XU5        [         R                  " XU5        [         R                  " X5        X1R                  S   ;  d   eUR                  S   U   U:X  d   eX1R                  S   ;  d   eUR                  S   U   U:X  d   eX1R                  S   ;  d   eUR                  S   U   U:X  d   e[         R                  " SU S9n[         R                  " XU5        [         R                  " XU5        [         R                  " XU5        X1R                  S   ;  a  XQR                  S   ;  d   eX1R                  S   ;  a  XQR                  S   ;  d   eX1R                  S   ;  a  XQR                  S   ;  d   e[         R                  " SU S9nS
nSn[         R                  " UUR	                  5        Vs0 s H	  nXX%XGU0_M     sn5        [         R                  " XU5        XQR                  S   ;  a  XqR                  S   ;  d   eXQR                  S   ;  a  XqR                  S   ;  d   eXQR                  S   ;  a  XqR                  S   ;  d   eUR                  S   U   U:X  d   eUR                  S   U   U:X  d   eUR                  S   U   U:X  d   e[         R                  " SU S9n[         R                  " UX2XT0X2XT0S.5        [         R                  " X5        X1R                  S   ;  d   eX1R                  S   ;  d   eX1R                  S   ;  d   eUR                  S   U   U:X  d   eUR                  S   U   U:X  d   e[         R                  " SU S9n[         R                  " UUR	                  5        Vs0 s H	  nXX%XGU0_M     sn5        [         R                  " XUSS/S9  X1R                  S   ;  a  XQR                  S   ;  d   eX1R                  S   ;  a  XQR                  S   ;  d   eX1R                  S   ;   a  XQR                  S   ;   d   eXqR                  S   ;   a  UR                  S   U   U:X  d   eXqR                  S   ;   a  UR                  S   U   U:X  d   eg s  snf s  snf )Nr   r  r   r!  r   r   r   r#  other,  threer#   r8   )r   r   r%  remove_node_attributesr4   )	r  r   r(  r)  
other_vals
other_attr
third_vals
third_attrns	            r   test_remove_node_attributesrX    s   
 	aj1ADD1D)a&wwqz!!!wwqz!!!wwqz!!! 	aj1AJJ1D)1*5a&wwqz!!!771:j!Z///wwqz!!!771:j!Z///wwqz!!!771:j!Z/// 	aj1A1D)1*5az2wwqz!j
&BBBwwqz!j
&BBBwwqz!j
&BBB 	aj1AJJ	 WWY	
 d

KK	
 aZ8WWQZ'Jggaj,HHHWWQZ'Jggaj,HHHWWQZ'Jggaj,HHH771:dt###771:dt###771:dt### 	aj1A	J3J3	
 a&wwqz!!!wwqz!!!wwqz!!!771:j!Z///771:j!Z/// 	aj1A	 WWY	
 d

KK	
 az1a&Awwqz!j
&BBBwwqz!j
&BBB771:*
":::#
:(>*(LLL#
:(>*(LLL(LW	
B	
s   ,T7
T<
c                    [         R                  " SU S9nSnSn[         R                  " XU5        [         R                  " X5        [	        [         R
                  " X5      5      S:X  d   e[         R                  " SU S9nSnSn[         R                  " XU5        [         R                  " XU5        [         R                  " X5        X!S   S   ;  d   eX!S   S	   ;  d   eUS   S   U   S:X  d   eUS   S	   U   S:X  d   e[         R                  " SU S9n[         R                  " XU5        [         R                  " XU5        [         R                  " XU5        X!S   S   ;  a  XAS   S   ;  d   eX!S   S	   ;  a  XAS   S	   ;  d   e[         R                  " SU S9nS
nSn[         R                  " UUR                  5        VV	s0 s H  u  pX4X#XEXg0_M     sn	n5        [         R                  " XU5        XAS   S   ;  a  XaS   S   ;  d   eXAS   S	   ;  a  XaS   S	   ;  d   eUS   S   U   U:X  d   eUS   S	   U   U:X  d   e[         R                  " SU S9n[         R                  " USX#XE005        [         R                  " X5        XAS   S   ;  a  US   S   U   U:X  d   eXAS   S	   ;  d   e[         R                  " SU S9n[         R                  " UUR                  5        VV	s0 s H  u  pX4X#XEXg0_M     sn	n5        [         R                  " XUS/S9  XAS   S   ;  a  XaS   S   ;  d   eXAS   S	   ;   a  XaS   S	   ;   d   eg s  sn	nf s  sn	nf )Nr   r  r!  r   r   rO  r#  r   r   thirdrP  r   ebunch)r   r   r3  remove_edge_attributesr   rK  r:   )
r  r   r)  r(  rT  rS  rV  rU  r   r   s
             r   test_remove_edge_attributesr^    s    	aj1ADD1D)a&r%%a./1444 	aj1AJJ1D)1*5a&tAwtAwQ47:#%%%Q47:#%%% 	aj1A1D)1*5az2tAw:qT!W#<<<tAw:qT!W#<<< 	aj1AJJ	 		
! FTPP!	
 aZ8qT!W$Q47)BBBqT!W$Q47)BBBQ474=D   Q474=D    	aj1A1vJ'KLMa,qT!W$1a$)>>>qT!W$$$ 	aj1A	 		
! FTPP!	
 aZIqT!W$Q47)BBB1a ZQ47%:::%:;	
,	
s   M8M!c                 D	   [         R                  " SU S9nUR                  SS5        SnSn[         R                  " XU5        [         R                  " X5        X!S   S   S   ;  d   eX!S   S   S   ;  d   eX!S   S   S   ;  d   e[         R                  " SU S9nUR                  SS5        SnS	n[         R                  " XU5        [         R                  " XU5        [         R                  " X5        X!S   S   S   ;  d   eX!S   S   S   ;  d   eX!S   S   S   ;  d   eUS   S   S   U   U:X  d   eUS   S   S   U   U:X  d   eUS   S   S   U   U:X  d   e[         R                  " SU S9nUR                  SS5        [         R                  " XU5        [         R                  " XU5        [         R                  " XU5        X!S   S   S   ;  a  XAS   S   S   ;  d   eX!S   S   S   ;  a  XAS   S   S   ;  d   eX!S   S   S   ;  a  XAS   S   S   ;  d   e[         R                  " SU S9nUR                  SS5        S
nSn[         R                  " UUR                  SS9 VV	V
s0 s H  u  pn
XU
4X#XEXg0_M     sn
n	n5        [         R                  " XU5        XAS   S   S   ;  a  XaS   S   S   ;  d   eXAS   S   S   ;  a  XAS   S   S   ;  d   eXAS   S   S   ;  a  XAS   S   S   ;  d   eUS   S   S   U   U:X  d   eUS   S   S   U   U:X  d   eUS   S   S   U   U:X  d   e[         R                  " SU S9nUR                  SS5        [         R                  " UX#XE0X#XE0S.5        [         R                  " X5        XAS   S   S   ;  a  US   S   S   U   U:X  d   eXAS   S   S   ;  d   eXAS   S   S   ;  d   e[         R                  " SU S9nUR                  SS5        [         R                  " UX#XE0X#XE0X#XE0S.5        [         R                  " XSS/S9  X!S   S   S   ;  a  XAS   S   S   ;   d   eX!S   S   S   ;  a  XAS   S   S   ;   d   eX!S   S   S   ;   a  XAS   S   S   ;   d   eg s  sn
n	nf )Nr   r  r   r   r!  r   r   rO  r#  rZ  rP  Tkeys)r:  r   r   r   )r:  r   rb  r:  r   r[  )r   r   r   r3  r]  r:   )r  r   r)  r(  rT  rS  rV  rU  r   r   ks              r   !test_remove_multi_edge_attributesrd  1  sZ    	aj1AJJq!DD1D)a&tAwqz!!!tAwqz!!!tAwqz!!! 	aj1AJJq!JJ1D)1*5a&tAwqz!!!tAwqz!!!tAwqz!!!Q471:j!Z///Q471:j!Z///Q471:j!Z/// 	aj1AJJq!1D)1*5az2tAwqz!j!Q
&BBBtAwqz!j!Q
&BBBtAwqz!j!Q
&BBB 	aj1AJJq!JJ	 777-	
-a 1IJJSS-	
 aZ8qT!WQZ'Jd1gaj,HHHqT!WQZ'Jd1gaj,HHHqT!WQZ'Jd1gaj,HHHQ471:dt###Q471:dt###Q471:dt### 	aj1AJJq!	J;J;	
 a,qT!WQZ'AaDGAJt,<,DDDqT!WQZ'''qT!WQZ''' 	aj1AJJq!	J;J;J;	
 ay).DEtAwqz!jaDGAJ&>>>tAwqz!jaDGAJ&>>>Q471:*!Q
":::":U	
s   9Rc                     [         R                  " 5       [         R                  " 5       [         R                  " 5       [         R                  " 5       /n U  H  n[         R
                  " U5      (       d   eUR                  [        S5      5        [         R
                  " U5      (       d   eUR                  SS/5        [         R
                  " U5      (       d  M   e   g )Nr   r#   r   )	r   r   r)   r?  rD  is_emptyr   r&   r   )rF  r   s     r   test_is_emptyrg    s    hhj"**,9JKF{{1~~~	q"{{1~~~	&&)*;;q>>!! r   c                 ~   [         R                  " SU S9nUR                  SS5        [        [         R                  " U5      S/5      (       d   e[        [         R                  " U5      S/5      (       d   e[        [         R                  " USS9SS0 4/5      (       d   e[         R                  " U5      S:X  d   eg )Nr   r  r   r   r   Tr]   r   )r   r   r   r   nodes_with_selfloopsr   selfloop_edgesnumber_of_selfloopsr  r   s     r   test_selfloopsrn    s     	!*5AJJq!r..q1A37777r((+fX6666r((6!QEEEE!!!$)))r   c                 $   [         R                  " SU S9nUR                  SS5        UR                  SSSS9  [        [         R                  " USS9SS0 4SSS	S04/5      (       d   e[        [         R                  " US	S9S
S/5      (       d   eg )Nr   r  r   r   r   r@   Tr]   r?   )r   r   N)r   r   r   )r   r   r   r   rk  rm  s     r   test_selfloop_edges_attrrp    s     	!*5AJJq!JJq!AJ
!$'1a*q!h]6K)L    r((:\9<UVVVVr   c                      [         R                  " S[         R                  S9n U R                  SSSS9  U R                  SSSS9  [	        [         R
                  " U SSS	9S
S/5      (       d   eg )Nr   r  r   r   r@   r   r?   Tr^   ra  )r   r   r   r   )r   r   r   r   )r   r   r?  r   r   rk  r
   s    r   ,test_selfloop_edges_multi_with_data_and_keysrs    sl    
!"--8AJJq!BJJJq!CJ 
!(68W   r   c                 t   [         R                  " SU S9nUR                  SS5        UR                  [         R                  " USS95        UR                  SS5        UR                  [         R                  " USS95        UR                  SS5        UR                  [         R                  " USSS95        g )Nr   r  r   Tr`  r]   )ra  r^   )r   r   r   r   rk  rm  s     r   test_selfloops_removalru    s    
!*5AJJq!))!$78JJq!))!$78JJq!))!$TBCr   c           	         [         R                  " SU S9nUR                  SS5        UR                  SS5        UR                  [         R                  " U5      5        SUR                  5       ;  d   eUR                  SS5        UR                  SS5        [        R                  " [        5         UR                  [         R                  " USS95        SSS5        UR                  SS5        UR                  SS5        [        R                  " [        5         UR                  [         R                  " USS95        SSS5        UR                  SS5        UR                  SS5        [        R                  " [        5         UR                  [         R                  " USSS	95        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)
zWtest removing selfloops behavior vis-a-vis altering a dict while iterating.
cf. gh-4068r   r  r   ri  Tr`  Nr]   rr  )
r   r   r   r   rk  r:   r   r   RuntimeError	TypeErrorrm  s     r   test_selfloops_removal_multiry    s[    	!*5AJJq!JJq!))!,-"""JJq!JJq!	|	$	B--ad;< 
% JJq!JJq!	y	!	B--ad;< 
" JJq!JJq!	|	$	B--adFG 
%	$ 
%	$
 
"	!
 
%	$s$   3%F8%G		&G8
G	
G
G(c                     / SQn / SQn[         R                  " 5       [         R                  " 5       [         R                  " 5       [         R                  " 5       /nSSSSS.4SSSS	S.4SSSSS.4/nU H  nUR                  U5        [         R                  " X@S
5      S	:X  d   e[         R                  " X@S5      S:X  d   e[        R                  " [         R                  [         R                  XAS
5        M     g )Nr   )r   r   r   r   r   r   r   )costdistr   r   r{  r|  )
r   r   r)   r?  rD  r   path_weightr   r   NetworkXNoPath)
valid_pathinvalid_pathrF  r:   r   s        r   test_pathweightr    s    JLhhj"**,9JKF	
A1%&	
A1%&	
A1%&E
 U#~~e8A===~~e8A===b''fU	 r   r   c                     U R                  / SQ5        / SQn/ SQn/ SQn[        R                  " X5      (       d   e[        R                  " X5      (       a   e[        R                  " X5      (       a   eg )N)r#   r   r#   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   is_path)r   r  r  another_invalid_paths       r   test_ispathr    se     56JL*::a$$$$zz!****zz!22222r   c                    U R                  / SQ5        U R                  S5        [        R                  " U / SQSS/5      n[	        UR                  5       5      1 Sk:X  d   e[	        UR                  5       5      S1:X  d   eg )Nr   r   r   r   r   r#   r      r   r   r   r"   r   r   r   restricted_viewsetr4   r:   r   rx   s     r   test_restricted_viewr    sg    EFJJqM
1i&&)9:Aqwwy>Y&&&qwwy>fX%%%r   c                    U R                  / SQ5        U R                  S5        [        R                  " U / SQSS/5      n[	        UR                  5       5      1 Sk:X  d   e[	        UR                  5       5      S1: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  r"   r  r  s     r   test_restricted_view_multir    sk    U JJqM
1i)Y)?@Aqwwy>Y&&&qwwy>fX%%%r   )%r   r   networkxr   networkx.utilsr   r   r   r   r   markparametrizer   r)   r?  rD  r+  r0  r5  r8  r;  r@  rI  rM  rX  r^  rd  rg  rn  rp  rs  ru  ry  r  r  r  r  r   r   r   <module>r     s/      3(
YN YNx,& ,&^ 288RZZH&&< v	(u7F"3	4d;		 "**'=> ?: s	#X.S/Hc?	;TB!! r'GH I: S	)84_(C	A4H##'"/, 288RZZHSMSMl "**'=>A; ?A;H r'GHV; IV;r" 288RZZH** 288RZZHWW "**'=>D ?D r'GHH IH4V  "((*bjjlBMMOR__5F	G33 rxxz2::<89& :& r}}0ABC& D&r   