
    IR-e+                        d dl Zd dlZd dl mZ d dlmZmZ d dl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mZmZ  ej        dd	d
          Z ej        d          Zdez  Z ej        ddd          Z e             ed           e            fZdej         dfZej                            ed          d             Z ej                            e d           G d d                      Z!ej                            e d           G d d                      Z"ej                            e	 d          d             Z#dS )    N)ma)assert_allcloseassert_equal)HAS_MATPLOTLIBHAS_PLT)ManualIntervalPercentileInterval)ImageNormalizeimshow_normsimple_norm)
LogStretchPowerStretchSqrtStretch        g      .@            ?g            @   zmatplotlib is installed)reasonc                      t          j        t          d          5  t                       d d d            d S # 1 swxY w Y   d S )Nz2matplotlib is required in order to use this class.)match)pytestraisesImportErrorr
        Elib/python3.11/site-packages/astropy/visualization/tests/test_norm.pytest_normalize_error_messager       s    	P
 
 
   	                 s   8<<zrequires matplotlibc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zej                            de          d             ZdS )TestNormalizec                     t          j        t                    5  t          ddt          d           d d d            d S # 1 swxY w Y   d S )N       @      $@T)vminvmaxintervalclip)r   r   	TypeErrorr
   r   selfs    r   test_invalid_intervalz#TestNormalize.test_invalid_interval   s    ]9%% 	T 	T$dSSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T   A  AAc                     t          j        t                    5  t          ddt          d           d d d            d S # 1 swxY w Y   d S )Nr$   r%   Tr&   r'   stretchr)   )r   r   r*   r
   r   r+   s    r   test_invalid_stretchz"TestNormalize.test_invalid_stretch#   s    ]9%% 	P 	P$$OOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Pr.   c                     t          j        t                    5  t          ddd            d d d            d S # 1 swxY w Y   d S )Nr$   r%   )r&   r'   r1   )r   r   
ValueErrorr
   r+   s    r   test_stretch_nonezTestNormalize.test_stretch_none'   s    ]:&& 	> 	>$====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   :>>c                    t          ddt                      d          }t          dt          dd          t                      d          }t           |d          d	           t           |d           |d                     d S )
Nr$   r%   Tr0   r      
   )datar(   r1   r)   'e?)r
   r   r   r   r,   normnorm2s      r   test_scalarzTestNormalize.test_scalar+   s    3T;==tTTT^Ar22KMMPT
 
 
 	Q,,,Qq*****r   c                 Z   t          ddt                      d          }t          t          t          dd          t                      d          } |t                    }g d}t	          ||           t	          |j        g d	           t	          | |t                               d S )
Nr$   r%   Tr0   r7   r8   r(   r1   r)   )r   'e?r:   .?      ?rC   r   r   r   r   r   r   )r
   r   DATAr   r   maskr,   r<   r=   outputexpecteds        r   	test_clipzTestNormalize.test_clip3   s    3T;==tTTT>!R00+--d
 
 
 dFFF)))%7%7%7888d,,,,,r   c                    t          ddt                      dd           }t          t          t          dd          t                      dd           } |t                    }t          j        dd	d
ddg}t          ||           t          |j        g d           t          |                     |t                              dd          t          dd                     t          | |t                               d S )Nr$   r%   Fr&   r'   r1   r)   invalidr7   r8   r(   r1   r)   rM   rA   r:   rB   w?1C_ee?rD      )	r
   r   rE   r   npnanr   rF   inverserG   s        r   test_noclipzTestNormalize.test_noclip>   s    4UD
 
 
 #Ar**MM
 
 
 dFJ
J
JW)))%7%7%7888TT$ZZ004d122h???d,,,,,r   c                    t          d dt                      d          }t          t          t          d d          t                      d          } |t                    }|j        t          j        t                    k    sJ |j        dk    sJ t          | |t                               t          dd t                      d          }t          t          t          dd           t                      d          } |t                    }|j        dk    sJ |j        t          j	        t                    k    sJ t          | |t                               d S )Nr%   Fr0   r8   r@   r$   r7   )
r
   r   rE   r   r&   rR   minr'   r   max)r,   r<   r=   rH   s       r   test_implicit_autoscalez%TestNormalize.test_implicit_autoscaleP   s?   4dKMMPUVVV>$33[]]QV
 
 
 dyBF4LL((((yD    d,,,3T;==uUUU>!T22KMMPU
 
 
 dyCyBF4LL((((d,,,,,r   c                 R   t          j        d          }t          ddd          } ||d          }t          |j        g d           t          j        |j                   sJ  ||d          }t          |j        g d	           t          j        |j                   sJ d
S )z;Test that the clip keyword is used when calling the object.   rC   r   F)r&   r'   r)   T)r)   )r   r   r   rC   rC   )g      r   r   rC   g      ?N)rR   aranger
   r   r9   allrF   )r,   r9   r<   rH   s       r   test_call_clipzTestNormalize.test_call_clipc   s    y||3Su===d&&&V["7"7"7888vv{l#####d'''V[":":":;;;vv{l#######r   c                    t          j        t          g d          }t          ddt	                      d          }t          |t          dd          t	                      d	          } ||          }g d
}t          |                    d          |           t          |j        g d           t          | ||                     d S )Nr   r   rQ   r   r   r   rF   r$   r%   Tr0   r7   r8   r@   )r   rA   rC   rB   rC   rC   rD   )	r   arrayrE   r
   r   r   r   filledrF   r,   mdatar<   r=   rH   rI   s         r   test_masked_clipzTestNormalize.test_masked_clipp   s    $6$6$67773T;==tTTTN1b11;==t
 
 
 e???c**H555%7%7%7888e-----r   c                 H   t          j        t          g d          }t          ddt	                      dd           }t          |t          dd          t	                      dd 	          } ||          }t          j        d
ddddg}t          |	                    d          |           t          |j
        g d           t          |                     |t                              dd          t          dd                     t          | ||                     d S )Nr`   ra   r$   r%   FrL   r7   r8   rN   rA   rb   rB   rO   rP   rQ   )r   rc   rE   r
   r   r   rR   rS   r   rd   rF   rT   re   s         r   test_masked_noclipz TestNormalize.test_masked_noclip|   s   $6$6$67774UD
 
 
 #Ar**MM
 
 
 eFJZZPc**H555%7%7%7888TT$ZZ004d122h???e-----r   c                 f   t          j        d                              d          }t           j        |d<   t           j        |d<   d}t          |          }t          |          } ||           t          |j        |j	        fd           t          ||          }t          |j        |j	        f|j        |j	        f           t          |d|	          }t          |j        |j	        f|j        |j	        f           t           ||           ||                     t           ||           ||                     t                      } ||           t          |j        |j	        fd
           t          |          }t          |j        |j	        f|j        |j	        f           d S )Ng      9@)r[   r[   )r7   r7   )rQ   r7   g     @U@)r(   )gffffff?gY6@linear)percent)r      )rR   r\   reshaperS   infr	   r
   r   r&   r'   r   r   )	r,   r9   rl   r(   r<   r=   norm3norm4norm5s	            r   test_invalid_datazTestNormalize.test_invalid_data   s   y&&v..VT
VT
%g.. x000T


di+];;; th777ej%*-	49/EFFFD(G<<<ej%*-	49/EFFFT

EE$KK000T

EE$KK000  dej%*-w777t$$ej%*-
EJ/GHHHHHr   r1   c                    t          |dddd           }t          |ddd          }t          t          |dddd          } |t                    } |t                    } |t                    }t          |dd         t          j        t          j        f           t          |dd         d	           t          |dd          |dd                     t          ||           d S )
Nr   rQ   Fr1   r&   r'   r)   rM   )r1   r&   r'   r)         r   r7   )rv   rv   )r
   DATA3r   rR   rS   )r,   r1   norm1r=   rp   result1result2result3s           r   test_invalid_keywordz"TestNormalize.test_invalid_keyword   s    "15$
 
 
 wRaeLLL7!%
 
 
 %,,%,,%,,WQqS\BFBF#3444WQqS\<000WQRR['!""+...Wg&&&&&r   N)__name__
__module____qualname__r-   r2   r5   r>   rJ   rU   rY   r^   rg   ri   rs   r   markparametrize	STRETCHESr|   r   r   r   r"   r"      s        T T TP P P> > >+ + +	- 	- 	-- - -$- - -&$ $ $
. 
. 
.. . .(I I I: [Y	22' ' 32' ' 'r   r"   c                       e Zd Zd Zd Zej                            de          d             Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )TestImageScalingc                 ~    t          t          d          }t           |t                    t          dd           dS )Test linear scaling.rk   r1   r   h㈵>atolrtolNr   DATA2r   DATA2SCLr,   r<   s     r   test_linearzTestImageScaling.test_linear   s9    5(333UXAFCCCCCCr   c                     t          t          d          }t           |t                    t          j        t
                    dd           dS )zTest sqrt scaling.sqrtr   r   r   r   N)r   r   r   rR   r   r   )r,   rx   s     r   	test_sqrtzTestImageScaling.test_sqrt   sC    E6222ebgh&7&7afMMMMMMr   rM   c                     t                      }t          t          dddd|          }t          |ddd|          }t	           |t                     |t                               d S )Nr   r   rQ   F)r1   min_cutmax_cutr)   rM   ru   )r   r   rw   r
   r   )r,   rM   r1   rx   r=   s        r   test_sqrt_invalid_kwz%TestImageScaling.test_sqrt_invalid_kw   su    --62qug
 
 
 "15'
 
 
 	UU5\\55<<00000r   c                     d}t          t          d|          }t           |t                    t          |z  dd           dS )zTest power scaling.r   power)r1   r   r   r   r   Nr   )r,   r   r<   s      r   
test_powerzTestImageScaling.test_power   sD    5'???UXu_16JJJJJJr   c                     t          t          d          }t          j        dt          z  dz             t          j        d          z  }t           |t                    |dd           d	S )
zTest log10 scaling.logr   i  rC   g     H@r   r   r   Nr   r   rR   log10r   r   r,   r<   refs      r   test_logzTestImageScaling.test_log   s`    5%000hth,--0@0@@USqv>>>>>>r   c                     d}t          t          d|          }t          j        |t          z  dz             t          j        |dz             z  }t           |t                    |dd           d	S )
z'Test log10 scaling with a custom log_a.d   r   )r1   log_arC   rQ   r   r   r   Nr   )r,   r   r<   r   s       r   test_log_with_log_az$TestImageScaling.test_log_with_log_a   sl    5%u===hux'#-..%!)1D1DDUSqv>>>>>>r   c                     t          t          d          }t          j        dt          z            t          j        d          z  }t           |t                    |dd           dS )zTest asinh scaling.asinhr   r8   r   r   r   Nr   r   rR   arcsinhr   r   r   s      r   
test_asinhzTestImageScaling.test_asinh   sY    5'222jh''"*R..8USqv>>>>>>r   c                     d}t          t          d|          }t          j        t          |z            t          j        d|z            z  }t           |t                    |dd           dS )	z)Test asinh scaling with a custom asinh_a.r   r   )r1   asinh_arC   r   r   r   Nr   )r,   r   r<   r   s       r   test_asinh_with_asinh_az(TestImageScaling.test_asinh_with_asinh_a   sg    5'7CCCjG+,,rz#-/H/HHUSqv>>>>>>r   c                     d}t          t          d|          }t          j        t          |z            t          j        d|z            z  }t           |t                    |dd           dS )	zTest sinh scaling.r   sinh)r1   sinh_arQ   r   r   r   N)r   r   rR   r   r   r   )r,   r   r<   r   s       r   	test_sinhzTestImageScaling.test_sinh   sg    5&@@@gh'((271v:+>+>>USqv>>>>>>r   c                 |    t          t          ddd          }t           |t                    g ddd           d	S )
r   rk   rC   T)r1   r   r)   )r   r   rC   r   r   r   N)r   r   r   r   s     r   test_minzTestImageScaling.test_min   sA    5(CdKKKU___16JJJJJJr   c                    t          t          ddd          }t           |t                    t          dd           t          t          ddd	d
          }t           |t                     |t                    dd           dS )zTest percent keywords.rk   g     X@T)r1   rl   r)   r   r   r   r   g     X@)r1   min_percentmax_percentr)   Nr   r;   s      r   test_percentzTestImageScaling.test_percent  s    5(DtLLLUXAFCCCC8$T
 
 
 	UUU5\\GGGGGGr   c                     t          j        t                    5  t          t          d           ddd           dS # 1 swxY w Y   dS )zTest invalid stretch keyword.rM   r   N)r   r   r4   r   r   r+   s    r   r2   z%TestImageScaling.test_invalid_stretch  s    ]:&& 	2 	2y1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   >AAN)r}   r~   r   r   r   r   r   r   INVALIDr   r   r   r   r   r   r   r   r   r2   r   r   r   r   r      s        D D D
N N N
 [Y001 1 101K K K? ? ?? ? ?? ? ?? ? ?? ? ?K K K
H H H2 2 2 2 2r   r   zrequires matplotlib.pyplotc                     dd l m}  t          j                            dd          }|                                  |                     d          }t          ||           t          j	        t                    5  t          |||           d d d            n# 1 swxY w Y   t          j	        t                    5  t          ||t                                 d d d            n# 1 swxY w Y   |                                  t          ||dd	           |                                  t          |d           \  }}t          |t                    sJ |                     d
           d S )Nr   r8   test_imshow_norm)label)ax)Xr   )r   r<   rQ   )r   r&   r'   r]   )matplotlib.pyplotpyplotrR   randomrandnclfsubplotr   r   r   r4   r
   
isinstanceclose)pltimager   imresr<   s        r   r   r     s   ######IOOB##EGGIII	-	.	.B"	z	"	" + +EUr****+ + + + + + + + + + + + + + + 
z	"	" 9 9Eb~'7'788889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 GGIII"11---- GGIIIe---KE4dN+++++IIes$   ;BB!B>C))C-0C-)$numpyrR   r   r   numpy.testingr   r   "astropy.utils.compat.optional_depsr   r   astropy.visualization.intervalr   r	   #astropy.visualization.mpl_normalizer
   r   r   astropy.visualization.stretchr   r   r   linspacerE   r\   r   r   rw   r   ro   r   r   skipifr    r"   r   r   r   r   r   <module>r      sH              7 7 7 7 7 7 7 7 F F F F F F F F M M M M M M M M X X X X X X X X X X O O O O O O O O O Or{3a  	!;D#q!![]]LL--zz||<	"&"
 N+DEE  FE &/DEE^' ^' ^' ^' ^' ^' ^' FE^'B &/DEEO2 O2 O2 O2 O2 O2 O2 FEO2d K(DEE  FE  r   