
    Vh="                         d dl Z d dlZd dlZd dlmZ d Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZddZd Zd Z G d d      Zd Zy)    N)triangulate_embeddingc                  8    g dddgg dddgd} t        |        y )N         r   r   )r   r   r   )r   r   r   r   check_embedding_dataembedding_datas    ]/home/dcms/DCMS/lib/python3.12/site-packages/networkx/algorithms/tests/test_planar_drawing.pytest_graph1r   	   s     "1v)AGN(    c                  X    ddgg dg ddgdgddgg dddgg dg d	d

} t        |        y )N      )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   r   r   r   r	   r   s    r   test_graph2r      sA    q633q6q6N (r   c                  \    ddgddgddgddgddgddgdd	gdd
gd	dgd
dgd
} t        |        y )Nr   r   r   r   r   r   r   r   r   r   r   r	   r   s    r   test_circle_graphr      sY    q6q6q6q6q6q6q6q6q6q6N (r   c            
      V    g dg dddgg dg dddgddgg d	ddgd
	} t        |        y )N)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   r"   r   )	r    r$   r   r#   r   r"   r   r!   r   r	   r   s    r   test_grid_graphr%   .   sB    (( (0  ( 
N (r   c                  "    dg i} t        |        y )Nr   r	   r   s    r   test_one_node_graphr'   =   s    WN(r   c                  (    dgdgd} t        |        y )Nr   r   r    r	   r   s    r   test_two_node_graphr)   B   s    !%N(r   c                  2    ddgddgddgd} t        |        y )Nr   r   r   )r   r   r   r	   r   s    r   test_three_node_graphr+   G   s"    QQF1v6N(r   c                  $    g g d} t        |        y )Nr    r	   r   s    r   test_multiple_component_graph1r-   L   s    ^N(r   c                  D    ddgddgddgddgddgddgd} t        |        y )Nr   r   r   r   r   r   )r   r   r   r   r   r   r	   r   s    r   test_multiple_component_graph2r/   Q   s7    QQF1v1a&aVQRTUPVWN(r   c                     t        j                  t        j                        5  g dg dg dg dd} t        j                         }|j                  |        t        j                  |       d d d        y # 1 sw Y   y xY w)N)r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r   )pytestraisesnxNetworkXExceptionPlanarEmbeddingset_datacombinatorial_embedding_to_pos)r   	embeddings     r   test_invalid_half_edger9   V   sa    	r++	, 5&9yQ&&(	>*
)))4	5 5 5s   A
A77B c                  n    t        j                         } | j                  d       dg i}t        | |       y )Nr   )r3   r5   add_nodecheck_triangulationr8   expected_embeddings     r   test_triangulate_embedding1r?   ^   s3    ""$IqR	#56r   c                  v    t        j                         } | j                  dd       dgdgd}t        | |       y )Nr   r   r$   )r3   r5   connect_componentsr<   r=   s     r   test_triangulate_embedding2rB   e   s:    ""$I  A&SaS)	#56r   c                     t        | d      \  }}|j                         |k(  sJ d       t        | d      \  }}|j                         |k(  sJ d       y )NTzExpected embedding incorrectF)r   get_data)r8   r>   res_embedding_s       r   r<   r<   l   sj    ,Y=M1!!#'99 &9 -Y>M1!!#'99 &9r   c                 *   t        j                         }|j                  |        t        j                  |d      }d}t	        ||      sJ |       t        ||       t        j                  |d      }d}t	        ||      sJ |       t        ||       y)z8Checks that the planar embedding of the input is correctFzFPlanar drawing does not conform to the embedding (fully triangulation)TzIPlanar drawing does not conform to the embedding (internal triangulation)N)r3   r5   r6   r7   $planar_drawing_conforms_to_embeddingcheck_edge_intersections)r   r8   	pos_fullymsgpos_internallys        r   r
   r
   w   s    ""$I~&11)UCI
RC/	9EJsJEY	266y$GN
UC/	>JOCOJY7r   c           
      v    t        | |z
        t        |t        t        |       t        |            z  |      k  S N)absmax)abrel_tolabs_tols       r   is_closerU      s2     q1u:Ws3q63q6'::GDDDr   c                    | \  }}|\  }}|\  }}t        j                  ||z
  dz  ||z
  dz  z         }	t        j                  ||z
  dz  ||z
  dz  z         }
t        j                  ||z
  dz  ||z
  dz  z         }t        |
|z   |	      S )Nr   )mathsqrtrU   )rQ   rR   px1y1x2y2pxpydist_1_2dist_1_pdist_2_ps               r   point_in_betweenrc      s    FBFBFByy"r'a27q.89Hyy"r'a27q.89Hyy"r'a27q.89HHx'22r   c                    | j                         D ]v  \  }}| j                         D ]\  \  }}||k7  s||k7  s||k7  s||k7  s||   \  }}||   \  }}	||   \  }
}||   \  }}||z
  ||z
  z  ||	z
  |
|z
  z  z
  }|dk7  r||	z  ||z  z
  |
|z
  z  ||z
  |
|z  ||z  z
  z  |z  z
  }||	z  ||z  z
  ||z
  z  ||	z
  |
|z  ||z  z
  z  |z  z
  }t        ||   ||   ||f      r2t        ||   ||   ||f      rd| d| }t        j                  |      d}t        ||   ||   ||         sDt        ||   ||   ||         s.t        ||   ||   ||         st        ||   ||   ||         sJt        j                  |       y y)zCheck all edges in G for intersections.

    Raises an exception if an intersection is found.

    Parameters
    ----------
    G : NetworkX graph
    pos : dict
        Maps every node to a tuple (x, y) representing its position

    r   zThere is an intersection at ,z0A node lies on a edge connecting two other nodesN)edgesrc   r3   r4   )GposrQ   rR   cdrZ   r[   r\   r]   x3y3x4y4determinantr^   r_   rK   s                     r   rI   rI      s    	 "41GGI !	4DAqAv!q&Q!VQQBQBQBQB!Bw273rBw276KK!# r'BG+R8BGR"r')<#<$ $B r'BG+R8BGR"r')<#<$ $B
 (AARAFVAARG !=RD"F 22377 I$SVSVSV<'AAA?'AAA?'AAA?..s33C!	4"4r   c                   B    e Zd ZdZg dZd Zd Zd Zd Zd Z	d Z
d	 Zy
)VectorzCompare vectors by their angle without loss of precision

    All vectors in direction [0, 1] are the smallest.
    The vectors grow in clockwise direction.
    xynodequadrantc                     || _         || _        || _        | j                   dk\  r| j                  dkD  rd| _        y | j                   dkD  r| j                  dk  rd| _        y | j                   dk  r| j                  dk  rd| _        y d| _        y )Nr   r   r   r   r   rr   )selfrs   rt   ru   s       r   __init__zVector.__init__   sr    	66Q;466A:DMVVaZDFFaKDMVVq[TVVaZDMDMr   c                     | j                   |j                   k(  xr3 | j                  |j                  z  | j                  |j                  z  k(  S rN   rv   rs   rt   rx   others     r   __eq__zVector.__eq__   s<    }}.W466EGG3CtvvPUPWPWGW3WWr   c                     | j                   |j                   k  ry| j                   |j                   kD  ry| j                  |j                  z  | j                  |j                  z  k  S )NTFr{   r|   s     r   __lt__zVector.__lt__   sM    ==5>>)]]U^^+66EGG#dffuww&666r   c                     | |k7  S rN    r|   s     r   __ne__zVector.__ne__   s    u}r   c                     || k   S rN   r   r|   s     r   __le__zVector.__le__   s    4<r   c                     || k  S rN   r   r|   s     r   __gt__zVector.__gt__   s    t|r   c                     | |k   S rN   r   r|   s     r   __ge__zVector.__ge__   s    %<r   N)__name__
__module____qualname____doc__	__slots__ry   r~   r   r   r   r   r   r   r   r   rq   rq      s2     /IX7  r   rq   c                 6   | D ]  }g }||   }| |   D ]8  }t        ||   d   |d   z
  ||   d   |d   z
  |      }|j                  |       : |j                          t        |      D ]  \  }}||dz   t	        |      z     }	||dz
     }
| |   |j
                     d   |	j
                  k7  s"| |   |j
                     d   |
j
                  k7  r  y|	j
                  |j
                  k7  r|	|k(  r  y|
j
                  |j
                  k7  s|
|k(  s  y  y)zChecks if pos conforms to the planar embedding

    Returns true iff the neighbors are actually oriented in the orientation
    specified of the embedding
    r   r   cwccwFT)rq   appendsort	enumeratelenru   )r8   rh   vnbr_vectorsv_posnbr
new_vectoridx
nbr_vector	cw_vector
ccw_vectors              r   rH   rH      s7     AQ< 	+CCeAh 6CeAh8NPSTJz*	+ 	(5 	OC#S1WK0@$@AI$S1W-J!Z__-d3y~~EQ<
07:??J~~0Y*5L*//1jJ6N	, r   )g&.>g        )rW   r1   networkxr3   "networkx.algorithms.planar_drawingr   r   r   r   r%   r'   r)   r+   r-   r/   r9   r?   rB   r<   r
   rU   rc   rI   rq   rH   r   r   r   <module>r      sx       D)
) ) ))
)
)
)
)
5778E3.4d+  + \r   