
    IR-e                     P   d Z ddlZddlZddlZddlZddlmZ ddlm	Z
 ddlmZ ddlmZ ej        ej        ej        gZej        ej        ej        gZej        ej        ej        gZej        ej        ej        ej        dz  z  ej        fZ  G d d	          Z!d
 Z"d Z#d Z$d Z% G d d          Z& G d d          Z' G d d          Z(d Z)d Z* G d d          Z+d Z,d Z- G d d          Z. G d d          Z/ G d d          Z0 G d  d!          Z1 G d" d#          Z2dS )$z/
    Test the Logarithmic Units and Quantities
    N)assert_allclose)	constants)units)assert_quantity_allclose   c                      e Zd Zd Zej                            d eee	                    d             Z
ej                            de          d             Zej                            d ej        ee                    d             Zd Zej                            d	 ej        e	ej        gz   e                    d
             Zd Zd Zd ZdS )TestLogUnitCreationc                     t           j                            t           j                  dk    sJ t           j                            t           j                  dk    sJ t           j                            t           j                  dk    sJ dS )z-Check logarithmic units are set up correctly.g?g      N)udBtodexmagselfs    Dlib/python3.11/site-packages/astropy/units/tests/test_logarithmic.pytest_logarithmic_unitsz*TestLogUnitCreation.test_logarithmic_units   se    twwqu~~$$$$uxx$&&&&uxx~~######    zlu_unit, lu_clsc                 v    t          |t          j                  sJ t          |          sJ |j        |u sJ d S N)
isinstancer   UnitBasecallable_function_unit_class)r   lu_unitlu_clss      r   test_callable_unitsz'TestLogUnitCreation.test_callable_units!   sH    '1:.....     +v555555r   r   c                 N     |            }||j         k    sJ |j         |k    sJ d S r   )_default_function_unit)r   r   lus      r   .test_equality_to_normal_unit_for_dimensionlesszBTestLogUnitCreation.test_equality_to_normal_unit_for_dimensionless'   s;    WYYR.....(B......r   lu_unit, physical_unitc                 Z     ||          }|j         |k    sJ |j        |j        k    sJ dS )zuCreate a LogUnit subclass using the callable unit and physical unit,
        and do basic check that output is right.N)physical_unitfunction_unitr    )r   r   r%   lu1s       r   test_call_unitsz#TestLogUnitCreation.test_call_units-   sD     gm$$ M1111 C$>>>>>>>r   c                 >   t          j        t                    5  t          j        g            d d d            n# 1 swxY w Y   t          j        t
                    5  t          j        t          j                               d d d            d S # 1 swxY w Y   d S r   )pytestraises	TypeErrorr   r   
ValueErrorr   s    r   test_call_invalid_unitz*TestLogUnitCreation.test_call_invalid_unit7   s    ]9%% 	 	E"III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]:&& 	 	E!%''NNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ;??&BBBzlu_cls, physical_unitc                 |    ||          }|j         |k    sJ |j        |j        k    sJ  ||d|j        z            }|j         |k    sJ |j        t          j        d|j        z            k    sJ t          j        t                    5   ||t          j                   ddd           dS # 1 swxY w Y   dS )zjCreate a LogUnit subclass object for given physical unit,
        and do basic check that output is right.r   r&   N)	r%   r&   r    r   Unitr*   r+   r-   m)r   r   r%   r'   lu2s        r   test_subclass_creationz*TestLogUnitCreation.test_subclass_creation=   s    f]## M1111 C$>>>>>f]!c6P2PQQQ M1111 AF1s/I+I$J$JJJJJ]:&& 	' 	'F=!#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   B11B58B5c                 t   dt           j        z  }t          |t           j                  sJ |j        t           j        k    sJ |j        dk    sJ t          j        d          }|t           j        z  }t          |t           j                  sJ |j        t           j        k    sJ t          j        |j        |k              sJ d|d<   t          j        |j        |k              sJ dt           j	        z  }t          |t           j                  sJ |j        t           j	        k    sJ |j        dk    sJ d S )N      ?      $@        	   )
r   ABmagr   	MagnitudeunitvaluenparangeallSTmag)r   r   a2q2s       r   test_lshift_magnitudez)TestLogUnitCreation.test_lshift_magnitudeO   s$   QWn#q{+++++x17""""yCYt__17]"ak*****w!'!!!!vbh"n%%%%%1vbh"n%%%%%ago#q{+++++x17""""yD      r   c                 @   t          j        t           j        t           j        z  t           j        dz  z  t           j        z            }t          j        d          t          j        t           j                  z  }|j	        }||z  }t          j
        ||                    |          k              sJ |}||z  }||u sJ t          j
        |j        |j        k              sJ |j        |k    sJ t          j        t          j        dt           j        z                      5  |                    t           j                  }|t           j        z  }d d d            n# 1 swxY w Y   ||u sJ t'          |j	        |           |j        t           j        k    sJ d S )Nr   r7   i|  )r   r   ergscmHzr>   r?   Jyphysicalr@   r   r=   r<   add_enabled_equivalenciesspectral_densityAASTrA   r   )r   mag_fnu_cgsr2   jym2sts         r   test_ilshift_magnitudez*TestLogUnitCreation.test_ilshift_magnitudeb   s   eAEACK!$'1AD899IdOOaeADkk)Z+vbADD---.....	kBwwwwvag)*****v$$$$();D14K)H)HII 	 	qtB!'MA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Bwwww R000v      s   &/E!!E%(E%c                    t          j        d          t          j        t          j                  z  }t          j        t          j                  5  |t          j        z   d d d            n# 1 swxY w Y   t          j        t          j                  5  |t          j        z   d d d            n# 1 swxY w Y   t          j        t          j                  5  |t          j        z  }d d d            n# 1 swxY w Y   t          j        t          j                  5  |t          j        z  }d d d            d S # 1 swxY w Y   d S Nr7   )	r>   r?   r   r   rJ   r*   r+   
UnitsErrorrA   )r   r2   s     r   test_lshift_errorsz&TestLogUnitCreation.test_lshift_errorsw   s   IdOOaeADkk)]1<(( 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	!'MA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	!$JA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   A..A25A2B33B7:B7C88C<?C<!D>>EEN)__name__
__module____qualname__r   r*   markparametrizeziplu_unitslu_subclassesr   r"   	itertoolsproduct	pu_sampler(   r.   r   LogUnitr4   rD   rT   rX    r   r   r	   r	      s\       $ $ $ [.Hm0L0LMM6 6 NM6
 [Y11/ / 21/
 [ "3)"3Hi"H"H ? ? ?   [	-19+5yAA ' '	 '! ! !&! ! !*    r   r	   c                  `   t          dt          j        z  j        dt          j        z  t          j        dz  z  t          j        z  t          j        z             t          dt          j        z  j        dt          j        z  t          j        dz  z  t          j        z  t          j	        z             t          dt          j
        z  j        t          j                   t          dt          j        z  j        t          j        dt          j        z  dt          j        z  dz  z  z             d S )Ng5r6   r   gLHr         @r7   )r   r   rA   rK   rF   rH   rG   rN   r:   rI   M_bolcL_bol0m_bolr>   pipcre   r   r   test_predefined_magnitudesrn      s    	"C!%K!$'$9AC$?!$$F   	"C!%K!$'$9AC$?!$$F   a!'k3QX>>>	
QWC"%K4!$;1:L,L M    r   c                     t          j        d          t           j        k    sJ t          j        d          t           j        k    sJ t          j        d          t           j        k    sJ t          j        d          t           j        k    sJ t          j        d          t           j        k    sJ t          j        d          t           j        k    sJ d S )NSTfluxABfluxBolbolrO   AB)r   r   rA   r:   rh   rk   re   r   r    test_predefined_reinitialisationru      s    5??ag%%%%5??ag%%%%5<<17""""5<<17"""" 5;;!'!!!!5;;!'!!!!!!r   c                     t          j        t           j                                                  t           j        k    sJ t          j        t           j                                                  t           j        k    sJ t          j        t           j                                                  t           j        k    sJ t          j        t           j                                                  t           j        k    sJ dS )z Ensure round-tripping; see #5015N)r   r1   rA   	to_stringr:   rh   rk   re   r   r    test_predefined_string_roundtriprx      s    6!'##%%&&!'11116!'##%%&&!'11116!'##%%&&!'11116!'##%%&&!'111111r   c                      t          j        t           j                  } t          j        t           j                  }t          j        t           j        dz            }|| z
  }| |k    sJ | |k    sJ | |k    sJ dS )z*Check __ne__ works (regression for #5342).r   N)r   r   rJ   r   )r'   r3   lu3lu4s       r   test_inequalityr|      sg    
%++C
%++C
%a..C
)C#::::#::::#::::::r   c                       e Zd Zd ZdS )TestLogUnitStringsc                 R   t          j        t           j                  }t          |          dk    sJ t	          |          dk    sJ |                    d          dk    sJ t          j        t                    5  |                    d           ddd           n# 1 swxY w Y   t          j        t                    5  |                    d           ddd           n# 1 swxY w Y   t          j	                    }t          |          dk    sJ t	          |          d	k    sJ |                                d
k    sJ t          j
        t           j        dt           j        z            }t          |          dk    sJ t	          |          dk    sJ |                                dk    sJ t          j        t           j                  }|                    d          dk    sJ d}|                    d          |k    sJ |                    d          |k    sJ |                                |k    sJ t          j        t           j        t           j        z            }|                    d          dk    sJ d}|                    d          |k    sJ dS )z:Do some spot checks that str, repr, etc. work as expected.zmag(Jy)zUnit("mag(Jy)")genericfitsNcds)formatr   zUnit("dex(1)")zdex(1)r   r0   z	2 mag(Jy)zMagUnit("Jy", unit="2 mag")zmag(ct)z3$\mathrm{mag}$$\mathrm{\left( \mathrm{ct} \right)}$latexlatex_inlinez=$\mathrm{mag}$$\mathrm{\left( \mathrm{\frac{ct}{s}} \right)}$z;$\mathrm{mag}$$\mathrm{\left( \mathrm{ct\,s^{-1}} \right)}$)r   r   rJ   strreprrw   r*   r+   r-   r   MagUnitct_repr_latex_rG   )r   r'   r3   rz   r{   	latex_strlu5s          r   test_strzTestLogUnitStrings.test_str   s   eADkk3xx9$$$$Cyy-----}}Y''94444]:&& 	" 	"MM&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]:&& 	( 	(MMM'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( egg3xx5    Cyy,,,,,}}(****iAI6663xx;&&&&Cyy99999}}+----eADkk}}Y''94444J	}}W%%2222}}^,,	9999!!Y....eAD13J}}W%%P
 
 
 
 W	}}^,,	999999s$   =BB#&B#C&&C*-C*N)rY   rZ   r[   r   re   r   r   r~   r~      s#        !: !: !: !: !:r   r~   c                   6   e Zd Zej                            d ej        ee	                    d             Z
ej                            de          d             Zej                            d ej        eee	                    d             Zd Zd Zd	 Zd
S )TestLogUnitConversionr#   c           	      8    ||          }|                     |          sJ |                    |d          dk    sJ |                     |          sJ |                    |d          dk    sJ t          j        d|z            }|                     |          sJ |                    |d          dk    sJ |                     |          sJ t	          |                    |d          dd           t          j        ddd          }t	          |                    ||                    ||                    |d           t          j        }|                     |          rJ t          j	        t          j
                  5  |                    |           d	d	d	           n# 1 swxY w Y   |                     |          rJ t          j	        t          j
                  5  |                    |           d	d	d	           d	S # 1 swxY w Y   d	S )
zfCheck various LogUnit subclasses are equivalent and convertible
        to their non-log counterparts.r8   r6   g       @g      ?V瞯<atolr7      N)is_equivalentr   r   r1   r   r>   linspacegr*   r+   rW   )r   r   r%   r'   pur=   pu2s          r   test_physical_unit_conversionz3TestLogUnitConversion.test_physical_unit_conversion   s    gm$$  /////vvmS))S0000**3/////S))S0000VC-'((  /////vvb#%''''$$$$$c5))3W==== Cq))c366"e#4#455u7KKKKc$$S)))))]1<(( 	 	FF3KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$S)))))]1<(( 	 	FF3KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   
F,,F03F0,HHHr   c                    t          j        ddd          } |t          j                  }|                    |j                  sJ t          |                    |j        |          |            |t          j                  }|                    |j                  rJ t          j
        t          j                  5  |                    |j        |           ddd           dS # 1 swxY w Y   dS )zCheck that conversion to logarithmic units (u.mag, u.dB, u.dex)
        is only possible when the physical unit is dimensionless.r8   r7   r   N)r>   r   r   dimensionless_unscaledr   r&   r   r   rJ   r*   r+   rW   )r   r   valuesr'   r3   s        r   test_container_unit_conversionz4TestLogUnitConversion.test_container_unit_conversion   s     S$**ga.//  !233333s0&996BBBgadmm$$S%677777]1<(( 	. 	.FF3$f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s    C))C-0C-z!flu_unit, tlu_unit, physical_unitc           	      f   t          j        ddd          } ||          } ||          }|                    |          sJ t          |                    |          |j                            |j                             t          |                    ||          ||j                            |j                  z              |t          j        d|z                      }|                    |          sJ t          |                    ||                    ||                    |d            ||                    t          j	                  d                   }|                    |          sJ t          |                    ||                    ||                    |d            |t          j
                  }	|                    |	          rJ t          j        t          j                  5  |                    |	|           ddd           dS # 1 swxY w Y   dS )	zCheck various LogUnit subclasses are equivalent and convertible
        to each other if they correspond to equivalent physical units.r8   r7   r         Y@r   r   r   N)r>   r   r   r   r   r&   r   r1   	to_systemsir   r*   r+   rW   )
r   flu_unittlu_unitr%   r   flutlutlu2tlu3tlu4s
             r   test_subclass_conversionz.TestLogUnitConversion.test_subclass_conversion  sH    S$**h}%%h}%%  %%%%%sS%6%9%9#:K%L%LMMMFF3#*;*>*>s?P*Q*Q!Q	
 	
 	
 xu}45566  &&&&&tTWWS&%9%9::FQQQQx//55a899  &&&&&tTWWS&%9%9::FQQQQx}}$$T*****]1<(( 	! 	!FF4   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   H&&H*-H*c                    t          j        t           j                  }|                                t          j        t           j                                                  k    sJ |                                j        j        t           j        t           j        gk    sJ |j        t          j        t           j        j                  k    sJ |j        j        j        t           j        t           j        gk    sJ |j	        t          j        t           j        j	                  k    sJ |j	        j        j        t           j
        t           j        gk    sJ d S r   )r   r   rJ   	decomposer%   baseskgrG   r   cgsr   r   r!   s     r   test_unit_decompositionz-TestLogUnitConversion.test_unit_decomposition&  s    U14[[||~~qt~~'7'7!8!88888||~~+1adAC[@@@@uadg&&&&u"(QT13K7777vqtx((((v#)ac13Z777777r   c                 z    t          j        t           j                  }|                    t                    sJ d S r   )r   r   rJ   r   rc   r   s     r   )test_unit_multiple_possible_equivalenciesz?TestLogUnitConversion.test_unit_multiple_possible_equivalencies/  s1    U14[[	*******r   c                     t          j        t          j        d          5  dt          j        z  dt          j        z  z
                      t          j                   ddd           dS # 1 swxY w Y   dS )zCheck that "dimensionless" magnitude units include a message in their
        exception text suggesting a possible cause of the problem.
        z9Did you perhaps subtract magnitudes so the unit got lost?)match
   r   N)r*   r+   r   UnitConversionErrorr:   r   nJyr   s    r   'test_magnitude_conversion_fails_messagez=TestLogUnitConversion.test_magnitude_conversion_fails_message3  s     ]!M
 
 
 	3 	3 !'\AK'++AE222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   =A++A/2A/N)rY   rZ   r[   r*   r\   r]   ra   rb   r_   rc   r   r   r   r   r   r   re   r   r   r   r      s        [ "3)"3Hi"H"H   < [Y11. . 21. [+	(Hi88 ! !	 !68 8 8+ + +3 3 3 3 3r   r   c                      e Zd Zd Zej                            dd          d             Zej                            de          d             Z	d Z
ej                            dej         ej                     ej        ej                   ej        ej                   ej        dej        z             ej        d	d
ej        z            f          d             Zd Zd ZdS )TestLogUnitArithmeticc           
      >
   t          j        t           j                  }t          j        t           j                  5  |t           j        z   ddd           n# 1 swxY w Y   t          j        t           j                  5  t           j        |z   ddd           n# 1 swxY w Y   t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t           j        t           j        t           j        t           j        fD ]=}t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   >t          j        t           j                  }t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   ||z  t           j        k    sJ |t           j        z  }t           j        |z  }||fD ]}t          |t          |                    rJ ||j        t           j        z  k    sJ t          j        t          j                              5  t          j        t           j                  5  |                    |j                   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |t           j        z  }t          j        t          j                              5  |                    |j                  sJ t%          |                    t           j        t'          j        d          dz            |                    |j        t'          j        d                               ddd           n# 1 swxY w Y   ||z  }t          |t          |                    rJ |t           j        k    sJ ||j        z  }t          |t          |                    rJ |t           j        k    sJ t          j        t*                    5  |t-                      z   ddd           n# 1 swxY w Y   t          j        t*                    5  t/          d          |z   ddd           n# 1 swxY w Y   t          j        t*                    5  |g z   ddd           n# 1 swxY w Y   t          j        t*                    5  d|z   ddd           dS # 1 swxY w Y   dS )zCheck that multiplication/division with other units is only
        possible when the physical unit is dimensionless, and that this
        turns the unit into a normal one.N      @r      )r   r   rJ   r*   r+   rW   r2   r   r   r   typer&   set_enabled_equivalencieslogarithmicr   r%   rH   r   r   r>   r?   r,   objectslice)	r   r'   r<   r3   tftrtt2t3s	            r   test_multiplication_divisionz2TestLogUnitArithmetic.test_multiplication_division?  s    eADkk]1<(( 	 	!#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	C#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 -qsAE15A 	 	Dq|,,  d

               eA,--]1<(( 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 SyA44444 13YS3Yb 	, 	,A!!T#YY/////)AC/////,Q]__== , ,]1<00 , ,DD*+++, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , ,
 I(99 	 	??3#455555Q-ry~~/EFFs(")C..99  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #Xb$s)),,,,,QSyyyy###b$s)),,,,,QSyyyy ]9%% 	 	&((NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	$KK#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	"HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	GG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA ABB"%B"CC C2EE	E	FF"%F"GG G;KK5KKKK	KK	K	BN//N36N3Q""Q&)Q&R%%R),R)	SS"S?TTTpowerr         ?r   r   c           
         t          j        t           j                  }|dk    r||z  t           j        k    sJ nM|dk    r||z  |k    sJ n;t	          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t          j        t           j                  }||z  }|dk    r|t           j        k    sJ dS |dk    r
||k    sJ dS t          |t          |                    rJ ||j	        |z  k    sJ |d|z  z  }||j	        k    sJ t          j
        t          j                              5  t          |                    t           j        t          j        d                    |                    |j        t          j        d                               ddd           dS # 1 swxY w Y   dS )zCheck that raising LogUnits to some power is only possible when the
        physical unit is dimensionless, and that conversion is turned off when
        the resulting logarithmic unit (such as mag**2) is incompatible.r   r   Nr6   r   )r   r   rJ   r   r*   r+   rW   r   r   r&   r   r   r   r   r>   r?   r%   )r   r   r'   r3   r   r   s         r   test_raise_to_powerz)TestLogUnitArithmetic.test_raise_to_power  s>   
 eADkkA:::!999999aZZ:$$$$$q|,,  U

               eA,--JA::0000000aZZ888888!!T#YY/////)500000sU{#B*****,Q]__==  EE!2BIcNNCCFF3,binn==                   s%   +A==BB>A,F77F;>F;otherc                    t          j        t           j                  }t          j        t           j                  5  ||z    d d d            n# 1 swxY w Y   t          j        t           j                  5  ||z
   d d d            n# 1 swxY w Y   t          j        t           j                  5  ||z
   d d d            d S # 1 swxY w Y   d S r   )r   r   rJ   r*   r+   rW   )r   r   r'   s      r   /test_addition_subtraction_to_normal_units_failszETestLogUnitArithmetic.test_addition_subtraction_to_normal_units_fails  st   eADkk]1<(( 	 	%KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	%KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	CKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   AAA8B

BB3CC
C
c                     t          j        t           j                  }t          j        t
                    5  |dz    d d d            n# 1 swxY w Y   t          j        t
                    5  |g dz
   d d d            d S # 1 swxY w Y   d S )Nr6   )r6          @r   )r   r   rJ   r*   r+   r,   )r   r'   s     r   ,test_addition_subtraction_to_non_units_failszBTestLogUnitArithmetic.test_addition_subtraction_to_non_units_fails  s   eADkk]9%% 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]9%% 	" 	"///!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s#   A

AA.BB
Br    r   c                    t          j        t           j                  }t          |dt           j                  }||z   }|                    |j        |z            sJ ||z   }|                    |j        |z            sJ ||z
  }|                    |j        |z            sJ ||z
  }|                    ||j        z            sJ dS )z.Check physical units are changed appropriatelyr%   N)r   r   rJ   getattrr   r   r%   )r   r   r'   other_pulu_sflu_srlu_dflu_drs           r   test_addition_subtractionz/TestLogUnitArithmetic.test_addition_subtraction  s     eADkk5/13KLLe""3#4x#?@@@@@""3#4x#?@@@@@e""3#4x#?@@@@@""8c.?#?@@@@@@@r   c                 2   t          j        dddt          j        z  dt           j        z  dz  z  z            }t          j        |          }t           j        |z
  }|                    t           j        t           j	        z  t           j
        z            sJ dS )z?for fun, a more complicated example of addition and subtractionDMr6   rg   r7   r   N)r   r1   r>   rl   rm   r   rA   r   rF   rG   rN   )r   dm0lu_dmlu_absSTs       r   %test_complicated_addition_subtractionz;TestLogUnitArithmetic.test_complicated_addition_subtraction  su    fT3#+0B"BCDDc

7U?%%aeackAD&89999999r   c                     t          j        t           j                  }| }||k    sJ |j        t           j        dz  k    sJ | |k    sJ |
 }||usJ ||k    sJ d S )N)r   r   rJ   r%   )r   r'   neg_lupos_lus       r   test_neg_posz"TestLogUnitArithmetic.test_neg_pos  sw    eADkk}}}}#qtRx////w#~~~~S    }}}}}}r   N)rY   rZ   r[   r   r*   r\   r]   r   rc   r   r   r   r   rJ   r2   r1   r   r   r   r   re   r   r   r   r   >  sF       A A AF [Wn55    65 D [Wi00	 	 10	" " " [EAEGGAE!$KKAE!#JJAF1qu9AIb#+&&	

 
A A
 
A": : :    r   r   c                      t          j        t           j        t           j        dz  z            } t	          j        |           }t	          j        |          }| |k    sJ d S Nr   )r   r   rH   rG   pickledumpsloads)r'   rG   r3   s      r   test_pickler     sJ    
%qsAv

CSA
,q//C#::::::r   c                  v   t          j        t           j                  } t          j        t           j                  }t          j        t           j                  }t	          |           t	          |          k    sJ t	          |           t	          |          k    sJ | ||h}t          |          dk    sJ d S r   )r   r   mWr2   hashlen)r'   r3   rz   lusets       r   test_hashabler     s    
$qt**C
$qs))C
$qt**C99S		!!!!99S		!!!!#sOEu::??????r   c                      e Zd Zej                            d eeej	        gz   e
ej        gz                       d             Zej                            d ej        ee                    d             Zej                            dej         ej                     ej        ej                   ej        ej                   ej        dej        z             ej        ddej        z             ej        ej        d	ej        z             ej        ej        d
ej        z            f          d             Zej                            dd ej        ej                  z  dfd ej        ej                  z  dfd ej        ej        ej        dz  z  ej        z            z   ej        ej                  fd ej        ej        ej        dz  z  ej        z            z   ej        ej                  ff          d             Zej                            d ej                     ej        ej                   ej        ej                   ej        ddej        z             ej        ej        d	ej        z             ej        ej        d
ej        z            f          d             Zd Zd ZdS )TestLogQuantityCreationzlq, luc                 |    |j         |k    sJ t           |                                d                    |u sJ dS )z5Check logarithmic quantities are all set up correctlyr6   N)_unit_classr   _quantity_class)r   lqr!   s      r   test_logarithmic_quantitiesz3TestLogQuantityCreation.test_logarithmic_quantities  sJ    
 ~####BBDD((--.."444444r   zlq_cls, physical_unitc                 X   t          j        dd          } |||z            }|j        j        |k    sJ |j        j        |j        j        k    sJ t          |j        j        |           t          j
        t                    5   |||           ddd           dS # 1 swxY w Y   dS )zgCreate LogQuantity subclass objects for some physical units,
        and basic check on transformationsr6   r7   N)r>   r?   r<   r%   r&   r    r   rK   r=   r*   r+   r-   )r   lq_clsr%   r=   log_qs        r   r4   z.TestLogQuantityCreation.test_subclass_creation  s     	#t$$u},--z'=8888z'5:+LLLLL,e444]:&& 	) 	)F5-(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   BB#&B#r<   r   r   r   r          c                     t          j        d|          }|j        j        t	          |d|          k    sJ |j        j        t	          |dt           j                  u sJ d S )NGz?r&   r%   )r   r;   r<   r&   r   r%   r   )r   r<   qs      r   test_different_unitsz,TestLogQuantityCreation.test_different_units  ss     Kd##v#wt_d'K'KKKKKv#w/1#;(
 (
 
 
 
 
 
 
r   zvalue, unitr6   Nc                     t          j        ||          }||k    sJ |j        j        t           j        k    sJ |j        j        t          |d|j        j                  k    sJ d S )Nr%   )r   r;   r<   r&   r   r%   r   )r   r=   r<   r   s       r   test_function_valuesz,TestLogQuantityCreation.test_function_values#  sx     [%%U{{{{w$----w$/5:#;)
 )
 
 
 
 
 
 
r   c                    d|z  }t          |t          j                  sJ |j        dk    sJ |j        |k    sJ d|j        z  }||z  }|j        |k    sJ |j        j        |j        k    sJ |                    |j                  dk    sJ |j        t          j        z                      d          dk    sJ |dz  }||k    sJ d S )Ng      @r   r   g      皙?)	r   r   r;   r=   r<   r%   to_value_function_viewr   )r   r<   q1pvrC   q3s         r   test_indirect_creationz.TestLogQuantityCreation.test_indirect_creation4  s     4Z"ak*****x3w$T''BYw$w$////{{4-..%7777!AE)33A66$>>>>CZRxxxxxxr   c                    ddgt           j        z  t           j        dz  z  }t          j        t
                    5  |                    t           j                   d d d            n# 1 swxY w Y   ddgt           j        z  }|                    t           j                  }t          |t           j                  sJ |j
        j        t           j        k    sJ t          j        ||k              sJ d S )Nr   g     @@r   r   r   )r   rH   rG   r*   r+   r,   viewDexr   r   r<   r%   r   r>   r@   )r   r  r   s      r   test_from_viewz&TestLogQuantityCreation.test_from_viewM  s    FOad"QS!V+]9%% 	 	FF15MMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #JVVAE]]"ae$$$$$w$(@@@@@va2gs    A''A+.A+c                 6   t          j        t           j                  }t          j        t           j                  5  t          j        d|           ddd           n# 1 swxY w Y   t          j        d|d          }t          |          |j        u sJ dS )z4Check that we can use Quantity if we have subok=Truer6   NT)subok)	r   r   rN   r*   r+   UnitTypeErrorQuantityr   r   )r   r!   r  s      r   test_using_quantity_classz1TestLogQuantityCreation.test_using_quantity_classZ  s     U14[[]1?++ 	  	 JsB	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 JsBd+++Aww",,,,,,,s   AA#&A#)rY   rZ   r[   r*   r\   r]   r^   lq_subclassesr   LogQuantityr`   rd   r   ra   rb   rc   r4   r   rJ   r2   r1   r   r  r   WrI   r  r  r  r  re   r   r   r   r     s       [##mq}o5}	{7RSS 5 5 5
 [!2!2=)!L!L 	) 	) 	) [EAEGGAE!$KKAE!#JJAF1qu9AIb#+&&AIadBJ''AIac4!%<((		
 
 
 
 [515;;%515;;%515qsAv,---uquQT{{;515qsAv,---uquQT{{;		
 
 
 
 [AEGGAE!$KKAE!#JJAIb#+&&AIadBJ''AIac4!%<((	

 
 
 
  - - - - -r   r   c                     g dt           j        z  } | j        }|                    t           j                  }t	          |t           j                  sJ |j        | j        k    sJ t          |j        | j                   g dt           j	        z  }|                     t           j
        t          j        |                    }|                    t           j        t          j        |                    }t	          |t           j                  sJ |j        | j        k    sJ t          |j        | j                   dS )z/Ensures we can convert from regular quantities.)r7   g      (@g      ,@)g\@ǧ_@gLb@equivalenciesN)r   rA   rK   r   r   r;   r<   r   r=   rN   rJ   rM   )mstflux_lambdamst_roundtripwaveflux_numst_roundtrip2s         r   /test_conversion_to_and_from_physical_quantitiesr#  d  s   


qw
&C,KNN17++MmQ[11111))))M'333$$$qt+DffQT);D)A)AfBBGZZ);D)A)ABBNnak22222#(****N(#)44444r   c                     dt          j        t           j                  z  } |                                 | k    sJ |                                 j        j        j        t           j        t           j        gk    sJ | j	        | k    sJ | j	        j        j        j        t           j        t           j        gk    sJ | j
        | k    sJ | j
        j        j        j        t           j        t           j        gk    sJ d S rV   )r   r   rJ   r   r<   r%   r   r   rG   r   r   r   )r   s    r   test_quantity_decompositionr%  u  s    	ad	B<<>>R<<>>,2qtQSkAAAA5B;;;;5:#)adAC[88886R<<<<6;$*qsACj888888r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestLogQuantityViewsc                     t          j        t          j        dd          t           j        z            | _        t          j        t          j        dd                    | _        d S )Nr6   r7         @)r   r;   r>   r?   rJ   r   lq2r   s    r   setup_methodz!TestLogQuantityViews.setup_method  sG    +biT22QT9::;ryc2233r   c                     | j         j        }t          |          t          j        u sJ d|d<   t          j        | j         j        |k              sJ d S )Ng      r   )r   r=   r   r>   ndarrayr@   )r   lq_values     r   test_value_viewz$TestLogQuantityViews.test_value_view  sR    7=H~~++++vdgmx/0000000r   c                     | j         j        }t          |          t          j        u sJ |j        | j         j        j        u sJ d|j        z  |d<   t          j        | j         j	        |j	        k              sJ d S )Nr      )
r   r	  r   r   r  r<   r&   r>   r@   r=   )r   lq_fvs     r   test_function_viewz'TestLogQuantityViews.test_function_view  sv    &E{{aj((((zTW\77777%*$avdgmu{23333333r   c                 l   t          j        t                    5  | j                            t
          j                   d d d            n# 1 swxY w Y   | j                            t
          j                  }|j        t
          j	        u sJ t          j        |j        | j        j        k              sJ |                    t
          j                  }t          |j                  t
          j        u sJ |j        j        t
          j        k    sJ t          j        || j        k              sJ d S r   )r*   r+   r,   r   r  r   r  r*  r<   r   r>   r@   r=   r;   r   r   r%   r   )r   rC   lq3s      r   test_quantity_viewz'TestLogQuantityViews.test_quantity_view  s3   ]9%% 	% 	%GLL$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% X]]1:&&w!%vbh$(.011111ggak""CH~~****x%)AAAAAvcTXo&&&&&&&s   %AAAN)rY   rZ   r[   r+  r/  r3  r6  re   r   r   r'  r'    sP        4 4 41 1 14 4 4' ' ' ' 'r   r'  c                       e Zd Zd Zd ZdS )TestLogQuantitySlicingc                 t   t          j        t          j        dd          t           j        z            }|d         t          j        dt           j        z            k    sJ dt           j        z  |d<   |d         t          j        dt           j        z            k    sJ t          j        t           j                  5  dt           j        z  |d<   d d d            n# 1 swxY w Y   t          j        t           j                  5  dt           j	        z  |d<   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 d            n# 1 swxY w Y   |d         t          j        dt           j        z            k    sJ d S )Nr6         &@r9   r7   r   r   )
r   r;   r>   r?   rJ   r*   r+   rW   r2   r   r   lq1s     r   test_item_get_and_setz,TestLogQuantitySlicing.test_item_get_and_set  s   k")C..5661vTAD[111111A1vUQT\222222]1<(( 	! 	!QS[CF	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!]1<(( 	# 	#QU]CF	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#]1<(( 	. 	.[--CF	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.1vUQT\22222222s6   ?CC"%C"D&&D*-D*%F  FFc                 v   t          j        t          j        dd          t           j        z            }dt           j        z  |dd<   t          j        |dd         t          j        dt           j        z            k              sJ t          j        t           j                  5  dt           j	        z  |dd<   d d d            n# 1 swxY w Y   t          j        t           j                  5  dt           j
        z  |dd<   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 d d            n# 1 swxY w Y   t          j        |d         t          j        dt           j        z            k              sJ d S )Nr6   r7   r   r      )r   r;   r>   r?   rJ   r@   r*   r+   rW   r2   r   r;  s     r   test_slice_get_and_setz-TestLogQuantitySlicing.test_slice_get_and_set  s   k")C..56614<AaCvc!A#h!+eadl";";;<<<<<]1<(( 	# 	#qs{C!H	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#]1<(( 	% 	%qu}C!H	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]1<(( 	0 	0{513;//C!H	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0vc!fEADL 9 99:::::::s6   (C		CC2DDD<'E//E36E3N)rY   rZ   r[   r=  r@  re   r   r   r8  r8    s2        3 3 3
; 
; 
; 
; 
;r   r8  c                      e Zd Zej                            dd ej                    z  dej        z   ej	        dej
        z             ej        d           ej         ej        ddd          ej        z             ej	        d	d
ej        z            g          ej                            dg d          d                         Zd Zej                            dd          d             Zd Zej                            de          d             Zej                            ddej        z  d ej                    z   ej	        dej
        z             ej	        dej        z            d ej        dej        z            z   ej	        d	d
ej        z            f          d             Zej                            de          d             Zej                            ddej        z  d ej                    z   ej	        dej
        z             ej	        dej        z            d ej        dej        z            z   ej	        d	d
ej        z            f          d             Zd ZdS )TestLogQuantityArithmeticr   g333333@gGz(@g@r   i  i  r   gQ@r   fac)r6   r   r  c                    ||z  }|j         j        |j         j        |z  k    sJ t          |j        |j        |z             ||z  }|j         j        |j         j        |z  k    sJ t          |j        |j        |z             ||z  }|j         j        |z  |j         j        k    sJ t          |j        |z  |j                   |                                }||z  }|j         j        |j         j        |z  k    sJ t          |j        |j        |z             |                                }||z  }|j         j        |z  |j         j        k    sJ t          |j        |z  |j                   dS )z7Check that multiplication and division work as expectedN)r<   r%   r   rK   copy)r   r   rC  lq_sfs       r   r   z6TestLogQuantityArithmetic.test_multiplication_division  sn    ez'5:+CS+HHHHH(;<<<z'5:+CS+HHHHH(;<<<z',
0HHHHH+U^<<<

z'5:+CS+HHHHH(;<<<

z',
0HHHHH+U^<<<<<r   c                 8
   t          j        t          j        dd          t           j        z            }t          j        t           j                  5  |dt           j        z  z   ddd           n# 1 swxY w Y   t          j        t           j                  5  dt           j        z  |z   ddd           n# 1 swxY w Y   t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t           j        t           j	        t           j
        fD ]=}t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   >t          j        t          j        dd                    }t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   |                                }t          j        t           j                  5  ||z  }ddd           n# 1 swxY w Y   ||k                                    sJ t          j        t           j                  5  ||z  }ddd           n# 1 swxY w Y   ||k                                    sJ |t          j        d          z  }|j        t           j        k    sJ t          j        |j        |j        dz  k              sJ |t          j        d          z  }t!          |t           j                  sJ t          j        ||j        t          j        d          z  k              sJ |t           j        z  }t           j        |z  }||fD ]}	t!          |	t%          |                    rJ |	j        |j        j        t           j        z  k    sJ t          j        t          j                              5  t          j        t           j                  5  |	                    |j        j                   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |dt           j        z  z  }	|	j                            |j        j                  sJ t5          |	                    |j        j                  |j        dz             dS )	zCheck that multiplication/division with other quantities is only
        possible when the physical unit is dimensionless, and that this keeps
        the result as a LogQuantity if possible.r6   r:  Nr   r   r7   g      I@r   )r   r;   r>   r?   rJ   r*   r+   rW   r2   r   r   rE  r@   r<   r   r=   r   r	  r   r&   r   r   r   r%   rH   r   r   )
r   r   r<   r*  rF  rr2r   r   r   s
             r   !test_more_multiplication_divisionz;TestLogQuantityArithmetic.test_more_multiplication_division  s    [3--455]1<(( 	 	#)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	13Y"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	GG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S!%' 	 	Dq|,,  T		               k")At,,--]1<(( 	 	"HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	"HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		]1<(( 	 	SLE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   """""]1<(( 	 	SLE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   """"" !+c"""v11111vagS011111 29T??""ak*****vbC.4@@AAAAA 13YS3Yb 	1 	1A!!T#YY/////6SX3ac99999,Q]__== 1 1]1<00 1 1DD/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 $+v##CH$:;;;;;SX344c6H16LMMMMMs   A22A69A6B::B>B>#C55C9<C9EE	E	&F88F<?F<!G33G7:G7H..H25H2+I==JJ KKK?R! R
>R!
RR!RR!!R%	(R%	r   r   c                    t          j        t          j        dd          t           j        z            }|dk    rt          j        ||z  dk              sJ n_|dk    rt          j        ||z  |k              sJ n;t          j        t           j                  5  ||z   ddd           n# 1 swxY w Y   t          j        t          j        d                    }||z  }|dk    r6|j	        t           j
        u sJ t          j        |j        dk              sJ dS |dk    rt          j        ||k              sJ dS t          |t          |                    rJ |j	        |j	        j        |z  k    sJ t          j        t          j                              5  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 )zCheck that raising LogQuantities to some power is only possible when
        the physical unit is dimensionless, and that conversion is turned off
        when the resulting logarithmic unit (say, mag**2) is incompatible.r6   rg   r   r   Nr7   )r   r;   r>   r?   rJ   r@   r*   r+   rW   r<   r   r=   r   r   r&   r   r   r   )r   r   r   r*  r   s        r   r   z-TestLogQuantityArithmetic.test_raise_to_power$  s   
 [3,,qt344A::6"e)s*++++++aZZ6"e)r/******q|,,  E		              
 k")D//**JA::6Q555556!'S.)))))))aZZ6!s(#######!!T#YY/////6SX3U:::::,Q]__== 3 3]1<00 3 3DD12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3sH   B--B14B1H> G*H*G.	.H1G.	2HH	Hc                     t          j        t          j        dd          t           j        z            }t          j        t                    5  ||z   d d d            d S # 1 swxY w Y   d S )Nr6   rg   r   r;   r>   r?   rJ   r*   r+   r,   r   r   s     r   test_error_on_lq_as_powerz3TestLogQuantityArithmetic.test_error_on_lq_as_powerD  s    [3,,qt344]9%% 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A!!A%(A%c                    t          j        t          j        dd          t           j        z            }d|z  }t          j        t           j                  5  ||z    d d d            n# 1 swxY w Y   t          j        t           j                  5  ||z
   d d d            n# 1 swxY w Y   t          j        t           j                  5  ||z
   d d d            d S # 1 swxY w Y   d S )Nr6   r7   r  )r   r;   r>   r?   rJ   r*   r+   rW   )r   r   r   r  s       r   r   zITestLogQuantityArithmetic.test_addition_subtraction_to_normal_units_failsI  s   [3--4555L]1<(( 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]1<(( 	 	FF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   A**A.1A.B%%B),B)C!!C%(C%r  gQ@g=
ףp=@gGz@r   c                 
   t          j        t          j        dd          t           j        z            }|                    t          |j        dt           j                  t          j	                              }||z   }t          |j        |j        |z             ||z   }t          |j        |j        |z             ||z
  }t          |j        |j        |z             ||z
  }t          |j        ||j        z             dS )zCheck that addition/subtraction with quantities with magnitude or
        MagUnit units works, and that it changes the physical units
        appropriately.r6   r7   r%   r  N)r   r;   r>   r?   rJ   r   r   r<   r   r   r   rK   )r   r   r   other_physicalrF  lq_srlq_dflq_drs           r   r   z3TestLogQuantityArithmetic.test_addition_subtractionV  s     [3--455EJ1IJJ-// " 
 

 U
n(DEEE
n(DEEEU
n(DEEE
(DEEEEEr   c                 z   t          j        t           j                  }t          j        t	          j        dd          |          }t          j        t           j                  5  ||z  }d d d            n# 1 swxY w Y   t	          j	        |j
        t	          j        dd          k              sJ |j        |k    sJ t          j        t           j                  5  ||z  }d d d            n# 1 swxY w Y   t	          j	        |j
        t	          j        dd          k              sJ |j        |k    sJ d S )Nr6   r7   )r   r   rJ   r;   r>   r?   r*   r+   rW   r@   r=   r<   )r   r   r'   r<  s       r   -test_inplace_addition_subtraction_unit_checkszGTestLogQuantityArithmetic.test_inplace_addition_subtraction_unit_checksw  s   eADkkk")C..44]1<(( 	 	5LC	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 vci29S$#7#7788888x3]1<(( 	 	5LC	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 vci29S$#7#7788888x3s$   %A77A;>A;C11C58C5c                    t          j        t          j        dd          t           j        z            }|                    t          |j        dt           j                  t          j	                              }|
                                }||z  }t          |j        |j        |z             |
                                }||z  }t          |j        |j        |z             dS )zCheck that inplace addition/subtraction with quantities with
        magnitude or MagUnit units works, and that it changes the physical
        units appropriately.r6   r7   r%   r  N)r   r;   r>   r?   rJ   r   r   r<   r   r   rE  r   rK   )r   r   r   rR  rF  rT  s         r   !test_inplace_addition_subtractionz;TestLogQuantityArithmetic.test_inplace_addition_subtraction  s     [3--455EJ1IJJ-// " 
 
 		n(DEEE		n(DEEEEEr   c                    t          j        dddt          j        z  dt           j        z  dz  z  z            }t          j        |          }dt           j        z  }d|z  }||z
  }|j                            t           j	        t           j
        z  t           j        z            sJ |j        |j        dz  t          j        z  dt           j        z  dz  z  z  }t          j        |dz
            dk     sJ d	S )
z@For fun, a more complicated example of addition and subtraction.r   r6   rg   r7   r   r)  r   r   N)r   r1   r>   rl   rm   r   rA   r<   r   rF   rG   rN   rK   abs)r   r   DMmagm_stdmM_stratios          r   r   z?TestLogQuantityArithmetic.test_complicated_addition_subtraction  s    fT3#+0B"BCDDc

ag~5[byy&&quqs{QT'9:::::!4ru!<QR?R!RSveck""W,,,,,,r   N)rY   rZ   r[   r*   r\   r]   r   r   r:   r;   rJ   r  r>   r   Angstromr   rJ  r   rO  rc   r   r2   r1   r   rW  rY  r   re   r   r   rB  rB    s       [%!%''MAGOAKqt$$AE#JJAE+"+dD"--
:;;AKcAEk**	

 
 [UMMM22= = 32
 
=2BN BN BNH [Wn553 3 653>  
 [Wi00
 
 10
 [15L51577NAKqt$$AKqs
##616!ae)$$$AKcAEk**	

 
F F
 
F, [Wi00  10 [15L51577NAKqt$$AKqs
##616!ae)$$$AKcAEk**	

 
F F
 
F"	- 	- 	- 	- 	-r   rB  c                       e Zd Zd Zd ZdS )TestLogQuantityComparisonsc                     t          j        t          j        dd          t           j        z            }t          j        t                    5  |dk     d d d            n# 1 swxY w Y   |dk    rJ |dk    sJ d S )Nr6   r7   arM  rN  s     r   'test_comparison_to_non_quantities_failszBTestLogQuantityComparisons.test_comparison_to_non_quantities_fails  s    [3--455]9%% 	 	HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #IIIISyyyyyys   A!!A%(A%c                    t          j        t          j        dd          t           j        z            }t          j        dt           j        z            }t          j        ||k    t          j        g d          k              sJ t          j        ||k    t          j        g d          k              sJ t          j        dt           j        z            }t          j        ||k    t          j        g d          k              sJ t          j        ||k    t          j        g d          k              sJ t          j        dt           j        z            }||k    rJ ||k    sJ t          j
        t           j                  5  ||k      d d d            n# 1 swxY w Y   dt           j        z  }t          j        ||k    t          j        g d          k              sJ t          j        ||k     t          j        g d          k              sJ t          j
        t           j                  5  |dt           j        z  k     d d d            n# 1 swxY w Y   t          j
        t           j                  5  ||j        t           j        z  k     d d d            n# 1 swxY w Y   t          j        t          j        dd                    }|j        t           j        z  }t          j        ||k              sJ t          j
        t           j                  5  |dt           j        z  k      d d d            d S # 1 swxY w Y   d S )Nr6   rg   r   )TFF)FTFg      ?)r   r;   r>   r?   rJ   r@   arrayr  r2   r*   r+   rW   r=   r   )r   r<  r*  r5  lq4q5lq6fv6s           r   test_comparisonz*TestLogQuantityComparisons.test_comparison  s   k")C--455k#*%%vsSyRX.B.B.B%C%CCDDDDDvsczbh/C/C/C&D&DDEEEEEeC!$JvsSyRX.B.B.B%C%CCDDDDDvsczbh/C/C/C&D&DDEEEEEk#)$$3JJJJczzzz]1<(( 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	14ZvsRxBH-A-A-A$B$BBCCCCCvrCxBH-A-A-A$B$BBCCCCC]1<(( 	 	39	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]1<(( 	% 	%39qu$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% k")C--..i!%vcSj!!!!!]1<(( 	 	#)OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   F!!F%(F%=II!$I!J++J/2J/)M

MMN)rY   rZ   r[   rf  rm  re   r   r   rc  rc    s2              r   rc  c                       e Zd Zd Zej                            dd          d             Zd Zej                            dd          d             Z	d Z
ej                            dd	          d
             ZdS )TestLogQuantityMethodsc                 L   t          j        dd                              dd          t          j        t          j                  z  | _        t          j        ddd                              dd          t          j                    z  | _        | j        | j        f| _        d S )Nr6   r)  r   g      @r   r1  )	r>   r?   reshaper   r   rJ   mJym1magsr   s    r   r+  z#TestLogQuantityMethods.setup_method  sx    9S#&&..q!44quQT{{B)Cc**221a881577BXtw'			r   method)
meanminmaxroundtracestdvarptpdiffediff1dc           	      t   | j         D ]} t          ||                      }t          j        |j         t          |j        |                      j        k              sJ |dv r|j        t          j                    k    sJ ||dk    r|j        t          j        dz  k    sJ |j        |j        k    sJ d S )N)r{  r}  r~  r  r|  r   )	rt  r   r>   r@   r=   r	  r<   r   r   )r   ru  r   ress       r   test_always_okz%TestLogQuantityMethods.test_always_ok  s      9 	, 	,C&'#v&&((C6#)'Jws/A6'J'J'L'L'RRSSSSS:::x1577*****5x15!8+++++x38+++++	, 	,r   c                     | j         D ]^}t          j        |                    d|j        z  d|j        z            j        |j                            dd          k              sJ _d S )Nr   rg   )rt  r>   r@   clipr<   r=   )r   r   s     r   	test_clipz TestLogQuantityMethods.test_clip  sx    9 	 	C6sxsx88>9>>#s++,     	 	r   )sumcumsumc                     t          | j        |                      }t          j        |j         t          | j        j        |                      j        k              sJ |j        | j        j        k    sJ t          j        t                    5   t          | j
        |                       d d d            d S # 1 swxY w Y   d S r   )r   rs  r>   r@   r=   r	  r<   r*   r+   r,   rr  )r   ru  r  s      r   test_only_ok_if_dimensionlessz4TestLogQuantityMethods.test_only_ok_if_dimensionless  s    &gdgv&&((vci#J747+A6#J#J#L#L#RRSSSSSx47<'''']9%% 	( 	(%GDHf%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   B==CCc                     t          j        | j                            | j                  j        | j        j                            | j        j                  k              sJ d S r   )r>   r@   rs  dotr=   r   s    r   test_dotzTestLogQuantityMethods.test_dot  sL    vdgkk$'**0DGM4E4Edgm4T4TTUUUUUUUr   )prodcumprodc                 @   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 r   )r*   r+   r,   r   rr  rs  )r   ru  s     r   test_never_okz$TestLogQuantityMethods.test_never_ok  s   ]9%% 	( 	(%GDHf%%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(]9%% 	' 	'$GDGV$$&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's#   AAA(BBBN)rY   rZ   r[   r+  r*   r\   r]   r  r  r  r  r  re   r   r   ro  ro    s        ( ( (
 [	
 	, 	, 	,   [X'899( ( :9(V V V [X':;;' ' <;' ' 'r   ro  )3__doc__ra   r   numpyr>   r*   numpy.testingr   astropyr   ri   r   r   astropy.tests.helperr   r   r   decibelr_   DexUnitr   DecibelUnitr`   r  r;   Decibelr  r   r2   r   rG   rJ   rc   r	   rn   ru   rx   r|   r~   r   r   r   r   r   r#  r%  r'  r8  rB  rc  ro  re   r   r   <module>r     s              ) ) ) ) ) ) " " " " " "       9 9 9 9 9 9E15!)$AIq}5QY/%qsAC!#q&L!$?	i i i i i i i iX  " " "2 2 2  ": ": ": ": ": ": ": ":Jd3 d3 d3 d3 d3 d3 d3 d3Nf f f f f f f fR    i- i- i- i- i- i- i- i-X5 5 5"9 9 9' ' ' ' ' ' ' '@; ; ; ; ; ; ; ;6r- r- r- r- r- r- r- r-j# # # # # # # #L7' 7' 7' 7' 7' 7' 7' 7' 7' 7'r   