
    |Le                    z   d dl mZ d dlmZ d dlZd dlZd dlm	Z
 d dlZd dlZd dlmZ d dlmZmZmZ  edg dfdg dfg          ZddgZefd	Zd
 Zd Z	 d dlZ ee           ee           e            gZej	        ej	        egZeegZn.# e$ r& dZ ee           e            gZej	        egZegZY nw xY wddgZddgZ g dg dg dgg dg dg dgg dg dg dgdZ!d e!"                                D             Z# ej	        g dg dg dgd          Z$ ej	        g d g d!g dgd           ej	        g d"g d#g dgd          d$Z%e%d%         e%d&<   d' Z&ej'        (                    d(e          ej'        (                    d)g d*          ej'        (                    d+dee g          d,                                     Z)ej'        (                    d(e          ej'        (                    d)g d*          ej'        (                    d-g d.          ej'        (                    d/d0d1gd2g          d3                                                 Z*ej'        (                    d(e          ej'        (                    d/g d4          d5                         Z+ej'        (                    d(e          d6             Z,d7 Z-ej'        (                    d(e          d8             Z.ej'        (                    d(e          ej'        (                    d/g d4          d9                         Z/ej'        (                    d(e          d:             Z0ej'        (                    d(e          d;             Z1ej'        (                    d<e          d=             Z2ej'        (                    d<e          d>             Z3ej'        (                    d(e          ej'        (                    d)d?g          ej'        (                    d@dAdBg          dC                                     Z4ej'        (                    dDe          dE             Z5 ej6        dFej7                   ej8        dFej9        ej:                  gZ;e7e; ej6        dFej7                   ej8        dFej9        ej:                  gz  Z;ej'        (                    dGe;          dH             Z< ej	        d dIg           ej	        dJdKg          gZ= ej>         ej	        dLd gd dMggdN          e=eO          Z? ej>         ej	        d d gdPdQggdN          e=eO          Z@dR ZAdS ZBdT ZCdU ZDdV ZEdW ZFdX ZGdY ZHdZ ZId[ ZJd\ ZKd] ZLd^ ZMd_ ZNd` ZOda ZPdb ZQdc ZRdd ZSde ZTej'        (                    dDe          df             ZUdS )g    )annotations)BytesION)assert_eq_ndarrayassert_eq_xrassert_image_closex_axis)         y_axisr         c                   |                      ddd                              d          }d|g dg df<   t          j        |t          t
                    }|                      ddd	                              d          }| j        |g dg df<   t          j        |t          t
                    }|                      ddd
                              d          }| j        |g dg df<   t          j        |t          t
                    }|                      ddd                              d          }d|g dg df<   t          j        |t          t
                    }t          j        t          ||||                    }	|	S )N
      u4dtyper	   r	   r   r   coordsdimsf4f8r   )r   r   r   r   )r   r   r   r   )abcd)	arangereshapexr	DataArrayr   r   nanDatasetdict)
array_moduler   s_ar   s_br   s_cr   s_daggs
             Hlib/python3.11/site-packages/datashader/tests/test_transfer_functions.py	build_aggr.      s   B$//77??AAiii
,qd
3
3
3CB$//77??A*.Aiii
,qd
3
3
3CB$//77??A*.Aiii
,qd
3
3
3CB$//77??A$%AlllLLL !
,qd
3
3
3C
*TC3#555
6
6CJ    c                 n    t          t                                        d t          D                       S )Nc                    i | ]}|d S )r    ).0r   s     r-   
<dictcomp>z"build_agg_dask.<locals>.<dictcomp>%   s    3331333r/   )r.   npchunkr   r2   r/   r-   build_agg_daskr7   "   s-     R==33d333444r/   c                 H    t          j        t          j        | i |          S )z2Create a dask array wrapping around a numpy array.)da
from_arrayr5   array)argskwargss     r-   create_dask_array_npr>   (   s!    =42622333r/         g      &@g      1@)r      @ l   { )l   S~ r   l   !F~ )l    ~      ~ r   )r   rA   l   V~ )   :|~ r   l   2~ )l   ~ rB   r   )r   rA       S )     r      @~ )l    B~ rB   r   )logcbrtlinearc           	         i | ];\  }}|t          j        t          j        |d           t          t
                    <S )r   r   r   )tfImager5   r;   r   r   )r3   howvs      r-   r4   r4   J   sU     3 3 3a "(28AT222"(t5 5 5 3 3 3r/   )r   rA      E )   s~ r      L~ )   &P~ rB   r   r   r   )r   rD   rE   )   `~ r   rF   )r   rD   l    )rS   r   l   ?~ )r   r   r   r   c                d   |                                 }t          | t          j                  r4t          | j        t
          j                  r|                                 } n|                                  } t          j	        | ||d           }t          ||           t          j	        | ||t                    }t          ||           d| d<   |                                  }t          j	        | ||t                    }t          ||           |                     |           d| d<   |                                  }t          j	        | ||t                    }t          ||           |                     |           | j        j        dv rdnt          j        | d<   t          j	        | ||t                    }|d         |d<   t          ||           | j        j        dv rdnt          j        | d<   t          j	        | ||t                    }|d         |d<   t          ||           d S )	NcmaprM   spanr   r   r      )r   r   )iur   r   r   )copy
isinstancer"   r#   datar9   ArraycomputerK   shader   
float_spanequalsr   kindr5   r$   )xrV   rM   solimgx_inputs         r-   
check_spanrj   ]   s   
((**C!R\"" z!&"('C'C IIKKFFHH (14St
4
4
4Cc (14Sz
:
:
:Cc AdGffhhG
(14Sz
:
:
:Cc HHW AdGffhhG
(14Sz
:
:
:Cc HHW 7<:--aa26AdG
(14Sz
:
:
:CD	CIc 7<:--aa26AdG
(14Sz
:
:
:CD	CIcr/   r,   attrr   r   r   rW   c                   t          | |          }ddg}t          j        ||d|          }t          d         }t	          ||           t          |j                  ddgk    sJ t          |j                  ddgk    sJ t          j        ||d|          }t          d         }t	          ||           t          j        ||d|          }t          d         }t	          ||           |t          j        ||d	d
          }t          j        t          t          t                    }t	          ||           t          j        ||d	d          }t          j        t          |         t          t                    }t          ||d           t          j        ||d           }t          j        g dg dg dgd          }t          j        |t          t                    }t	          ||           d S )NpinkredrG   rU   r   r   rH   rI   eq_histFrV   rM   rescale_discrete_levelsr   Tr   )	tolerancec                H    t          j        |t           j        | dz            S Nr   r5   wherer$   )rf   masks     r-   <lambda>ztest_shade.<locals>.<lambda>   s    rxbfa1f'E'E r/   rV   rM   )r   rA   l   : )l   *i r   l   j~ )rC   rB   r   r   r   )getattrrK   rb   	solutionsr   listr   r   rL   eq_hist_sol#eq_hist_sol_rescale_discrete_levelsr   r5   r;   )r,   rk   rW   rf   rV   rh   rg   s          r-   
test_shader      s	    	TAE?D
(14U
6
6
6C
E
Cc
(33333>>h11111
(14V$
7
7
7C
F
Cc
(14XD
9
9
9C
H
Cc |hqtERRRh{6===S#hqtDQQQh:4@VZ[[[3q1111
(14EEG G GC
(/////////18<> > >C (3vD
1
1
1Ccr/   rM   )rI   rG   rH   rV   rn   ro   )z#FFC0CBz#FF0000c                    t          | |                                          }t          |         }t          ||||           d S N)r{   r]   r|   rj   )r,   rk   rM   rV   rf   rg   s         r-   test_span_cmap_listr      sF     	T!!A C.C q$S!!!!!r/   )blackr   r   r   z#000000c                    | j         }t          j        g dg dg dg          }t          j        |t
          t                    }t          ||d|           d S )Nr   i   (i   tl      B r   l      2 l      Z l      ~ r   r   rG   )r   r5   r;   rK   rL   r   r   rj   )r,   rV   rf   rg   s       r-   test_span_cmap_singler      sr     	A (...//////1 2 2C (3vD
1
1
1C q$s#####r/   c                    | j         }t          j        d          }|j        }t	          j        g dg dg dg          }t          j        |t          t                    }t          ||d|           d S )Nmatplotlib.cmr   l   D~ l   .m l    r   l   U~ l   `=~ l   gI~ r   r   rG   )r   pytestimportorskipviridisr5   r;   rK   rL   r   r   rj   )r,   rf   cmrV   rg   s        r-   test_span_cmap_mplr      s     	A 
	_	-	-B:D (/////////1 2 2C (3vD
1
1
1C q$s#####r/   c                 N   t          j        dd           } t          j        | t          t
                    }t          j        t          j        | dd                              d          t          t
                    }t          j        |dd	gd
          }t          ||           t          j        |dd	gd          }t          ||           t          j        |dd	gd          }t          ||           t          j        |dd	gd          }t          ||           d S )Nr	   boolr   r   rB   r   uint32rn   ro   rG   rz   rH   rI   rp   )
r5   eyerK   rL   r   r   rw   astyperb   r   )r_   rf   rg   rh   s       r-   test_shade_boolr      s   F1F####D
f4000A
(28D*a0077AA$41 1 1C
(1FE?
6
6
6Cc
(1FE?
7
7
7Cc
(1FE?
9
9
9Cc
(1FE?	
:
:
:Ccr/   c                    g d}t          j        | j        d|          }t          j        g dg dg dg          }t          j        |t          t                    }t          ||           d S )N)ro   )r      r   #0000FFrG   rM   rV   )r   rB   l   I5~ )l    ^A~ r   l    XL )l    (       r   r   	rK   rb   r   r5   r;   rL   r   r   r   r,   rV   rh   rg   s       r-   test_shade_cmapr      s    ***D
(35e$
/
/
/C
(/////////1 2 2C (3vD
1
1
1Ccr/   c                    t          j        | j        d|          }t          j        g dg dg dg          }t          j        |t          t                    }t          ||           d S )NrG   r   r   r   r   r   r   r   s       r-   %test_shade_cmap_non_categorical_alphar     s{     (35e$
/
/
/C
(888888888: ; ;C (3vD
1
1
1Ccr/   c                8   t          j        t                    5  t          j        | j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | j        g            d d d            d S # 1 swxY w Y   d S )Nfoo)rV   )r   raises
ValueErrorrK   rb   r   )r,   s    r-   test_shade_cmap_errorsr     s   	z	"	" $ $
U####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
z	"	" ! !
R    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s#   AA	A&BBBc                   t          j        d          }t          j        | j        d|j                  }t          j        g dg dg dg          }t          j        |t          t                    }t          ||           d S )Nr   rG   r   r   r   r   r   )r   r   rK   rb   r   r   r5   r;   rL   r   r   r   )r,   r   rh   rg   s       r-   test_shade_mpl_cmapr     s    		_	-	-B
(35e"*
5
5
5C
(/////////1 2 2C (3vD
1
1
1Ccr/   r;   c                   t          j        ddg          t          j        ddg          g}t          j         | ddgddggd	
          |g dgz   t          dgz             }g d}t          j        ||dd          }t          j        ddgddggd	
          }t          j        ||t                    }t          ||           t          |j                  ddgk    sJ t          |j                  ddgk    sJ t          t          d|                    }t          j        ||dd          }t          j        ddgddggd	
          }t          j        ||t                    }t          ||           t          j        ||dd          }t          j        ddgddggd	
          }t          j        ||t                    }t          ||           t          j        ||d d          }t          j        d dgdd!ggd	
          }t          j        ||t                    }t          ||           t          j        ||ddd"#          }t          j        d$d%gd&d'ggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  dk    sJ |j        d,         d)z	  d'z  dk    sJ t          j        ||ddd-#          }t          j        d.d/gdd0ggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  d'k    sJ |j        d*         d)z	  d'z  d'k    sJ |j        d+         d)z	  d'z  d'k    sJ |j        d,         d)z	  d'z  d'k    sJ t          j        ||ddd1#          }t          j        d2d%gdd3ggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  d4k    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  d'k    sJ |j        d,         d)z	  d'z  d5k    sJ t          j        ||ddd6#          }t          j        d7d8gd9d:ggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  d;k    sJ |j        d*         d)z	  d'z  d<k    sJ |j        d+         d)z	  d'z  d=k    sJ |j        d,         d)z	  d'z  d>k    sJ t          j         | d?dgddggd	
          |g dgz   t          dgz             }t          j        ||dd          }t          j        d&dgddggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  dk    sJ |j        d,         d)z	  d'z  dk    sJ t          j        ||ddd1#          }t          j        d&dgddggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  dk    sJ |j        d,         d)z	  d'z  dk    sJ t          j         | d@dAgdBdCggdD
          |g dgz   t          dgz             }t          j        ||dd          }t          j        ddEgdFdGggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dHk    sJ |j        d+         d)z	  d'z  dIk    sJ |j        d,         d)z	  d'z  d'k    sJ t          j        ||dddJ#          }t          j        ddKgdLdGggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  dk    sJ |j        d,         d)z	  d'z  d'k    sJ t          j        ||dddMN          }t          j        dOdPgdQdRggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dHk    sJ |j        d+         d)z	  d'z  dIk    sJ |j        d,         d)z	  d'z  d'k    sJ t          j         | d@dSgdTdUggdD
          |g dgz   t          dgz             }t          j        ||dd          }t          j        dVdWgddXggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dYk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  d'k    sJ |j        d,         d)z	  d'z  dZk    sJ t          j        ||ddd1#          }t          j        ddWgdOd[ggd	
          }t          j        ||t                    }t          ||           |j        d(         d)z	  d'z  dk    sJ |j        d*         d)z	  d'z  dk    sJ |j        d+         d)z	  d'z  dk    sJ |j        d,         d)z	  d'z  dk    sJ d S )\Nr   r   r   r   )r      r   )r	   r   r	   )r   r   r   )   r   r   r   r   rl   catsr   )r   r   r   r   orangerG      	color_keyrM   	min_alphal     3 iR l   7~ l     : r   r   abcrH   l     ; l     4 rI   i  Cl     B c                H    t          j        |t           j        |           dz  S ru   rv   )rf   ms     r-   ry   z%test_shade_category.<locals>.<lambda>D  s    BHQ$:$:a$? r/   i  i  h)2   d   )r   rM   r   rW   i   iR  7U r   r\   r   rX   )r   r   r   r   r   r   r   l   R ~ rB   )   $   i  3l     2 3      )r   H   i  *iR i7Ui  U*         U   r   )r   ir   )rY   r   )r   r   )r   	   r   i4l   R l   46 l   J~       )r   r	   iUi4\r   )r   rM   r   color_baselinei7Ul     R l   76 l   %~ )r   r   r   )r   r   r   )r   r   r   iR Ciq$l   DB C      iDj)r5   r;   rK   rL   r   rb   r   r}   r   r&   zipr_   r;   r   cat_aggcolorsrh   rg   s         r-   test_shade_categoryr   #  s   h1v!Q 0 01Fhuuz95j7QRZ^___%(99!VH_/ / /G 0//F
(7f%2
F
F
FC
(Z+,.59; ; ;C
(3vD
1
1
1Cc
(33333>>h11111#eV$$%%F
(7f&B
G
G
GC
(Z+,.59; ; ;C
(3vD
1
1
1Cc
(7f(b
I
I
IC
(Z+,.59; ; ;C
(3vD
1
1
1Cc
(7f??! ! !C (Y	*,.59; ; ;C
(3vD
1
1
1Cc (7f(ai
X
X
XC
(Xu%cN$+/1 1 1C
(3vD
1
1
1CcXc]b D(Q....Xc]b D(Q....Xc]b D(Q....Xc]b D(Q.... (7f(af
U
U
UC
(Z,,.59; ; ;C
(3vD
1
1
1CcXc]b D(S0000Xc]b D(S0000Xc]b D(S0000Xc]b D(S0000 (7f(ag
V
V
VC
(Y&,.59; ; ;C
(3vD
1
1
1CcXc]b D(R////Xc]b D(Q....Xc]b D(S0000Xc]b D(S0000 (7f(ag
V
V
VC
(Y	*,.59; ; ;C
(3vD
1
1
1CcXc]b D(R////Xc]b D(R////Xc]b D(S0000Xc]b D(R//// huuy)4+Z8:AEG G G#)___,=#=!%3 3 3G (7f(b
I
I
IC
(Wi(,.59; ; ;C
(3vD
1
1
1Cc Xc]b D(Q....Xc]b D(Q....Xc]b D(Q....Xc]b D(Q.... (7f(bw
W
W
WC
(Wi(,.59; ; ;C
(3vD
1
1
1Cc Xc]b D(Q....Xc]b D(Q....Xc]b D(Q....Xc]b D(Q....
 huu{L9*L9;BFH H H%(99!VH_/ / /G
 (7f(b
I
I
IC
(Y
+,.59; ; ;C
(3vD
1
1
1CcXc]b D(R////Xc]b D(S0000Xc]b D(S0000Xc]b D(S0000
(7f(bv
V
V
VC
(Y	*
+-48: : :C
(3vD
1
1
1CcXc]b D(R////Xc]b D(R////Xc]b D(R////Xc]b D(S0000
(7f(bYZ
[
[
[C
(Y
+,.59; ; ;C
(3vD
1
1
1CcXc]b D(R////Xc]b D(S0000Xc]b D(S0000Xc]b D(S0000 huu{M:+[9;BFH H H%(99!VH_/ / /G
 (7f(b
I
I
IC
(Z+,.59; ; ;C
(3vD
1
1
1CcXc]b D(R////Xc]b D(R////Xc]b D(S0000Xc]b D(S0000
(7f(bw
W
W
WC
(Y	*	*,379 9 9C
(3vD
1
1
1CcXc]b D(R////Xc]b D(R////Xc]b D(R////Xc]b D(R//////r/   c                   t          j        ddg          t          j        ddg          g}t          j         | ddgddggd          |g dgz   t          d	gz   
          }g d}t          j        ||dd          }t          j        ddgddggd          }t          j        ||t          
          }t          ||           d S )Nr   r   r   r   r   r   r   rl   r   r   r   rI   r   r   )r5   r;   rK   rL   r   rb   r   r   s         r-   test_shade_zerosr     s   h1v!Q 0 01Fhuuy)4()46=AC C C#)___,=#=!%3 3 3G
 0//F
(7f(a
H
H
HC
(Wg&g&(/35 5 5C
(3vD
1
1
1Ccr/   r   rescaleFTc                B   t          | |          }ddg}t          j        ||d|          }|r t          j        g dg dg dgd	          }nt          j        g d
g dg dgd	          }t          j        |t          t                    }t          ||           d S )Nrn   ro   rp   rq   )    l   g~ l   M~ )l   3l~ r   l   6~ )rB   r   r   r   r   )rA   rO   rP   )rQ   rA   rR   )rB   rA   rA   r   )	r{   rK   rb   r5   r;   rL   r   r   r   )r,   rk   r   rf   rV   rh   rg   s          r-   "test_shade_rescale_discrete_levelsr     s     	TAE?D
(14Y
P
P
PC Oh<<<<<<<<<>EMO O O h<<<<<<<<<>EMO O O (3vD
1
1
1Ccr/   r'   c           	     \   |                      ddgddggddgddggddgddggddgddgggd          }t          j        |t          g dddgdd	g
                    }t	          j        |dd          }t          j         ddgddgddgddgg          }t          |j        |           d S )Nr   r   r   r	   r   r   )r   r   r   r	   r   r   yrf   catr_   r   rp   T)rM   rr   l   p\ i7~oiLj iol   8~ l   ;~ )	r;   r"   r#   r&   rK   rb   r5   r   r_   )r'   arrr,   rh   rg   s        r-   .test_shade_rescale_discrete_levels_categoricalr     s    


1v1v. !1v1v. !1v1v. !1v1v.0 8<  = =C ,C|||1vCQT:(V(V(V
W
W
WC
(3It
D
D
DC
(Z,,,,. / /C ch$$$$$r/   )r   r   r   empty_arrayc           	         t          j        | t          ddgddgddg                    }t          j        |dddg	          }t          |j        t          j                  sJ |j	        d
k    sJ d S )Nr   r   r   r   r   r   rp   whiter   r   r   )
r"   r#   r&   rK   rb   r^   r_   r5   ndarrayshape)r   r,   ims      r-   test_shade_all_maskedr     s    
 ,q!fAS#J777  C 
#9GW+=	>	>	>Bbgrz*****8vr/   r   r	   r      ~    }~ r   r   r   i}}}c                 H   t          j        t                    } |                     t                    sJ t          j        t          j        ddgddggd          t          t                    }t          j        t          d          } |                     |          sJ d S )Nr   rB   r   r   r   r   ro   )	rK   set_backgroundimg1rd   rL   r5   r;   coords2r   )outrg   s     r-   test_set_backgroundr   2  s    

D
!
!C::d
(28j*5(*57>FH H H!. . .C 
D%
(
(C::c??r/   c                 6   t          j        t          t                    } t	          j        ddgddggd          }| j        t          j        k                                    sJ | j        t          j        k                                    sJ t          j	        
                    | j        |           t          j        t          t                    } t	          j        ddgddggd          }| j        t          j        k                                    sJ | j        t          j        k                                    sJ t          j	        
                    | j        |           t          j        t          t          d          } t	          j        ddgdd	ggd          }| j        t          j        k                                    sJ | j        t          j        k                                    sJ t          j	        
                    | j        |           d S )
Nr   r   l   ?{~ r   r   r   addrM   l   {~ )rK   stackr   img2r5   r;   r   allr   testingassert_equalr_   )rh   r   s     r-   
test_stackr   <  s   
(4

C
(Z,,.5=? ? ?CJ$+%**,,,,,J$+%**,,,,,JCHc***
(4

C
(Z,,.5=? ? ?CJ$+%**,,,,,J$+%**,,,,,JCHc***
(45
)
)
)C
(Z,,.5=? ? ?CJ$+%**,,,,,J$+%**,,,,,JCHc*****r/   c            
     
   t          j        d          } t          j                            | t          j        dd                     t          j                            t          j        d          t          j        dd                     t          j                            t          j        d          t          j        dd                     t          j        g dg dg dgd          }t          j                            t          j        d          |           t          j        g d	g d
g dg dg dg d
g d	gd          }t          j                            t          j        d          |           d S )Nr   )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	   )rK   _square_maskr5   r   r   ones_circle_maskr;   )rx   r   s     r-   
test_masksr   S  sy   ?1DJD"'&"?"?"?@@@JBOA..f0M0M0MNNNJBOA..f0M0M0MNNN
(IIIIIII&,. . .C JBOA..444
()))))))))))))))))))))+ 39: : :C JBOA..44444r/   c            
        d} d}d}t          j        | | dddg| |dddgg dddd|dgg dgd          }t          j        d          t          j        d          g}t          j        ||t
          	          t          j                  }t          j        g d
g d
g dg dg dg          }t           j                            |j	        |           |j
        j
        k                                    sJ |j        j        k                                    sJ |j        j        k    sJ t          j        d          }t          j        g dg dg dg dg dg          }t           j                            |j	        |           t          j        d          }t          j        g d
g d
g dg dg dg          }t           j                            |j	        |           t          j        d          }t          j        g dg dg dg dg dg          }t           j                            |j	        |           t          j        g dg dg dg          }t          j        |          }t          j        g dg dg dg d g d!g          }t           j                            |j	        |           t          j        d          }t           j                            |j	        j	                   t          j        t          fd"           t          j        t          fd#           t          j        t          fd$           d S )%N}  }  }  }r   r   r   r   r   r   r   r   r   r   )   ;Z r     *(x r   r   )r  r      VPy r  r  )r   r   r  r  r  r   px)r  r  r  r  r   )r  r     Ak    H 9 r  )r  r
  l   D[ r  r  )r  r  r  r  r  )r   r  r  r  r  squarer   r   r   )   } ~ r     > t r   r   )r  r  l    t r  r  r   r   r   r   r   r   rx   )r     }  x r  r   r   )r  r  r  r   r   )r  r  r  r   r  )r   r   r   r  r   )r   r   r  r   r  c                 0    t          j         d          S Nr  rK   spreadrh   s   r-   ry   z!test_rgb_spread.<locals>.<lambda>      bi&;&;&; r/   c                 T    t          j         t          j        d                    S Nr   r  rK   r  r5   r   r  s   r-   ry   z!test_rgb_spread.<locals>.<lambda>      bi"'!**&E&E&E r/   c                 T    t          j         t          j        d                    S Nr   r  r  r  s   r-   ry   z!test_rgb_spread.<locals>.<lambda>      bi"'&//&J&J&J r/   )r5   r;   r    rK   rL   r   r  r   r   r_   r   r   r   r   r   r   )	pgr   r_   r   sorx   rh   s	           @r-   test_rgb_spreadr&  h  s   AAA8aAq!_Aq!_$__Aq!_$__	& .6	7 7 7D
 illBIaLL)F
(4T
2
2
2C
	#A
NNNNNNNNNNNNNNN	P 	Q 	QA
 JAFA&&&H
"'')))))H
"'')))))6SX
	#!A
NNNNNNNNNNNNNNN	P 	Q 	QA
 JAFA&&&
	#X&&&A
NNNNNNNNNNNNNNN	P 	Q 	QA
 JAFA&&&
	#5!!!A
NNNNNNNNNNNNNNN	P 	Q 	QA
 JAFA&&&8YYYYYYY  ! !D 		#D!!!A
NNNNNNNNNNNNNNN	P 	Q 	QA
 JAFA&&&
	#!AJAFCH---
M*;;;;<<<
M*EEEEFFF
M*JJJJKKKKKr/   c                    t          j        g dg dg dg dg dgd          } t          j        d          t          j        d          g}t          j        | |t
                    t          j                  }t          j        g d	g d	g d
g dg dg          }t           j        	                    |j
        |           |j        j        k                                    sJ |j        j        k                                    sJ |j        j        k    sJ t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g d	g d	g d
g dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        g dg dg dg          }t          j        g dg dg dg dg dgd          } t          j        | |t
                    t          j        |           }t          j        g dg d!g dg d"g dg          }t           j        	                    |j
        |           t          j        d#          }t           j        	                    |j
        j
                   t          j        t           fd$           t          j        t           fd%           t          j        t           f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	   r   r   r	   r	   r	   r   r  r   r   r   r	   r   r   r      r   r	   r   r0     r   r	   r	   r   r   r	   r	   r   r	   r	   r	   r	   r  r  minr   r   r   r   r   r   r   r   r   r	   r	   max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   c                 0    t          j         d          S r  r  r   s   r-   ry   z$test_uint32_spread.<locals>.<lambda>  r  r/   c                 T    t          j         t          j        d                    S r  r  r@  s   r-   ry   z$test_uint32_spread.<locals>.<lambda>  r  r/   c                 T    t          j         t          j        d                    S r   r  r@  s   r-   ry   z$test_uint32_spread.<locals>.<lambda>  r!  r/   r5   r;   r    r"   r#   r   rK   r  r   r   r_   r   r   r   r   r   r   r_   r   r$  r%  rx   r   s        @r-   test_uint32_spreadrE    sI   8___$__$__$__$__	& .6	7 7 7D
 illBIaLL)F
,tF
6
6
6C
	#A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&H
"'')))))H
"'')))))6SX
	#!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#X&&&A
///!//!//!//!//	# 	$ 	$A JAFA&&&
	#5!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#5!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&& 8YYYYYYY  ! !D 8___$__$__$__$__	& .6	7 7 7D
 ,tF
6
6
6C
	#D!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#!AJAFCH---
M*;;;;<<<
M*EEEEFFF
M*JJJJKKKKKr/   c                    t          j        g dg dg dg dg dgd          } t          j        d          t          j        d          g}t          j        | |t
                    t          j                  }t          j        g d	g d	g d
g dg dg          }t           j        	                    |j
        |           |j        j        k                                    sJ |j        j        k                                    sJ |j        j        k    sJ t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g d	g d	g d
g dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        d          }t          j        g dg dg dg dg dg          }t           j        	                    |j
        |           t          j        g dg dg dg          }t          j        g dg dg dg dg dgd          } t          j        | |t
                    t          j        |          }t          j        g dg dg dg d g dg          }t           j        	                    |j
        |           t          j        d!          }t           j        	                    |j
        j
                   t          j        t           fd"           t          j        t           fd#           t          j        t           fd$           d S )%Nr(  r)  r  r*  int32r   r   r   r+  r,  r-  r   r  r.  r/  r1  r3  r4  r  r  r5  r   r8  r9  r:  r  r  r;  r<  r  r=  r>  r   c                 0    t          j         d          S r  r  r@  s   r-   ry   z#test_int32_spread.<locals>.<lambda>I  r  r/   c                 T    t          j         t          j        d                    S r  r  r@  s   r-   ry   z#test_int32_spread.<locals>.<lambda>J  r  r/   c                 T    t          j         t          j        d                    S r   r  r@  s   r-   ry   z#test_int32_spread.<locals>.<lambda>K  r!  r/   rC  rD  s        @r-   test_int32_spreadrK    sI   8___$__$__$__$__	& .5	6 6 6D
 illBIaLL)F
,tF
6
6
6C
	#A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&H
"'')))))H
"'')))))6SX
	#!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#X&&&A
///!//!//!//!//	# 	$ 	$A JAFA&&&
	#5!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#5!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&& 8YYYYYYY  ! !D 8___$__$__$__$__	& .5	6 6 6D
 ,tF
6
6
6C
	#D!!!A
///!//!//!//!//	# 	$ 	$A
 JAFA&&&
	#!AJAFCH---
M*;;;;<<<
M*EEEEFFF
M*JJJJKKKKKr/   c                 T   t          j        ddt           j        t           j        t           j        gddt           j        t           j        t           j        gt           j        t           j        t           j        t           j        t           j        gt           j        t           j        t           j        dt           j        gt           j        t           j        t           j        t           j        t           j        ggd          } t          j        d          t          j        d          g}t	          j        | |t                    t          j                  }t          j        dddt           j        t           j        gdddt           j        t           j        gg dt           j        t           j        dddgt           j        t           j        dddgg          }t           j	        
                    |j        |           |j        j        k                                    sJ |j        j        k                                    sJ |j        j        k    sJ t          j        d	          }t          j        ddddt           j        gg d
g dg dt           j        ddddgg          }t           j	        
                    |j        |           t          j        d          }t          j        dddt           j        t           j        gdddt           j        t           j        gg dt           j        t           j        dddgt           j        t           j        dddgg          }t           j	        
                    |j        |           t          j        d          }t          j        dddt           j        t           j        gdddt           j        t           j        gg dt           j        t           j        dddgt           j        t           j        dddgg          }t           j	        
                    |j        |           t          j        d          }t          j        dddt           j        t           j        gdddt           j        t           j        gg dt           j        t           j        dddgt           j        t           j        dddgg          }t           j	        
                    |j        |           t          j        g dg dg dg          }t          j        t           j        t           j        t           j        dt           j        gt           j        t           j        t           j        t           j        t           j        gt           j        dt           j        t           j        t           j        gt           j        t           j        t           j        t           j        t           j        gt           j        t           j        t           j        t           j        t           j        ggd          } t	          j        | |t                    t          j        |          }t          j        g dg dg dg dg dg          }t          j        t           j        t           j        t           j        dt           j        gdt           j        dt           j        dgt           j        dt           j        t           j        t           j        gdt           j        dt           j        t           j        gt           j        t           j        t           j        t           j        t           j        gg          }t           j	        
                    |j        |           t          j        d	          }t           j	        
                    |j        j                   t          j        t"          fd           t          j        t"          fd           t          j        t"          fd           d S ) Nr   r   r	   float32r   r   r   r,  r  r/  r1  r3  r  r  r5  r   r7  r8  r:  r  r  r  r;  r=  r<  r>  r  r   c                 0    t          j         d          S r  r  r@  s   r-   ry   z%test_float32_spread.<locals>.<lambda>  r  r/   c                 T    t          j         t          j        d                    S r  r  r@  s   r-   ry   z%test_float32_spread.<locals>.<lambda>  r  r/   c                 T    t          j         t          j        d                    S r   r  r@  s   r-   ry   z%test_float32_spread.<locals>.<lambda>  r!  r/   )r5   r;   r$   r    r"   r#   r   rK   r  r   r   r_   r   r   r   r   r   r   rD  s        @r-   test_float32_spreadrQ  N  s4   8aBFBFBF3BFBFBF3fbfbfbfbf=fbfbfa8fbfbfbfbf=	? GP	Q Q QD
 illBIaLL)F
,tF
6
6
6C
	#A
1aBFBF+aBFBF+!//6261a+6261a+	- 	. 	.A
 JAFA&&&H
"'')))))H
"'')))))6SX
	#!A
1aArv&!//!//!//61aA&	( 	) 	)A
 JAFA&&&
	#X&&&A
1aBFBF+aBFBF+!//6261a+6261a+	- 	. 	.A JAFA&&&
	#5!!!A
1aBFBF+aBFBF+!//6261a+6261a+	- 	. 	.A
 JAFA&&&
	#5!!!A
1aBFBF+aBFBF+!//6261a+6261a+	- 	. 	.A
 JAFA&&& 8YYYYYYY  ! !D 8bfbfbfa8fbfbfbfbf=fa8fbfbfbfbf=fbfbfbfbf=	? GP	Q Q QD
 ,tF
6
6
6C
	#D!!!A 	///!//!//!//!//	# 	$ 	$A 	2626261bf5bfa+61bfbfbf5bfa0626262626:	< 	= 	=A
 JAFA&&&
	#!AJAFCH---
M*;;;;<<<
M*EEEEFFF
M*JJJJKKKKKr/   c                    t          j        g dg dg dg dg dgd          } t          j        g dg dg dg dg dgd          }t          j        g dg dg dg dg dgd          }t          j        | ||g          }t          j        d          t          j        d          g}t	          j        ||g dgz   t          d	gz   
          }t          j        |          }t          j        g dg dg dg dg dg          }t           j	        
                    |                    d          j        |           t          j        g dg dg dg dg dg          }t           j	        
                    |                    d          j        |           t          j        g dg dg dg dg dg          }t           j	        
                    |                    d          j        |           d S )Nr<  r  rG  r   )r   r   r   r   r   r*  r   rl   r   r   r6  r   )r   r9  r   r-  r   )r5   r;   dstackr    r"   r#   r   rK   r  r   r   selr_   )a_datab_datac_datar_   r   r   r$  r%  s           r-   test_categorical_spreadrX    se   X&&&&	( 07	8 8 8F X&&&&	( 07	8 8 8F X&&&&	( 07	8 8 8F 9fff-..DillBIaLL)F
,tFooo->$> E7N, , ,C 		#A
///!//!//!//!//	# 	$ 	$A
 JAEEcENN/333
///!//!//!//!//	# 	$ 	$A
 JAEEcENN/333
///!//!//!//!//	# 	$ 	$A
 JAEEcENN/33333r/   c                    d} t          j        d| d          }t          j        |          dk    sJ t          j        dd          }t          j        |          t           j        k    sJ | |d<   t          j        |          dk    sJ | x|d<   x|d	<   |d
<   t          j        t          j        |          d          sJ t          j        t          j        |d          d          sJ d S )Nr   r
   r
   r   r         ?r   r   r   r   r   r         ?r	   r   )r5   fullrK   _rgb_densityzerosinfallclose)r   r_   s     r-   test_rgb_densityrc    s    A761H---D?4  C''''8F(+++D?4  BF****DJ?4  A%%%%+,,DJ,dd4j;rt,,d33333;rtQ//3333333r/   c                    t          j        dd          } t          j        | d          dk    sJ t          j        dd          } t          j        | d          t           j        k    sJ d| d<   t          j        | d          d	k    sJ dx| d
<   x| d<   | d<   t          j        t          j        | d          d          sJ t          j        t          j        | dd          d          sJ d S )NrZ  r   r   F
float_typer[  r   r   r   r\  r   r   r]  r	   rf  r	  )r5   r   rK   _array_densityr`  ra  rb  r_   s    r-   test_int_array_densityrj    s   76***DTe444;;;;8F(+++DTe444>>>>DJTe4449999+,,DJ,dd4j;r(%@@@$GGGGG;r(%AFFFJJJJJJJr/   c                    t          j        dd          } t          j        | d          dk    sJ t          j        dt           j        d          } t          j        | d          t           j        k    sJ d| d<   t          j        | d          d	k    sJ dx| d
<   x| d<   | d<   t          j        t          j        | d          d          sJ t          j        t          j        | dd          d          sJ d S )NrZ  rM  r   Tre  r[  r   r   r   r\  r   r   r]  r	   rg  )r5   r   rK   rh  r^  r$   ra  rb  ri  s    r-   test_float_array_densityrl    s   76+++DTd333s::::7626333DTd333rv====DJTd333q8888+,,DJ,dd4j;r($???FFFFF;r($1EEEqIIIIIIIr/   c            
        d} t          j        d          t          j        d          g}t          j        | | dddg| | dddgg dddd| dgg dgd          }t          j        ||t
                    t          j                                                sJ t          j        | ddddgg d| ddd| gg dg dgd          }t          j        ||t
                    t          j        d	                              t          j        d                    sJ t          j        d
	                              t          j        d                    sJ t          j        d	                              t          j        d                    sJ t          j        d                                        sJ t          j
        t          fd           t          j
        t          fd           d S )Nr   r   r   r  r   r   r   皙?	thresholdffffff?r   r[  r	   max_pxc                 0    t          j         d          S N皙?ro  rK   	dynspreadr  s   r-   ry   z$test_rgb_dynspread.<locals>.<lambda>      bl3#&F&F&F r/   c                 0    t          j         d          S Nr  rr  rw  r  s   r-   ry   z$test_rgb_dynspread.<locals>.<lambda>      bl3r&B&B&B r/   )r5   r    r;   rK   rL   r   rx  rd   r  r   r   r   )r   r   r_   rh   s      @r-   test_rgb_dynspreadr}    s   AillBIaLL)F8aAq!_Aq!_$__Aq!_$__	& .6	7 7 7D
 (4T
2
2
2C<##C(((((8aAq!_$__Aq!_$__$__	& .6	7 7 7D
 (4T
2
2
2C<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<A&&&--c22222
M*FFFFGGG
M*BBBBCCCCCr/   c                    t          j        d          t          j        d          g} t          j        g dg dg dg dg dgd          }t          j        || t
                    t          j                                                sJ t          j        g dg dg d	g dg dgd          }t          j        || t
                    t          j        d
                              t          j	        d                    sJ t          j        d                              t          j	        d                    sJ t          j        d                              t          j	        d                    sJ t          j        d                                        sJ t          j        t          fd           t          j        t          fd           d S )Nr   r(  r  r;  r   r   r   r   r   r   r   r   )r   r   r   r   r   rn  ro  r   rq  r   r[  r	   rr  c                 0    t          j         d          S ru  rw  r@  s   r-   ry   z&test_array_dynspread.<locals>.<lambda>%  ry  r/   c                 0    t          j         d          S r{  rw  r@  s   r-   ry   z&test_array_dynspread.<locals>.<lambda>&  r|  r/   )r5   r    r;   r"   r#   r   rK   rx  rd   r  r   r   r   )r   r_   r   s     @r-   test_array_dynspreadr    s   illBIaLL)F8___$__$__$__$__	& .6	7 7 7D
 ,tF
6
6
6C<##C(((((8___$__$__$__$__	& .6	7 7 7D
 ,tF
6
6
6C<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<A&&&--c22222
M*FFFFGGG
M*BBBBCCCCCr/   c                 x   t          j        g dg dg dg dg dgd          } t          j        g dg dg dg dg dgd          }t          j        g dg dg dg dg dgd          }t          j        | ||g          }t          j        d          t          j        d          g}t	          j        ||g dgz   t          dgz   	          }t          j        |d
          	                    t          j
        |d                    sJ t          j        |d          	                    t          j
        |d                    sJ t          j        |d          	                    t          j
        |d                    sJ t          j        |d          	                    |          sJ d S )Nr  r  rG  r   )r   r   r   r   r   r   rl   r   r   rn  ro  r   rq  r   r[  r	   rr  )r5   r;   rS  r    r"   r#   r   rK   rx  rd   r  )rU  rV  rW  r_   r   r   s         r-   test_categorical_dynspreadr  )  s   X&&&&	( 07	8 8 8F X&&&&	( 07	8 8 8F X&&&&	( 07	8 8 8F 9fff-..DillBIaLL)F
,tFooo->$> E7N, , ,C<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<s+++2229S!3D3DEEEEE<A&&&--c2222222r/   c                6   t          j        | t          j        |                     d          d                                         }||d         z  }t          j        t          j        dd|j                  |d          d         }d|cxk     rdk     sn J d S )N   )binsr   r  r   g?rv  )r5   	histogramisnancumsumpolyfitlinspacesize)eqcdfslopes      r-   check_eq_hist_cdf_sloper  F  s     ,r28B<<-(s
3
3
3A
6
=
=
?
?C
B-CJr{1a22C;;A>Er/   c                    t           j                            d          } t           j        | t           j                            dd          <   | t          j        |           z
                      d          } t          j        |           }t          j	        | |          \  }}t          |           t          j        |          |k                                    sJ t           j                            dd                              d          } | |                                 z
  } t          j	        |           \  }}t          |           d S )Ni_ )r  r   ),  r  )scaler  i8)r5   randomnormalr$   randintnanminr!   r  rK   rp   r  r   r   r5  )r_   rx   r  _s       r-   test_eq_histr  O  s   9((D02D		6		,	,-29T??"++J77D8D>>DJtT""EBBHRLLD %%'''''9#J77>>tDDD$((**DJtEBBr/   c                 z    t                                           } t          | t          j        j                  sJ d S r   )r   to_pilr^   PILrL   r  s    r-   test_Image_to_pilr  _  s/    
++--Cc39?+++++++r/   c                     t                                           } t          | t                    sJ |                                 dk    sJ d S )Nr   )r   
to_bytesior^   r   tell)bytess    r-   test_Image_to_bytesior  d  sF    OOEeW%%%%%::<<1r/   c                     t          j        g dg dg dg dg dgd          } t          j        | ddg          }t          j        |ddgd	
          }|J d S )Nr  r   r   rf   r   r   r   r   rI   rz   )r5   r;   rK   rL   rb   )r_   r   rh   s      r-   $test_shade_should_handle_zeros_arrayr  j  s    8___$__$__$__$__	& .6	7 7 7D
 (4sCj
)
)
)C
(3gw/X
>
>
>C?????r/   c                    t          j        g dg dg dg dg dgd          } ddd	d
}t          j        g dg dg dg dg dgd          }t          j        | ddg          }t          j        ||          }|j        |k                                    sJ t          j        t          j        | d          ddg          }t          j        ||          }|j        |k                                    sJ 	 dd l	}t          j         |j
        |           ddg          }t          j        ||          }	|	j        |k                                    sJ d S # t          $ r d }Y d S w xY w)Nr  )r   r   r   r   r   )r   r   r   r   r   )r   r	   r	   r	   r   r   r   r   purpleyellow)r   r   r	   )r       r  r  r   )r         r  r  r   )r   r   r   r   r   rf   r   r  )r   r   )chunksr   )r5   r;   rK   rL   rb   r_   r   r9   r:   cupyasarrayImportError)
r_   r   result	arr_numpyresult_numpyarr_daskresult_daskr  arr_cupyresult_cupys
             r-   "test_shade_with_discrete_color_keyr  u  s   8___$__$__$__$__	& .6	7 7 7D
 X66IXAAAAAAAAA&	(
 %& & &F S#J///I8I;;;L',,..... xd6:::#sLLLH(8y999K&++-----8LDL..c3Z@@@hx9=== F*//1111111   s    AE! !E10E1c           
     r    |                      ddgddgg          }t          j        ||d ddd dd           d S )Ng        r[  rp   g      ?rn  T)r;   rK   _interpolate_alpha)r'   r_   s     r-   +test_interpolate_alpha_discrete_levels_Noner    sG    SzC:677D$dIsD#tLLLLLr/   )V
__future__r   ior   numpyr5   xarrayr"   
dask.arrayr;   r9   r  r   datashader.transfer_functionstransfer_functionsrK   datashader.tests.test_pandasr   r   r   r&   r   r   r.   r7   r>   r  aggsarraysarray_modulesr  int_spanrc   solution_listsitemsr|   r~   r   rj   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r`  r   r^  r$   float64empty_arraysr   r   rL   r   r   r   r   r   r&  rE  rK  rQ  rX  rc  rj  rl  r}  r  r  r  r  r  r  r  r  r  r2   r/   r-   <module>r     s	   " " " " " "                     



  * * * * * * \ \ \ \ \ \ \ \ \ \	)))$x&;<	=	=(     "5 5 54 4 4
	KKKIbMM99T??NN,<,<=Dh
$89FJMM   DIbMM>>++,Dh,-FDMMM	 8D\
 
%	$	$	$	$	$	$	$	$	& 
%	$	$	$	$	$	$	$	$	& 
%	$	$	$	$	$	$	$	$	& 3 3)//113 3 3	
 bh3333333335<@B B B
 
.........07;
= 
= 
= 
.........07;
= 
= 
=	'> '> # ,Os+S #C (/ / /d %%11$*!=>># # ?> 21 &%#L %%11 9 9 9::65/3I!JKK" " LK ;: 21 &%" %%!@!@!@AA$ $ BA &%$ %%$ $ &%$$   %%  &% %%!@!@!@AA  BA &% %%! ! &%! %%  &% &))w0 w0 *)w0t &))  *)  %%#''UDM22  32 (' &%  77% % 87%  BHYbi(((BGIrvRZ000 
9DK000	)TXT\::: L 55
 
 65
 28QFXRXq!f--
.rx:z2%z24;CE E ET+ + + rx:z2%z24;CE E ET+ + +
  + + +.5 5 5*?L ?L ?LDOL OL OLdOL OL OLdUL UL ULp,4 ,4 ,4^
4 
4 
4	K 	K 	K	J 	J 	JD D D0D D D03 3 3:        , , ,
      D 77M M 87M M Ms   6B (B:9B: