U
    e»{j34  ã                   @   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 )%zðTest 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é   )ÚLongitudeSetupÚMaskedArraySetupÚQuantitySetupÚ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   úh/var/www/html/bwave/python/venv/lib/python3.8/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�}||ks<t‚t||ƒ d S ©N)Úout)r   r   r   ÚnpÚ
zeros_liker   ÚAssertionErrorr
   )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�}||ks>t‚t|j|ƒ t|j	t  
|jt¡ƒ d S r   )r   Úaddr   r   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   s<   t  | jj¡}t t¡� t j| j| j|d� W 5 Q R X d S r   )	r   r$   r   r%   ÚpytestÚraisesÚ	TypeErrorr#   r   ©r   r   r   r   r   Útest_ufunc_inplace_error7   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_outer<   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_ufuncF   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�}||ksŠt‚t||ƒ d S )N©r4   ©r4   r   )r   r#   Úreducer   r   r-   r   r   r   r   r   Z	ones_liker    r
   )r   r4   Ú	ma_reducer   r   r   Z
ma_reduce2r   r   r   Útest_add_reduceM   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�}||ksLt	‚t
|j|ƒ t
|jt  |jt¡ƒ d S )Nr   r6   r7   )r   r#   r8   r   r   r   Zonesr%   r&   r    r   r   r   r$   )r   Za_reducer   r!   r   r   r   Útest_add_reduce_no_masked_inputZ   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 ©Nr6   )	r   Úminimumr8   r   r   r-   r   r   r   ©r   r4   r9   r   r   r   r   r   Útest_minimum_reduceb   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   Úmaximumr8   r   r   r-   r   r   r   r>   r   r   r   Útest_maximum_reducej   s
    z$MaskedUfuncTests.test_maximum_reduceN)Ú__name__Ú
__module__Ú__qualname__r(   ÚmarkÚparametrizer   r#   ÚsubtractÚdivideZarctan2r=   r   r"   r'   r,   r.   r1   r3   r:   r;   r?   rA   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 )ÚTestMaskedArrayUfuncsr4   r5   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   Úmultiplyr8   r   r   r-   r   r   r   r>   r   r   r   Útest_multiply_reduceu   s
    z*TestMaskedArrayUfuncs.test_multiply_reducec              	   C   s`   t  ddg¡}dtj }t t¡� ||@  W 5 Q R X t|ƒ}t t¡� ||@  W 5 Q R X dS )zˆ
        If the unmasked operation returns NotImplemented, this
        should lead to a TypeError also for the masked version.
        r   é   é   N)r   ÚarrayÚuÚmr(   r)   r*   r   )r   r   r   r   r   r   r   Ú$test_ufunc_not_implemented_for_other}   s    
z:TestMaskedArrayUfuncs.test_ufunc_not_implemented_for_otherN)rB   rC   rD   r(   rE   rF   rK   rQ   r   r   r   r   rI   s   s   
rI   c                   @   s   e Zd Zdd„ ZdS )ÚTestMaskedQuantityUfuncsc              	   C   s@   t t | jj¡ƒ}t t¡� tj| j| j	|d� W 5 Q R X 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)rB   rC   rD   rS   r   r   r   r   rR   Œ   s   rR   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�}||ks8t	‚t | j| j¡ 
t¡}t||ƒ d S r   )r   r   r$   r   r%   rO   rP   r#   r   r    Úviewr   r
   )r   r   r!   Úexpectedr   r   r   Ú#test_ufunc_inplace_quantity_initial”   s
    z=TestMaskedLongitudeUfuncs.test_ufunc_inplace_quantity_initialN)rB   rC   rD   rW   r   r   r   r   rT   “   s   rT   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   r6   )r   r   ÚnewaxisÚconcatenater   r   r   r/   r0   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 rY   )r   r   rZ   r[   r   r   r$   r%   r&   r0   r   r   r   r\   r   r   r   Útest_concatenate_not_all_masked¥   s     ÿz<TestMaskedArrayConcatenation.test_concatenate_not_all_maskedÚobjr   rL   rM   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 ©Néÿÿÿÿr6   )
r   Úinsertr   Úmcr   r   r2   r/   Úmask_cr
   )r   r_   Zmc_in_arV   r   r   r   Útest_insert¯   s    þz(TestMaskedArrayConcatenation.test_insertc              	   C   s8   t  t¡�$ tj| jtddd�| jdd� W 5 Q R X d S )Nr   F)r   ra   r6   )r(   r)   r*   r   rb   r   r   rc   )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 r`   )
r   Úappendr   rc   r   r   r2   r/   rd   r
   )r   Zmc_to_arV   r   r   r   Útest_append¼   s    þz(TestMaskedArrayConcatenation.test_appendN)rB   rC   rD   r]   r^   r(   rE   rF   Úslicere   rf   rh   r   r   r   r   rX   œ   s   

rX   c                   @   s   e Zd ZdS )ÚTestMaskedQuantityConcatenationN©rB   rC   rD   r   r   r   r   rj   Å   s   rj   c                   @   s   e Zd ZdS )Ú TestMaskedLongitudeConcatenationNrk   r   r   r   r   rl   É   s   rl   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(t‚|jj|ks8t‚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   r%   ÚbarV   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*t‚|jj|ks:t‚ttj| jj	|dd�tj| jj|dd�ƒ}t
||ƒ d S )NT)r%   rp   ro   )r   r%   r   Ú_applyr   rq   r    r   r   r   r
   rr   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 rn   )r   Úbroadcast_arraysr   r   rc   r   r   r2   r/   r0   rd   Ú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 )NTro   r   r   rL   )	r   rw   r   r   r2   r   rq   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.t‚t j| j| j| j	dd�}t j| j
| j| jdd�}t|||ƒD ]"\}}}t|j|ƒ t|j|ƒ qjd S )NFro   c                 s   s   | ]}t |jƒtjkV  qd S r   )Útyper   r   Zndarray)Ú.0ry   r   r   r   Ú	<genexpr>ø   s     zMTestMaskedArrayBroadcast.test_broadcast_arrays_subok_false.<locals>.<genexpr>)r   rw   r   r   rc   Úallr    r   r   r2   r/   r0   rd   rx   r   r   r   )r   r   r   r0   ry   rz   Zmask_r   r   r   Ú!test_broadcast_arrays_subok_falseõ   s    z:TestMaskedArrayBroadcast.test_broadcast_arrays_subok_falseN)rB   rC   rD   rt   rv   r{   r|   r�   r   r   r   r   rm   Í   s
   rm   c                   @   s   e Zd ZdS )ÚTestMaskedQuantityBroadcastNrk   r   r   r   r   r‚      s   r‚   c                   @   s   e Zd ZdS )ÚTestMaskedLongitudeBroadcastNrk   r   r   r   r   rƒ     s   rƒ   c                   @   s0   e Zd Zej ddddg¡dd„ ƒZdd„ Zd	S )
ÚTestMaskedArrayCalculationzn,axis)r   ra   )rL   ra   )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)Únr4   )
r   Údiffr   r   r   Únanr   Úisnanr   r   )r   r…   r4   Úmdar   Znan_maskr   r   r   r   Ú	test_diff	  s    z$TestMaskedArrayCalculation.test_diffc              
   C   s¦   t t d¡ddddddddgƒ}t |¡}t |jdk¡s>t‚t |jdddddddgk¡s`t‚tj|dd�}t |jdk¡s‚t‚t |jddddddgk¡s¢t‚d S )Ng       @TFg      ð?rL   )r…   g        )r   r   Zaranger†   r€   r   r    r   )r   r   r‰   r   r   r   Útest_diff_explicit  s     ÿ
"z-TestMaskedArrayCalculation.test_diff_explicitN)rB   rC   rD   r(   rE   rF   rŠ   r‹   r   r   r   r   r„     s   
	r„   c                   @   s   e Zd ZdS )ÚTestMaskedQuantityCalculationNrk   r   r   r   r   rŒ     s   rŒ   c                   @   s   e Zd ZdS )ÚTestMaskedLongitudeCalculationNrk   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 )ÚTestMaskedArraySortingr4   ra   r   c                 C   s>   t j| jf|d�}| j ¡ }d|| j< | |¡}t||ƒ d S )Nr6   ç   ÐˆÃ B)r   Úlexsortr   r   Úcopyr/   Zargsortr   )r   r4   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 ©Nr6   r�   r   )
r   rq   r   r   r%   r‘   r�   r’   r   Ústack)
r   r4   r   Úmamb_lexsortZfilled_aÚfilled_bÚexpected_abÚmbma_lexsortÚexpected_baÚmbma_lexsort2r   r   r   Útest_lexsort20  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   rq   r   r   r%   r‘   r�   r   r’   r   r•   )	r   r4   r   r–   r—   r˜   r™   rš   r›   r   r   r   Útest_lexsort_mix>  s    


z'TestMaskedArraySorting.test_lexsort_mixN)	rB   rC   rD   r(   rE   rF   r“   rœ   r�   r   r   r   r   rŽ   '  s   

rŽ   ) Ú__doc__Únumpyr   r(   Znumpy.testingr   Zastropyr   rO   Zastropy.unitsr   Zastropy.utils.masked.corer   Ztest_maskedr   r   r	   r
   r   rI   rR   rT   rX   rj   rl   rm   r‚   rƒ   r„   rŒ   r�   rŽ   r   r   r   r   Ú<module>   s*   [	)3