U
    :vfK                     @   s2   d dl Z d dlZd dlZd dlZG dd dZdS )    Nc                   @   s   e Zd Ze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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 ).TestGEXFc                 C   s  d| _ t | _| jjddd | jjddd | jjdddd t| j d| _	d	| _
t | _d
di| jjd< | jjdddddd | jjdddddd | jjdddddd | jjdddddd | jjddddd | jjdddd | jjdddd | jjdddd | jjdddd t| j
d| _d| _t | _| jjddd | jjddd | jjdddd t| jd| _d S )Nar  <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version="1.2">
    <graph mode="static" defaultedgetype="directed">
        <nodes>
            <node id="0" label="Hello" />
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1" />
        </edges>
    </graph>
</gexf>
0Hello)label1ZWorld)idUTF-8a]  <?xml version="1.0" encoding="UTF-8"?><gexf xmlns="http://www.gexf.net/1.2draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2">
  <meta lastmodifieddate="2009-03-20">
    <creator>Gephi.org</creator>
    <description>A Web network</description>
  </meta>
  <graph defaultedgetype="directed">
    <attributes class="node">
      <attribute id="0" title="url" type="string"/>
      <attribute id="1" title="indegree" type="integer"/>
      <attribute id="2" title="frog" type="boolean">
        <default>true</default>
      </attribute>
    </attributes>
    <nodes>
      <node id="0" label="Gephi">
        <attvalues>
          <attvalue for="0" value="https://gephi.org"/>
          <attvalue for="1" value="1"/>
          <attvalue for="2" value="false"/>
        </attvalues>
      </node>
      <node id="1" label="Webatlas">
        <attvalues>
          <attvalue for="0" value="http://webatlas.fr"/>
          <attvalue for="1" value="2"/>
          <attvalue for="2" value="false"/>
        </attvalues>
      </node>
      <node id="2" label="RTGI">
        <attvalues>
          <attvalue for="0" value="http://rtgi.fr"/>
          <attvalue for="1" value="1"/>
          <attvalue for="2" value="true"/>
        </attvalues>
      </node>
      <node id="3" label="BarabasiLab">
        <attvalues>
          <attvalue for="0" value="http://barabasilab.com"/>
          <attvalue for="1" value="1"/>
          <attvalue for="2" value="true"/>
        </attvalues>
      </node>
    </nodes>
    <edges>
      <edge id="0" source="0" target="1" label="foo"/>
      <edge id="1" source="0" target="2"/>
      <edge id="2" source="1" target="0"/>
      <edge id="3" source="2" target="1"/>
      <edge id="4" source="0" target="3"/>
    </edges>
  </graph>
</gexf>
frogTnode_defaultZGephizhttps://gephi.org   F)r   urlZindegreer	   ZWebatlaszhttp://webatlas.fr   2ZRTGIzhttp://rtgi.fr3ZBarabasiLabzhttp://barabasilab.comfoor   r   4at  <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version="1.2">
    <graph mode="static" defaultedgetype="undirected">
        <nodes>
            <node id="0" label="Hello" />
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1" />
        </edges>
    </graph>
</gexf>
)Zsimple_directed_datanxZDiGraphsimple_directed_graphadd_nodeadd_edgeioBytesIOencodesimple_directed_fhZattribute_dataattribute_graphgraphattribute_fhZsimple_undirected_dataGraphsimple_undirected_graphsimple_undirected_fh)cls r"   F/tmp/pip-unpacked-wheel-_lngutwb/networkx/readwrite/tests/test_gexf.pysetup_class
   sf    
8
            

zTestGEXF.setup_classc                 C   s~   | j }t| j}t| t| ks.tt| t| ksJtt|jddt|jddksnt| jd d S NTdatar   )	r   r   	read_gexfr   sortednodesAssertionErroredgesseekselfGHr"   r"   r#   !test_read_simple_directed_graphml   s    $z*TestGEXF.test_read_simple_directed_graphmlc                 C   s   | j }t }t|| |d t|}t| t| ksJt	t|
 t|
 ksft	t|j
ddt|j
ddkst	| jd d S )Nr   Tr&   )r   r   r   r   
write_gexfr-   r(   r)   r*   r+   r,   r   r/   r0   fhr1   r"   r"   r#   'test_write_read_simple_directed_graphml   s    

$z0TestGEXF.test_write_read_simple_directed_graphmlc                 C   sn   | j }t| j}t| t| ks.ttdd | D tdd | D ks^t| jd d S )Nc                 s   s   | ]}t |V  qd S Nr)   .0er"   r"   r#   	<genexpr>   s     z?TestGEXF.test_read_simple_undirected_graphml.<locals>.<genexpr>r   )	r   r   r(   r    r)   r*   r+   r,   r-   r.   r"   r"   r#   #test_read_simple_undirected_graphml   s    z,TestGEXF.test_read_simple_undirected_graphmlc                 C   s   | j }t| j}t|dt|jddks4tt|jdd}t|jdd}t||D ]\}}||ks^tq^| j	d d S r%   )
r   r   r(   r   r)   r*   r+   r,   zipr-   )r/   r0   r1   geheabr"   r"   r#   test_read_attribute_graphml   s    "z$TestGEXF.test_read_attribute_graphmlc                 C   s*   d}t |d}ttjtj| d S )Na  <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version='1.2'>
    <graph mode="static" defaultedgetype="undirected" name="">
        <nodes>
            <node id="0" label="Hello" />
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1" type="directed"/>
        </edges>
    </graph>
</gexf>
r   r   r   r   pytestZraisesr   ZNetworkXErrorr(   r/   sr5   r"   r"   r#    test_directed_edge_in_undirected   s    z)TestGEXF.test_directed_edge_in_undirectedc                 C   s*   d}t |d}ttjtj| d S )Na  <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version='1.2'>
    <graph mode="static" defaultedgetype="directed" name="">
        <nodes>
            <node id="0" label="Hello" />
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1" type="undirected"/>
        </edges>
    </graph>
</gexf>
r   rD   rF   r"   r"   r#    test_undirected_edge_in_directed   s    z)TestGEXF.test_undirected_edge_in_directedc                 C   s*   d}t |d}ttjtj| d S )Na   <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version='1.2'>
    <graph mode="static" defaultedgetype="directed" name="">
        <nodes>
            <node id="0" label="Hello">
              <attvalues>
                <attvalue for='0' value='1'/>
              </attvalues>
            </node>
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1" type="undirected"/>
        </edges>
    </graph>
</gexf>
r   rD   rF   r"   r"   r#   test_key_raises   s    zTestGEXF.test_key_raisesc                 C   s>   d}t |d}tj|dd}t| ddgks:td S )Nay  <?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.2draft" version='1.2'>
    <graph mode="static" defaultedgetype="directed" name="">
        <nodes>
            <node id="0" label="Hello" />
            <node id="1" label="Word" />
        </nodes>
        <edges>
            <edge id="0" source="0" target="1"/>
        </edges>
    </graph>
</gexf>
r   T)Zrelabelr   Word)r   r   r   r   r(   r)   r*   r+   )r/   rG   r5   r0   r"   r"   r#   test_relabel   s    zTestGEXF.test_relabelc                 C   s   t  }|jdddd t |ddddg |jdddd d	d
i|jd< ddi|jd< t }t || |	d t j
|td}t| t| ksttdd | D tdd | D kst|jd= |j|jkstd S )Nr   r   greenr   colorr   r      )r   rO   Zyellowr
   r      Zedge_defaultZ	node_typec                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     z2TestGEXF.test_default_attribute.<locals>.<genexpr>mode)r   r   r   Zadd_pathr   r   r   r   r3   r-   r(   intr)   r*   r+   r,   r4   r"   r"   r#   test_default_attribute   s     
zTestGEXF.test_default_attributec                 C   sp   t  }|jdddd t }t || |d t j|td}t	|dgksVt
|jd d dkslt
d S )	Nr   rQ   M   r   r   rR   r   Z77)r   r   r   r   r   r3   r-   r(   rT   listr+   r*   r4   r"   r"   r#   test_serialize_ints_to_strings  s    
z'TestGEXF.test_serialize_ints_to_stringsc                 C   s   t  }|dddg tdD ]N}||j| d< ||j| d< ||j| d< ||j| d< |d	 |j| d
< q dtd dt j d}dt 	|}||kst
d S )N)r   r   r   r   r   rP      r   r   pidstartr   end<gexf xmlns="http://www.gexf.net/1.2draft" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd" version="1.2">
  <meta lastmodifieddate="%Y-%m-%d">
    <creator>NetworkX a  </creator>
  </meta>
  <graph defaultedgetype="undirected" mode="dynamic" name="" timeformat="long">
    <nodes>
      <node id="0" label="0" pid="0" start="0" end="1" />
      <node id="1" label="1" pid="1" start="1" end="2" />
      <node id="2" label="2" pid="2" start="2" end="3" />
      <node id="3" label="3" pid="3" start="3" end="4" />
    </nodes>
    <edges>
      <edge source="0" target="1" id="0" />
      <edge source="1" target="2" id="1" />
      <edge source="2" target="3" id="2" />
    </edges>
  </graph>
</gexf>
)r   r   add_edges_fromranger*   timestrftime__version__joingenerate_gexfr+   )r/   r0   iexpectedobtainedr"   r"   r#   test_write_with_node_attributes  s    z(TestGEXF.test_write_with_node_attributesc                 C   sf   t  }|ddddifddddifdg dtd dt j d	}d
t |}||ksbtd S )Nr   r   r   r   rZ   r_   r`   ra   a  </creator>
  </meta>
  <graph defaultedgetype="undirected" mode="static" name="">
    <nodes>
      <node id="0" label="0" />
      <node id="1" label="1" />
      <node id="2" label="2" />
      <node id="3" label="3" />
    </nodes>
    <edges>
      <edge source="0" target="1" id="0" />
      <edge source="1" target="2" id="2" />
      <edge source="2" target="3" id="1" />
    </edges>
  </graph>
</gexf>rb   )	r   r   rc   re   rf   rg   rh   ri   r+   )r/   r0   rk   rl   r"   r"   r#   test_edge_id_construct8  s    $zTestGEXF.test_edge_id_constructc                 C   s   t d}td}t|dd |dD d |d|d d d	< d
td dtj	 d}d
t|}||ks~td S )NZnumpyr[   c                 S   s   i | ]
}||qS r"   r"   )r:   nr"   r"   r#   
<dictcomp>W  s      z,TestGEXF.test_numpy_type.<locals>.<dictcomp>numberg?r   r   zedge-numberr_   r`   ra   a_  </creator>
  </meta>
  <graph defaultedgetype="undirected" mode="static" name="">
    <attributes mode="static" class="edge">
      <attribute id="1" title="edge-number" type="float" />
    </attributes>
    <attributes mode="static" class="node">
      <attribute id="0" title="number" type="int" />
    </attributes>
    <nodes>
      <node id="0" label="0">
        <attvalues>
          <attvalue for="0" value="0" />
        </attvalues>
      </node>
      <node id="1" label="1">
        <attvalues>
          <attvalue for="0" value="1" />
        </attvalues>
      </node>
      <node id="2" label="2">
        <attvalues>
          <attvalue for="0" value="2" />
        </attvalues>
      </node>
      <node id="3" label="3">
        <attvalues>
          <attvalue for="0" value="3" />
        </attvalues>
      </node>
    </nodes>
    <edges>
      <edge source="0" target="1" id="0">
        <attvalues>
          <attvalue for="1" value="1.1" />
        </attvalues>
      </edge>
      <edge source="1" target="2" id="1" />
      <edge source="2" target="3" id="2" />
    </edges>
  </graph>
</gexf>rb   )rE   Zimportorskipr   Z
path_graphZset_node_attributesZarangeZfloat64re   rf   rg   rh   ri   r+   )r/   npr0   rk   rl   r"   r"   r#   test_numpy_typeT  s    

/zTestGEXF.test_numpy_typec                 C   sX   t  }|jddd t }t || |d t j|td}|j	d d sTt
d S )Nr   T)testattrr   rR   rt   r   r   r   r   r   r3   r-   r(   rT   r*   r+   r4   r"   r"   r#   	test_bool  s    
zTestGEXF.test_boolc                 C   s  ddl m} tdtd }}t }|jd|ddd |jd|dd	d |jd
| ddd t }t|| |	d |
 }|	d tj|td}d|kstd|kstd|kst|jd d |kst||jd d st|jd
 d | kst|jd d dkst|jd d dks6t|jd
 d dksNt|jd d dksft|jd d d	ks~t|jd
 d dkstd S )Nr   )isnaninfnanr   rA   )rt   strdatakeyr   rB   rP   z-infcrR   s   INFs   NaNs   -INFrt   rz   networkx_key)mathrw   floatr   r   r   r   r   r3   r-   readr(   rT   r+   r*   )r/   rw   rx   ry   r0   r5   Zfiletextr1   r"   r"   r#   test_specials  s0    

zTestGEXF.test_specialsc                 C   sd   t  }ddg}|jd|d t }t || |d t j|td}|j	d d |ks`t
d S )N)r   r   rP   )	   r   r   r   )r{   r   rR   r}   ru   )r/   r0   Z
list_valuer5   r1   r"   r"   r#   test_simple_list  s    
zTestGEXF.test_simple_listc                 C   s   t  }|jdddd d|jd< t }t || |d t j|t	d}t
| t
| ksjtt
d	d
 | D t
d	d
 | D kstd S )Nr   r   rM   rN   ZdynamicrS   r   rR   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     z-TestGEXF.test_dynamic_mode.<locals>.<genexpr>)r   r   r   r   r   r   r3   r-   r(   rT   r)   r*   r+   r,   r4   r"   r"   r#   test_dynamic_mode  s    

zTestGEXF.test_dynamic_modec              	   C   s   t  }|jdddd |jdddd |jddddd	ddd
 |jddddddd |dd t }t || |d t j|t	d}t
| t
| kstt
dd | D t
dd | D kstd S )Nr   r   rM   rN   r   r   r   rP   Z
undirected)r   Zweighttyper]   r^   r   )r   r   r]   r^   rR   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     zCTestGEXF.test_multigraph_with_missing_attributes.<locals>.<genexpr>)r   Z
MultiGraphr   r   r   r   r3   r-   r(   rT   r)   r*   r+   r,   r4   r"   r"   r#   'test_multigraph_with_missing_attributes  s    
z0TestGEXF.test_multigraph_with_missing_attributesc                 C   sR  t  }|jdddd ddi|jd d< dddd	|jd d d
< dddd|jd d d< d|jd d d< d|jd d d< t }t j||dd |d t j|t	d}t
| t
| kstt
dd | D t
dd | D kstt }t j||dd |d t j|t	d}|jd d d d dksNtt  }|jdddd ddi|jd d< dddd	|jd d d
< ddddd|jd d d< d|jd d d< d|jd d d< t }t || |d t j|t	d}t
| t
| kstt
dd | D t
dd | D ksNtd S )Nr   r   rM   rN   size6   Zvizr   )xyzposition   )rgrB   rO   zhttp://random.urlshaper   Z	thickness1.1draftversionrR   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     z7TestGEXF.test_missing_viz_attributes.<locals>.<genexpr>z1.2draftrA   g      ?g      ?)r   r   rB   rA   zftp://random.urlc                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     r   r   r   r*   r   r   r3   r-   r(   rT   r)   r+   r,   r4   r"   r"   r#   test_missing_viz_attributes  sF    

 
z$TestGEXF.test_missing_viz_attributesc                 C   sL  t  }|jdddd dg|jd d< t }t || |d t j|t	d}t
| t
| ksptt
dd	 | D t
dd	 | D kstt  }|jdddd dg|jd d
< t }t j||dd |d t j|t	d}t
| t
| kstt
dd	 | D t
dd	 | D ksHtd S )Nr   r   rM   rN   rY   ZspellsrR   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     z0TestGEXF.test_slice_and_spell.<locals>.<genexpr>Zslicesr   r   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<     s     r   r4   r"   r"   r#   test_slice_and_spell	  s,    

zTestGEXF.test_slice_and_spellc                 C   s   t  }|jdddddgd t }t || |d t j|td}t	|
 t	|
 ksftt	dd	 | D t	dd	 | D kstd S )
Nr   r   rM   r   r   )r   rO   parentsrR   c                 s   s   | ]}t |V  qd S r7   r8   r9   r"   r"   r#   r<   +  s     z+TestGEXF.test_add_parent.<locals>.<genexpr>)r   r   r   r   r   r3   r-   r(   rT   r)   r*   r+   r,   r4   r"   r"   r#   test_add_parent#  s    
zTestGEXF.test_add_parentN)__name__
__module____qualname__classmethodr$   r2   r6   r=   rC   rH   rI   rJ   rL   rU   rX   rm   rn   rs   rv   r   r   r   r   r   r   r   r"   r"   r"   r#   r   	   s.   
|	

#8
 
,r   )r   re   rE   Znetworkxr   r   r"   r"   r"   r#   <module>   s   