
    e6                        d Z ddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZmZm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dS )z
Unit tests of Graph Element.
    )SkipTestN)Dataset)Points)ComparisonTestCase)ChordGraphNodesTriMesh)Sankey)circular_layoutconnect_edgesconnect_edges_pdc                       e 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 Zd Zd Zd Zd Zd Zd ZdS )
GraphTestsc                 ^   d}t          t          j        |                    | _        t          j        |t          j                  | _        t          j        |t          j                  | _        t          j        |          | _        t          | j        | j        ff          | _
        d S )N   )dtype)r   nparangenodesint32sourcezerostarget	edge_infor   graph)selfNs     Ilib/python3.11/site-packages/holoviews/tests/element/test_graphelement.pysetUpzGraphTests.setUp   s|    $RYq\\22
i222hq1111T[$+6899


    c                     t          | j        | j        ff          }t          | j                  }|                     |j        |           d S N)r   r   r   r	   r   assertEqualr   r   r   s      r   test_basic_constructorz!GraphTests.test_basic_constructor   sH    T[1344dj!!e,,,,,r!   c                     t          | j        | j        f| j        f          }t	          | j                  }|                     |j        |           d S r#   )r   r   r   r   r	   r$   r%   s      r   test_constructor_with_nodesz&GraphTests.test_constructor_with_nodes    sL    T[14:>??dj!!e,,,,,r!   c           	      Z   t          | j                  }g }t          j        | j                  }t          || j                 || j                           D ]>\  }}|                    t          j	        |d d         |d d         g                     ?| 
                    ||           d S N   )r   r   r   column_stackr   zipr   r   appendarrayr$   r   segmentspathsr   startends         r   test_graph_edge_segmentsz#GraphTests.test_graph_edge_segments%   s     ,,
++eDK0%2DEE 	9 	9JE3LL5!9c"1"g"67788885)))))r!   c                 
   t          t          j        d          dg          }t          | j        | j        f|f          }|                     |j                            d          |                    d                     d S )Nr   Labelvdims   r   	r   r   r   r   r   r   r$   r   dimension_valuesr   	node_infor   s      r   test_graph_node_info_no_indexz(GraphTests.test_graph_node_info_no_index-   s~    BIaLL	:::	T[19=>>55a88"33A66	8 	8 	8 	8 	8r!   c                     t          t          j        d          dg          }|                     t                    5  t          | j        | j        f|f           d d d            d S # 1 swxY w Y   d S )N   r7   r8   )r   r   r   assertRaises
ValueErrorr   r   r   )r   r>   s     r   &test_graph_node_info_no_index_mismatchz1GraphTests.test_graph_node_info_no_index_mismatch3   s    BIaLL	:::	z** 	; 	;DK-y9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   A**A.1A.c                 2   t          t          j        d          t          j        dd          fdd          }t          | j        | j        f|f          }|                     |j                            d          |                    d                     d S )Nr      	   indexlabelr:   r;   r=   s      r   #test_graph_node_info_merge_on_indexz.GraphTests.test_graph_node_info_merge_on_index8   s    RYq\\29Qq>>:GWMM	T[19=>>55a88"33A66	8 	8 	8 	8 	8r!   c           
         t          t          j        d          t          j        dd          fdd          }t          | j        | j        f|f          }t          j        dddd	d
t          j        t          j        t          j        g          }|                     |j	        
                    d          |           d S )N   rF   rA   rH   rI         ?g       @g      @g      @g      @r:   )r   r   r   r   r   r   r/   nanr$   r   r<   )r   r>   r   expecteds       r   +test_graph_node_info_merge_on_index_partialz6GraphTests.test_graph_node_info_merge_on_index_partial>   s    RYq\\29Qq>>:GWMM	T[19=>>8RRRHII55a88(CCCCCr!   c           	      Z   t          | j                  }g }t          j        | j                  }t          || j                 || j                           D ]>\  }}|                    t          j	        |d d         |d d         g                     ?| 
                    ||           d S r*   )r   r   r   r,   r   r-   r   r   r.   r/   r$   r0   s         r   test_graph_edge_segments_pdz&GraphTests.test_graph_edge_segments_pdD   s    #DJ//
++eDK0%2DEE 	9 	9JE3LL5!9c"1"g"67788885)))))r!   c                     t          | j        | j        f| j        f          j        }t          | j        | j        f| j        |j        f          }|                     |j        |           d S r#   )r   r   r   r   	edgepathsdatar$   
_edgepaths)r   r2   r   s      r   %test_constructor_with_nodes_and_pathsz0GraphTests.test_constructor_with_nodes_and_pathsL   sb    T[14:>??IT[14:uzJKK)511111r!   c                 .   t          | j        | j        f| j        f          j        }d}|                     t          |          5  t          | j        | j        f| j        |                    d          f           d d d            d S # 1 swxY w Y   d S )NzNEnsure that the first two key dimensions on Nodes and EdgePaths match: x != x2x2x)r   r   r   r   rT   assertRaisesRegexrC   redim)r   r2   	exceptions      r   8test_constructor_with_nodes_and_paths_dimension_mismatchzCGraphTests.test_constructor_with_nodes_and_paths_dimension_mismatchQ   s    T[14:>??Id	##J	:: 	Q 	QDK-tz5;;;;N;NOPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   8B

BBc                 ~    |                      | j                                        j        | j        j                   d S r#   )r$   r   clone_plot_idr   s    r   test_graph_clone_static_plot_idz*GraphTests.test_graph_clone_static_plot_idW   s4    ))++4dj6IJJJJJr!   c                     t          | j        | j        ff          }t          ddgt          t	          | j                   dd         f          }|                     |                    d          |           d S )NrF   r   )r+   r   r   r:   rF   r:   )rH   r   r   r   listr-   r   r$   selectr   r   	selections      r   +test_select_by_node_in_edges_selection_modez6GraphTests.test_select_by_node_in_edges_selection_modeZ   st    T[1344FF+T#tz2B-C-CAaC-HIJJ	F33Y?????r!   c                    t          | j        | j        dz   f| j        f          }t          dgt          t	          | j                   dd         f          }|                     |                    dd          |           d S )NrF   rF   r+   r:   rg   r   )rH   selection_moder   r   r   ri   r-   r$   rj   rk   s      r   +test_select_by_node_in_nodes_selection_modez6GraphTests.test_select_by_node_in_nodes_selection_mode_   s{    T[]3TZ@AAF8T#tz*:%;%;AaC%@ABB	F7KKYWWWWWr!   c                     t          | j        | j        ff          }t          ddgt          t	          | j                   d d         f          }|                     |                    d          |           d S Nr   r   rf   r+   r   r+   )r3   rh   rk   s      r   test_select_by_sourcez GraphTests.test_select_by_sourced   s    T[1344E6?Ddj1A,B,B2A2,FGHH	F33Y?????r!   c                     t          | j        | j        ff          }t          ddgt          t	          | j                   d d         f          }|                     |                    d          |           d S rt   rh   rk   s      r   test_select_by_targetz GraphTests.test_select_by_targeti   rx   r!   c                    t          | j        | j        dz   f| j        f          }t          dgt          t	          | j                   d d         f          }|                     |                    dd          |           d S )NrF   )r   rF   r+   r   r:   )r3   r4   rq   rk   s      r    test_select_by_source_and_targetz+GraphTests.test_select_by_source_and_targetn   s{    T[]3TZ@AAE7Ddj)9$:$:2A2$>?@@	F::IFFFFFr!   c                    t          | j        | j        | j        ffdg          }t          ddgt	          t          | j                   d d         fdg          }|                     |                    d          |           d S )Ninfor8   r   r   r   )r   rF   rF   r+   rv   )r   )	r   r   r   r   ri   r-   r   r$   rj   rk   s      r   test_select_by_edge_dataz#GraphTests.test_select_by_edge_datas   s    T[$.ACF8TTTIy14TZ8H3I3I"1"3MNW]V^___	622I>>>>>r!   c                     t          | j        | j        ff          }|                     |                    d          d           |                     |                    d          d           d S )Nr[   )rF   y)r   r   r   r$   range)r   r   s     r   test_graph_node_rangez GraphTests.test_graph_node_rangex   se    T[1344S))7333S))733333r!   c                 @   t          | j        | j        ff          }|                    dd          }|                     |j        |j                            dd                     |                     |j        |j                            dd                     d S )NrY   y2)r[   r   )r   r   r   r]   r$   r   rT   )r   r   redimmeds      r   test_graph_redim_nodesz!GraphTests.test_graph_redim_nodes}   s    T[1344;;;..):):TT):)J)JKKK+U_-B-BTT-B-R-RSSSSSr!   N)__name__
__module____qualname__r    r&   r(   r5   r?   rD   rJ   rP   rR   rW   r_   rd   rm   rr   rw   rz   r}   r   r   r    r!   r   r   r      s]       : : :- - -
- - -
* * *8 8 8; ; ;
8 8 8D D D* * *2 2 2
Q Q QK K K@ @ @
X X X
@ @ @
@ @ @
G G G
? ? ?
4 4 4
T T T T Tr!   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
FromNetworkXTestsc                 J    	 dd l }d S # t          $ r t          d          w xY w)Nr   z&Test requires networkx to be installed)networkxImportErrorr   )r   nxs     r   r    zFromNetworkXTests.setUp   sH    	E!!!!!! 	E 	E 	ECDDD	Es    "c                     dd l }|                                }t          j        ||j                  }t          j        g d          }|                     |j        	                    d          |           d S )Nr   )"Mr. Hir   r   r   r   r   r   r   r   Officerr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   club)
r   karate_club_graphr   from_networkxr   r   r/   r$   r   r<   )r   r   Gr   clubss        r   "test_from_networkx_with_node_attrsz4FromNetworkXTests.test_from_networkx_with_node_attrs   s      ""#Ar'9:: 8 8 8 9 9 	55f==uEEEEEr!   c                 ,   dd l }|                                }|                    dg            |                    dg            |                    dd           t          j        ||j                  }|                     |j        j        g            |                     |j        	                    d          t          j        ddg                     |                     |                                t          j        dg                     d S )Nr   rF   )testr+   ro   )r   r   add_nodeadd_edger   r   r$   r   r9   r<   r   r/   r   r   FGr   s       r   *test_from_networkx_with_invalid_node_attrsz<FromNetworkXTests.test_from_networkx_with_invalid_node_attrs   s    XXZZ
AB
AB
Aq#B(:;;*B///55a88"(Aq6:J:JKKK&(:(:;;;;;r!   c                    dd l }|                                }|                    g d           t          j        ||j                  }|                     |                    d          t          j        g d                     d S )Nr   )rF   r+         ?)rF   r:         ?)r+      333333?)r:   r         ?weight)r   r   r   r   )	r   r   add_weighted_edges_fromr   r   r$   r<   r   r/   r   s       r   "test_from_networkx_with_edge_attrsz4FromNetworkXTests.test_from_networkx_with_edge_attrs   s    XXZZ
""#T#T#TUUU#B(:;;//9928D]D]D];^;^_____r!   c                     dd l }|                                }|                    ddg fddg fddg fddg fg           t          j        ||j                  }|                     |j        g            d S )Nr   rF   r+   r:   r   )r   r   r   r   r   r$   r9   r   s       r   *test_from_networkx_with_invalid_edge_attrsz<FromNetworkXTests.test_from_networkx_with_invalid_edge_attrs   s    XXZZ
""QqHq2h1R1Qr(#KLLL#B(:;;b)))))r!   c                    dd l }|                                }|                    g d           t          j        ||j                  }|                     |j                            d          t          j	        g d                     d S Nr   rF   r+   r:   r+   )
r   r   add_nodes_fromr   r   r$   r   r<   r   r/   )r   r   r   r   s       r   test_from_networkx_only_nodesz/FromNetworkXTests.test_from_networkx_only_nodes   s    HHJJ	####Ar'9::55a88"(999:M:MNNNNNr!   c                 F   dd l }|                                }|                    g d           t          g ddd          }t          j        ||j        |          }|                     |j                            d          t          j
        g d                     d S )Nr   r   ))rF   A)r+   B)r:   r   )r   r   rH   some_attribute)r   )r   r   r   r   )r   r   r   r   r   r   r$   r   r<   r   r/   )r   r   r   r   r   s        r   test_from_networkx_custom_nodesz1FromNetworkXTests.test_from_networkx_custom_nodes   s    XXZZ
""#T#T#TUUU@@@'K[\\#B(:%HHH556FGGRfRfRfIgIghhhhhr!   c                 <   dd l }|                                }|                    g d           |                    |          }t          j        ||          }|                     |j                            d          t          j	        g d                     d S r   )
r   r   r   r   r   r$   r   r<   r   r/   )r   r   r   	positionsr   s        r   'test_from_networkx_dictionary_positionsz9FromNetworkXTests.test_from_networkx_dictionary_positions   s    HHJJ	###&&q))	#Ay1155a88"(999:M:MNNNNNr!   N)r   r   r   r    r   r   r   r   r   r   r   r   r!   r   r   r      s        E E EF F F	< 	< 	<` ` `* * *O O Oi i iO O O O Or!   r   c                   &    e Zd Zd Zd Zd Zd ZdS )
ChordTestsc                     g d| _         d S )N)r   rF   r+   r   )r+   r:   r   )	simplicesrc   s    r   r    zChordTests.setUp   s    :::r!   c                 P   t          | j                  }t          j        g dg dg dg dg          }|                     |j        t          |                     |                     |                                t          j        d | j        D                                  d S )N)gLXz?g?r   )߿gLXz?rF   )g     gLXzr+   )gLXz?g     r:   c                 "    g | ]}|d d         S r*   r   ).0ss     r   
<listcomp>z>ChordTests.test_chord_constructor_no_vdims.<locals>.<listcomp>   s     1P1P1PA!BQB%1P1P1Pr!   r   r   r   r/   r$   r   r	   r   chordr   s      r   test_chord_constructor_no_vdimsz*ChordTests.test_chord_constructor_no_vdims   s    dn%%FFFFFFGGGFFFH I I 	eEll3331P1P1P1P1P(Q(QRRRRRr!   c                 B   t          | j        dg          }t          j        g dg dg dg dg          }|                     |j        t          |                     |                     |                                t          j        | j                             d S )Nzr8   )g-RB?gt?r   )g\3&<rM   rF   )gLXzr   r+   )g8PϢo?g<Rr:   r   r   s      r   !test_chord_constructor_with_vdimsz,ChordTests.test_chord_constructor_with_vdims   s    dnSE222888,,,:::999;
 
 	eEll333(@(@AAAAAr!   c                     t          g d          }t          j        g dg dgg d          }|                     |j        t          |                     d S )N))r   r   r+   )r   r   r:   )r   r   r+   )g      gz?r   )      ?gzr   )r[   r   rH   columns)r   pd	DataFramer$   r   r	   r   s      r   %test_chord_constructor_self_referencez0ChordTests.test_chord_constructor_self_reference   sp    CCCDD"""$9$9$9:'''
 
 
 	eEll33333r!   N)r   r   r   r    r   r   r   r   r!   r   r   r      sV        ; ; ;S S S	B 	B 	B4 4 4 4 4r!   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TriMeshTestsc                 *    g d| _         ddg| _        d S )N)r   )r   rF   rF   )rM   r   r+   )      ?rF   r   r   r   )r   r   rc   s    r   r    zTriMeshTests.setUp   s    FFF
#Y/r!   c                    d | j         D             }t          | j        |f          }|                     |                                t          j        | j                             |                     |j                             ddg          t          j        |                     |                     |j                             d          t          j        d                     d S )Nc                 "    g | ]}|d d         S r*   r   r   ns     r   r   z9TriMeshTests.test_trimesh_constructor.<locals>.<listcomp>        +++12A2+++r!   r   rF   r+   r   )r   r
   r   r$   r/   r   r<   r   r   r   trimeshs      r   test_trimesh_constructorz%TriMeshTests.test_trimesh_constructor   s    ++
+++4>5122"(4>*B*BCCC,,aV44bhuooFFF77::BIaLLIIIIIr!   c                    t          g           }|                     |                                t          j        d                     |                     |j                                        t          j        d                     d S Nr|   )r
   r$   r/   r   emptyr   r   r   s     r   test_trimesh_emptyzTriMeshTests.test_trimesh_empty   si    "++"(6*:*:;;;,,..0@0@AAAAAr!   c                 :   t          g                                           }|                     |                                t	          j        d                     |                     |j                                        t	          j        d                     d S r   )r
   ra   r$   r/   r   r   r   r   s     r   test_trimesh_empty_clonez%TriMeshTests.test_trimesh_empty_clone   su    "++##%%"(6*:*:;;;,,..0@0@AAAAAr!   c                    t          t          | j                   d d         }t          | j        |f          }|                     |                                t          j        | j                             |                     |j                            ddg          t          j        |          j                   |                     |j        	                    d          t          j
        d                     d S )Nr+   r   rF   r   )tupler-   r   r
   r   r$   r/   r   Tr<   r   r   s      r   $test_trimesh_constructor_tuple_nodesz1TriMeshTests.test_trimesh_constructor_tuple_nodes  s    c4:&''+4>5122"(4>*B*BCCC,,aV44bhuoo6GHHH77::BIaLLIIIIIr!   c                 F   t          j        | j        g d          }t          | j        |f          }t          g dd          }|                     |                                t          j        | j                             |                     |j        |           d S )N)r[   r   r   r   ))r   r   r   r   )r   rF   rF   rF   )rM   r   r+   r+   )r   rF   r:   r   r   r8   )	r   r   r   r
   r   r	   r$   r/   r   )r   nodes_dfr   r   s       r   !test_trimesh_constructor_df_nodesz.TriMeshTests.test_trimesh_constructor_df_nodes  s    <
OOODDD4>8455 6 6 6=@B B B"(4>*B*BCCC.....r!   c                    d | j         D             }t          | j        t          | j                   f          }|                     |                                t          j        | j                             |                     |j                             ddg          t          j        |                     |                     |j                             d          t          j        d                     d S )Nc                 "    g | ]}|d d         S r*   r   r   s     r   r   zETriMeshTests.test_trimesh_constructor_point_nodes.<locals>.<listcomp>  r   r!   r   rF   r+   r   )	r   r
   r   r   r$   r/   r   r<   r   r   s      r   $test_trimesh_constructor_point_nodesz1TriMeshTests.test_trimesh_constructor_point_nodes  s    ++
+++4>6$*+=+=>??"(4>*B*BCCC,,aV44bhuooFFF77::BIaLLIIIIIr!   c                 .   t          | j        | j        f          }t          j        ddddt          j        t          j        fddddg	          g}t          |j                            d          |          D ]\  }}| 	                    ||           d S )Nru   )r   rF   rf   )r   rF   r/   )datatype)
r
   r   r   r   r/   rN   r-   rT   splitr$   )r   r   r2   p1p2s        r   test_trimesh_edgepathsz#TriMeshTests.test_trimesh_edgepaths  s    4>4:67768VVbfbf=M68X7 8 8 9'+1171CCUKK 	% 	%FBR$$$$	% 	%r!   c                     t          | j        | j        f                              d          }|                     |                                t          j        | j        dd                               d S )N)g?NrZ   rF   )r
   r   r   rj   r$   r/   r   r   s     r   test_trimesh_selectz TriMeshTests.test_trimesh_select!  sb    4>4:677>>>MM"(4>!""3E*F*FGGGGGr!   N)r   r   r   r    r   r   r   r   r   r   r   r   r   r!   r   r   r      s        0 0 0J J JB B B
B B B
J J J/ / /J J J% % %H H H H Hr!   r   c                       e Zd Zd ZdS )
TestSankeyc                 X   t          dg          }t          |j        d                   }|                     t	          |          d           |d         d         d= |d         d         d= dd	d
g ddddddddddd
g dddddddddddddd}|                     |d         |           d S )N)r   r   rF   linksrF   r   r   sourceLinksr   targetLinksr   r      g        g     @@)rH   valuesr  valuedepthheightcolumnx0x1y0y1r   g     Ȏ@g     @@)rH   r  r   r  r  r  r  r  r	  r
  r  g     @o@)rH   r   r   r  widthr
  r  )r   ri   _sankeyr$   len)r   sankeyr   links       r   test_single_edge_sankeyz"TestSankey.test_single_edge_sankey(  s    ((V^G,--UQ'''!HX}-!HX}-!  !  ;
 
> 	q4(((((r!   N)r   r   r   r  r   r!   r   r   r   &  s#        %) %) %) %) %)r!   r   )__doc__unittestr   numpyr   pandasr   holoviews.core.datar   holoviews.element.chartr   holoviews.element.comparisonr   holoviews.element.graphsr   r   r	   r
   holoviews.element.sankeyr   holoviews.element.utilr   r   r   r   r   r   r   r   r   r!   r   <module>r     s                  ' ' ' ' ' ' * * * * * * ; ; ; ; ; ; A A A A A A A A A A A A + + + + + + S S S S S S S S S SpT pT pT pT pT# pT pT pTdCO CO CO CO CO* CO CO CON4 4 4 4 4# 4 4 4F6H 6H 6H 6H 6H% 6H 6H 6Hr') ') ') ') ')# ') ') ') ') ')r!   