U
    e»{jx,  ã                   @   sb  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 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
ržd dlZeejƒed	ƒk Ze d
dd¡Ze d¡Zde Ze ddd¡Zeƒ edƒeƒ fZ dej! dfZ"ej#j$e
dd�dd„ ƒZ%ej#j$e
 dd�G dd„ dƒƒZ&ej#j$e
 dd�G dd„ dƒƒZ'ej#j$e dd�dd„ ƒZ(dS )é    N)Úma)Úassert_allcloseÚassert_equal)ÚVersion)ÚHAS_MATPLOTLIBÚHAS_PLT)ÚManualIntervalÚPercentileInterval)ÚImageNormalizeÚimshow_normÚsimple_norm)Ú
LogStretchÚPowerStretchÚSqrtStretchz3.2ç        g      .@é   é   ç      à?g      Àç      @é   éÿÿÿÿzmatplotlib is installed)Úreasonc                	   C   s$   t jtdd�� tƒ  W 5 Q R X d S )Nz2matplotlib is required in order to use this class.)Úmatch)ÚpytestÚraisesÚImportErrorr
   © r   r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/visualization/tests/test_norm.pyÚtest_normalize_error_message   s
     ÿr   zrequires matplotlibc                   @   sz   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zej de¡dd„ ƒZdS )ÚTestNormalizec              	   C   s*   t  t¡� tddtdd� W 5 Q R X d S )Nç       @ç      $@T)ÚvminÚvmaxÚintervalÚclip)r   r   Ú	TypeErrorr
   r   ©Úselfr   r   r   Útest_invalid_interval%   s    z#TestNormalize.test_invalid_intervalc              	   C   s*   t  t¡� tddtdd� W 5 Q R X d S )Nr    r!   T©r"   r#   Ústretchr%   )r   r   r&   r
   r   r'   r   r   r   Útest_invalid_stretch)   s    z"TestNormalize.test_invalid_stretchc              	   C   s(   t  t¡� tddd d� W 5 Q R X d S )Nr    r!   )r"   r#   r+   )r   r   Ú
ValueErrorr
   r'   r   r   r   Útest_stretch_none-   s    zTestNormalize.test_stretch_nonec                 C   sN   t ddtƒ dd�}t dtddƒtƒ dd�}t|dƒd	ƒ t|dƒ|dƒƒ d S )
Nr    r!   Tr*   r   é   é
   )Údatar$   r+   r%   çß'Üež æ?)r
   r   r   r   ©r(   ÚnormÚnorm2r   r   r   Útest_scalar1   s       ÿzTestNormalize.test_scalarc                 C   sv   t ddtƒ dd�}t ttddƒtƒ dd�}|tƒ}dd	d
dddg}t||ƒ t|jddddddgƒ t||tƒƒ d S )Nr    r!   Tr*   r/   r0   ©r$   r+   r%   r   çß'Üež Ö?r2   çí°.êîí?ç      ð?r   )r
   r   ÚDATAr   r   Úmask©r(   r4   r5   ÚoutputÚexpectedr   r   r   Ú	test_clip9   s       ÿ
zTestNormalize.test_clipc                 C   s    t ddtƒ dd d�}t ttddƒtƒ dd d�}|tƒ}tjdd	d
ddg}t||ƒ t|jddddddgƒ t| |tƒ¡dd … tdd … ƒ t||tƒƒ d S )Nr    r!   F©r"   r#   r+   r%   Úinvalidr/   r0   ©r$   r+   r%   rB   r8   r2   r9   ç½Üí›wãñ?ç1C€_eeô?r   é   )	r
   r   r;   r   ÚnpÚnanr   r<   Úinverser=   r   r   r   Útest_noclipD   s(        ÿû
$zTestNormalize.test_noclipc                 C   sÈ   t d dtƒ dd�}t ttd dƒtƒ dd�}|tƒ}|jt t¡ksFt‚|jdksTt‚t	||tƒƒ t dd tƒ dd�}t ttdd ƒtƒ dd�}|tƒ}|jdks¢t‚|jt 
t¡ks¶t‚t	||tƒƒ d S )Nr!   Fr*   r0   r7   r    r/   )r
   r   r;   r   r"   rG   ÚminÚAssertionErrorr#   r   Úmax)r(   r4   r5   r>   r   r   r   Útest_implicit_autoscaleV   s,       ÿ   ÿz%TestNormalize.test_implicit_autoscalec                 C   s„   t  d¡}tdddd�}||dd�}t|jddd	ddgƒ t  |j ¡sLt‚||dd�}t|jd
dd	ddgƒ t  |j ¡s€t‚dS )z;Test that the clip keyword is used when calling the object.é   r:   r   F)r"   r#   r%   T)r%   r   r   g      à¿g      ø?N)rG   Úaranger
   r   r1   Úallr<   rL   )r(   r1   r4   r>   r   r   r   Útest_call_clipi   s    
zTestNormalize.test_call_clipc                 C   s–   t jtddddddgd�}tddtƒ dd�}t|tdd	ƒtƒ dd
�}||ƒ}ddddddg}t| d¡|ƒ t|jddddddgƒ t|||ƒƒ d S )Nr   rF   ©r<   r    r!   Tr*   r/   r0   r7   r   r8   r:   r9   éöÿÿÿ)	r   Úarrayr;   r
   r   r   r   Úfilledr<   ©r(   Zmdatar4   r5   r>   r?   r   r   r   Útest_masked_clipv   s       ÿzTestNormalize.test_masked_clipc                 C   sÀ   t jtddddddgd�}tddtƒ dd d�}t|tdd	ƒtƒ dd d
�}||ƒ}tjdddddg}t| 	d¡|ƒ t|j
ddddddgƒ t| |tƒ¡dd … tdd … ƒ t|||ƒƒ d S )Nr   rF   rS   r    r!   FrA   r/   r0   rC   r8   rT   r9   rD   rE   )r   rU   r;   r
   r   r   rG   rH   r   rV   r<   rI   rW   r   r   r   Útest_masked_noclip‚   s*        ÿû$z TestNormalize.test_masked_noclipc           	      C   s  t  d¡ d¡}t j|d< t j|d< d}t|ƒ}t|d�}||ƒ t|j|j	fdƒ t||d�}t|j|j	f|j|j	fƒ t
|d|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@)rO   rO   )r/   r/   )rF   r/   g     @U@)r$   )gffffffú?gš™™™™Y6@Úlinear)Úpercent)r   é   )rG   rP   ZreshaperH   Úinfr	   r
   r   r"   r#   r   r   )	r(   r1   r[   r$   r4   r5   Únorm3Znorm4Znorm5r   r   r   Útest_invalid_data–   s&    


zTestNormalize.test_invalid_datar+   c                 C   s¢   t |dddd d�}t |dddd�}t t|d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   rF   F©r+   r"   r#   r%   rB   )r+   r"   r#   r%   ç      ð¿r   r/   )ra   ra   )r
   ÚDATA3r   rG   rH   )r(   r+   Únorm1r5   r^   Zresult1Zresult2Zresult3r   r   r   Útest_invalid_keyword³   s.        ÿ     ÿz"TestNormalize.test_invalid_keywordN)Ú__name__Ú
__module__Ú__qualname__r)   r,   r.   r6   r@   rJ   rN   rR   rX   rY   r_   r   ÚmarkÚparametrizeÚ	STRETCHESrd   r   r   r   r   r   #   s   r   c                   @   sz   e Zd Zdd„ Zdd„ Zej de¡dd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestImageScalingc                 C   s$   t tdd�}t|tƒtddd� dS )úTest linear scaling.rZ   ©r+   r   çñhãˆµøä>©ZatolZrtolN©r   ÚDATA2r   ÚDATA2SCL©r(   r4   r   r   r   Útest_linearÇ   s    zTestImageScaling.test_linearc                 C   s*   t tdd�}t|tƒt t¡ddd� dS )zTest sqrt scaling.Úsqrtrm   r   rn   ro   N)r   rq   r   rG   ru   rr   )r(   rc   r   r   r   Ú	test_sqrtÌ   s    zTestImageScaling.test_sqrtrB   c                 C   sB   t ƒ }ttdddd|d�}t|ddd|d�}t|tƒ|tƒƒ d S )Nru   r   rF   F)r+   Úmin_cutZmax_cutr%   rB   r`   )r   r   rb   r
   r   )r(   rB   r+   rc   r5   r   r   r   Útest_sqrt_invalid_kwÑ   s"         ÿ    ÿz%TestImageScaling.test_sqrt_invalid_kwc                 C   s.   d}t td|d�}t|tƒt| ddd� dS )zTest power scaling.r   Úpower)r+   ry   r   rn   ro   Nrp   )r(   ry   r4   r   r   r   Ú
test_powerÜ   s    zTestImageScaling.test_powerc                 C   s@   t tdd�}t dt d ¡t d¡ }t|tƒ|ddd� d	S )
zTest log10 scaling.Úlogrm   iè  r:   g     H�@r   rn   ro   N©r   rq   rG   Úlog10rr   r   ©r(   r4   Úrefr   r   r   Útest_logâ   s    zTestImageScaling.test_logc                 C   sJ   d}t td|d�}t |t d ¡t |d ¡ }t|tƒ|ddd� d	S )
z'Test log10 scaling with a custom log_a.éd   r{   )r+   Úlog_ar:   rF   r   rn   ro   Nr|   )r(   r‚   r4   r   r   r   r   Útest_log_with_log_aè   s     z$TestImageScaling.test_log_with_log_ac                 C   s<   t tdd�}t dt ¡t d¡ }t|tƒ|ddd� dS )zTest asinh scaling.Úasinhrm   r0   r   rn   ro   N©r   rq   rG   Zarcsinhrr   r   r~   r   r   r   Ú
test_asinhï   s    zTestImageScaling.test_asinhc                 C   sF   d}t td|d�}t t| ¡t d| ¡ }t|tƒ|ddd� dS )	z)Test asinh scaling with a custom asinh_a.r   r„   )r+   Úasinh_ar:   r   rn   ro   Nr…   )r(   r‡   r4   r   r   r   r   Útest_asinh_with_asinh_aõ   s    z(TestImageScaling.test_asinh_with_asinh_ac                 C   sF   d}t td|d�}t t| ¡t d| ¡ }t|tƒ|ddd� dS )	zTest sinh scaling.r   Úsinh)r+   Úsinh_arF   r   rn   ro   N)r   rq   rG   r‰   rr   r   )r(   rŠ   r4   r   r   r   r   Ú	test_sinhü   s    zTestImageScaling.test_sinhc                 C   s.   t tdddd�}t|tƒdddgddd� d	S )
rl   rZ   r:   T)r+   rw   r%   r   r   rn   ro   N)r   rq   r   rs   r   r   r   Útest_min  s    zTestImageScaling.test_minc                 C   sR   t tdddd�}t|tƒtddd� t tddd	dd
�}t|tƒ|tƒddd� dS )zTest percent keywords.rZ   g     ÀX@T)r+   r[   r%   r   rn   ro   r   g     àX@)r+   Zmin_percentZmax_percentr%   Nrp   r3   r   r   r   Útest_percent  s        ÿzTestImageScaling.test_percentc              	   C   s&   t  t¡� ttdd� W 5 Q R X dS )zTest invalid stretch keyword.rB   rm   N)r   r   r-   r   rq   r'   r   r   r   r,     s    z%TestImageScaling.test_invalid_stretchN)re   rf   rg   rt   rv   r   rh   ri   ÚINVALIDrx   rz   r€   rƒ   r†   rˆ   r‹   rŒ   r�   r,   r   r   r   r   rk   Å   s   


rk   zrequires matplotlib.pyplotc               	   C   sÐ   dd l m}  tj dd¡}|  ¡  | jdd�}t||d� t 	t
¡� t|||d� W 5 Q R X t 	t
¡� t||tƒ d� W 5 Q R X |  ¡  t||ddd	� |  ¡  t|d d�\}}t|tƒsÂt‚|  d
¡ d S )Nr   r0   Útest_imshow_norm)Úlabel)Úax)ÚXr‘   )r‘   r4   rF   )r‘   r"   r#   rQ   )Zmatplotlib.pyplotZpyplotrG   ÚrandomZrandnZclfZsubplotr   r   r   r-   r
   Ú
isinstancerL   Úclose)ZpltÚimager‘   Zimresr4   r   r   r   r�     s    r�   ))ÚnumpyrG   r   r   Znumpy.testingr   r   Zpackaging.versionr   Z"astropy.utils.compat.optional_depsr   r   Zastropy.visualization.intervalr   r	   Z#astropy.visualization.mpl_normalizer
   r   r   Zastropy.visualization.stretchr   r   r   Z
matplotlibÚ__version__ZMATPLOTLIB_LT_32Zlinspacer;   rP   rq   rr   rb   rj   r]   rŽ   rh   Zskipifr   r   rk   r�   r   r   r   r   Ú<module>   s4   

 "R