
    P/Ph                     ~   d dl mZ 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Zd dl	Z	d dl
Zd dlZd dlmZ d dlmZ d dlZd dlmZmZmZmZmZmZ d dlmZmZmZm Z m!Z! d d	l"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z( d dl)m*Z+ d dl,Z, e$dgd          d             Z- e$dgddgd          d             Z.e,j/        0                    dddg           e$dgddg          d                         Z1d Z2e,j/        0                    dg d           e#dg          d                         Z3 e#dg          d             Z4 e#            d             Z5d  Z6d! Z7e,j/        0                    d"g d#          d$             Z8e,j/        0                    d%d&d'g          d(             Z9e,j/        0                    d"g d)          d*             Z:d+ Z;d, Z<d- Z= e$d.gd          d/             Z>ej        ?                    d0           e#dg          d1                         Z@d2 ZAe,j/        0                    d3d4d4gd gd4d5gd6gd7d4gd8gd9d4gd8gd:d;gd<gd=d4gdgd4d=gdgg          d>             ZBe,j/        0                    d?d@dAggdBfdCdDggdEfejC        d6dFggdGfd6dHggdIfd=d=ggdJfd d ggdKfg          dL             ZD e$dMgd0N          dO             ZE e$dPgd0N          dQ             ZF e#dg          dR             ZGdS ZHdT ZI e$dUgd          dV             ZJ e$dWgdddgX          dY             ZKdZ ZL e$d[gdd0\          d]             ZM e$d^gd          d_             ZN e#dg          d`             ZO e$dagddgdd0b          dc             ZP e$ddgdd0\          de             ZQdf ZR e$dggdd0\          dh             ZSdi ZTdj ZUdk ZVdl ZWdm ZXdn ZYe,j/        0                    doe  ejZ        dp           ejZ        dq           ejZ        dr          [                    ds          fe! ejZ        dp           ejZ        dq           ejZ        dt          [                    du          fg          dv             Z\dw Z]dx Z^ e$dygd          dz             Z_ e$d{gd          d|             Z`d} Zad~ Zb e$dgdd          d             Zc e$dgd          d             Zdd Ze e$dgd          d             Zf e$dg ejg                    dk    rd nddd0          d             Zhd Zie,j/        0                    dd dj                                D                       d             Zk e$dgdd0\          d             Zl e$dgdd0\          d             Zm e$dgdd0\          d             Zne,j/        0                    dejo        ejp        d d g          d             Zqd Zrd Zsd Ztd Zue,j/        0                    dddg          e,j/        0                    dddg          d                         Zvd Zwd Zxd Zyd Zz e#            d             Z{d Z|ej        ?                    d0          d             Z} e$dgddgdd0b          d             Z~ G d dej                  Zd Zd Z e#dg          d             Ze,j/        0                    dd=d6g           e#dg          d                         Z e#            d             Z e$dgd0N          d             Z e$dgd0N          d             Z e$dgd0dd          d             Z e#d          d             Z e#d          d             ZdÄ Ze,j/                            dĦ          e,j/        0                    d%d&d'g          e,j/        0                    dg dƢg dǢg           e#d          dȄ                                                 Z e#dg          dɄ             Zdʄ Zd˄ Zd̄ Z e$dgd0ddά          dτ             Z e$dgd0ddά          dф             Z e$dgd0dӦ          dԄ             Ze,j/        0                    ddզ          e,j/        0                    ddצ          d؄                         ZdS )    )	ExitStackcopyN)Path)assert_array_equal)Image)colorsimagepatchespyplotstylercParams)	AxesImage	BboxImageFigureImageNonUniformImagePcolorImage)check_figures_equalimage_comparison)BboxAffine2DTransformedBboxzinterp_alpha.pngT)remove_textc                  X   t          j        dd          \  } \  }}t          j        d          }t          j        d          |d<   t          j        t          j        dt          j                            |d<   |                    |d	           |                    |d
	           dS )z:Test the interpolation of the alpha channel on RGBA images      )   r      r   r   ).r   dtype.   noneinterpolationbilinearN)pltsubplotsnpzerosonestriluint8imshow)figaxlaxrimgs       [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/tests/test_image.pytest_alpha_interpr5      s     l1a((OC#s
(9

C'&//CK'"'&999::CKJJs&J)))JJs*J-----    interp_nearest_vs_nonepdfsvg)
extensionsr   c                  \   dt           d<   t          j        g dg dgg dg dggt          j                  } t	          j        dd	          \  }\  }}|                    | d
           |                    d           |                    | d           |                    d           dS )z5Test the effect of "nearest" and "none" interpolationr#   savefig.dpi)          )z   g      )      r   )rD   c   G   r    r   r   r$   r%   zinterpolation nonenearestzinterpolation nearestN)r   r*   arrayr.   r(   r)   r/   	set_title)Xr0   ax1ax2s       r4   test_interp_nearest_vs_nonerM   (   s      H]
>>>???3 ==---029;	C 	C 	CAl1a((OC#sJJqJ'''MM&'''JJq	J***MM)*****r6   suppressCompositeFfigimagepng)r:   c                 x   t          j        dd          }| |_        t          j        t          j        d          dz  t          j        d          dz            \  }}t          j        |dz  |dz  z   ||z  z
            }t          j        d|dz  z  d|dz  z  z             }||dz  z   }|                    |d	d	d
           |                    |d d dd d f         d	dd
           |                    |d d d d df         dd	d
           |                    |d d dd d df         ddd
           d S )Nr   r   d   figsizedpig      Y@r      2   r   r   lower)xoyoorigin)r(   figurerN   r*   ix_arangesinrO   )rN   r0   xyzcr3   s          r4   test_figimagerf   :   sJ    *V
-
-
-C-C6")C..5(")C..3*>??DAq
q!tad{QqS !!A
r!Q$wAqD !!A
ac'CLLqL111LLTTrT111W!GL<<<LLQQQ"W#!GL<<<LLTTrT44R4ZSSLAAAAAr6   c                     t          j                    \  } }|                    g d           t          j                    }|                     |           |                    d           t          j        |           d S )N)r   r   r#   r   )r(   r)   plotioBytesIOsavefigseekimread)r0   axbuffers      r4   test_image_python_iorp   J   si    lnnGCGGIIIZ\\FKK
KKNNNJvr6   z!img_size, fig_size, interpolation))r   r   hanning)r   r   rG   )r   
   rG   )r#   333333@rq   )r#   g333333"@rG   c                 *   t           j                            d           t          j        d         }t           j                            t          ||z            t          ||z                      }| |fD ]}|                    ||           |                                 }|	                    g d           |
                    |d           |                                }|	                    g d           |
                    ||           d S )N!N,r<   r   r   r   r   autor%   )r*   randomseedr(   r   randintset_size_inchesr)   set_positionr/   )	fig_testfig_refimg_sizefig_sizer&   rV   Ar0   rn   s	            r4   test_imshow_antialiasedr   S   s     INN8
,}
%C
	s3>**Ch,?,?@@A'" 0 0Hh////					BOOLLL!!!IIavI&&&					BOOLLL!!!IIa}I-----r6   c                    t           j                            d           t          j        d         }t           j                            t          |dz            t          |dz                      }| |fD ]}|                    dd           |                                 }|	                    |d           |
                    ddg           |                    ddg           |                                }|	                    |d	           |
                    ddg           |                    ddg           d S )
Nru   r<   r#   rs   rw   r%   rr   rW   rG   )r*   rx   ry   r(   r   rz   r{   r|   r)   r/   set_xlimset_ylim)r~   r   rV   r   r0   rn   s         r4   test_imshow_zoomr   k   s&    INN8
,}
%C
	s37||Sq\\22A'" & &C%%%%					BIIavI&&&KKRKKR					BIIayI)))KKRKKRr6   c                 Z   t          j        d           t          t                    j        dz  }t          t                    j        dz  }|                     d          }|d                             t          j        |                     |d                             t          j        |                     |                    d          }|d                             t          j
        |                     |d                             t          j
        |                     d S )Ndefault%baseline_images/pngsuite/basn3p04.png%baseline_images/test_image/uint16.tifr   r   r   )r   user   __file__parentr)   r/   r   openr(   rm   )r~   r   png_path	tiff_pathaxss        r4   test_imshow_pilr   }   s    	IiH~~$'NNHX%(OOI


A

CFMM%*X&&'''FMM%*Y''(((


1

CFMM#*X&&'''FMM#*Y''(((((r6   c                     t          j        t          j                            t          j                            t                    ddd                    } | j        t          j	        k    sJ t          j
        |           dk    sJ d S )Nbaseline_images
test_imagez
uint16.tif )r(   rm   ospathjoindirnamer   r!   r*   uint16sumr3   s    r4   test_imread_pil_uint16r      st    
*RW\\"'//(";";&lD D E EC9	!!!!6#;;)######r6   c                      t          j        t          t                    j        dz            } | j        t          j        k    sJ t          j        |           dk    sJ d S )Nr   r   )	r(   rm   r   r   r   r!   r*   r   r   r   s    r4   test_imread_fspathr      s[    
*X GGI IC9	!!!!6#;;)######r6   fmt)rP   jpgjpegtiffc                 P   | dv}t           j                            d           t           j                            dd          }t	          j                    }t          j        ||| d           t	          j                    }t          j        ||| d           |                    d           t          j	        ||           }|                    d           t          j	        ||           }|j
        ddd	|z   fk    sJ |j
        ddd	|z   fk    sJ t          ||           d S )
N)r   r   r   i@  r   )formatrV   rS   r   r   r#   )r*   rx   ry   rz   ri   rj   r(   imsaverl   rm   shaper   )r   	has_alphadata	buff_dpi1buff_dpi100arr_dpi1
arr_dpi100s          r4   test_imsaver      s"   ?*I INN1 9>>$""D
IJy$s2222*,,KJ{D#6666NN1z)C000HQK444J>dAq9}55555aY77777x,,,,,r6   r\   upperrY   c                     t          j                    }t          j        dd          }t	          j        ||d|            d S )N)rr   rr   r   r.   r    rP   )arrr   r\   )ri   rj   r*   r+   mimager   )r\   bufresults      r4   test_imsave_rgba_originr      sB     *,,CXk111F
M#6%??????r6   )rP   r8   psepsr9   c                     t          j        t          t          j                  t          j        ddgg          |            d S )Nr   r   r   )r(   r   r   r   devnullr*   rH   )r   s    r4   test_imsave_fspathr      s9    JtBJAq6(!3!3C@@@@@@r6   c                     t           j                            d           dD ]} t           j                            ddd          }t	          j                    }t          j        ||| d           |                    d           t          j	        |          }d|z  
                    d	          }| d
k    r|d d d         }d|z  
                    d	          }t          ||           d S )Nr   )rY   r      r   rP   )r\   r   r   rD   r.   rY   r]   )r*   rx   ry   rz   ri   rj   r(   r   rl   rm   astyper   )r\   r   buffarr_bufs       r4   test_imsave_color_alphar      s     INN1$ * *y~~b"a((z||
4fU;;;;		!*T""
 D  ))W":Dw;&&w//4))))!* *r6   c                     ddl m}  t          j                    } |             }|                    dd           t          j        |ddgddggdd	|i
           t          j        |          }|j	        d         dk    sJ d S )Nr   )PngInfoSoftwaretestr   r   r#   rP   pnginfor   
pil_kwargs)
PIL.PngImagePluginr   ri   rj   add_textr(   r   r   r   info)r   r   r   ims       r4   test_imsave_pil_kwargs_pngr      s    ******
*,,CgiiGZ(((JsaVaV$G(<> > > >	CB7:&((((((r6   c                  6   ddl m t          j                    } ddi}t	          j        | ddgddggd|	           t          |          dk    sJ t          j        |           }fd
|j	        
                                D             }|d         dk    sJ d S )Nr   )TAGS_V2descriptionz
test imager   r   r#   r   r   c                 2    i | ]\  }}|         j         |S  )name).0kvTAGSs      r4   
<dictcomp>z/test_imsave_pil_kwargs_tiff.<locals>.<dictcomp>   s%    :::1DGL!:::r6   ImageDescription)PIL.TiffTagsr   ri   rj   r(   r   lenr   r   tag_v2items)r   r   r   tagsr   s       @r4   test_imsave_pil_kwargs_tiffr      s    ,,,,,,
*,,C.JJsaVaV$V
KKKKz??a	CB::::	(9(9:::D"#|333333r6   image_alphac                  L   t           j                            d           t           j                            dd          } t	          j        dd          \  }\  }}}|                    | dd           |                    | dd           |                    | dd	           d S )
Nr      r   r#         ?r$   )alphar&         ?rG   )r*   rx   ry   rz   r(   r)   r/   )Zr0   rK   rL   ax3s        r4   test_image_alphar      s    INN1
	q!A<1--C#sCJJq6J222JJq6J222JJq9J55555r6   mpl20c                    t           j                            d           t           j                            ddd          }t          j        |dz            }|                     dd          \  \  }}\  }}|                    |d           |                    |d           |                    |d           |                    |d           t          j        |t          j        d	          fd
          }t          j        |t          j	        d	dt           j                  fd
          }	|                    dd          \  \  }}\  }}d|d d d d df<   |                    |           d|d d d d df<   |                    |           d|	d d d d df<   |                    |	           d|	d d d d df<   |                    |	           d S )Nru   r   r#   rD   r   r   r         ?)r   r   r   )axisrC      )
r*   rx   ry   rz   r.   r)   r/   concatenater,   full)
r~   r   rgbfrgbuax0rK   rL   r   rgbafrgbaus
             r4   test_imshow_alphar     s    INN89>>!Q""D8D3JD'00A66Zc3#sJJt3JJJt4J   JJt3JJJt4J   ND"')"4"45A>>>END"')S"("C"CD1MMME&//155Zc3#sE!!!QQQ'NJJuE!!!QQQ'NJJuE!!!QQQ'NJJuE!!!QQQ'NJJur6   c                  Z   ddl m}  t          j                    \  }}|                    t          j        d                              dd          d          }d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          d	k    sJ d
\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          J |                                 |                    t          j        d                              dd          d          }d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          d	k    sJ t          j                    \  }}|                    t          j        d                              dd          g d          }d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          dk    sJ d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          J d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          J t                                          d                              d          }	|                    t          j        d                              dd          |	|j        z             }d\  }}|j        	                    ||g          \  }} | d|j
        ||          }|                    |          d	k    sJ d S )Nr   
MouseEventrS   rr   r   )r\   r   r   motion_notify_event,   )g333333$@r   rY   )r   r   r   r   extent)      ?r  7   )r   r  ){Gz?g{Gzr   r   	transform)r#   rr   )matplotlib.backend_basesr   r(   r)   r/   r*   r`   reshape	transDatar  canvasget_cursor_dataclearr   scalerotate)
r   r0   rn   r   rb   rc   xdispydispeventtranss
             r4   test_cursor_datar    s   333333lnnGC	29S>>))"b11'	B	BBDAq<))1a&11LE5J,cj%GGEe$$**** DAq<))1a&11LE5J,cj%GGEe$$,,, HHJJJ	29S>>))"b11'	B	BBDAq<))1a&11LE5J,cj%GGEe$$****lnnGC	29S>>))"b11:J:J:J	K	KBDAq<))1a&11LE5J,cj%GGEe$$**** DAq<))1a&11LE5J,cj%GGEe$$,,,DAq<))1a&11LE5J,cj%GGEe$$,,, JJQ&&s++E	29S>>))"b11"R\1 
 
3 
3BDAq<))1a&11LE5J,cj%GGEe$$******r6   zxy, datar         ?r   g      @r   g      !@g      #@g      @U   r]   c                    ddl m} t          j        g d          }t          j        g d          }|t          j        d d f         dz  |d d t          j        f         dz  z   }t          j                    \  }}t          ||                                |	                                |                                |	                                f          }|
                    |||           |                    |           |                    |                                dz
  |	                                           |                    |                                dz
  |	                                           |j                            |           \  }	}
 |d|j        |	|
          }|                    |          |k    sJ |                    |          |f            d S )Nr   r   )r   r   r   	   r   )r   r   r   r#   r   r   r   r   )r  r   r*   rH   newaxisr(   r)   r   minmaxset_data	add_imager   r   r  r  r	  r
  )xyr   r   rb   rc   rd   r0   rn   r   r  r  r  s               r4   test_cursor_data_nonuniformr  c  s    433333 	!!!""A
!!A	"*aaa-!a2:.11AlnnGC	QUUWWaeeggquuww$H	I	I	IBKK1aLLKK!QUUWW%%%KK!QUUWW%%%<))"--LE5J,cj%GGEe$$,,,r/A/A%/H/H$.O,,,,,r6   z
data, texti'  i'  z[10001.000]grh|?g/$?z[0.123]r   []g     ?z[1.0000000000000000]z[-1.0]z[0.00]c                 (   ddl m} t          j                    \  }}|                    |           }|j                            ddg          \  }} |d|j        ||          }|                    |	                    |                    |k    sJ d S )Nr   r   r   )
r  r   r(   r)   r/   r  r  r	  format_cursor_datar
  )	r   textr   r0   rn   r   r  r  r  s	            r4   test_format_cursor_datar"    s     433333lnnGC	4B<))1a&11LE5J,cj%GGE  !3!3E!:!:;;tCCCCCCr6   
image_clip)r   c                      ddgddgg} t          j                    \  }}|                    |           }t          j        dd|j                  }|                    |           d S )Nr   r   r#   r   r   r   )radiusr  )r(   r)   r/   r   Circler  set_clip_path)dr0   rn   r   patchs        r4   test_image_clipr+    sd    
Q!QAlnnGC	1BN6!r|DDDEUr6   image_cliprectc                      t          j                    \  } }ddgddgg}|                    |d          }t          j        ddd|j        j                  }|                    |           d S )	Nr   r   r#   r   r   r   r   r   r   r   r   )r  widthheightr  )r(   r)   r/   r   	Rectangleaxesr  r(  )r0   rn   r)  r   rects        r4   test_image_cliprectr5    sz    lnnGC
Q!QA	1\	*	*B10AC C CDTr6   c                    t          j        d                              d          }|                                }|                    |d d d d df         dd           |                    dd           |                    dd           |                                 }|                    |dd           |                    dd           |                    dd           d S )NrS   )rr   rr   r   r   r'   )r   r   r   r   )r&   r   r#   )r*   r`   r  r)   r/   r   r   )r~   r   r   rn   s       r4   test_imshow_10_10_1r7    s     )C..
 
 
-
-C					BIIc!!!QQQ'l*\IJJJKK1KK1					BIIcLIAAAKK1KK1r6   c                     t          j                    \  } }t          j        d                              d          }t          j        t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )N   )rr   rr   r   	r(   r)   r*   r`   r  pytestraises	TypeErrorr/   r0   rn   r   s      r4   test_imshow_10_10_2r?        lnnGC
)C..
 
 
-
-C	y	!	!  
		#                    A::A>A>c                     t          j                    \  } }t          j        d                              d          }t          j        t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )Ni  )rr   rr   r   r:  r>  s      r4   test_imshow_10_10_5rC    r@  rA  no_interpolation_originc                  >   t          j        d          \  } }|d                             t          j        d                              d          dd           |d                             t          j        d                              d          d	           d S )
Nr   r   rS   )r   rX   rY   r$   )r\   r&   r   r%   )r(   r)   r/   r*   r`   r  )r0   r   s     r4   test_no_interpolation_originrF    s    |AHCFMM")C..((11' &  ( ( (FMM")C..((11MHHHHHr6   image_shift)r   r:   c            	          d t          dd          D             } d}d}t          j                    \  }}|                    | t	          j                    d||ddf           |                    d           d S )	Nc                 H    g | ]fd t          dd          D             S )c                 &    g | ]}d |z  d z  z   S )r   r   )r   rb   rc   s     r4   
<listcomp>z/test_image_shift.<locals>.<listcomp>.<listcomp>  s%    555!AA555r6   r   rS   )range)r   rc   s    @r4   rK  z$test_image_shift.<locals>.<listcomp>  s6    MMM!5555uQ}}555MMMr6   r   rS   gMk&Agk&Ar$   )normr&   r   rw   )rL  r(   r)   r/   r	   LogNorm
set_aspect)imgDatatMintMaxr0   rn   s        r4   test_image_shiftrS    s    MMuQ}}MMMGDDlnnGCIIgFN,,FD!S)  + + +MM&r6   c                     t          j        ddg          } |                     g dd          }t          j        t          j        d          d                              dd	          }|                    |d
g ddd          }dx}}|                    | |g           |	                    | |g           |
                    g            |                    g            t          j                    }|                     |d           |                    d           t          j        |          }t#          |d d df                   \  }}}	}
t#          |d d df                   \  }}}	}
|dk    s
J d            d S )Nr   rU   rv   F)frameon      rW   r  r   rr   rZ  rr   r$   gray)r\   r   r&   cmapr   )r   r   r   )	facecolorr   r]   rS   z.Expected a non-green edge - but sadly, it was.)r(   r^   add_axesr*   tiler`   r  r/   r   r   
set_xticks
set_yticksri   rj   rk   rl   rm   r   )r0   rn   r   r   rb   rc   r   rgbas              r4   test_image_edgesrf    sv   
*aV
$
$
$C	lllE	2	2B729R=="%%--b!44D	40B0B0B!'f 
 
6 
6B IAKK!QKK!QMM"MM"
*,,CKKyK)))HHQKKK	CBR1XJAq!QR2YJAq!Q888E88888r6   image_composite_background)r   r   c                  >   t          j                    \  } }t          j        d                              dd          }|                    |g d           |                    |g d           |                    d           |                    ddg           d S )	NrW  r   r#   )r   r   rX  r   r   )r   r   rX  r   )r   r   r   r   r   )r(   r)   r*   r`   r  r/   set_facecolorr   r>  s      r4   test_image_composite_backgroundrj    s     lnnGC
)B--

1
%
%CIIc---I(((IIc---I(((^$$$KKBr6   image_composite_alphac                     t          j                    \  } }t          j        d          }d|dddddf<   t          j        t          j        ddd          t          j        ddd          ddd         f          |dddddf<   t          j        d	          }d|dddddf<   d|dddddf<   t          j        t          j        ddd          t          j        ddd          ddd         f          ddt          j        f         |dddddf<   |                    |g d
d           |                    |g dd           |                    |g d           |                    |g d           |                    |g dd           |                    |g dd           |                    d           |	                    ddg           |
                    ddg           dS )z{
    Tests that the alpha value is recognized and correctly applied in the
    process of compositing images together.
    )      r   r   Nr   皙?皙?r]   r#   )rn  rm  r   )r   r   r   r   333333?)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   r`   r  r/   ri  r   r   )r0   rn   r   arr2s       r4   test_image_composite_alphart    s    lnnGC
(;

CC111aL>	1c3		1a!5!5ddd!;<> >C111aL8K  DDAAAqMDAAAqMN	1c3		1a!5!5ddd!;<> >>?aamMDAAAqMIIc,,,cI222IIc,,,cI222IIc,,,I'''IId<<<I(((IId<<<sI333IId<<<sI333^$$$KKAKKAr6   c                    t          j        d                              d          }| |fD ]}|                                }|                    |t
          j                            g d          |j        f           |                    |t
          j                            g d          |j        f           d|_	        d S )Nr  r#   r#   )r%  r   r   )r   r   )	clip_path)r/  r   r   )r   r   T)
r*   r`   r  add_subplotr/   mplr   r   r  rN   )r~   r   tr0   rn   s        r4   #test_clip_path_disables_compositingr}     s    
	!V$$A'" / /__
		!.F.F.F G G " .	 	/ 	/ 	/
		!.F.F.F G G " .	 	/ 	/ 	/ 	/ $Gr6   rasterize_10dpi)r:   r   r   c                  X   t          j        ddgddgg          } t          j        ddd          \  }}|d                             |            |d                             ddgddgdd	
           |d                             dd           |d                             ddgddgd           |d                             dd           |D ]N}|                    g            |                    g            |j	        d d          
                    d           Odt          d<   d S )Nr   r   r#   r   )r#   r   rU  r   g      4@T)	linewidth
rasterizedrw  )r]   r   xlimylim)r  Frr   r<   )r*   asarrayr(   r)   r/   rh   setr`  ra  spinesset_visibler   )r3   r0   r   rn   s       r4   test_rasterize_dpir  ,  s4    *q!fq!f%
&
&C|Aq&111HCFMM#FKKAA#$K???FJJFJ)))FKKAA#K...FJJFJ)))  ( (
b
b
	!!!  '''' H]r6   bbox_image_invertedc            	         t          j        d                              d          } t          j                    \  }}t          t          t          ddgddgg          |j                  d          }|	                    |            |
                    d           |                    dd           |                    dd           |                    |           t          j        d          } t          t          t          dd	gd
dgg          |                                j                  d          }|	                    |            |
                    d           |                    |           d S )NrS   rr   rr   r   rG   r%   Frr   rp  皙?rq  r  )r*   r`   r  r(   r)   r   r   r   r  r  set_clip_onr   r   
add_artistidentity
get_figuretransFigure)r
   r0   rn   bbox_ims       r4   test_bbox_image_invertedr  K  sf    IcNN""8,,ElnnGCsCj1a&122BLAA! ! !G UKK3KK3MM'KOOEsCj3+-F(G(G(*(CE E&/1 1 1G UMM'r6   c                     t          j        g dg dg dg dg          } t          j        dd          \  }}|                    g d           |                    d	d
           |                    d	d
           |                    | g dd          }|j        	                                 |j        j
        }|                    |          }t          |                                ddgddgg           t          j        dd          \  }}|                    g d           |                    d
d           |                    d	d
           |                    | g dd|j                  }|j        	                                 |j        j
        }|                    |          }t          |                                ddgddgg           d S )N)r  r   r   r   )rp  g?r   皙?)rr  rq          r  )ffffff??r  rr  r  rS   rT   rv   r   r   )r  r  r  r  rG   )r   r&   i  r9  i  i  r   )r   r&   r  )r*   rH   r(   r)   r}   r   r   r/   r	  drawrendererget_window_extentr   
get_points	transAxes)r   r0   rn   im_objr  im_bboxs         r4   $test_get_window_extent_for_AxisImager  d  s   
 
***,A,A,A''')=)=)=? 
@ 
@Bl8555GCOOLLL!!!KK1KK1YY
'''y  B BF JOOz"H&&x00Gw))++sCj3*-EFFFl8555GCOOLLL!!!KK1KK1YY
'''y,     F JOOz"H&&x00Gw))++sCj3*-EFFFFFr6   zzoom_and_clip_upper_origin.pngc                     t          j        d          } |                     d          } t          j                    \  }}|                    |            |                    dd           |                    dd           d S )NrS   r         @      )r*   r`   r  r(   r)   r/   r   r   )r
   r0   rn   s      r4   test_zoom_and_clip_upper_originr    sq     IcNNEMM(##ElnnGCIIeKKTKKcr6   c                  t    t          j                    } t          |           }|                    d           d S )NBlues)r(   gcar   set_cmaprn   r   s     r4   test_nonuniformimage_setcmapr    s2    	B			BKKr6   c                      t          j                    } t          |           }|                    t          j                               d S N)r(   r  r   set_norm	Normalizer  s     r4   test_nonuniformimage_setnormr    s8    	B			BKK     r6   c                  d   t          j        dd          } t          d          D ]"}t          j        ddd          dz  | |d d f<   #t	          j        dd          }|                    |                                            t          j	                    \  }}|
                    |           d S )	Nr  r.   r    rr   r  r   rD   L)r*   r,   rL  linspacer   newputdataflattenr(   r)   r/   )imdir   r0   rn   s        r4   test_jpeg_2dr    s    
'('
*
*
*C2YY 4 4KS"--3AqqqD			3	!	!BJJs{{}}lnnGCIIbMMMMMr6   c                  
   t          j        dd           t          j        dt                    } t          j        ddd          | d<   t          j        |            t          j                    }t          j	        |d	d
d           |
                    d           t          j        |          }t          |                    d                    }d|cxk    rdk    sn J |                    d          }|dk    sJ d S )Nr/  ,  rT   )r  r  r   r    r  r   r"   redr   )r]  r   rV   r            r%  )   r   r   )r(   r^   r*   r+   floatr  rO   ri   rj   rk   rl   r   r   r   	getcolorsgetpixel)r   r   r
   
num_colorscorner_pixels        r4   test_jpeg_alphar    s    Jv3'''' 
-u	-	-	-BS#s++BvJL:<<DKe====IIaLLLJtE U__S))**J*##########>>&))L;&&&&&&r6   c                     t          j                    } t          |           }t          j        dt
                                        d          }|                    |           d|d<   |j        d         dk    s
J d            d S NrW  r    r   r#   #@r%  r   value changed)	r(   r  r   r*   r`   r  r  r  _Arn   r   rd   s      r4   test_axesimage_setdatar    sw    	B	2B
	"E"""**622AKKNNNAdG5;!_r6   c                     t          j                    } t          |           }t          j        dt
                                        d          }|                    |           d|d<   |j        d         dk    s
J d            d S r  )	r(   gcfr   r*   r`   r  r  r  r  )r0   r   rd   s      r4   test_figureimage_setdatar    sy    
'))C	S		B
	"E"""**622AKKNNNAdG5;!_r6   zimage_cls,x,y,a      @      @g      (@r  g      @)r#   r   c                 x   t          j                    } | |          }|                    |||           dx|d<   x|d<   |d<   |j        d         |j        d         cxk    r|j        d         cxk    rdk    sn J d            |                    |||                    g |j        dR                      d S )Nr  r   r%  r  r]   )r(   r  r  r  _Ax_Ayr  r   )	image_clsrb   rc   re  rn   r   s         r4   test_setdata_xyar    s     
B	2BKK1aAaD1Q4!D'5;"&)5555rvay5555A55555555KK1aii!'2//00000r6   c                     ddl m}  t          j                            d           t          j                            dd          }t          j        dd          \  }}|d                             |          }|d                             |          }t          j	        ||d                    t          j	        ||d                    t          j                    }t          j        |d           t          j        |                                          }|                     |          }d }|                    d	          D ]}	|	|	d
         }|	d
         |k    rJ d S )Nr   )ElementTreerr   r   r   )rn   r9   r   r
   r0  )	xml.etreer  r*   rx   ry   rz   r(   r)   
pcolormeshcolorbarri   rj   rk   getvalueparseiter)
r  r   r0   rn   p1p2r   treer0  r
   s
             r4   test_minimized_rasterizedr    sQ    &%%%%%INN19>>"b!!Dl1a  GC	A		$		B	A		$		BL1L1:<<DKU####:dmmoo&&DT""DE7##  ='NEEW~&& '	 r6   c                     t          t                    j        dz  } dt          j        dk    rdndz   |                                                                 z   }t          j        t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j                            |          5 }t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   zfile:win32z/// zPlease open the URLmatch)r   r   r   sysplatformresolveas_posixr;  r<  
ValueErrorr(   rm   urllibrequesturlopen)r   urlfiles      r4   test_load_from_urlr    sP   >> #JJD|w..eeB8\\^^$$&&'C 
z)>	?	?	?  
3              				$	$ 
4                 s$   6BBBC##C'*C'log_scale_imagec                      t          j        d          } d| d d d<   t          j                    \  }}|                    | g ddddd           |                    d	
           d S )Nr  r   r   )r   rS   r   rS   viridisr]   rw   )r   r\  vmaxvminaspectlog)yscale)r*   r+   r(   r)   r/   r  )r   r0   rn   s      r4   test_log_scale_imager    sx    
AAcccFlnnGCIIa(((yqr    FF%Fr6   rotate_imagec                     d} t          j        dd|           x}}t          j        ||          \  }}t          j        |dz  |dz  z    dz            dt           j        z  z  }t          j        |dz
  dz  dz  |dz
  dz  dz  z    dz            dt           j        z  dz  dz  z  }||z
  }t          j        dd          \  }}	|	                    |dd	d
g dd          }
t                      	                    d          |	j
        z   }|
                    |           |
                                \  }}}}|	                    |||||g|||||gdd|           |	                    dd           |	                    dd           d S )Nr        r  r   r   r  r   r$   r  rY   )r   r   T)r&   r\  r\   r   clip_on   zr--r#   )lwr  r   r   r   )r*   r`   meshgridexppir(   r)   r/   r   
rotate_degr  set_transform
get_extentrh   r   r   )deltarb   rc   rJ   YZ1Z2r   r0   rK   im1trans_data2x1x2y1y2s                   r4   test_rotate_imager    s   EIdC'''A;q!DAq	!Q$A+"	#	#q25y	1B
&QUcMA%!a%3(::;a?
@
@ru9s?S "B
RA|Aq!!HC
**Qf9#*NND  : :C **''++cm;Kk""" ^^%%NBBHHb"b"b!BBB#71"  $ $ $ LLALLAr6   c                     t          j                    } t          j        d          }t	          j        | |d           |                     d           t	          j        |           }|j        d d         |j        k    sJ d S )N)i  iA  rP   r   r   r   )	ri   rj   r*   r+   r(   r   rl   rm   r   )r   r   r3   s      r4   test_image_preserve_sizer  7  st    :<<D	*		BJtR&&&&IIaLLL
*T

C9RaR=BH$$$$$$r6   c                  ^   d} t          j        | t                    }t          j        | | fd          }|                    d          }|                                 |                    |ddd           t          j	                    }|
                    |d	
           |                    d           t          j        |          }|j        dk    sJ t          t          j        |d d d d df         t                     t          j        | t                     d d d                    d S )N   F)rU   rV  )r  r  r   r   rG   rY   rw   )r&   r\   r  r   )rV   r   )r  r  r   r]   )r*   r  r  r(   r^   r^  set_axis_offr/   ri   rj   rk   rl   rm   r   r   r  bool)nr   r0   rn   r   r3   s         r4   test_image_preserve_size2r  C  s   	A;q%  D
*aVU
3
3
3C	*	+	+BOOIId)GFIKKK:<<DKK!KIIaLLL
*T

C9	!!!!rz#aaaAg,55{1d++DDbD13 3 3 3 3r6   zmask_image_over_under.pngr   )r   tolc            
         d} t          j        dd|           x}}t          j        ||          \  }}t          j        |dz  |dz  z    dz            dt           j        z  z  }t          j        |dz
  dz  dz  |dz
  dz  dz  z    dz            dt           j        z  dz  dz  z  }d||z
  z  }t
          j        j                            d	d
d          }t           j	        
                    |dk    |          }	t          j        dd          \  }
\  }}|                    |	d|t          j        ddd          dg d          }|                    d           |
                    |dd|d           |                    |	d|t          j        g ddd          dg d          }|                    d           |
                    |ddd|d            d S )!Ng?r   r  r   r   r  r   rr   rb  rc  rd  overunderbad333333?r'   g      r   F)r  r  cliprY   )r  r#   r  r#   )r&   r\  rM  r\   r   zGreen=low, Red=high, Blue=badboth
horizontal)extendorientationrn   r  rG   )r]   r  gɿr   r  r   r   r  )ncolorsr&  zWith BoundaryNormproportional)r)  spacingr*  rn   r  )r*   r`   r  r  r  r(   cmr[  with_extremesmamasked_wherer)   r/   r	   r  rI   r  BoundaryNorm)r  rb   rc   rJ   r  r  r  r   paletteZmr0   rK   rL   r   s                 r4   test_mask_image_over_underr5  W  s    EIdC'''A;q!DAq	!Q$A+"	#	#q25y	1B
&QUcMA%!a%3(::;a?
@
@ru9s?S "B
BGAfk''S'EEG			AGQ	'	'Bl1a((OC#s	Bj )t#EJJJ">>> 
 
; 
;B MM1222LLF  $ $ $ 
Bi ,-M-M-M58uF F F">>>	 
 
; 
;B
 MM%&&&LLFN)c"  > > > > >r6   
mask_imagec                     t          j        dd          \  } \  }}t          j        d          }t          j        |ddddf<   |                    |d           t          j        dt                    }d|ddddf<   t          j        	                    t          j        dt          j
                  |          }|                    |d           d S )Nr   r   r   rG   r%   r    T)r(   r)   r*   r,   nanr/   r+   r  r0  masked_arrayr   )r0   rK   rL   r   s       r4   test_mask_imager:  w  s     l1a((OC#s
A&Aac1Q3hKJJq	J***
t$$$AAac1Q3hK
276;;;Q??AJJq	J*****r6   c                      t          j        dt           j                  } t          j                    \  }}|                    |            |j                                         d S )NrR   )r*   r   r8  r(   r)   r/   r	  	draw_idle)r   r0   rn   s      r4   test_mask_image_allr=    sM    7626""DlnnGCIIdOOOJr6   zimshow_endianess.pngc                  r   t          j        d          } t          j        | |           \  }}t          j        |dz
  |dz
            }t	          j        dd          \  }\  }}t          ddd          } |j        |                    d	          fi |  |j        |                    d
          fi | d S )Nrr   r   r   r   rY   rG   r  )r\   r&   r\  z<f8z>f8)	r*   r`   r  hypotr(   r)   dictr/   r   )rb   rJ   r  r   r0   rK   rL   kwargss           r4   test_imshow_endianessrB    s    
	"A;q!DAq
QAAl1a((OC#s		JJJFCJqxx))&)))CJqxx))&)))))r6   imshow_masked_interpolationx86_64r  )r  r   r   c                  L   t           j        d                             ddd          } d}t          j        d||z  dz
  	          }t          j        ||z  t          
                              ||          }d|d<   d|d<   t
          j	        |d<   t          j
        |                              d          }d|d<   t
          j                            ||          }t          j        dd          \  }}t!          t"          j                  }|                    d           |                    d           t)          ||                                          D ]H\  }}	|	                    |           |	                    ||| |           |	                    d           Id S )Nr  rb  rd  r   r!  rW   r   r   r  r  r    r]   r   g     j@)rX  r   )rX  rX  r  T)r   rX  r#   r   rw   antialiased)rM  r\  r&   off)r{  	colormapsr/  r	   r  r*   r`   r  r  inf
zeros_liker   r0  r9  r(   r)   sortedr   	_interpd_removezipravelrI   r/   r   )
r\  Nr  r   maskr0   ax_gridinterpsinterprn   s
             r4    test_imshow_masked_interpolationrV    s   
 =#11s#31OOD
Aaac!e,,,A9QqS&&&..q!44DDJ DK 6DL=%%f--DDK5dD))D<1%%LCV%&&GNN6NN=!!!'7==??33  

V
		$QT	@@@
 r6   c                  N    t          j        ddgdt          j        gg           d S )Nr   r   r#   )r(   r/   r*   r8  r   r6   r4   test_imshow_no_warn_invalidrX    s'    JABF$%%%%%r6   r!   c                 6    g | ]}t          j        |          S r   )r*   r!   )r   ss     r4   rK  rK    s     BBBabhqkkBBBr6   zu2 u4 i2 i4 i8 f4 f8c                 V   t          j        d|                               d          }| j        dk    r|dz  }|dk     }|dk    }| j        dk    r|dz  }t	          j                    \  }}|                    |                                          }||         dk                                    sJ | j        dk    r4||         d	k                                    sJ |j	        j        dk    sJ d S ||         dk                                    sJ |j	        t           j
        k    sJ d S )
Nr  r    )rr   rr   r#   urr   r   rD   fr   )r*   r`   r  kindr(   r)   r/   	get_arrayallr!   r.   )r!   r   too_lowtoo_high_rn   outs          r4   $test_imshow_clips_rgb_to_valid_rangere    s4    )Cu
%
%
%
-
-k
:
:CzSr	AgGSyHzSCiLNNEAr
))C..
"
"
$
$CLA""$$$$$zSH"'')))))y~$$$$$$H$))+++++yBH$$$$$$r6   zimshow_flatfield.pngc                      t          j                    \  } }|                    t          j        d          d          }|                    dd           d S )Nr   rG   r%   r   r  )r(   r)   r/   r*   r,   set_climr0   rn   r   s      r4   test_imshow_flatfieldri    sH    lnnGC	276??)	<	<BKKCr6   zimshow_bignumbers.pngc                      dt           d<   t          j                    \  } }t          j        g dg dgt          j                  }|                    |          }|                    dd           d S )NrG   image.interpolation)r   r   g   mB)r#   r   r   r    r   r   )r   r(   r)   r*   rH   uint64r/   rg  r0   rn   r3   pcs       r4   test_imshow_bignumbersro    sj    &/H"# lnnGC
(LLL))),BI
>
>
>C	3BKK1r6   zimshow_bignumbers_real.pngc                      dt           d<   t          j                    \  } }t          j        g dg dg          }|                    |          }|                    dd           d S )NrG   rk  )r  r   gMD)r  r   r  r   r   )r   r(   r)   r*   rH   r/   rg  rm  s       r4   test_imshow_bignumbers_realrq    se     '0H"# lnnGC
(OOO\\\2
3
3C	3BKK1r6   	make_normc                  *    t          j        d          S Nr   )r	   
SymLogNormr   r6   r4   <lambda>rv    s    Vq!! r6   c                  *    t          j        d          S rt  )r	   	PowerNormr   r6   r4   rv  rv     s    Va   r6   c                    t          j                    \  }}t          j        t          d          5  |                    g g |                       }d d d            n# 1 swxY w Y   |                    g d           |j                                         t          j	        t                    5  |                    |j                                                   d d d            d S # 1 swxY w Y   d S )Nz.Attempting to set identical low and high xlimsr  rM  )r   r{  r   )r(   r)   r;  warnsUserWarningr/   
set_extentr	  r  r<  RuntimeError
make_imageget_renderer)rr  r0   rn   r   s       r4   test_empty_imshowr    sb    lnnGC	kL
N 
N 
N / /YYt))++Y../ / / / / / / / / / / / / / / MM...!!!JOO	|	$	$ 1 1
cj--//0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s#   !AA#&A#3-C--C14C1c                      t          j                    \  } }|                    t          j        dt          j                             | j                                         d S )Nrv  r    )r(   r)   r/   r*   r+   float16r	  r  r0   rn   s     r4   test_imshow_float16r    sL    lnnGCIIbhvRZ000111JOOr6   c                     t          j                    \  } }|                    t          j        dt          j                             t          j        t          j        t          j        d          rt                      nt          j
        t                    5  | j                                         d d d            d S # 1 swxY w Y   d S )Nrv  r    equiv)r(   r)   r/   r*   r+   
longdoublecan_castfloat64r   r;  r|  r}  r	  r  r  s     r4   test_imshow_float128r    s    lnnGCIIbhvR]333444R]BJHH ))+++|K((  	
                 s   CC	Cc                      t          j                    \  } }|                    t          j        ddgddggt
                               d S )NTFr    )r(   r)   r/   r*   rH   r  r  s     r4   test_imshow_boolr    sE    lnnGCIIbhut}5TBBBCCCCCr6   c                      t          j                    \  } }|                    t          j        dt          j                             | j                                         d S )Nr  )r(   r)   r/   r*   r   r8  r	  r  r  s     r4   test_full_invalidr  "  sI    lnnGCIIbgh''(((JOOr6   zfmt,counted)r   s    colorimage)r9   s   <imagezcomposite_image,count)Tr   )Fr   c                 N   t          j        t          j        ddd          t          j        ddd                    \  }}t          j        |dz            }t	          j                    \  }}|                    dd           |                    |g d           |                    |d d d	         g d
           |t          j        d<   t          j
                    }	|                    |	|            |	                                                    |          |k    sJ d S )Nr{  r   r   r   r   r#   r   r   r   r   r   r]   )r   r#   r   r   zimage.composite_imager   )r*   r  r`   ra   r(   r)   r   r/   r   ri   rj   rk   r  count)
r   countedcomposite_imager  rJ   r  r   r0   rn   r   s
             r4   test_compositer  )  s    ;ryQ**BIb!Q,?,?@@DAq
qAvAlnnGCKK1IIaI%%%IIa"glllI+++,;CL()
*,,CKKCK   <<>>((E111111r6   c                     t          j                    \  } }|                    dggd           |                                 |                                 |                                |                                cxk    rdk    sn J d S )Nr   r  r   rw  )r(   r)   r/   relim	autoscaleget_xlimget_ylimr  s     r4   
test_relimr  <  s    lnnGCIIseLI)))HHJJJLLNNN;;==BKKMM3333V33333333r6   c                     t          j                    \  } }|                                 |                    ddgddggdddd          }|                    dd           | j                                         t          j        | j        	                                          d	d d
f         dk    
                                sJ d S )Nr   rw   rY  r[  F)r  r   r\  r  rw  r  .r#   )r(   r)   r  r/   r  r	  r  r*   rH   buffer_rgbar`  rh  s      r4   test_unclippedr  D  s    lnnGCOO	QFQF#F;M 
 
/ 
/BFFVF$$$JOO HSZ++--..sBQBw71<AACCCCCCCr6   c                     t          j        d          \  } }|D ]}|                                 |d                             ddgddggdd          }|                    d            |                    |d         j                   t          j                    }| 	                    |d	           h |
                                d
hk    sJ |d                             d           t          j                    }| 	                    |d	           |
                                |
                                k    sJ d S )Nr   r   r   r#   rw   r  )r  r   rgbar   rD   )r]   r   )r  )r(   r)   r  r/   r(  set_clip_boxbboxri   rj   rk   r  r  )r0   r   rn   r   
buf_before	buf_afters         r4   test_respects_bboxr  P  s8   |AHC  
	QAA'|	L	LBT OOCFK   JKK
6K***#Z  ""#v----FJJGJ
IKK	&K)))  I$6$6$8$8888888r6   c                     t          j                    \  } }|                    t          j        d                    }t          j                            dgdg          }|                    |          dk    sJ t          j                            dgdg          }|                    |          dk    sJ t          j        }|                    |          dk    sJ d S )	Nr   r   TrR  r  Fz[0]z[nan])	r(   r)   r/   r*   r+   r0  r9  r   r8  )r0   rn   r   r   s       r4   test_image_cursor_formattingr  b  s    lnnGC	28F##	$	$B5qc//D  &&$....5qc00D  &&%////6D  &&'111111r6   c                    t          j        dd          }t          j        ||          \  }}t          j        d|dz
  dz  z  |dz
  z             }||                                z  }t
          j        d         }|                                 }|                    |||d	           |                                } | t          j
                    |                    }	||	d
<   |                    |	d           dS )zPer-pixel alpha channel test.r   r   r  r   r   g[(\?r  rG   )r   r\  r&   ).r]   r%   N)r*   r  r  r  r  r{  rI  rz  r/   r	   r  )
r~   r   rb   xxyyzzr   r\  rn   r  s
             r4   test_image_array_alphar  q  s     	AqA[AFB	SQ'2=9	:	:BME=#D					BIIbD	IBBB					B4" ""2&&''DDMIId)I,,,,,r6   c                      t          j        t          d          5  t          j        t          j        d          ddg           d d d            d S # 1 swxY w Y   d S )Nzalpha must be a float, two-dr  rR   r   r   )r;  r<  r=  r(   r/   r*   r+   r   r6   r4   !test_image_array_alpha_validationr    s    	y(F	G	G	G 3 3
28F##Aq622223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   +AAAc                     t          t          j        d                   } |                     d           t	          j        dd          }|                    g d          }t          j        g dgt          	          }|
                    |d
| dd          }|                    d           |j                                         |                    |j        j                  d         d         }|                    |                    |dggdz  z  j                                                            dz                      t*                    }t          j        ||k              sJ d S )Nautumn_r	lightgrey)color)gffffff?rp  rS   rT   rv   )r]   r]   r]   r   r   r   r   +   O   _   B   r   r]   r]   r]   r   r   r   "   r    rw   r   )r  r\  r  r  rH  r   rr   rD   )r   r{  rI  	set_underr(   r^   r^  r*   rH   r  r/   r   r	  r  r  r  r\  rM  TrP  r   r{   r`  )r\  r0   rn   r   r   
from_imagedirect_computations          r4   test_exact_vminr    sL   j)**DNNN%%% *ZS
1
1
1C	lll	#	#B8	M	M	MN  D
 
4T	D	DBGGENNNJOO sz233A6q9J 	1#,/55778899C?fSkk 
 6* 223333333r6   image_placementc                  t   t          j                    \  } }|                    g dg ddd           t          j                            d           |                    t          j                            dd          dd	d
dd           |                    dd           |	                    dd           dS )zK
    The red box should line up exactly with the outside of the image.
    )r   r   r   r   r   )r   r   r   r   r   rb  rp  )r  r  ru   r   r  r  r$   r]   r   )r\  r   r&   r  r  gro  N)
r(   r)   rh   r*   rx   ry   r/   randnr   r   r  s     r4   test_image_placementr    s     lnnGCGGOOO___CCG@@@INN8IIbioob"%%GL"!  5 5 5KKeKKer6   c                   F     e Zd Zd Zd Z fdZd Zed             Z xZ	S )
QuantityNDc                 b    t          j        |                              |           }||_        |S r  )r*   r  viewunits)clsinput_arrayr  objs       r4   __new__zQuantityND.__new__  s+    j%%**3//	
r6   c                 2    t          |dd           | _        d S Nr  )getattrr  )selfr  s     r4   __array_finalize__zQuantityND.__array_finalize__  s    S'400


r6   c                     t          | dd           }t                                          |          }t          |t                    s|t	          ||          }|S r  )r  super__getitem__
isinstancer  )r  itemr  ret	__class__s       r4   r  zQuantityND.__getitem__  sV    gt,,gg!!$''c:&& 	)%*;S%((C
r6   c                    t          ||          }d|v rt          S t          |          dk    r6|d         }t          |dd          } |t          j        |          fi |}nIt          |          dk    r.|d         }|d         }	t          |dd          }
t          |	dd          }|
|n|
}
||
n|}|t          j        t          j        fv r|
|k    rt          |
}n|t          j        k    r|
 d| }ni|t          j	        k    r	|
 d| d	}nP|t          j
        t          j        t          j        t          j        t          j        t          j        fv rd }nt          S  ||                    t          j                  |	                    t          j                  fi |}nt          S |t          j        |          }nt'          ||          }|S )
Nrd  r   r   r  dimensionlessr   *z/())r  NotImplementedr   r*   r  addsubtractr  multiplydividegreatergreater_equalequal	not_equalless
less_equalr  ndarrayrH   r  )r  ufuncmethodinputsrA  funci0unitout_arri1u0u1s               r4   __array_ufunc__zQuantityND.__array_ufunc__  s   uf%%F??!!v;;!B2w88Dd2:b>>44V44GG[[ABBWo66BWo66BzrBzrB---88$$"+%%||r||")##~~~~~2:r'78R\7BM3 3 3 %%d2772:..
0C0CNNvNNGG!!<hw''GG $//Gr6   c                 @    |                      t          j                  S r  )r  r*   r  )r  s    r4   r   zQuantityND.v  s    yy$$$r6   )
__name__
__module____qualname__r  r  r  r  propertyr   __classcell__)r  s   @r4   r  r    s          
1 1 1    % % %N % % X% % % % %r6   r  c                     t          ddgd          } | d d          \  }}t          j        | j        t          j        ddg          k              sJ | j        dk    sJ t          j        ||z   j        t          j        dg          k              sJ ||z  j        dk    sJ ||z  j        dk    sJ t          j        t                    5  |t          dd          z    d d d            d S # 1 swxY w Y   d S )Nr   r   mr#   zm*mzm/(m)rZ  )	r  r*   r`  r   r  r  r;  r<  r  )qq0q1s      r4   test_quantityndr    sB   Aq63AqqqTFB6!#QF+++,,,,,7c>>>>627+QC011111G?e####G?g%%%%	z	"	"    
Z3                                   s   C//C36C3c                      t          t          j        d          d          } t          j                    \  }}|                    |            |j                                         d S )NrR   r  )r  r*   r,   r(   r)   r/   r	  r  )r   r0   rn   s      r4   test_imshow_quantityndr     sO    
RWV__c
*
*ClnnGCIIcNNNJOOr6   c                    t          j        ddt           j                  }d|ddd d f<   t           j                            |d          }d	|j        ddddf<   t          j        d
                             d          }| 	                                }|
                    |t          j        dd          dd|          }|                    t          j        dd                     |
                    |t          j        dd          dd|          }|                    t          j        dd                     |                    dd           |	                                }|
                    |t          j        dd          dd|           |
                    |t          j        dd          dd|           |                    dd           d S )Nr   r   r    r]   r   r   Fr  Tr  wr#  r   rF  r.  rG   )rM  r   r&   r\  r  )r   rr   r   rr   r   rr   r  )r*   r   r  r0  rH   rR  r{  rI  r/  r)   r/   r	   rN  r  r  r  )r~   r   r   masked_datar\  rn   r   s          r4   test_norm_changer  
  s    761BJ///DD1aaaL%++d+//K!%KQqS!A#X=#111<<D					B	4fn#A>>>&id 
 
L 
LBKK bq111222	;V^1%E%E%E(	 
 
N 
NBKK bq111222FFgF&&&					BIId)r:::!  G G GIIk 0bq A A A#94  I I IFFgF&&&&&r6   rb   c                 N   t          j        d|t           j                  }d|ddd d f<   |                                 }|                    |t          j        d|                                          dd	
           t          j        d|t           j                  }d|ddd d f<   |                                }t          j	        d	         
                    d          }|                    |t          j        d|                                          d|
           d S )Nr   r    g@xDr   r   r   rF  rG   r  )rM  r&   r\  i  r  r  )r*   r   r  r)   r/   r	   rN  r  r{  rI  r/  r  )r~   r   rb   r   rn   r\  s         r4   test_huge_range_logr  &  s     761BJ///DD1aaaL					BIIdQTXXZZ@@@%I  7 7 7 761BJ///DD1aaaL					B=#111<<DIId)qtxxzzBBB%D  2 2 2 2 2r6   c           
         |                      dd          }|                     dd          }ddgddggddgddggddgddggf}g d}t          t          ||                    D ]\  }\  }}||                             |           ||                             |           ||                             |           ||                             |dddddd	           ||                             d
d           ||                             dd
           ||         j        	                                 ||         j
                            d           ||         j                            d           ||         j                            t          j        dg dd                     ||         j                            t          j        dg dd                     d S )Nr   r#   r   )r,   r+   mixedrG   r  r   Greys)r&   r  r\   r\  r  r  r  r  g?r'  r  )r   r   r   rr   T)nbinsstepsinteger)r)   	enumeraterO  rI   spyr/   r   r   xaxistick_toptitleset_yset_ticks_positionset_major_locatormtickerMaxNLocatoryaxis)	r~   r   ax_testax_ref	plot_dataplot_titlesr  rd   r  s	            r4   test_spy_boxr  :  s    1%%Ga##F Q!Q
Q!Q
Q!QI
 -,,K"3y+#>#>?? 
 
:Au
U###
qq	E"""q	)#*7!" 	 	, 	, 	, 	q	4%%%q	3%%%q	  """q	d###q	**6222q	))a}}}dKKK	
 	
 	
 	q	))a}}}dKKK	
 	
 	
 	

 
r6   znonuniform_and_pcolor.pngc                     t          j        d                              ddd          } t          | ddg          D ]\  }}t	          ||          }|                    t          j        d          d	z  t          j        d          d	z  t          j        d
                              d                     |	                    |           | d	         
                    t          j        d          d	z  t          j        d          d	z  t          j        d
                              d                     | D ],}|                                 |                    d           -d S )Nrv  rU  r#   T)sharexshareyrG   r'   r%   r   r  r   r  )r  )r(   r^   r)   rO  r   r  r*   r`   r  r  
pcolorfastr  r  )r   rn   r&   r   s       r4   test_nonuniform_and_pcolorr#  [  sV   
*V
$
$
$
-
-aT
-
J
JC y*&=>>  MR}===
BIaLLA%ry||q'8IaLL((00	2 	2 	2
RF
	!29Q<<1,bill.B.B6.J.JL L L  

G r6   znonuniform_logscale.pngc                     t          j        dd          \  } }t          d          D ]@}||         }t          |          }|                    t          j        dd          dz  t          j        dd          dz  t          j        d                              d                     |                    dd           |	                    dd           |
                    d           |dk    r.|                    d	d
           |                    d	d
           |dk    r.|                    d	d
           |                    d	d
           |                    |           Bd S )Nr#   r   )ncolsnrowsr   r   r  rv  r   r  )base)r(   r)   rL  r   r  r*   r`   r  r   r   set_box_aspect
set_xscale
set_yscaler  )rc  r   r  rn   r   s        r4   test_nonuniform_logscaler+  k  s[   \+++FAs1XX  VR  
BIaOOq(")Aq//Q*>IaLL((00	2 	2 	2
Ar
Ar
!66MM%aM(((MM%aM(((66MM%aM(((MM%aM(((
R r6   zrgba_antialias.pngg{Gz?)r   r   r  c                     t          j        dddddd          \  } }d}t          j        ||f          }d|d d dd d f<   t          j        |          |z  dz
  }t          j        |          |z  dz
  }t          j        ||          \  }}t          j        |dz  |dz  z             }d	}	d
}
t          j        t          j        dz  |	|z  |
|dz  z  dz  z   z            }d|d t          |dz            d d f         |d t          |dz            d d f         dk     <   d|d t          |dz            d d f         |d t          |dz            d d f         dk     <   |d d t          |dz            d f         |d d t          |dz            d f<   t          j
        |ddddf<   d|ddddf<   d|ddddf<   d|ddddf<   d|ddddf<   t          t           j        j                  }|                    d           |                    d           |                                }|d                             |d|dd           |d                             |dz  dz
  |dz  dz   g           |d                             |dz  dz   |dz  d	z
  g           |d                             |d|dd           |d                             |dd |dd!           |d"                             |dd#|dd!           d S )$Nr   )      @r-  FT)rU   r   r!  constrained_layout   r]   r   rr   K   r  r   rq  rW   rX   g    .AF   Z   g    .r        yellowcyanr   rG   g333333r%  )r&   r\  r  r     rw   r   )r&   interpolation_stager\  r  r  r#   r  )r(   r)   r*   r,   r`   r  sqrtra   r  r{   r8  r   r.  RdBu_rset_overr  r  r/   r   r   )r0   r   rQ  aarb   rc   rJ   r  Rf0r   re  r\  s                r4   test_rgba_antialiasr?    sd   |Aq*U#(TC C CHCA	!QBBsssAAAvJ
	!q3A
	!q3A;q!DAq
1q!tA	B
A
ruqyBFQAX\1233A .0Ais1Q3xxilOAis1Q3xxilOc)*-.Ais1Q3xxilOAis1Q3xxilOc)*C!HHIIBqqq#ac(())| vBr"ube|Br"ube|Br"ube|Br"uc#g~Br"uc#g~DMM(NN6
++--CFMM"IDt#MNNNFOOQqSVQqSV$%%%FOOQqSVQqSV$%%% FMM"IDt#MNNN FMM"F$S  2 2 2
 FMM"F$S  2 2 2 2 2r6   )rP   c                 8   t           j                            d           t           j                            dd          }|                                }|                    |ddd           |                                 }|                    |ddd           dS )	z[
    Show that interpolation_stage='auto' gives the same as 'data'
    for upsampling.
    *N,r   r'   r  r   r&   r\  r8  rw   Nr*   rx   ry   rz   r)   r/   r~   r   gridrn   s       r4   !test_upsample_interpolation_stagerF    s     INN:9>>!QD					BIId*9"(  * * * 
				BIId*9"(  * * * * *r6   c                 8   t           j                            d           t           j                            dd          }|                                }|                    |ddd           |                                 }|                    |ddd           dS )z]
    Show that interpolation_stage='auto' gives the same as 'rgba'
    for downsampling.
    ru   i  rw   r  r  rB  NrC  rD  s       r4   #test_downsample_interpolation_stagerH    s     INN89>>$%%D					BIId&y"(  * * * 
				BIId&y"(  * * * * *r6   c                  V   dD ]`} t          j        d| i          5  t          j        ddgg                                          | k    sJ 	 d d d            n# 1 swxY w Y   adD ]B} t          j        t                    5  | t           j        d<   d d d            n# 1 swxY w Y   Cd S )N)r   r  zimage.interpolation_stager   r   )DATAfooN)	r{  
rc_contextr(   r/   get_interpolation_stager;  r<  r  r   )vals    r4   test_rc_interpolation_stagerO    sL    I I^8#>?? 	I 	I:1vh''??AASHHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I$ < <]:&& 	< 	<8;CL45	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<< <s#   0AA	A	BB!	$B!	z<ignore:Data with more than .* cannot be accurately displayedzdim, size, msg)rowi   z2\*\*23 columns)coli   z2\*\*24 rowsc           	      ,   |                                  }|                                 }t          j        d|dz   f          }d|d d |j        dz  d f<   |dk    r|j        }|                    |ddddd|          }	t          j        t          d	| d
          5  | j	        
                                 d d d            n# 1 swxY w Y   t          j        d          }d|d d df<   |dk    r|j        }|                    |ddddd|          }	d S )Nr   r   rQ  r   rw   r  r$   )r  r  r  r   r&   r\   zData with more than z  cannot be accurately displayed.r  ry  )r)   r*   r+   sizer  r/   r;  r|  r}  r	  r  )
r~   r   dimrS  msgr\   r  r  rH   r   s
             r4   test_large_imagerV    s    !!GFHa]##E!"E!!!UZ1_

e||	AA%l&,% 
 
' 
'B
 
k.3 . . .
/ 
/ 
/   	              
 HVEE!!!Q$K
e||	u11V*%+$ 
 
& 
&BBBs   CC
Cc                    t           j                            dd          dz  dz   }|                     dd          }|d                             |d           |d                             |dd	
           |d                             |d           |d                             |ddd           |d                             |ddd           |                    dd          }|d                             |t          j                               |d                             |t          j        d	                     |d                             |t          j        d                     |d                             |t          j        ddd                     |d                             |dd           t          |d         j	        d         j
                  t
          j        u sJ t          j        t                    5  |d                             |d           d d d            d S # 1 swxY w Y   d S )Nrr   g?rp  r   r   r   r  rz  r  )rM  r  r   symlogr#   rq  r  )rM  r  r  r   logit)r  )	linthresh)rZ  r  r  )rq  r  )rM  climfoobar)r*   rx   rz   r)   r/   r	   rN  ru  typeimagesrM  r;  r<  r  )r~   r   r|  axtsaxrss        r4   test_str_normsra    sG   
	r2#b(AQ""DGNN15N!!!GNN15rN***GNN18N$$$GNN18"2N666GNN17"N555Aq!!DGNN16>++N,,,GNN16>r222N333GNN16,q999N:::GNN16,qrKKKNLLLGNN17N222Qq!&''6>9999	z	"	" ) )Qqx((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   H>>IIc                     t          j        t          j        j        t                                } t          j        t          d          5   | t          j
        d          d            d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j
        d          t          j
        d                     d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j
        d          t          j
        d                     d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j
        d          t          j
        d                     d d d            n# 1 swxY w Y   t          j        t          d	          5   | t          j
        d          t          j
        d                     d d d            n# 1 swxY w Y   t          j        t          d
          5   | t          j
        dt          j                  t          j
        d                     d d d            n# 1 swxY w Y   t          j        t          d          5   | t          j
        d          t          j
        d          j                   d d d            n# 1 swxY w Y   t          j
        d          }d|j        _        t          j        t          d          5   | t          j
        d          |           d d d            d S # 1 swxY w Y   d S )Nr  zincompatible function argumentsr  )r  r  zdifferent dimensionalities)r  r  r   z3D input array must be RGBA)r  r  r#   z3D output array must be RGBAzmismatched typeszmust be C-contiguousFzOutput array must be writeable)	functoolspartialr{  _imageresampler   r;  r<  r=  r*   r+   r  r.   r  flags	writeable)rf  rd  s     r4   test__resample_valid_outputri  $  s    !4

KKKH	y(I	J	J	J ) )&!!4((() ) ) ) ) ) ) ) ) ) ) ) ) ) )	z)E	F	F	F 8 8&!!28I#6#67778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	z)E	F	F	F 8 8)$$bhv&6&67778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	z)F	G	G	G ; ;)$$bhy&9&9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	z)G	H	H	H ; ;)$$bhy&9&9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	z);	<	<	< ? ?&"(++RXf-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	z)?	@	@	@ 7 7&!!28F#3#3#56667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 (6

CCI	z)I	J	J	J ( (&!!3'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   A88A<?A<1CC"C1D>>EE$1F!!F%(F%1HHH*<I22I69I66KK!K MMMc                     t          j                    } t          |           }t          j        t
          d          5  |                                 d d d            n# 1 swxY w Y   t          j        dt                    
                    d          }|                    |           |                                dk    sJ |                                |                                k    sJ d S )Nz"You must first set the image arrayr  rW  r    r  )r(   r  r   r;  r<  r  	get_shaper*   r`   r  r  r  get_sizer  s      r4   test_axesimage_get_shaperm  ;  s   	B	2B	|+O	P	P	P  
              
	"E"""**622AKKNNN<<>>V####;;==BLLNN******s   AA#&A#c                  (   t          j                                                    } t          j        d                              d          }|                     || j                   |                                 dk    sJ |                     |t                      
                    d          | j        z              |                                 dk    sJ |                     || j        d           |                                 dk    sJ d S )Nr   rR   r  rw   r   r   )r  r  )r(   r^   rz  r*   r`   r  r/   r  
get_aspectr   r  r  r  s     r4   .test_non_transdata_image_does_not_touch_aspectrp  G  s    		!	!	#	#B	1		f	%	%BIIbBLI)))==??f$$$$IIbHJJ,,Q//",>I???==??aIIbBLI333==??ar6   zdownsampling.pngg
ףp=
?c                     d} t          j        |           | z  dz
  }t          j        |           | z  dz
  }t          j        | | f          }d|d d dd d f<   t          j        ||          \  }}t          j        |dz  |dz  z             }d}d}t          j        t           j        dz  ||z  ||dz  z  dz  z   z            }	d|	d t          | dz            d d f         |d t          | dz            d d f         dk     <   d|	d t          | dz            d d f         |d t          | dz            d d f         d	k     <   |	d d t          | d
z            d f         |d d t          | d
z            d f<   |}	t          j	        dd
dd          \  }
}|d         
                    |	ddd           |d                             dd           |d                             dd           |d                             d           t          |j        dd          g dg d          D ];\  }}}|
                    |	||d           |                    d| d| d           <d S )Ni  r   r]   r   r   rS   r  r   rq  r#   )r  r   
compressedrU   layoutr%  rG   r  r:  )r&   r8  r\  }   r  r/  r9  Zoom)rG   rG   rq   rq   rw   )r   r  r   r  rw   zinterpolation='z	'
space='')r*   r`   r,   r  r9  ra   r  r{   r(   r)   r/   r   r   rI   rO  flat)rQ  rb   rc   r<  rJ   r  r=  r>  r   re  r0   r   rn   rU  spaces                  r4   test_downsamplingrz  R  s    	A
	!q3A
	!q3A	!QBBsssAAAvJ;q!DAq
1q!tA	
BA
ruqyBFQAX\1233A13Aks1q5zzk111naQUQQQ'#-.12Aks1q5zzk111naQUQQQ'#-.111c!a%jjkk>*Bqqq#a!e**++~
A|Aq&FFFHCIQiV"  $ $ $IsC   IsC   I !"" 0C 0C 0C!I!I!IK K C CFE 			!6u 	 	! 	! 	!
AvAAAAABBBBC Cr6   zdownsampling_speckle.pngc                     t          j        dddddd          \  } }|                                }t          j        d                              dd          t          j        d	          z  d
z  j        }t          j        d          }|	                    d           t          j        dd          }|d                             d           |d                             t          j        |          ||d           |d                             d           |d                             t          j        |          ||           d S )Nr   r   )r   g@Trr  )rU   r   r!  rt  i   r]   i  rX   r  r  r#   rm  rF  r   z"interpolation='auto', stage='rgba'r  )r\  rM  r8  z"interpolation='auto', stage='auto')r\  rM  )r(   r)   r  r*   r`   r  r,   r  get_cmapr;  r	   rN  rI   r/   triu)r0   r   r3   r.  rM  s        r4   test_downsampling_speckler~  u  s%    |Aq(4#/1 1 1HC
++--CIdOO##B**RWS\\9b@
CC	i	 	 BKK>qr***D
 F9:::FMM"'#,,RdMOOO F9:::FMM"'#,,RdM33333r6   zupsampling.png)r   r   c                  B   t           j                            d           t           j                            dd          } t	          j        dddd          \  }}|d                             | d	
          }|d                             d           |d                             | d	d           |d                             d           |d                             | d	dd           |d                             d           |                    ||dd           d S )NrA  r   r   r#   )g      @r#   rr  rs  r   r  )r\  zAinterpolation='auto'
stage='antialaised'
(default for upsampling)sinc)r\  r&   z:interpolation='sinc'
stage='auto'
(default for upsampling)r   r  )r\  r&   r8  z!interpolation='sinc'
stage='rgba'r  r'  )rn   shrinkr)  )	r*   rx   ry   rz   r(   r)   r/   rI   r  )re  r0   r   r   s       r4   test_upsamplingr    s    INN:
	q!A|Aq(<HHHHC	Qqy	)	)BFMO O O FMM!)6M:::FFH H H FMM!)6vMVVVF9:::LLCL77777r6   )r  float32int16r   int8r.   ndim)r   r#   c                 ^   t           j                            d          }|dk    rdnd}|                    |                              t          j        | d                    }t          j                    \  }}|                    |          }|	                    d           d          d S )	NiU  r   rR   )r   r   r#   )rS  Tr   r   )
r*   rx   default_rnguniformr   r!   r(   r)   r/   r  )r!   r  rngr   r   r0   rn   
axes_images           r4   test_resample_dtypesr    s     )


%
%CaiiFFYE;;E;""))"(5t*D*D*DEEDlnnGC4J$""""r6   )
contextlibr   r   rc  ri   r   pathlibr   r  r  urllib.requestr  numpyr*   numpy.testingr   PILr   
matplotlibr{  r	   r
   r   r   r   r(   r   r   matplotlib.imager   r   r   r   r   matplotlib.testing.decoratorsr   r   matplotlib.transformsr   r   r   matplotlib.tickertickerr  r;  r5   rM   markparametrizerf   rp   r   r   r   r   r   r   r   r   r   r   r   r   contextr   r  r  r8  r"  r+  r5  r7  r?  rC  rF  rS  rf  rj  rt  r}  r  r  r  r  r  r  r  r  r  r  r`   r  r  r  r  r  r  r  r  r5  r:  r=  rB  machinerV  rX  splitre  ri  ro  rq  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r#  r+  r?  rF  rH  rO  filterwarningsrV  ra  ri  rm  rp  rz  r~  r  r  r   r6   r4   <module>r     s                         				 				        



         , , , , , ,          F F F F F F F F F F F F F F F F< < < < < < < < < < < < < < O O O O O O O O A A A A A A A A A A # # # # # #  %&D999	. 	. :9	. +,#U^? ? ?+ +? ?+  ,udm<<:,E5>:::B B ;: =<B   '    (((. . )( . (((  )(" 	) 	) 	)$ $ $$ $ $  > > >??- - @?-D GW#566@ @ 76@  B B BCCA A DCA* * *2) ) )4 4 4 =/t4446 6 546 7(((  )( 0D+ D+ D+N 	3Z	3Z	3Z	3Z	3Z#Y	2Y	& 
 
P P
 
P* %.	=),#61a.	4 g,/0r(Xa&8 D D D <.000  10 #$G444  54 (((  )(     ,-4@@@I I A@I =/tOOO  POF F F8 /0"'3 3 3 3 3 *+>>>  ?>4 (((% % )(% $%#U^WN N N! !N N!: ()t7KKK  LK0 G  G  GF 34"'3 3 3 3 3  ! ! !  ' ' '0- - -- - - 		2		"yry~~'='=f'E'E	G		2		"yry}}'<'<V'D'D	F 1 1 1  B   $%4888  98 >"555  656	% 	% 	%3 3 3( ./TsKKK> > LK>> <.d333+ + 43+"   )*===
* 
* >=
* 01+8+--99aat"'3 3 3 3 3D& & & BB#9#?#?#A#ABBBD D% %D D%& )*GLLL  ML *+WMMM  NM /0"'3 3 3 3 3 ^!!  "# #	1 	1# #	1    D D D
   02DEG G09j2IJJ2 2 KJG G2 4 4 4	D 	D 	D9 9 9$2 2 2 - - -$3 3 3
 74 4 48 $%5%."'3 3 3
 
3 3
"9% 9% 9% 9% 9% 9% 9% 9%x	  	  	    (((' ' )('6 r1g&&(((2 2 )( '&2$ 
 
 
@ ./w???  @? ,-W===  >=( '(TtTTT22 22 UT22j 	**** * +**& 	**** * +**$< < <  = > >GW#56699966689 9 	***& & +*9 9 76> >&> ((() ) )()*( ( (.	+ 	+ 	+      TtE E EC CE ECB  TtM M M4 4M M4* g49 9 98 89 98* >  ((	# 	# )(	 
	# 	# 	#r6   