a
    ߙfb                     @   s  d Z ddlZddlZddlmZ ddlZddlmZ	 ddl
mZ ddlmZ ddlmZmZ dd	 Zd
eddddgZG dd dZG dd deZG dd deZG dd deZdd Zdd Zdd ZG dd dZG dd dZG dd  d eeZG d!d" d"eZG d#d$ d$eZG d%d& d&eZ G d'd( d(eZ!G d)d* d*e!eZ"G d+d, d,e!eZ#G d-d. d.eZ$G d/d0 d0eZ%G d1d2 d2e%Z&G d3d4 d4e%eZ'G d5d6 d6e%eZ(G d7d8 d8eZ)G d9d: d:e)Z*G d;d< d<e)eZ+G d=d> d>e)eZ,G d?d@ d@eZ-G dAdB dBe-eZ.G dCdD dDe-eZ/G dEdF dFeZ0dGdH Z1dIdJ Z2dKdL Z3dMdN Z4G dOdP dPeZ5G dQdR dRe5eZ6G dSdT dTeZ7G dUdV dVeZ8G dWdX dXe8eZ9dS )YzxTest masked class initialization, methods, and operators.

Functions, including ufuncs, are tested in test_functions.py
    N)assert_array_equal)units)Quantity)	Longitude)MaskedMaskedNDArrayc                 C   s    t | j|j t | j|j d S N)r   unmaskedmaskab r   Elib/python3.9/site-packages/astropy/utils/masked/tests/test_masked.pyassert_masked_equal   s    r   )   r   r   r   c                   @   s   e Zd ZejZedd ZdS )
ArraySetupc                 C   s   t ddd| _t g dg dg| _t g d| _t g d| _t dgdgg| _t d	gd
gg| _	t 
ddg| _t 
ddg| _t jddgddgg| jd| _t jddgddgg| jd| _t jddg| jd| _t jddg| jd| _d S )Ng      @      TFFFTF)      g       g      g      ?g      ?FT)r   f8)r   r   )r   ?)r   r         ?       @      @      @)g      &@g      (@)g      *@g      ,@dtypeTTFFFT)TF)r   r   )nparangereshaper   arraymask_ar   mask_bcmask_cr!   sdtmask_sdtsamask_sasbmask_sbselfr   r   r   setup_class!   s0    



zArraySetup.setup_classN)__name__
__module____qualname__r%   ndarray	_data_clsclassmethodr5   r   r   r   r   r      s   r   c                       s$   e Zd ZeZe fddZ  ZS )QuantitySetupc                    sj   t    t| jtj| _t| jtj| _t| jtj	| _t| j
tj| jd| _
t| jtj| jd| _d S )Nr    )superr5   r   r   umr   cmr+   Zkmr/   r-   r1   r3   	__class__r   r   r5   9   s    
zQuantitySetup.setup_class)r6   r7   r8   r   r:   r;   r5   __classcell__r   r   rA   r   r<   6   s   r<   c                       s$   e Zd ZeZe fddZ  ZS )LongitudeSetupc                    s>   t    t| jtj| _t| jtj| _t| jtj| _d S r   )r=   r5   r   r   r>   Zdegr   r+   r3   rA   r   r   r5   F   s    
zLongitudeSetup.setup_class)r6   r7   r8   r   r:   r;   r5   rC   r   r   rA   r   rD   C   s   rD   c                   @   s   e Zd Zdd Zdd ZdS )TestMaskedArrayInitializationc                 C   s   t | j| jd}t|tjs J t|t| js4J t|t sBJ t|j| j t|j	| j |j	| jusnJ t
|j	| jsJ d S Nr
   )r   r   r)   
isinstancer%   r9   typer   r	   r
   may_share_memoryr4   mar   r   r   test_simpleQ   s    z)TestMaskedArrayInitialization.test_simplec                 C   s   t | j| jd}t|tjs J t|t| js4J t|t sBJ t|j| j t|j	| j |j	| jusnJ t
|j	| jsJ d S rF   )r   r/   r0   rH   r%   r9   rI   r   r	   r
   rJ   rK   r   r   r   test_structured[   s    z-TestMaskedArrayInitialization.test_structuredN)r6   r7   r8   rM   rN   r   r   r   r   rE   P   s   
rE   c                  C   s   t jdtd} t g d}|  }t jdt|d}t||  tdt||d}t|j|  t|j	| tdt|d}t|j|  t|j	t 
dt d S )Nr   r    r   )r   )shaper!   buffer)r!   r
   rP   )r!   rP   )r%   r&   intr(   tobytesr9   r   r   r	   r
   zerosbool)Za_inZm_inZbuffr   rL   r   r   r   test_masked_ndarray_initf   s    
rU   c                   C   s>   t jtdd ttjj W d    n1 s00    Y  d S )Nzcannot handle np.ma.maskedmatch)pytestraises
ValueErrorr   r%   rL   maskedr   r   r   r   "test_cannot_initialize_with_maskedx   s    r\   c                  C   s`   G dd dt j} t ddg| }tjtdd t| W d    n1 sR0    Y  d S )Nc                   @   s   e Zd ZdZdS )zEtest_cannot_just_use_anything_with_a_mask_attribute.<locals>.my_arrayTN)r6   r7   r8   r
   r   r   r   r   my_array~   s   r]   r   r   r	   rV   )r%   r9   r(   viewrX   rY   AttributeErrorr   )r]   r   r   r   r   3test_cannot_just_use_anything_with_a_mask_attribute}   s    r`   c                   @   sD   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	dd Z
dS )TestMaskedClassCreationzTry creating a MaskedList and subclasses.

    By no means meant to be realistic, just to check that the basic
    machinery allows it.
    c                 C   s:   t j | _t j | _G dd dt tttd}|| _d S )Nc                       s0   e Zd Zddd fdd
Zedd Z  ZS )z7TestMaskedClassCreation.setup_class.<locals>.MaskedListNF)r
   copyc                   s(   t  | }|j|i ||_||_|S r   )r=   __new__r:   	_unmaskedr
   )clsr
   rb   argskwargsr4   rA   r   r   rc      s    z?TestMaskedClassCreation.setup_class.<locals>.MaskedList.__new__c                 S   s   t | jfS r   )lenrd   r3   r   r   r   rO      s    z=TestMaskedClassCreation.setup_class.<locals>.MaskedList.shape)r6   r7   r8   rc   propertyrO   rC   r   r   rA   r   
MaskedList   s   rj   )Zbase_clsZdata_cls)r   _base_classesrb   _base_classes_orig_masked_classes_masked_classes_origlistrj   )r4   rj   r   r   r   r5      s    z#TestMaskedClassCreation.setup_classc                 C   s   | j t_| jt_d S r   )rl   r   rk   rn   rm   r3   r   r   r   teardown_class   s    z&TestMaskedClassCreation.teardown_classc                 C   s6   t | jtsJ t | jts J tt| ju s2J d S r   )
issubclassrj   r   ro   r3   r   r   r   
test_setup   s    z"TestMaskedClassCreation.test_setupc                 C   sv   | j tdg dd}|jg dks(J t|jtg d |d d }|jddgks\J t|jtdd	g d S )
Nr   r   rG   r   r   r   r   r   r   TF)rj   ranger	   r   r
   r%   r(   )r4   mlZml01r   r   r   test_masked_list   s    z(TestMaskedClassCreation.test_masked_listc                 C   s@   t g dg dd}|jg dks&J t|jtg d d S )N)r   r   r   r   rG   )r   r	   r   r
   r%   r(   )r4   ru   r   r   r   test_from_list   s    z&TestMaskedClassCreation.test_from_listc                 C   s   G dd dt }|td}t|g dd}t|ts:J t||sHJ t|j|sXJ |jg dksjJ t|jtg d t|t	|u sJ d S )Nc                   @   s   e Zd ZdS )zATestMaskedClassCreation.test_masked_list_subclass.<locals>.MyListNr6   r7   r8   r   r   r   r   MyList   s   ry   r   r   rG   rs   )
ro   rt   r   rH   r	   r   r
   r%   r(   rI   )r4   ry   ru   Zmmlr   r   r   test_masked_list_subclass   s    z1TestMaskedClassCreation.test_masked_list_subclassN)r6   r7   r8   __doc__r;   r5   rp   rr   rv   rw   rz   r   r   r   r   ra      s   
ra   c                   @   sj   e Zd ZdZedd Zdd Zdd Zdd	 Ze	j
d
eejjgdd Zdd Zdd Zdd ZdS )!TestMaskedNDArraySubclassCreationzCTest that masked subclasses can be created directly and indirectly.c                 C   sH   G dd dt j}|| _t ddg| j| _t jddgtd| _d S )Nc                   @   s   e Zd Zdd ZdS )z>TestMaskedNDArraySubclassCreation.setup_class.<locals>.MyArrayc                 _   s   t j|i || S r   )r%   Z
asanyarrayr^   )re   rf   rg   r   r   r   rc      s    zFTestMaskedNDArraySubclassCreation.setup_class.<locals>.MyArray.__new__N)r6   r7   r8   rc   r   r   r   r   MyArray   s   r}   r   r   TFr    )r%   r9   r}   r(   r^   r   rT   r?   )r4   r}   r   r   r   r5      s    z-TestMaskedNDArraySubclassCreation.setup_classc                 C   s   t j| jd  d S r   )r   rm   popr}   )r4   methodr   r   r   teardown_method   s    z1TestMaskedNDArraySubclassCreation.teardown_methodc                 C   s   | j tjvsJ t| j }t|ts(J t|| j s8J |jdksFJ |jdsVJ || j| jd}t	||stJ t
|j| j t
|j| j d S )NZMaskedMyArrayzMasked version of MyArrayrG   )r}   r   rm   rq   r6   r{   
startswithr   r?   rH   r   r	   r
   r4   mclsmmsr   r   r   test_direct_creation   s    
z6TestMaskedNDArraySubclassCreation.test_direct_creationc                 C   sJ   t | j}|| j}t||s"J t|j| j t|jt|j	t
 d S r   )r   r}   r   rH   r   r	   r
   r%   rS   rO   rT   r   r   r   r    test_initialization_without_mask   s
    

zBTestMaskedNDArraySubclassCreation.test_initialization_without_maskmasked_arrayc                 C   sf   t | j}|t| j| jd}||}t|t s6J t|| jsFJ t|j| j t|j	| j d S rF   
r   r}   r%   Zasarrayr   r?   rH   r   r	   r
   )r4   r   r   rL   r   r   r   r   &test_initialization_with_masked_values   s    
zHTestMaskedNDArraySubclassCreation.test_initialization_with_masked_valuesc                 C   s   | j tjvsJ t| j| jd}t|ts.J t|| j s>J t|j| j t|j| j | j tjv sjJ t| j t	|u sJ d S rF   )
r}   r   rm   r   r?   rH   r   r	   r
   rI   )r4   r   r   r   r   test_indirect_creation   s    z8TestMaskedNDArraySubclassCreation.test_indirect_creationc                 C   sb   t | j}|t t| j| jd}t|t s2J t|| jsBJ t|j| j t|j	| j d S rF   r   r   r   r   r   &test_can_initialize_with_masked_values   s    
zHTestMaskedNDArraySubclassCreation.test_can_initialize_with_masked_valuesc                 C   sx   t | j| jd}| }t||ju s*J t|| |tj}t|t	u sPJ t
|j| jtj t
|j| j d S rF   )r   r   r?   r^   rI   rB   r   r%   r9   r   r   r	   r
   )r4   r   Zmms2rL   r   r   r   test_viewing  s    
z.TestMaskedNDArraySubclassCreation.test_viewingN)r6   r7   r8   r{   r;   r5   r   r   r   rX   markparametrizer   r%   rL   MaskedArrayr   r   r   r   r   r   r   r   r|      s   
	
	
r|   c                   @   sB   e Zd Zdd Zdd Zdd Zejde	e
jjgdd	 Zd
S ) TestMaskedQuantityInitializationc                 C   s   t j| jj }|ddgddgtjd}|jtjks6J t|j	j
ddgksPJ t|j	jddgksjJ t|jddgksJ d S )Nr   r   TF)r
   unit)r   rm   r   rB   r>   sr   r%   allvaluer	   r
   )r4   r   mqr   r   r   test_masked_quantity_class_init  s    z@TestMaskedQuantityInitialization.test_masked_quantity_class_initc                 C   s&   t j| jj }t t}||u s"J d S r   )r   rm   r   rB   r   )r4   r   MQr   r   r   test_masked_quantity_getting  s    z=TestMaskedQuantityInitialization.test_masked_quantity_gettingc                 C   s^   t t}|ddgtj}|jtjks(J t|jjddgksBJ t|j	ddgksZJ d S )Nr   r   F)
r   r   r>   r   r   r%   r   r   r	   r
   )r4   r   r   r   r   r   r     s
    zATestMaskedQuantityInitialization.test_initialization_without_maskr   c                 C   sp   t t}tddg}tddg}|||}||}t|t sDJ t|tsRJ t|jj| t|j| d S )Nr   r   TF)	r   r   r%   r(   rH   r   r   r	   r
   )r4   r   r   r   r?   rL   r   r   r   r   r   '  s    
zGTestMaskedQuantityInitialization.test_initialization_with_masked_valuesN)r6   r7   r8   r   r   r   rX   r   r   r   r%   rL   r   r   r   r   r   r   r     s
   
r   c                   @   sN   e Zd Zdd Zdd Zejdedd Z	ejddge d	d
 Z
dS )TestMaskSettingc                 C   s   t | j}|jj|jksJ |j r*J d|_|jj|jksBJ |j sPJ dgdgg|_|jj|jkspJ t|jtdgd dgd g | j	|_|jj|jksJ t|j| j	 |j| j	usJ t
|j| j	sJ d S )NTFr   )r   r   r
   rO   anyr   r   r%   r(   r)   rJ   rK   r   r   r   test_whole_mask_setting_simple5  s    
"z.TestMaskSetting.test_whole_mask_setting_simplec                 C   s  t | j}|jj|jksJ |jd  s8|jd  r<J d|_|jj|jksTJ |jd  rp|jd  stJ dgdgg|_|jj|jksJ t|jtjdgd dgd g| j	d | j
|_|jj|jksJ t|j| j
 |j| j
usJ t|j| j
s
J d S )	Nr   r   TFr"   r   r#   r    )r   r/   r
   rO   r   r   r   r%   r(   r.   r0   rJ   rK   r   r   r   "test_whole_mask_setting_structuredE  s     
  
z2TestMaskSetting.test_whole_mask_setting_structureditemc                 C   s   t | j}d|j|< t|jt}d||< t|j| d|j|< t|jt|jt t| jjt}t | j|}d|j|< t|j|sJ t|j| d S NTF)	r   r   r
   r%   rS   rO   rT   r   rJ   r4   r   rL   expectedr
   r   r   r   test_part_mask_settingV  s    



z&TestMaskSetting.test_part_mask_settingr   c                 C   s   t | j}d|j|< t|j| j}d||< t|j| d|j|< t|jt|j| j t| jj| j}t | j|}d|j|< t|j|sJ t|j| d S r   )	r   r/   r
   r%   rS   rO   r.   r   rJ   r   r   r   r   !test_part_mask_setting_structuredf  s    



z1TestMaskSetting.test_part_mask_setting_structuredN)r6   r7   r8   r   r   rX   r   r   VARIOUS_ITEMSr   r   r   r   r   r   r   4  s   
r   c                       s    e Zd Ze fddZ  ZS )MaskedArraySetupc                    sh   t    t| j| jd| _t| j| jd| _t| j	| j
d| _t| j| jd| _t| j| jd| _d S rF   )r=   r5   r   r   r)   rL   r   r*   mbr+   r,   mcr/   r0   msar1   r2   msbr3   rA   r   r   r5   {  s    
zMaskedArraySetup.setup_class)r6   r7   r8   r;   r5   rC   r   r   rA   r   r   z  s   r   c                   @   s>   e Zd Zdd Zdd Zejdddgdd	 Zd
d Z	dS )TestViewingc                 C   s8   | j t| j }t|| j  | j  }t|| j  d S r   )rL   r^   rI   r   )r4   ma2ma3r   r   r   test_viewing_as_new_type  s    
z$TestViewing.test_viewing_as_new_typec                 C   s2   | j d}t|j| jd t|j| j d S )NZc8)rL   r^   r   r	   r   r
   r)   )r4   r   r   r   r   test_viewing_as_new_dtype  s    z%TestViewing.test_viewing_as_new_dtype	new_dtypeZ2f4zf8,f8,f8c                 C   sL   | j |}tjtdd | j|j W d    n1 s>0    Y  d S )Nzdifferent.*sizerV   )r   r^   rX   rY   NotImplementedErrorrL   r!   )r4   r   Zcheckr   r   r   )test_viewing_as_new_dtype_not_implemented  s    z5TestViewing.test_viewing_as_new_dtype_not_implementedc                 C   sL   t t. ttjddgtjdt W d    n1 s>0    Y  d S )Nr   r   r    )rX   rY   	TypeErrorr   r%   r(   Zintpr^   r3   r   r   r   $test_viewing_as_something_impossible  s    z0TestViewing.test_viewing_as_something_impossibleN)
r6   r7   r8   r   r   rX   r   r   r   r   r   r   r   r   r     s
   
r   c                   @   sT   e Zd Zdd Zejdddd Zdd Zejddd	gd
d Z	dd Z
dS )TestMaskedArrayCopyFilledc                 C   sp   | j  }t|t| j u s J t|j| j j t|j| j j t|j| j jrVJ t|j| j jrlJ d S r   )rL   rb   rI   r   r	   r
   r%   rJ   )r4   ma_copyr   r   r   	test_copy  s    
z#TestMaskedArrayCopyFilled.test_copy
fill_valuer   r   c                 C   sB   |t | jdd }| j }||| jj< | j|}t|| d S )Nr   r   )getattrr   rb   rL   r
   filledr   r4   r   r   resultr   r   r   test_filled  s
    
z%TestMaskedArrayCopyFilled.test_filledc                 C   s<   t jtdd | j  W d    n1 s.0    Y  d S )Nzmissing 1 requiredrV   )rX   rY   r   rL   r   r3   r   r   r   test_filled_no_fill_value  s    z3TestMaskedArrayCopyFilled.test_filled_no_fill_value)r   c                 C   s|   t j|| jd}t| jdr(|| jj> }| j }|d |d | jjd < |d |d | jjd < | j	|}t
|| d S )Nr    r   r   r   )r%   r(   r-   hasattrr/   r   rb   r   r
   r   r   r   r   r   r   test_filled_structured  s    
z0TestMaskedArrayCopyFilled.test_filled_structuredc                 C   s   | j  }|j}|d }|j| jjd ks.J |j| jjd ksDJ tdd t| j j| jj| jjD snJ | j	d |d< |d | j	d ksJ |d | j	d ksJ d S )Nr   c                 s   s(   | ] \}}}|j |ko|j|kV  qd S r   )r	   r
   ).0rL   r   r?   r   r   r   	<genexpr>      z6TestMaskedArrayCopyFilled.test_flat.<locals>.<genexpr>r   )
rL   rb   Zflatr	   r   r
   r)   r   zipr   )r4   r   Zma_flatZma_flat1r   r   r   	test_flat  s    
z#TestMaskedArrayCopyFilled.test_flatN)r6   r7   r8   r   rX   r   r   r   r   r   r   r   r   r   r   r     s   


r   c                   @   s   e Zd ZdS )TestMaskedQuantityCopyFilledNrx   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )TestMaskedLongitudeCopyFilledNrx   r   r   r   r   r     s   r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestMaskedArrayShapingc                 C   sP   | j d}| jd}| jd}|j|jks4J t|j| t|j| d S N   )rL   r'   r   r)   rO   r   r	   r
   r4   Z
ma_reshapeexpected_dataexpected_maskr   r   r   test_reshape  s    z#TestMaskedArrayShaping.test_reshapec                 C   sT   | j  }d|_| jd}| jd}|j|jks8J t|j| t|j| d S r   )	rL   rb   rO   r   r'   r)   r   r	   r
   r   r   r   r   test_shape_setting  s    
z)TestMaskedArrayShaping.test_shape_settingc                 C   sj  | j  }tjtdd d|_W d    n1 s40    Y  |j| j jksPJ |jj| j jksdJ tt	dgdgg| j
j| jd}tjtdd d|_W d    n1 s0    Y  |j| j jksJ |jj| j jksJ t| j
 t	d	gd
gg| jjd}tjtdd d|_W d    n1 s20    Y  |j| j jksPJ |jj| j jksfJ d S )Nzcannot reshaperV   )   r   r   rG   zncompatible shaper   TF)rL   rb   rX   rY   rZ   rO   r
   r   r%   Zbroadcast_tor   r)   r_   )r4   rL   r   r   r   r   r   test_shape_setting_failure  s&    
$$&z1TestMaskedArrayShaping.test_shape_setting_failurec                 C   sJ   | j  }| j }| j }|j|jks.J t|j| t|j| d S r   )rL   ravelr   r)   rO   r   r	   r
   )r4   Zma_ravelr   r   r   r   r   
test_ravel  s    


z!TestMaskedArrayShaping.test_ravelc                 C   sJ   | j  }| j }| j }|j|jks.J t|j| t|j| d S r   )rL   Z	transposer   r)   rO   r   r	   r
   )r4   Zma_transposer   r   r   r   r   test_transpose  s    


z%TestMaskedArrayShaping.test_transposec                 C   s:   t | j| j| jD ]"\}}}t|j| t|j| qd S r   )r   rL   r   r)   r   r	   r
   )r4   rL   dr?   r   r   r   	test_iter  s    z TestMaskedArrayShaping.test_iterN)	r6   r7   r8   r   r   r   r   r   r   r   r   r   r   r     s   	r   c                	   @   s   e Zd Zejdedd Zejddge dd Zejddd	gd	fdd	gdfdd	gd
fdd	gddggd
fgdd Z	ejdeejdg ddd Z
ejddge ejdg ddd Zejdedd Zd
S )MaskedItemTestsr   c                 C   s:   | j | }| j| }| j| }t|j| t|j| d S r   )rL   r   r)   r   r	   r
   r4   r   Zma_partr   r   r   r   r   test_getitem  s
    


zMaskedItemTests.test_getitemr   c                 C   s:   | j | }| j| }| j| }t|j| t|j| d S r   )r   r/   r0   r   r	   r
   r   r   r   r   test_getitem_structured&  s
    


z'MaskedItemTests.test_getitem_structuredzindices,axisr   r   Nr   r   c                 C   sh   | j j||d}| jj||d}| jj||d}t|j| t|j| tj| j ||d}t|| d S Naxis)	rL   Ztaker   r)   r   r	   r
   r%   r   )r4   indicesr   Zma_taker   r   Zma_take2r   r   r   	test_take.  s    zMaskedItemTests.test_taker
   r   c                 C   s   | j  }| j }| j }|d u r0| jd nt| jd |}|||< |d u rT|n|j||< |d u rjdn|j||< t|j| t|j| d S )Nr   r   F)rL   rb   r   r)   r   r	   r
   r   r4   r   r
   baser   r   r   r   r   r   test_setitem9  s    


"zMaskedItemTests.test_setitemc                 C   s   | j  }| j }| j }|dkr0| jd n| jd }|d urLt||}|||< |d u r`|n|j||< |d u rvdn|j||< t|j| t|j| d S )Nr   r   r   F)r   rb   r/   r0   r   r	   r
   r   r   r   r   r   test_setitem_structuredF  s    



z'MaskedItemTests.test_setitem_structuredc                 C   sF   | j  }| j }tj j||< d||< t|j| j t|j| d S )NT)	rL   rb   r)   r%   r[   r   r	   r   r
   )r4   r   r   r   r   r   r   test_setitem_np_ma_maskedU  s    

z)MaskedItemTests.test_setitem_np_ma_masked)r6   r7   r8   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    

0
	r   c                       s0   e Zd Ze fddZdd Zdd Z  ZS )TestMaskedArrayItemsc                    s>   t    tddg| _tddg| _t| j| j| _d S )NZaaZbbTF)r=   r5   r%   r(   r   Zmask_dr   mdr3   rA   r   r   r5   `  s    
z TestMaskedArrayItems.setup_classc                 C   sJ   | j  }|d }|j| jd ks&J |js0J |d d  }t|| d S Nr   )r   rb   r	   r   r
   r   )r4   r   Zmd0Zmd_allr   r   r   test_getitem_stringsh  s    

z)TestMaskedArrayItems.test_getitem_stringsc                 C   s<   | j  }tjj|d< t|j| j t|jt	dt
 d S )Nr   r   )r   rb   r%   rL   r[   r   r	   r   r
   onesrT   )r4   r   r   r   r   !test_setitem_strings_np_ma_maskedp  s    
z6TestMaskedArrayItems.test_setitem_strings_np_ma_masked)r6   r7   r8   r;   r5   r   r   rC   r   r   rA   r   r   _  s   r   c                   @   s   e Zd ZdS )TestMaskedQuantityItemsNrx   r   r   r   r   r   w  s   r   c                   @   s   e Zd ZdS )TestMaskedLongitudeItemsNrx   r   r   r   r   r   {  s   r   c                   @   s   e Zd Zejdejejfdd Z	ejdej
ejfdd Zdd Zejdd	d
gejdej
ejfdd Zdd Zdd Zdd Zdd ZdS )MaskedOperatorTestsopc                 C   sH   || j | j}|| j| j}| j j| jjB }t|j| t|j| d S r   rL   r   r   r   r
   r   r	   r4   r   mapmbr   r   r   r   r   test_add_subtract  s
    z%MaskedOperatorTests.test_add_subtractc                 C   sH   || j | j}|| j| j}| j j| jjB }t|j| t|j| d S r   r   r   r   r   r   test_equality  s
    z!MaskedOperatorTests.test_equalityc                 C   s8   t t | jdk W d    n1 s*0    Y  d S )Nabc)rX   rY   r   rL   r3   r   r   r   test_not_implemented  s    z(MaskedOperatorTests.test_not_implementeddifferent_namesFTc                 C   s   | j }|r&|dd |jj D }|| j| j }t|jt	}t|jt	}| j
jD ]T}| j| | j|  }}	| j| | j|  }
}|	|B }||
k|B }||M }||M }qX|tju r| }t|j| t|j| d S )Nc                 S   s   g | ]\}}d | |fqS )Z
different_r   )r   nameZdtr   r   r   
<listcomp>  s   z@MaskedOperatorTests.test_structured_equality.<locals>.<listcomp>)r   astyper!   fieldsitemsr   r%   r   rO   rT   r-   namesr/   r0   r1   r2   operatorner   r	   r
   )r4   r   r   r   r   r   r   fieldZfaZmfaZfbZmfbZmfequalZfequalr   r   r   test_structured_equality  s&    



z,MaskedOperatorTests.test_structured_equalityc                 C   s   | j j| j  }t|j| jj| j  tj| jdd}tj	||}t|j
| | j j| j }t|j| jj| j  tj	|tdt}t|j
| | jj| j  }t|j| jj| j  tj	tdt|}t|j
| d S )Nr   r   r   )rL   Tr   r	   r   r%   r   r)   
logical_orZouterr
   rS   rT   )r4   r   Zmask1r   result2Zexpected_mask2result3Zexpected_mask3r   r   r   test_matmul  s    zMaskedOperatorTests.test_matmulc                 C   s   | j | j }t|jsJ t|j| j| j  | j| j }t|jsLJ t|j| j| j  | j 	 }d|jd< || j }t|j| j| j  t|j|j
d d S )NFr   r   )rL   r   r%   r   r
   r   r	   r   r   rb   r   r4   r   r  Znew_mar  r   r   r   test_matvec  s    


zMaskedOperatorTests.test_matvecc                 C   s   | j | jj }t|jsJ t|j| j| j	j  | j| jj }t|jsRJ t|j| j| j	j  | jj
 }d|jd< | j| }t|j| j| j	j  t|j|jd d S )NFr   r   )r   rL   r  r%   r   r
   r   r	   r   r   rb   r   r  r   r   r   test_vecmat  s    

zMaskedOperatorTests.test_vecmatc                 C   s\   | j | j  }|jdksJ |js$J |j| j| j ks:J t| jd}|| }|jrXJ d S )Nr   F)r   rO   r
   r	   r   r   )r4   r   Z
mb_no_maskr  r   r   r   test_vecvec  s    
zMaskedOperatorTests.test_vecvecN)r6   r7   r8   rX   r   r   r   addsubr   eqr   r   r   r  r  r	  r
  r  r   r   r   r   r     s   
	
	r   c                   @   s2   e Zd Zejdejejfdd Z	dd Z
dS )TestMaskedArrayOperatorsr   c                 C   s   t tg dg dd}t tg dg dd}|||}t|j||j|j t|j|j|jB  |||j}t|| d S )N)r   r   r+   r   rG   )r   r   r   )FFF)r   r%   r(   r   r	   r
   r   )r4   r   Zm1Zm2r   r  r   r   r   test_equality_strings  s    
z.TestMaskedArrayOperators.test_equality_stringsc                 C   s@   t t" tddgt k W d    n1 s20    Y  d S )Nr   r   )rX   rY   r   r   objectr3   r   r   r   r     s    z-TestMaskedArrayOperators.test_not_implementedN)r6   r7   r8   rX   r   r   r   r  r   r  r   r   r   r   r   r    s   

r  c                   @   s   e Zd ZdS )TestMaskedQuantityOperatorsNrx   r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )TestMaskedLongitudeOperatorsNrx   r   r   r   r   r    s   r  c                   @   s  e Zd Zdd Zejdddd Zejdddd Zejddd	d
 Z	dd Z
dd Zdd Zejdejdddd Zdd Zdd Zdd Zejdddd Zdd Zejdddd Zejddd d! Zd"d# Zejddd$d% Zejddd&d' Zejd(g d)ejdd*d+gd,d- Zd.d/ Zejdd0d1d2 Zejd3d+d4gd5d6 Zejd3d+d4gd7d8 Zd9d: Zejd;d<d=gejd>g d?d@dA ZdBdC Z ejdDd0dEdF Z!ejdDd0dGdH Z"dIdJ Z#dKdL Z$dMS )NTestMaskedArrayMethodsc                 C   s*   | j  }t| j | j}t|| d S r   )r   roundr   r+   r,   r   )r4   Zmrcr   r   r   r   
test_round  s    
z!TestMaskedArrayMethods.test_roundr   r   r   Nc                 C   sB   | j |}| j|}| j j|}t|j| t|j| d S r   )rL   sumr   r
   r   r   r	   r4   r   ma_sumr   r   r   r   r   test_sum  s
    zTestMaskedArrayMethods.test_sumc                 C   sZ   | j |}| j|}| j}|d u r.| }tjj||d}t|j	| t|j
| d S r   )rL   Zcumsumr   r)   r   r%   r  
accumulater   r	   r
   r4   r   r  r   r
   r   r   r   r   test_cumsum  s    z"TestMaskedArrayMethods.test_cumsumc                 C   sp   | j |}| j }d|| j< d| j jt }|||| }| j j	|}t
|j| t
|j| d S )N        r   )rL   meanr   rb   r)   r
   r   rQ   r  r   r   r	   )r4   r   ma_meanr   countr   r   r   r   r   	test_mean  s    

z TestMaskedArrayMethods.test_meanc                 C   s>   | j d}| }|jdks"J |d }t|| d S NZi2r   rL   r   r   r!   r   r4   rL   r!  r   r   r   r   test_mean_int16&  s
    z&TestMaskedArrayMethods.test_mean_int16c                 C   s@   | j d}| }|jdks"J | j  d}t|| d S )Nf2r%  r&  r   r   r   test_mean_float16-  s
    z(TestMaskedArrayMethods.test_mean_float16c                 C   sF   | j d}tt|j}| j jd|d}||u s8J t|| d S Nr   )out)rL   r   r   r%   
zeros_liker	   r   r4   r   r+  r   r   r   r   test_mean_inplace4  s
    z(TestMaskedArrayMethods.test_mean_inplacezignore:.*encountered in.*dividec                 C   s  | j |}| j| j j|dd d }d|| j< d| j jt |}||| }| j j	|}t
|j| t
|j| | j j|dd}|||d  }| j j	||dkB }	t
|j| t
|j|	 | j j|dd}
t	t|
j sJ |
j	 sJ d S )NT)Zkeepdimsr   r  r   ddofr   )rL   varr   r   r)   r
   r   rQ   r  r   r   r	   r%   Zisfinite)r4   r   ma_varr   r"  r   r   ma_var1Zexpected_data1Zexpected_mask1Zma_var5r   r   r   test_var;  s     
zTestMaskedArrayMethods.test_varc                 C   s>   | j d}| }|jdks"J |d }t|| d S r$  )rL   r   r1  r!   r   )r4   rL   r2  r   r   r   r   test_var_int16O  s
    z%TestMaskedArrayMethods.test_var_int16c                 C   s8   | j jddd}| j jddd}t|}t|| d S )Nr   r/  )rL   stdr1  r%   Zsqrtr   )r4   Zma_stdr3  r   r   r   r   test_stdV  s    
zTestMaskedArrayMethods.test_stdc                 C   sL   | j jddd}tt|j}| j jdd|d}||u s>J t|| d S )Nr   r/  )r0  r+  )rL   r6  r   r%   r,  r	   r   r-  r   r   r   test_std_inplace\  s
    z'TestMaskedArrayMethods.test_std_inplacec                 C   sP   | j |}| j }| j || j< ||}t|j| t	|j
rLJ d S r   )rL   minr   rb   maxr)   r   r	   r%   r   r
   )r4   r   ma_minr   r   r   r   r   test_minc  s    

zTestMaskedArrayMethods.test_minc                 C   s@   t dtjdgg dd}| }t|jtd |jr<J d S )Nr   r   r   rG   )r   r%   nanr9  r   r	   r(   r
   )r4   rL   r;  r   r   r   test_min_with_masked_nanl  s    z/TestMaskedArrayMethods.test_min_with_masked_nanc                 C   sP   | j |}| j }| j || j< ||}t|j| t	|j
rLJ d S r   )rL   r:  r   rb   r9  r)   r   r	   r%   r   r
   )r4   r   Zma_maxr   r   r   r   r   test_maxr  s    

zTestMaskedArrayMethods.test_maxc                 C   s>   | j |}| j }| j || j< ||}t|| d S r   )rL   argminr   rb   r:  r)   r   )r4   r   Z	ma_argminr   r   r   r   r   test_argmin{  s
    

z"TestMaskedArrayMethods.test_argminc                 C   s(   t ddgddgd}| dks$J d S )Nr   r   TF)datar
   )r   r@  rK   r   r   r   %test_argmin_only_one_unmasked_element  s    z<TestMaskedArrayMethods.test_argmin_only_one_unmasked_elementc                 C   s>   | j |}| j }| j || j< ||}t|| d S r   )rL   Zargmaxr   rb   r9  r)   r   )r4   r   Z	ma_argmaxr   r   r   r   r   test_argmax  s
    

z"TestMaskedArrayMethods.test_argmaxc                 C   sB   | j |}| j }| j d || j< ||}t|| d S )Ng?)rL   argsortr   rb   r:  r)   r   )r4   r   
ma_argsortr   r   r   r   r   test_argsort  s
    

z#TestMaskedArrayMethods.test_argsortorder)Nr   r   )r   r   r   r   c                 C   sN   | j j||d}| j jtjtjtjf| jdd}|j||d}t|| d S )N)rH  r    )r   )r   rE  r   r%   r(   infr-   r   )r4   r   rH  rF  r   r   r   r   r   test_structured_argsort  s    
z.TestMaskedArrayMethods.test_structured_argsortc                 C   sB   t jtdd  | jjddd W d    n1 s40    Y  d S )Nzwhen the array has no fieldsrV   r   r   )r   rH  )rX   rY   rZ   rL   rE  r3   r   r   r   test_argsort_error  s    z)TestMaskedArrayMethods.test_argsort_errorr   c                 C   s`   | j  }|| | j |}t| j j||}t| j j||}t|j| t|j| d S r   )	rL   rb   sortrE  r%   Ztake_along_axisr	   r
   r   )r4   r   Zma_sortr   r   r   r   r   r   	test_sort  s    

z TestMaskedArrayMethods.test_sortkthr   c                 C   s   | j  }||}|| }|d | || k  s8J ||d  || k sTJ || jrvt|j|d  sJ nt|jd | rJ d S r   )rL   r   Zargpartitionr   r
   r   )r4   rN  rL   Zma_argpartitionpartitionedr   r   r   test_argpartition  s    


z(TestMaskedArrayMethods.test_argpartitionc                 C   s   | j  }|| |d | || k  s0J ||d  || k sLJ || jrnt|j|d  sJ nt|jd | rJ d S r   )rL   Zflatten	partitionr   r
   r   )r4   rN  rO  r   r   r   test_partition  s    


z%TestMaskedArrayMethods.test_partitionc                 C   s  t ddgddgg}t ddgddgg}| jt jurX| || jj}| || jj}t|ddgddggd}t|ddgddggd}||k}t|jt ddgddgg t|j	t ddgddgg |
 sJ ||k
 rJ |
d	}t|j	t ddg t|d
 du sJ t|d	 du s4J |
d
}t|j	t ddg t|d
 du sjJ t|d	 du sJ d S )Nr   r   r   r   r  FTrG   r   r   )r%   r(   r:   r9   r   r   r   r   r	   r
   r   rT   )r4   Za1Za2Zma1r   Z
ma1_eq_ma2Zma_eq1Zma_eq0r   r   r   test_all_explicit  s@    





z(TestMaskedArrayMethods.test_all_explicitr   r   r   z
array,axis))r   r   )r   r   )r   N)r   N)r+   r   )r+   r   )r+   Nc                 C   s   t | d| }||k}t |||d}|j }|dk||j< t |||d}|j|}	t|j|	 t|j| dd | D }
dd ||	 @  D }|
|ksJ d S )Nr?   r   r   c                 S   s   g | ]}t |qS r   rT   r   r   r   r   r   r     r   z;TestMaskedArrayMethods.test_all_and_any.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   rT  rU  r   r   r   r     r   )r   r	   rb   r
   r   r   r   )r4   r(   r   r   rL   ma_eqZma_all_or_anyr   Za_all_or_anyZ
all_maskedZas_boolr   r   r   r   test_all_and_any  s    
z'TestMaskedArrayMethods.test_all_and_anyc                 C   sN   | j | j k}|d}tt|j}|jd|d}||u s@J t|| d S r*  )rL   r   r   r%   r,  r	   r   )r4   rV  r   r+  r   r   r   r   test_any_inplace  s    
z'TestMaskedArrayMethods.test_any_inplaceoffsetc                 C   s:   | j j|d}t| jj|d| jj|d}t|| d S )NrY  )rL   Zdiagonalr   r   r)   r   )r4   rY  Zmdar   r   r   r   test_diagonal  s
    z$TestMaskedArrayMethods.test_diagonalc                 C   s<   | j j|d}t| jj|d| jj|td}t|| d S )NrZ  )rY  r!   )rL   Ztracer   r   r)   rT   r   )r4   rY  Zmtar   r   r   r   
test_trace  s
    z!TestMaskedArrayMethods.test_tracec                 C   s:   | j | j| j}t| j| j| j| j}t|| d S r   )rL   clipr   r+   r   r   r)   r   )r4   maclipr   r   r   r   	test_clip  s    z TestMaskedArrayMethods.test_clipc                 C   s   | j | j| j}tt| j| j| j	 }t
t
| j| j| j }t| j| j|| j|| jd}t|| d S rF   )rL   r]  r   r   r%   Zmaximumr   r   r+   r:  Zminimumr9  r   r   r)   r   )r4   r^  ZdmaxZdminr   r   r   r   test_clip_masked_min_max  s    
z/TestMaskedArrayMethods.test_clip_masked_min_maxN)%r6   r7   r8   r  rX   r   r   r  r  r#  r'  r)  r.  filterwarningsr4  r5  r7  r8  r<  r>  r?  rA  rC  rD  rG  rJ  rK  rM  rP  rR  rS  rW  rX  r[  r\  r_  r`  r   r   r   r   r    sb   











	




r  c                   @   s   e Zd ZdS )TestMaskedQuantityMethodsNrx   r   r   r   r   rb    s   rb  c                   @   s   e Zd ZdS )TestMaskedLongitudeMethodsNrx   r   r   r   r   rc  !  s   rc  c                   @   s8   e Zd Zejdddd Zejdddd ZdS )TestMaskedArrayProductMethodsr   r  c                 C   sB   | j |}| j|}| j j|}t|j| t|j| d S r   )rL   Zprodr   r
   r   r   r	   r  r   r   r   	test_prod'  s
    z'TestMaskedArrayProductMethods.test_prodc                 C   sZ   | j |}| j|}| j}|d u r.| }tjj||d}t|j	| t|j
| d S r   )rL   Zcumprodr   r)   r   r%   r  r  r   r	   r
   r  r   r   r   test_cumprod/  s    z*TestMaskedArrayProductMethods.test_cumprodN)r6   r7   r8   rX   r   r   re  rf  r   r   r   r   rd  %  s   
rd  c                  C   s   t jddgdd} t| ddg}t|dks0J t|d d	ksDJ t|d
 dksXJ t jddd  t|dksxJ W d    n1 s0    Y  d S )Nr   r   zf8,f8r    r$   r#   u   [(1., ——) (3., 4.)]r   u   (1., ——)r   z(3., 4.)r   Zfixed)Z	precisionZ	floatmodeu%   [(1.000,   ———) (3.000, 4.000)])r%   r(   r   strprintoptionsr/   r   r   r   r   test_masked_str_explicit;  s    rj  c                  C   s\   t jddgdd} t| ddg}t|dks0J t|d d	ksDJ t|d
 dksXJ d S )Nr   r   z>f8,>f8r    r$   r#   uM   MaskedNDArray([(1., ——), (3., 4.)], dtype=[('f0', '>f8'), ('f1', '>f8')])r   uA   MaskedNDArray((1., ——), dtype=[('f0', '>f8'), ('f1', '>f8')])r   z=MaskedNDArray((3., 4.), dtype=[('f0', '>f8'), ('f1', '>f8')]))r%   r(   r   reprri  r   r   r   test_masked_repr_explicitE  s
    rl  c                  C   s^   t tddgdgd  d} tjdd  t| dks<J W d    n1 sP0    Y  d S )	Ng      .@TF   rG   r   )Z	thresholdu8   MaskedNDArray([———,  1.,  2., ..., 12., 13., 14.]))r   r%   r&   rh  rk  )rL   r   r   r   test_masked_repr_summaryQ  s
    rn  c                   C   s   t tg dksJ d S )Nz MaskedNDArray([], dtype=float64))rk  r   r   r   r   r   test_masked_repr_nodataX  s    ro  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMaskedArrayReprc                 C   s6   t | j t | j t | j t | j t | j d S r   )rg  rL   r   r   r   r   r3   r   r   r   test_array_str]  s
    



z"TestMaskedArrayRepr.test_array_strc                 C   sH   | j d jdksJ t| j d  | jd jdks6J t| jd  d S )Nr   r   )r   rO   rg  r   r3   r   r   r   test_scalar_stre  s    z#TestMaskedArrayRepr.test_scalar_strc                 C   s6   t | j t | j t | j t | j t | j d S r   )rk  rL   r   r   r   r   r3   r   r   r   test_array_reprk  s
    



z#TestMaskedArrayRepr.test_array_reprc                 C   s    t | jd  t | jd  d S r   )rk  r   r   r3   r   r   r   test_scalar_reprr  s    z$TestMaskedArrayRepr.test_scalar_reprN)r6   r7   r8   rq  rr  rs  rt  r   r   r   r   rp  \  s   rp  c                   @   s   e Zd ZdS )TestMaskedQuantityReprNrx   r   r   r   r   ru  w  s   ru  c                       sd   e Zd Ze fddZdd Zdd Zej	ddd	gd
d Z
ej	ddd	gdd Z  ZS )TestMaskedRecarrayc                    s0   t    | jtj| _t| j| jd| _	d S rF   )
r=   r5   r/   r^   r%   recarrayrar   r0   mrar3   rA   r   r   r5   |  s    
zTestMaskedRecarray.setup_classc                 C   s   t | jtsJ t | jtjs"J t| jj| jks:J t| jj| j	ksRJ t
| jtj| j t | jjtszJ t
| jjj| jd  t
| jjj| j	d  d S Nr   )rH   ry  r   r%   rw  r   r	   rx  r
   r0   r   r^   r9   r/   r   r3   r   r   r   test_recarray_setup  s    z&TestMaskedRecarray.test_recarray_setupc                 C   sF   | j  }| jd |_t|jj| jd j t|jj| jd j d S Nr   )ry  rb   r   r   r   r	   r
   )r4   ry  r   r   r   test_recarray_setting  s    
z(TestMaskedRecarray.test_recarray_settingattrr   r   c                 C   sB   | j |}t|tsJ t|j| jd  t|j| jd  d S rz  )	ry  r  rH   r   r   r	   r/   r
   r0   )r4   r~  Zmra_ar   r   r   test_recarray_field_getting  s    z.TestMaskedRecarray.test_recarray_field_gettingc                 C   sL   | j  }||| jd  t|jj| jd j t|jj| jd j d S r|  )ry  rb   r  r   r   r   r	   r
   )r4   r~  ry  r   r   r   test_recarray_field_setting  s    
z.TestMaskedRecarray.test_recarray_field_setting)r6   r7   r8   r;   r5   r{  r}  rX   r   r   r  r  rC   r   r   rA   r   rv  {  s   

rv  c                   @   s   e Zd Zdd Zdd ZdS )%TestMaskedArrayInteractionWithNumpyMAc                 C   sj   t j| j}t|t jju s"J t|j| ju s6J t|jt ju sJJ t|j| j	 t|j| j
 dS )z4Check that we can initialize a MaskedArray properly.N)r%   rL   r   rI   rB  r:   r
   r9   r   r   r)   r4   Znp_mar   r   r   test_masked_array_from_masked  s    zCTestMaskedArrayInteractionWithNumpyMA.test_masked_array_from_maskedc                 C   sl   | j tj j}t|tj ju s$J t|j| ju s8J t|jtju sLJ t	|j| j
 t	|j| j dS )z,Test that we can be viewed as a MaskedArray.N)rL   r^   r%   r   rI   rB  r:   r
   r9   r   r   r)   r  r   r   r   test_view_as_masked_array  s    z?TestMaskedArrayInteractionWithNumpyMA.test_view_as_masked_arrayN)r6   r7   r8   r  r  r   r   r   r   r    s   	r  c                   @   s   e Zd ZdS )(TestMaskedQuantityInteractionWithNumpyMANrx   r   r   r   r   r    s   r  ):r{   r   Znumpyr%   Znumpy.testingr   rX   Zastropyr   r>   Zastropy.unitsr   Zastropy.coordinatesr   Zastropy.utils.maskedr   r   r   slicer   r   r<   rD   rE   rU   r\   r`   ra   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rb  rc  rd  rj  rl  rn  ro  rp  ru  rv  r  r  r   r   r   r   <module>   sp   	>K%F1BBh  
&
