o
    ßË·eÎ#  ã                   @   sd   d Z ddlZddlZddlZe d¡ZddlZG dd„ dƒZdd„ Z	G dd	„ d	ƒZ
G d
d„ dƒZdS )zUnit tests for shp.
é    Nz	osgeo.ogrc                   @   sT   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S )ÚTestShpc                 C   sÐ  t jfdd„}t  d¡}tj t ¡ d¡}tj t ¡ d¡}tj t ¡ d¡}|  ||||¡ t 	|¡ g d¢| _
dd	gd	d
gg d¢f| _g d¢| _dd	gd	d
gddgf| _g d¢| _| |¡}||ƒ}t| j| j
ƒD ]+\}}	t  | ¡ ¡}
t  t j¡}|D ]}|j|Ž  q~|
 |¡ |
 d|	¡ | |
¡ qk| |¡}||t jƒ}t  t j¡}| jD ]}t  t j¡}|D ]}|j|Ž  qµ| |¡ q«t  | ¡ ¡}| |¡ | dd¡ | |¡ || _|| _|| _|| _d S )Nc                 S   s4   |   dd |¡}t dtj¡}| d¡ | |¡ |S )NÚedgesÚNameé    )ÚCreateLayerÚogrÚ	FieldDefnÚ	OFTStringÚSetWidthÚCreateField)ÚdriverÚ	layerTypeÚlyrÚnamedef© r   úX/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/readwrite/tests/test_shp.pyÚcreatelayer   s
   

z)TestShp.setup_method.<locals>.createlayerúESRI ShapefileÚshpdirz
tmpshp.shpztmp_mshp.shp)ÚaÚbÚcr   )ç      ð?r   )ç       @r   )ç      @r   )©çÍÌÌÌÌÌì?r   )ç      @r   ©r   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   ÚwkbLineStringÚGetDriverByNameÚosÚpathÚjoinÚtempfileÚ
gettempdirÚ	deletetmpÚmkdirÚnamesÚpathsÚsimplified_namesÚsimplified_pathsÚmulti_namesÚCreateDataSourceÚzipÚFeatureÚGetLayerDefnÚGeometryÚAddPoint_2DÚSetGeometryÚSetFieldÚCreateFeatureÚwkbMultiLineStringÚAddGeometryÚshppathÚmulti_shppathÚtestdirÚdrv)Úselfr   r;   r:   r8   r9   Úshpr   r"   ÚnameÚfeatÚgÚpÚ	multi_shpÚ	multi_lyrÚmulti_gÚ
multi_featr   r   r   Úsetup_method   sX   


ý
ý







zTestShp.setup_methodc                 G   s$   |D ]}t j |¡r| |¡ qd S ©N)r!   r"   ÚexistsÚDeleteDataSource)r<   r;   r)   rA   r   r   r   r&   S   s
   
€þzTestShp.deletetmpc                 C   sh   dd„ }t  | j¡}||| j| jƒ t j| jdd}||| j| jƒ t j| jdd}||| j| jƒ d S )Nc                    s|   t  ¡ }|D ]}t  ||¡ qt|jƒtˆ jƒksJ ‚t| ¡ ƒtˆ  ¡ ƒks)J ‚‡ fdd„ˆ  ¡ D ƒ}|t|ƒks<J ‚d S )Nc                    s    g | ]\}}ˆ   ||¡d  ‘qS )r   )Úget_edge_data)Ú.0ÚsÚe©r@   r   r   Ú
<listcomp>_   s     zGTestShp.testload.<locals>.compare_graph_paths_names.<locals>.<listcomp>)ÚnxÚDiGraphÚadd_pathÚsortedÚnodesr   )r@   r)   r(   ÚexpectedrA   Úg_namesr   rN   r   Úcompare_graph_paths_namesY   s   z3TestShp.testload.<locals>.compare_graph_paths_namesF©Úsimplify)	rP   Úread_shpr8   r+   r*   r)   r(   r9   r,   )r<   rW   ÚGr   r   r   ÚtestloadX   s   
zTestShp.testloadc                 C   sF   |  ¡ }g }|r| | ¡  ¡ ¡ |  ¡ }|st|ƒt|ƒks!J ‚d S rG   )ÚGetNextFeatureÚappendÚGetGeometryRefÚExportToWktrS   )r<   r   rU   ÚfeatureÚ	actualwktr   r   r   Ú	checkgeomn   s   þzTestShp.checkgeomc                 C   s¶   d}d}d}d}t j t ¡ d¡}t | j¡}t ||¡ t	 
|¡}|  | d¡|¡ |  | d¡|¡ tj| jdd	}t ||¡ t	 
|¡}|  | d¡|¡ |  | d¡|¡ d S )
N)úPOINT (1 1)úPOINT (2 2)úPOINT (3 3)úPOINT (0.9 0.9)úPOINT (4 2))úLINESTRING (1 1,2 2)úLINESTRING (2 2,3 3)z LINESTRING (0.9 0.9,4.0 0.9,4 2))rd   re   rf   rg   zPOINT (4.0 0.9)rh   )ri   rj   zLINESTRING (0.9 0.9,4.0 0.9)zLINESTRING (4.0 0.9,4 2)r   rT   r   FrX   )r!   r"   r#   r$   r%   rP   rZ   r8   Ú	write_shpr   ÚOpenrc   ÚGetLayerByName)r<   Úexpectedpoints_simpleÚexpectedlines_simpleÚexpectedpointsÚexpectedlinesÚtpathr[   r   r   r   r   Útest_geometryexportv   s   

zTestShp.test_geometryexportc                 C   sT   dd„ }t j t ¡ d¡}t | j¡}t ||¡ t	 
|¡}| d¡}|||ƒ d S )Nc                 S   sl   |   ¡ }|r4g }| ¡ }| ¡ d }| d¡| |¡f}| d¡}|j|Ž d |ks,J ‚|   ¡ }|sd S d S )Né   r   r   )r]   r_   ÚGetPointCountÚGetPoint_2DÚGetFieldAsStringrJ   )r   Úgraphra   ÚcoordsÚrefÚlastÚ
edge_nodesr>   r   r   r   Útestattributes£   s   
ùz4TestShp.test_attributeexport.<locals>.testattributesr   r   )r!   r"   r#   r$   r%   rP   rZ   r8   rk   r   rl   rm   )r<   r}   rr   r[   r   r   r   r   r   Útest_attributeexport¢   s   

zTestShp.test_attributeexportc           
      C   s    t j t ¡ d¡}t ¡ }d}d}d}| ||¡ | ||¡ d}|jddD ]\}}||d< q't 	||¡ t 
|¡}	|	jddD ]\}}|d |ksMJ ‚qAd S )	Nr   ©r   r   ©rt   rt   ©é   r‚   Ú
node_labelT©ÚdataÚlabel)r!   r"   r#   r$   r%   rP   rQ   Úadd_edgerT   rk   rZ   )
r<   rr   r[   ÚAÚBÚCr†   ÚnÚdÚHr   r   r   Útest_nodeattributeexport·   s   

ÿz TestShp.test_nodeattributeexportc              
   C   s¾   t  ¡ }tj t ¡ d¡}d}d}|jd|d d |jd|d d |jdd|d d zt  	||¡ W n t
yE } zJ |ƒ‚d }~ww t |¡}|  | d	¡|¡ |  | d
¡|¡ d S )Nr   )rg   rh   )zLINESTRING (0.9 0.9,4 2)rt   r   )ÚWktr‚   FrT   r   )rP   rQ   r!   r"   r#   r$   r%   Úadd_noder‡   rk   Ú	Exceptionr   rl   rc   rm   )r<   r[   rr   ÚpointsÚlineÚerrr   r   r   r   Útest_wkt_exportÉ   s    €ÿ
zTestShp.test_wkt_exportc                 C   s   |   | j| j| j¡ d S rG   )r&   r;   r:   r8   ©r<   r   r   r   Úteardown_methodÙ   ó   zTestShp.teardown_methodN)Ú__name__Ú
__module__Ú__qualname__rF   r&   r\   rc   rs   r~   rŽ   r•   r—   r   r   r   r   r      s    D,r   c                  C   s:   t  t¡ t d¡} W d   ƒ d S 1 sw   Y  d S )NÚ)hopefully_this_file_will_not_be_available)ÚpytestÚraisesÚRuntimeErrorrP   rZ   )r[   r   r   r   Útest_read_shp_nofileÝ   s   "ÿr    c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestMissingGeometryc                 C   s   |   ¡  |  ¡  |  ¡  d S rG   )Ú
setup_pathÚdelete_shapedirÚcreate_shapedirr–   r   r   r   rF   ã   s   z TestMissingGeometry.setup_methodc                 C   ó   |   ¡  d S rG   ©r£   r–   r   r   r   r—   è   ó   z#TestMissingGeometry.teardown_methodc                 C   ó   t j t ¡ d¡| _d S )NÚmissing_geometry©r!   r"   r#   r$   r%   r–   r   r   r   r¢   ë   r˜   zTestMissingGeometry.setup_pathc                 C   sT   t  d¡}| | j¡}| dd t j¡}t  | ¡ ¡}| d ¡ | 	|¡ | 
¡  d S )Nr   rT   )r   r    r-   r"   r   ÚwkbPointr/   r0   r3   r5   ÚDestroy)r<   r;   r=   r   ra   r   r   r   r¤   î   s   


z#TestMissingGeometry.create_shapedirc                 C   ó,   t  d¡}tj | j¡r| | j¡ d S d S ©Nr   ©r   r    r!   r"   rH   rI   ©r<   r;   r   r   r   r£   ÷   ó   
ÿz#TestMissingGeometry.delete_shapedirc                 C   s>   t  tj¡ t | j¡}W d   ƒ d S 1 sw   Y  d S rG   )r   rž   rP   ÚNetworkXErrorrZ   r"   )r<   r[   r   r   r   Útest_missing_geometryü   s   "ÿz)TestMissingGeometry.test_missing_geometryN)	r™   rš   r›   rF   r—   r¢   r¤   r£   r³   r   r   r   r   r¡   â   s    	r¡   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMissingAttrWritec                 C   s   |   ¡  |  ¡  d S rG   )r¢   r£   r–   r   r   r   rF     s   z!TestMissingAttrWrite.setup_methodc                 C   r¥   rG   r¦   r–   r   r   r   r—     r§   z$TestMissingAttrWrite.teardown_methodc                 C   r¨   )NÚmissing_attributesrª   r–   r   r   r   r¢   	  r˜   zTestMissingAttrWrite.setup_pathc                 C   r­   r®   r¯   r°   r   r   r   r£     r±   z$TestMissingAttrWrite.delete_shapedirc           	      C   s¦   t  ¡ }d}d}d}|j||dd | ||¡ t  || j¡ t  | j¡}|jddD ]%\}}}||kr@||kr@|d dks@J ‚||krP||krP|d d u sPJ ‚q+d S )	Nr   r€   r   éd   )ÚfooTr„   r·   )rP   rQ   r‡   rk   r"   rZ   r   )	r<   r[   rˆ   r‰   rŠ   r   ÚuÚvrŒ   r   r   r   Útest_missing_attributes  s   €üz,TestMissingAttrWrite.test_missing_attributesN)r™   rš   r›   rF   r—   r¢   r£   rº   r   r   r   r   r´     s    r´   )Ú__doc__r!   r$   r   Úimportorskipr   ÚnetworkxrP   r   r    r¡   r´   r   r   r   r   Ú<module>   s    
 P