
    IR-e                     P   d dl Zd dlZd dlZd dlmZ d dlZd dlZd dl	m
Z d dlmZ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 d d
lmZ  edg d          Z edg d          Z edg d          Zej         j!        d             Z"ej         j!        d             Z#ej         j!        d             Z$ G d d          Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d d          Z* G d  d!          Z+ej         ,                     e-ej.        j/        d"           d#$           G d% d&                      Z0 G d' d(          Z1 G d) d*          Z2 G d+ d,          Z3ej4         G d- d.                      Z5ej4         G d/ d0e5                      Z6 ej4        d12           G d3 d4e6                      Z7 G d5 d6e7          Z8 G d7 d8          Z9erd d9l:m;Z< e<j=        e<j>        e<j?        e<j@        e<jA        e<jB        e<jC        e<jD        e<jE        e<jF        e<jG        e<jH        e<jI        e<jJ        e<jK        e<jL        e<jM        e<jN        e<jO        fZP eQe<jR        ej
                  rePe<jR        e<jS        fz  ZPd: ZT G d; d<          ZUdS dS )=    N)
namedtuple)ufunc)assert_allcloseassert_array_equal)units)quantity_helper)UfuncHelpershelper_sqrt)NUMPY_LT_1_25)	HAS_SCIPYtestcasefq_inq_outtestexcr   r   excmsgtestwarnr   r   wfilterc                      | j         | j         }t          |t                    s|fn|}t	          || j                  D ]3\  }}|j        |j        k    sJ t          |j        |j        d           4d S )NgV瞯<)atol)	r   r   
isinstancetuplezipr   unitr   value)tcresultsresultexpecteds       Hlib/python3.11/site-packages/astropy/units/tests/test_quantity_ufuncs.pytest_testcaser&      s    bdBGnG !+7E : :GwjjG22 D D{hm++++hn7CCCCCD D    c                     t          j        | j                  5 } | j        | j          d d d            n# 1 swxY w Y   | j        | j        |j        j        d         v sJ d S d S )Nr   )pytestraisesr   r   r   r   r    args)ter   s     r%   test_testexcr-   %   s    	rv		 #bg              	vv***** **s   6::c                     t          j                    5  t          j        | j                    | j        | j          d d d            d S # 1 swxY w Y   d S N)warningscatch_warningsfilterwarningsr   r   r   )tws    r%   test_testwarnr4   -   s    		 	"	"  
+++bg                 s   )A

AAc                       e Zd Zej                            ed          d             Zd Zd Z	ej        j
        d             ZdS )TestUfuncHelpersz(scipy coverage is known to be incompletereasonc                    d t           j        j        j                                        D             }t
          j        t          t
          j        	                                          z  }||z
  t                      k    sJ d t          j                                        D             }||z
  |z
  t                      k    sJ dS )zTest that we cover all ufunc'sc                 F    h | ]}t          |t          j                  |S  r   npr   .0r   s     r%   	<setcomp>z1TestUfuncHelpers.test_coverage.<locals>.<setcomp>?   s:     
 
 
%**

 
 
r'   c                 F    h | ]}t          |t          j                  |S r;   r<   r>   s     r%   r@   z1TestUfuncHelpers.test_coverage.<locals>.<setcomp>K   s:     
 
 
%**

 
 
r'   N)r=   coreumath__dict__valuesqhUNSUPPORTED_UFUNCSsetUFUNC_HELPERSkeys
erfa_ufunc)selfall_np_ufuncsall_q_ufuncsall_erfa_ufuncss       r%   test_coveragezTestUfuncHelpers.test_coverage;   s    
 
/6688
 
 
 ,s23C3H3H3J3J/K/KK|+suu4444
 
#,3355
 
 

 m+o=FFFFFFr'   c                 0    dt           j        j        v sJ d S )Nzscipy.special)rF   rI   modulesrL   s    r%   test_scipy_registeredz&TestUfuncHelpers.test_scipy_registeredR   s    ""2":::::::r'   c                    t           j        t          j        v sJ t           j        t          j        vsJ d t          j        t           j        <   t           j        t          j        vsJ t           j        t          j        v sJ t          j        t           j                 t          j        t           j        <   t           j        t          j        v sJ t           j        t          j        vsJ d S r/   )r=   addrF   rI   rG   subtractrS   s    r%   test_removal_additionz&TestUfuncHelpers.test_removal_additionV   s    v)))))vR22222#' vR-----v.....#%#3BK#@ v)))))vR2222222r'   c                 x  	 d fd}d}t           j                            |          5 t          d          D ]b}t	                      		                    ddg|           	fdt          |          D             }d	 |D             }|t          g|z  k    sJ c	 d d d            d S # 1 swxY w Y   d S )
Nc                  $    t          j        | i |S r/   )r=   sqrt)r+   kwargss     r%   dummy_ufuncz8TestUfuncHelpers.test_thread_safety.<locals>.dummy_ufuncb   s    7D+F+++r'   c                       t           iS r/   r
   )r]   s   r%   registerz5TestUfuncHelpers.test_thread_safety.<locals>.registere   s    --r'      )max_workersi'  z(astropy.units.tests.test_quantity_ufuncsr]   c                 B    g | ]}                     fd           S )c                                S r/   r;   )r]   helperss   r%   <lambda>z@TestUfuncHelpers.test_thread_safety.<locals>.<listcomp>.<lambda>r   s    GK,@ r'   )submit)r?   ir]   executorrd   s     r%   
<listcomp>z7TestUfuncHelpers.test_thread_safety.<locals>.<listcomp>q   sB        OO$@$@$@$@$@AA  r'   c                 6    g | ]}|                                 S r;   )r#   )r?   futures     r%   ri   z7TestUfuncHelpers.test_thread_safety.<locals>.<listcomp>u   s     @@@f&--//@@@r'   )
concurrentfuturesThreadPoolExecutorranger	   register_moduler   )
rL   fast_thread_switchingr_   workersprm   rE   r]   rh   rd   s
          @@@r%   test_thread_safetyz#TestUfuncHelpers.test_thread_safety`   s^   	, 	, 	,	. 	. 	. 	. 	. 22w2GG 	985\\ 9 9&..''>"O  
     "7^^   A@@@@+!8888889	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   A3B//B36B3N)__name__
__module____qualname__r)   markskipifr   rP   rT   rX   slowrt   r;   r'   r%   r6   r6   4   s         [	*TUUG G VUG,; ; ;3 3 3 [9 9 9 9 9r'   r6   c                      e Zd ZdZej                            d eej	        de
j        z  fde
j        z  f           eej	         ej        dej        dz  ej        dz  g          e
j        z  f ej        dd	 ej        d          z  d	g          e
j        z  f           eej         ej	        de
j        z            f ej        d          e
j        z  f           eej         ej	         ej        dej        dz  ej        dz  g          e
j        z            f ej        dej        dz  ej        dz  g          e
j        z  f           eej        ej        d
z  e
j        z  fde
j        z  f           eej         ej        dej        dz  ej        dz  g          e
j        z  f ej        d	d	 ej        d          z  dg          e
j        z  f           eej         ej        ej        d
z  e
j        z            fej        d
z  e
j        z  f           eej         ej         ej        dej        dz  ej        dz  g          e
j        z            f ej        dej        dz  ej        dz  g          e
j        z  f           eej        ej        d
z  e
j        z  f ej        d
          e
j        z  f           eej         ej        g d          e
j        z  f ej        g d          e
j        z  f           eej         ej        ej        d
z  e
j        z            fej        d
z  e
j        z  f           eej         ej         ej        g d          e
j        z            f ej         ej        g d          e
j        z            f           eej         ej        g d          e
j        z  de
j        z  f ej         ej        g d          d          e
j        z  f           eej         ej        ddg          e
j        z  de
j        z  z                      e
j                  d	f ej         ej        ddg          dz  d	          e
j        z  f           eej        de
j        z  fej        e
j        z  f           eej        de
j        z  fej        e
j        z  f           eej        d
e
j        z  fd
e
j        z  f           eej        d
e
j        z  fd
e
j        z  f           eej        de
j        z  fde
j        z  f           eej        de
j        z  fde
j        z  f           eej        ej        e
j        z  fde
j        z  f           eej        ej        e
j        z  fde
j        z  f          f          d             Zej                            d e ej        d
e
j        z  fe!d           e ej        d
e
j        z  fe!d           e ej        d
e
j        z  e!d           e ej        d
e
j        z  e!d           e ej	        d
e
j        z  fe!d           e ej        d
e
j        z  fe!d           e ej        d
e
j"        z  fe!d           e ej        d
e
j"        z  fe!d           e ej         ej        g d          e
j#        z  fe!d           e ej         ej        g d          e
j#        z  fe!d           e ej         ej        g d          e
j#        z  d	e
j"        z  fe
j$        d           e ej         ej        g d          e
j#        z  d	fe
j$        d          f          d              Z%ej                            d! e&ej        d"e
j'        z  d#e
j(        z  z  fd$%          f          d&             Z)dS )'TestQuantityTrigonometricFuncsz&
    Test trigonometric functions
    r!         >@      ?r                 @       @      ?      @)r   g     F@g     `@     f@)r   r         r   )      $@r}        Q@      T@g     @@r   r   r   g      N@c                      t          |          S r/   )r&   )rL   r!   s     r%   test_testcasesz-TestQuantityTrigonometricFuncs.test_testcases~   s    l R   r'   r,   Nr   z<Can only apply 'sin' function to quantities with angle unitsz<Can only apply 'arcsin' function to dimensionless quantitiesz<Can only apply 'cos' function to quantities with angle unitsz<Can only apply 'arccos' function to dimensionless quantities)         z<Can only apply 'tan' function to quantities with angle unitsz<Can only apply 'arctan' function to dimensionless quantitiescompatible dimensionsz'dimensionless quantities when other argc                      t          |          S r/   )r-   )rL   r,   s     r%   test_testexcsz,TestQuantityTrigonometricFuncs.test_testexcs   s    t Br'   r3         ;@   errorr   c                      t          |          S r/   )r4   )rL   r3   s     r%   test_testwarnsz-TestQuantityTrigonometricFuncs.test_testwarns  s    
 R   r'   )*ru   rv   rw   __doc__r)   rx   parametrizer   r=   sinudegreedimensionless_unscaledarraypiradianr[   onearcsinradianscosarccostanarctanarctan2mkmtodeg2radrad2degdegreesr   r   	TypeErrorsN
UnitsErrorr   r   pckpcr   r;   r'   r%   r|   r|   y   s	         [H&QXo'Q557  
 H&bhRUS["%#+>??!(JLrxcGBGCLL&8# >??!%GI  
 H)bfTAH_--/!rz$''!(24  
 H)bfXRXsBECK&EFFQRRTrxbeck253; ?@@18KM  
 H&eckAH,.Q557  
 H&bhRUS["%#+>??!(JLrxcGBGCLL&8# >??!%GI  
 H)bfRUS[183446us{QX-/  
 H)bfXRXsBECK&EFFQRRTrxbeck253; ?@@18KM  
 H&eckAH,.rws||a&>>@  
 H&bh88899AHDFrx 5 5 5669QQS  
 H)bfRUS[183446us{QX-/  
 H)bfXRX&>&>&>??!(JKKM!rz("(+C+C+C"D"Dqx"OPPR  
 H*bh7778813>ad
KBJxrx(@(@(@AA6JJQXU   H*rxt--3sQTzBFFquMMsS!rz("(D$<"8"86"A3GG!(RT  
 Hrz)9(;BEAHDTCVWWWHrz)9(;BEAHDTCVWWWHrzqx(9#.ARSSSHrzqx(9#.ARSSSHrz(:4!(?BTUUUHrz(:4!(?BTUUUHrz)9(;EAHDTCVWWWHrz)9(;EAHDTCVWWWaQ	
T Tj! !kT Tj! [Gbjac	|MMMGbjac	|MMMGbjac		tLLLGbjac		tLLLG&ACi\R	   G)ACi\R	   G&ACi\R	   G)ACi\R	   G&bhyyy))AC/1R	   G)bhyyy))AC/1R	   G*bhyyy))AC/qs;L+	   G*bhyyy))AC/5L=	  _5	
8 8r   s8 8r  [	BITAD[BJ%?$A7	S	S	SU ! !	 ! ! !r'   r|   c            
       B   e Zd ZdZd Zd Zej                             e	 e
edd          ej                   d          d             Zej                            d	ej        ej        f          d
             Zej                            d	ej        ej        f          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            d	ej        f          d             Zej                            d	ej        f          d             Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,ej                            d	ej-        ej.        ej/        ej0        ej1        ej2        ej3        f          d%             Z4ej                            d	ej-        ej.        ej/        ej0        ej1        ej2        ej3        f          d&             Z5ej                            d	ej-        ej.        ej/        ej0        ej1        ej2        ej3        f          d'             Z6d( Z7d) Z8d* Z9d+ Z:d, Z;ej                            d	ej<        ej=        f          d-             Z>ej                            d	ej<        ej=        f          d.             Z?dS )/TestQuantityMathFuncsz+
    Test other mathematical functions
    c                 x   t          j        dt          j        z  dt          j        z            dt          j        z  t          j        z  k    sJ t          j        dt          j        z  d          dt          j        z  k    sJ t          j        ddt          j        z            dt          j        z  k    sJ d S )Nr   r          @)r=   multiplyr   r   r   rS   s    r%   test_multiply_scalarz*TestQuantityMathFuncs.test_multiply_scalar  s    {39cACi00C!#IOCCCC{39c**cACi7777{3ac	**cACi777777r'   c                    t          j        t          j        t          j        d          t          j        z  dt          j        z            t          j        ddd          t          j        z  t          j        z  k              sJ d S )Nr   r   r         @)r=   allr   aranger   r   r   rS   s    r%   test_multiply_arrayz)TestQuantityMathFuncs.test_multiply_array$  sr    vK	#,cACi88yC%%+ac12
 
 	
 	
 	
 	
 	
r'   matmulNznp.matmul is not yet a gufuncr7   c                    t          j        d          t          j        z  }t          j        ||          }|dt          j        dz  z  k    sJ t          j        d          t          j        z  }t          j        g dg dg dgg dg dg dgg dg dg dgg          t          j        z  }t          j        ||          }t          j        |t          j        |j	        |j	                  |j
        z  |j
        z  k              sJ d S )Nr         @r   r   )r   r   r   )r   r   r   )r   r   r   )r=   r   r   r   r   eyer   r   r   r    r   )rL   qrq1q2r2s         r%   test_matmulz!TestQuantityMathFuncs.test_matmul*  s   
 IcNNQS IaOOC!#q&L    VAYY_Xllllll llllll llllll

 

 C
 Yr2vbBIbh99BGCbgMMNNNNNNNr'   functionc                 ~    |dt           j        z  dt           j        z             |dd          t           j        z  t           j        z  k    sJ  |dt           j        z  d           |dd          t           j        z  k    sJ  |ddt           j        z             |dd          t           j        z  k    sJ d S Nr   r   )r   r   r   rL   r   s     r%   test_divide_scalarz(TestQuantityMathFuncs.test_divide_scalarB  s    xac	39--#s1C1Cac1IAC1OOOOOxac	3''88C+=+=+CCCCCxS13Y''88C+=+=+CCCCCCCr'   c                    t          j         |t          j        d          t          j        z  dt          j        z             |t          j        d          d          t          j        z  t          j        z  k              sJ d S )Nr   r   )r=   r   r   r   r   r   r   s     r%   test_divide_arrayz'TestQuantityMathFuncs.test_divide_arrayH  sx    vHRYs^^ac)3955x	#,,qs2QS89
 
 	
 	
 	
 	
 	
r'   c                    t          j        dt           j        z            }t          j        g d          t           j        z  }t          j        g d          |z  }||z  }||z  }t          |j        g d           |j        t           j        k    sJ t          |j        g d           |j        |j        k    sJ t          j	        ||          }t          j
        ||          }t          j        ||k              sJ t          j        ||k              sJ t          ||          \  }}	t          j        ||k              sJ t          j        |	|k              sJ t          j        t                    5  t          |t           j                   d d d            n# 1 swxY w Y   t          j        t                    5  |t           j        z   d d d            n# 1 swxY w Y   t          j        t                    5  |t           j        z   d d d            n# 1 swxY w Y   t          j        ||          \  }
}t          j        |
|k              sJ t          j        ||k              sJ t          j        t                    5  t          j        |t           j                   d d d            d S # 1 swxY w Y   d S )Ng
F%u?r   r   r   )r   r   r   )g      *@g      3@g      7@)gUN@?g5;Nѱ?gMbX9?)r   Unitr   r=   r   r   r    r   r   floor_divide	remainderr   divmodr)   r*   r   r   )rL   inchdividenddivisorquotientr   	quotient2
remainder2	quotient3
remainder3	quotient4
remainder4s               r%   &test_floor_divide_remainder_and_divmodz<TestQuantityMathFuncs.test_floor_divide_remainder_and_divmodO  s   vfqsl##8OOO,,qs2(???++d2w&w&	(:(:(:;;;} 88888	)@)@)@AAA~....OHg66	\(G44
vi8+,,,,,vjI-..... &x 9 9	:vi8+,,,,,vjI-.....]9%% 	# 	#8QT"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ]9%% 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]9%% 	 	qtOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !#	(G < <	:vi8+,,,,,vjI-.....]9%% 	& 	&Ih%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sH   =F$$F(+F(G$$G(+G(H$$H(+H( KKKc                 t    t          j        dt          j        z            dt          j        dz  z  k    sJ d S )Nr   r   r~   )r=   r[   r   r   rS   s    r%   test_sqrt_scalarz&TestQuantityMathFuncs.test_sqrt_scalarp  s3    wsQSy!!S138^333333r'   c                     t          j        t          j        t          j        g d          t          j        z            t          j        g d          t          j        dz  z  k              sJ d S )Nr   r         "@r   r~   )r=   r   r[   r   r   r   rS   s    r%   test_sqrt_arrayz%TestQuantityMathFuncs.test_sqrt_arrays  sm    vGBH___--344x((13834
 
 	
 	
 	
 	
 	
r'   c                 t    t          j        dt          j        z            dt          j        dz  z  k    sJ d S )Nr         0@r   )r=   squarer   r   rS   s    r%   test_square_scalarz(TestQuantityMathFuncs.test_square_scalary  s3    yqs##tac1f}444444r'   c                     t          j        t          j        t          j        g d          t          j        z            t          j        g d          t          j        dz  z  k              sJ d S )Nr   r   r   )r=   r   r   r   r   r   rS   s    r%   test_square_arrayz'TestQuantityMathFuncs.test_square_array|  sm    vIbh//!#566x((13612
 
 	
 	
 	
 	
 	
r'   c                 n    t          j        dt          j        z            dt          j        z  k    sJ d S )Nr         ?)r=   
reciprocalr   r   rS   s    r%   test_reciprocal_scalarz,TestQuantityMathFuncs.test_reciprocal_scalar  s/    }S13Y''4!#:555555r'   c                     t          j        t          j        t          j        g d          t          j        z            t          j        g d          t          j        z  k              sJ d S )N)r   r   r   )r   r~   r   )r=   r   r   r   r   r   rS   s    r%   test_reciprocal_arrayz+TestQuantityMathFuncs.test_reciprocal_array  sl    vM"(???33ac9::x((())AC/0
 
 	
 	
 	
 	
 	
r'   c                 ^   t          j        dt          j        z  d          dt          j        z  k    sJ t          j        dt          j        z  dt          j        z            dt          j        z  k    sJ t          j        dt          j        z  d          dt          j        z  k    sJ d S )Nr   r~      r   r   r   )r=   	heavisider   r   r   r   percentJrS   s    r%   test_heaviside_scalarz+TestQuantityMathFuncs.test_heaviside_scalar  s    |C!#Is++sQ5M/MMMMMLqsBN33ta>V7VVVVV|C!#It,,a6N0NNNNNNNr'   c                 $   t          j        g d          }t          j        g d          t          j        z  }t          j        t          j        |t          j        z  |t          j        z            g dt          j        z  k              sJ d S )N)r   r   r   r   )      ?r   r   r   )r   r   r   r   )r=   r   r   r   r   r   r   )rL   rE   halfways      r%   test_heaviside_arrayz*TestQuantityMathFuncs.test_heaviside_array  s    00011(33344q7OOvL!#w1I'IJJ$$$q'??@
 
 	
 	
 	
 	
 	
r'   c                 b     |dt           j        dz  z            dt           j        z  k    sJ d S )Nr   r   r   )r   r   r   s     r%   test_cbrt_scalarz&TestQuantityMathFuncs.test_cbrt_scalar  s3    xac1f%%qs222222r'   c                     t          j        g d          }t          j         ||t          j        dz  z             ||          t          j        z  k              sJ d S )N)r   r   g      P@r   )r=   r   r   r   r   )rL   r   rE   s      r%   test_cbrt_arrayz%TestQuantityMathFuncs.test_cbrt_array  s`     ***++vhhvQ//88F3C3Cac3IIJJJJJJJr'   c                    t          j        dt          j        z  d          dt          j        dz  z  k    sJ t          j        ddt          j        z  t          j        z            t          j        dt          j                  k    sJ t          j        dt          j        z  d          dt          j        z  k    sJ d S )Nr   r   r   r   g      i@r   r   )r=   powerr   r   cmQuantityr   rS   s    r%   test_power_scalarz'TestQuantityMathFuncs.test_power_scalar  s    xac	3''4!#q&=8888xUQT\AC/00AJ!*5
 5
 
 
 
 
 xac	3''31I+IIIIIIIr'   c                     t          j        dt          j        z  t          j        ddg                    }t          j        |dt          j        dz  z  k              sJ d S )Nr   r   r   r   )r=   r  r   r   r   r   )rL   r#   s     r%   test_power_scalar_filledarrayz3TestQuantityMathFuncs.test_power_scalar_filledarray  sR    #)RXsCj%9%9::vfqsAv-.......r'   c                     t          j        t          d          5  t          j        dt
          j        z  t          j        dg                     d d d            d S # 1 swxY w Y   d S )Nz!could not convert string to float)expected_exceptionmatchr   foo)r)   r*   
ValueErrorr=   r  r   r   r   rS   s    r%   test_power_scalar_strarrayz0TestQuantityMathFuncs.test_power_scalar_strarray  s    ])5
 
 
 	3 	3 HS13Y% 1 1222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   6AA#&A#c                    t          j        t          j        t          j        g d          t          j        z  d          t          j        g d          t          j        dz  z  k              sJ t          j        t          j        t          j        d          t          j        z  d          dt          j        z  k              sJ d S Nr   r   )r   r   r   r   r   r   r   )r=   r   r  r   r   r   r   r   rS   s    r%   test_power_arrayz&TestQuantityMathFuncs.test_power_array  s    vHRXooo..4c::x((())ACF23
 
 	
 	
 	

 vHRYs^^ac)3//39Q3QQ
 
 	
 	
 	
 	
 	
r'   c                    t          j        t          j        t          j        g d          t          j        z  d          t          j        g d          t          j        dz  z  k              sJ t          j        t          j        t          j        d          t          j        z  d          dt          j        z  k              sJ d S r  )r=   r   float_powerr   r   r   r   r   rS   s    r%   test_float_power_arrayz,TestQuantityMathFuncs.test_float_power_array  s    vN28OOO44qs:C@@x((())ACF23
 
 	
 	
 	

 vN29S>>AC/55q?W9WW
 
 	
 	
 	
 	
 	
r'   c                     t          j        t                    5  t          j        dt
          j        z  ddg           d d d            d S # 1 swxY w Y   d S r   r)   r*   r  r=   r  r   r   rS   s    r%   test_power_array_arrayz,TestQuantityMathFuncs.test_power_array_array  s    ]:&& 	, 	,HS13Yc
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   %AAAc                     t          j        t                    5  t          j        ddgt
          j        z  ddg           d d d            d S # 1 swxY w Y   d S )Nr   r   r  rS   s    r%   test_power_array_array2z-TestQuantityMathFuncs.test_power_array_array2  s    ]:&& 	3 	3Hc3Z!#%Sz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   'AAAc                 .   ddgt           j        z  t           j        z  }ddg}t          j        ||          }t          j        |j        |j        |z  k              sJ |j        t           j        k    sJ ddgt           j        z  t           j        z  }t          t          t          j        t          j        j        t           j        fD ]l}t          j        | ||                    }t          j        |j        |                    d          |z  k              sJ |j        t           j        k    sJ m|dz  }t          j        |j        |j        dz  k              sJ |j        |j        dz  k    sJ t          j        ||ddgz  k              sJ d S )Nr   r   r   r   )r   r   r=   r  r   r    r   r   r  listr   r   mar  to_value)rL   r   powersresr   clsres2res3s           r%   test_power_array_array3z-TestQuantityMathFuncs.test_power_array_array3  ss    #Jqs"shq&!!vci17F?233333x1333333Z!#$%25;
C 	9 	9C8BF,,D6$*A&(@@AAAAA9 8888881uvdjBHaK/00000yBGQJ&&&&vdbQFl*+++++++r'   c                     t          j        t          d          5  t          j        ddt
          j        z             d d d            d S # 1 swxY w Y   d S )Nz"raise something to a dimensionlessr	  r   r   )r)   r*   r   r=   r  r   r   rS   s    r%   test_power_invalidz(TestQuantityMathFuncs.test_power_invalid  s    ]9,PQQQ 	% 	%HS#)$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   #AAAc                    t          j        dt          j        z  d          dt          j        z  k    sJ t          j        dt          j        z  dt          j        z            dt          j        z  k    sJ t          j        dt          j        z  d          dt          j        z  k    sJ t          j        dt          j        z  dt          j        z            dt          j        z  k    sJ d S )Nr   r   r   r         )r=   copysignr   r   r   rS   s    r%   test_copysign_scalarz*TestQuantityMathFuncs.test_copysign_scalar  s    {1qs7C((C!#I5555{1qs7C!#I..#);;;;{1qs7D))TACZ7777{1qs7D13J//4!#:======r'   c           	          t          j        t          j        t          j        g d          t          j        z  d          t          j        g d           t          j        z  k              sJ t          j        t          j        t          j        g d          t          j        z  dt          j        z            t          j        g d           t          j        z  k              sJ t          j        t          j        t          j        g d          t          j        z  t          j        g d          t          j        z            t          j        g d          t          j        z  k              sJ t          j        t          j        g d          dt          j        z            }t          j        |t          j        g d          k              sJ t          |t          j                  rJ d S )Nr   r   )       r   g      )r   r   r&  )r   r*  r&  )	r=   r   r'  r   r   r   r   r   r  rL   r   s     r%   test_copysign_arrayz)TestQuantityMathFuncs.test_copysign_array  s   vK11AC7>>)))AC/0
 
 	
 	
 	
 vK11AC7DD)))AC/0
 
 	
 	
 	
 vK))AC/:K:K:K1L1Lqs1R  x)))**QS01
 
 	
 	
 	
 K1128<<va28$6$6$677788888a,,,,,,,r'   c                 p    t          j        dt          j        z  d          dt          j        z  k    sJ d S )Nr   r   r   )r=   ldexpr   r   rS   s    r%   test_ldexp_scalarz'TestQuantityMathFuncs.test_ldexp_scalar  s1    xac	1%%333333r'   c                     t          j        t          j        t          j        g d          t          j        z  g d          t          j        g d          t          j        z  k              sJ d S )Nr   )r   r   r   )r   r   r   )r=   r   r/  r   r   r   rS   s    r%   test_ldexp_arrayz&TestQuantityMathFuncs.test_ldexp_array
  so    vHRXooo..4iii@@x((13./
 
 	
 	
 	
 	
 	
r'   c           	         t          j        t                    5  t          j        dt
          j        z  d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        dt          j        dt
          j        t                               d d d            d S # 1 swxY w Y   d S )Nr   r      dtype)	r)   r*   r   r=   r/  r   r   r  intrS   s    r%   test_ldexp_invalidz(TestQuantityMathFuncs.test_ldexp_invalid  s   ]9%% 	% 	%HS13Y$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ]9%% 	9 	9HS!*Q3777888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s#   #A		AA-:B44B8;B8c                      |dt           j        z  dt           j        z  z            }|j        t           j        k    sJ |j         |d          k    sJ d S )Nr   r   r~   r   r   r   r   r    rL   r   r   s      r%   test_exp_scalarz%TestQuantityMathFuncs.test_exp_scalar  s[     HS13Y#),--v11111w((3--''''''r'   c           	      .    |t          j        g d          t          j        z  dt          j        z  z            }|j        t          j        k    sJ t          j        |j         |t          j        g d                    k              sJ  |t          j        g d          t          j        z  dt          j        z  z            }|j        t          j        k    sJ t          |j         |t          j        g d                               d S )Nr   r   r   r   gUUUUUU?r~   r   g@@g      I@      Y@)
r=   r   r   r   r   r   r   r    r  r   rL   r   r   r   s       r%   test_exp_arrayz$TestQuantityMathFuncs.test_exp_array  s     HRXooo..4ac	BCCv11111vag"(3N3N3N*O*O!P!PPQQQQQXbh//!#5qtDEEw!22222((284U4U4U+V+V"W"WXXXXXr'   c                     t          j        t          d|j         d          5   |dt          j        z  t          j        z             d d d            d S # 1 swxY w Y   d S )NCan only apply '&' function to dimensionless quantitiesr#  r   )r)   r*   r   ru   r   r   r   r   s     r%   test_exp_invalid_unitsz,TestQuantityMathFuncs.test_exp_invalid_units+  s    
 ].8#4 . . .
 
 
 	& 	& HS13Y_%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   &AAAc                     t          j        dt          j        z  dt          j        z  z            }|dt          j        z  dt          j        z  fk    sJ d S )Nr   g     @r~   r   )r=   modfr   r   r  r   r,  s     r%   test_modf_scalarz&TestQuantityMathFuncs.test_modf_scalar9  sN    GC!#I.//S133S1;S5STTTTTTTr'   c                    t          j        d          t          j        z  dt          j        z  z  }t          j        |          }t          j        |                    t          j                            }|d         j        t          j        k    sJ |d         j        t          j        k    sJ t          |d         j
        |d         k              sJ t          |d         j
        |d         k              sJ d S )Nr   g     @@r   r   )r=   r   r   r   r  rI  r  r   r   r   r    )rL   vr   ns       r%   test_modf_arrayz%TestQuantityMathFuncs.test_modf_array=  s    IdOOac!UQT\2GAJJGAJJq78899tyA44444tyA444441Q4:1%&&&&&1Q4:1%&&&&&&&r'   c                     t          j        dt          j        z  dt          j        z  z            }|t          j        d          t          j        d          fk    sJ d S )Nr   r   r~   r   )r=   frexpr   r   r   r,  s     r%   test_frexp_scalarz'TestQuantityMathFuncs.test_frexp_scalarF  sN    HS13Y#),--RXc]]BHSMM2222222r'   c           	          t          j        t          j        g d          t          j        z  dt          j        z  z            }t          d t          |d         |d         g d          D                       sJ d S )Nr>  r   c              3   R   K   | ]"\  }}}||ft          j        |          k    V  #d S r/   )r=   rP  )r?   _q0_q1_ds       r%   	<genexpr>z9TestQuantityMathFuncs.test_frexp_array.<locals>.<genexpr>L  sM       
 
S" #J"(2,,&
 
 
 
 
 
r'   r   r   r?  )r=   rP  r   r   r   r   r   r,  s     r%   test_frexp_arrayz&TestQuantityMathFuncs.test_frexp_arrayJ  s    HRXooo..4ac	BCC 
 
 #AaD!A$0K0K0K L L
 
 
 
 
 	
 	
 	
 	
 	
r'   c                    t          j        t          d          5  t          j        dt
          j        z  t
          j        z             d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        t          j        g d          t
          j        z  dt
          j	        z  z             d d d            d S # 1 swxY w Y   d S )NzDCan only apply 'frexp' function to unscaled dimensionless quantitiesr#  r   r>  r   )
r)   r*   r   r=   rP  r   r   r   r   r  rS   s    r%   test_frexp_invalid_unitsz.TestQuantityMathFuncs.test_frexp_invalid_unitsQ  s[   ]V
 
 
 	& 	& HS13Y_%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ]V
 
 
 	E 	E HRXooo..4ad
CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es$   /AAA=ACCCc           	          |t          j        g d          t          j        z  dt          j        z  z  d          }|j        t          j        k    sJ t          |j         |t          j        g d          d                     d S )Nr>  r   r   r@  )	r=   r   r   r   r  r   r   r   r    r;  s      r%   test_dimensionless_twoarg_arrayz5TestQuantityMathFuncs.test_dimensionless_twoarg_arrayd  s    HRXooo..4ad
CSIIv11111GXXbh'H'H'HII3OO	
 	
 	
 	
 	
r'   c                     t          j        t          d|j         d          5   |dt          j        z  t          j        z  dt          j        z  t          j        z             d d d            d S # 1 swxY w Y   d S NrE  rF  r#  r   r   )r)   r*   r   ru   r   r   r   r   r   s     r%   'test_dimensionless_twoarg_invalid_unitsz=TestQuantityMathFuncs.test_dimensionless_twoarg_invalid_unitsl  s    ]8#4   
 
 
 	8 	8 HS14Z!#%sQSy13777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   AA33A7:A7)@ru   rv   rw   r   r   r   r)   rx   ry   r   getattrr=   r   r   r   dividetrue_divider   r   r   r   r   r   r   r   r   r   r   cbrtr   r   r  r  r  r  r  r  r  r!  r$  r(  r-  r0  r2  r8  expexpm1exp2loglog2log10log1pr<  rC  rG  rJ  rN  rQ  rX  rZ  	logaddexp
logaddexp2r\  r_  r;   r'   r%   r   r     s        8 8 8

 
 
 [Jwwr8T22BH===.   O O	 O( [Z")R^)DEED D FED
 [Z")R^)DEE
 
 FE
& & &B4 4 4
 
 
5 5 5
 
 
6 6 6
 
 
O O O
 
 
 [Z"'443 3 543 [Z"'44K K 54KJ J J/ / /3 3 3
 
 

 
 
, , ,3 3 3, , ,*% % %> > >- - -(4 4 4
 
 
9 9 9 [RVRXrw28T ( ( (
 [RVRXrw28T Y Y Y [RVRXrw28T 	& 	& 	&U U U' ' '3 3 3
 
 
E E E& [Z",)FGG
 
 HG
 [Z",)FGG8 8 HG8 8 8r'   r   c                   p   e Zd Zej                            dej        ej        ej	        ej
        ej        ej        ej        ej        ej        ej        g
          d             Zej                            dej        ej
        ej        ej        ej        ej        g          d             Zej                            dej        ej        ej        ej        ej        ej        ej        ej        ej        g	          d             Zej                            dej        ej        ej        ej        ej        ej        ej        ej        ej        g	          d             Zej                            dej        dfej        dfej        dfej        dfej        dfej        dfej        ej        fej        ej        fej        ej        fg	          d             Zej                            dej        ej        ej        ej        ej        ej        ej        ej        ej        g	          d	             Z d
S )TestInvariantUfuncsr   c                     dt           j        z  } ||          }t          |t           j                  sJ |j        |j        k    sJ |j         ||j                  k    sJ d S )N@)r   r   r   r  r   r    rL   r   q_iq_os       r%   test_invariant_scalarz)TestInvariantUfuncs.test_invariant_scalary  sn      ACieCjj#qz*****x38####yEE#),,,,,,,,r'   c                 2   t          j        g d          t          j        z  t          j        z  } ||          }t          |t          j                  sJ |j        |j        k    sJ t          j        |j	         ||j	                  k              sJ d S Ngffffff
g @gffffff$@)
r=   r   r   kgr   r   r  r   r   r    rq  s       r%   test_invariant_arrayz(TestInvariantUfuncs.test_invariant_array  s     h((())AD0136eCjj#qz*****x38####vci55#3#334444444r'   c           	      .   dt           j        z  }dt           j        z  } |||          }t          |t           j                  sJ |j        |j        k    sJ t          |j         ||j        |                    |j                                       d S )Nrp  "@)	r   r   r   r   r  r   r   r    r  rL   r   q_i1q_i2rs  s        r%   test_invariant_twoarg_scalarz0TestInvariantUfuncs.test_invariant_twoarg_scalar  s     QSyQTzeD$#qz*****x49$$$$	55T]]495M5M#N#NOOOOOr'   c           	         t          j        g d          t          j        z  t          j        z  }t          j        g d          t          j        z  t          j        z  } |||          }t          |t          j                  sJ |j	        |j	        k    sJ t          |j         ||j        |                    |j	                                       d S )Nrw  r   g      g    .A)r=   r   r   rx  r   gusr   r  r   r   r    r  r|  s        r%   test_invariant_twoarg_arrayz/TestInvariantUfuncs.test_invariant_twoarg_array  s     x)))**QT1AC7x+++,,qs2QT9eD$#qz*****x49$$$$	55T]]495M5M#N#NOOOOOr'   )r   	arbitraryr   c                 "   t          j        g d          t          j        z  t          j        z  } |||          }t          |t          j                  sJ |j        |j        k    sJ t          |j	         ||j	        |                     d S rv  )
r=   r   r   rx  r   r   r  r   r   r    )rL   r   r  r}  rs  s        r%   #test_invariant_twoarg_one_arbitraryz7TestInvariantUfuncs.test_invariant_twoarg_one_arbitrary  s     x)))**QT1AC7eD)$$#qz*****x49$$$$	55Y#?#?@@@@@r'   c                     dt           j        z  }dt           j        z  }t          j        t           j        d          5   |||           d d d            d S # 1 swxY w Y   d S Nrp  r{  r   r#  r   r   r   r)   r*   r   rL   r   r}  r~  s       r%   #test_invariant_twoarg_invalid_unitsz7TestInvariantUfuncs.test_invariant_twoarg_invalid_units  s     QSyQSy]1</FGGG 	 	E$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   AA AN)!ru   rv   rw   r)   rx   r   r=   absolutefabsconj	conjugatenegativespacingrintfloorceilpositivert  ry  rV   rW   hypotmaximumminimum	nextafterr   modfmodr  r  infr  r  r;   r'   r%   rn  rn  x  s       [KGGLKJGHGK	
 - - - ["+r|R["'28RWU 5 5 5 [FKHJJLLFG
	
 P P P [FKHJJLLFG
	
 P P P [VSM[#XsOZZ\3\26"VRVWbf
	
 A A A [FKHJJLLFG
	
     r'   rn  c            	          e Zd Zej                            dej        ej        ej	        ej
        ej        ej        g          d             Zej                            dej        ej        ej	        ej
        ej        ej        g          d             Zej                            dej        ej        ej        ej        f          d             Zej                            d          d             ZdS )TestComparisonUfuncsr   c                 b   t          j        g d          t          j        z  t          j        z  }t          j        g d          t          j        z  t          j        z  } |||          }t          |t          j                  rJ |j	        t          k    sJ t          j        | ||j        |                    |j                            k              sJ  |||z  d          }t          |t          j                  rJ |j	        t          k    sJ t          j        | |||z                      t          j                  d          k              sJ t!          j                    5  t!          j        dt&                     dt           j        t           j        fD ]<} |||            |||t          j        t/          |                    z             = ||t          j        dt           j        t           j        g                     d d d            d S # 1 swxY w Y   d S )Nrw  r  r   ignore)categoryr   )r=   r   r   rx  r   r  Msr   r  r6  boolr   r    r  r   r   r0   r1   r2   RuntimeWarningr  nanoneslen)rL   r   r}  r~  rs  q_o2arbitrary_unit_values          r%   test_comparison_valid_unitsz0TestComparisonUfuncs.test_comparison_valid_units  sS   
 x)))**QT1AC7x+++,,qs2QT9eD$c1:.....yD    vcUU4:t}}TY/G/GHHHIIIIIuTD[#&&dAJ/////zT!!!!vEE4$;001IJJCPPP
 
 	
 	
 	

 $&& 	9 	9#H~FFFF),bfbf(= G G$d0111d0273t993E3EEFFFFE$#rvrv!677888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   0B'H$$H(+H(c                     dt           j        z  }dt           j        z  }t          j        t           j        d          5   |||           d d d            d S # 1 swxY w Y   d S r  r  r  s       r%   test_comparison_invalid_unitsz2TestComparisonUfuncs.test_comparison_invalid_units  s    
 QSyQSy]1</FGGG 	 	E$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  c                 0   dt           j        t           j         t           j        ddgt          j        z  } ||          }t          |t          j                  rJ |j        t          k    sJ t          j	        | ||j
                  k              sJ d S Nr   r   r   )r=   r  r  r   r   r   r  r6  r  r   r    )rL   r   r   outs       r%   test_onearg_test_ufuncsz,TestComparisonUfuncs.test_onearg_test_ufuncs  s    "&26'2645;eAhhc1:.....yD    vcUU17^^+,,,,,,,r'   *ignore:.*invalid value encountered in signc                    dt           j        t           j         t           j        ddgt          j        z  }t          j        |          }t          |t          j                  rJ |j        |j        k    sJ t          j	        |t          j        |j
                  k    t          j        |          t          j        |j
                  z  z            sJ d S r  )r=   r  r  r   r   signr   r  r6  r   r    isnan)rL   r   r  s      r%   	test_signzTestComparisonUfuncs.test_sign  s    "&26'2645;gajjc1:.....yAG####vsbgag...28C==28AGCTCT3TUVVVVVVVr'   N)ru   rv   rw   r)   rx   r   r=   greatergreater_equalless
less_equal	not_equalequalr  r  isfiniteisinfr  signbitr  r2   r  r;   r'   r%   r  r    s%       [	R%rwr|RXV 9 9	 9. [	R%rwr|RXV  	  [Wr{BHbh
&STT- - UT- [ LMMW W NMW W Wr'   r  c                      e Zd Zej                            dd ej        d          g          d             Zej                            dd ej        d          g          d             Z	ej                            dd ej        d          g          d             Z
ej                            dd ej        d          g          d             Zej                            dd ej        d          g          d             Zd	 Zej                            dd ej        d          g          d
             Zd Zd Zej                            dej        ej        f          d             Zej                            dej        ej        f          d             Zej                            d          d             Zd ZdS )TestInplaceUfuncsr    r   r   c                    |t           j        z  }|}t          j        ||           ||u sJ |j        t           j        k    sJ |t           j        z                      t           j                  }|}t          j        ||           ||u sJ |j        t           j        k    sJ t          |j	        |j	                   d S )Nr  )
r   radr=   r   r   r   r   degr   r    )rL   r    r   checks2check2s         r%   test_one_argument_ufunc_inplacez1TestInplaceUfuncs.test_one_argument_ufunc_inplace)  s     AEM
qazzzzzQ55555aem&&
rr||||{a66666*****r'   c                 D   |t           j        z  }|}t          j        ||           ||u sJ t          j        |j        t          j        |          k              sJ |j        t           j        u sJ t          j        ||           ||u sJ t          j        |j        t          j        |          k              sJ |j        t           j        u sJ t          j	        ||           ||u sJ t          j        |j        t          j	        |          k              sJ |j        t           j        u sJ t          j
        |dz  |           ||u sJ t          j        |j        t          j
        |dz            k              sJ |j        t           j        u sJ dS )z?Check inplace works with non-quantity input and quantity outputr  r   N)r   r   r=   r  r   r    r   r   r[   rd  r   r   rL   r    r   r  s       r%   !test_one_argument_ufunc_inplace_2z3TestInplaceUfuncs.test_one_argument_ufunc_inplace_29  s    ACK
Eq!!!!zzzzvekR[%7%7788888zQ55555
1zzzzvekRWU^^344444zQ55555
u!zzzzvekRVE]]233333zQ55555
	%$,A&&&&zzzzvekRYut|%<%<<=====zQX%%%%%%r'   c                    d|z  t           j        z  t           j        z  }|                                }|                                }|}t	          j        |||           ||u sJ |j        t           j        k    sJ |                    t           j                  }|}t	          j        |||           ||u sJ |j        t           j        k    sJ |                    t           j                  }|}	t	          j        |||           |	|u sJ |	j        t           j        k    sJ |                                }
|
}t	          j        |
|
|           ||
u sJ |j        t           j        k    sJ d S )NrA  )	r   r  r   copyr=   rI  r   r   r   )rL   r    rL  v_copytmpr  v2r  v3check3v4check4s               r%   *test_one_argument_two_output_ufunc_inplacez<TestInplaceUfuncs.test_one_argument_two_output_ufunc_inplaceO  s^   EMAD 13&ffhh
3zzzzzQ55555YYq/00
C||||{a66666YYq/00
B||||{a66666[[]]
B||||{a6666666r'   c                 r   |t           j        z  }|}|dz  }||u sJ t          j        |j        |dz  k              sJ |t           j        z  }||u sJ |j        t           j        t           j        z  k    sJ |dt           j        z  z  }||u sJ t          j        ||t           j        z  k              sJ d S )Nr   )r   cycler=   r   r    r   r   r  s       r%   !test_two_argument_ufunc_inplace_1z3TestInplaceUfuncs.test_two_argument_ufunc_inplace_1j  s    AGO	SzzzzvekUS[011111	QSzzzzzQWqs]****	S13Yzzzzveuqw.///////r'   c                    |t           j        z  }|}t          j        |||           ||u sJ |j        t           j        k    sJ t          j        t           j                  5  |dt           j	        z  z  }d d d            n# 1 swxY w Y   ||u sJ |j        t           j        k    sJ t          j        dt           j
        z  ||           ||u sJ |j        t           j        k    sJ t          j        dt           j
        z  ||           ||u sJ |j        t           j
        k    sJ t          j        dt           j        z  ||           ||u sJ |j        t           j
        t           j        z  k    sJ d S )Nr  r   r   )r   r  r=   r   r   r   r)   r*   r   r   r  rV   r   r   r  s       r%   !test_two_argument_ufunc_inplace_2z3TestInplaceUfuncs.test_two_argument_ufunc_inplace_2x  s   AGO

1aQzzzzzQX%%%%]1<(( 	 	qsNA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	zzzzzQX%%%%

3;q))))zzzzzQX%%%%
sQU{A1%%%%zzzzzQU""""
C!#Iqa((((zzzzzQUQS[((((((s   $BB
Bc                 ^   t          j        g d          t          j        z  }t          j        t          j        g d          t          j        g d          dz  |           t          j        |j        t          j        g d          k              sJ |j        t          j        u sJ t          j        t          j        g d          t          j        g d          dz  |           t          |j        t          j        dd                     |j        t          j
        u sJ d S )Nr   r   r  )r   r   r   r   )r=   r   r   r   rV   r   r    r   r   r   r   rL   r   s     r%   !test_two_argument_ufunc_inplace_3z3TestInplaceUfuncs.test_two_argument_ufunc_inplace_3  s   H___%%(@@
rx(("(???*C*Cc*IqQQQQvag///!:!::;;;;;v11111

28OOO,,bh.G.G#.MSTUUUUC!5!5666v!!!!!!r'   c                    |t           j        z  }dt           j        z  }|                                }|                                }t	          j        ||||f          }|d         |u r
|d         |u sJ |j        t           j        k    sJ |j        |j        k    sJ |                                }t	          j        ||||f          }|d         |u r
|d         |u sJ |j        t           j        k    sJ |j        |j        k    sJ |                                }	|                                }
t	          j        |	||	|
f          }|d         |	u r
|d         |
u sJ |	j        t           j        k    sJ |
j        |j        k    sJ d S )Nr   r  r   r   )r   r   r  r  r=   r   r   r   )rL   r    rL  r   v1r  r  r  r  v3av3br  s               r%   *test_two_argument_two_output_ufunc_inplacez<TestInplaceUfuncs.test_two_argument_two_output_ufunc_inplace  s   ACK+VVXXffhh	"gC9555Qx358r>>>>x133333w!&    VVXX2wRI666ayB6!9#3#3#3#3w!22222x16!!!!ffhhffhh3c3Z888ayCF1I$4$4$4$4x133333x16!!!!!!r'   c                 Z   t          j        d          t          j        z  }|                                }|d d d         }|dt          j        z  z  }t          j        |d d d         |d d d         k              sJ t          j        |dd d         |dd d         k              sJ d S )Nr   r   r   r   )r=   r   r   r   r  r  r   )rL   r   s_copyr  s       r%   &test_ufunc_inplace_non_contiguous_dataz8TestInplaceUfuncs.test_ufunc_inplace_non_contiguous_data  s    IdOOac!sssV
cADjva!fvccc{*+++++va1g1-.......r'   c                    t          j        g dt           j        t          j                  }|t          j        d          z  }|j        t           j        u sJ |j        t          j        k    sJ t          j        g dt           j        t          j                  }|dt           j        z  z  }|j        t           j        u sJ |j        t          j        k    sJ t          j        g dt           j        t          j                  }|t          j        dt           j        t          j	                  z  }|j        t           j        u sJ |j        t          j        k    sJ t          j        g dt           j        t          j                  }t          j        t                    5  |t          j        dt           j        t          j	                  z  }ddd           dS # 1 swxY w Y   dS )zCheck that inplace operations check properly for casting.

        First two tests that check that float32 is kept close #3976.
        )r   r   r   r4  r5  
   g      4@N)r   r  r   r=   float32r   r6  r   int32int64r)   r*   r   mm)rL   a1a2a3a4s        r%   %test_ufunc_inplace_non_standard_dtypez7TestInplaceUfuncs.test_ufunc_inplace_non_standard_dtype  s   
 Zac<<<
bjnnw!#~~~~x2:%%%%Zac<<<
dQTkw!#~~~~x2:%%%%Zac:::
ajQS1111w!#~~~~x28####Zac:::]9%% 	7 	7!*RRX6666B	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   )/G%%G),G)r   c                 R   t          j        g d          t          j        z  t          j        z  }t          j        g d          t          j        z  t          j        z  }t          j        |j        t                    } ||j
        |                    |j                  |           t          j        |j        t                    } ||||          }||u sJ t          |          t           j        u sJ |j        t          k    sJ t          j        ||k              sJ d S )Nrw  r  r  )r=   r   r   rx  r   r  r  emptyshaper  r    r  r   typendarrayr6  r   )rL   r   r}  r~  r  r#   rs  s          r%   test_comparison_ufuncs_inplacez0TestInplaceUfuncs.test_comparison_ufuncs_inplace  s   x)))**QT1AC7x+++,,qs2QT9T**dj$--	22>>>>$*d++eD$F+++f}}}}CyyBJ&&&&yD    vcUl#######r'   c                    dt           j        t           j         t           j        ddgt          j        z  }t          j        |j        t                    } ||j        |           t          j        |j        t                    } |||          }||u sJ t          |          t           j
        u sJ |j        t          k    sJ t          j        | ||j                  k              sJ d S Nr   r   r   r  )r=   r  r  r   r   r  r  r  r    r  r  r6  r   )rL   r   r   r  r#   r  s         r%   test_onearg_test_ufuncs_inplacez1TestInplaceUfuncs.test_onearg_test_ufuncs_inplace  s    "&26'2645;$''ag5!!!!!'4((eA6"""f}}}}CyyBJ&&&&yD    vcUU17^^+,,,,,,,r'   r  c                 v   dt           j        t           j         t           j        ddgt          j        z  }t          j        |j        |j                  }t          j        |j	        |           t          j        |j        |j                  }t          j        ||          }||u sJ t          |          t           j        u sJ |j        |j        k    sJ t          j        |t          j        |j	                  k    t          j        |          t          j        |j	                  z  z            sJ d S r  )r=   r  r  r   r   r  r  r6  r  r    r  r  r   r  )rL   r   r  r#   r  s        r%   test_sign_inplacez#TestInplaceUfuncs.test_sign_inplace  s    "&26'2645;!'**
U####!'17++gaV$$$f}}}}CyyBJ&&&&yAG####vsbgag...28C==28AGCTCT3TUVVVVVVVr'   c                     t          j        d          }t          j        ddgt          j                  }|ddxx         |z  cc<   t          |t          j        g d                     dS )zRegression test for gh-13911.r   g      )@g      9@Nr   )g      ?g      ?r   )r=   r   r   r  r   r   r   )rL   ar   s      r%   %test_ndarray_inplace_op_with_quantityz7TestInplaceUfuncs.test_ndarray_inplace_op_with_quantity  sf    IcNNJd|QY//	"1"
1bh'9'9'9::;;;;;r'   N)ru   rv   rw   r)   rx   r   r=   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r  r   r;   r'   r%   r  r  (  s\       [WsIBIdOO&<==+ + >=+ [WsIBIdOO&<==& & >=&* [WsIBIdOO&<==7 7 >=74 [WsIBIdOO&<==0 0 >=0 [WsIBIdOO&<==) ) >=)(" " " [WsIBIdOO&<==" " >="*/ / /7 7 7, [Wrx&<==$ $ >=$ [Wr{BJ&?@@
- 
- A@
- [ LMMW W NMW< < < < <r'   r  c                   b    e Zd ZdZd Zej                            ed          d             Z	dS )	TestWherez"Test the where argument in ufuncs.c                 "   t          j        d          t          j        z  }t          j        d          t          j        z  }t          j        |dt          j        z  |g d          }||u sJ t          |g dt          j        z             d S )Nr   r4  r   )TTTFr  where)     @@g     H@g     P@r   )r=   r   r   r   zerosrV   r   r   )rL   r   r  r#   s       r%   
test_wherezTestWhere.test_where   s    IcNNac!hqkkQS 1qt84M4M4MNNN}}}}6#@#@#@AC#GHHHHHr'   z2where array_ufunc support introduced in numpy 1.25r7   c                    t          j        d          }t          j        dt                    t          j        z  }t          j        t          d          5  t          j        ||||           d d d            d S # 1 swxY w Y   d S )Nr   zall returned NotImplementedr#  r  )	r=   r  r  r   r   r)   r*   r   rV   )rL   r  r  s      r%   "test_exception_with_where_quantityz,TestWhere.test_exception_with_where_quantity  s     GAJJ4  AC']9,IJJJ 	- 	-F1aQe,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   A==BBN)
ru   rv   rw   r   r  r)   rx   xfailr   r
  r;   r'   r%   r  r    sg        ,,I I I [R   - - - - -r'   r  clipzno clip ufunc availabler7   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestClipzTest the clip ufunc.

    In numpy, this is hidden behind a function that does not backwards
    compatibility checks.  We explicitly test the ufunc here.
    c                 <    t           j        j        j        | _        d S r/   )r=   rB   rC   r  rS   s    r%   setup_methodzTestClip.setup_method  s    GM&			r'   c                    t          j        dd          t          j        z  }dt          j        z  }dt          j        z  }|                     |||          }|j        |j        k    sJ |                     |j        |	                    |j                  |	                    |j                            |j        z  }t          j
        ||k              sJ d S )Nr   r   }   I+v?)r=   r   r   r   r  r   r  r   r    r  r   )rL   r   q_minq_maxr#   r$   s         r%   test_clip_simplezTestClip.test_clip_simple  s    IdD!!AC'ad
1eU++{af$$$$IIagu~~af55u~~af7M7MNNQRQWW 	 vf()))))))r'   c                    t          j        dd          t          j        z  }dt          j        z  }|                     |t           j         |          }|                     |j        t           j         |                    |j	                            |j	        z  }t          j
        ||k              sJ |                     ||t           j                  }|                     |j        |                    |j	                  t           j                  |j	        z  }t          j
        ||k              sJ |                     |t          j        |j                  |          }|                     |j        d|                    |j	                            |j	        z  }t          j
        ||k              sJ |                     |t          j        |j                  t          j        |j        t           j                            }	|                     |j        dt           j                  |j	        z  }
t          j
        |	|
k              sJ d S )Nr   r   r  r   )r=   r   r   r   r   r  r  r    r  r   r   r  r  full)rL   r   qlimresult1	expected1result2	expected2result3	expected3result4	expected4s              r%   test_clip_unitless_partsz!TestClip.test_clip_unitless_parts)  s   IdD!!AC'}))Aw--IIagwaf0E0EFFO	vg*+++++))AtRV,,IIagt}}QV'<'<bfEEN	vg*+++++))Arx00$77IIagq$--*?*?@@16I	vg*+++++))Arx00"'!'262J2JKKIIagq"&11AF:	vg*+++++++r'   c                 "   t          j        dd          t          j        z  }|                     |dt          j        z  d          }|                     |dd          }|j        t          j        k    sJ t          j        ||k              sJ d S Nr   r      r   r   )r=   r   r   r   r  r   r   r   )rL   r   r#   r$   s       r%   test_clip_dimensionlessz TestClip.test_clip_dimensionless<  s    IdD!!A$<<1cAIos3399QS)){a66666vf()))))))r'   c                 F   t          j        dd          }|                     |dt          j        z  dt          j        z            }t          |t          j                  sJ |                     |dd          t          j        z  }t          j        ||k              sJ d S r$  )	r=   r   r  r   r   r   r   r  r   )rL   r  r#   r$   s       r%   test_clip_ndarrayzTestClip.test_clip_ndarrayC  s    IdD!!1cAIosQ5M/MNN&!*-----99QS))A,DDvf()))))))r'   c                    t          j        dd          t          j        z  }dt          j        z  }dt          j        z  }|                     |j        |                    |j	                  |                    |j	                            |j	        z  }|                     ||||          }||u sJ t          j
        ||k              sJ d S )Nr   r   r  r  r  )r=   r   r   r   r  r   r  r    r  r   r   )rL   r   r  r  r$   r#   s         r%   test_clip_quantity_inplacez#TestClip.test_clip_quantity_inplaceJ  s    IdD!!AC'ad
IIagu~~af55u~~af7M7MNNQRQWW 	 1eU22{{{{vf()))))))r'   c                    t          j        dd          }t          j        |          t          j        z  }|                     |dd          t          j        z  }|                     |dt          j        z  dt          j        z  |          }||u sJ |j        t          j        k    sJ t          j	        ||k              sJ d S )Nr   r   r   r   r%  r  )
r=   r   
zeros_liker   r   r  r   r   r   r   )rL   r  r   r$   r#   s        r%   &test_clip_ndarray_dimensionless_outputz/TestClip.test_clip_ndarray_dimensionless_outputU  s    IdD!!M!qs"99QS))A,DD1cAIosQ5M/MSTUU{{{{{a66666vf()))))))r'   c                    t          j        dd          t          j        z  }t	          j        t          j                  5  |                     |ddt          j        z             d d d            n# 1 swxY w Y   t	          j        t          j                  5  |                     |j	        ddt          j        z             d d d            n# 1 swxY w Y   t	          j        t          j                  5  |                     |dd           d d d            n# 1 swxY w Y   t	          j        t          j                  5  |                     |dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r   )
r=   r   r   r   r)   r*   r   r  r   r    r,  s     r%   test_clip_errorszTestClip.test_clip_errors^  s+   IdD!!AC']1<(( 	% 	%IIaAG$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]1<(( 	+ 	+IIagq!ac'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+]1<(( 	" 	"IIaS!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]1<(( 	# 	#IIac"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#sH   %A22A69A6*CCC:DD"%D"E,,E03E0N)ru   rv   rw   r   r  r  r"  r&  r(  r*  r-  r0  r;   r'   r%   r  r    s         ' ' '	* 	* 	*, , ,&* * ** * *	* 	* 	** * *	# 	# 	# 	# 	#r'   r  c                       e Zd ZdZd Zd ZdS )TestUfuncAtzTest that 'at' method for ufuncs (calculates in-place at given indices)

    For Quantities, since calculations are in-place, it makes sense only
    if the result is still a quantity, and if the unit does not have to change
    c                    t          j        d          t          j        z  }t          j        ddg          }|j                                        }t           j                            ||           t           j                            ||           t          j	        |j        |k              sJ |j
        t          j        u sJ t          j        t                    5  t           j                            ||           d d d            n# 1 swxY w Y   t          j        t          j                  5  t           j                            ||           d d d            n# 1 swxY w Y   t          j        d          t          j        z  }|j                                        }t           j                            ||           t           j                            ||           t          j	        |j        |k              sJ |j
        t          j        u sJ t          j        d          t          j        z  }|j                                        }t           j                            ||           t           j                            ||           t          j	        |j        |k              sJ |j
        t          j        u sJ t          j        d          t          j        z  }t          j        t          j                  5  t           j                            ||           d d d            n# 1 swxY w Y   |j                                        }t          j        t          j                              5  t           j                            ||           t           j                            ||           t/          |j        |           t          j        d          t          j        z  }t          j        t          j                  5  t           j                            ||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   )r=   r   r   r   r   r    r  r  atr   r   r)   r*   r   r  r   r   r   rg  r   r   add_enabled_equivalenciesdimensionless_anglesr   r   )	rL   r   rg   qvddvr  avads	            r%   test_one_argument_ufunc_atz&TestUfuncAt.test_one_argument_ufunc_atq  s}   IdOOac!HaVW\\^^
q!
r1vagm$$$$$v}}}} ]9%% 	! 	!KNN1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! ]1<(( 	 	ILLA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 IdOOa66W\\^^
	Q
	Rvagm$$$$$v11111IdOOa66W\\^^
		!Q
		"avagm$$$$$v11111 IdOOah&]1<(( 	 	FIIaOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 W\\^^()?)A)ABB 	! 	!FIIaOOOFIIb!AGR((( 418+Bq|,, ! !		"a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sm   !DDD4!E!!E%(E%!L44L8;L8=BQ!P?3Q?Q	QQ	QQQc                    t          j        d          t          j        z  }t          j        ddg          }|j                                        }t           j                            ||dt          j	        z             t           j                            ||d           t          j
        |j        |k              sJ |j        t          j        u sJ t          j        t          j                  5  t           j                            ||dt          j        z             d d d            n# 1 swxY w Y   t          j        t          j                  5  t           j                            ||dt          j        z             d d d            n# 1 swxY w Y   t          j        d          t          j        z  }|j                                        }t           j                            ||dt          j        z             t           j                            ||d           t          j
        |j        |k              sJ t          j        d          t          j        z  }t           j                            ||d           t          j
        |j        |k              sJ t          j        t$                    5  t           j                            ||dt          j	        z             d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r  r   )r=   r   r   r   r   r    r  rV   r4  r   r   r   r)   r*   r   r   r   r   r   r  )rL   r   rg   r  s       r%   test_two_argument_ufunc_atz&TestUfuncAt.test_two_argument_ufunc_at  s   IdOOac!HaV
		!Qad
###
		%F###vag&'''''v}}}}]1<(( 	' 	'FIIaC!#I&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' ]1<(( 	* 	*KNN1aQS)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* IdOOac!
q!S1#;;<<<
ua###vag&'''''IdOOac!
q!S!!!vag&''''' ]9%% 	, 	,JMM!Qad
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s6   2/D--D14D1/FFF>/K::K>K>N)ru   rv   rw   r   r<  r>  r;   r'   r%   r2  r2  j  s=         0! 0! 0!d, , , , ,r'   r2  c                       e Zd ZdZd Zd ZdS )!TestUfuncReduceReduceatAccumulatezTest 'reduce', 'reduceat' and 'accumulate' methods for ufuncs

    For Quantities, it makes sense only if the unit does not have to change
    c                 X   t          j        d          t          j        z  }t          j        g d          }t          j        t                    5  t           j        	                    |           d d d            n# 1 swxY w Y   t          j        t                    5  t           j        
                    |           d d d            n# 1 swxY w Y   t          j        t                    5  t           j                            ||           d d d            d S # 1 swxY w Y   d S Nr   )r      r      )r=   r   r   r   r   r)   r*   r  r   reduce
accumulatereduceat)rL   r   rg   s      r%   )test_one_argument_ufunc_reduce_accumulatezKTestUfuncReduceReduceatAccumulate.test_one_argument_ufunc_reduce_accumulate  s   IdOOah&H\\\""]:&& 	 	FMM!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	! 	!Fa   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!]:&& 	" 	"FOOAq!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s6    A==BB! CCC1!DD#&D#c                 
   t          j        d          t          j        z  }t          j        g d          }|j                                        }t           j                            |          }t           j                            |          }|j        |k    sJ |j	        t          j        u sJ t           j        
                    |          }t           j        
                    |          }t          j        |j        |k              sJ |j	        t          j        u sJ t           j                            ||          }t           j                            ||          }	t          j        |j        |	k              sJ |j	        t          j        u sJ t          j        t                    5  t           j                            |           d d d            n# 1 swxY w Y   t          j        t                    5  t           j        
                    |           d d d            n# 1 swxY w Y   t          j        t                    5  t           j                            ||           d d d            n# 1 swxY w Y   t          j        t          j                  5  t           j                            |           d d d            n# 1 swxY w Y   t          j        t          j                  5  t           j        
                    |           d d d            n# 1 swxY w Y   t          j        t          j                  5  t           j                            ||           d d d            n# 1 swxY w Y   t          j        d          t          j        z  }|j                                        }t           j                            |          }
t           j                            |          }|
j        |k    sJ |
j	        t          j        u sJ t           j        
                    |          }t           j        
                    |          }t          j        |j        |k              sJ |j	        t          j        u sJ t           j                            ||          }t           j                            ||          }t          j        |j        |k              sJ |j	        t          j        u sJ d S rB  )r=   r   r   r   r   r    r  rV   rE  r   rF  r   rG  r)   r*   r   r  r   r   r   )rL   r   rg   r  s_add_reducecheck_add_reduces_add_accumulatecheck_add_accumulates_add_reduceatcheck_add_reduceats_multiply_reducecheck_multiply_reduces_multiply_accumulatecheck_multiply_accumulates_multiply_reduceatcheck_multiply_reduceats                   r%   )test_two_argument_ufunc_reduce_accumulatezKTestUfuncReduceReduceatAccumulate.test_two_argument_ufunc_reduce_accumulate  s   IdOOac!H\\\""v}}Q''6==//!%55555 AC''''6,,Q//!v0077v&,0DDEEEEE$++++A..V__UA66vn*.@@AAAAA"ac)))) ]9%% 	! 	!Ja   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! ]9%% 	% 	%J!!!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% ]9%% 	& 	&J1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ]1<(( 	" 	"Kq!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" ]1<(( 	& 	&K""1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ]1<(( 	' 	'K  A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' IdOOa66K..q11 " 2 25 9 9 &*????? %)AAAAA " 6 6q 9 9$&K$:$:5$A$A!v+15NNOOOOO$)Q-EEEEE k221a88"$+"6"6ua"@"@v)/3JJKKKKK"'1+CCCCCCCsl   0 GG #G   H,,H03H0!I==JJ& KKK; L''L+.L+!M==NNN)ru   rv   rw   r   rH  rV  r;   r'   r%   r@  r@    sA         
	" 	" 	"6D 6D 6D 6D 6Dr'   r@  c                       e Zd ZdZd Zd ZdS )TestUfuncOuterz{Test 'outer' methods for ufuncs

    Just a few spot checks, since it uses the same code as the regular
    ufunc call
    c                     t          j        d          t          j        z  }t	          j        t                    5  t           j                            |           d d d            d S # 1 swxY w Y   d S )Nr   )	r=   r   r   r   r)   r*   r  r   outerr  s     r%   test_one_argument_ufunc_outerz,TestUfuncOuter.test_one_argument_ufunc_outer  s    IdOOah&]:&& 	 	FLLOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    A((A,/A,c                 V   t          j        d          t          j        z  }t          j        d          t          j        z  }|j        }|j        }t           j                            ||          }t           j                            ||          }t          j        |j        |k              sJ |j	        |j	        |j	        z  k    sJ t          j        t          j                  5  t           j                            ||           d d d            n# 1 swxY w Y   t          j        d          |j	        z  }|j        }t           j                            ||          }	t           j                            ||          }
t          j        |	j        |
k              sJ |	j	        |j	        u sJ t           j                            ||          }t           j                            ||          }t          |          t           j        u sJ t          j        ||k              sJ d S )Nr   r   )r=   r   r   r   r   r    r   rZ  r   r   r)   r*   r   rV   r  r  r  )rL   s1r  check1r  s12_multiply_outercheck12_multiply_outers3r  s13_add_outercheck13_add_outers13_greater_outercheck13_greater_outers                r%   test_two_argument_ufunc_outerz,TestUfuncOuter.test_two_argument_ufunc_outer  s   Yt__qs"Ys^^ac![..r266!#!2!266!B!Bv(.2HHIIIII!&"'BG*;;;;; ]1<(( 	! 	!FLLR   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! Ys^^bg%R,,FLL88vm)->>?????!RW,,,,J,,R44 "
 0 0 @ @%&&"*4444v'+@@AAAAAAAs   (!DDDN)ru   rv   rw   r   r[  rf  r;   r'   r%   rX  rX    sA           B B B B Br'   rX  c                   $    e Zd ZU ej        ed<   dS )DuckQuantity1dataN)ru   rv   rw   r   r  __annotations__r;   r'   r%   rh  rh  5  s          
*r'   rh  c                   4    e Zd Zedej        fd            ZdS )DuckQuantity2returnc                     | j         j        S r/   )ri  r   rS   s    r%   r   zDuckQuantity2.unit<  s    y~r'   N)ru   rv   rw   propertyr   UnitBaser   r;   r'   r%   rl  rl  :  s;        aj    X  r'   rl  F)eqc                       e Zd Zd ZdS )DuckQuantity3c                 <     fd|D             }|                     dd           }i }|D ]{}||         }t          |t                               r|j        ||<   2t          |t          t
          f          r( t          |           fd|D                       ||<   v|||<   ||}|D ]l}	t          |	t          j                  rP |	j        ||g|R i |}
|
t          ur5| t                     |
          c S |j
        dk    r
|d         c S |c S mt          S )Nc                 \    g | ](}t          |t                              r|j        n|)S r;   r   r  ri  )r?   inprL   s     r%   ri   z1DuckQuantity3.__array_ufunc__.<locals>.<listcomp>D  s4    UUUsjd4jj99B#((sUUUr'   r  c              3   d   K   | ]*}t          |t                              r|j        n|V  +d S r/   rv  )r?   itemrL   s     r%   rW  z0DuckQuantity3.__array_ufunc__.<locals>.<genexpr>N  sR       - - ",D$t**!=!=GDII4- - - - - -r'   r   r   )getr   r  ri  r  r   r=   r  __array_ufunc__NotImplementednout)rL   r   methodinputsr\   r  kwargs_copykkwargrw  r#   s   `          r%   r{  zDuckQuantity3.__array_ufunc__C  sy   UUUUfUUUjj%% 
	' 
	'A1IE%d,, '!&AED%=11 '!,e - - - - %- - - " "A
 "'A 
	' 
	'C#rz** 	',,XvQQQQ&QQ//{)tDzz&11111#=A--#&q6MMM#&JJJr'   N)ru   rv   rw   r{  r;   r'   r%   rs  rs  A  s#            r'   rs  c                   $    e Zd Zed             ZdS )DuckQuantity4c                 :    t          d| j        j        z            S )Nr   )rh  ri  r   rS   s    r%   r   zDuckQuantity4.unitf  s    Q/000r'   N)ru   rv   rw   ro  r   r;   r'   r%   r  r  e  s-        1 1 X1 1 1r'   r  c                   l   e Zd Zej                            dej        ej        f           G d d                      Z	ej                            dej
        ej        ej        f          ej                            ddej        z  ddgej        z  f           G d d                                  Zd	S )
TestUfuncReturnsNotImplementedr   c            	          e Zd Zej                            d edej        z             e	dej        z            g          d             Z
ej                            d edej        z             eddgej        z             edej        z            g          ej                            dddg          d                         ZdS )	.TestUfuncReturnsNotImplemented.TestUnaryUfuncsduck_quantityr   c                     t          j        t          d          5   ||           d d d            d S # 1 swxY w Y   d S )Nzbad operand type for .*r#  )r)   r*   r   )rL   r   r  s      r%   
test_basicz9TestUfuncReturnsNotImplemented.TestUnaryUfuncs.test_basicn  s    
 y0IJJJ % %m$$$% % % % % % % % % % % % % % % % % %s   599r   r  Nr  c                 V   |}|dk    rZ t          |          t          j         ||j                                      }t          j         ||j                            } |||          }|||u sJ  ||j        |          }t          j        |j        |k              sJ d S Nr  r  r  r=   
empty_likeri  r   )rL   r   r  r  out_expectedr#   result_expecteds          r%   	test_fullz8TestUfuncReturnsNotImplemented.TestUnaryUfuncs.test_fullv  s     Lg~~)d=))"-m>P8Q8Q*R*RSS!}UU=3E-F-FGGU=c222F}}}}#eM$6LIIIO6&+89999999r'   ru   rv   rw   r)   rx   r   rh  r   r  rl  r  rs  r  r  r;   r'   r%   TestUnaryUfuncsr  l  s       		 	 ]1qt8$$mmAH&=&=>

 

	% 	%	

 

	% 
	 	 a!$h''q!fqtm,,a!$h''

 

 
	 	 w	8	8	: 	: 
9	8

 

	: 	: 	:r'   r  quantityr   r   c            	          e Zd Zej                            d edej        z             e	dej        z            g          d             Z
ej                            d edej        z             eddgej        z             edej        z            g          ej                            dddg          d                         ZdS )	/TestUfuncReturnsNotImplemented.TestBinaryUfuncsr  r   c                     t          j        t          t          fd          5   |||           d d d            d S # 1 swxY w Y   d S )Nz(Unsupported operand type\(s\) for ufunc .*)|(unsupported operand type\(s\) for .*)|(Value not scalar compatible or convertible to an int, float, or complex array)r#  )r)   r*   r   r  )rL   r   r  r  s       r%   r  z:TestUfuncReturnsNotImplemented.TestBinaryUfuncs.test_basic  s    
 J'g   / / h.../ / / / / / / / / / / / / / / / / /s   =AAr   r  Nr  c                 ^   |}|dk    r\ t          |          t          j         |||j                                      }t          j         |||j                            } ||||          }|||u sJ  |||j        |          }t          j        |j        |k              sJ d S r  r  )rL   r   r  r  r  r  r#   r  s           r%   r  z9TestUfuncReturnsNotImplemented.TestBinaryUfuncs.test_full  s     Lg~~)d=))M%%-2D"E"EFF   "}UU8]=O-P-PQQU8]<<<F}}}}#eHm.@lSSSO6&+89999999r'   r  r;   r'   r%   TestBinaryUfuncsr    s        
	 	 ]1qt8$$mmAH&=&=>

 

		/ 		/	

 

		/ 
	 	 a!$h''q!fqtm,,a!$h''

 

 
	 	 w	8	8	: 	: 
9	8

 

	: 	: 	:r'   r  N)ru   rv   rw   r)   rx   r   r=   r  absr  rV   r   r  r   r   r  r;   r'   r%   r  r  k  s        [Wr{BF&;<<: : : : : : : =<:> [Wrvr{BG&DEE[Z!ac'Aq6AC<)@AA&: &: &: &: &: &: &: BA FE&: &: &:r'   r  )specialc                  d   t           j        t          j        vsJ t          j        dt          j        z             t           j        t          j        v sJ t          t           j        t          j	                  rt           j        t          j        v sJ dS t           j        t          j        vsJ dS )z,Check that scipy gets loaded upon first use.r   N)
spserfrF   rI   r   r   r   erfinvr=   r   r;   r'   r%   test_scipy_registrationr    s    wb.....ai   w"*****cj"(++ 	6:!1111111:R%5555555r'   c                   r   e Zd Zej                            de          d             Zej                            de          d             Zej                            de          d             Z	ej                            de
j        f          d             Zej                            de
j        f          d             Zej                            de
j        f          d             Ze
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        e
j        fZej                            de          d             Z ej                            de          d	             Z!ej                            de          d
             Z"dS )TestScipySpecialUfuncsr   c                 <    t                               d |           d S r/   )r   r<  r   s     r%   test_erf_scalarz&TestScipySpecialUfuncs.test_erf_scalar      !11$AAAAAr'   c                 <    t                               d |           d S r/   )r   rC  r   s     r%   test_erf_arrayz%TestScipySpecialUfuncs.test_erf_array  s    !00x@@@@@r'   c                 <    t                               d |           d S r/   )r   rG  r   s     r%   test_erf_invalid_unitsz-TestScipySpecialUfuncs.test_erf_invalid_units  s    !88xHHHHHr'   c                 <    t                               d |           d S r/   )r   r   r   s     r%   r   z'TestScipySpecialUfuncs.test_cbrt_scalar  s    !224BBBBBr'   c                 <    t                               d |           d S r/   )r   r   r   s     r%   r   z&TestScipySpecialUfuncs.test_cbrt_array  r  r'   c                 t    |dt           j        z  dt           j        z  dt           j        z            }t	          |j        t          j                   |j        t           j	        k    sJ  |dt           j        z  dt           j        z  dt           j        z            }t	          |j        dt           j        z  
                    t           j	                  j                   |j        t           j	        k    sJ  |dt           j        z  dt           j        z  dt           j        z            }t	          |j        dt           j        z  
                    t           j	                  j                    |dt           j	        z  dt           j        z  dt           j        z            }t	          |j        d           |j        t           j	        k    sJ t          j        t                    5   |dt           j        z  dt           j        z  dt           j        z             d d d            d S # 1 swxY w Y   d S )Nr   r   r}   r   r   r   )r   r   arcminarcsecr   r    r=   r   r   r   r   r)   r*   r   r   r   rx  )rL   r   r   r   q3q4s         r%   test_radianz"TestScipySpecialUfuncs.test_radian  s   %!(*C!(NC!(NKKBBHbe,,,7ah&&&&#.$/3>JJBBHtah&:&:18&D&D&JKKK7ah&&&&#.#.$/JJBBHtah&:&:18&D&D&JKKK #.#.#.IIBBHc***7ah&&&&y)) ; ;qsC!#IsQTz:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   +5H--H14H1c                      |dt           j        z  dt           j        z  z  dt           j        z  dt           j        z  z            }|j        t           j        k    sJ |j         |dd          k    sJ d S )Nr   r   r   r   r~   r:  r;  s      r%   test_jv_scalarz%TestScipySpecialUfuncs.test_jv_scalar  sp    qscACi0#)sQSy2IJJA6Q555557hhsC00000000r'   c           
      :    |t          j        d          t          j        z  dt          j        z  z  t          j        g d          t          j        z  dt          j        z  z            }|j        t          j        k    sJ t          j        |j         |t          j        d          t          j        g d                    k              sJ  |t          j        d          t          j        z  dt          j        z  z  t          j        g d          t          j        z  dt          j	        z  z            }|j        t          j        k    sJ t          |j         |t          j        d          t          j        g d                               d S )Nr   r   r>  r   r?  r@  )r=   r  r   r   r   r   r   r   r    r  r   rB  s       r%   test_jv_arrayz$TestScipySpecialUfuncs.test_jv_array  sl   

QS C!#I.))AC/39= A 6Q55555688BGAJJ9T9T9T0U0UVVV     

QS C!#I.))AC/3:> B 7a66666RX.O.O.O%P%PQQ    r'   c                     t          j        t          d|j         d          5   |dt          j        z  dt          j        z  t          j        z             d d d            d S # 1 swxY w Y   d S r^  )r)   r*   r   ru   r   rx  r   r   r   s     r%   test_jv_invalid_unitsz,TestScipySpecialUfuncs.test_jv_invalid_units  s     "x'8 " " "   6 6 qtS13Y_5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   4A&&A*-A*N)#ru   rv   rw   r)   rx   r   erf_like_ufuncsr  r  r  r  rc  r   r   r   r  jvjnjveynyvyveknkvkveivivehankel1hankel1ehankel2hankel2ejv_like_ufuncsr  r  r  r;   r'   r%   r  r    s       		 	 _	=	=	B 	B 
>	=	B 
	 	 _	=	=	A 	A 
>	=	A 
	 	 _	=	=	I 	I 
>	=	I 
	 	 ch[	9	9	C 	C 
:	9	C 
	 	 ch[	9	9	B 	B 
:	9	B 
	 	 cj]	;	;	; 	; 
<	;	;, FCFCGSVSVSWcfcfGSVSWck3<L
 
	 	 ^	<	<	1 	1 
=	<	1
 
	 	 ^	<	<	 	 
=	<	( 
	 	 ^	<	<		6 		6 
=	<		6 		6 		6r'   r  )Vconcurrent.futuresrl   dataclassesr0   collectionsr   numpyr=   r)   erfar   rK   numpy.testingr   r   astropyr   r   astropy.unitsr   rF   (astropy.units.quantity_helper.convertersr	   %astropy.units.quantity_helper.helpersr    astropy.utils.compat.numpycompatr   "astropy.utils.compat.optional_depsr   r   r   r   rx   skipr&   r-   r4   r6   r|   r   rn  r  r  r  ry   hasattrrB   rC   r  r2  r@  rX  	dataclassrh  rl  rs  r  r  scipyr  r  r  erfcerfcxerfigammagammalnloggammagammasgnpsirgammadigammawofzdawsnentrexprelre  rj  rf  exp10r  r   r  erfcinvr  r  r;   r'   r%   <module>r     s            " " " " " "      $ $ $ $ $ $ = = = = = = = =       / / / / / / A A A A A A = = = = = = : : : : : : 8 8 8 8 8 8:j"8"8"899
*Y ; ; ;
<
<:j":":":;; D D D + + +   B9 B9 B9 B9 B9 B9 B9 B9J^! ^! ^! ^! ^! ^! ^! ^!B[8 [8 [8 [8 [8 [8 [8 [8|
t t t t t t t tn6W 6W 6W 6W 6W 6W 6W 6WrR< R< R< R< R< R< R< R<j- - - - - - - -( v&&&/H   S# S# S# S# S# S# S# S#lU, U, U, U, U, U, U, U,pGD GD GD GD GD GD GD GDT&B &B &B &B &B &B &B &BR             M    %            M     !  F1 1 1 1 1M 1 1 1I: I: I: I: I: I: I: I:X  m6$$$$$$ 	39ch	3;clCG
CK39#*ciCHci	O z#*bh'' 5CJ446 6 6V6 V6 V6 V6 V6 V6 V6 V6 V6 V6/m6 m6r'   