o
    œÇh»1  ã                	   @   s°   d dl Z d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZmZ G dd„ dƒZe j ddd	gd d
ddifd
dddifgf¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )é    N)Úfrom_dict_of_dictsÚfrom_dict_of_listsÚto_dict_of_dictsÚto_dict_of_listsÚto_networkx_graph)Úbarbell_graphÚcycle_graph)Úedges_equalÚgraphs_equalÚnodes_equalc                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestConvertc                 C   s$   t dd„ |D ƒƒt dd„ |D ƒƒkS )Nc                 s   s    | ]}t |ƒV  qd S ©N©Úsorted)Ú.0Úe© r   úo/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/networkx/tests/test_convert.pyÚ	<genexpr>   s   € z.TestConvert.edgelists_equal.<locals>.<genexpr>r   )ÚselfÚe1Úe2r   r   r   Úedgelists_equal   s   $zTestConvert.edgelists_equalc                 C   sÂ   t tfttffD ]V\}}tddƒ}i |_||ƒ}||ƒ}t||ƒs#J ‚t|ƒ}t||ƒs.J ‚t 	|¡}t||ƒs:J ‚t 
d¡}t 
d¡}	i |_i |	_||g d¢d}t 	|¡}
t|
|	ƒs^J ‚qd S )Né
   é   é   ©r   é   é   ©Únodelist)r   r   r   r   r   Úgraphr
   r   ÚnxÚGraphÚ
path_graph)r   ÚdestÚsourceÚGÚdodÚGGÚGWÚGIÚP4ÚP3ÚGdodr   r   r   Útest_simple_graphs   s(   þ




ézTestConvert.test_simple_graphsc                 C   s„   G dd„ dƒ}t  tjt|¡ G dd„ dƒ}t  tjt|¡ ddi}t  tt|¡ G dd„ dƒ}t  tjt|¡ t  tjtd¡ d S )Nc                   @   ó   e Zd ZdZdS ©z&TestConvert.test_exceptions.<locals>.GN)Ú__name__Ú
__module__Ú__qualname__Úadjr   r   r   r   r'   /   ó    r'   c                   @   r0   r1   )r2   r3   r4   Ú	is_strictr   r   r   r   r'   5   r6   Úar   c                   @   r0   r1   )r2   r3   r4   Únextr   r   r   r   r'   ?   r6   )ÚpytestÚraisesr"   ÚNetworkXErrorr   Ú	TypeError)r   r'   r   r   r   Útest_exceptions-   s   zTestConvert.test_exceptionsc                 C   sà  t tfttffD ]å\}}tdƒ}||ƒ}||ƒ}tt| ¡ ƒt| ¡ ƒƒs'J ‚tt| 	¡ ƒt| 	¡ ƒƒs6J ‚t
|ƒ}tt| ¡ ƒt| ¡ ƒƒsIJ ‚tt| 	¡ ƒt| 	¡ ƒƒsXJ ‚t |¡}tt| ¡ ƒt| ¡ ƒƒslJ ‚tt| 	¡ ƒt| 	¡ ƒƒs{J ‚tdtjd}||ƒ}||tjd}t| ¡ ƒt| ¡ ƒks›J ‚t| 	¡ ƒt| 	¡ ƒks©J ‚t
|tjd}t| ¡ ƒt| ¡ ƒks¾J ‚t| 	¡ ƒt| 	¡ ƒksÌJ ‚t |¡}t| ¡ ƒt| ¡ ƒksßJ ‚t| 	¡ ƒt| 	¡ ƒksíJ ‚qd S )Nr   ©Úcreate_using)r   r   r   r   r   r   r   Únodesr	   Úedgesr   r"   r#   ÚDiGraph)r   r%   r&   r'   r(   r)   r*   r+   r   r   r   Útest_digraphsG   s4   þ

äzTestConvert.test_digraphsc           	      C   s  t  d¡}t  ¡ }| |¡ | dd„ | ¡ D ƒ¡ t|ƒ}t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒs4J ‚tt	| ¡ ƒt	| ¡ ƒƒsCJ ‚t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒsYJ ‚tt	| ¡ ƒt	| ¡ ƒƒshJ ‚t  |¡}t	| 
¡ ƒt	| 
¡ ƒks{J ‚t	| ¡ ƒt	| ¡ ƒks‰J ‚t|ƒ}t|t jd}dd„ |jddD ƒ}tt	| 
¡ ƒt	| 
¡ ƒƒs®J ‚t|t	|jddƒƒs»J ‚t|t jd}tt	| 
¡ ƒt	| 
¡ ƒƒsÑJ ‚t|t	|jddƒƒsÞJ ‚t  |¡}tt	| 
¡ ƒt	| 
¡ ƒƒsòJ ‚t|t	|jddƒƒsÿJ ‚d S )	Nr   c                 s   ó    | ]
\}}|||fV  qd S r   r   ©r   ÚuÚvr   r   r   r   j   ó   € z)TestConvert.test_graph.<locals>.<genexpr>r?   c                 S   ó   g | ]
\}}}||i f‘qS r   r   ©r   rG   rH   Údr   r   r   Ú
<listcomp>|   ó    z*TestConvert.test_graph.<locals>.<listcomp>T©Údata)r"   r   r#   Úadd_nodes_fromÚadd_weighted_edges_fromrB   r   r   r   r   rA   r	   r   r   r   )	r   Úgr'   r(   r)   r*   r+   ÚdolÚenoner   r   r   Ú
test_graphf   s2   



zTestConvert.test_graphc                 C   s  t dƒ}t ¡ }| |¡ | dd„ | ¡ D ƒ¡ t ¡ }| |¡ | dd„ | ¡ D ƒ¡ |jdddd t ¡ }| |¡ | d	d„ | ¡ D ƒ¡ |jddd
d t|ƒ}t	|tjd}t
| ¡ | ¡ ƒsiJ ‚t| ¡ | ¡ ƒstJ ‚t|tjd}t
| ¡ | ¡ ƒs†J ‚t| ¡ | ¡ ƒs‘J ‚t |¡}t
| ¡ | ¡ ƒs¡J ‚t| ¡ | ¡ ƒs¬J ‚t|ƒ}	t|	tjd}dd„ |jddD ƒ}
t
t| ¡ ƒt| ¡ ƒƒsÑJ ‚t|
t|jddƒƒsÞJ ‚t|	tjd}t
t| ¡ ƒt| ¡ ƒƒsôJ ‚t|
t|jddƒƒsJ ‚t |	¡}t
t| ¡ ƒt| ¡ ƒƒsJ ‚t|
t|jddƒƒs%J ‚t|ƒ}t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒsAJ ‚tt| ¡ ƒt| ¡ ƒƒsQJ ‚t|tjdd}t
t| ¡ ƒt| ¡ ƒƒsiJ ‚tt| ¡ ƒt| ¡ ƒƒsyJ ‚t |¡}t
t| ¡ ƒt| ¡ ƒƒsŽJ ‚t| ¡ ƒt| ¡ ƒksJ ‚t	|tjdd}t
t| ¡ ƒt| ¡ ƒƒsµJ ‚t| ¡ ƒt| ¡ ƒksÄJ ‚t |¡}t
t| ¡ ƒt| ¡ ƒƒsÙJ ‚tt| ¡ ƒt| ¡ ƒƒséJ ‚t |¡}t
t| ¡ ƒt| ¡ ƒƒsþJ ‚tt| ¡ ƒt| ¡ ƒƒsJ ‚t|ƒ}	t|	tjd}t
t| ¡ ƒt| ¡ ƒƒs)J ‚tt| ¡ ƒt| ¡ ƒƒs9J ‚t|	tjd}t
t| ¡ ƒt| ¡ ƒƒsPJ ‚tt| ¡ ƒt| ¡ ƒƒs`J ‚t |	¡}t
t| ¡ ƒt| ¡ ƒƒsuJ ‚tt| ¡ ƒt| ¡ ƒƒs…J ‚d S )Nr   c                 s   rE   r   r   rF   r   r   r   r   Š   rI   z>TestConvert.test_with_multiedges_self_loops.<locals>.<genexpr>c                 s   rE   r   r   rF   r   r   r   r      rI   r   r   r   ©Úweightc                 s   rE   r   r   rF   r   r   r   r   ‘   rI   éd   r?   c                 S   rJ   r   r   rK   r   r   r   rM   ¦   rN   z?TestConvert.test_with_multiedges_self_loops.<locals>.<listcomp>TrO   )r@   Úmultigraph_inputF)r   r"   r#   rQ   rR   rB   Ú
MultiGraphÚadd_edger   r   r   rA   r	   r   r   r   r   )r   r'   ÚXGÚXGMÚXGSr(   r)   r*   r+   rT   rU   ÚGEÚGMr   r   r   Útest_with_multiedges_self_loops†   s|   




     
  
  
      
 $z+TestConvert.test_with_multiedges_self_loopsc                 C   sˆ  t  d¡}g d¢}t  |¡}tt| ¡ ƒt| ¡ ƒƒsJ ‚tt| ¡ ƒt| ¡ ƒƒs,J ‚tt|jddƒt|jddƒƒs?J ‚ddi fddi fddi fg}t  |¡}tt| ¡ ƒt| ¡ ƒƒsaJ ‚tt| ¡ ƒt| ¡ ƒƒspJ ‚tt|jddƒt|jddƒƒsƒJ ‚d	d
„ tdƒD ƒ}t  |¡}tt| ¡ ƒt| ¡ ƒƒs J ‚tt| ¡ ƒt| ¡ ƒƒs¯J ‚tt|jddƒt|jddƒƒsÂJ ‚d S )Nr   )©r   r   ©r   r   )r   r   TrO   r   r   r   r   c                 s   s    | ]	}||d  fV  qdS )r   Nr   )r   Únr   r   r   r   â   s   € z-TestConvert.test_edgelists.<locals>.<genexpr>)	r"   r$   r#   r   r   rA   r	   rB   Úrange)r   ÚPr   r'   r   r   r   Útest_edgelistsÔ   s    

&
&
*zTestConvert.test_edgelistsc                 C   s  g d¢}g d¢}|   t t |¡¡ ¡ |¡sJ ‚|   t t |¡¡ ¡ |¡s(J ‚|   t t |¡¡ ¡ |¡s8J ‚|   t t |¡¡ ¡ |¡sHJ ‚|   t t |¡¡ ¡ |¡sXJ ‚|   t t |¡¡ ¡ |¡shJ ‚|   t t |¡¡ ¡ |¡sxJ ‚|   t t |¡¡ ¡ |¡sˆJ ‚d S )N)rc   rd   )r   r   )rc   rd   ©r   r   )r   r"   r#   rC   rB   r[   ÚMultiDiGraph)r   Úedges1Úedges2r   r   r   Útest_directed_to_undirectedè   s       ÿÿ $z'TestConvert.test_directed_to_undirectedc                 C   s^   t  ¡ }| d¡ t|t jd}t|jƒt|jƒksJ ‚t  |¡}t|jƒt|jƒks-J ‚d S )NÚabcr?   )r"   r#   rQ   r   ÚlistrA   rC   )r   r'   ÚHr   r   r   Útest_attribute_dict_integrityú   s   

z)TestConvert.test_attribute_dict_integrityc                 C   s8   t  dg¡}t j|t|ƒd}t|jdd|ƒsJ ‚d S )N)r   r   r   TrO   )r"   r#   Úto_edgelistro   r	   rB   )r   r'   Úelistr   r   r   Útest_to_edgelist  s   zTestConvert.test_to_edgelistc                    sp   G dd„ dt ƒ‰ G ‡ fdd„dtjƒ}t ¡ }|jddd ||ƒ}t|jd t ƒs,J ‚t|jd ˆ ƒs6J ‚d S )Nc                   @   s   e Zd ZdS )zGTestConvert.test_custom_node_attr_dict_safekeeping.<locals>.custom_dictN)r2   r3   r4   r   r   r   r   Úcustom_dict	  s    ru   c                       s   e Zd Z” ZdS )zBTestConvert.test_custom_node_attr_dict_safekeeping.<locals>.CustomN)r2   r3   r4   Únode_attr_dict_factoryr   ©ru   r   r   ÚCustom  r6   rx   r   rW   )Údictr"   r#   Úadd_nodeÚ
isinstanceÚ_node)r   rx   rS   Úhr   rw   r   Ú&test_custom_node_attr_dict_safekeeping  s   z2TestConvert.test_custom_node_attr_dict_safekeepingN)r2   r3   r4   r   r/   r>   rD   rV   rb   rh   rm   rq   rt   r~   r   r   r   r   r      s     N	r   Úedgelistrc   rd   r   rX   g      ð?r   g       @c                 C   sF   t  ¡ }| | ¡ ddidddœddidœ}t j|dd|ks!J ‚d S )Nr   r   ri   r   ©Ú	edge_data)r"   r#   Úadd_edges_fromr   )r   r'   Úexpectedr   r   r   Ú)test_to_dict_of_dicts_with_edgedata_param  s   

r„   c                  C   sH   t  d¡} g d¢}ddidddœddidœ}t j| |dd|ks"J ‚d S )Né   )r   r   r   r   r   )r   r   )r    r   )r"   r$   r   )r'   r    rƒ   r   r   r   Ú0test_to_dict_of_dicts_with_edgedata_and_nodelist-  s   
r†   c                  C   sT   t  ¡ } | jdddd | jdddd ddiddidœ}t j| dd|ks(J ‚d	S )
z2Multi edge data overwritten when edge_data != Noner   r   r8   )ÚkeyÚbr   rc   r€   N)r"   r[   r\   r   )r'   rƒ   r   r   r   Ú.test_to_dict_of_dicts_with_edgedata_multigraph4  s
   r‰   c                  C   sH   g d¢} t jtjdd t | ¡ W d   ƒ d S 1 sw   Y  d S )N)r   r   r   zInput is not a valid edge list)Úmatch)r:   r;   r"   r<   r   )Úinvalid_edgelistr   r   r   Ú#test_to_networkx_graph_non_edgelist>  s   "ÿrŒ   )r:   Únetworkxr"   Únetworkx.convertr   r   r   r   r   Únetworkx.generators.classicr   r   Únetworkx.utilsr	   r
   r   r   ÚmarkÚparametrizer„   r†   r‰   rŒ   r   r   r   r   Ú<module>   s$      üþ
		
