
    %Wh                        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^                  ja                  dddg       e$dgddg      d               Z1d Z2e,j^                  ja                  dg d       e#dg      d               Z3 e#dg      d        Z4 e#dg      d        Z5d  Z6d! Z7e,j^                  ja                  d"g d#      d$        Z8d% Z9e,j^                  ja                  d&d'd(g      d)        Z:e,j^                  ja                  d"g d*      d+        Z;d, Z<d- Z=d. Z> e$d/gd      d0        Z?ej4                  j                  d1       e#dg      d2               ZAd3 ZBe,j^                  ja                  d4d5d5gd gd5d6gd7gd8d5gd9gd:d5gd9gd;d<gd=gd>d5gdgd5d>gdgg      d?        ZCe,j^                  ja                  d@dAdBggdCfdDdEggdFfej                  d7dGggdHfd7dIggdJfd>d>ggdKfd d ggdLfg      dM        ZE e$dNgd1O      dP        ZF e$dQgd1O      dR        ZG e#dg      dS        ZHdT ZIdU ZJ e$dVgd      dW        ZK e$dXgdddgY      dZ        ZLd[ ZM e$d\gdd1]      d^        ZN e$d_gd      d`        ZO e#dg      da        ZP e$dbgddgdd1c      dd        ZQ e$degdd1]      df        ZRdg ZS e$dhgdd1]      di        ZTdj ZUdk ZVdl ZWdm ZXdn ZYdo ZZe,j^                  ja                  dpe  ej                  dq       ej                  dr       ej                  ds      j                  dt      fe! ej                  dq       ej                  dr       ej                  du      j                  dv      fg      dw        Z]dx Z^dy Z_ e$dzgd      d{        Z` e$d|gd      d}        Zad~ Zbd Zc e$dgdd      d        Zd e$dgd      d        Zed Zf e$dgd      d        Zg e$dg ej                         dk(  rd nddd1      d        Zid Zje,j^                  ja                  ddj                         D  cg c]  }  ej                  |        c}       d        Zm e$dgdd1]      d        Zn e$dgdd1]      d        Zo e$dgdd1]      d        Zpe,j^                  ja                  dej                  ej                  d d g      d        Zsd Ztd Zud Zvd Zwe,j^                  ja                  dddg      e,j^                  ja                  dddg      d               Zxd Zyd Zzd Z{d Z| e#       d        Z}d Z~ej4                  j                  d1      d        Z e$dgddgdd1c      d        Z G d dej                        Zd Zd Z e#dg      d        Ze,j^                  ja                  dd>d7g       e#dg      d               Z e#dg      d        Z e$dgd1O      d        Z e$dgd1O      d        Z e$dgd1dd      d        Z e#d      d        Z e#d      d        ZdÄ Ze,j^                  j                  dī      e,j^                  ja                  d&d'd(g      e,j^                  ja                  dg dƢg dǢg       e#d      dȄ                             Z e#dg      dɄ        Zdʄ Zd˄ Zd̄ Z e$dgd1ddά      dτ        Z e$dgd1ddά      dф        Z e$dgd1dӫ      dԄ        Ze,j^                  ja                  ddի      e,j^                  ja                  dd׫      d؄               Ze,j^                  ja                  ddګ       e#       dۄ               Zyc c} w )    )	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<   |j                  |d	       |j                  |d
	       y)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       U/var/www/html/jupyter_env/lib/python3.12/site-packages/matplotlib/tests/test_image.pytest_alpha_interpr5      s|     ll1a(OC#s
((9
C''&/CK''"''&9:CKJJs&J)JJs*J-    interp_nearest_vs_nonepdfsvg)
extensionsr   c                  D   dt         d<   t        j                  g dg dgg dg dggt        j                        } t	        j
                  dd	      \  }\  }}|j                  | d
       |j                  d       |j                  | d       |j                  d       y)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All1a(OC#sJJqJ'MM&'JJq	J*MM)*r6   suppressCompositeFfigimagepng)r:   c                 P   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   }|j                  |d	d	d
       |j                  |d d dd d f   d	dd
       |j                  |d d d d df   dd	d
       |j                  |d d dd d df   ddd
       y )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   :   s    **V
-C-C66"))C.5("))C.3*>?DAq
q!tad{QqS !A
r!Q$wAqD !A
ac'CLLqL1LLTrT1W!GL<LLQ"W#!GL<LLTrT4R4ZSSLAr6   c                      t        j                         \  } }|j                  g d       t        j                         }| j                  |       |j                  d       t        j                  |       y )N)r   r   r#   r   )r(   r)   plotioBytesIOsavefigseekimread)r0   axbuffers      r4   test_image_python_iorp   J   sK    llnGCGGIZZ\FKK
KKNJJvr6   z!img_size, fig_size, interpolation))r   r   hanning)r   r   rG   )r   
   rG   )r#   333333@rq   )r#   g333333"@rG   c                    t         j                  j                  d       t        j                  d   }t         j                  j                  t        ||z        t        ||z              }| |fD ]  }|j                  ||        | j                         }|j                  g d       |j                  |d       |j                         }|j                  g d       |j                  ||       y )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     IINN8
,,}
%C
		s3>*Ch,?@A'" 0Hh/0				BOOL!IIavI&				BOOL!IIa}I-r6   c                 2   t         j                  j                  d       t        j                  d   }t         j                  j                  t        |dz        t        |dz              }| |fD ]  }|j                  dd        | j                         }|j                  |d       |j                  ddg       |j                  ddg       |j                         }|j                  |d	       |j                  ddg       |j                  ddg       y )
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     IINN8
,,}
%C
		s37|Sq\2A'" &C%&				BIIavI&KKRKKR				BIIayI)KKRKKRr6   c                    t        j                  d       t        t              j                  dz  }t        t              j                  dz  }| j                  d      }|d   j                  t        j                  |             |d   j                  t        j                  |             |j                  d      }|d   j                  t        j                  |             |d   j                  t        j                  |             y )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    	IIiH~$$'NNHX%%(OOI


A
CFMM%**X&'FMM%**Y'(


1
CFMM#**X&'FMM#**Y'(r6   c                  "   t        j                  t        j                  j	                  t        j                  j                  t              ddd            } | j                  t        j                  k(  sJ t        j                  |       dk(  sJ y )Nbaseline_images
test_imagez
uint16.tif )r(   rm   ospathjoindirnamer   r!   r*   uint16sumr3   s    r4   test_imread_pil_uint16r      sc    
**RWW\\"''//(";&lD EC99		!!!66#;)###r6   c                      t        j                  t        t              j                  dz        } | j
                  t        j                  k(  sJ t        j                  |       dk(  sJ y )Nr   r   )	r(   rm   r   r   r   r!   r*   r   r   r   s    r4   test_imread_fspathr      sP    
**X GGIC99		!!!66#;)###r6   fmt)rP   jpgjpegtiffc                 R   | dv}t         j                  j                  d       t         j                  j                  dd      }t	        j
                         }t        j                  ||| d       t	        j
                         }t        j                  ||| d       |j                  d       t        j                  ||       }|j                  d       t        j                  ||       }|j                  ddd	|z   fk(  sJ |j                  ddd	|z   fk(  sJ t        ||       y )
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 IINN1 99>>$"D

IJJy$s2**,KJJ{D#6NN1zz)C0HQK4J>>dAq9}5555aY7777x,r6   c                     ddgddgddgg} t        j                         }t        j                  || d       |j	                  d	       t        j
                  |      }t        t        j                  |       |d d d d d d
f          y )N)      ?        r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   rP   r   r   r#   )	ri   rj   r(   r   rl   rm   r   r*   rH   )img_databuffread_imgs      r4   test_imsave_python_sequencesr      s     
/*	/*	/*H ::<DJJtXe,IIaLzz$H
Arrr6   r\   upperrY   c                     t        j                         }t        j                  dd      }t	        j
                  ||d|        y )N)rr   rr   r   r.   r    rP   )arrr   r\   )ri   rj   r*   r+   mimager   )r\   bufresults      r4   test_imsave_rgba_originr      s1     **,CXXk1F
MM#6%?r6   )rP   r8   psepsr9   c                     t        j                  t        t        j                        t        j                  ddgg      |        y )Nr   r   r   )r(   r   r   r   devnullr*   rH   )r   s    r4   test_imsave_fspathr      s*    JJtBJJAq6(!3C@r6   c                     t         j                  j                  d       dD ]  } t         j                  j                  ddd      }t	        j
                         }t        j                  ||| d       |j                  d       t        j                  |      }d|z  j                  d	      }| d
k(  r|d d d   }d|z  j                  d	      }t        ||        y )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   r   arr_bufs       r4   test_imsave_color_alphar      s     IINN1$ *yy~~b"a(zz|

4fU;		!**T"
 D  )W":Dw;&&w/4)!*r6   c                      ddl m}  t        j                         } |        }|j	                  dd       t        j                  |ddgddggdd	|i
       t        j                  |      }|j                  d   dk(  sJ y )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      sr    *
**,CiGZ(JJsaVaV$G(<>	CB77:&(((r6   c                  \   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                  |      }|j                  j                         D ci c]  \  }}| |   j                  | }}}|d
   dk(  sJ y c c}}w )Nr   )TAGS_V2descriptionz
test imager   r   r#   r   r   ImageDescription)PIL.TiffTagsr   ri   rj   r(   r   lenr   r   tag_v2itemsname)TAGSr   r   r   kvtagss          r4   test_imsave_pil_kwargs_tiffr     s    ,
**,C.JJJsaVaV$V
Kz?a	CB(*		(9:1DGLL!O:D:"#|333 ;s    B(image_alphac                  4   t         j                  j                  d       t         j                  j                  dd      } t	        j
                  dd      \  }\  }}}|j                  | dd       |j                  | dd       |j                  | dd	       y )
Nr      r   r#   r   r$   )alphar&         ?rG   )r*   rx   ry   rz   r(   r)   r/   )Zr0   rK   rL   ax3s        r4   test_image_alphar     sw    IINN1
		q!A<<1-C#sCJJq6J2JJq6J2JJq9J5r6   mpl20c                 p   t         j                  j                  d       t         j                  j                  ddd      }t        j                  |dz        }| j                  dd      \  \  }}\  }}|j                  |d       |j                  |d       |j                  |d       |j                  |d       t        j                  |t        j                  d	      fd
      }t        j                  |t        j                  d	dt         j                        fd
      }	|j                  dd      \  \  }}\  }}d|d d d d df<   |j                  |       d|d d d d df<   |j                  |       d|	d d d d df<   |j                  |	       d|	d d d d df<   |j                  |	       y )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     sj    IINN899>>!Q"D88D3JD'00A6Zc3#sJJt3JJJt4J JJt3JJJt4J NND"'')"45A>ENND"'')S"(("CD1ME&//15Zc3#sE!Q'NJJuE!Q'NJJuE!Q'NJJuE!Q'NJJur6   c                     ddl m}  t        j                         \  }}|j	                  t        j                  d      j                  dd      d      }d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      d	k(  sJ d
\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      J |j                          |j	                  t        j                  d      j                  dd      d      }d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      d	k(  sJ t        j                         \  }}|j	                  t        j                  d      j                  dd      g d      }d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      dk(  sJ d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      J d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      J t               j                  d      j                  d      }	|j	                  t        j                  d      j                  dd      |	|j                  z         }d\  }}|j                  j                  ||g      \  }} | d|j                  ||      }|j                  |      d	k(  sJ y )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  2  s<   3llnGC	299S>))"b1'	BBDAq<<))1a&1LE5,cjj%GEe$*** DAq<<))1a&1LE5,cjj%GEe$,,, HHJ	299S>))"b1'	BBDAq<<))1a&1LE5,cjj%GEe$***llnGC	299S>))"b1:J	KBDAq<<))1a&1LE5,cjj%GEe$*** DAq<<))1a&1LE5,cjj%GEe$,,,DAq<<))1a&1LE5,cjj%GEe$,,, JQ&&s+E	299S>))"b1"R\\1 
 
3BDAq<<))1a&1LE5,cjj%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        ||j                         |j                         |j                         |j                         f      }|j                  |||       |j                  |       |j                  |j                         dz
  |j                                |j                  |j                         dz
  |j                                |j                  j                  |       \  }	}
 |d|j                   |	|
      }|j#                  |      |k(  sJ |j#                  |      |f       y )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  y  sC    4 	!"A
!A	"**a-!a2::.11AllnGC	QUUWaeegquuw$H	IBKK1aLLKK!QUUW%KK!QUUW%<<))"-LE5,cjj%GEe$,Or/A/A%/H$.O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	                  |       }|j
                  j                  ddg      \  }} |d|j                  ||      }|j                  |j                  |            |k(  sJ y )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$    sx     4llnGC	4B<<))1a&1LE5,cjj%GE  !3!3E!:;tCCCr6   
image_clip)r   c                      ddgddgg} t        j                         \  }}|j                  |       }t        j                  dd|j
                        }|j                  |       y )Nr   r   r#   r   r   r   )radiusr  )r(   r)   r/   r   Circler
  set_clip_path)dr0   rn   r   patchs        r4   test_image_clipr-    sT    
Q!QAllnGC	1BNN6!r||DEUr6   image_cliprectc                      t        j                         \  } }ddgddgg}|j                  |d      }t        j                  ddd|j
                  j                        }|j                  |       y )	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_cliprectr7    sg    llnGC
Q!QA	1\	*B10A0ACDTr6   c                    t        j                  d      j                  d      }|j                         }|j	                  |d d d d df   dd       |j                  dd       |j                  dd       | j                         }|j	                  |dd       |j                  dd       |j                  dd       y )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_1r9    s     ))C.
 
 
-C				BIIc!Q'l*\IJKK1KK1				BIIcLIAKK1KK1r6   c                      t        j                         \  } }t        j                  d      j	                  d      }t        j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)N   )rr   rr   r   	r(   r)   r*   r`   r	  pytestraises	TypeErrorr/   r0   rn   r   s      r4   test_imshow_10_10_2rA    U    llnGC
))C.
 
 
-C	y	! 
		#     A00A9c                      t        j                         \  } }t        j                  d      j	                  d      }t        j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)Ni  )rr   rr   r   r<  r@  s      r4   test_imshow_10_10_5rE    rB  rC  no_interpolation_originc                     t        j                  d      \  } }|d   j                  t        j                  d      j                  d      dd       |d   j                  t        j                  d      j                  d      d	       y )
Nr   r   rS   )r   rX   rY   r$   )r\   r&   r   r%   )r(   r)   r/   r*   r`   r	  )r0   r   s     r4   test_no_interpolation_originrH    si    ||AHCFMM"))C.((1' &  (FMM"))C.((1MHr6   image_shift)r   r:   c            
      @   t        dd      D  cg c]%  } t        dd      D cg c]  }d|z  d| z  z    c}' }} }d}d}t        j                         \  }}|j                  |t	        j
                         d||ddf       |j                  d       y c c}w c c}} w )Nr   rS   gMk&Agk&Ar$   )normr&   r  rw   )ranger(   r)   r/   r	   LogNorm
set_aspect)rc   rb   imgDatatMintMaxr0   rn   s          r4   test_image_shiftrR    s    ?DQ}M!uQ}5!AA5MGMDDllnGCIIgFNN,FD!S)  +MM& 6Ms   BBBBc                     t        j                  ddg      } | j                  g dd      }t        j                  t        j
                  d      d      j                  dd	      }|j                  |d
g ddd      }dx}}|j                  | |g       |j                  | |g       |j                  g        |j                  g        t        j                         }| j                  |d       |j                  d       t        j                   |      }t#        |d d df         \  }}}	}
t#        |d d df         \  }}}	}
|dk7  sJ d       y )Nr   rU   rv   F)frameon      rW   r  r   rr   rY  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_edgesre    s(   
**aV
$C	lE	2B77299R="%--b!4D	40B!'f 
 
6B IAKK!QKK!QMM"MM"
**,CKKyK)HHQK	CBR1XJAq!QR2YJAq!Q8EEE8r6   image_composite_background)r   r   c                     t        j                         \  } }t        j                  d      j	                  dd      }|j                  |g d       |j                  |g d       |j                  d       |j                  ddg       y )	NrV  r   r#   )r   r   rW  r   r  )r   r   rW  r   )r   r   r   r   r   )r(   r)   r*   r`   r	  r/   set_facecolorr   r@  s      r4   test_image_composite_backgroundri    sk     llnGC
))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<   |j                  |g d
d       |j                  |g dd       |j                  |g d       |j                  |g d       |j                  |g dd       |j                  |g dd       |j                  d       |j                  ddg       |j                  ddg       y)z{
    Tests that the alpha value is recognized and correctly applied in the
    process of compositing images together.
    )      r   r   Nr   皙?皙?r]   r#   )rm  rl  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/   rh  r   r   )r0   rn   r   arr2s       r4   test_image_composite_alphars    s    llnGC
((;
CC1aL>>	1c3	1a!5dd!;<>C1aL88K DDAqMDAqMNN	1c3	1a!5dd!;<>>?mMDAqMIIc,cI2IIc,cI2IIc,I'IId<I(IId<sI3IId<sI3^$KKAKKAr6   c                    t        j                  d      j                  d      }| |fD ]  }|j                         }|j	                  |t
        j                  j                  g d      |j                  f       |j	                  |t
        j                  j                  g d      |j                  f        d|_	        y )Nr  r#   r#   )r'  r   r   )r   r   )	clip_path)r1  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|  6  s    
		!V$A'" /__
		!.F G " .	 	/
		!.F G " .	 	/	/ !%Gr6   rasterize_10dpi)r:   r   r   c                     t        j                  ddgddgg      } t        j                  ddd      \  }}|d   j	                  |        |d   j                  ddgddgdd	
       |d   j                  dd       |d   j                  ddgddgd       |d   j                  dd       |D ]B  }|j                  g        |j                  g        |j                  d d  j                  d       D dt        d<   y )Nr   r   r#   r   )r#   r   rT  r   g      4@T)	linewidth
rasterizedrv  )r]   r   xlimylim)r  Frr   r<   )r*   asarrayr(   r)   r/   rh   setr_  r`  spinesset_visibler   )r3   r0   r   rn   s       r4   test_rasterize_dpir  B  s     **q!fq!f%
&C||Aq&1HCFMM#FKKAA#$K?FJJFJ)FKKAA#K.FJJFJ)  (
b
b
		!  '(
 !H]r6   bbox_image_invertedc            	         t        j                  d      j                  d      } t        j                         \  }}t        t        t        ddgddgg      |j                        d      }|j                  |        |j                  d       |j                  dd       |j                  dd       |j                  |       t        j                  d      } t        t        t        dd	gd
dgg      |j                         j                         d      }|j                  |        |j                  d       |j                  |       y )NrS   rr   rr   r   rG   r%   Frr   ro  皙?rp  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  a  s    IIcN""8,EllnGCsCj1a&12BLLA!G UKK3KK3MM'KKOEsCj3+-F(G(*(C(CE&/1G UMM'r6   c                  |   t        j                  g dg dg dg dg      } t        j                  dd      \  }}|j	                  g d       |j                  d	d
       |j                  d	d
       |j                  | g dd      }|j                  j                          |j                  j                  }|j                  |      }t        |j                         ddgddgg       t        j                  dd      \  }}|j	                  g d       |j                  d
d       |j                  d	d
       |j                  | g dd|j                        }|j                  j                          |j                  j                  }|j                  |      }t        |j                         ddgddgg       y )N)r  r   r   r   )ro  g?r   皙?)rq  rp  r   r  )ffffff??r  rq  r  rS   rT   rv   r   r   )r  r  r  r  rG   )r  r&   i  r;  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  z  sx   
 
*,A')=? 
@Bll85GCOOL!KK1KK1YY
'y  BF JJOOzz""H&&x0Gw))+sCj3*-EFll85GCOOL!KK1KK1YY
'y,,   F JJOOzz""H&&x0Gw))+sCj3*-EFr6   zzoom_and_clip_upper_origin.pngc                      t        j                  d      } | j                  d      } t        j                         \  }}|j                  |        |j                  dd       |j                  dd       y )NrS   r         @      )r*   r`   r	  r(   r)   r/   r   r   )r
   r0   rn   s      r4   test_zoom_and_clip_upper_originr    sV     IIcNEMM(#EllnGCIIeKKTKKcr6   c                  d    t        j                         } t        |       }|j                  d       y )NBlues)r(   gcar   set_cmaprn   r   s     r4   test_nonuniformimage_setcmapr    s#    	B		BKKr6   c                      t        j                         } t        |       }|j                  t        j                                y N)r(   r  r   set_norm	Normalizer  s     r4   test_nonuniformimage_setnormr    s)    	B		BKK r6   c                  N   t        j                  dd      } t        d      D ]#  }t        j                  ddd      dz  | |d d f<   % t	        j
                  dd      }|j                  | j                                t        j                         \  }}|j                  |       y )	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2Y 4KKS"-3AqD	4	3	!BJJs{{}llnGCIIbMr6   c                     t        j                  dd       t        j                  dt              } t        j
                  ddd      | d<   t        j                  |        t        j                         }t        j                  |d	d
d       |j                  d       t        j                  |      }t        |j                  d            }d|cxk  rdk  sJ  J |j                  d      }|dk(  sJ y )Nr1  ,  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    JJv3' 
-u	-BS#s+BvJLL::<DKKe=IIaLJJtE U__S)*J*######>>&)L;&&&r6   c                      t        j                         } t        |       }t        j                  dt
              j                  d      }|j                  |       d|d<   |j                  d   dk(  sJ d       y NrV  r    r   r#   #@r'  r   value changed)	r(   r  r   r*   r`   r  r	  r  _Arn   r   rd   s      r4   test_axesimage_setdatar    s`    	B	2B
		"E"**62AKKNAdG55;!,_,r6   c                      t        j                         } t        |       }t        j                  dt
              j                  d      }|j                  |       d|d<   |j                  d   dk(  sJ d       y r  )	r(   gcfr   r*   r`   r  r	  r  r  )r0   r   rd   s      r4   test_figureimage_setdatar    sa    
'')C	S	B
		"E"**62AKKNAdG55;!,_,r6   zimage_cls,x,y,a      @      @g      (@r  g      @)r#   r   c                 p   t        j                         } | |      }|j                  |||       dx|d<   x|d<   |d<   |j                  d   |j                  d   cxk(  r|j
                  d   cxk(  rdk(  sJ d        J d       |j                  |||j                  g |j                  d             y )Nr  r   r'  r  r]   )r(   r  r  r  _Ax_Ayr	  r   )	image_clsrb   rc   rd  rn   r   s         r4   test_setdata_xyar    s     
B	2BKK1aAaD1Q4!D'55;"&&)5rvvay5A5FF5FF5KK1aii!''2/0r6   c                     ddl m}  t        j                  j	                  d       t        j                  j                  dd      }t        j                  dd      \  }}|d   j                  |      }|d   j                  |      }t        j                  ||d          t        j                  ||d          t        j                         }t        j                  |d       t        j                  |j                               }| j                  |      }d }|j                  d	      D ]  }	||	d
   }|	d
   |k7  sJ  y )Nr   )ElementTreerr   r   r   )rn   r9   r   r
   r2  )	xml.etreer  r*   rx   ry   rz   r(   r)   
pcolormeshcolorbarri   rj   rk   getvalueparseiter)
r  r   r0   rn   p1p2r   treer2  r
   s
             r4   test_minimized_rasterizedr    s    &IINN199>>"b!Dll1a GC	A		$	B	A		$	BLL1LL1::<DKKU#::dmmo&DT"DE7# ='NEW~&ur6   c                     t        t              j                  dz  } dt        j                  dk(  rdndz   | j                         j                         z   }t        j                  t        d      5  t        j                  |       d d d        t        j                  j                  |      5 }t        j                  |       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)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    s    >  #JJD||w.eB8\\^$$&'C 
z)>	? 

3				$ 

4   s   1C.CCC"log_scale_imagec                      t        j                  d      } d| d d d<   t        j                         \  }}|j	                  | g ddddd       |j                  d	
       y )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  &  sY    
AAccFllnGC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      \  }}	|	j                  |dd	d
g dd      }
t               j                  d      |	j                  z   }|
j                  |       |
j                         \  }}}}|	j                  |||||g|||||gdd|       |	j                  dd       |	j                  dd       y )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  1  s}   EIIdC''A;;q!DAq	!Q$A+"	#q255y	1B
&&QUcMA%!a%3(::;a?
@ruu9s?S "B
RA||Aq!HC
**Qf9#*D  :C *''+cmm;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       | j                  d       t	        j                  |       }|j                  d d |j                  k(  sJ y )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  M  s`    ::<D	*	BJJtR&IIaL
**T
C99Ra=BHH$$$r6   c                  .   d} t        j                  | t              }t        j                  | | fd      }|j                  d      }|j                          |j                  |ddd       t        j                         }|j                  |d	
       |j                  d       t        j                  |      }|j                  dk(  sJ t        t        j                  |d d d d df   t               t        j                  | t               d d d          y )N   F)rU   rU  )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  Y  s    	A;;q% D
**aVU
3C	*	+BOOIId)GFIK::<DKK!KIIaL
**T
C99	!!!rzz#aAg,5{{1d+DbD1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                  j                  d	d
d      }t         j                  j                  |dkD  |      }	t        j                  dd      \  }
\  }}|j                  |	d|t        j                  ddd      dg d      }|j                  d       |
j!                  |dd|d       |j                  |	d|t        j"                  g ddd      dg d      }|j                  d       |
j!                  |ddd|d        y )!Ng?r  r  r   r   r  r   rr   ra  rb  rc  overunderbad333333?r'   g      r   F)r  r  cliprY   )r   r#   r   r#   )r&   r[  rK  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(   cmrZ  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_underr3  m  s    EIIdC''A;;q!DAq	!Q$A+"	#q255y	1B
&&QUcMA%!a%3(::;a?
@ruu9s?S "B
BGAffkk''S'EG			AGQ	'Bll1a(OC#s	Bj ))t#EJ"> 
 
;B MM12LLF  $ 
Bi ,,-M58uF">	 
 
;B
 MM%&LLFN)c"  >r6   
mask_imagec                     t        j                  dd      \  } \  }}t        j                  d      }t        j                  |ddddf<   |j                  |d       t        j                  dt              }d|ddddf<   t        j                  j                  t        j                  dt        j                        |      }|j                  |d       y )Nr   r   r   rG   r%   r    T)r(   r)   r*   r,   nanr/   r+   r  r.  masked_arrayr   )r0   rK   rL   r   s       r4   test_mask_imager8    s     ll1a(OC#s
A&&Aac1Q3hKJJq	J*
t$AAac1Q3hK
2776;Q?AJJq	J*r6   c                      t        j                  dt         j                        } t        j                         \  }}|j                  |        |j                  j                          y )NrR   )r*   r   r6  r(   r)   r/   r  	draw_idle)r   r0   rn   s      r4   test_mask_image_allr;    s@    776266"DllnGCIIdOJJr6   zimshow_endianess.pngc                  t   t        j                  d      } t        j                  | |       \  }}t        j                  |dz
  |dz
        }t	        j
                  dd      \  }\  }}t        ddd      } |j                  |j                  d	      fi |  |j                  |j                  d
      fi | y )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_endianessr@    s    
		"A;;q!DAq
QAAll1a(OC#s		JFCJJqxx)&)CJJqxx)&)r6   imshow_masked_interpolationx86_64r  )r  r   r   c                     t         j                  d   j                  ddd      } d}t        j                  d||z  dz
  	      }t        j                  ||z  t        
      j                  ||      }d|d<   d|d<   t
        j                  |d<   t        j                  |      j                  d      }d|d<   t
        j                  j                  ||      }t        j                  dd      \  }}t!        t"        j$                        }|j'                  d       |j'                  d       t)        ||j+                               D ]<  \  }}	|	j-                  |       |	j/                  ||| |       |	j1                  d       > y )Nr  ra  rc  r   r  rW   r   r   r  r  r    r]   r   g     j@)rW  r   )rW  rW  r  T)r   rW  r#   r   rw   antialiased)rK  r[  r&   off)rz  	colormapsr-  r	   r  r*   r`   r  r	  inf
zeros_liker   r.  r7  r(   r)   sortedr   	_interpd_removezipravelrI   r/   r   )
r[  Nr  r   maskr0   ax_gridinterpsinterprn   s
             r4    test_imshow_masked_interpolationrT    sF   
 ==#11s#31OD
Aaac!e,A99QqS&..q!4DDJ DK 66DL==%%f-DDK55dD)D<<1%LCV%%&GNN6NN=!'7==?3 

V
		$QT	@
r6   c                  V    t        j                  ddgdt        j                  gg       y )Nr   r   r#   )r(   r/   r*   r6   r6   r4   test_imshow_no_warn_invalidrW    s    JJABFF$%r6   r!   zu2 u4 i2 i4 i8 f4 f8c                 D   t        j                  d|       j                  d      }| j                  dk7  r|dz  }|dk  }|dkD  }| j                  dk(  r|dz  }t	        j
                         \  }}|j                  |      j                         }||   dk(  j                         sJ | j                  dk(  r4||   d	k(  j                         sJ |j                  j                  dk(  sJ y ||   dk(  j                         sJ |j                  t         j                  k(  sJ y )
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_rangerb    s	    ))Cu
%
-
-k
:CzzSr	AgGSyHzzSCiLLNEAr
))C.
"
"
$CLA""$$$zzSH"'')))yy~~$$$H$))+++yyBHH$$$r6   zimshow_flatfield.pngc                      t        j                         \  } }|j                  t        j                  d      d      }|j                  dd       y )Nr   rG   r%   r   r  )r(   r)   r/   r*   r,   set_climr0   rn   r   s      r4   test_imshow_flatfieldrf    s9    llnGC	2776?)	<BKKCr6   zimshow_bignumbers.pngc                      dt         d<   t        j                         \  } }t        j                  g dg dgt        j
                        }|j                  |      }|j                  dd       y )NrG   image.interpolation)r   r   g   mB)r#   r   r   r    r   r   )r   r(   r)   r*   rH   uint64r/   rd  r0   rn   r3   pcs       r4   test_imshow_bignumbersrl    sR    &/H"# llnGC
((L),BII
>C	3BKK1r6   zimshow_bignumbers_real.pngc                      dt         d<   t        j                         \  } }t        j                  g dg dg      }|j                  |      }|j                  dd       y )NrG   rh  )r  r   gMD)r  r   r  r   r   )r   r(   r)   r*   rH   r/   rd  rj  s       r4   test_imshow_bignumbers_realrn    sN     '0H"# llnGC
((O\2
3C	3BKK1r6   	make_normc                  ,    t        j                  d      S Nr   )r	   
SymLogNormrV  r6   r4   <lambda>rs    s    Vq! r6   c                  ,    t        j                  d      S rq  )r	   	PowerNormrV  r6   r4   rs  rs    s    Va  r6   c                    t        j                         \  }}t        j                  t        d      5  |j                  g g |              }d d d        j                  g d       |j                  j                          t        j                  t              5  |j                  |j                  j                                d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz.Attempting to set identical low and high xlimsr  rK  )r   rx  r   )r(   r)   r=  warnsUserWarningr/   
set_extentr  r  r>  RuntimeError
make_imageget_renderer)ro  r0   rn   r   s       r4   test_empty_imshowr    s     llnGC	kL
N /YYt)+Y./ MM.!JJOO	|	$ 1
cjj--/01 1/ /1 1s   C*CCC#c                      t        j                         \  } }|j                  t        j                  dt        j
                               | j                  j                          y )Nru  r    )r(   r)   r/   r*   r+   float16r  r  r0   rn   s     r4   test_imshow_float16r  #  s:    llnGCIIbhhvRZZ01JJOOr6   c                     t        j                         \  } }|j                  t        j                  dt        j
                               t        j                  t        j
                  t        j                  d      r
t               nt        j                  t              5  | j                  j                          d d d        y # 1 sw Y   y xY w)Nru  r    equiv)r(   r)   r/   r*   r+   
longdoublecan_castfloat64r   r=  ry  rz  r  r  r  s     r4   test_imshow_float128r  *  sy    llnGCIIbhhvR]]34R]]BJJH)+||K( 	

  s   "CCc                      t        j                         \  } }|j                  t        j                  ddgddggt
                     y )NTFr    )r(   r)   r/   r*   rH   r  r  s     r4   test_imshow_boolr  3  s5    llnGCIIbhhut}5TBCr6   c                      t        j                         \  } }|j                  t        j                  dt        j
                               | j                  j                          y )Nr  )r(   r)   r/   r*   r   r6  r  r  r  s     r4   test_full_invalidr  8  s:    llnGCIIbggh'(JJOOr6   zfmt,counted)r   s    colorimage)r9   s   <imagezcomposite_image,count)Tr   )Fr   c                 (   t        j                  t        j                  ddd      t        j                  ddd            \  }}t        j                  |dz        }t	        j
                         \  }}|j                  dd       |j                  |g d       |j                  |d d d	   g d
       |t        j                  d<   t        j                         }	|j                  |	|        |	j                         j                  |      |k(  sJ y )Nrx  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     ;;ryyQ*BIIb!Q,?@DAq
qAvAllnGCKK1IIaI%IIa"glI+,;CLL()
**,CKKCK <<>(E111r6   c                      t        j                         \  } }|j                  dggd       |j                          |j	                          |j                         |j                         cxk(  rdk(  sJ  J y )Nr   r  r  rv  )r(   r)   r/   relim	autoscaleget_xlimget_ylimr  s     r4   
test_relimr  R  s\    llnGCIIseLI)HHJLLN;;=BKKM3V33333r6   c                  r   t        j                         \  } }|j                          |j                  ddgddggdddd      }|j	                  dd       | j
                  j                          t        j                  | j
                  j                               d	d d
f   dk(  j                         sJ y )Nr   rw   rX  rZ  F)r  r  r[  r  rv  r  .r#   )r(   r)   r  r/   r  r  r  r*   rH   buffer_rgbar]  re  s      r4   test_unclippedr  Z  s    llnGCOO	QFQF#F;M 
 
/BFFVF$JJOO HHSZZ++-.sBQBw71<AACCCr6   c                  6   t        j                  d      \  } }|D ]  }|j                           |d   j                  ddgddggdd      }|j	                  d        |j                  |d   j                         t        j                         }| j                  |d	       h |j                         d
hk(  sJ |d   j                  d       t        j                         }| j                  |d	       |j                         |j                         k7  sJ y )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  f  s    ||AHC 
	QAA'|	LBT OOCFKK JKK
6K*#Z  "#v---FJJGJ

IKK	&K) I$6$6$8888r6   c                     t        j                         \  } }|j                  t        j                  d            }t        j
                  j                  dgdg      }|j                  |      dk(  sJ t        j
                  j                  dgdg      }|j                  |      dk(  sJ t        j                  }|j                  |      dk(  sJ y )	Nr   r   TrP  r   Fz[0]z[nan])	r(   r)   r/   r*   r+   r.  r7  r"  r6  )r0   rn   r   r   s       r4   test_image_cursor_formattingr  x  s    llnGC	288F#	$B55qc/D  &$...55qc0D  &%///66D  &'111r6   c                    t        j                  dd      }t        j                  ||      \  }}t        j                  d|dz
  dz  z  |dz
  z         }||j	                         z  }t
        j                  d   }| j                         }|j                  |||d	       |j                         } | t        j                         |            }	||	d
<   |j                  |	d       y)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  rz  rG  ry  r/   r	   r  )
r~   r   rb   xxyyzzr   r[  rn   r  s
             r4   test_image_array_alphar    s     	AqA[[AFB	SQ'2=9	:BME==#D				BIIbD	IB				B"  "2&'DDMIId)I,r6   c                      t        j                  t        d      5  t        j                  t        j                  d      ddg       d d d        y # 1 sw Y   y xY w)Nzalpha must be a float, two-dr  rR   r   r   )r=  r>  r?  r(   r/   r*   r+   rV  r6   r4   !test_image_array_alpha_validationr    sA    	y(F	G 3

288F#Aq623 3 3s   -AAc                     t        t        j                  d         } | j                  d       t	        j
                  dd      }|j                  g d      }t        j                  g dgt        	      }|j                  |d
| dd      }|j                  d       |j                  j                          |j                  |j                  j                        d   d   }|j!                  |j#                  |dggdz  z  j$                  j'                                     dz  j)                  t*              }t        j,                  ||k(        sJ y )Nautumn_r	lightgrey)color)gffffff?ro  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  rF  r   rr   rD   )r   rz  rG  	set_underr(   r^   r]  r*   rH   r  r/   r   r  r  r}  r  r[  rK  TrN  r   r{   r]  )r[  r0   rn   r   r   
from_imagedirect_computations          r4   test_exact_vminr    s   j)*DNNN% **ZS
1C	l	#B88	MND
 
4T	DBGGENJJOO szz223A6q9J 	1#,//55789C?fSk 
 66* 22333r6   image_placementc                  T   t        j                         \  } }|j                  g dg ddd       t        j                  j                  d       |j                  t        j                  j                  dd      dd	d
dd       |j                  dd       |j                  dd       y)zK
    The red box should line up exactly with the outside of the image.
    )r   r   r   r   r   )r   r   r   r   r   ra  ro  )r  r  ru   r   r  r  r$   r]   r   )r[  r  r&   r  r  grn  N)
r(   r)   rh   r*   rx   ry   r/   randnr   r   r  s     r4   test_image_placementr    s     llnGCGGO_CCG@IINN8IIbiioob"%GL"!  5KKeKKer6   c                   @     e Zd Zd Zd Z fdZd Zed        Z xZ	S )
QuantityNDc                 \    t        j                  |      j                  |       }||_        |S r  )r*   r  viewunits)clsinput_arrayr  objs       r4   __new__zQuantityND.__new__  s'    jj%**3/	
r6   c                 (    t        |dd       | _        y Nr  )getattrr  )selfr  s     r4   __array_finalize__zQuantityND.__array_finalize__  s    S'4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__  s@    gt,g!$'c:&%*;S%(C
r6   c                    t        ||      }d|v rt        S t        |      dk(  r0|d   }t        |dd      } |t        j                  |      fi |}nXt        |      dk(  rC|d   }|d   }	t        |dd      }
t        |	dd      }|
|n|
}
||
n|}|t        j
                  t        j                  fv r|
|k7  rt        |
}n|t        j                  k(  r|
 d| }n|t        j                  k(  r	|
 d| d	}ng|t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  fv rd }nt        S  ||j!                  t        j"                        |	j!                  t        j"                        fi |}nt        S |t        j$                  |      }|S t'        ||      }|S )
Nra  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inputsr?  funci0unitout_arri1u0u1s               r4   __array_ufunc__zQuantityND.__array_ufunc__  s   uf%F?!!v;!B2w8D2::b>4V4G[ABBWo6BWo6BzrBzrB--8$$"++%Qrd|"))#Rt1~2::r'7'788R\\77BMM3 3 %%2772::.

0CNvNG!!<hhw'G  !$/Gr6   c                 @    | j                  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%N % %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        y # 1 sw Y   y xY w)Nr   r   mr#   zm*mzm/(m)s)	r  r*   r]  r   r  r  r=  r>  r  )qq0q1s      r4   test_quantityndr    s    Aq63AqTFB66!##QF++,,,77c>>6627++QC0111G??e###G??g%%%	z	"  
Z3     s   C66C?c                      t        t        j                  d      d      } t        j                         \  }}|j                  |        |j                  j                          y )NrR   r  )r  r*   r,   r(   r)   r/   r  r  )r   r0   rn   s      r4   test_imshow_quantityndr    s>    
RWWV_c
*CllnGCIIcNJJOOr6   c                    t        j                  ddt         j                        }d|ddd d f<   t         j                  j	                  |d      }d	|j
                  ddddf<   t        j                  d
   j                  d      }| j                         }|j                  |t        j                  dd      dd|      }|j                  t        j                  dd             |j                  |t        j                  dd      dd|      }|j                  t        j                  dd             |j                  dd       |j                         }|j                  |t        j                  dd      dd|       |j                  |t        j                  dd      dd|       |j                  dd       y )Nr   r   r    r]   r   r   Fr  Tr  wr!  r   rD  r0  rG   )rK  r  r&   r[  r  )r   rr   r   rr   r   rr   r  )r*   r   r  r.  rH   rP  rz  rG  r-  r)   r/   r	   rM  r  r  r  )r~   r   r   masked_datar[  rn   r   s          r4   test_norm_changer     s    7761BJJ/DD1aL%%++d+/K!%KQqS!A#X==#111<D				B	4fnn#A>&id 
 
LBKK  bq12	;V^^1%E(	 
 
NBKK  bq12FFgF&				BIId))r:!  GIIk 0 0bq A#94  IFFgF&r6   rb   c                 .   t        j                  d|t         j                        }d|ddd d f<   | j                         }|j	                  |t        j                  d|j                               dd	
       t        j                  d|t         j                        }d|ddd d f<   |j                         }t        j                  d	   j                  d      }|j	                  |t        j                  d|j                               d|
       y )Nr   r    g@xDr   r   r   rD  rG   r  )rK  r&   r[  i  r   r  )r*   r   r  r)   r/   r	   rM  r  rz  rG  r-  r  )r~   r   rb   r   rn   r[  s         r4   test_huge_range_logr  <  s     7761BJJ/DD1aL				BIIdQTXXZ@%I  7 7761BJJ/DD1aL				B==#111<DIId))qtxxzB%D  2r6   c           
      R   | j                  dd      }|j                  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 ]O  \  }\  }}||   j                  |       ||   j	                  |       ||   j                  |       ||   j                  |dddddd	       ||   j                  d
d       ||   j                  dd
       ||   j                  j                          ||   j                  j                  d       ||   j                  j                  d       ||   j                  j                  t        j                  dg dd             ||   j                   j                  t        j                  dg dd             R y )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)   	enumeraterM  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  P  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q	))a}dK	
 	q	))a}dK	

r6   znonuniform_and_pcolor.pngc                     t        j                  d      j                  ddd      } t        | ddg      D ]  \  }}t	        ||      }|j                  t        j                  d      d	z  t        j                  d      d	z  t        j                  d
      j                  d             |j                  |        | d	   j                  t        j                  d      d	z  t        j                  d      d	z  t        j                  d
      j                  d             | D ]$  }|j                          |j                  d       & y )Nru  rT  r#   T)sharexshareyrG   r'   r%   r   r  r   r  )r  )r(   r^   r)   rM  r   r  r*   r`   r	  r  
pcolorfastr  r  )r   rn   r&   r   s       r4   test_nonuniform_and_pcolorr!  q  s
   
**V
$
-
-aT
-
JC y*&=> MR}=
BIIaLA%ryy|q'8IIaL((0	2
R	
 F
		!299Q<1,biil.B.B6.JL 

Gr6   znonuniform_logscale.pngc                  z   t        j                  dd      \  } }t        d      D ]  }||   }t        |      }|j	                  t        j                  dd      dz  t        j                  dd      dz  t        j                  d      j                  d             |j                  dd       |j                  dd       |j                  d       |dk(  r&|j                  d	d
       |j                  d	d
       |dk(  r&|j                  d	d
       |j                  d	d
       |j                  |        y )Nr#   r   )ncolsnrowsr   r   r  ru  r   r  )base)r(   r)   rL  r   r  r*   r`   r	  r   r   set_box_aspect
set_xscale
set_yscaler  )r`  r   r  rn   r   s        r4   test_nonuniform_logscaler)    s   \\+FAs1X VR 
BIIaOq("))Aq/Q*>IIaL((0	2
Ar
Ar
!6MM%aM(MM%aM(6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                        }|j                  d       |j                  d       |j!                         }|d   j#                  |d|dd       |d   j%                  |dz  dz
  |dz  dz   g       |d   j'                  |dz  dz   |dz  d	z
  g       |d   j#                  |d|dd       |d   j#                  |dd |dd!       |d"   j#                  |dd#|dd!       y )$Nr   )      @r+  FT)rU   r  r  constrained_layout   r]   r   rr   K   r  r   rp  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{   r6  r   r,  RdBu_rset_overr  r  r/   r   r   )r0   r   rO  aarb   rc   rJ   r  Rf0r   rd  r[  s                r4   test_rgba_antialiasr=    s   ||Aq*U#(TCHCA	!QBBssAvJ
		!q3A
		!q3A;;q!DAq
1q!tA	B
A
ruuqyBFQAX\123A .0Ais1Q3xilOAis1Q3xilOc)*-.Ais1Q3xilOAis1Q3xilOc)*C!HIBq#ac()| vvBr"ube|Br"ube|Br"ube|Br"uc#g~Br"uc#g~DMM(NN6
++-CFMM"IDt#MNFOOQqSVQqSV$%FOOQqSVQqSV$% FMM"IDt#MN FMM"F$S  2
 FMM"F$S  2r6   )rP   c                    t         j                  j                  d       t         j                  j                  dd      }|j	                         }|j                  |ddd       | j	                         }|j                  |ddd       y)	z[
    Show that interpolation_stage='auto' gives the same as 'data'
    for upsampling.
    *N,r   r'   r  r   r&   r[  r6  rw   Nr*   rx   ry   rz   r)   r/   r~   r   gridrn   s       r4   !test_upsample_interpolation_stagerD    sz     IINN:99>>!QD				BIId*9"(  * 
			BIId*9"(  *r6   c                    t         j                  j                  d       t         j                  j                  dd      }|j	                         }|j                  |ddd       | j	                         }|j                  |ddd       y)z]
    Show that interpolation_stage='auto' gives the same as 'rgba'
    for downsampling.
    ru   i  rw   r  r  r@  NrA  rB  s       r4   #test_downsample_interpolation_stagerF    sz     IINN899>>$%D				BIId&y"(  * 
			BIId&y"(  *r6   c                  R   dD ]N  } t        j                  d| i      5  t        j                  ddgg      j	                         | k(  sJ 	 d d d        P dD ]7  } t        j                  t              5  | t         j                  d<   d d d        9 y # 1 sw Y   xY w# 1 sw Y   PxY w)Nr   r  zimage.interpolation_stager   r   )DATAfooN)	rz  
rc_contextr(   r/   get_interpolation_stager=  r>  r  r   )vals    r4   test_rc_interpolation_stagerN    s     I^^8#>? 	I::1vh'??ASHHH	I 	II % <]]:& 	<8;CLL45	< 	<<	I 	I	< 	<s   ,B2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           	      $   | j                         }|j                         }t        j                  d|dz   f      }d|d d |j                  dz  d f<   |dk(  r|j                  }|j                  |ddddd|      }	t        j                  t        d	| d
      5  | j                  j                          d d d        t        j                  d      }d|d d df<   |dk(  r|j                  }|j                  |ddddd|      }	y # 1 sw Y   QxY w)Nr   r   rP  r   rw   r  r$   )r  r  r  r  r&   r\   zData with more than z  cannot be accurately displayed.r  rx  )r)   r*   r+   sizer  r/   r=  ry  rz  r  r  )
r~   r   dimrR  msgr\   r  r  rH   r   s
             r4   test_large_imagerU    s    !GFHHa]#E!"E!UZZ1_

e|	AA%l&,% 
 
'B
 
k23% 8. .
/  	
 HHVEE!Q$K
e|	u11V*%+$ 
 
&B s   DDc                    t         j                  j                  dd      dz  dz   }| j                  dd      }|d   j	                  |d       |d   j	                  |dd	
       |d   j	                  |d       |d   j	                  |ddd       |d   j	                  |ddd       |j                  dd      }|d   j	                  |t        j                                |d   j	                  |t        j                  d	             |d   j	                  |t        j                  d             |d   j	                  |t        j                  ddd             |d   j	                  |dd       t        |d   j                  d   j                        t
        j                  u sJ t        j                  t              5  |d   j	                  |d       d d d        y # 1 sw Y   y xY w)Nrr   g?ro  r   r   r   r  rw  r  )rK  r  r   symlogr#   rp  r  )rK  r  r  r   logit)r  )	linthresh)rY  r  r  )rp  r  )rK  climfoobar)r*   rx   rz   r)   r/   r	   rM  rr  typeimagesrK  r=  r>  r  )r~   r   r{  axtsaxrss        r4   test_str_normsr`  $  s   
		r2#b(AQ"DGNN15N!GNN15rN*GNN18N$GNN18"2N6GNN17"N5Aq!DGNN16>>+N,GNN16>>r2N3GNN16,,q9N:GNN16,,qrKNLGNN17N2Qq!&&'6>>999	z	" )Qqx() ) )s   G--G6c                     t        j                  t        j                  j                  t                     } t        j                  t        d      5   | t        j                  d      d        d d d        t        j                  t        d      5   | t        j                  d      t        j                  d             d d d        t        j                  t        d      5   | t        j                  d      t        j                  d             d d d        t        j                  t        d      5   | t        j                  d      t        j                  d             d d d        t        j                  t        d	      5   | t        j                  d      t        j                  d             d d d        t        j                  t        d
      5   | t        j                  dt        j                        t        j                  d             d d d        t        j                  t        d      5   | t        j                  d      t        j                  d      j                         d d d        t        j                  d      }d|j                  _        t        j                  t        d      5   | t        j                  d      |       d d d        y # 1 sw Y   |xY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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partialrz  _imageresampler   r=  r>  r?  r*   r+   r  r.   r  flags	writeable)re  ra  s     r4   test__resample_valid_outputrh  :  s;     !4!4
KH	y(I	J )&!4()	z)E	F 8&!288I#678	z)E	F 8)$bhhv&678	z)F	G ;)$bhhy&9:;	z)G	H ;)$bhhy&9:;	z);	< ?&"((+RXXf-=>?	z)?	@ 7&!288F#3#5#567 ((6
CCII	z)I	J (&!3'( (#) )8 88 8; ;; ;? ?7 7
( (s`   K*0K7&0L90L0L?L+:L8M*K47LLLL(+L58MMc                     t        j                         } t        |       }t        j                  t
        d      5  |j                          d d d        t        j                  dt              j                  d      }|j                  |       |j                         dk(  sJ |j                         |j                         k(  sJ y # 1 sw Y   }xY w)Nz"You must first set the image arrayr  rV  r    r  )r(   r  r   r=  r>  r|  	get_shaper*   r`   r  r	  r  get_sizer  s      r4   test_axesimage_get_shaperl  Q  s    	B	2B	|+O	P 

		"E"**62AKKN<<>V###;;=BLLN*** s   CCc                     t        j                         j                         } t        j                  d      j                  d      }| j                  || j                         | j                         dk(  sJ | j                  |t               j                  d      | j                  z          | j                         dk(  sJ | j                  || j                  d       | j                         dk(  sJ y )Nr   rR   r  rw   r   r   )r  r  )r(   r^   ry  r*   r`   r	  r/   r  
get_aspectr   r  r
  r  s     r4   .test_non_transdata_image_does_not_touch_aspectro  ]  s    		!	!	#B	1		f	%BIIbBLLI)==?f$$$IIbHJ,,Q/",,>I?==?aIIbBLLI3==?ar6   zdownsampling.pngg
ףp=
?c                  P   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   j                  |	ddd       |d   j                  dd       |d   j                  dd       |d   j                  d       t        |j                  dd  g dg d      D ]3  \  }}}|j                  |	||d       |j                  d| d| d       5 y )Ni  r   r]   r   r   rS   r  r   rp  r#   )r  r   
compressedrU   layoutr'  rG   r  r8  )r&   r6  r[  }   r  r-  r;  Zoom)rG   rG   rq   rq   rw   )r   r  r   r  rw   zinterpolation='z	'
space='')r*   r`   r,   r  r7  ra   r  r{   r(   r)   r/   r   r   rI   rM  flat)rO  rb   rc   r:  rJ   r  r;  r<  r   rd  r0   r   rn   rS  spaces                  r4   test_downsamplingry  h  s?    	A
		!q3A
		!q3A	!QBBssAvJ;;q!DAq
1q!tA	
BA
ruuqyBFQAX\123A13Aks1q5zk1naQUQ'#-.12Aks1q5zk1naQUQ'#-.1c!a%jk>*Bq#a!e*+~
A||Aq&FHCIQiV"  $IsC IsC I !" 0C!IK CFE 			!6u 	 	!
vhjqABCr6   zdownsampling_speckle.pngc                  d   t        j                  dddddd      \  } }|j                         }t        j                  d      j                  dd      t        j                  d	      z  d
z  j                  }t        j                  d      }|j                  d       t        j                  dd      }|d   j                  d       |d   j                  t        j                  |      ||d       |d   j                  d       |d   j                  t        j                  |      ||       y )Nr   r   )r   g@Trq  )rU   r  r  rs  i   r]   i  rX   r  r  r#   rl  rD  r   z"interpolation='auto', stage='rgba'r  )r[  rK  r6  z"interpolation='auto', stage='auto')r[  rK  )r(   r)   r  r*   r`   r	  r,   r  get_cmapr9  r	   rM  rI   r/   triu)r0   r   r3   r,  rK  s        r4   test_downsampling_speckler}    s     ||Aq(4#/1HC
++-CIIdO##B*RWWS\9b@
C
CC	i	 BKK>>qr*D
 F9:FMM"''#,RdMO F9:FMM"''#,RdM3r6   zupsampling.png)r   r   c                     t         j                  j                  d       t         j                  j                  dd      } t	        j
                  dddd      \  }}|d   j                  | d	
      }|d   j                  d       |d   j                  | d	d       |d   j                  d       |d   j                  | d	dd       |d   j                  d       |j                  ||dd       y )Nr?  r   r   r#   )g      @r#   rq  rr  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&   r6  z!interpolation='sinc'
stage='rgba'r  r%  )rn   shrinkr'  )	r*   rx   ry   rz   r(   r)   r/   rI   r  )rd  r0   r   r   s       r4   test_upsamplingr    s     IINN:
		q!A||Aq(<HHC	Qqy	)BFMO FMM!)6M:FFH FMM!)6vMVF9:LLCL7r6   )r  float32int16r   int8r.   ndim)r   r#   c                 8   t         j                  j                  d      }|dk(  rdnd}|j                  |      j	                  t        j
                  | d            }t        j                         \  }}|j                  |      }|j                  d       d    y )	NiU  r   rR   )r   r   r#   )rR  Tr   r   )
r*   rx   default_rnguniformr   r!   r(   r)   r/   r}  )r!   r  rngr   r   r0   rn   
axes_images           r4   test_resample_dtypesr    sz     ))


%CaiFYE;;E;"))"((5t*DEDllnGC4J$"r6   
intp_stagerH  c                    | j                  dd      }|j                  dd      }d\  }}d}t        j                  j                  ||      }t        j                  j                  ||d      }	t        j                  ||df      }
t        j
                  |	|j                  ||df      fd      }|d   d   j                  |	       |d   d   j                  t        j
                  |	|
fd             |d   d   j                  |	||	       |d   d   j                  t        j
                  |	||
z  fd      |
       |d   d   j                  |	||	       |d   d   j                  ||
       |d   d   j                  |       |d   d   j                  |	|       |d   d   j                  |||	       |d   d   j                  t        j
                  |	||j                  ||df      z  fd      |
       t        j                  j                  ||      }|d   d   j                  |||	       |d   d   j                  t        j
                  |	|j                  ||df      fd      |
       y )Nr   r#   ru  r   r   r]   r   r   )r6  r   )r6  r   )r)   r*   rx   rz   r,   r   r	  r/   )r~   r   r  axs_tstaxs_refnynxscalar_alphaarray_alphaim_rgbim_concat_default_aim_rgbanew_array_alphas                r4   2test_interpolation_stage_rgba_respects_alpha_paramr    s    1%Gq!$GFBL))..R(K YY^^BA&F''2r1+.nn	$$b"a[12G AJqM AJqM1D(EBOPAJqMZ|TAJqM
\$778r	
)  
 AJqMZ{SAJqMjA AJqM!AJqM{3AJqMjUAJqM
\K$7$7R$DDEB	
)  
 iinnR,OAJqMjXAJqM
_,,b"a[9:	
)  r6   )
contextlibr   r   rb  ri   r   pathlibr   r  r  urllib.requestr  numpyr*   numpy.testingr   PILr   
matplotlibrz  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   r   contextr   r  r  r6  r$  r-  r7  r9  rA  rE  rH  rR  re  ri  rs  r|  r  r  r  r  r  r  r  r  r  r  r`   r	  r  r  r  r  r  r  r  r3  r8  r;  r@  machinerT  rW  splitr!   rb  rf  rl  rn  r  rM  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r)  r=  rD  rF  rN  filterwarningsrU  r`  rh  rl  ro  ry  r}  r  r  r  )r  s   0r4   <module>r     s       	 	   
   ,  F F< < O A A #  %&D9	. :	. +,#U^?+?+  ,udm<:,E5>:B ; =B ' (. ). ( )" (	) )	)$$  >?- @-D, GW#56@ 7@  BCA DA*2)4 =/t46 56 7( ) 0D+N 	3Z	3Z	3Z	3Z	3Z#Y	2Y	& 
P
P* %.	=),#661a.	4 g,/0r(Xa&8DD <.0 1 #$G4 5 ( ) ,-4@I AI =/tO PF8 /0"'33 *+> ?4 (% )% $%#U^WN!N!: ()t7K L0 GF 34"'33!'0-- 		2			"yryy~'='=f'E	G		2			"yryy}'<'<V'D	F11B $%48 9 >"5 66	%3( ./TsK> L>> <.d3+ 4+" )*=
* >
* 01+8++-9at"'33D& #9#?#?#ABahbhhqkBD%D%& )*GL M *+WM N /0"'33 ^^! "#	1#	1D
 02DEG09j2IJ2 KG2 4	D9$2 - -$3
 74 48 $%5%."'3
3
"9% 9%x	  (' )'6 r1g&(2 ) '2$ (
 )
@ ./w? @ ,-W= >( '(TtT22 U22j 	** +*& 	** +*$<  = >GW#569689 	*& +9 7>&> () ))*(.	+  TtECECB  TtM4M4* g49898* > (	# )	
	# '78)  9)[ Cs    _1
