
    |Le_                    f   d dl mZ d dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d	 Zd
 Zed             Zed             Zd Z ed           Z eee          Z eee          Z  ej!        edd          Z" eeee"d d          Z# ee#e"d          \  Z$Z% ee          \  Z&Z' ee&e'e           Z( eeee"          Z)dZ*dZ+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d  Z9d! Z:d" Z;d# Z<d$ Z=d% Z>d& Z?d' Z@d( ZAd) ZBd* ZCd+ ZDd, ZEdS )-    )annotationsN)dshape)Point
LinesAxis1Glyph)_build_draw_trapezoid_y)_build_map_onto_pixel_for_line_build_draw_segment_build_extend_line_axis0)"_build_map_onto_pixel_for_triangle_build_draw_triangle_build_extend_triangles)ngjitc                     t          j        g dg dd          } t          dd          }|                    | d         j                  dk    sJ |                    | d         j                  dk    sJ d S )N         )         )xyr   r   r   r   )r   r   )pd	DataFramer   _compute_boundsvalues)dfps     <lib/python3.11/site-packages/datashader/tests/test_glyphs.pytest_point_bounds_checkr"      s~    	IIIIII66	7	7Bc3ARW^,,6666RW^,,666666    c                    t          dd          } |                     t          d                     t          j        t
                    5  |                     t          d                     d d d            d S # 1 swxY w Y   d S )Nr   r   z{x: int32, y: float32}z{x: string, y: float32})r   validater   pytestraises
ValueError)r    s    r!   test_point_validater)      s    c3AJJv.//000	z	"	" 6 6	

63445556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   #A<<B B c                *    |||fxx         dz  cc<   d S )Nr    )ir   r   aggs       r!   appendr.   $       1IIINIIIIIr#   c                *    ||| fxx         |z  cc<   d S Nr+   )r   r   r-   ns       r!   
tri_appendr3   (   r/   r#   c                 .    t          j        dd          S )N)r   r   i4dtype)npzerosr+   r#   r!   new_aggr:   -   s    8F$''''r#   c                    | S r1   r+   )r   s    r!   <lambda>r<   1   s     r#   r   F)r   r=   r   )      ?      @r>   r?   c                    d\  }}}	}
d\  }}}}t          j        d          }t          ||||	|
|||||d| |||dd||           dS )A
    Helper to draw line with fixed bounds and scale values.
    r   r   r   r   r   r   r   r   r   F        N)r8   empty_draw_segment)x0y0x1y1r,   segment_startr-   sxtxsytyxminxmaxyminymaxbuffers                   r!   draw_segmentrU   I   su      NBB'D$dXa[[F	2r2r4tTub"b"c3E E E E Er#   c
                b    d\  }
}}}d\  }}}}t          ||
|||||||| ||||||||	           dS )rA   rB   rC   N)_draw_trapezoid)rG   rI   rH   rJ   y2y3r,   trapezoid_startstackedr-   rL   rM   rN   rO   rP   rQ   rR   rS   s                     r!   draw_trapezoidr\   U   sa      NBB'D$d	2r2r4tT
BBB#? ? ? ? ?r#   c            	        d\  } }d\  }}t          j        g dg dg dg dg dg          }t                      }t          | |||dd	|           t           j                            ||           t                      }t          ||| |dd	|           t           j                            ||           t                      }t          | |||dd
|           d|d<   t           j                            ||           t                      }t          ||| |dd
|           d|d<   d|d<   t           j                            ||           d\  } }d\  }}t          j        g dg dg dg dg dg          }t                      }t          | |||dd	|           t           j                            ||           t                      }t          ||| |dd	|           t           j                            ||           t                      }t          | |||dd
|           d|d<   t           j                            ||           t                      }t          ||| |dd
|           d|d<   d|d<   d S )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   TFr   )r      )r   r   )rc   r   r   )r8   arrayr:   rU   testingassert_equal)rG   rH   rI   rJ   outr-   s         r!   test_draw_linerh   `   s   FBFB
(OOO#OO#OO#OO#OO	% & &C
 ))CRRD#...JC%%%
))CRRD#...JC%%%
))CRRE3///CIJC%%%
))CRRE3///CICIJC%%%FBFB
(OOO#OO#OO#OO#OO	% & &C
 ))CRRD#...JC%%%
))CRRD#...JC%%%
))CRRE3///CIJC%%%
))CRRE3///CICIIIr#   c            	        d\  } }d\  }}t                      }t          | |||dd|           |                                dk    sJ |d         dk    sJ t                      }t          | |||dd|           |                                dk    sJ |d         dk    sJ d\  } }d\  }}t                      }t          | |||dd|           |                                dk    sJ |d         dk    sJ t                      }t          | |||dd|           |                                dk    sJ |d         dk    sJ d S )Nrc   rc   r   Tr   F)
   rk   )r:   rU   sum)rG   rH   rI   rJ   r-   s        r!   test_draw_line_same_pointrm      sN   FBFB
))CRRD#...7799>>>>t9>>>>
))CRRE3///7799>>>>t9>>>>FBFB
))CRRD#...7799>>>>t9>>>>
))CRRE3///7799>>>>t9>>>>>>r#   c            	        d\  } }d\  }}t                      }t          | |||dd|           t                      }d|d ddf<   t          j                            ||           t                      }t          || ||dd|           t                      }d|dd df<   t          j                            ||           d S )Nr^   )r   r   r   Tr   rc   r   )r:   rU   r8   re   rf   )rG   rH   rI   rJ   r-   rg   s         r!   "test_draw_line_vertical_horizontalro      s    FBFB
))CRRD#...
))CCAJJC%%%
))CRRD#...
))CC2A2JJC%%%%%r#   c                 p   t          j        g d          } t          j        g d          }t          j        g dg dg dg dg dg          }t                      }t          \  }}}}t          \  }}	}
}t          j        d          }t          ||||||	|
|| |d||           t           j                            ||           |dxx         d	z  cc<   t                      }t          ||||||	|
|| |d
||           t           j                            ||           t          j        g d          } t          j        g d          }t          j        g dg dg dg dg dg          }t                      }t          ||||||	|
|| |d
||           t           j                            ||           d S )N)r   rq   r   r   )rr   皙?rs   rr   rb   r   r   r   r   r   )r   r   r   r   r   r   Fr   r   r   T)	r   r   r   rr   rr   rr   r   )	rr   rq   r=   rv   rr   r   d   r   rr   )r   r   r   r   r   r   r   r   r   r   )	r8   rd   r:   vtboundsrE   extend_linere   rf   )xsysrg   r-   rL   rM   rN   rO   rP   rQ   rR   rS   rT   s                r!   test_extend_linesr      s   	###	$	$B	(((	)	)B
(OOO#OO#OO#OO#OO	% & &C
 ))CNBB#D$dXa[[FBBdD$BvsSSSJC%%%IIINIII
))CBBdD$BfcRRRJC%%%	444	5	5B	555	6	6B
(OOO#OO#OO#OO#OO	% & &C
 ))CBBdD$BfcRRRJC%%%%%r#   c                 <   t          j        g d          } t          j        g d          }t                      }t          \  }}}}t          \  }}}	}
t          j        d          }t          |||||||	|
| |d||           |                                dk    sJ d S )N)rw   i8rw   )r   r   r   r   T)r8   rd   r:   rz   r{   rE   r|   rl   )r}   r~   r-   rL   rM   rN   rO   rP   rQ   rR   rS   rT   s               r!   #test_extend_lines_all_out_of_boundsr      s    	$$$	%	%B	)))		B
))CNBB#D$dXa[[FBBdD$BfcRRR7799>>>>>>r#   c                    t          j        ddt           j        ddg          } t          j        ddt           j        ddg          }t                      }t          \  }}}}t
          \  }}}	}
t          j        d          }t          |||||||	|
| |d||           t          j        g d          }t           j	        
                    ||           d S )Nr=   rq   r   r   Try   )r8   rd   nanr:   rz   r{   rE   r|   diagre   rf   r}   r~   r-   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rg   s                r!   test_extend_lines_nanr      s    	2r261a(	)	)B	2r261a(	)	)B
))CNBB#D$dXa[[FBBdD$BfcRRR
'///
"
"CJC%%%%%r#   c                 z   t          j        g d          } t          j        g d          }t          j        dd          }t          \  }}}}t          \  }}}	}
t          j        d          }t          |||||||	|
| |d||           t          j        g dg d	g d	g d
g          }t           j                            ||           t          j        dd          }t          |||||||	|
| |d||           t          j        g d
g d	g d	g d
g          }t           j                            ||           d S )N)r=   r   r   r=   r=   )r=   r=   r   r   r=   rj   r5   r6   r   T)r   r   r   r   )r   r   r   r   )r   r   r   r   F)	r8   rd   r9   rz   r{   rE   r|   re   rf   r   s                r!   test_extend_lines_exact_boundsr      sf   	$$$	%	%B	$$$	%	%B
(6
&
&
&CNBB#D$dXa[[FBBdD$BfcRRR
(LLL LL LL LL" # #C JC%%%
(6
&
&
&CBBdD$BvsSSS
(LLL LL LL LL" # #C JC%%%%%r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nr   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   rb   Tr   r8   rd   r:   r\   re   rf   
rG   rI   rH   rJ   rX   rY   rg   rZ   r[   r-   s
             r!   test_draw_trapezoid_acuter   	      FB!NBB
(OOO#OO#OO#OO#OO	% & &C OG
))C2r2r2r1"GS2 2 2JC%%% ))C2r2r2r1"GS2 2 2JC%%%%%r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nr   r   r   r   TFr   r   r   s
             r!   %test_draw_trapezoid_acute_not_stackedr   "  s    FB!NBB
(OOO#OO#OO#OO#OO	% & &C OG
))C2r2r2r1"GS2 2 2JC%%% ))C2r2r2r1"GS2 2 2JC%%%%%r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nr   )r   r   rc   r   rb   r   r   Tr   r   r   s
             r!   test_draw_trapezoid_rightr   ;  r   r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )	Nr   )r   r   r   r   r   r   r   r   r   r   r   rb   Tr   r   r   s
             r!   test_draw_trapezoid_obtuser   T  r   r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d	|||	
  
         t           j                            |	|           t                      }	t          || ||||d	|||	
  
         t           j                            |	|           d S )
Nr   )r   r   r   rc   r_   r   ry   )r   r   r   r   r   ra   Tr   r   r   s
             r!    test_draw_trapezoid_intersectingr   m  r   r#   c                    d\  } }d\  }}}}t          j        g dg dg dg dg dg          }d}d}t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nr   r   r   r`   r   r   r   r   r   rb   Tr   r   r   s
             r!   7test_draw_trapezoid_vertical_line_start_and_not_clippedr     r   r#   c                    d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d|||	
  
         t           j                            |	|           t          j        g dg dg dg dg dg          }t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nr   r   FTr`   rb   r   r   
rG   rI   rH   rJ   rX   rY   rZ   r[   rg   r-   s
             r!   ;test_draw_trapezoid_vertical_line_not_start_and_not_clippedr     s.   FB!NBBOG (OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%%
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%%%%r#   c                    d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d|||	
  
         t           j                            |	|           t          j        g dg dg dg dg dg          }t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )Nrc   r   )r   r   r   r   Trb   )r   r   r   r   r   r   r   r   s
             r!   test_draw_trapezoid_clippedr     s,   FB!NBBOG
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%%
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%%%%r#   c                     d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d|||	
  
         t           j                            |	|           d S )Nr   r   FTrb   r   r   r   s
             r!   7test_draw_trapezoid_vertical_line_not_start_and_clippedr     s    FB!NBBOG
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%%%%r#   c                 8   d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d|||	
  
         t           j                            |	|           t                      }	t          || ||||d|||	
  
         t           j                            |	|           d}t                      }	t          || ||||d|||	
  
         t           j                            |	                                d           d S )Nr   r   r   r   r   TFrb   r   r   r8   rd   r:   r\   re   rf   rl   r   s
             r!   #test_draw_trapezoid_horizontal_liner     K   FB!NBBOG
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%% ))C2r2r2r1"GS2 2 2JC%%% G
))C2r2r2r1"GS2 2 2JCGGIIq)))))r#   c                 8   d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d	|||	
  
         t           j                            |	|           t                      }	t          || ||||d	|||	
  
         t           j                            |	|           d}t                      }	t          || ||||d	|||	
  
         t           j                            |	                                d	           d S )
Nr   )r   r   r   r   TFr_   )r   r   r   r   r   ra   rb   r   r   r   s
             r!   !test_draw_trapezoid_diagonal_liner     r   r#   c                 0   d\  } }d\  }}}}d}d}t          j        g dg dg dg dg dg          }t                      }	t          | |||||d|||	
  
         t           j                            |	|           d}d|d	<   t                      }	t          | |||||d|||	
  
         t           j                            |	|           d}d}d|d	<   t                      }	t          || ||||d|||	
  
         t           j                            |	|           d S )
Nr^   r   TFrb   )r   r   r   r   r   r   r   ru   r   r   s
             r!   test_draw_trapezoid_pointr   3  s_   FB!NBBOG
(OOO#OO#OO#OO#OO	% & &C ))C2r2r2r1"GS2 2 2JC%%% OCI
))C2r2r2r1"GS2 2 2JC%%% OGCI
))C2r2r2r1"GS2 2 2JC%%%%%r#   c                 *   d} t          j        g dg dg dg dg          }t          j        dd          }t          | d	d
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | d	d
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | dd         d	d
|fd           t          | dd         d	d
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           dS )zKAssert that we draw triangles properly, without interpolation enabled.
    r         ࿩r         @      @r   r`   rt   )r   r   r   r   r   rb   rc   r   r5   r6   r   rc   r   r   r   r   r   r   )333333@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   rc   rc   )r   r   r   rc   r   )r   r   r   rc   r   Nr   rc   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r8   rd   r9   draw_trianglere   rf   trirg   r-   s      r!   test_draw_triangle_nointerpr   Y  s    /C
(OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%% 1C
(OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%%1C
(OOO#OO#OO#OO% & &C (6
&
&
&C#bqb'<SFA>>>#abb'<SFA>>>JC%%% /C
(OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%% (OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%% (OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%% (OOO#OO#OO#OO% & &C (6
&
&
&C#|Y:::JC%%%%%r#   c                 f   d} t          j        g dg dg dg dg          }t          j        dd          }t          | d	d
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           d} t          j        g dg dg dg dg          }t          j        dd          }t          | dd
|fd           t           j                            ||           dS )zHAssert that we draw triangles properly, with interpolation enabled.
    r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   rb   r   r5   r6   r   r   )r   r   r   )r   r   g      ?r   r   )r   g?g      ?g333333?r   )g?gffffff @g      @g@g333333@f4)r   rc   r   r   r   )r   r   g      @r   r   )r   g@g      @gffffff@r   )g333333@g@g      @gffffff@g@)r   r   	   r   r   g      @r   r   r   g@r   gffffff@r   g333333@g333333@r   g@g@r   rc   r   N)r8   rd   r9   draw_triangle_interpre   rf   assert_allcloser   s      r!   test_draw_triangle_interpr     s    /C
(OOO#OO#OO#OO% & &C (6
&
&
&ClIvyIIIJC%%%
.C
(222222222)))+ , ,C (6
&
&
&ClIvyIIIJsC(((
.C
(2222222222224 5 5C (6
&
&
&ClIvyIIIJsC(((
.C
(------------/ 0 0C (6
&
&
&ClIvyIIIJsC(((((r#   c                    d} t          j        g dg dg dg dg          }t          j        dd          }t          | d	d
         dd|fd           t          | d
d         dd|fd           t          | dd	         dd|fd           t           j                            ||           t          j        g dg dg dg dg          }t          j        dd          }t          | d	d
         dd|fd           t          | d
d         dd|fd           t          | dd	         dd|fd           t           j                            ||           d	S )z^Assert that we draw subpixel triangles properly, both with and without
    interpolation.
    )	r   r   r   ru   ru   ru   ru   ru   ru   r   r   r   )r   r      r   r   r   r   r6   Nr   )r   rc   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   rc   r   r   r5   r   )r8   rd   r9   r   re   r   r   rf   r   s      r!   test_draw_triangle_subpixelr     s   
#C (------------/ 0 0C (6
&
&
&CRaR,	C69MMMQqS<SFINNNQRR,	C69MMMJsC((( (OOO#OO#OO#OO% & &C (6
&
&
&C#bqb'<SFA>>>#ac(L)cVQ???#abb'<SFA>>>JC%%%%%r#   c                     d} d}d}| |z  }|||z
  z
  }||k    sJ t           j                            ||d           t          dd|dddd|d|
  
        \  }}|| dz
  k    sJ d	S )
zCheck that point deliberately chosen to be on the upper bound but
    with a similar-magnitudes subtraction error like that which could
    occur in extend line does indeed get mapped to last pixel.
    r   g?g    _Br   )decimalr>   rD   r   N)r8   re   assert_almost_equalmap_onto_pixel_for_line)num_y_pixelsrS   bigyrN   r   _pymaxs          r!   9test_line_awkward_point_on_upper_bound_maps_to_last_pixelr     s    
 LDD	d	Bd4iA d7777J""1T!"444%c3C&)3T&)1. .GAe ,q.      r#   c                    t          ddgddg          } |                     t          d                     t          j        t
                    5  |                     t          d                     d d d            d S # 1 swxY w Y   d S )NrG   rI   y11y12z2{x0: int32, x1: int32, y11: float32, y12: float32}z3{x0: int32, x1: float32, y11: string, y12: float32})r   r%   r   r&   r'   r(   )gs    r!   test_lines_xy_validater     s    D$<%00AJJCDDF F F 
z	"	" K K	

HII	K 	K 	KK K K K K K K K K K K K K K K K K Ks   #B  BB)F
__future__r   pandasr   numpyr8   r&   datashader.datashaper   datashader.glyphsr   r   r   datashader.glyphs.arear   datashader.glyphs.liner	   r
   r   datashader.glyphs.trimeshr   r   r   datashader.utilsr   r"   r)   r.   r3   r:   mapperr   map_onto_pixel_for_triangle_expand_aggs_and_colsexpand_aggs_and_colsrF   r|   r   r   r   extend_trianglesrW   r{   rz   rU   r\   rh   rm   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r#   r!   <module>r      s   " " " " " "          ' ' ' ' ' ' 6 6 6 6 6 6 6 6 6 6 : : : : : :         
         
 # " " " " "7 7 76 6 6      ( ( ( 
{{		88HH @@PP  3u261eDD ##F,C$8!UD D))-9MtTTQ ';&::&F&F ##**=:N+FH H  *)
#%9  
	E 	E 	E? ? ?. . .b  0& & &"& & &@  	& 	& 	&& & &0& & &2& & &2& & &2& & &2& & &2& & &2& & &@& & &>& & &&* * *B* * *B#& #& #&LF& F& F&P&) &) &)P& & &<! ! !.K K K K Kr#   