a
    ߙfb*                     @   s4  d Z ddlZddlZddlZddlmZ eejZ	eej
Zeedeeejd Zee	de	ee	jd Zdeej> Zejdddede	ede	e ge	dZejd	ddgd
d Zejd	deeeegdd Zejdddeegdd Zejdg ddd Zejddddddgddfddgddfgdd Zejd	g ddd  Zejd!g d"d#d$ Zejd!d%d&d'd(d)d*d+gdfd,d-d.d/d0d1d2gd3d4 Zejd5g d6d7d8 Zejd	dd9d9ge gd:d; Z!ejd	d<d=gd>d? Z"d@dA Z#ejd	g dBdCgdDdE Z$dFdG Z%ejd	g dHdIdJ Z&dKdL Z'ejdMedddej(ej)dg fedddej(ej)dg fedegddej(g dNfedddej(ej)dg fedegddej(g dOfedegddej*g dPfgdQdR Z+ejd	dSdgdTdU Z,dVdW Z-ejd	ddgdXdY Z.ejd	g dZd[d\ Z/ejd]ddgd^d_ Z0ejd]ddgd`da Z1ejd]ddgdbdc Z2ejd]ddgddde Z3dfdg Z4ejd	ddgdhdi Z5ejd	g dZdjdk Z6dldm Z7dndo Z8dpdq Z9drds Z:dS )tzz
A module containing unit tests for the `bitmask` module.

Licensed under a 3-clause BSD style license - see LICENSE.rst

    N)bitmask         )dtypeflagc                 C   s   t j| drJ d S N)nr   Z_is_bit_flagr    r   @lib/python3.9/site-packages/astropy/nddata/tests/test_bitmask.pytest_nonpositive_not_a_bit_flag   s    r   c                 C   s   t j| dsJ d S r	   r   r   r   r   r   test_is_bit_flag$   s    r   numberc                 C   s   t | sJ d S Nr   Z_is_intr   r   r   r   test_is_int+   s    r   )1T      ?c                 C   s   t | rJ d S r   r   r   r   r   r   test_nonint_is_not_an_int0   s    r   zflag,flip,expected)   Nr   )r   T)r   Fr   Fr   Tr   c                 C   s   t j| |d|ksJ d S N)	bit_flags	flip_bitsr   interpret_bit_flags)r   flipexpectedr   r   r   "test_interpret_valid_int_bit_flags5   s    	r"   )N NoneIndefc                 C   s   t j| dd u sJ d S Nr   r   r   r   r   r   %test_interpret_none_bit_flags_as_NoneB   s    r(   zflag,expected))r   r   )z~-1r   )z~1)z1,2r   )z1|2r   )z1+2r   )z(1,2)r   )z(1+2)r   )z~1,2r   )z~1+2r   )z~(1,2)r   )z~(1+2)r   c                 C   s   t j| d|ksJ d S r&   r   )r   r!   r   r   r   "test_interpret_valid_str_bit_flagsG   s    r*   )CRr   )z~CRr)   )zCR|HOTr   )zCR,HOTr   )zCR+HOTr   r+   HOT)z(CR,HOT)r   )z(HOT+CR)r   )z~HOT,CRr   )z~CR+HOTr   )z	~(HOT,CR)r   )z	~(HOT|CR)r   )z	~(CR+HOT)r   c                 C   s*   t jdddd}t j| |d|ks&J d S )NDetectorMapr   r   )r+   r,   )r   Zflag_name_map)r   extend_bit_flag_mapr   )r   r!   Zflagmapr   r   r   'test_interpret_valid_mnemonic_bit_flags[   s
    r/   z	flag,flip)
)NT)r#   T)r$   T)r%   T)NF)r#   F)r$   F)r%   F)r   T)r   Fc                 C   s<   t t tj| |d W d    n1 s.0    Y  d S r   pytestraises	TypeErrorr   r   )r   r    r   r   r   3test_interpret_None_or_str_and_flip_incompatibilitys   s    r4   r   c                 C   s:   t t tj| d W d    n1 s,0    Y  d S r&   r0   r   r   r   r   test_interpret_wrong_flag_type   s    r5   Z	SOMETHINGz1.0,2,3c                 C   s:   t t tj| d W d    n1 s,0    Y  d S r&   r1   r2   
ValueErrorr   r   r   r   r   r   &test_interpret_wrong_string_int_format   s    r8   c                  C   s   t jddf} t d tg ddks.J t| s:J t| d jtsNJ dt	| d j
v sdJ W d    n1 sx0    Y  d S )NT)recordalways)r      r;      r   Z	Duplicate)warningscatch_warningssimplefilterr   r   len
issubclasscategoryUserWarningstrmessage)wr   r   r   %test_interpret_duplicate_flag_warning   s    
rG   )r   r   r   z1, 2, 3c                 C   s:   t t tj| d W d    n1 s,0    Y  d S r&   r6   r   r   r   r   test_interpret_non_flag   s    rH   c                   C   s   t jtdddksJ d S )Nr   r'   )r   r   rD   r   r   r   r   .test_interpret_allow_single_value_str_nonflags   s    rI   )	~z( )z(~1,2)z~(1,2z1,~2z1,(2,4)z1,2+4z1+4,2z1|4+2c                 C   s:   t t tj| d W d    n1 s,0    Y  d S r&   r6   r   r   r   r   test_interpret_bad_str_syntax   s    rK   c                   C   s:   t t tdd W d    n1 s,0    Y  d S )Nr   r   )r1   r2   r3   r   bitfield_to_boolean_maskr   r   r   r   #test_bitfield_must_be_integer_check   s    rM   z!data,flags,flip,goodval,dtype,ref)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   c                 C   s8   t j| ||||d}|j|ks"J t||ks4J d S )N)ZbitfieldZignore_flagsr   Zgood_mask_valuer   )r   rL   r   npall)dataflagsr    Zgoodvalr   refmaskr   r   r   test_bitfield_to_boolean_mask   s    rT   )r;   Zflag1c                 C   st   t | }t| trd|| d ks$J |j| d ks6J t j|  }|| d ksPJ |j| d kspJ n|| kspJ d S )Nr   r   )r   BitFlag
isinstancetuple__doc__)r   fr   r   r   test_bitflag   s    


rZ   c                   C   s:   t t tdd W d    n1 s,0    Y  d S )N)r   Zdocs1Zdocs2)r1   r2   r7   r   rU   r   r   r   r   test_bitflag_docs2   s    r[   c                 C   s<   t tj t| d W d    n1 s.0    Y  d S Nzcustom flagr1   r2   r   InvalidBitFlagrU   r   r   r   r   test_bitflag_not_pow2   s    r_   )g        Tr   c                 C   s>   t tj t| df W d    n1 s00    Y  d S r\   r]   r   r   r   r   test_bitflag_not_int_flag   s    r`   cachingc                 C   s`   |  tdd G dd dtj}G dd d|}|jdks>J |jjdksNJ |jd	ks\J d S )
N_ENABLE_BITFLAG_CACHINGFc                   @   s   e Zd ZdZdZdZdZdS )z(test_basic_map.<locals>.ObservatoryDQMapr   )r   
cosmic rayr   r;   N__name__
__module____qualname___not_a_flagr+   r,   DEADr   r   r   r   ObservatoryDQMap   s   rj   c                   @   s   e Zd ZdZdZdZdS )z#test_basic_map.<locals>.DetectorMap1.0      N)re   rf   rg   __version__rh   READOUT_ERRr   r   r   r   r-      s   r-   r   rc   rm   )setattrr   BitFlagNameMapZcrrX   ro   monkeypatchra   rj   r-   r   r   r   test_basic_map   s    rt   c                 C   sT   |  td| G dd dtj}tjd|dddd}|jd	ksBJ |jdksPJ d S )
Nrb   c                   @   s   e Zd ZdZdZdZdS )z)test_extend_map.<locals>.ObservatoryDQMapr   r   r;   Nre   rf   rg   r+   r,   ri   r   r   r   r   rj     s   rj   r-   rk   r;   rm   )rn   ri   ro   r   )rp   r   rq   r.   r+   readout_errrr   r   r   r   test_extend_map  s    rw   c                 C   s   |  td| G dd dtj}tt" tjd|ddd W d    n1 sR0    Y  tt$ tjd|dddd	 W d    n1 s0    Y  d S )
Nrb   c                   @   s   e Zd ZdZdZdZdS )z7test_extend_map_redefine_flag.<locals>.ObservatoryDQMapr   r   r;   Nru   r   r   r   r   rj     s   rj   r-   rk       )rn   ri   @   )rn   ri   Zdead)rp   r   rq   r1   r2   AttributeErrorr.   )rs   ra   rj   r   r   r   test_extend_map_redefine_flag  s"    $r{   c                 C   s   |  td| G dd dtj}tt  G dd d|}W d    n1 sP0    Y  tt& G dd d|}d|_W d    n1 s0    Y  tt$ tjd	|d
ddd W d    n1 s0    Y  d S )Nrb   c                   @   s   e Zd ZdZdZdZdZdS )z0test_map_redefine_flag.<locals>.ObservatoryDQMapr   r   r   r;   Nrd   r   r   r   r   rj   :  s   rj   c                   @   s   e Zd ZdZdZdS )z,test_map_redefine_flag.<locals>.DetectorMap1rk   rm   Nre   rf   rg   rn   r+   r   r   r   r   DetectorMap1A  s   r}   c                   @   s   e Zd ZdZdZdS )z,test_map_redefine_flag.<locals>.DetectorMap2r   rm   N)re   rf   rg   SHADEZ_FROZENr   r   r   r   DetectorMap2F  s   r   rx   r-   rm      )ro   r~   rv   )rp   r   rq   r1   r2   rz   Znovelr.   )rs   ra   rj   r}   r   r   r   r   test_map_redefine_flag6  s    .$r   c                  C   sb   G dd dt j} | jdks J | jdks.J tt d| _W d    n1 sT0    Y  d S )Nc                   @   s   e Zd ZdZdZdS )z6test_map_cant_modify_version.<locals>.ObservatoryDQMap1.2.3r   Nr|   r   r   r   r   rj   V  s   rj   r   r   z3.2.1)r   rq   rn   r+   r1   r2   rz   )rj   r   r   r   test_map_cant_modify_versionU  s
    r   c                    s|   t t tjd d W d    n1 s.0    Y  t t& G  fdddtj}W d    n1 sn0    Y  d S )Nr-   ri   c                       s   e Zd Z ZdS )z*test_map_not_bit_flag.<locals>.DetectorMapN)re   rf   rg   ri   r   r   r   r   r-   g  s   )r1   r2   r7   r   r.   rq   )r   r-   r   r   r   test_map_not_bit_flaga  s    ,r   c                    s   t tj tjd d W d    n1 s00    Y  t tj& G  fdddtj}W d    n1 sr0    Y  d S )Nr-   r   c                       s   e Zd Z ZdS )z/test_map_not_int_flag.<locals>.ObservatoryDQMapN)re   rf   rg   r+   r   r   r   r   rj   q  s   rj   )r1   r2   r   r^   r.   rq   )r   rj   r   r   r   test_map_not_int_flagk  s    ,r   c                  C   st   t jddd} tt | j W d    n1 s40    Y  tt | d  W d    n1 sf0    Y  d S Nr-   r   r   DEAD1r   r.   r1   r2   rz   r   r-   r   r   r   test_map_access_undefined_flagu  s
    $r   c                  C   sp   t jddd} tt | `W d    n1 s20    Y  tt | d= W d    n1 sb0    Y  d S r   r   r   r   r   r   test_map_delete_flag  s
    "r   c                  C   s"   t jddd} t| dksJ d S )Nr-   r   r   z<BitFlagNameMap 'DetectorMap'>)r   r.   reprr   r   r   r   test_map_repr  s    r   c                  C   s   t jddd} | ddd }|jdks*J |jdks8J |jjdksHJ |jdksVJ | d	d
g }|jdkspJ |jdks~J | d	 }|jdksJ |jdksJ d S )Nr-   r   )r+   r   )r;   a really dead pixel)r,   ri   r   r;   )r,   r   )ri   r;   )r   r.   r+   r,   ri   rX   )Zmap1Zmap2r   r   r   test_map_add_flags  s    r   );rX   r=   ZnumpyrN   r1   Zastropy.nddatar   Zmaximum_sctypeZint_ZMAX_INT_TYPEZuintZMAX_UINT_TYPEZ
left_shiftZiinfobitsZMAX_UINT_FLAGZMAX_INT_FLAGZSUPER_LARGE_FLAGZarrayZEXTREME_TEST_DATAZmarkZparametrizer   intr   r   r   r"   r(   r*   r/   r4   objectr5   r8   rG   rH   rI   rK   rM   Zbool_sizeZint8rT   rZ   r[   r_   r`   rt   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   









	


	













	
	

