a
    ߙfb@5                     @   sP  d Z ddl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 ddlmZmZmZm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d deeZG dd de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d  d eeZG d!d" d"eeZG d#d$ d$eZdS )%zTest numpy functions and ufuncs on Masked arrays and quantities.

The tests here are fairly detailed but do not aim for complete
coverage.  Complete coverage of all numpy functions is done
with less detailed tests in test_function_helpers.
    N)assert_array_equal)units)Quantity)Masked   )MaskedArraySetupQuantitySetupLongitudeSetupassert_masked_equalc                   @   s   e Zd Zejdejejej	ej
ejfdd Zejdejejej	ej
ejfdd Zdd Zdd	 Zejdejjejjf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S )MaskedUfuncTestsufuncc                 C   sH   || j | j}|| j| j}| j j| jjB }t|j| t|j| d S N)mambabmaskr   unmaskedselfr   ma_mbexpected_dataexpected_mask r   Hlib/python3.9/site-packages/astropy/utils/masked/tests/test_functions.pytest_2op_ufunc   s
    zMaskedUfuncTests.test_2op_ufuncc                 C   sJ   || j | j}tt|j}|| j | j|d}||u s<J t|| d S N)out)r   r   r   np
zeros_liker   r
   )r   r   r   r   resultr   r   r   test_ufunc_inplace    s
    z#MaskedUfuncTests.test_ufunc_inplacec                 C   sd   t | j| j}tt |}t j| j| j|d}||u s>J t|j| t|jt 	|j
t d S r   )r   addr   r   r   r   r   r   r   zerosshapebool)r   Za_br   r    r   r   r   "test_ufunc_inplace_no_masked_input)   s    z3MaskedUfuncTests.test_ufunc_inplace_no_masked_inputc                 C   sP   t | jj}tt$ t j| j| j|d W d    n1 sB0    Y  d S r   )	r   r#   r   r$   pytestraises	TypeErrorr"   r   r   r   r   r   r   test_ufunc_inplace_error1   s    z)MaskedUfuncTests.test_ufunc_inplace_errorc                 C   sJ   || j | j}|| j| j}tj| j| j}t	|j
| t	|j| d S r   )r   r   r   r   r   
logical_oroutermask_amask_br   r   r   r   r   r   r   test_2op_ufunc_outer6   s
    z%MaskedUfuncTests.test_2op_ufunc_outerc                 C   sJ   t | j| j| j}t | j| j| j}| j}t|j| t|j	| d S r   )
r   Zclipr   r   cr   r.   r   r   r   )r   r   r   r   r   r   r   test_3op_ufunc@   s
    zMaskedUfuncTests.test_3op_ufuncaxisr   r   Nc                 C   s   t jj| j|d}t jj| j|d}t jj| jj|d}t|j| t|j| t	t 
|jt |j}t jj| j||d}||u sJ t|| d S )Nr3   r3   r   )r   r"   reducer   r   r,   r   r   r   r   r   Z	ones_liker
   )r   r3   	ma_reducer   r   r   Z
ma_reduce2r   r   r   test_add_reduceG   s    
z MaskedUfuncTests.test_add_reducec                 C   sr   t jj| jdd}tt |t |jt}t jj| jd|d}||u sLJ t	|j
| t	|jt |jt d S )Nr   r5   r6   )r   r"   r7   r   r   r   Zonesr$   r%   r   r   r   r#   )r   Za_reducer   r    r   r   r   test_add_reduce_no_masked_inputU   s    z0MaskedUfuncTests.test_add_reduce_no_masked_inputc                 C   sT   t jj| j|d}t jj| j|d}t jj| jj|d}t|j| t|j| d S Nr5   )	r   minimumr7   r   r   r,   r   r   r   r   r3   r8   r   r   r   r   r   test_minimum_reduce]   s
    z$MaskedUfuncTests.test_minimum_reducec                 C   sT   t jj| j|d}t jj| j|d}t jj| jj|d}t|j| t|j| d S r;   )	r   Zmaximumr7   r   r   r,   r   r   r   r=   r   r   r   test_maximum_reducee   s
    z$MaskedUfuncTests.test_maximum_reduceN)__name__
__module____qualname__r'   markparametrizer   r"   subtractZdivideZarctan2r<   r   r!   r&   r+   r-   r0   r2   r9   r:   r>   r?   r   r   r   r   r      s(   
	

	

r   c                   @   s*   e Zd Zejdddd Zdd ZdS )TestMaskedArrayUfuncsr3   r4   c                 C   sT   t jj| j|d}t jj| j|d}t jj| jj|d}t|j| t|j| d S r;   )	r   Zmultiplyr7   r   r   r,   r   r   r   r=   r   r   r   test_multiply_reducep   s
    z*TestMaskedArrayUfuncs.test_multiply_reducec                 C   s   t ddg}dtj }tt ||@  W d   n1 s@0    Y  t|}tt ||@  W d   n1 sz0    Y  dS )z
        If the unmasked operation returns NotImplemented, this
        should lead to a TypeError also for the masked version.
        r         N)r   Zarrayumr'   r(   r)   r   )r   r   r   r   r   r   r   $test_ufunc_not_implemented_for_otherx   s    
&z:TestMaskedArrayUfuncs.test_ufunc_not_implemented_for_otherN)r@   rA   rB   r'   rC   rD   rG   rL   r   r   r   r   rF   n   s   
rF   c                   @   s   e Zd Zdd ZdS )TestMaskedQuantityUfuncsc                 C   sT   t t| jj}tt$ tj| j| j	|d W d    n1 sF0    Y  d S r   )
r   r   r#   r   r$   r'   r(   r)   r"   r   r*   r   r   r   test_ufunc_inplace_error2   s    z2TestMaskedQuantityUfuncs.test_ufunc_inplace_error2N)r@   rA   rB   rN   r   r   r   r   rM      s   rM   c                   @   s   e Zd Zdd ZdS )TestMaskedLongitudeUfuncsc                 C   s\   t t| jjtj> }tj| j| j|d}||u s8J t| j| j	t
}t|| d S r   )r   r   r#   r   r$   rJ   rK   r"   r   Zviewr   r
   )r   r   r    expectedr   r   r   #test_ufunc_inplace_quantity_initial   s
    z=TestMaskedLongitudeUfuncs.test_ufunc_inplace_quantity_initialN)r@   rA   rB   rQ   r   r   r   r   rO      s   rO   c                   @   sL   e Zd Zdd Zdd Zejddeddfd	d
 Z	dd Z
dd ZdS )TestMaskedArrayConcatenationc                 C   st   | j tj }tj| j|fdd}tj| j| jtj fdd}tj| j| jtj fdd}t	|j
| t	|j| d S Nr   r5   )r   r   newaxisconcatenater   r   r   r.   r/   r   r   r   r   r   Z
concat_a_br   r   r   r   r   test_concatenate   s    z-TestMaskedArrayConcatenation.test_concatenatec                 C   s~   | j tj }tj| j|fdd}tj| j| jtj fdd}tjt| jjt| j	tj fdd}t
|j| t
|j| d S rS   )r   r   rT   rU   r   r   r#   r$   r%   r/   r   r   r   rV   r   r   r   test_concatenate_not_all_masked   s    
z<TestMaskedArrayConcatenation.test_concatenate_not_all_maskedobjr   rH   rI   c                 C   sR   t j| j|| jdd}tt j| j|| jddt j| j|| jdd}t	|| d S Nr5   )
r   insertr   mcr   r   r1   r.   mask_cr
   )r   rY   Zmc_in_arP   r   r   r   test_insert   s
    z(TestMaskedArrayConcatenation.test_insertc                 C   sL   t t. tj| jtddd| jdd W d    n1 s>0    Y  d S )Nr   F)r   r[   r5   )r'   r(   r)   r   r\   r   r   r]   )r   r   r   r   test_insert_masked_obj   s    z3TestMaskedArrayConcatenation.test_insert_masked_objc                 C   sL   t j| j| jdd}tt j| j| jddt j| j| jdd}t	|| d S rZ   )
r   appendr   r]   r   r   r1   r.   r^   r
   )r   Zmc_to_arP   r   r   r   test_append   s
    z(TestMaskedArrayConcatenation.test_appendN)r@   rA   rB   rW   rX   r'   rC   rD   slicer_   r`   rb   r   r   r   r   rR      s   		
rR   c                   @   s   e Zd ZdS )TestMaskedQuantityConcatenationNr@   rA   rB   r   r   r   r   rd      s   rd   c                   @   s   e Zd ZdS ) TestMaskedLongitudeConcatenationNre   r   r   r   r   rf      s   rf   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestMaskedArrayBroadcastc                 C   sp   | j j}tj| j|dd}|j|ks(J |jj|ks8J ttj| jj|ddtj| jj|dd}t|| d S NTsubok)	r   r$   r   broadcast_tor   r   r   r   r
   r   r$   ZbarP   r   r   r   test_broadcast_to   s    z*TestMaskedArrayBroadcast.test_broadcast_toc                 C   sr   | j j}| jjtj|dd}|j|ks*J |jj|ks:J ttj| jj|ddtj| jj|dd}t	|| d S )NT)r$   rj   ri   )
r   r$   r   Z_applyr   rk   r   r   r   r
   rl   r   r   r   test_broadcast_to_using_apply   s    z6TestMaskedArrayBroadcast.test_broadcast_to_using_applyc                 C   sx   t j| j| j| jdd}t j| j| j| jdd}t | j| j	| j
}t|||D ]"\}}}t|j| t|j| qPd S rh   )r   broadcast_arraysr   r   r]   r   r   r1   r.   r/   r^   zipr   r   r   )r   r   r   Zbmmb_b_Zbm_r   r   r   test_broadcast_arrays   s    z.TestMaskedArrayBroadcast.test_broadcast_arraysc                 C   st   t j| j| j| jdd}t|d | j t j| j| jjdd}t|d | t j| j| jjdd}t|d | d S )NTri   r   r   rH   )	r   ro   r   r   r1   r   rk   r$   r
   )r   r   Z	expected1Z	expected2r   r   r   $test_broadcast_arrays_not_all_masked   s    z=TestMaskedArrayBroadcast.test_broadcast_arrays_not_all_maskedc                 C   s   t j| j| j| jdd}tdd |D s.J t j| j| j| jdd}t j| j	| j
| jdd}t|||D ]"\}}}t|j| t|j| qjd S )NFri   c                 s   s   | ]}t |jtju V  qd S r   )typer   r   Zndarray).0rq   r   r   r   	<genexpr>       zMTestMaskedArrayBroadcast.test_broadcast_arrays_subok_false.<locals>.<genexpr>)r   ro   r   r   r]   allr   r   r1   r.   r/   r^   rp   r   r   r   )r   r   r   r/   rq   rr   Zmask_r   r   r   !test_broadcast_arrays_subok_false   s    z:TestMaskedArrayBroadcast.test_broadcast_arrays_subok_falseN)r@   rA   rB   rm   rn   rs   rt   rz   r   r   r   r   rg      s
   	
rg   c                   @   s   e Zd ZdS )TestMaskedQuantityBroadcastNre   r   r   r   r   r{      s   r{   c                   @   s   e Zd ZdS )TestMaskedLongitudeBroadcastNre   r   r   r   r   r|      s   r|   c                   @   s.   e Zd Zejdg ddd Zdd ZdS )TestMaskedArrayCalculationzn,axis))r   r[   )rH   r[   )r   r   c                 C   sn   t j| j||d}t | j||}t | j}t j|| jj< t t j|||d}t|j	| t|j| d S )N)nr3   )
r   diffr   r   r   nanr   Zisnanr   r   )r   r~   r3   mdar   Znan_maskr   r   r   r   	test_diff   s    z$TestMaskedArrayCalculation.test_diffc                 C   s   t tdg d}t|}t|jdks2J t|jg dksJJ tj|dd}t|jdkslJ t|jg dksJ d S )	Ng       @)TFFFFTFFg      ?)TFFFTTFrH   )r~   g        )TFFTTT)r   r   Zaranger   ry   r   r   )r   r   r   r   r   r   test_diff_explicit	  s    


z-TestMaskedArrayCalculation.test_diff_explicitN)r@   rA   rB   r'   rC   rD   r   r   r   r   r   r   r}      s   
	r}   c                   @   s   e Zd ZdS )TestMaskedQuantityCalculationNre   r   r   r   r   r     s   r   c                   @   s   e Zd ZdS )TestMaskedLongitudeCalculationNre   r   r   r   r   r     s   r   c                   @   sZ   e Zd Zejdddgdd Zejdddgdd Zejdddgdd	 Zd
S )TestMaskedArraySortingr3   r[   r   c                 C   s>   t j| jf|d}| j }d|| j< ||}t|| d S )Nr5      Ј B)r   lexsortr   r   copyr.   Zargsortr   )r   r3   Z
ma_lexsortfilledr   r   r   r   test_lexsort1  s
    


z$TestMaskedArraySorting.test_lexsort1c           
      C   s   t | j | jj }t j| j|f|d}| jd}|d}t j||f|d}t|| t j|| jf|d}t j||f|d}t|| t jt j	|| jgdd|d}	t|	| d S Nr5   r   r   )
r   rk   r   r   r$   r   r   r   r   stack)
r   r3   r   mamb_lexsortZfilled_afilled_bexpected_abmbma_lexsortexpected_bambma_lexsort2r   r   r   test_lexsort2'  s    


z$TestMaskedArraySorting.test_lexsort2c           	      C   s   t | j | jj }t j| j|f|d}|d}t j| j|f|d}t	|| t j|| jf|d}t j|| jf|d}t	|| t jt j
|| jgdd|d}t	|| d S r   )r   rk   r   r   r$   r   r   r   r   r   r   )	r   r3   r   r   r   r   r   r   r   r   r   r   test_lexsort_mix5  s    


z'TestMaskedArraySorting.test_lexsort_mixN)	r@   rA   rB   r'   rC   rD   r   r   r   r   r   r   r   r     s   

r   ) __doc__r'   Znumpyr   Znumpy.testingr   Zastropyr   rJ   Zastropy.unitsr   Zastropy.utils.masked.corer   Ztest_maskedr   r   r	   r
   r   rF   rM   rO   rR   rd   rf   rg   r{   r|   r}   r   r   r   r   r   r   r   <module>   s6   Z	%0