
    IR-eB                        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 dd	lmZmZmZmZ  G d
 de          Z G d de          Z G d dee          Z G d dee          Z G d de          Z G d dee          Z G d dee          Z G d de          Z G d dee          Z G d dee          Z G d de          Z G d  d!ee          Z G d" d#ee          Z  G 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)NUMPY_LT_1_25)Masked   )LongitudeSetupMaskedArraySetupQuantitySetupassert_masked_equalc                      e Zd Zej                            dej        ej        ej	        ej
        ej        f          ej                            dg d          d                         Zej                            dddg          d             Zej                            dddg          d	             Zd
 Zd Zej                            ed          d             Zej                            dej        j        ej        j        f          ej                            dg d          d                         Zej                            dej        j        ej        j        f          d             Zd Zej                            dd          d             Zd Zej                            dd          d             Zej                            dd          d             ZdS )MaskedUfuncTestsufuncza, b))mamb)r   b)ar   c                 4   t          | |          t          | |          }}t          |dt          j        |j        t                              }t          |dt          j        |j        t                              } |||          } || j        | j                  }||z  }t          |j        |           t          |j	        |           t          t          j        |j                            }	 ||||	          }
|
|	u sJ t          |
|           d S Nmaskout)getattrnpzerosshapeboolr   r   r   unmaskedr   r   
zeros_liker   selfr   r   r   mask_amask_bresultexpected_dataexpected_maskr   result2s              Ilib/python3.11/site-packages/astropy/utils/masked/tests/test_functions.pytest_2op_ufunczMaskedUfuncTests.test_2op_ufunc   s   
 tQq!1!11FBHQWd$;$;<<FBHQWd$;$;<<q!dfdf-- 	6?M:::6;666R]6?3344%1#&&&#~~~~GV,,,,,    	base_maskTFc                 L   | j                                         }d|j                            t          j                  d<   ||j        d<   |                                }t	          j        g dg dg          }t	          j        | j         | j	        ||          }t	          j
        |j        |          |j        d         k              sJ t	          j
        |j        |         | j        | j        z   |         k              sJ |j                                        }t	          j        | j        | j        ||           |j                                        }t	          j        | j        | j        ||           t#          |j        |           t#          |j        |           d S )N      ".TFF)FTFr   wherer   r   )r   copyr   viewr   ndarray_maskarrayaddr   allr   r   r   
logical_orr"   r#   r   r!   r+   baser   r0   r$   expectedr&   s           r(   test_ufunc_inplace_wherez)MaskedUfuncTests.test_ufunc_inplace_where/   sg    w||~~.22:&&s+#
3iikk...0D0D0DEFFc???vfouf-t1DDEEEEEvfoe,$&%0HHIIIII=%%''
tvtv859999	((
dk4;MOOOO6?H5556;66666r*   c                 
   | j                                         }d|j                            t          j                  d<   ||j        d<   |                                }t          g dg dgg dg dg          }t	          j        | j         | j	        ||          }t	          j
        |j        |j                  |j        d         k              sJ t	          j
        |j        |j                 | j        | j        z   |j                 k              sJ t	          j
        |j        |j                           sJ t	          j
        |j        |j         |j         z           |j        d         k              sJ t	          j
        |j        |j         |j        z           | j        | j        z  |j         |j        z           k              sJ |j                                        }t	          j        | j        | j        ||j                   |j                                        }t	          j        | j        | j        ||j                   ||j        z  }t#          |j        |           t#          |j        |           d S )	Nr-   .)TFT)FFTr.   r   r/   r1   )r   r2   r   r3   r   r4   r5   r   r7   r   r8   r   r   r   r"   r#   r9   r   r:   s           r(   test_ufunc_inplace_masked_wherez0MaskedUfuncTests.test_ufunc_inplace_masked_whereC   sQ   w||~~.22:&&s+#
3iikk   "6"6"67&&&(;(;(;<
 
 
 c???vfou~o6$-:MMNNNNNvOEN+/PP
 
 	
 	
 	
 vfk%*-.....vfk5:+"?@DIdOSTTTTTvKen45dk)EJ;+GHI
 
 	
 	
 	

 =%%''
tvtv85>BBBB	((
dk4;MXXXX#6?H5556;66666r*   c                 b   t          j        | j        | j                  }t	          t          j        |                    }t          j        | j        | j        |          }||u sJ t          |j        |           t          |j        t          j	        |j
        t                               d S Nr   )r   r7   r   r   r   r   r   r   r   r   r   r   )r!   a_br   r$   s       r(   "test_ufunc_inplace_no_masked_inputz3MaskedUfuncTests.test_ufunc_inplace_no_masked_inputb   s    fTVTV$$R]3''((C000}}}}6?C0006;D(A(ABBBBBr*   c                     t          j        | j        j                  }t	          j        t                    5  t          j        | j        | j        |           d d d            d S # 1 swxY w Y   d S rB   )	r   r   r   r   pytestraises	TypeErrorr7   r   r!   r   s     r(   test_ufunc_inplace_errorz)MaskedUfuncTests.test_ufunc_inplace_errorj   s    htw}%%]9%% 	. 	.F47DG----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   "A''A+.A+z(masked where not supported in numpy<1.25)reasonc           
          | j                                         }t          j        t                    5  t          j        | j         | j        |t          dd                     d d d            d S # 1 swxY w Y   d S )NTr?   r/   )	r   r2   rF   rG   rH   r   r7   r   r   rI   s     r(   %test_ufunc_inplace_error_masked_wherez6MaskedUfuncTests.test_ufunc_inplace_error_masked_wherep   s     fkkmm]9%% 	K 	KF4646s&D2I2I2IJJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   2A22A69A6c                 j   t          | |          t          | |          }}t          |dt          j        |j        t                              }t          |dt          j        |j        t                              } |||          } || j        | j                  }t          j                            ||          }t          |j
        |           t          |j        |           t          t          j        |j
                            }	 ||||	          }
|
|	u sJ t          |
|           d S r   )r   r   r   r   r   r   r   r9   outerr   r   r   r   r   r   r    s              r(   test_2op_ufunc_outerz%MaskedUfuncTests.test_2op_ufunc_outerx   s    tQq!1!11FBHQWd$;$;<<FBHQWd$;$;<<q!dfdf--++FF;; 	6?M:::6;666R]6?3344%1#&&&#~~~~GV,,,,,r*   c                 6    || j         | j                  }t          t          j        |          d          } || j         | j        |          }t          |j        |           t          |j        t          j        |j	        t                               d S )NTr   )dtype)r   r   r   r   r   r   r   r   r   r   r   )r!   r   r%   r   r$   s        r(   $test_2op_ufunc_outer_no_masked_inputz5MaskedUfuncTests.test_2op_ufunc_outer_no_masked_input   s    dfdf--R]=11488tvtv3///3<77738RXcit%D%D%DEEEEEr*   c                     t          j        | j        | j        | j                  }t          j        | j        | j        | j                  }| j        }t          |j        |           t          |j	        |           d S N)
r   clipr   r   cr   r"   r   r   r   )r!   ma_mbr%   r&   s       r(   test_3op_ufunczMaskedUfuncTests.test_3op_ufunc   se    00775>=9995:}55555r*   axisr   r   Nc                 >   t           j                            | j        |          }t           j                            | j        |          }t           j                            | j        j        |          }t          |j        |           t          |j        |           t          t          j
        |j                  t          j        |j                            }t           j                            | j        ||          }||u sJ t          ||           d S )NrZ   rZ   r   )r   r7   reducer   r   r9   r   r   r   r   r   	ones_liker   )r!   rZ   	ma_reducer%   r&   r   
ma_reduce2s          r(   test_add_reducez MaskedUfuncTests.test_add_reduce   s    FMM$'M55	df488,,TW\,EE9-}===9>=999R]9#566Y^8T8TUUV]]473]??
S    J	22222r*   c                    t           j                            | j        d          }t	          t          j        |          t          j        |j        t                              }t           j                            | j        d|          }||u sJ t          |j
        |           t          |j        t          j        |j        t                               d S )Nr   r]   r^   )r   r7   r_   r   r   r   onesr   r   r   r   r   r   )r!   a_reducer   r$   s       r(   test_add_reduce_no_masked_inputz0MaskedUfuncTests.test_add_reduce_no_masked_input   s    6==a=00R]8,,bghnd.K.KLLtvA377}}}}3<22238RXhnd%C%CDDDDDr*   c                 H   t           j                            | j        |          }t           j                            | j        |          }t           j                            | j        j        |          }t          |j        |           t          |j        |           d S Nr]   )	r   minimumr_   r   r   r9   r   r   r   r!   rZ   ra   r%   r&   s        r(   test_minimum_reducez$MaskedUfuncTests.test_minimum_reduce       J%%dgD%99	
))$&t)<<,,TW\,EE9-}===9>=99999r*   c                 H   t           j                            | j        |          }t           j                            | j        |          }t           j                            | j        j        |          }t          |j        |           t          |j        |           d S ri   )	r   maximumr_   r   r   r9   r   r   r   rk   s        r(   test_maximum_reducez$MaskedUfuncTests.test_maximum_reduce   rm   r*   N)__name__
__module____qualname__rF   markparametrizer   r7   subtractdividearctan2rj   r)   r=   r@   rD   rJ   xfailr   rM   rO   rP   rS   rY   rc   rg   rl   rp    r*   r(   r   r      s       ["&"+ry"*bjI  [V%M%M%MNN- - ON -" [[4-887 7 987& [[4-887 7 987<C C C. . . [}-WXXK K YXK [Wrv|RZ5E&FGG[V%M%M%MNN- - ON HG-" [Wrv|RZ5E&FGGF F HGF6 6 6 [V\22
3 
3 32
3E E E [V\22: : 32: [V\22: : 32: : :r*   r   c                   \    e Zd Zej                            dd          d             Zd ZdS )TestMaskedArrayUfuncsrZ   r[   c                 H   t           j                            | j        |          }t           j                            | j        |          }t           j                            | j        j        |          }t          |j        |           t          |j        |           d S ri   )	r   multiplyr_   r   r   r9   r   r   r   rk   s        r(   test_multiply_reducez*TestMaskedArrayUfuncs.test_multiply_reduce   s    K&&twT&::	**46*==,,TW\,EE9-}===9>=99999r*   c                 H   t          j        ddg          }dt          j        z  }t	          j        t                    5  ||z   ddd           n# 1 swxY w Y   t          |          }t	          j        t                    5  ||z   ddd           dS # 1 swxY w Y   dS )z
        If the unmasked operation returns NotImplemented, this
        should lead to a TypeError also for the masked version.
        r         N)r   r6   umrF   rG   rH   r   )r!   r   r   r   s       r(   $test_ufunc_not_implemented_for_otherz:TestMaskedArrayUfuncs.test_ufunc_not_implemented_for_other   s   
 HaVG]9%% 	 	EE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 AYY]9%% 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAABBBN)rq   rr   rs   rF   rt   ru   r   r   rz   r*   r(   r|   r|      sO        [V\22: : 32:    r*   r|   c                       e Zd Zd ZdS )TestMaskedQuantityUfuncsc                    t          t          j        | j        j                            }t          j        t                    5  t          j        | j        | j	        |           d d d            d S # 1 swxY w Y   d S rB   )
r   r   r   r   r   rF   rG   rH   r7   r   rI   s     r(   test_ufunc_inplace_error2z2TestMaskedQuantityUfuncs.test_ufunc_inplace_error2   s    RXdgm,,--]9%% 	. 	.F47DG----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   "A44A8;A8N)rq   rr   rs   r   rz   r*   r(   r   r      s#        . . . . .r*   r   c                       e Zd Zd ZdS )TestMaskedLongitudeUfuncsc                 R   t          t          j        | j        j                  t
          j        z            }t          j        | j        | j        |          }||u sJ t          j        | j        | j                  	                    t                    }t          ||           d S rB   )r   r   r   r   r   r   r   r7   r   r3   r   r   )r!   r   r$   r<   s       r(   #test_ufunc_inplace_quantity_initialz=TestMaskedLongitudeUfuncs.test_ufunc_inplace_quantity_initial   s    RXdgm,,344c222}}}}6$'47++00::FH-----r*   N)rq   rr   rs   r   rz   r*   r(   r   r      s#        . . . . .r*   r   c                       e Zd Zd Zd Zej                            dd edd          f          d             Z	d Z
d	 Zd
S )TestMaskedArrayConcatenationc                    | j         t          j                 }t          j        | j        |fd          }t          j        | j        | j        t          j                 fd          }t          j        | j        | j        t          j                 fd          }t          |j
        |           t          |j        |           d S Nr   r]   )r   r   newaxisconcatenater   r   r   r"   r#   r   r   r   r!   r   
concat_a_br%   r&   s        r(   test_concatenatez-TestMaskedArrayConcatenation.test_concatenate   s    WRZ ^TWbM:::
rz0B'C!LLLT[5L'MTUVVV:.>>>:?M:::::r*   c                    | j         t          j                 }t          j        | j        |fd          }t          j        | j        | j        t          j                 fd          }t          j        t          j        | j        j        t                    | j	        t          j                 fd          }t          |j        |           t          |j        |           d S r   )r   r   r   r   r   r   r   r   r   r#   r   r   r   r   s        r(   test_concatenate_not_all_maskedz<TestMaskedArrayConcatenation.test_concatenate_not_all_masked   s    WRZ ^TVRLq999
rz0B'C!LLLXdflD))4;rz+BC!
 
 
 	:.>>>:?M:::::r*   objr   r   r   c           	      
   t          j        | j        || j        d          }t	          t          j        | j        || j        d          t          j        | j        || j        d                    }t          ||           d S Nr]   )
r   insertr   mcr   r   rW   r"   mask_cr   )r!   r   mc_in_ar<   s       r(   test_insertz(TestMaskedArrayConcatenation.test_insert   sy    )DGS$';;;Idfc46333Idk3"===
 
 	GX.....r*   c                     t          j        t                    5  t          j        | j        t          dd          | j        d           d d d            d S # 1 swxY w Y   d S )Nr   Fr?   r   r]   )rF   rG   rH   r   r   r   r   r   )r!   s    r(   test_insert_masked_objz3TestMaskedArrayConcatenation.test_insert_masked_obj  s    ]9%% 	H 	HIdgvae444dgBGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   2AA Ac                    t          j        | j        | j        d          }t	          t          j        | j        | j        d          t          j        | j        | j        d                    }t          ||           d S r   )
r   appendr   r   r   r   rW   r"   r   r   )r!   mc_to_ar<   s      r(   test_appendz(TestMaskedArrayConcatenation.test_append	  ss    )DGTW2666Idfdf2...Idk4;R888
 
 	GX.....r*   N)rq   rr   rs   r   r   rF   rt   ru   slicer   r   r   rz   r*   r(   r   r      s        ; ; ;; ; ; [UQa$455/ / 65/H H H/ / / / /r*   r   c                       e Zd ZdS )TestMaskedQuantityConcatenationNrq   rr   rs   rz   r*   r(   r   r             Dr*   r   c                       e Zd ZdS ) TestMaskedLongitudeConcatenationNr   rz   r*   r(   r   r     r   r*   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestMaskedArrayBroadcastc                 P   | j         j        }t          j        | j        |d          }|j        |k    sJ |j        j        |k    sJ t          t          j        | j        j        |d          t          j        | j        j        |d                    }t          ||           d S NTsubok)	r   r   r   broadcast_tor   r   r   r   r   r!   r   bar<   s       r(   test_broadcast_toz*TestMaskedArrayBroadcast.test_broadcast_to  s    _TWe4888x5    w}%%%%ODG,e4@@@ODGL%t<<<
 
 	B)))))r*   c                 f   | j         j        }| j                            t          j        |d          }|j        |k    sJ |j        j        |k    sJ t          t	          j        | j        j        |d          t	          j        | j        j        |d                    }t          ||           d S )NT)r   r   r   )
r   r   r   _applyr   r   r   r   r   r   r   s       r(   test_broadcast_to_using_applyz6TestMaskedArrayBroadcast.test_broadcast_to_using_apply&  s    W^^BO5^EEx5    w}%%%%ODG,e4@@@ODGL%t<<<
 
 	B)))))r*   c                 p   t          j        | j        | j        | j        d          }t          j        | j        | j        | j        d          }t          j        | j        | j	        | j
                  }t          |||          D ]0\  }}}t          |j        |           t          |j        |           1d S r   )r   broadcast_arraysr   r   r   r   r   rW   r"   r#   r   zipr   r   r   )r!   r   r   bmmb_b_bm_s          r(   test_broadcast_arraysz.TestMaskedArrayBroadcast.test_broadcast_arrays2  s     $'47$GGGdCCC dk4;GGArNN 	. 	.LCSs|R000sx----	. 	.r*   c                 z   t          j        | j        | j        | j        d          }t          |d         | j                   t          j        | j        | j        j        d          }t          |d         |           t          j        | j        | j        j        d          }t          |d         |           d S )NTr   r   r   r   )	r   r   r   r   rW   r   r   r   r   )r!   r   	expected1	expected2s       r(   $test_broadcast_arrays_not_all_maskedz=TestMaskedArrayBroadcast.test_broadcast_arrays_not_all_masked:  s     $&EEE2a5$&)))ODGTV\FFF	BqE9---ODFDFLEEE	2a5),,,,,r*   c                    t          j        | j        | j        | j        d          }t          d |D                       sJ t          j        | j        | j        | j        d          }t          j        | j	        | j
        | j        d          }t          |||          D ]0\  }}}t          |j        |           t          |j        |           1d S )NFr   c              3   V   K   | ]$}t          |j                  t          j        u V  %d S rU   )typer   r   r4   ).0r   s     r(   	<genexpr>zMTestMaskedArrayBroadcast.test_broadcast_arrays_subok_false.<locals>.<genexpr>E  s3      BB4%%3BBBBBBr*   )r   r   r   r   r   r8   r   r   rW   r"   r#   r   r   r   r   r   )r!   r   r   r#   r   r   mask_s          r(   !test_broadcast_arrays_subok_falsez:TestMaskedArrayBroadcast.test_broadcast_arrays_subok_falseB  s     $'47%HHHBBrBBBBBBBBeDDD$T[$+t{RWXXX!"a00 	0 	0NCUs|R000sx////	0 	0r*   N)rq   rr   rs   r   r   r   r   r   rz   r*   r(   r   r     s_        	* 	* 	*
* 
* 
*. . .- - -0 0 0 0 0r*   r   c                       e Zd ZdS )TestMaskedQuantityBroadcastNr   rz   r*   r(   r   r   M  r   r*   r   c                       e Zd ZdS )TestMaskedLongitudeBroadcastNr   rz   r*   r(   r   r   Q  r   r*   r   c                   `    e Zd Zej                            dg d          d             Zd ZdS )TestMaskedArrayCalculationzn,axis))r   r   )r   r   )r   r   c                 ~   t          j        | j        ||          }t          j        | j        ||          }t          j        | j                  }t           j        || j        j        <   t          j        t          j        |||                    }t          |j	        |           t          |j        |           d S )N)nrZ   )
r   diffr   r   r   nanr   isnanr   r   )r!   r   rZ   mdar%   nan_maskr&   s          r(   	test_diffz$TestMaskedArrayCalculation.test_diffV  s    gdg...400=((!#QT!B!B!BCC3<77738]33333r*   c                    t          t          j        d          g d          }t          j        |          }t          j        |j        dk              sJ t          j        |j        g dk              sJ t          j        |d          }t          j        |j        dk              sJ t          j        |j        g dk              sJ d S )	Ng       @)TFFFFTFFg      ?)TFFFTTFr   )r   g        )TFFTTT)r   r   aranger   r8   r   r   )r!   r   r   s      r(   test_diff_explicitz-TestMaskedArrayCalculation.test_diff_explicit`  s    IcNNRRR
 
 gbkkvclc)*****vch"P"P"PPQQQQQgbAvclc)*****vch"H"H"HHIIIIIIIr*   N)rq   rr   rs   rF   rt   ru   r   r   rz   r*   r(   r   r   U  s\        [X'A'A'ABB4 4 CB4	J 	J 	J 	J 	Jr*   r   c                       e Zd ZdS )TestMaskedQuantityCalculationNr   rz   r*   r(   r   r   l  r   r*   r   c                       e Zd ZdS )TestMaskedLongitudeCalculationNr   rz   r*   r(   r   r   p  r   r*   r   c                       e Zd Zej                            dddg          d             Zej                            dddg          d             Zej                            dddg          d             ZdS )TestMaskedArraySortingrZ   r   r   c                     t          j        | j        f|          }| j                                        }d|| j        <   |                    |          }t          ||           d S )Nr]      Ј B)r   lexsortr   r   r2   r"   argsortr   )r!   rZ   
ma_lexsortfilledr%   s        r(   test_lexsort1z$TestMaskedArraySorting.test_lexsort1u  s\    Z
666
!t{t,,:}55555r*   c                 h   t          j        | j         | j        j                                                  }t          j        | j        |f|          }| j                            d          }|                    d          }t          j        ||f|          }t          ||           t          j        || j        f|          }t          j        ||f|          }t          ||           t          j        t          j	        || j        gd          |          }	t          |	|           d S Nr]   r   r   )
r   r   r   r   r   r2   r   r   r   stack)
r!   rZ   r   mamb_lexsortfilled_afilled_bexpected_abmbma_lexsortexpected_bambma_lexsort2s
             r(   test_lexsort2z$TestMaskedArraySorting.test_lexsort2}  s   _dgXtw}55::<<z47B-d;;;7>>#&&99S>>j(H!5DAAA<555z2tw-d;;;j(H!5DAAA<555
28RM#B#B#BNNN=+66666r*   c                 H   t          j        | j         | j        j                                                  }t          j        | j        |f|          }|                    d          }t          j        | j        |f|          }t          ||           t          j        || j        f|          }t          j        || j        f|          }t          ||           t          j        t          j
        || j        gd          |          }t          ||           d S r   )r   r   r   r   r   r2   r   r   r   r   r   )	r!   rZ   r   r   r   r   r   r   r   s	            r(   test_lexsort_mixz'TestMaskedArraySorting.test_lexsort_mix  s    _dgXtw}55::<<z462,T:::99S>>j$&(!3$???<555z2tv,T:::j(DF!3$???<555
28RLq#A#A#AMMM=+66666r*   N)	rq   rr   rs   rF   rt   ru   r   r   r   rz   r*   r(   r   r   t  s        [Vb!W--6 6 .-6 [Vb!W--7 7 .-7 [Vb!W--
7 
7 .-
7 
7 
7r*   r   )"__doc__numpyr   rF   numpy.testingr   astropyr   r   astropy.unitsr    astropy.utils.compat.numpycompatr   astropy.utils.masked.corer   test_maskedr	   r
   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   rz   r*   r(   <module>r     sC         , , , , , ,       " " " " " " : : : : : : , , , , , ,           d: d: d: d: d:' d: d: d:N    ,   2. . . . ./ . . .. . . . . 0. . . .&/ &/ &/ &/ &/#3 &/ &/ &/R	 	 	 	 	&BM 	 	 		 	 	 	 	'C^ 	 	 	00 00 00 00 00/ 00 00 00f	 	 	 	 	":M 	 	 		 	 	 	 	#;^ 	 	 	J J J J J!1 J J J.	 	 	 	 	$> 	 	 		 	 	 	 	%? 	 	 	"7 "7 "7 "7 "7- "7 "7 "7 "7 "7r*   