Ë
    D^(h@S  ã                   ó^  — d Z ddlZddlZ G d„ d«      Z G d„ d«      Zej                  j                  dej                  ej                  ej                  ej                  g«      d„ «       Z G d	„ d
«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)z8
Unit tests for dedensification and graph summarization
é    Nc                   óN   — e Zd Zd„ Zd„ Zd„ Zedd„«       Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zy
)ÚTestDirectedDedensificationc                 óš   — dddg d¢fddddgfd	dgfg}t        j                  «       }|D ]  \  }}|D ]  }|j                  ||«       Œ Œ  |S )
N©Ú1ÚBC©Ú2ÚABCÚ3©ÚAÚBÚ6©Ú4r   ©Ú5ÚABr   r   r   ©ÚnxÚDiGraphÚadd_edge©ÚselfÚoriginal_matrixÚgraphÚsourceÚtargetsÚtargets         új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_summarization.pyÚbuild_original_graphz0TestDirectedDedensification.build_original_graph   ss   € àØØ’/Ð"ØØØ�3�%ˆLØ�3�%ˆLð
ˆô —
‘
“ˆØ.ò 	/‰OˆF�GØ!ò /�Ø—‘˜v vÕ.ñ/ð	/ð ˆó    c                 ó¨   — dddgfdg d¢fddgfddd	gfd
dgfdg}t        j                  «       }|D ]  \  }}|D ]  }|j                  ||«       Œ Œ  |S )Nr   r
   r   r   r   r   r   r   r   r   )r   r   r   ©r   Úcompressed_matrixÚcompressed_graphr   r   r    s         r!   Úbuild_compressed_graphz2TestDirectedDedensification.build_compressed_graph   s‡   € àØ�5�'ˆNØ’/Ð"Ø�5�'ˆNØØ�3�%ˆLØ�3�%ˆLØð	
Ðô Ÿ:™:›<ÐØ0ò 	:‰OˆF�GØ!ò :�Ø ×)Ñ)¨&°&Õ9ñ:ð	:ð  Ðr#   c                 ó~   — t        j                  «       }t        j                  |d¬«      \  }}|t        «       k(  sJ ‚y)zT
        Verify that an empty directed graph results in no compressor nodes
        é   ©Ú	thresholdN)r   r   Ú	dedensifyÚset)r   ÚGr'   Úc_nodess       r!   Ú
test_emptyz&TestDirectedDedensification.test_empty,   s5   € ô �J‰J‹LˆÜ$&§L¡L°¸aÔ$@Ñ!Ð˜'Øœ#›%ÒÐÑr#   c                 ól  — |r| j                  «       } |D ]œ  }t        t        j                  | |«      «      }t        | j	                  |«      «      }|D ]  }| j                  ||«       Œ ||z
  }|D ]-  }| j                  ||«       |D ]  }| j                  ||«       Œ Œ/ | j                  |«       Œž | S )aÞ  
        Reconstructs the original graph from a dedensified, directed graph

        Parameters
        ----------
        G: dedensified graph
           A networkx graph
        compressor_nodes: iterable
           Iterable of compressor nodes in the dedensified graph
        inplace: bool, optional (default: False)
           Indicates if densification should be done inplace

        Returns
        -------
        G: graph
           A densified networkx graph
        )Úcopyr.   r   Úall_neighborsÚ	neighborsÚremove_edger   Úremove_node)	r/   Úcompressor_nodesr3   Úcompressor_noder4   Úout_neighborsÚout_neighborÚin_neighborsÚin_neighbors	            r!   Údensifyz#TestDirectedDedensification.densify4   sÁ   € ñ& Ø—‘“ˆAØ/ò 
	+ˆOÜ¤× 0Ñ 0°°OÓ DÓEˆMÜ §¡¨OÓ <Ó=ˆMØ -ò =�Ø—‘˜o¨|Õ<ð=à(¨=Ñ8ˆLØ+ò :�Ø—‘˜k¨?Ô;Ø$1ò :�LØ—J‘J˜{¨LÕ9ñ:ð:ð �M‰M˜/Õ*ð
	+ð ˆr#   c                 ó   — d| _         y )N)r   ©r0   ©r   s    r!   Úsetup_methodz(TestDirectedDedensification.setup_methodV   s	   € Øˆ�r#   c                 ó¬  — | j                  «       }| j                  «       }t        j                  |d¬«      \  }}|j	                  «       D ]d  \  }}dj                  t        |«      «      }dj                  t        |«      «      }|j                  ||«      }	|j                  ||«      }
|	|
k(  rŒdJ ‚ t        |«      t        | j                  «      k(  sJ ‚y)zy
        Verifies that dedensify produced the correct edges to/from compressor
        nodes in a directed graph
        r*   r+   Ú N)
r"   r(   r   r-   ÚedgesÚjoinÚsortedÚhas_edgeÚlenr0   )r   r/   Úcompressed_Gr'   r0   ÚsÚtÚo_sÚo_tÚcompressed_graph_existsÚverified_compressed_existss              r!   Útest_dedensify_edgesz0TestDirectedDedensification.test_dedensify_edgesY   sÊ   € ð
 ×%Ñ%Ó'ˆØ×2Ñ2Ó4ˆÜ$&§L¡L°¸aÔ$@Ñ!Ð˜'Ø$×*Ñ*Ó,ò 	I‰DˆAˆqØ—'‘'œ& ›)Ó$ˆCØ—'‘'œ& ›)Ó$ˆCØ&6×&?Ñ&?ÀÀ1Ó&EÐ#Ø)5×)>Ñ)>¸sÀCÓ)HÐ&Ø*Ð.HÓHÐHÐHð	Iô �7‹|œs 4§<¡<Ó0Ò0Ð0Ñ0r#   c                 ó&  — | j                  «       }t        |j                  «       «      }t        j                  |d¬«      \  }}t        |j                  «       «      }||k  sJ ‚| j                  «       }|t        |j                  «       «      k(  sJ ‚y)zu
        Verifies that dedensify produced the correct number of compressor nodes
        in a directed graph
        r*   r+   N)r"   rI   rE   r   r-   r(   )r   r/   Úoriginal_edge_countÚc_Gr0   Úcompressed_edge_countrJ   s          r!   Útest_dedensify_edge_countz5TestDirectedDedensification.test_dedensify_edge_counti   s€   € ð
 ×%Ñ%Ó'ˆÜ! !§'¡'£)›nÐÜ—|‘| A°Ô3‰ˆˆWÜ # C§I¡I£KÓ 0ÐØ$Ð(;Ò;Ð;Ð;Ø×2Ñ2Ó4ˆØ$¬¨L×,>Ñ,>Ó,@Ó(AÒAÐAÑAr#   c                 óþ   — | j                  «       }| j                  || j                  d¬«      }| j                  «       }|j	                  «       D ],  \  }}|j                  ||«      |j                  ||«      k(  rŒ,J ‚ y)zq
        Verifies that densification produces the correct edges from the
        original directed graph
        T)r3   N)r(   r>   r0   r"   rE   rH   )r   rJ   Úoriginal_graphr/   rK   rL   s         r!   Útest_densify_edgesz.TestDirectedDedensification.test_densify_edgesv   sy   € ð
 ×2Ñ2Ó4ˆØŸ™ l°D·L±LÀt˜ÓLˆØ×%Ñ%Ó'ˆØ—G‘G“Iò 	E‰DˆAˆqØ—:‘:˜a Ó# ~×'>Ñ'>¸qÀ!Ó'DÓDÐDÐDñ	Er#   c                 ó*  — | j                  «       }t        |j                  «       «      }| j                  || j                  «      }t        |j                  «       «      }||k  sJ ‚| j                  «       }|t        |j                  «       «      k(  sJ ‚y)zy
        Verifies that densification produces the correct number of edges in the
        original directed graph
        N)r(   rI   rE   r>   r0   r"   )r   rJ   rU   rX   rS   r/   s         r!   Útest_densify_edge_countz3TestDirectedDedensification.test_densify_edge_count�   sƒ   € ð
 ×2Ñ2Ó4ˆÜ # L×$6Ñ$6Ó$8Ó 9ÐØŸ™ l°D·L±LÓAˆÜ! .×"6Ñ"6Ó"8Ó9ÐØ$Ð(;Ò;Ð;Ð;Ø×%Ñ%Ó'ˆØ"¤c¨!¯'©'«)£nÒ4Ð4Ñ4r#   N)T)Ú__name__Ú
__module__Ú__qualname__r"   r(   r1   Ústaticmethodr>   rB   rQ   rV   rY   r[   © r#   r!   r   r   
   sA   „ òò  ò" ð òó ðòB ò1ò Bò	Eó5r#   r   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestUnDirectedDedensificationc                 óš   — dddg d¢fddddgfd	dgfg}t        j                  «       }|D ]  \  }}|D ]  }|j                  ||«       Œ Œ  |S )
zC
        Builds graph shown in the original research paper
        )r   ÚCBr	   r   r   r   r   r   r   r   ©r   ÚGraphr   r   s         r!   r"   z2TestUnDirectedDedensification.build_original_graph�   su   € ð
 ØØ’/Ð"ØØØ�3�%ˆLØ�3�%ˆLð
ˆô —‘“
ˆØ.ò 	/‰OˆF�GØ!ò /�Ø—‘˜v vÕ.ñ/ð	/ð ˆr#   c                 ó~   — t        j                  «       }t        j                  |d¬«      \  }}|t        «       k(  sJ ‚y)zV
        Verify that an empty undirected graph results in no compressor nodes
        r*   r+   N)r   rf   r-   r.   )r   r/   rJ   r0   s       r!   r1   z(TestUnDirectedDedensification.test_empty£   s4   € ô �H‰H‹JˆÜ "§¡¨Q¸!Ô <Ñˆ�gØœ#›%ÒÐÑr#   c                 ó   — d| _         y )N)Ú6ABr   r@   rA   s    r!   rB   z*TestUnDirectedDedensification.setup_method«   s	   € Ø%ˆ�r#   c           
      óÈ   — dddgfddgfddgfddgfd	dgfd
ddgfdddgfdddgfddgfg	}t        j                  «       }|D ]  \  }}|D ]  }|j                  ||«       Œ Œ  |S )Nr   r   ÚCr
   r   r   ri   r   r   r   r   re   r%   s         r!   r(   z4TestUnDirectedDedensification.build_compressed_graph®   s¯   € à�3˜�*ÐØ�5�'ˆNØ�5�'ˆNØ�5�'ˆNØ�5�'ˆNØ�5˜#�,ÐØ�5˜%�.Ð!Ø�5˜%�.Ð!Ø�5�'ˆNð

Ðô Ÿ8™8›:ÐØ0ò 	:‰OˆF�GØ!ò :�Ø ×)Ñ)¨&°&Õ9ñ:ð	:ð  Ðr#   c                 ó¬  — | j                  «       }t        j                  |d¬«      \  }}| j                  «       }|j	                  «       D ]d  \  }}dj                  t        |«      «      }dj                  t        |«      «      }|j                  ||«      }	|j                  ||«      }
|	|
k(  rŒdJ ‚ t        |«      t        | j                  «      k(  sJ ‚y)z�
        Verifies that dedensify produced correct compressor nodes and the
        correct edges to/from the compressor nodes in an undirected graph
        r*   r+   rD   N)
r"   r   r-   r(   rE   rF   rG   rH   rI   r0   )r   r/   rT   r0   Úv_compressed_GrK   rL   rM   rN   Úhas_compressed_edgeÚverified_has_compressed_edges              r!   rQ   z2TestUnDirectedDedensification.test_dedensify_edgesÀ   sÃ   € ð
 ×%Ñ%Ó'ˆÜ—|‘| A°Ô3‰ˆˆWØ×4Ñ4Ó6ˆØ—I‘I“Kò 	G‰DˆAˆqØ—'‘'œ& ›)Ó$ˆCØ—'‘'œ& ›)Ó$ˆCØ"%§,¡,¨q°!Ó"4ÐØ+9×+BÑ+BÀ3ÈÓ+LÐ(Ø&Ð*FÓFÐFÐFð	Gô �7‹|œs 4§<¡<Ó0Ò0Ð0Ñ0r#   c                 ó,  — | j                  «       }t        j                  |dd¬«      \  }}t        |j	                  «       «      }t        |j	                  «       «      }||k  sJ ‚| j                  «       }t        |j	                  «       «      }||k(  sJ ‚y)zm
        Verifies that dedensify produced the correct number of edges in an
        undirected graph
        r*   T)r,   r3   N)r"   r   r-   rI   rE   r(   )r   r/   rT   r0   rU   Úverified_original_edge_countÚverified_compressed_GÚverified_compressed_edge_counts           r!   rV   z7TestUnDirectedDedensification.test_dedensify_edge_countÐ   s‹   € ð
 ×%Ñ%Ó'ˆÜ—|‘| A°¸Ô>‰ˆˆWÜ # C§I¡I£KÓ 0ÐÜ'*¨1¯7©7«9£~Ð$Ø$Ð(DÒDÐDÐDØ $× ;Ñ ;Ó =ÐÜ),Ð-B×-HÑ-HÓ-JÓ)KÐ&Ø$Ð(FÒFÐFÑFr#   N)	r\   r]   r^   r"   r1   rB   r(   rQ   rV   r`   r#   r!   rb   rb   �   s!   „ òò& ò&ò ò$1ó Gr#   rb   Ú
graph_typec                 óp   —  | «       }t        j                  |d¬«      }t        j                  ||«      sJ ‚y )N©Úcolor)Únode_attributes)r   Úsnap_aggregationÚis_isomorphic)rt   r/   Úsummary_graphs      r!   Útest_summarization_emptyr|   ß   s3   € ñ 	‹€AÜ×'Ñ'¨¸:ÔF€MÜ×Ñ˜M¨1Ô-Ð-Ñ-r#   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚAbstractSNAPrv   c                  ó   — y ©Nr`   rA   s    r!   r"   z!AbstractSNAP.build_original_graphë   ó   € Ør#   c                  ó   — y r€   r`   rA   s    r!   Úbuild_summary_graphz AbstractSNAP.build_summary_graphî   r�   r#   c                 óÜ   — | j                  «       }| j                  «       }d}t        j                  || j                  |«      }| j                  |«      }t        j                  ||«      sJ ‚y ©N©Útype©r"   rƒ   r   ry   rx   Údeterministic_labelsrz   ©r   rX   r{   Úrelationship_attributesÚgenerated_summary_graphÚrelabeled_summary_graphs         r!   Útest_summary_graphzAbstractSNAP.test_summary_graphñ   sn   € Ø×2Ñ2Ó4ˆØ×0Ñ0Ó2ˆà"+ÐÜ"$×"5Ñ"5Ø˜D×0Ñ0Ð2Ió#
Ðð #'×";Ñ";Ð<SÓ"TÐÜ×Ñ Ð/FÔGÐGÑGr#   c                 óØ   ‡— t        ‰j                  «      }t        |ˆfd„¬«      }|j                  «        i }t	        |«      D ]  \  }}d|› �}|||<   Œ t        j                  ‰|«      S )Nc                 ó@   •— t        ‰j                  |    d   «      d   S )NÚgroupr   )rG   Únodes)Únr/   s    €r!   ú<lambda>z3AbstractSNAP.deterministic_labels.<locals>.<lambda>þ   s   ø€ ¼¸q¿w¹wÀq¹zÈ'Ñ?RÓ8SÐTUÑ8V€ r#   )Úkeyz
Supernode-)Úlistr’   rG   ÚsortÚ	enumerater   Úrelabel_nodes)r   r/   Únode_labelsÚlabel_mappingÚindexÚnodeÚlabels    `     r!   r‰   z!AbstractSNAP.deterministic_labelsü   sq   ø€ Ü˜1Ÿ7™7“mˆÜ˜[Ó.VÔWˆØ×ÑÔàˆÜ$ [Ó1ò 	(‰KˆE�4Ø   Ð(ˆEØ"'ˆM˜$Òð	(ô ×Ñ  =Ó1Ð1r#   N)r\   r]   r^   rx   r"   rƒ   rŽ   r‰   r`   r#   r!   r~   r~   è   s   „ Ø €Oòòò	Hó
2r#   r~   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚTestSNAPNoEdgeTypesr`   c                 óÚ   — | j                  «       }| j                  «       }d}t        j                  || j                  «      }| j                  |«      }t        j                  ||«      sJ ‚y r…   rˆ   rŠ   s         r!   rŽ   z&TestSNAPNoEdgeTypes.test_summary_graph  sk   € Ø×2Ñ2Ó4ˆØ×0Ñ0Ó2ˆà"+ÐÜ"$×"5Ñ"5Ø˜D×0Ñ0ó#
Ðð #'×";Ñ";Ð<SÓ"TÐÜ×Ñ Ð/FÔGÐGÑGr#   c                 óú   — ddiddiddiddiddiddiddiddiddiddiddiddidœ}g d¢}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}|j                  ||«       Œ |S )Nrw   ÚRedÚBlueÚYellow©r   r   rk   ÚDÚEÚFr/   ÚHÚIÚJÚKÚL))r   r   )r   rk   )r   r¨   )r   r«   )r   r§   )r   r¬   )r   r©   )rk   r/   )r§   rª   )r«   r¬   )r¬   r­   )r«   r®   ©r   rf   Úadd_noder   )r   r’   rE   r/   r�   Ú
attributesr   r    s           r!   r"   z(TestSNAPNoEdgeTypes.build_original_graph  sÒ   € à˜5Ð!Ø˜5Ð!Ø˜5Ð!Ø˜5Ð!Ø˜6Ð"Ø˜6Ð"Ø˜6Ð"Ø˜6Ð"Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ñ
ˆò
ˆô �H‰H‹JˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð $ò 	'‰NˆF�FØ�J‰J�v˜vÕ&ð	'ð ˆr#   c                 ó.  — ddiddiddiddiddiddidœ}g d¢}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}|j                  ||«       Œ ddhd	d
hddhddhddhddhdœ}t        j                  ||d«       |S )Nrw   r£   r¤   r¥   ©úSupernode-0úSupernode-1úSupernode-2úSupernode-3úSupernode-4úSupernode-5))r´   r´   )r´   rµ   )r´   r¶   )r´   r¸   )rµ   r·   )r¸   r¸   )r¸   r¹   r   r   rk   r§   r¨   r©   r/   rª   r«   r¬   r­   r®   r‘   ©r   rf   r°   r   Úset_node_attributes)	r   r’   rE   r/   r�   r±   r   r    Ú
supernodess	            r!   rƒ   z'TestSNAPNoEdgeTypes.build_summary_graph>  sç   € à# UÐ+Ø# UÐ+Ø# VÐ,Ø# VÐ,Ø# XÐ.Ø# XÐ.ñ
ˆò
ˆô �H‰H‹JˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð $ò 	'‰NˆF�FØ�J‰J�v˜vÕ&ð	'ð   ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ñ
ˆ
ô 	×Ñ˜q *¨gÔ6Øˆr#   N)r\   r]   r^   r‹   rŽ   r"   rƒ   r`   r#   r!   r    r    	  s   „ Ø Ðò	Hò%óN#r#   r    c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestSNAPUndirectedc                 ó   — ddiddiddiddiddiddiddiddiddiddiddiddidœ}g d¢}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}}|j                  |||¬«       Œ |S )Nrw   r£   r¤   r¥   r¦   ))r   r   ÚStrong)r   rk   ÚWeak©r   r¨   rÀ   )r   r«   rÁ   )r   r§   rÁ   )r   r¬   rÁ   ©r   r©   rÀ   )rk   r/   rÁ   )r§   rª   rÁ   )r«   r¬   rÀ   )r¬   r­   rÀ   )r«   r®   rÀ   r†   r¯   ©	r   r’   rE   r/   r�   r±   r   r    r‡   s	            r!   r"   z'TestSNAPUndirected.build_original_graphe  sÙ   € à˜5Ð!Ø˜5Ð!Ø˜5Ð!Ø˜5Ð!Ø˜6Ð"Ø˜6Ð"Ø˜6Ð"Ø˜6Ð"Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ñ
ˆò
ˆô �H‰H‹JˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð %*ò 	2Ñ ˆF�F˜DØ�J‰J�v˜v¨DˆJÕ1ð	2ð ˆr#   c                 ó:  — ddiddiddiddiddiddidœ}g d¢}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}}|j                  ||d|ig¬«       Œ d	d
hddhddhddhddhddhdœ}	t        j                  ||	d«       |S )Nrw   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‡   ©Útypesr   r   rk   r§   r¨   r©   r/   rª   r«   r¬   r­   r®   r‘   rº   )
r   r’   rE   r/   r�   r±   r   r    r‡   r¼   s
             r!   rƒ   z&TestSNAPUndirected.build_summary_graphŒ  sõ   € à# UÐ+Ø# UÐ+Ø# VÐ,Ø# VÐ,Ø# XÐ.Ø# XÐ.ñ
ˆò
ˆô �H‰H‹JˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð %*ò 	?Ñ ˆF�F˜DØ�J‰J�v˜v¨v°t¨nÐ-=ˆJÕ>ð	?ð   ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ñ
ˆ
ô 	×Ñ˜q *¨gÔ6Øˆr#   N©r\   r]   r^   r"   rƒ   r`   r#   r!   r¾   r¾   d  s   „ ò%óN#r#   r¾   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestSNAPDirectedc           	      óè   — ddiddiddiddiddiddiddiddidœ}g d¢}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}}|j                  |||¬«       Œ |S )	Nrw   r£   ÚGreenr¤   r¥   ©r   r   rk   r§   r¨   r©   r/   rª   ))r   rk   rÀ   rÂ   )r   r©   rÁ   )r   r§   rÀ   )r   r¨   rÁ   rÃ   )rk   r/   rÀ   )rk   r©   rÀ   )r§   r¨   rÀ   )r§   rª   rÀ   )r/   r¨   rÀ   )rª   r©   rÀ   r†   )r   r   r°   r   rÄ   s	            r!   r"   z%TestSNAPDirected.build_original_graph³  s¹   € à˜5Ð!Ø˜5Ð!Ø˜7Ð#Ø˜7Ð#Ø˜6Ð"Ø˜6Ð"Ø˜8Ð$Ø˜8Ð$ñ	
ˆò
ˆô �J‰J‹LˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð %*ò 	2Ñ ˆF�F˜DØ�J‰J�v˜v¨DˆJÕ1ð	2ð ˆr#   c                 óp  — ddiddiddiddidœ}ddd	d
igfddd	did	d
igfddd	d
igfddd	d
igfddd	d
igfg}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]  \  }}}|j                  |||¬«       Œ ddhddhddhddhddhddhdœ}	t        j                  ||	d«       |S )Nrw   r£   rÌ   r¤   r¥   ©r´   rµ   r¶   r·   r´   rµ   r‡   rÀ   r¶   rÁ   r·   rÆ   r   r   rk   r§   r¨   r©   r/   rª   r«   r¬   r­   r®   r³   r‘   )r   r   r°   r   r»   )
r   r’   rE   r/   r�   r±   r   r    rÇ   r¼   s
             r!   rƒ   z$TestSNAPDirected.build_summary_graphÖ  sA  € à# UÐ+Ø# WÐ-Ø# VÐ,Ø# XÐ.ñ	
ˆð ˜M¨V°XÐ,>Ð+?Ð@Ø˜M¨V°VÐ,<¸vÀxÐ>PÐ+QÐRØ˜M¨V°XÐ,>Ð+?Ð@Ø˜M¨V°XÐ,>Ð+?Ð@Ø˜M¨V°XÐ,>Ð+?Ð@ð
ˆô �J‰J‹LˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð &+ò 	4Ñ!ˆF�F˜EØ�J‰J�v˜v¨UˆJÕ3ð	4ð   ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ñ
ˆ
ô 	×Ñ˜q *¨gÔ6Øˆr#   NrÈ   r`   r#   r!   rÊ   rÊ   ²  s   „ ò!óFr#   rÊ   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestSNAPUndirectedMultic                 óR  — ddiddiddiddiddiddiddiddiddidœ	}dddd	gfd
ddd	gfddd	gfddd	gfdddgfdddd	gfdddd	gfdddd	gfg}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]!  \  }}}|D ]  }	|j                  |||	¬«       Œ Œ# |S )Nrw   r£   r¤   r¥   )	r   r   rk   r§   r¨   r©   r/   rª   r«   r   r§   rÁ   rÀ   r   r¨   r«   rª   r©   r/   r†   )r   Ú
MultiGraphr°   r   ©
r   r’   rE   r/   r�   r±   r   r    rÇ   r‡   s
             r!   r"   z,TestSNAPUndirectedMulti.build_original_graphù  sA  € à˜5Ð!Ø˜5Ð!Ø˜5Ð!Ø˜6Ð"Ø˜6Ð"Ø˜6Ð"Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ñ

ˆð �#˜ Ð)Ð*Ø�#˜ Ð)Ð*Ø�#˜�zÐ"Ø�#˜�zÐ"Ø�#˜�xÐ Ø�#˜ Ð)Ð*Ø�#˜ Ð)Ð*Ø�#˜ Ð)Ð*ð	
ˆô �M‰M‹OˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð &+ò 	6Ñ!ˆF�F˜EØò 6�Ø—
‘
˜6 6°�
Õ5ñ6ð	6ð ˆr#   c           	      ó–  — ddiddiddiddiddiddidœ}dddd	igfdd
dd	iddigfdd
ddigfdddd	iddigfd
d
dd	iddigfg}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]!  \  }}}|D ]  }	|j                  |||	¬«       Œ Œ# ddhddhddhddhddhddhdœ}
t        j                  ||
d«       |S )Nrw   r£   r¤   r¥   r³   rµ   r¶   r‡   rÁ   r¸   rÀ   r·   r¹   r†   r   r   rk   r§   r¨   r©   r/   rª   r«   r¬   r­   r®   r‘   )r   rÓ   r°   r   r»   ©r   r’   rE   r/   r�   r±   r   r    rÇ   r‡   r¼   s              r!   rƒ   z+TestSNAPUndirectedMulti.build_summary_graph  sn  € à# UÐ+Ø# VÐ,Ø# XÐ.Ø# VÐ,Ø# XÐ.Ø# UÐ+ñ
ˆð ˜M¨V°VÐ,<Ð+=Ð>Ø˜M¨V°VÐ,<¸vÀxÐ>PÐ+QÐRØ˜M¨V°XÐ,>Ð+?Ð@Ø˜M¨V°VÐ,<¸vÀxÐ>PÐ+QÐRØ˜M¨V°VÐ,<¸vÀxÐ>PÐ+QÐRð
ˆô �M‰M‹OˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð &+ò 	6Ñ!ˆF�F˜EØò 6�Ø—
‘
˜6 6°�
Õ5ñ6ð	6ð
   ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:Ø ˜:ñ
ˆ
ô 	×Ñ˜q *¨gÔ6Øˆr#   NrÈ   r`   r#   r!   rÑ   rÑ   ø  s   „ òóB"r#   rÑ   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestSNAPDirectedMultic                 ór  — ddiddiddiddiddiddiddiddidœ}ddd	d
gfddd
gfddd	gfddd	d
gfddd	gfddd
gfddd	d
gfddd
gfddd
gfddd	d
gfddd
gfddd
gfg}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]!  \  }}}|D ]  }	|j                  |||	¬«       Œ Œ# |S )Nrw   r£   rÌ   r¤   r¥   rÍ   r   rk   rÁ   rÀ   r¨   r©   r   r§   r/   rª   r†   )r   ÚMultiDiGraphr°   r   rÔ   s
             r!   r"   z*TestSNAPDirectedMulti.build_original_graph@  sg  € à˜5Ð!Ø˜5Ð!Ø˜7Ð#Ø˜7Ð#Ø˜6Ð"Ø˜6Ð"Ø˜8Ð$Ø˜8Ð$ñ	
ˆð �#˜ Ð)Ð*Ø�#˜�zÐ"Ø�#˜�xÐ Ø�#˜ Ð)Ð*Ø�#˜�xÐ Ø�#˜�zÐ"Ø�#˜ Ð)Ð*Ø�#˜�zÐ"Ø�#˜�zÐ"Ø�#˜ Ð)Ð*Ø�#˜�zÐ"Ø�#˜�zÐ"ð
ˆô �O‰OÓˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð &+ò 	6Ñ!ˆF�F˜EØò 6�Ø—
‘
˜6 6°�
Õ5ñ6ð	6ð ˆr#   c                 ó^  — ddiddiddiddidœ}dddd	gfdd
dd	gfdd
d	gfdddd	gfdd
d	gfg}t        j                  «       }|D ]  }||   } |j                  |fi |¤Ž Œ |D ]!  \  }}}|D ]  }	|j                  |||	¬«       Œ Œ# ddhddhddhddhdœ}
t        j                  ||
d«       |S )Nrw   r£   r¤   r¥   rÏ   r´   rµ   rÁ   rÀ   r¶   r·   r†   r   r   rk   r§   r¨   r©   r/   rª   r‘   )r   rÚ   r°   r   r»   rÖ   s              r!   rƒ   z)TestSNAPDirectedMulti.build_summary_graphd  s'  € à# UÐ+Ø# VÐ,Ø# XÐ.Ø# VÐ,ñ	
ˆð ˜M¨F°HÐ+=Ð>Ø˜M¨F°HÐ+=Ð>Ø˜M¨H¨:Ð6Ø˜M¨F°HÐ+=Ð>Ø˜M¨H¨:Ð6ð
ˆô �O‰OÓˆØò 	+ˆDØ˜t™ˆJØˆA�J‰J�tÑ*˜zÓ*ð	+ð &+ò 	6Ñ!ˆF�F˜EØò 6�Ø—
‘
˜6 6°�
Õ5ñ6ð	6ð
   ˜:Ø ˜:Ø ˜:Ø ˜:ñ	
ˆ
ô 	×Ñ˜q *¨gÔ6Øˆr#   NrÈ   r`   r#   r!   rØ   rØ   ?  s   „ ò"óHr#   rØ   )Ú__doc__ÚpytestÚnetworkxr   r   rb   ÚmarkÚparametrizerf   r   rÓ   rÚ   r|   r~   r    r¾   rÊ   rÑ   rØ   r`   r#   r!   ú<module>rá      sÄ   ðñó ã ÷B5ñ B5÷JMGñ MGð` ‡�×ÑØ�2—8‘8˜RŸZ™Z¨¯©¸¿¹ÐHóñ.óð.÷2ñ 2ôBX˜,ô XôvK˜ô Kô\C�|ô CôLD˜lô DôNC˜Lõ Cr#   