
    e%                         d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZ d dlmZmZmZ ddlmZmZ  G d d	e          ZdS )
    N)ColumnDataSource	RangeTool)
DynamicMap)CurveImagePathPointsPolygonsScatterTable)DataLinkLinkRangeToolLink   )TestBokehPlotbokeh_rendererc                   n    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S )TestLinkCallbacksc                    t           j                            dd          }t          |          }t	          |          }t          ||           ||z   }t          j        |          }|j        d         j        d         }|j        d         j        d         }|j	        
                    dt          i          }|                     |j        |j        d                    |                     |j        d            d S )Nd      r   r   mainr   r   typex_rangenprandomrandr   r   r   r   get_plotsubplotsstate
select_oner   assertEqualr   handlesassertIsy_range	selfarraysrctargetlayoutplottgt_plotsrc_plot
range_tools	            Ilib/python3.11/site-packages/holoviews/tests/plotting/bokeh/test_links.py)test_range_tool_link_callback_single_axisz;TestLinkCallbacks.test_range_tool_link_callback_single_axis   s    	sA&&Ellc6"""#&v..=(1&9=(1&9^..	/BCC
+X-=i-HIIIj($/////    c                     t           j                            dd          }t          |          }t	          |d          t	          |d          z  }t          ||           ||z   }t          j        |          }|j        d         j        d         }|j        d         j        d         }|j	        
                    d	t          i          }|                     |j        |j        d
                    |                     |j        d            d S )Nr   r   a)labelbr   r   r   r   r   r   r)   s	            r3   8test_range_tool_link_callback_single_axis_overlay_targetzJTestLinkCallbacks.test_range_tool_link_callback_single_axis_overlay_target   s    	sA&&Ellc***WU#-F-F-FFc6"""#&v..=(1&9=(1&9^..	/BCC
+X-=i-HIIIj($/////r5   c                 X   t           j                            dd          }t          |          t          |          z  }t	          t           j                            dd          d          }t          ||           ||z   }t          j        |          }|j        d         j        d         }|j        d         j        d         }|j	        
                    dt          i          }|                     |j        |j        d                    |                     |j        d            d S )	N2   )r   r   r   r   boundsr   r   r   r   r   )r   r   r    r   r   r   r   r!   r"   r#   r$   r   r%   r   r&   r'   r(   )	r*   datar-   sourcer.   r/   r0   r1   r2   s	            r3   Etest_range_tool_link_callback_single_axis_overlay_target_image_sourcezWTestLinkCallbacks.test_range_tool_link_callback_single_axis_overlay_target_image_source(   s    y~~b"%%tuT{{*ry~~b"--lCCCff%%%&&v..=(1&9=(1&9^..	/BCC
+X-=i-HIIIj($/////r5   c                    t          d dg          j                            d          }t          t	          j        d                    }t          ||           ||z   }t          j        |          }|j	        d         j	        d         }|j	        d	         j	        d         }|j
                            d
t          i          }|j        |j        d         k    sJ |j        J d S )Nc                 h    t          | t          j                            d          z  g d          S N)   rE   )r   r   	   rF   r=   r   r   r   r7   s    r3   <lambda>zlTestLinkCallbacks.test_range_tool_link_callback_single_axis_curve_target_image_dmap_source.<locals>.<lambda>8   ,    eAbi..x888NNN r5   r7   kdimsg?r   rH   
   r   r   r   r   r   )r   redimranger   r   aranger   r   r!   r"   r#   r$   r   r   r&   r(   )r*   r,   r-   r.   r/   r0   r1   r2   s           r3   Htest_range_tool_link_callback_single_axis_curve_target_image_dmap_sourcezZTestLinkCallbacks.test_range_tool_link_callback_single_axis_curve_target_image_dmap_source5   s    NN%
 
 
    	 ry}}%%c6"""#&v..=(1&9=(1&9^..	/BCC
!X%5i%@@@@@!)))))r5   c                    t          d dg          j                            d          }t          j                            dd          }t          |          t          |          z  }t          ||           ||z   }t          j	        |          }|j
        d         j
        d         }|j
        d	         j
        d         }|j                            d
t          i          }|j        |j        d         k    sJ |j        J d S )Nc                 h    t          | t          j                            d          z  g d          S rD   rG   rH   s    r3   rI   znTestLinkCallbacks.test_range_tool_link_callback_single_axis_overlay_target_image_dmap_source.<locals>.<lambda>H   rJ   r5   r7   rK   rM   rH   r<   r   r   r   r   r   )r   rO   rP   r   r   r    r   r   r   r!   r"   r#   r$   r   r   r&   r(   )	r*   r,   r?   r-   r.   r/   r0   r1   r2   s	            r3   Jtest_range_tool_link_callback_single_axis_overlay_target_image_dmap_sourcez\TestLinkCallbacks.test_range_tool_link_callback_single_axis_overlay_target_image_dmap_sourceE   s    NN%
 
 
    	 y~~b"%%tuT{{*c6"""#&v..=(1&9=(1&9^..	/BCC
!X%5i%@@@@@!)))))r5   c                    t           j                            dd          }t          |          }t	          |          }t          ||ddg           ||z   }t          j        |          }|j        d         j        d         }|j        d         j        d         }|j	        
                    d	t          i          }|                     |j        |j        d
                    |                     |j        |j        d                    d S )Nr   r   xy)axesr   r   r   r   r   r(   )r   r   r    r   r   r   r   r!   r"   r#   r$   r   r%   r   r&   r(   r)   s	            r3   'test_range_tool_link_callback_both_axesz9TestLinkCallbacks.test_range_tool_link_callback_both_axesV   s    	sA&&Ellc6c
3333#&v..=(1&9=(1&9^..	/BCC
+X-=i-HIII+X-=i-HIIIIIr5   c                 J   t           j                            dd          }t          |          }t	          |          }d}d}t          ||ddg||f           ||z   }t          j        |          }|j        d         j        d	         }| 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           d S )Nr   r   g?g333333?rW   rX   )rY   boundsxr   r   r   r   r   r    r   r   r   r   r!   r"   r%   r&   startendreset_start	reset_end)	r*   r+   r,   r-   x_startx_endr.   r/   r0   s	            r3   )test_range_tool_link_callback_boundsx_argz;TestLinkCallbacks.test_range_tool_link_callback_boundsx_argc      	sA&&Ellc6c
We<LMMMM#&v..=(1&9))4:GDDD))48%@@@))4@'JJJ))4>FFFFFr5   c                 J   t           j                            dd          }t          |          }t	          |          }d}d}t          ||ddg||f           ||z   }t          j        |          }|j        d         j        d	         }| 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           | 	                    |j
        d
         j        |           d S )Nr   r   g?g?rW   rX   )rY   boundsyr   r   r(   r]   )	r*   r+   r,   r-   y_starty_endr.   r/   r0   s	            r3   )test_range_tool_link_callback_boundsy_argz;TestLinkCallbacks.test_range_tool_link_callback_boundsy_argr   re   r5   c                 L   t          d d          j                            d          }t          dgd          }t	          ||           ||z   }t          j        |          }t          |j        	                    d	t          i                    }|                     t          |          d
           t          j        dg          t          j        dg          d}|d         j                                        D ]!\  }}|                     |||                    "d S )Nc                 &    t          d| fg          S )Nr   )r	   Xs    r3   rI   zCTestLinkCallbacks.test_data_link_dynamicmap_table.<locals>.<lambda>   s    FQF8$4$4 r5   rn   rK   )r   rm   )ro   rX   vdimsr   r   r   ro   )rW   rX   )r   rO   rP   r   r   r   r!   listr#   selectr   r%   lenr   r+   r?   items)	r*   dmaptabler.   r/   cdsr?   kvs	            r3   test_data_link_dynamicmap_tablez1TestLinkCallbacks.test_data_link_dynamicmap_table   s   44C@@@FLLwLWWugS)))u&v..4:$$f.>%?@@AAS1%%%Xqc]]2$88FK%%'' 	) 	)DAqQQ((((	) 	)r5   c                    t           j                            dd          }t           j                            dd          }t          ||g          }t	          ddgdd          }t          ||           ||z   }t          j        |          }t          |j	        
                    dt          i                    }|                     t          |          d           t          j        |d d d	f         |d dd	f         g          ggt          j        |d d d	f         |d dd	f         g          gggt          j        |d d df         |d ddf         g          ggt          j        |d d df         |d ddf         g          gggt          j        ddg          t          j        ddg          d
}|d	         j                                        D ]!\  }	}
|                     |
||	                    "d S )NrN   r   Ar   Br   r~   r   r   r   r   )xsysr~   r   )r   r   r    r
   r   r   r   r!   rr   r#   rs   r   r%   rt   concatenater+   r?   ru   )r*   arr1arr2polysrw   r.   r/   rx   merged_datary   rz   s              r3   test_data_link_poly_tablez+TestLinkCallbacks.test_data_link_poly_table   s   y~~b!$$y~~b!$$$&&x*C55&v..4:$$f.>%?@@AAS1%%% "QQQT
D!QK/H I IJK "QQQT
D!QK/H I IJKM "QQQT
D!QK/H I IJK "QQQT
D!QK/H I IJKMHc3Z00rxA7G7G	I I
 FK%%'' 	0 	0DAqQA////	0 	0r5   c                 
   t           j                            dd          }t           j                            dd          }t          ||g          }t	          ddgdd          }t          ||           |                                |                                z   }t          j        |          }t          |j
                            dt          i                    }|                     t          |          d           d S )	NrN   r   r}   r   r~   r   r   r   r   r   r    r
   r   r   cloner   r!   rr   r#   rs   r   r%   rt   r*   r   r   r   rw   r.   r/   rx   s           r3   "test_data_link_poly_table_on_clonez4TestLinkCallbacks.test_data_link_poly_table_on_clone   s    y~~b!$$y~~b!$$$&&x*C55.&v..4:$$f.>%?@@AAS1%%%%%r5   c                    t           j                            dd          }t           j                            dd          }t          ||g          }t	          ddgdd          }t          ||           |                                |                    d          z   }t          j        |          }t          |j
                            d	t          i                    }|                     t          |          d           d S )
NrN   r   r}   r   r~   r   F)linkr   r   r   s           r3   +test_data_link_poly_table_on_unlinked_clonez=TestLinkCallbacks.test_data_link_poly_table_on_unlinked_clone   s    y~~b!$$y~~b!$$$&&x*C55%!8!88&v..4:$$f.>%?@@AAS1%%%%%r5   c                 F   t          t          j                            dd          g          }t	          ddgdd          }t          ||           ||z   }d}t          j        t          |          5  t          j
        |           d d d            d S # 1 swxY w Y   d S )	NrN   r   r}   r   r~   r   z-DataLink source data length must match target)match)r
   r   r   r    r   r   pytestraises
ValueErrorr   r!   )r*   r   rw   r.   msgs        r3   test_data_link_mismatchz)TestLinkCallbacks.test_data_link_mismatch   s    ")..Q//011x*C55=]:S111 	, 	,#F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   4BBBc                 r   t          g dgd                              d          }t          ddgdd          }t          ||           ||z   }t	          j        |          }d	 |j                                        D             \  }}|                     |j	        d
         |j	        d
                    d S )N))r   r   r   )r   r   r   )r   r   r   colorrp   )r   r}   r   r~   r   c              3   0   K   | ]}|j         d          V  dS )r   N)r"   ).0sps     r3   	<genexpr>z8TestLinkCallbacks.test_data_link_list.<locals>.<genexpr>   s)       V VV!4 V V V V V Vr5   r@   )
r   optsr   r   r   r!   r"   valuesr'   r&   )r*   pathrw   r.   r/   	path_plot
table_plots          r3   test_data_link_listz%TestLinkCallbacks.test_data_link_list   s    6667wGGGLLSZL[[x*C55u&v.. V Vt}?S?S?U?U V V V	:i'1:3Eh3OPPPPPr5   c                 <   t          g dd          }t          g dd          }t          ||          }t          ||           |                     t          t          j        |                   d           |                     |t          j        |                    d S )Nr~   r   CDr   )r   r   r%   rt   r   registryassertIn)r*   table1table2link1s       r3   test_data_link_idempotentz+TestLinkCallbacks.test_data_link_idempotent   s    r3$$r3$$((   T]6233Q777eT]6233333r5   c                 z   t           j                            dd          }t           j        |d<   d t	          g d|          D             }t          |dd          }t          |dd          }t          ||           	 t          j        ||z              d S # t          $ r | 
                                 Y d S w xY w)	N      r   c                     i | ]\  }}||	S  r   )r   ry   rz   s      r3   
<dictcomp>z8TestLinkCallbacks.test_data_link_nan.<locals>.<dictcomp>   s    ;;;A1;;;r5   )rW   rX   zrW   r   rX   )r   r   r    nanzipr   r   r   r!   	Exceptionfail)r*   arrr?   r7   r9   s        r3   test_data_link_nanz$TestLinkCallbacks.test_data_link_nan   s    innQ""FD	;;___c!:!:;;;D#s##D#s##A	#AaC((((( 	 	 	IIKKKKKK	s   ?B B:9B:N)__name__
__module____qualname__r4   r:   rA   rR   rU   rZ   rd   rj   r{   r   r   r   r   r   r   r   r   r5   r3   r   r      s       0 0 00 0 00 0 0* * * * * *"J J JG G GG G G
) 
) 
)0 0 0$	& 	& 	&	& 	& 	&, , ,Q Q Q4 4 4
 
 
 
 
r5   r   )numpyr   r   bokeh.modelsr   r   holoviews.core.spacesr   holoviews.elementr   r   r   r	   r
   r   r   holoviews.plotting.linksr   r   r   	test_plotr   r   r   r   r5   r3   <module>r      s         4 4 4 4 4 4 4 4 , , , , , , R R R R R R R R R R R R R R R R R R B B B B B B B B B B 4 4 4 4 4 4 4 4M M M M M M M M M Mr5   