
    IR-e%                     `   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Zddl	Z	ddl
mZmZmZ ddlmZ ddlmZ ddlmZmZ ddlmZ 	  G d	 d
          Z G d d          Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z" G d d          Z# G d 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% Z0d& Z1d' Z2d( Z3d) Z4d* Z5d+ Z6d, Z7d- Z8d. Z9d/ Z:d0 Z;d1 Z<d2 Z=d3 Z>d4 Z? G d5 d6          Z@d7 ZA G d8 d9          ZB G d: d;eB          ZC G d< d=          ZDd> ZE G d? d@          ZFdS )Az$Test the Quantity class and related.    N)Fraction)assert_allcloseassert_array_almost_equalassert_array_equal)units)_UNIT_NOT_INITIALISED)
isiterable
minversion)AstropyWarningc                   h    e 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d Zd ZdS )TestQuantityCreationc                 P   dt           j        z  }t          |t           j                  sJ t           j        dz  }t          |t           j                  sJ dt           j        z  }t          |t           j                  sJ t           j        dz  }t          |t           j                  sJ dt           j        z  t           j        z  }t          |t           j                  sJ t          j        t                    5  dt           j        z   }d d d            n# 1 swxY w Y   t          j        t                    5  dt           j        z
  }d d d            n# 1 swxY w Y   t          j        t                    5  dt           j        z  }d d d            d S # 1 swxY w Y   d S )Nףp=
&@gsh|f@)umeter
isinstanceQuantitysecondpytestraises	TypeError)selfquantitys     Alib/python3.11/site-packages/astropy/units/tests/test_quantity.pytest_1zTestQuantityCreation.test_1   s     17?(AJ/////7U?(AJ/////17?(AJ/////7U?(AJ/////17?QX-(AJ/////]9%% 	) 	)(H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) ]9%% 	) 	)(H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) ]9%% 	) 	)(H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s6   >DD!D>EE!E>FF"Fc                    t          j        dt           j                  }t          j        dd          }t          j        d          }|j        t          j        d          k    sJ t          j        t                    5  t          j        t                      t           j	                   d d d            d S # 1 swxY w Y   d S )Nm&@unitQ5@cm   )
r   r   r   r   Unitr   r   r   objectm)r   _q3s      r   test_2zTestQuantityCreation.test_20   s    JvAG,,,Jud##Z w!&))####]9%% 	+ 	+Jvxxac****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   -B<<C C c                     t          j        t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nr   
testinggggr   )r   r   
ValueErrorr   r   r   s    r   test_3zTestQuantityCreation.test_3=   s    ]:&& 	2 	2JvL1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   >AAc                    t          j        dd          }t          j        |j                  sJ t          j        dd          }t          j        |j                  sJ t          j        dd          }t          j        |j                  sJ t          j        d          }t          j        |j                  sJ |j        t           j        k    sJ t          j        dd          }t          j        |j                  sJ t          j        dd          }t          j        |j                  sJ t          j        d	          }t          j        |j                  sJ |j        t           j        k    sJ t          j        d
d          }t          j        |j                  sJ t          j	        t                    5  t          j        dd          }d d d            n# 1 swxY w Y   t          j	        t                    5  t          j        dd          }d d d            d S # 1 swxY w Y   d S )Nnanr!   r   NaNz-nanznan cminfz-infzinf cmInfinity spam)r   r   npisnanvaluer   r!   isinfr   r   r   r   qs     r   test_nan_infz!TestQuantityCreation.test_nan_infB   s   Ju4(((x     Ju4(((x     JvD)))x     Jx  x     v~~~~ Ju4(((x     JvD)))x     Jx  x     v~~~~Jz---x      ]9%% 	* 	*
2D)))A	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* ]9%% 	. 	.
6---A	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s$   G//G36G3H77H;>H;c                     t          j        dt           j                  }t          j        t
                    5  t           j        |_        d d d            d S # 1 swxY w Y   d S )N&@r   )r   r   r   r   r   AttributeErrorr!   r   r   q1s     r   test_unit_propertyz'TestQuantityCreation.test_unit_propertyf   s    Z17+++]>** 	 	dBG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA Ac                    t          j        dt           j        t           j        z  t                    }|j        t          k    sJ t          j        |          }|j        t          k    sJ |j        t          |j                  k    sJ |j        |j        k    sJ t          j
        ddgt          j                  }t          j        |t           j                  }|j        |j        k    sJ t          j
        ddgt          j                  }t          j        |t           j                  }|j        |j        k    sJ t          j        t          j        d          t           j                  }|j        t          k    sJ t          j        t          j        d          t           j        t                     }|j        t           k    sJ dS )zTest that if an explicit dtype is given, it is used, while if not,
        numbers are converted to float (including decimal.Decimal, which
        numpy converts to an object; closes #1419)
           r   dtype      ?       @rE   z10.25N)r   r   r%   sintrE   floatr7   r   r5   arrayfloat32yrfloat16decimalDecimalr$   )	r   r@   q2a3_32q3_32a3_16q3_16q4q5s	            r   test_preserve_dtypez(TestQuantityCreation.test_preserve_dtypem   st    Zqs#666x3Z^^x5    x5??****w"'!!!! #s2:666
5!$''{ek))))#s2:666
5!$''{ek)))) Z00!#66x5    Z00!#VDDDx6!!!!!!    c                 ~    t          j        dd          }t          j        |j        t          j                  sJ dS )z>Test that if ``dtype=None``, NumPy's dtype inspection is used.rC   NrH   )r   r   r5   
issubdtyperE   integer)r   rR   s     r   test_numpy_style_dtype_inspectz3TestQuantityCreation.test_numpy_style_dtype_inspect   s8    Z$'''}RXrz2222222rZ   c                 `   t          j        dt          j                  }t          j        |j        t          j                  rJ |j        t          j        k    sJ t          j        t          j        d          t          j                  }|j        t          j        k    sJ t          j        t          j        d          t          j                  }|j        t          j        k    sJ t          t          d          rIt          j        t          j
        d          t          j                  }|j        t          j
        k    sJ t          t          d          rIt          j        t          j        d          t          j                  }|j        t          j        k    sJ dS dS )zGTest that if ``dtype=numpy.inexact``, the minimum precision is float64.rC   rH   rO   float128N)r   r   r5   inexactr\   rE   r]   float64rM   hasattrrO   r`   )r   r@   rR   r'   rW   s        r   test_float_dtype_promotionz/TestQuantityCreation.test_float_dtype_promotion   sI   Z"*---=2:66666x2:%%%%Z
2bj999x2:%%%%Z
2bj999x2:%%%%2y!! 	*BJrNN"*===B8rz))))2z"" 	+BKOO2:>>>B8r{****	+ 	+**rZ   c                    t          j        d          }t          j        |t          j        t          j        z            }|j        |usJ t          j        |t          j        t          j        z  d          }|j        |u sJ t          j        |          }||usJ |j        |j        usJ t          j        |d          }||u sJ |j        |j        u sJ t          j        ||j        d          }||u sJ |j        |j        u sJ t          j        |t          j        t          j        z  d          }||usJ |j        |j        usJ d S )N      $@r   F)r   copyrg   )	r5   aranger   r   r%   rI   baser   r!   )r   aq0r@   rR   r'   rW   s          r   	test_copyzTestQuantityCreation.test_copy   sR    IdOOZac	***waZac	666w!||||Z^^||||wbg%%%%Z'''Rxxxxw"'!!!!ZBG%000Rxxxxw"'!!!!ZAD13JU333||||wbg%%%%%%rZ   c                 
    G d dt           j                  } |t          j        d          t           j                  }t          t          j        |                    t           j        u sJ t          t          j        |d                    |u sJ t          t          j        |t           j                            t           j        u sJ t          t          j        |t           j        d                    |u sJ dS )z>Test subok can be used to keep class, or to insist on Quantityc                       e Zd ZdS );TestQuantityCreation.test_subok.<locals>.MyQuantitySubclassN__name__
__module____qualname__ rZ   r   MyQuantitySubclassrp              DrZ   rv   rf   TsubokN)r   r   r5   ri   r%   typekm)r   rv   myqs      r   
test_subokzTestQuantityCreation.test_subok   s    	 	 	 	 	 	 	 	 ! 4!#66AJsOO$$
2222AJs$///004FFFFFAJsAD))**aj8888AJsAD55566:LLLLLLLrZ   c                    t          j        t          j        d          d          }t          j        |t          j        d          }|j        d         sJ t          j        |t          j        d          }|j        d         sJ t          j        |t          j        d          }|j        d         sJ t          j        |d          j        d         sJ t          j        |d          j        d         sJ t          j        |d          j        d         sJ t          j        t          j        d          d          }t          j        |t          j        d          }|j        d         sJ t          j        |t          j        d          }|j        d         sJ t          j        |t          j        d          }|j        d         sJ t          j        |d          j        d         sJ t          j        |d          j        d         sJ t          j        |d          j        d         sJ dS )	z3Test that order is correctly propagated to np.arrayrf   CorderC_CONTIGUOUSFF_CONTIGUOUSAN)r5   rL   ri   r   r   r%   flags)	r   acqccqcfqcaafqfcqffqfas	            r   
test_orderzTestQuantityCreation.test_order   s   XbiooS111jQS,,,y((((jQS,,,y((((jQS,,,y((((z#S)))/????z#S)))/????z#S)))/????XbiooS111jQS,,,y((((jQS,,,y((((jQS,,,y((((z#S)))/????z#S)))/????z#S)))/??????rZ   c                 X   t          j        d          }t          j        |t          j        d          }|j        dk    r|j        dk    sJ t          j        |t          j        d          }|j        dk    r|j        dk    sJ t          j        |t          j        d          }|j        dk    r|j        dk    sJ t          j        t          j        dd	          d	d          j        dk    sJ t          j        t          j        dd
          d	d          j        dk    sJ dS )z3Test that ndmin is correctly propagated to np.arrayrf   r"   )ndmin)
      )r"   r      )r"   r"   r   r%   r!   N)r5   ri   r   r   r%   ndimshape)r   rk   r@   rR   r'   s        r   
test_ndminzTestQuantityCreation.test_ndmin   s   IdOOZ13a(((w!||E 1 1 1 1Z13a(((w!||G 3 3 3 3ZACq)))w!||J 6 6 6 6 z!*Q,,c;;;@AEEEEz!*Q--s!<<<AQFFFFFFrZ   c                 h    G d dt           j                  }t          j        d          }|                                                    |          }d|_        t          j        |          }t          |t          j                  sJ |j        t          j	        u sJ t          j
        |j        |k              sJ t          j        |t          j                  }|j        t          j        u sJ t          j
        |j        d|z  k              sJ t          j        |d          }t          j
        |j        |k              sJ d|d	<   |d	         d
k    sJ |d	         d
k    sJ |                                                    |          }t          j	        |_        t          j        |t          j        d          }d|d	<   |d	         d
k    sJ |d	         dk    sJ d|_        t          j        t                    5  t          j        |           ddd           dS # 1 swxY w Y   dS )z4Test that unit attributes in objects get recognized.c                       e Zd ZdS )MTestQuantityCreation.test_non_quantity_with_unit.<locals>.MyQuantityLookalikeNrq   ru   rZ   r   MyQuantityLookaliker      rw   rZ   r         @r%        @@Frh   r   r           rG   nonsenseN)r5   ndarrayri   rg   viewr   r   r   r   r%   allr7   mmr   r   r   )r   r   rk   mylookaliker@   rR   r'   rW   s           r   test_non_quantity_with_unitz0TestQuantityCreation.test_non_quantity_with_unit   sO   	 	 	 	 	"* 	 	 	 IcNNffhhmm$788Z$$"aj)))))w!#~~~~vbh!m$$$$$ZQT**w!$vbh&1*,-----Z%000vbh+-.....1!u||||1~$$$$ffhhmm$7883ZQT6661!u||||1~$$$$%]9%% 	$ 	$J{###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   H''H+.H+c                    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        t           j        z  z  }t          |t           j                  sJ |j        t           j        t           j        z  k    sJ t          j	        |j        |k              sJ d|d<   t          j	        |j        |k              sJ |t           j
        t           j        z  z  }t          |t           j                  sJ |j        t           j
        t           j        z  k    sJ t          j	        |j        |dz  k              sJ d|d<   |d         j        dk    sJ ||j        z  }d|d<   t          j	        |j        |k              sJ t          j        t           j                  5  |t           j        z   d d d            n# 1 swxY w Y   |                                }|t           j
        t           j        z  z  }|j        t           j
        t           j        z  k    sJ t          j	        |j        |k              sJ t          j	        |j        |dz  k              sJ d	|d<   |d
z  }|j        t           j        t           j        z  k    sJ t          j	        ||k              sJ dt           j        z  }t          j        d          }	|	|z  }
|
j        t          j        |          k    sJ t          j	        |
                    t           j                  d|	z  k              sJ d S )NrF   rf   r   	   r      g     @@         zkm/hrg      >@      @)r   r%   r   r   r   r7   r5   ri   rI   r   r   r   r   
UnitsErrorrg   r{   hrr!   r#   to_value)r   r@   a2rR   r'   rW   a2_copyrX   not_quite_a_foota6q6s              r   test_creation_via_viewz+TestQuantityCreation.test_creation_via_view  s5   ACZ"aj)))))w!#~~~~x3Yt__139_"aj)))))w!#)####vbh"n%%%%%1vbh"n%%%%%14!#:"aj)))))w!$*$$$$vbh"v+-.....1!u{f$$$$27]1vbh"n%%%%%]1<(( 	 	!#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ''))
qtaczw!$*$$$$vbh"n%%%%%vbh'F"223333317]w!$+%%%%vbBh!$;Ys^^##w!&!1222222vbkk!$''4"945555555s   %HHHc                 P   t          j        t                    5  t          j        t          d          5 }dt
          j        z	   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          dk    sJ dt
          j        z  }t          j        t                    5  t          j        t          d          5 }|t
          j        z	   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          dk    sJ t          j        t                    5  t          j        t          d          5 }|t
          j        z  }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          dk    sJ t          j        t                    5  t          j        t          d          5 }d|z	   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nzis not implementedmatchr"   rF   )	r   r   r   warnsr   r   r%   lenr{   )r   warning_linesr:   s      r   test_rshift_warnsz&TestQuantityCreation.test_rshift_warnsE  s   ]9%% 	 	v|"6(
 (
 (
 	HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =!!Q&&&&!$J]9%% 	 	v|"6(
 (
 (
 	HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =!!Q&&&&]9%% 	 	v|"6(
 (
 (
 	!#IA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =!!Q&&&&]9%% 	 	v|"6(
 (
 (
 	1HH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =!!Q&&&&&&s   A)AA)A	A)A	A))A-0A-1D C)D )C-	-D 0C-	1D  DD9FE1%F1E5	5F8E5	9FFFHG/#H/G3	3H6G3	7HH
H
N)rr   rs   rt   r   r(   r-   r;   rA   rY   r^   rd   rm   r}   r   r   r   r   r   ru   rZ   r   r   r      s       ) ) )2+ + +2 2 2
". ". ".H  " " ":3 3 3
+ + +(& & &6M M M@ @ @2G G G!$ !$ !$F-6 -6 -6^' ' ' ' 'rZ   r   c                      e Zd Z ej        dej                  Z ej        dej                  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d Zej                            d          d             Zd ZdS )TestQuantityOperationsr          @c                    | j         | j        z   }|j        dk    sJ |j        t          j        k    sJ | j        | j         z   }|j        dk    sJ |j        t          j        k    sJ t	          j        dt          j                  t	          j        dt          j	                  z   }|j        t          j        k    sJ |j        dk    sJ d S )Ng      '@g     @gfffffp@g      +@gL@)
r@   rR   r7   r   r   r   
centimeterr   r%   r{   )r   new_quantitynew_qs      r   test_additionz$TestQuantityOperations.test_additiona  s    w(!T)))) AG++++ w(!V++++ AL0000
613''!*T14*@*@@zQS    {g%%%%%%rZ   c                     | j         | j        z
  }|j        dk    sJ |j        t          j        k    sJ | j        | j         z
  }|j        dk    sJ |j        t          j        k    sJ d S )NgGz&@g     )r@   rR   r7   r   r   r   r   r   r   s     r   test_subtractionz'TestQuantityOperations.test_subtractionp  sz    w(!U**** AG++++ w(!W,,,, AL000000rZ   c                    | j         | j        z  }|j        dk    sJ |j        t          j        t          j        z  k    sJ | j        | j         z  }|j        dk    sJ |j        t          j        t          j        z  k    sJ d| j         z  }|j        dk    sJ |j        t          j        k    sJ | j         dz  }|j        dk    sJ |j        t          j        k    sJ | j         t          j        z  }|j        dk    sJ |j        t	          j        d          k    sJ t          j        | j         z  }|j        dk    sJ |j        t	          j        d          k    sJ d S )Ngףp=
V@      .@gie@r   zm s)	r@   rR   r7   r   r   r   r   rI   r#   r   s     r   test_multiplicationz*TestQuantityOperations.test_multiplication{  st   w(!U**** QWq|%;<<<< w(!U**** Q\AG%;<<<< dg~!U**** AG++++ w~!U**** AG++++ w}!U**** AF5MM1111 sTW}!U**** AF5MM111111rZ   c                    | j         | j        z  }t          |j        dd           |j        t
          j        t
          j        z  k    sJ | j        | j         z  }t          |j        dd           |j        t
          j        t
          j        z  k    sJ t          j        dt
          j                  }t          j        dt
          j	                  }||z  }t          |j        d	d
           |j        t
          j        t
          j	        z  k    sJ | j         dz  }|j        dk    sJ |j        t
          j        k    sJ d| j         z  }|j        dk    sJ |j        t          j
        d          k    sJ | j         t
          j        z  }|j        dk    sJ |j        t          j
        d          k    sJ t
          j        | j         z  }|j        dk    sJ |j        t          j
        d          k    sJ d S )Ngףp=
?   rP   g-.;j?   r=   r   rf   g=
ףp=?r   gʡE?r   rF   z1/mm/s-.;j?s/m)r@   rR   r   r7   r   r   r   r   r   r   r#   rI   )r   r   r@   rR   s       r   test_divisionz$TestQuantityOperations.test_division  s   w(!,"4faHHHH QWq|%;<<<< w(!,"46ISUVVVV Q\AG%;<<<<Z17+++Z18,,,Bw!,"4dBGGGG QWqx%78888 w~!U**** AG++++ tw!S(((( AF5MM1111 w}!U**** AF5MM1111 sTW}!Y.... AF5MM111111rZ   c                 N   t          j        dd          }| j        t           j        z  t           j        | j        z  cxk    r|k    sn J | j        t           j        z  t          j        dd          k    sJ t           j        | j        z  t          j        dd          k    sJ dS )zRegression test for issue #587.r   zm*sr   r   r   N)r   r   r@   rI   )r   r   s     r   test_commutativityz)TestQuantityOperations.test_commutativity  s     
5%((w}dg6666666666w}
5% 8 88888sTW}
9e < <<<<<<<rZ   c                    | j         dz  }t          |j        dd           |j        t	          j        d          k    sJ | j         dz  }t          |j        dd           |j        t	          j        d	          k    sJ d S )
Nr   g&SM`@r   r   zm^2r   gkE@r   zm^3)r@   r   r7   r   r   r#   r   s     r   
test_powerz!TestQuantityOperations.test_power  s    wz!,"4hJJJJ AF5MM1111wz!,"4k1MMMM AF5MM111111rZ   c                 2   t          j        d          }|t          j        z  }||z  }t          j        ||k              sJ ||z  }t          j        ||k              sJ ||z  }t          j        ||t          j        dz  z  k              sJ 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  }||z  }t          j        |t          j        ||j                  |j	        z  |j	        z  k              sJ d S )Nr   r   )rF   r   r   )r   rF   r   )r   r   rF   )
r5   eyer   r%   r   rL   rI   matmulr7   r   )r   rk   r:   result1result2result3rR   result4s           r   test_matrix_multiplicationz1TestQuantityOperations.test_matrix_multiplication  sJ   F1IIGa%vgl#####a%vgl#####a%vgQS!V+,,,,,Xllllll llllll llllll

 

 C
 b&vg1bh!7!7!&!@27!JJKKKKKKKrZ   c                 N   | j          }|j        | j         j         k    sJ |j        | j         j        k    sJ | j           }|j        | j         j        k    sJ |j        | j         j        k    sJ | j         
 }|j        | j         j        k    sJ |j        | j         j        k    sJ d S N)r@   r7   r   r   s     r   
test_unaryz!TestQuantityOperations.test_unary  s     x!dgm^3333 DGL0000'{!TW]2222 DGL0000 x!TW]2222 DGL000000rZ   c                 D   dt           j        z  t           j        z  }t          |          }|j        |j        k    sJ |j        |j        k    sJ dt           j        z  t           j        z  }t          |          }|j        |j         k    sJ |j        |j        k    sJ d S )NrF   r   )r   r%   rI   absr7   r   )r   r:   r   s      r   test_abszTestQuantityOperations.test_abs  s    !#IO1vv!QW,,,, AF****13J1vv!agX---- AF******rZ   c                     t          j        dt           j                  }t          j        dt           j                  }t	          j        t           j                  5  ||z    ddd           dS # 1 swxY w Y   dS )zKWhen trying to add or subtract units that aren't compatible, throw an errorr   r   r    N)r   r   r   r   r   r   r   )r   r@   rR   s      r   test_incompatible_unitsz.TestQuantityOperations.test_incompatible_units  s     ZQW---ZAH---]1<(( 	 	GG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A22A69A6c                 <   t          j        dt           j                  }t          j        t
          d          5  |ddiz    d d d            n# 1 swxY w Y   t          j        t
                    5  |t           j        z    d d d            d S # 1 swxY w Y   d S )Nr   r   z*Unsupported operand type\(s\) for ufunc .*r   rk   r"   )r   r   r   r   r   r   r?   s     r   test_non_number_typez+TestQuantityOperations.test_non_number_type  s   ZQW---]J
 
 
 	 	 #qMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]9%% 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAA4BBBc                    dt           j        z  t           j        z  }|dt           j        z  t           j        z  z   }|j        dk    sJ |j        |j        k    sJ |dz   }|j        dk    sJ |j        t           j        k    sJ t          j        t           j	                  5  | j
        t          j        dt          j        d                    z    d d d            n# 1 swxY w Y   t          j        t           j	                  5  | j
        t          j        dt          j        d                    z
   d d d            n# 1 swxY w Y   t          j        t          j        g d          t           j        t           j        z  t          	          }|t          j        g d
          z   }|j        t           j        k    sJ t!          |j        t          j        g d                     t          j        t"                    5  |t          j        g d          z  }d d d            n# 1 swxY w Y   t          j        g d          t           j        z  t           j        z  }|t          j        g d
          z  }|j        t           j        k    sJ t          j        |j        t          j        g d          k              sJ d S )Nr   rF   g5^I@g?5^I?皙?r3   r   r"   r   r   rH   )   r      )g/$@g5^I@gPn@)i  i  i  )r   r%   r{   r   r7   r   dimensionless_unscaledr   r   r   r@   r   r#   r5   rL   rJ   r   r   r   )r   dqdq1dq2r:   rR   s         r   test_dimensionless_operationsz4TestQuantityOperations.test_dimensionless_operations  s    13Y3:$$yE!!!!x27""""3hyE!!!!x133333 ]1<(( 	7 	7Gaj16"::66666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 ]1<(( 	7 	7Gaj16"::66666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 Jrx			**AC!$JcBBB)))$$$w!22222"(+@+@+@"A"ABBB]9%% 	% 	%)))$$$A	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% HYYY!$&,	RXiii   v11111vag*<*<*<!=!==>>>>>>>s6   "1CC#&C#1EE	E		H//H36H3c                 .   ddl m} t          j        dt          j                  }t          j        dt          j                  }||z                      |j        t          j        z            }t          |j
        dd           t          j        dt          j        d	z  t          j        z  t          j        d
z  z            }ddt          j        z  |z  z                      t          j        dz  t          j        dz  z  t          j        z            }t          j        dt          j                  }t          j        dt          j                  }||z  }	t          |	j
        dd           |	j        t          j        t          j        z  k    sJ dS )zPerform a more complicated testr   )imperialr   g      &@gb(g@r   r   gyдW=r   r   rF         @      @g     @S@   N)astropy.unitsr   r   r   r   r   tomilehourr   r7   r%   kgrI   r5   pipcr   r   r!   )
r   r   distancetimevelocityGr&   side1side2areas
             r   test_complicated_operationz1TestQuantityOperations.test_complicated_operation9  s>   ****** :dAG,,z$))tO''(>??!(.'1EEEEJy!#q&14-!#q&"899C"%K!O$((rACG);ad)BCC 
4..
3--u}!$*dB????yAD14K''''''rZ   c                    dt           j        t           j        z  z  dt           j        dz  z  k    sJ dt           j        z  dt           j        z  k    sJ dt           j        z  dt           j        z  k    sJ t           j        dz  }d|z  }|                    |          t          u sJ |                    |          du sJ ||k    sJ dt           j        dz  z  }||k    sJ dt           j        z  dk    rJ dt           j        z  dk    sJ dt           j        z  dt           j        z  fD ]D}t          j        t          d	          5  t          |           d d d            n# 1 swxY w Y   Ed S )
Nr"   r   d   r   rF   Tr   	ambiguousr   )r   r!   r%   __eq__NotImplementedr   r   r   r   r+   bool)r   r   r:   r   s       r   test_comparisonz&TestQuantityOperations.test_comparisonN  s   QTAD[!a!$(l222213w#*$$$$13w!ad("""" tQw$Jxx~~////{{1~~%%%%DyyyyQT1WDyyyy :$$$$QTzS    qtS1+C%CD 	 	Hz===  X              	 	s   	E%%E)	,E)	c                    t          j        dt           j                  }d}d}t          j        t
                    5 }t          |           d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        t
                    5 }t          |           d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        t
                    5 }|
                                 d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        dt           j        t           j        z            }t          |          t          |                    t           j                            k    sJ t          |          t          |                    t           j                            k    sJ t          j        t
                    5 }|
                                 d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        dt           j                  }t          |          dk    sJ t          |          dk    sJ t          j        t
                    5 }|
                                 d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        dt           j        t                    }t          |          dk    sJ t          |          dk    sJ |
                                dk    sJ t          j        ddgt           j                  }t          j        t
                    5 }t          |           d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        t
                    5 }t          |           d d d            n# 1 swxY w Y   |j        j        d         |k    sJ t          j        t
                    5 }|
                                 d d d            n# 1 swxY w Y   |j        j        d         |k    sJ d S )	Nr"   zGonly dimensionless scalar quantities can be converted to Python scalarszOonly integer dimensionless scalar quantities can be converted to a Python indexr   Gz?r   rH   rG   )r   r   r%   r   r   r   rK   r7   argsrJ   	__index__r{   r   r   )	r   r@   converter_err_msgindex_err_msgexcrR   r'   rW   rX   s	            r   test_numeric_convertersz.TestQuantityOperations.test_numeric_convertersf  s    Z13 V 	1 	 ]9%% 	"III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a $55555]9%% 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a $55555 ]9%% 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a M1111 ZacADj))RyyE"++a.F"G"GHHHHHH2ww#bkk!*BCCDDDDDD]9%% 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a M1111 Za677RyyD    2ww!||||]9%% 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a M1111 Z133???RyyC2ww!||||||~~"""" ZA$$]9%% 	"III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a $55555]9%% 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a $55555]9%% 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y~a M111111s   AA AB11B58B5-DDD4HHHJ;;J?J?NN"%N"O66O:=O:2QQQz/list multiplication only works for numpy <=1.10)reasonc                 p    t          j        dt           j        t                    }|g dz  g dk    sJ dS )z*Test that use of __index__ actually works.r   rH   )rk   bc)rk   r  r  rk   r  r  N)r   r   r   rJ   )r   rW   s     r   +test_numeric_converter_to_index_in_practicezBTestQuantityOperations.test_numeric_converter_to_index_in_practice  sD     Z133???OOO#'E'E'EEEEEEErZ   c                    t          j        dt           j                  }t          j        t          j        |          t          j        dg          k              sJ t          j        g dt           j                  }t          j        t          j        |          t          j        g d          k              sJ d S )Nr  rF   rG   r   )r   r   r%   r5   r   rL   r9   s     r   test_array_convertersz,TestQuantityOperations.test_array_converters  s    JtQS!!vbhqkkRXtf%5%5566666 J,,vbhqkkRXooo%>%>>???????rZ   N)rr   rs   rt   r   r   r   r@   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   markxfailr  r  ru   rZ   r   r   r   ]  sp       	E17	#	#B	C	&	&B& & &	1 	1 	12 2 2>#2 #2 #2J= = =2 2 2L L L.1 1 1"	+ 	+ 	+    ? ? ?B( ( (*  0H2 H2 H2X [OPPF F QPF
@ @ @ @ @rZ   r   c                  `   t          j        dt           j                  } | j        }|dk    sJ |                     t           j                  }|dk    sJ |                     t           j                  }|j        dk    sJ 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            d S # 1 swxY w Y   d S )Nr   r   g-C6?)r   r   r   r7   r   	kilometerr   r   r   r   zettastokes)r@   r7   value_in_kmr   s       r   test_quantity_conversionr%    s|   	
Cag	&	&	&BHEC<<<<++ak**K&    55%%L''''	q|	$	$  
am              	q|	$	$ # #
AM"""# # # # # # # # # # # # # # # # # #s$   ! CCC6 D##D'*D'c                     t          j        d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
        | dt           j        z            sJ d S )Nr   r   )r   r   oner   r   UnitConversionErrorradadd_enabled_equivalenciesdimensionless_anglesr5   iscloser:   s    r   test_quantity_ilshiftr.    s/   	
2AE"""A 
q,	-	-  	ae               
	$Q%;%=%=	>	>  	ae               :aae$$$$$$$s#   AA"AB''B+.B+c                      t          j        dt           j        t                    } | t           j        z  } | j        t           j        u sJ | j        t          j        k    sJ d S )Nr   rH   )	r   r   r{   rJ   r   r   rE   r5   rb   )xs    r   test_regression_12964r1    sU     	

2qt3'''A!$JA 6QT>>>>7bj      rZ   c                     t          j        ddgt           j                  } | j        }d|d<   t	          j        | ddgt           j        z  k              sJ |                                 }d|d<   t	          j        | ddgt           j        z  k              sJ |                     d          }d|d<   t	          j        | ddgt           j        z  k              sJ |                     dd	
          }dt           j        z  |d<   t	          j        | ddgt           j        z  k              sJ |                     d          }d|d<   t	          j        | ddgt           j        z  k              sJ d S )NrF   rG   r   r   r   r   r"   r%   Frh   r   r!   )r   r   r   r7   r5   r   r   r   )r@   v1v2v3rR   v4s         r   test_quantity_value_viewsr7    s^   	
S#JQW	-	-	-B	BBqE6"c
QW,,-----	BBqE6"c
QW,,-----	S		BBqE6"c
QW,,-----	s		BKBqE6"c
QW,,-----	T		BBqE6"c
QW,,-------rZ   c                     t          j        dt           j                  } |                     t           j        t          j                              }t          |d           |                     t           j        t          j                              }t          |j        |           t          j        dt           j	                  } |                     t           j
        t          j                              }|                     t           j
        t          j                              }|                    t           j        t          j                              }|                    t           j        t          j                              }t          |d           t          |j        |           |j        t           j
        k    sJ t          |d           t          |j        |           |j        t           j        k    sJ d S )Nr   r   )equivalenciesg  \VAg?g(\8yAgK2N{?)r   r   r   r   Hzspectralr   r   r7   	arcsecondauparallax	arcminuter   )r@   r4  rR   r5  r'   s        r   #test_quantity_conversion_with_equivr@     sn   	
Cag	&	&	&B	QT	6	6BB%%%	qt1:<<	0	0BBHb!!!	
Cak	*	*	*B	QT	6	6B	qt1:<<	0	0B	Q[
	=	=B	q{!*,,	7	7BB
###BHb!!!7ad????B%%%BHb!!!7ak!!!!!!rZ   c                      G fddt           j                   ddgt           j                  } |                     t           j                  }|j        t           j        k    sJ |                    t           j                  }|j        t           j        k    sJ t          |j        | j                    ddgt           j                  }|                    t           j                                      t           j                  }|j        t           j        k    sJ t          |j        |j                   d S )Nc                   B    e Zd Z ej                    Z fdZ fdZdS )Btest_quantity_conversion_equivalency_passed_on.<locals>.MySpectralc                 .    |                               S r   )r   )r   objr   
MySpectrals      r   __quantity_view__zTtest_quantity_conversion_equivalency_passed_on.<locals>.MySpectral.__quantity_view__  s    88J'''rZ   c                      |i |S r   ru   )r   r  kwargsrF  s      r   __quantity_instance__zXtest_quantity_conversion_equivalency_passed_on.<locals>.MySpectral.__quantity_instance__  s    :t.v...rZ   N)rr   rs   rt   r   r;  _equivalenciesrG  rJ  )rF  s   r   rF  rC    sT        #	( 	( 	( 	( 	(	/ 	/ 	/ 	/ 	/ 	/ 	/rZ   rF      r   )r   r   r:  r   nmr   r   r7   )r@   rR   r'   rW   rX   rF  s        @r   .test_quantity_conversion_equivalency_passed_onrO    s   / / / / / / /QZ / / / 
T4Lqt	,	,	,B	qtB7ad????	qtB7ad????BHbh'''	T4Lqt	,	,	,B	qt		B7ad????BHbh'''''rZ   c                      t           j                            dt           j        z            sJ t           j                            dt           j        z            sJ d S )Nr   r"   )r   degis_equivalentradianru   rZ   r   test_self_equivalencyrT  .  sL    5q18|,,,,,5q18|,,,,,,,rZ   c                     dt           j        z  t           j        dz  z  dt           j        z  dz  z  } | j        j        dk    sJ | j        j        t           j        k    sJ dt           j        z  }|j        j        dk    sJ |j        j        t           j        k    sJ dt           j        z  }|j        j        dk    sJ |j        j        dt           j        z  k    sJ d S )Nrf   r         i@   r   r"   )r   r%   rI   mssir7   r   r@   r:   s     r   test_sir[  3  s    	ac1f	2	2B5;#5:qs
A4:49qs
A4:49QS!!!!!!rZ   c                  :   dt           j        z  t           j        dz  z  dt           j        z  dz  z  } | j        j        dk    sJ | j        j        t           j        k    sJ dt           j        z  }|j        j        dk    sJ |j        j        t           j        k    sJ dt           j        z  }|j        j        dk    sJ |j        j        dt           j        z  k    sJ dt           j        z  }|j        j        dk    sJ |j        j        t           j	        k    sJ d S )	Nrf   r   rV  rW  rL  r   r"   r	  )
r   r!   rI   rX  cgsr7   r   r%   PabaryerZ  s     r   test_cgsr`  A  s   	qsAv	! 3	3B6<36;!$qs
A5;$5:qtA5;"5:!ad(####qtA5;#5:      rZ   c                        e Zd Zd Zd Zd ZdS )TestQuantityComparisonc                    t          j        dd          t          j        dd          k    sJ t          j        dd          t          j        dd          k    rJ t          j        dt           j                  t          j        dt           j                  k    du sJ t          j        dt           j                  t          j        dt           j                  k    du sJ t          j        d	t           j                  t          j        d	t           j                  k    du sJ t          j        d	t           j                  d
k    sJ t          j        dt           j                  d
k    sJ t          j        dt           j                  t          j        k    sJ t          j        t          j        t           j                  t          j        k    sJ d S )NrL  r%   r   r"   r{   L  TFr   r   )r   r   r%   rI   r5   r1   r,   s    r   test_quantity_equalityz-TestQuantityComparison.test_quantity_equalityT  s   z$S)))QZ-E-E-EEEEEJqs+++qz!$/G/G/GGGGG
4ac***aj.E.E.EE$NNNN
4ac***aj.E.E.EE%OOOO
113'''1:aac+B+B+BBuLLLLz!QS!!S((((z!QS!!S((((z!QS!!RV++++z"&!#&&"&000000rZ   c                    t          j        g dt           j                  }t          j        dt           j                  }||k    }||k    }t	          j        |g dk              sJ t	          j        ||k              sJ t          j        dt           j                  }||k    }||k    }|du sJ |du sJ |dk    }|dk    }|du sJ |du sJ |dk    }|dk    }t	          j        |g dk              sJ t	          j        ||k              sJ t	          j        g d          }||k    }||k    }|du sJ |du sJ d S )	N)r   rF   r   rF   )FFTFTr   )TFF)r   rF   r   )r   r   r%   r{   r5   r   rI   rL   )r   rk   r  eqner  ds          r   test_quantity_equality_arrayz3TestQuantityComparison.test_quantity_equality_arraya  s|   J)))13//JsAD!!!V!Vvb000011111vbBhJsAC  !V!VU{{{{Tzzzz#X#XU{{{{Tzzzz!V!Vvb000011111vbBhH%%%&&!V!VU{{{{TzzzzzzrZ   c                    t          j        dt           j                  t          j        dt           j                  k    sJ t          j        dt           j                  t          j        dt           j                  k     sJ t	          j        t           j                  5  t          j        dt           j                  t          j        dt           j                  k    sJ 	 d d d            n# 1 swxY w Y   t	          j        t           j                  5  t          j        dt           j                  t          j        dt           j                  k     sJ 	 d d d            n# 1 swxY w Y   t          j        dt           j                  t          j        dt           j                  k    sJ t          j        dt           j                  t          j        dt           j                  k    sJ t          j        dt           j                  t          j        dt           j                  k    sJ t          j        dt           j                  t          j        dt           j                  k    sJ t	          j        t           j                  5  t          j        dt           j                  t          j        dt           j                  k    sJ 	 d d d            n# 1 swxY w Y   t	          j        t           j                  5  t          j        dt           j                  t          j        dt           j                  k    sJ 	 d d d            n# 1 swxY w Y   t          j        dt           j                  t          j        dt           j                  k    sJ d S )Nrd  r   r"   i  rL  i  )r   r   r   r"  r   r   r   r   r,   s    r   test_quantity_comparisonz/TestQuantityComparison.test_quantity_comparison  s-   z$QW---
11;0O0O0OOOOOz#AG,,,qz!!+/N/N/NNNNN]1<(( 	Q 	Q:d111AJqqx4P4P4PPPPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q ]1<(( 	Q 	Q:d111AJqqx4P4P4PPPPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q z$QW---AAK1P1P1PPPPPz$QW---AAK1P1P1PPPPPz#AG,,,
11;0O0O0OOOOOz$QW---AAK1P1P1PPPPP]1<(( 	R 	R:d111QZ5Q5Q5QQQQQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R ]1<(( 	R 	R:d111QZ5Q5Q5QQQQQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R z$QW---AAK1P1P1PPPPPPPsL   'AC99C= C="AE44E8;E8-AK??LL(AM::M>M>N)rr   rs   rt   re  rj  rl  ru   rZ   r   rb  rb  S  sF        1 1 1  <Q Q Q Q QrZ   rb  c                   "   e Zd Z ej        dde          Z ej        dd          Z ej        g dd          Z ej         e	dd                    Z
 ej         e	dd	          d
z            Z ej         e	dd          dz            Z ej         ej        d           e	dd          dz  z            Z ej         ej        d           e	dd          dz  z            Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestQuantityDisplayr"   r%   rD   g?r   )r"   gffffff@g!@rF   rG   gqٙEg(,* Er   gqٙg yhGr   }   c                    t          j        dd          }t          j        ddt                    }t          | j        |z            dk    sJ t          | j        |z            dk    sJ t          | j        |z            dk    sJ d S )	NrF   m-1r   r"   rD   z<Quantity 1.>z<Quantity [1. , 2.3, 8.9]>z<Quantity 1>)r   r   rJ   repr
scalarintqarrqr   rR   r'   s      r    test_dimensionless_quantity_reprz4TestQuantityDisplay.test_dimensionless_quantity_repr  s    Z%(((ZS111DOb())_<<<<DIN##'CCCCCDOb())^;;;;;;rZ   c                    t          j        dd          }t          j        ddt                    }t          | j        |z            dk    sJ t          | j        |z            dk    sJ t          | j        |z            dk    sJ d S )	NrF   rq  r   r"   rD   z1.01z[1.  2.3 8.9])r   r   rJ   strrs  rt  ru  s      r   test_dimensionless_quantity_strz3TestQuantityDisplay.test_dimensionless_quantity_str  s    Z%(((ZS1114?R'((E11114?R'((C////49r>""o555555rZ   c                 n    t          j        d          }t          |d          dk    sJ |ddk    sJ d S )NgQ	@z.2fz3.14cds)r   r   formatr?   s     r   "test_dimensionless_quantity_formatz6TestQuantityDisplay.test_dimensionless_quantity_format  sG    Zb%  F****{{f$$$$$$rZ   c                 n    t          | j                  dk    sJ t          | j                  dk    sJ d S )N1 m1.3 m)ry  rs  scalarfloatqr,   s    r   test_scalar_quantity_strz,TestQuantityDisplay.test_scalar_quantity_str  s?    4?##u,,,,4$%%000000rZ   c                 n    t          | j                  dk    sJ t          | j                  dk    sJ d S )Nz<Quantity 1 m>z<Quantity 1.3 m>)rr  rs  r  r,   s    r   test_scalar_quantity_reprz-TestQuantityDisplay.test_scalar_quantity_repr  sA    DO$$(88888D%&&*<<<<<<<rZ   c                 :    t          | j                  dk    sJ d S )Nz[1.  2.3 8.9] m)ry  rt  r,   s    r   test_array_quantity_strz+TestQuantityDisplay.test_array_quantity_str  s"    49~~!2222222rZ   c                 :    t          | j                  dk    sJ d S )Nz<Quantity [1. , 2.3, 8.9] m>)rr  rt  r,   s    r   test_array_quantity_reprz,TestQuantityDisplay.test_array_quantity_repr  s"    DI"@@@@@@@rZ   c                     t          | j        d          dk    sJ t          | j        d          dk    sJ t          | j        d          dk    sJ | j        ddk    sJ | j        ddk    sJ d S )N02dz01 mz.1fr  z.0fr  r|  )r}  rs  r  r,   s    r   test_scalar_quantity_formatz/TestQuantityDisplay.test_scalar_quantity_format  s    dou--7777d'//7::::d'//58888/''50000#))W444444rZ   c                    t          j        d                              t          j                  }t          |                              t                    sJ t          |                              t          dz             sJ d S )Nrf   >)	r5   ri   r   r   r   ry  endswithr   rr  )r   bad_quantitys     r   test_uninitialized_unit_formatz2TestQuantityDisplay.test_uninitialized_unit_format  sp    y++AJ77<  ))*?@@@@@L!!**+@3+FGGGGGGGrZ   c                 ^   t          j        dd          }t          |          |                                k    sJ d}d|                    t           j        t           j        z             |k    sJ d}d|                    dt           j        t           j        z             |k    sJ d	}|                    d
          |k    sJ |                    d
d          |k    sJ d}|                    d
d          |k    sJ d}|                    d          |k    sJ |                    dd          |k    sJ d}|                    dd          |k    sJ d}t          j        d                              t           j                                                  |k    sJ d S )N  Br   z&Quantity as KMS: 150000000000.0 km / szQuantity as KMS: r   z!Quantity as KMS: 1.500e+11 km / sr   )	precisionr   ,$1.5 \times 10^{14} \; \mathrm{\frac{m}{s}}$latex)r}  inline)r}  subfmtz:$\displaystyle 1.5 \times 10^{14} \; \mathrm{\frac{m}{s}}$displayz*$1.5 \times 10^{14} \; \mathrm{m\,s^{-1}}$latex_inlinez8$\displaystyle 1.5 \times 10^{14} \; \mathrm{m\,s^{-1}}$z[0 1 2] (Unit not initialised))	r   r   ry  	to_stringr{   rI   r5   ri   r   )r   qscalarress      r   test_to_stringz"TestQuantityDisplay.test_to_string  s   *VU++ 7||w002222226G7#4#4!$*#4#E#EGG3NNNN 2Q 1 1AAD13J 1 O OQQUXXXXX >   00C7777   AASHHHHK  	 BBcIIII;   773>>>>  x HHCOOOOI  y IISPPPP.y||  ,,6688C??????rZ   c                 L   ddl m} t          j        dd          }| j                                        dk    sJ | j                                        dk    sJ |                                dk    sJ | j                                        dk    sJ | j                                        d	k    sJ | j	                                        d
k    sJ | j
                                        dk    sJ | j                                        dk    sJ d| j                                        v sJ t          j        d          t          j        z  }t          j        d          t          j        z  }t          j        d          dz  t          j        z  }t          j                    }|j        }	 t          j        dd          }t          j        g d          t          j        z  }	t          j        d           |                                dk    sJ |	                                dk    sJ t          j        d           |                                dk    sJ |	                                dk    sJ d|_        |                                }
d|
vsJ |                                }d|v sJ |                                }d|v sJ d|_        |                                }
d|
vsJ |                                }d|vsJ |                                }d|v sJ d|_        t          j        d           |                                }
d|
v sJ |                                }d|v sJ |                                }d|v sJ |                    d          sJ 	 t          j        d!i | ||_        n# t          j        d!i | ||_        w xY wt          j        t          j         t          j        gt          j        z  }|                                d k    sJ d S )"Nr   )confr  r   z$1 \; \mathrm{m}$z$1.3 \; \mathrm{m}$r  z$[1,~2.3,~8.9] \; \mathrm{m}$z$(1+2i) \; \mathrm{}$z3$(1 \times 10^{25}+2 \times 10^{52}i) \; \mathrm{}$z4$(-1 \times 10^{36}-2 \times 10^{63}i) \; \mathrm{}$ze$[(0-0i),~(-1 \times 10^{36}-2 \times 10^{63}i),~(-2 \times 10^{36}-4 \times 10^{63}i)] \; \mathrm{}$z\dotsr	  rL  i'  g    eAgo͏X4oA)g8ܘ@g[W4oAr   r   )r  z1$9.8765432 \times 10^{8} \; \mathrm{\frac{m}{s}}$z6$[7.89123,~1.2345679 \times 10^{8},~0] \; \mathrm{cm}$r   z+$9.9 \times 10^{8} \; \mathrm{\frac{m}{s}}$z,$[7.9,~1.2 \times 10^{8},~0] \; \mathrm{cm}$i  c   )	thresholdz",~1 \times 10^{13}] \; \mathrm{m}$z,$[\infty,~-\infty,~{\rm NaN}] \; \mathrm{m}$ru   )astropy.units.quantityr  r   r   rs  _repr_latex_r  rt  scalar_complex_qscalar_big_complex_qscalar_big_neg_complex_qarr_complex_qbig_arr_complex_qr5   ri   r%   get_printoptionslatex_array_thresholdrL   r!   set_printoptionsr  r1   r/   )r   r  q2scalarqmedqbigqvbigpopsoldlatr:   qalsmedlsbiglsvbigqinfnans                 r   test_repr_latexz#TestQuantityDisplay.test_repr_latex  s   //////:fe,,++--1EEEEE --//3IIIII!!##'VVVVVy%%''+KKKKK $11337OOOOO%2244EF F F F )6688FG G G G !..00E
 
 
 
 41>>@@@@@@y~~#y$	%  3&,"$$+-	0
.66A;;;<<qtCB!,,,,  $XXXXX !!LM M M M !,,,,>>##'UUUUU??$$(WWWWW *-D&%%''E5((((%%''Eu$$$$''))Fv%%%%)-D&%%''E5((((%%''E5((((''))Fv%%%%)+D&"----%%''Eu$$$$%%''Eu$$$$''))Fv%%%%??#JKKKKKK ''$''')/D&& ''$''')/D&////6BF7BF+ac1##%%)XXXXXXXs   -G5N< <ON)rr   rs   rt   r   r   rJ   rs  r  rt  complexr  r  r  r5   ri   r  r  rv  rz  r~  r  r  r  r  r  r  r  r  ru   rZ   r   rn  rn    s       ACs333J1:c,,,L1:mmm#...D!qz''#s"3"344%1:ggc6&:&:T&ABB)qz''$*@*@4*GHHAJyry||wwtW/E/E/LMNNM"
929S>>WWT75K5Kd5R#STT< < <6 6 6% % %
1 1 1= = =3 3 3A A A5 5 5H H H
@ @ @<QY QY QY QY QYrZ   rn  c                      dt           j        z  } |                                 dt           j        z  t           j        z  t           j        dz  z  k    sJ d S )Nr   r   )r   N	decomposer   r%   rI   r@   s    r   test_decomposer  B  sC    	
QSB<<>>a!$hnqsBw6777777rZ   c                     t          j        g d          t          j        z  dt          j        z  z  } t          j        |                                 j        t          j        g d          k              sJ t          j        | t          j        g d          t          j        z  dt          j        z  z  k              sJ t          j        |                                 j        t          j        g d          k              sJ dS )a  
    Regression test for bug #1163

    If decompose was called multiple times on a Quantity with an array and a
    scale != 1, the result changed every time. This is because the value was
    being referenced not copied, then modified, which changed the original
    value.
    r   rG   )gMb@?gMbP?g~jtX?N)r5   rL   r   r%   r{   r   r  r7   r-  s    r   test_decompose_regressionr  G  s     	ac!S14Z0A6!++--%2I2I2I)J)JJKKKKK6!rx			**QS0C!$J??@@@@@6!++--%2I2I2I)J)JJKKKKKKKrZ   c                  b   t          j        t          j        d          t           j                  } t          | j        t          j                  sJ | j        rJ t          |           t          | j                  k    sJ | dd         }|j
        | j
        k    sJ t          |t           j                  sJ t          |          dk    sJ t          j        dt           j                  }|j        sJ t          j        t                    5  t          |           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          j        d          t           j        t                    }|j        sJ t          j        t                    5  t          |           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           j                  sJ t          j        g d	d
t$          fdt$          fdt$          fg          }t          j        |t           j                  }|j        rJ |d         }|j        |d         k    sJ |j
        |j
        k    sJ t          |t           j                  sJ |j        sJ |d
         }t          j        |j        |d
         k              sJ |j
        |j
        k    sJ t          |t           j                  sJ |j        rJ |d
         d         }|j
        |j
        k    sJ t          |t           j                  sJ |j        sJ |d         d
         }	|	j        sJ |	|k    sJ t          j        t+          t-          d                    t           j                  } t          | j        t          j                  sJ t/          | dz  j        t          j        d          dz             t/          | dz  j        t          j        d          dz             t          j        t           j                  5  t/          | dz   j        t          j        d          dz              ddd           n# 1 swxY w Y   t          j        t           j                  5  t/          | dz
  j        t          j        d          dz              ddd           n# 1 swxY w Y   t          j        d          t           j        z  }
t           j        t          j        d          z  }t          j        | |
k              sJ t          j        |
|k              sJ t          j        t                    5  t%          |            ddd           n# 1 swxY w Y   t          j        t                    5  t          |            ddd           dS # 1 swxY w Y   dS )z0
    Test using quantites with array values
    r   r   r   r   rf   Nr   rH   )r  r   r   g      @)r   r   g      "@r0  yzr"   )r   r   r5   ri   r   r   r7   r   isscalarr   r   r   r   r   rL   rJ   numbersIntegralrK   kpcr   listranger   r   )qsec	qsecsub25qsecnotarrayqseclen0arrayrk   qkpcqkpc0qkpcxqkpcx1qkpc1xqsec2qsec3s               r   test_arraysr  V  s   
 :bimmQX..Ddj"*-----} t99DJ''''QqS	I>TY&&&&i,,,,,y>>Q :dAH--L    	y	!	!  L              	y	!	!  Q               Jrx||QXSAAAM!!!!	y	!	!  M              	y	!	!  a              m)7+;<<<<<
;;;U|c5\C<8	 	 	A :aD}GE;!A$:""""eQZ(((((>IE6%+3'(((((:""""eQZ(((((~#Yq\F;$)####faj)))))?!WS\F?V :d599ooqx00Ddj"*----- q'")B--!*;===q'")B--!*;=== 
q|	$	$ B BD1H+bimma.?AAAB B B B B B B B B B B B B B B	q|	$	$ B BD1H+bimma.?AAAB B B B B B B B B B B B B B B IbMMAH$EHry}}$E6$%-     6%5.!!!!! 
y	!	!  d              	y	!	!  D			                 s   D--D14D1	E&&E*-E*G''G+.G+	H  H$'H$.S

SS3.T--T14T1W##W'*W'X$$X(+X(c                     t          j        g d          t          j        z  } | d         dt          j        z  k    sJ t          j        | dd         t          j        ddgt          j                  k              sJ d S )Nr  r   rF   r   rG   )r5   rL   r   r%   r   r   r-  s    r   test_array_indexing_slicingr    sr    
!!AC'AQ4396!AaC&AJSz137778888888rZ   c                     t          j        g d          t          j        z  } t          j        dg          t          j        z  | dd<   t          j        | t          j        g d          t          j        z  k              sJ d S )Nr  g      y@r"   r   )rF   r   r   )r5   rL   r   r%   r!   r   r-  s    r   test_array_setslicer    sr    
!!AC'AXug%AacF6!rx0013667777777rZ   c                     t          j        dt           j        t           j        z            } | dz  }d| z  }| t	          j        d          z  }|j        dk    sJ |j        t           j        t           j        z  k    sJ |j        dk    sJ |j        t           j        t           j        z  k    sJ |j        dk    sJ |j        t           j        t           j        z  k    sJ dS )z)
    Regression test from issue #679
    r   r   rG         ?N)r   r   r   r   r5   rL   r7   r   )r:   qottoqnpqots       r   test_inverse_quantityr    s     	

3!(*++A
a%C
a%COE;#:!'AH,----98!(*++++9817*++++++rZ   c                  n   t          j        dt           j        t           j        z  t           j        z            } t	          j        t                    5  d| _        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 )Ng#@r   )
r   r   r   r   r   r   r>   r7   r   r   r-  s    r   test_quantity_mutabilityr    s   	
3!(*QX566A	~	&	&                 
~	&	&                   s$   A''A+.A+B**B.1B.c                     t          j        dt           j                  } t          j        | t           j                  }|j        dk    sJ t          j        | |gt           j                  }|d         j        dk    sJ |d         j        dk    sJ t          j        || g          }|j        |j        k    sJ |d         j        dk    sJ |d         j        dk    sJ d S )N<   r"   r   )r   r   r   minuter7   r   r@   rR   r'   rW   s       r   'test_quantity_initialized_with_quantityr    s    	
B	!	!B	
B	!	!B8q====	
RHah	'	'Ba5;"a5;"	
RH		B7bga5;!a5;!rZ   c                      dt           j        z  dz  } | j        dk    sJ | j        t           j        t           j        z  k    sJ | dz  }|j        t           j        t           j        z  t           j        z  k    sJ d S )NrF   rI   r"   r%   )r   r%   r7   r   rI   r@   rR   s     r   test_quantity_string_unitr    sl    	qsSB8q====7qsQSy!!!!	cB7ac	QS())))))rZ   c                      t          j        t                    5  dt          j        z   d d d            d S # 1 swxY w Y   d S )Nfoor   r   r+   r   r%   ru   rZ   r   !test_quantity_invalid_unit_stringr    s    	z	"	"                   s   7;;c                      t          j        dt           j                  } d| _        t	          | j        d           t	          | j        d           t	          | j        d           d S )NrF   Tr	  gm̋<)r   r   r    _include_easy_conversion_membersr   r   r!   parsecr-  s    r   test_implicit_conversionr    sZ    	
3  A)-A&AL#&&&AD#AH344444rZ   c                  D   t          j        dt           j                  } d| _        d| _        t          |           }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d	|v sJ d
|v sJ t          j        t                    5  | j	         d d d            d S # 1 swxY w Y   d S )NrF   T*   r   r!   r  r  r   r7   __setattr__)
r   r   r   r  r  dirr   r   r>   l)r:   attrss     r   %test_implicit_conversion_autocompleter    s   	
3  A)-A&AEFFE5    5====uE>>>>5====eE!!!!	~	&	&  	                 s    BBBc                     ddgt           j        z  } t          |           sJ t          t	          |                     }|dt           j        z  k    sJ t          |          rJ t          j        t          t          |           dS )zRegressiont est for issue #878.

    Scalar quantities should not be iterable and should raise a type error on
    iteration.
    r   g      1@N)r   r%   r	   nextiterr   r   r   r  s     r   test_quantity_iterabilityr    sz     	Bb>>	d2hhB"~~
M)T2&&&&&rZ   c                  B   t          j        t          j        g dg dg          t           j                  } |                                 }t          j        | j        |j        k              sJ | j        |j        k    sJ | j	        |j	        k    sJ | j        |j        usJ |                     d          }|j
        d         sJ t          j        | j        |j        k              sJ | j        |j        k    sJ | j	        |j	        k    sJ | j        |j        usJ |                     d          }|j
        d         sJ t          j        | j        |j        k              sJ | j        |j        k    sJ | j	        |j	        k    sJ | j        |j        usJ d S )	Nr  r  r   r   r   r   r   r   )r   r   r5   rL   r%   rg   r   r7   r   rE   r   r  s       r   rm   rm     s   	
BHooo?@@qs	K	K	KB	B6"(bh&'''''7bg8rx828####	s		B8N####6"(bh&'''''7bg8rx828####	s		B8N####6"(bh&'''''7bg8rx828######rZ   c                  ~   t          j        t          j        g d          t           j                  } t          j        |           }t          |t           j                  sJ t          j        | j	        |j	        k              sJ | j
        |j
        k    sJ | j        |j        k    sJ | j	        |j	        usJ d S )Nr  r   )r   r   r5   rL   r%   rg   deepcopyr   r   r7   r   rE   r  s     r   test_deepcopyr  7  s    	
BH___--AC	8	8	8B	r		Bb!*%%%%%6"(bh&'''''7bg8rx828######rZ   c                      ddt           j        z  k    sJ t          j        d          dt           j        z  k    sJ dt           j        z  t          j        d          k    sJ dS )z
    A regression test to ensure that numpy scalars are correctly compared
    (which originally failed due to the lack of ``__array_priority__``).
    r   rf   N)r   r%   r5   int64ru   rZ   r   test_equality_numpy_scalarr  C  s_    
 8B<<28####8rx||######rZ   c                  B   t          j        d          t          j        z  } t	          j        t	          j        |                     }t          j        | j        |j        k              sJ | j	        
                    |j	                  sJ | j	        |j	        k    sJ dS )z+
    Testing pickleability of quantity
    r   N)r5   ri   r   r%   pickleloadsdumpsr   r7   r   rR  r  s     r   test_quantity_pickelabilityr
  M  s    
 
2	B	fl2&&	'	'B6"(bh&'''''7  )))))7bgrZ   c                  
   t          j        d          } | j        t           j        k    sJ | j        dk    sJ t          j        d          } | j        t           j        t           j        z  k    sJ | j        dk    sJ t          j        |           t          j        d          k    sJ t          j        d          } | t          j        dt           j                  k    sJ t          j        d          } | t          j        dt           j                  k    sJ t          j        d	          } | t          j        dt           j                  k    sJ t          j        d
          } | t          j        dt           j                  k    sJ t          j        d          } | t          j        dt           j                  k    sJ t          j        dt           j                  } | t          j        dt           j                  k    sJ t          j        dt           j                  } | j        dk    sJ | j        t           j        k    sJ t          j        d          } | t          j        dt           j	                  k    sJ t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        dg           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        t          j        dg                     d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nrx  rF   z1.5 m/s      ?z.5 mr  z-1e1kmiz-1e+1kmz+.5kmz+5e-1km5r   z5 kmg     @5Emr3   r%   z	1.2.3 degz1+degz1-2degz
1.2e-13.3m5Ez5 foo)r   r   r   r   r7   r%   rI   r#   r{   Emr   r   r   r5   rL   r+   r-  s    r   (test_quantity_initialisation_from_stringr  [  s   	
3A6Q-----7c>>>>	
9A6QS13Y7c>>>>6!99y))))))	
6A
3$$$$$$	
8A
3%%%%%%	
9A
3%%%%%%	
7A
3%%%%%%	
9A
3%%%%%%	
3A
3$$$$$$	
613A7f6QS====	
5A
3%%%%%%	y	!	!  	
2              	y	!	!  	
3              	y	!	!    	
;                             	y	!	!  	
7              	y	!	!  	
8              	y	!	! ! !	
<   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	y	!	!  	
C5              	y	!	! $ $	
28SE??###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	z	"	"  	
4              	z	"	"  	
7                 s    KKK%LL
L
*MMM/NNN4OOO9PP!P>Q  Q$'Q$(R88R<?R<S==TT!UU
U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   )r5   ri   r   r%   r   r   r   bitwise_andr  s    r   test_unsupportedr    s    	2	B	y	!	!  
r2                 s   AA"%A"c                  N    dt           j        z  } | j        t           j        u sJ d S )NrF   )r   r   r   r-  s    r   test_unit_identityr    s(    afA6QVrZ   c                      t          j        ddg          t          j        z  } |                     t          j                  }| j        d         dk    sJ |j        d         dk    sJ d S )NrL  rM  r   r"   )r5   rL   r   r%   r   r{   r7   r  s     r   test_quantity_to_viewr    sa    	4,		!#	%B	qtB8A;$8A;!rZ   c                      t          j        t                    5  dt          j        z  dz   d d d            d S # 1 swxY w Y   d S )Nr   )r"   r   r  ru   rZ   r   test_quantity_tuple_powerr    s    	z	"	"  	qsv                 s   :>>c                      dt           j        dz  z  t          dd          z  } | j        dk    sJ | j        t           j        k    sJ | j        j        dk    sJ d S )Ng      9@r   r"   r   f)r   r%   r   r7   r   rE   kindr-  s    r   test_quantity_fraction_powerr    s[    	Q8Aq>>)A7c>>>>6QS==== 7<3rZ   c                  D   ddl m}   | t          j        d          t          j        d          gddg          }t          j        |d         _        t	          j        |d                   }|j        t          j        k    sJ t          |j	        |d                    t	          j        |d                   }|j        t          j
        k    sJ t          |j	        |d                    t	          j        |d         t          j                  }|j        t          j        k    sJ t          |j	        |d         dz             t	          j        |d         t          j                  }|j        t          j        k    sJ t          |j	        |d                    t	          j        t          j        t          j        dz  z            |d         _        t	          j        |d                   }|j        t	          j        t          j        t          j        dz  z            k    sJ t          |j	        |d                    t	          j        |d         d	
          }t!          |t          j                  sJ |j        t	          j        t          j        t          j        dz  z            k    sJ t          |j	        |d                    t#          j        t          j                  5  t	          j        |d                    ddd           dS # 1 swxY w Y   dS )z
    Checks that units from tables are respected when converted to a Quantity.
    This also generically checks the use of *anything* with a `unit` attribute
    passed into Quantity
    r   )Tabler   rk   r  )datanamesrL  r   Trx   N)astropy.tabler   r5   ri   r   r  r   r   r   r7   r   r   dexr!   rI   Dexr   r   r   UnitTypeError)r   tr  qbqapqbpfqfq2s           r   test_quantity_from_tabler-    s    $#####BIaLL")A,,/SzBBBA%AcFK	
AcF		B7aerx3(((	
AcF		B7a.....rx3((( *QsVQT
"
"C8qtsy!C&4-000
*QsVQT
"
"C8qtsy!C&))) %qsAv&&AcFK	
qvB7aeAD136M******rx3(((
*QsV4
(
(
(Cc15!!!!!8quQTACF]++++++sy!C&)))	q	'	'  	
1S6                 s   -LLLc                  f   ddl m} m}  | t          j        d          t
          j                  }t          j        |          }|d d         |d d<    |            }t          j        d          t
          j        z  |d<   t          j        d          t
          j        z  |d<   t          |d                   | u sJ t          j
        |d         |d         g          j        t
          j        z  }g d	}||df         j        |d         |         j        k    sJ |d         |         ||df<   d S )
Nr   )Columnr   rf   r   r   r   r0  r  )r   r   r   )r#  r/  r   r5   ri   r   r   r   onesrz   vstackTr   )r/  r   r  r:   r'  xyiis          r   $test_assign_slice_with_quantity_liker5    s   ++++++++ 	ryQT***A	
1AbqbEAbqbEAYr]]QT!AcFWR[[14AcF#<<6!!!!	AcFAcF#	$	$	&	-B	Bb!e9>QsVBZ_,,,,#r
Br1uIIIrZ   c                     ddgt           j        z  } |                     ddt           j        z            }t	          j        |j        g dk              sJ |j        t           j        u sJ |j        j	        dk    sJ t          t          d          r[|                     dddgt           j        z            }t	          j        |j        g dk              sJ |j        t           j        u sJ t          j        t           j                  5  |                     ddt           j        z             d	d	d	           n# 1 swxY w Y   ddgd
dggt           j        z  } |                     dddgt           j        z  d          }t	          j        |j        ddgddgd
dggk              sJ |                     dddgt           j        z  d          }t	          j        |j        g dg dgk              sJ |                     ddt           j        z  d          }t	          j        |j        g dg dgk              sJ d	S )z
    Test Quantity.insert method.  This does not test the full capabilities
    of the underlying np.insert, but hits the key functionality for
    Quantity.
    r"   r   r   )rL  r"   r   r  z1.8.0)r"   rL  rM  r   r  Nr   r   r      )axis)r"   r   r   )r   r7  r   )r   r   r   )r   r%   insertr{   r5   r   r7   r   rE   r  r
   r   r   r   rI   )r:   rR   s     r   test_insertr:    s`    
AA 
!QX		B6"(lll*+++++7ac>>>>8=C"g XXa!Q!$''vbh"4"4"4455555w!#~~~~ 
q|	$	$  	C!#I               Q!Q13A	
!b"X^!	,	,B6"(1vBx!Q8899999	
!b"X^!	,	,B6"(zzz:::6677777	
!R!#XA	&	&B6"(zzz:::667777777s   $D;;D?D?c                      t          j        dt          j        z  dt          j        z  gt
                    } t          |           dk    sJ t          |           dk    sJ dS )z
    Test print/repr of object arrays of Quantity objects with different
    units.

    Regression test for the issue first reported in
    https://github.com/astropy/astropy/issues/3777
    r"   r   rH   z7array([<Quantity 1. m>, <Quantity 2. s>], dtype=object)z![<Quantity 1. m> <Quantity 2. s>]N)r5   rL   r   r%   rI   r$   rr  ry  )rk   s    r   test_repr_array_of_quantityr<    s_     	!ac'1qs7#6222A77OOOOOq668888888rZ   c                   &    e Zd Zd Zd Zd Zd ZdS )TestSpecificTypeQuantityc                      G d dt           j                  } G d d|          } G d d|          }|| _        || _        || _        d S )Nc                       e Zd Zej        ZdS )5TestSpecificTypeQuantity.setup_method.<locals>.LengthN)rr   rs   rt   r   r%   _equivalent_unitru   rZ   r   LengthrA  !  s         srZ   rC  c                       e Zd Zej        ZdS )6TestSpecificTypeQuantity.setup_method.<locals>.Length2N)rr   rs   rt   r   r%   _default_unitru   rZ   r   Length2rE  $  s        CMMMrZ   rG  c                       e Zd Zej        ZdS )6TestSpecificTypeQuantity.setup_method.<locals>.Length3N)rr   rs   rt   r   r%   _unitru   rZ   r   Length3rI  '  s        CEEErZ   rK  )r   SpecificTypeQuantityrC  rG  rK  )r   rC  rG  rK  s       r   setup_methodz%TestSpecificTypeQuantity.setup_method   s    	# 	# 	# 	# 	#Q+ 	# 	# 	#	  	  	  	  	 f 	  	  	 	 	 	 	 	f 	 	 	 rZ   c                    |                      t          j        d          t          j        z            }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                     d d d            n# 1 swxY w Y   | 
                    t          j        d                    }t          |          | j
        u sJ |j        | j
        j        u sJ t          j        t          j                  5  |                     t          j        d                     d d d            d S # 1 swxY w Y   d S )Nrf   r   )rC  r5   ri   r   r{   rz   r   r   r&  r   rG  rF  rK  )r   r  l2s      r   test_creationz&TestSpecificTypeQuantity.test_creation.  s#   KK	$!$.//Aww$+%%%%]1?++ 	2 	2KK	$!&0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 ]1?++ 	) 	)KK	$(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) \\")C..))Bxx4<''''4<#=====]1?++ 	* 	*LL4)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s6   +5B,,B03B0(D		DD(F;;F?F?c                    t          j        d          t          j        z                      | j                  }t          |          | j        u sJ t          j        t          j	                  5  t          j        d          t          j
        z                      | j                   d d d            n# 1 swxY w Y   t          j        d                              | j                  }t          |          | j        u sJ |j        J t          j        d                              | j                  }t          |          | j        u sJ |j        | j        j        u sJ d S )Nr   )r   r   )r5   ri   r   r{   r   rC  rz   r   r   r&  rI   rJ  r0  rK  r   )r   r  vl3s       r   	test_viewz"TestSpecificTypeQuantity.test_view>  sb   Ys^^ad"((55Aww$+%%%%]1?++ 	5 	5Ys^^ac!''444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 IcNN,,Aww$+%%%%wWV__!!$,//Bxx4<''''w$,,,,,,,,s   0:B66B:=B:c                    |                      t          j        d          t          j        z            }|dt          j        z  z   }t          |          | j         u sJ dt          j        z  |z   }t          |          | j         u sJ ||z   }t          |          | j         u sJ |dt          j        z  z  }t          |          t          j        u sJ ||z  }t          |          t          j        u sJ d S )Nr   rF   )	rC  r5   ri   r   r!   r%   rz   r{   r   )r   r  sum1sum2sum3res1res2s          r   &test_operation_precedence_and_fallbackz?TestSpecificTypeQuantity.test_operation_precedence_and_fallbackL  s    KK	#-..39}DzzT[((((QTzA~DzzT[((((1uDzzT[((((C!#IDzzQZ''''1uDzzQZ''''''rZ   N)rr   rs   rt   rM  rP  rT  r[  ru   rZ   r   r>  r>    sP          * * * - - -( ( ( ( (rZ   r>  c                  :    G d dt           j                  } t          j        dt           j                  }| |_        t          j        d|          }t          |          t           j        u sJ t          j        d|d          }t          |          | u sJ d S )Nc                       e Zd ZdS ),test_unit_class_override.<locals>.MyQuantityNrq   ru   rZ   r   
MyQuantityr^  [  s        rZ   r_  my_degrF   Trx   )r   r   r#   rQ  _quantity_classrz   )r_  my_unitr@   rR   s       r   test_unit_class_overriderc  Z  s        QZ    fXqu%%G(G	
C	!	!B88qz!!!!	
C	-	-	-B88z!!!!!!rZ   c                       e Zd Zd Zd ZdS )QuantityMimicc                 "    || _         || _        d S r   )r7   r   )r   r7   r   s      r   __init__zQuantityMimic.__init__g  s    
			rZ   c                 4    t          j        | j                  S r   )r5   rL   r7   r,   s    r   	__array__zQuantityMimic.__array__k  s    x
###rZ   N)rr   rs   rt   rg  ri  ru   rZ   r   re  re  f  s2          $ $ $ $ $rZ   re  c                       e Zd Zd Zd ZdS )QuantityMimic2c                 f    t          j        | j        | j                                      |          S r   )r   r   r7   r   r   r   r   s     r   r   zQuantityMimic2.top  s&    z$*di0033D999rZ   c                 f    t          j        | j        | j                                      |          S r   )r   r   r7   r   r   rm  s     r   r   zQuantityMimic2.to_values  s&    z$*di0099$???rZ   N)rr   rs   rt   r   r   ru   rZ   r   rk  rk  o  s7        : : :@ @ @ @ @rZ   rk  c                       e Zd ZdZej                            deef          d             Z	ej                            deef          d             Z
d ZdS )TestQuantityMimicsz5Test Quantity Mimics that are not ndarray subclasses.Mimicc                    t          j        d          } ||t          j                  }t          j        |          }|j        t          j        k    sJ t          j        |j        |k              sJ t          j        |t          j                  }|j        t          j        k    sJ t          j        |j        d|z  k              sJ d S )Nrf   r	  )	r5   ri   r   r%   r   r   r   r7   r!   )r   rq  r7   mimicr:   rR   s         r   test_mimic_inputz#TestQuantityMimics.test_mimic_inputz  s    	$eQS!!Juv}}}}vag&'''''Zqt$$w!$vbh#+-.......rZ   c                 j    |ddgt           j                  }t          j        t          j        d          t           j                  }||dd <   t          j        |d d         j        t          j        d          k              sJ t          j        |dd          j        ddgk              sJ d S )NrF   rG   rf   r   r   g      Y@rV  )r   r%   r   r5   ri   r!   r   r7   )r   rq  rs  r:   s       r   test_mimic_settingz%TestQuantityMimics.test_mimic_setting  s    sCj!#&&Jry--!""vaekRYs^^344444vaekeU^34444444rZ   c                 D   t          ddgt          j        t          j        t          j        dz  z                      }t          j        |          }t          |t          j                  sJ |j        t          j        t          j        t          j        dz  z            k    sJ t          j	        |j
        ddgk              sJ t          j        |d          }t          |t          j                  sJ |j        t          j        t          j        t          j        dz  z            k    sJ t          j	        |j
        ddgk              sJ t          j        t          j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )NrF   rG   r   Trx   )re  r   r$  r!   rI   r%  r   r   r5   r   r7   r   r   r   r&  )r   rs  ri  r:   s       r   test_mimic_function_unitz+TestQuantityMimics.test_mimic_function_unit  s   sCj!%qsAv*>*>??E%LL!QU#####vqtac1f}------vag#s+,,,,,JuD)))!QU#####vqtac1f}------vag#s+,,,,,]1?++ 	 	Ju	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   3FFFN)rr   rs   rt   __doc__r   r  parametrizere  rk  rt  rv  rx  ru   rZ   r   rp  rp  w  s        ??[W}n&EFF/ / GF/ [W}n&EFF5 5 GF5    rZ   rp  c                      t           j                            g dt          j        z  g d          } t          |            t          |            dS )z5Ensure we don't break masked Quantity representation.)r"   r   r   r   )TFTF)maskN)r5   marL   r   r   ry  rr  )masked_quantitys    r   test_masked_quantity_str_reprr    sO     ekk,,,"5<V<V<VkWWOrZ   c                   0    e Zd Zed             Zd Zd ZdS )!TestQuantitySubclassAboveAndBelowc                     G d dt           j                  }|| _        t          dt          j        |ft          d                    | _        t          d|t          j        ft          d                    | _        d S )Nc                        e Zd Z fdZ xZS )>TestQuantitySubclassAboveAndBelow.setup_class.<locals>.MyArrayc                     t                      j        }| ||           t          |d          r|j        | _        d S d S )Nmy_attr)super__array_finalize__rc   r  )r   rE  super_array_finalize	__class__s      r   r  zQTestQuantitySubclassAboveAndBelow.setup_class.<locals>.MyArray.__array_finalize__  sP    ',ww'A$'3((---3	** /#&;DLLL/ /rZ   )rr   rs   rt   r  __classcell__)r  s   @r   MyArrayr    s8        / / / / / / / / /rZ   r  MyQuantity1rx  )r  MyQuantity22)	r5   r   r  rz   r   r   dictr  r  )r   r  s     r   setup_classz-TestQuantitySubclassAboveAndBelow.setup_class  s    	/ 	/ 	/ 	/ 	/bj 	/ 	/ 	/ 
G/DdSVFWFWFWXX/DdSVFWFWFWXXrZ   c                 j   |                      dt          j                  }t          || j                   sJ |j        dk    sJ |j        t          j        u sJ |                     dt          j                  }t          || j                  sJ |j        dk    sJ |j        t          j        u sJ d S Nr   rx  r  )r  r   r%   r   r  r   r  )r   mq1mq2s      r   
test_setupz,TestQuantitySubclassAboveAndBelow.test_setup  s    r13''#t/00000{c!!!!x13r13''#t/00000{c!!!!x13rZ   c                    |                      dt          j                  }|                     |          }t	          || j                  sJ t	          || j                   rJ |j        dk    sJ |j        t          j        u sJ |                     dt          j                  }|                      |          }t	          || j                   sJ t	          || j                  rJ |j        dk    sJ |j        t          j        u sJ d S r  )r  r   r%   r  r   r  r   )r   r  mq12r  mq21s        r   test_attr_propagationz7TestQuantitySubclassAboveAndBelow.test_attr_propagation  s   r13''$$$ 011111dD$455555|s""""yACr13''$$$ 011111dD$455555|s""""yACrZ   N)rr   rs   rt   classmethodr  r  r  ru   rZ   r   r  r    sN        Y Y [Y           rZ   r  )Gry  rg   rP   r  r  	fractionsr   numpyr5   r   numpy.testingr   r   r   astropyr   r   r  r   astropy.utilsr	   r
   astropy.utils.exceptionsr   r   r   r%  r.  r1  r7  r@  rO  rT  r[  r`  rb  rn  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   r  r  r
  r  r  r  r  r  r  r-  r5  r:  r<  r>  rc  re  rk  rp  r  r  ru   rZ   r   <module>r     s   * *                X X X X X X X X X X       8 8 8 8 8 8 0 0 0 0 0 0 0 0 3 3 3 3 3 3 GD' D' D' D' D' D' D' D'N
b@ b@ b@ b@ b@ b@ b@ b@J# # #% % %! ! !. . .*" " "*( ( (2- - -
" " "! ! !$BQ BQ BQ BQ BQ BQ BQ BQJgY gY gY gY gY gY gY gYT8 8 8
L L LR R Rj9 9 98 8 8, , ,&     * * *  
5 5 5  (' ' ' $ $ $0	$ 	$ 	$$ $ $  - - -`    
    
  ) ) )X  , 8  8  8F9 9 98( 8( 8( 8( 8( 8( 8( 8(v	" 	" 	"$ $ $ $ $ $ $ $@ @ @ @ @] @ @ @! ! ! ! ! ! ! !H  &  &  &  &  &  &  &  &  &  & rZ   