U
    e»{jæß  ã                   @   s@  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mZ G d	d
„ d
ƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#G dd „ d ƒZ$G d!d"„ d"ƒZ%d#d$„ Z&d%d&„ Z'd'd(„ Z(d)d*„ Z)d+d,„ Z*d-d.„ Z+d/d0„ Z,d1d2„ Z-d3d4„ Z.d5d6„ Z/d7d8„ Z0d9d:„ Z1d;d<„ Z2d=d>„ Z3d?d@„ Z4dAdB„ Z5dCdD„ Z6dEdF„ Z7dGdH„ Z8dIdJ„ Z9dKdL„ Z:dMdN„ Z;dOdP„ Z<dQdR„ Z=dSdT„ Z>dUdV„ Z?dWdX„ Z@G dYdZ„ dZƒZAd[d\„ ZBG d]d^„ d^ƒZCG d_d`„ d`eCƒZDG dadb„ dbƒZEdcdd„ ZFG dedf„ dfƒZGdS )gz$Test the Quantity class and related.é    N)ÚFraction)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)Úunits)Ú_UNIT_NOT_INITIALISED)Ú
isiterableÚ
minversion)ÚAstropyDeprecationWarningÚAstropyWarningc                   @   s„   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestQuantityCreationc              	   C   sì   dt j }t|t jƒst‚t jd }t|t jƒs4t‚dt j }t|t jƒsNt‚t jd }t|t jƒsht‚dt j t j }t|t jƒsˆt‚t t¡� dt j }W 5 Q R X t t¡� dt j }W 5 Q R X t t¡� dt j }W 5 Q R X d S )Nç×£p=
×&@gsh‘í|Çf@)	ÚuÚmeterÚ
isinstanceÚQuantityÚAssertionErrorÚsecondÚpytestÚraisesÚ	TypeError)ÚselfÚquantity© r   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/tests/test_quantity.pyÚtest_1   s     



zTestQuantityCreation.test_1c              	   C   sf   t jdt jd�}t  dd¡}t  d¡}|jt  d¡ks:t‚t t¡� t jt	ƒ t j
d� W 5 Q R X d S )Nçmçû©ñÒ&@©Úunitç…ëQ¸…5@Úcmé   )r   r   r   r   ÚUnitr   r   r   r   ÚobjectÚm)r   Ú_Úq3r   r   r   Útest_20   s    
zTestQuantityCreation.test_2c              	   C   s(   t  t¡� tjddd� W 5 Q R X d S )Nr   Z
testinggggr   )r   r   Ú
ValueErrorr   r   ©r   r   r   r   Útest_3=   s    zTestQuantityCreation.test_3c              	   C   sV  t jddd�}t |j¡st‚t jddd�}t |j¡s<t‚t jddd�}t |j¡sZt‚t  d¡}t |j¡stt‚|jt jks„t‚t jddd�}t |j¡s¢t‚t jddd�}t |j¡sÀt‚t  d	¡}t |j¡sÚt‚|jt jksêt‚t jd
dd�}t |j¡�s
t‚t	 
t¡� t jddd�}W 5 Q R X t	 
t¡� t jddd�}W 5 Q R X d S )NÚnanr    r   ÚNaNz-nanznan cmÚinfz-infzinf cmÚInfinityÚ Zspam)r   r   ÚnpÚisnanÚvaluer   r   r    Úisinfr   r   r   ©r   Úqr   r   r   Útest_nan_infB   s,    

z!TestQuantityCreation.test_nan_infc              	   C   s2   t jdt jd�}t t¡� t j|_W 5 Q R X d S )NçÍÌÌÌÌÌ&@r   )r   r   r   r   r   ÚAttributeErrorr    r   ©r   Úq1r   r   r   Útest_unit_propertyf   s    z'TestQuantityCreation.test_unit_propertyc           	      C   s  t jdt jt j td�}|jtks&t‚t  |¡}|jtks>t‚|jt|jƒksRt‚|j	|j	ksbt‚t
jddgt
jd�}t  |t j¡}|j|jks”t‚t
jddgt
jd�}t  |t j¡}|j|jksÆt‚t  t d¡t j¡}|jtksèt‚t jt d¡t jtd�}|jtk�st‚dS )zÇTest 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ç      ð?ç       @©r>   z10.25N)r   r   r$   ÚsÚintr>   r   Úfloatr2   r   r0   ÚarrayÚfloat32ÚyrÚfloat16ÚdecimalÚDecimalr#   )	r   r:   Úq2Za3_32Zq3_32Za3_16Zq3_16Úq4Úq5r   r   r   Útest_preserve_dtypem   s     
z(TestQuantityCreation.test_preserve_dtypec                 C   s&   t jddd�}t |jtj¡s"t‚dS )z>Test that if ``dtype=None``, NumPy's dtype inspection is used.r<   NrA   )r   r   r0   Ú
issubdtyper>   Úintegerr   )r   rK   r   r   r   Útest_numpy_style_dtype_inspectŠ   s    z3TestQuantityCreation.test_numpy_style_dtype_inspectc                 C   sä   t jdtjd�}t |jtj¡r$t‚|jtjks4t‚t jt d¡tjd�}|jtjksZt‚t jt 	d¡tjd�}|jtj	ks€t‚t
tdƒr°t jt d¡tjd�}|jtjks°t‚t
tdƒràt jt d¡tjd�}|jtjksàt‚dS )zGTest that if ``dtype=numpy.inexact``, the minimum precision is float64.r<   rA   rH   Úfloat128N)r   r   r0   ZinexactrO   r>   rP   r   Úfloat64rF   ÚhasattrrH   rR   )r   r:   rK   r&   rL   r   r   r   Útest_float_dtype_promotion�   s    

z/TestQuantityCreation.test_float_dtype_promotionc                 C   s  t  d¡}tj|tjtj d�}|j|k	s.t‚tj|tjtj dd�}|j|ksTt‚t |¡}||k	sjt‚|j|jk	szt‚tj|dd�}||ks”t‚|j|jks¤t‚tj||jdd�}||ksÂt‚|j|jksÒt‚tj|tj	tj dd�}||k	söt‚|j|jk	�st‚d S )Nç      $@r   F)r   Úcopy©rW   )
r0   Úaranger   r   r$   rB   Úbaser   r   r    )r   ÚaÚq0r:   rK   r&   rL   r   r   r   Ú	test_copy£   s"    

zTestQuantityCreation.test_copyc                 C   s”   G dd„ dt jƒ}|t d¡t jƒ}tt  |¡ƒt jks<t‚tt j|dd�ƒ|ksVt‚tt  |t j¡ƒt jksrt‚tt j|t jdd�ƒ|ks�t‚dS )z>Test subok can be used to keep class, or to insist on Quantityc                   @   s   e Zd ZdS )z;TestQuantityCreation.test_subok.<locals>.MyQuantitySubclassN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚMyQuantitySubclassÁ   s   rb   rV   T©ZsubokN)r   r   r0   rY   r$   Útyper   Úkm)r   rb   Zmyqr   r   r   Ú
test_subok¾   s    zTestQuantityCreation.test_subokc           	      C   s†  t jt  d¡dd�}tj|tjdd�}|jd s4t‚tj|tjdd�}|jd sTt‚tj|tjdd�}|jd stt‚tj|dd�jd sŒt‚tj|dd�jd s¤t‚tj|dd�jd s¼t‚t jt  d¡dd�}tj|tjdd�}|jd sðt‚tj|tjdd�}|jd �st‚tj|tjdd�}|jd �s4t‚tj|dd�jd �sNt‚tj|dd�jd �sht‚tj|dd�jd �s‚t‚dS )	z3Test that order is correctly propagated to np.arrayrV   ÚC©ÚorderÚC_CONTIGUOUSÚFÚF_CONTIGUOUSÚAN)r0   rE   rY   r   r   r$   Úflagsr   )	r   ÚacZqccZqcfZqcaÚafZqfcZqffZqfar   r   r   Ú
test_orderË   s(    zTestQuantityCreation.test_orderc                 C   sÐ   t  d¡}tj|tjdd�}|jdkr0|jdks4t‚tj|tjdd�}|jdkrZ|jdks^t‚tj|tjdd�}|jdkr„|jdksˆt‚tjt dd	¡d	dd�jdksªt‚tjt dd
¡d	dd�jdksÌt‚dS )z3Test that ndmin is correctly propagated to np.arrayrV   r!   )Zndmin)é
   é   )r!   rr   é   )r!   r!   rr   r$   r    N)r0   rY   r   r   r$   ÚndimÚshaper   )r   r[   r:   rK   r&   r   r   r   Ú
test_ndminä   s    
"zTestQuantityCreation.test_ndminc              	   C   sl  G dd„ dt jƒ}t  d¡}| ¡  |¡}d|_t |¡}t|tjƒsJt	‚|jtj
ksZt	‚t  |j|k¡snt	‚t |tj¡}|jtjksŒt	‚t  |jd| k¡s¤t	‚tj|dd�}t  |j|k¡sÆt	‚d|d	< |d	 d
ksÞt	‚|d	 d
ksît	‚| ¡  |¡}tj
|_tj|tjdd�}d|d	< |d	 d
k�s0t	‚|d	 dk�sBt	‚d|_t t¡� t |¡ W 5 Q R X dS )z4Test that unit attributes in objects get recognized.c                   @   s   e Zd ZdS )zMTestQuantityCreation.test_non_quantity_with_unit.<locals>.MyQuantityLookalikeNr^   r   r   r   r   ÚMyQuantityLookalikeö   s   rx   ç      @r$   ç     @�@FrX   r   rs   ç        r@   ZnonsenseN)r0   ÚndarrayrY   rW   Úviewr   r   r   r   r   r$   Úallr2   Úmmr   r   r   )r   rx   r[   Zmylookaliker:   rK   r&   rL   r   r   r   Útest_non_quantity_with_unitó   s2    

z0TestQuantityCreation.test_non_quantity_with_unitc              	   C   sN  dt j> }t|t jƒst‚|jt jks*t‚|jdks8t‚t d¡}|t jt j	 > }t|t jƒsbt‚|jt jt j	 ksxt‚t 
|j|k¡sŒt‚d|d< t 
|j|k¡s¨t‚|t jt j	 > }t|t jƒsÈt‚|jt jt j	 ksÞt‚t 
|j|d k¡söt‚d|d< |d jdk�st‚||j> }d|d< t 
|j|k¡�s:t‚t t j¡� |t j	>  W 5 Q R X | ¡ }|t jt j	 K }|jt jt j	 k�sŒt‚t 
|j|k¡�s¢t‚t 
|j|d k¡�s¼t‚d	|d< |d
> }|jt jt j k�sät‚t 
||k¡�søt‚dt j }t d¡}	|	|> }
|
jt  |¡k�s*t‚t 
|
 t j¡d|	 k¡�sJt‚d S )Nr?   rV   r{   é	   rz   é   g     @¿@é   ç      ð¿zkm/hrg      >@ç      @)r   r$   r   r   r   r   r2   r0   rY   rB   r~   r   r   r   Ú
UnitsErrorrW   re   Úhrr    r"   Úto_value)r   r:   Za2rK   r&   rL   Za2_copyrM   Znot_quite_a_footZa6Zq6r   r   r   Útest_creation_via_view  sH    




z+TestQuantityCreation.test_creation_via_viewc              
   C   s6  t  t¡�* t jtdd��}dtj?  W 5 Q R X W 5 Q R X t|ƒdksJt‚dtj	 }t  t¡�* t jtdd��}|tj?  W 5 Q R X W 5 Q R X t|ƒdksžt‚t  t¡�* t jtdd��}|tjL }W 5 Q R X W 5 Q R X t|ƒdksèt‚t  t¡�( t jtdd��}d|?  W 5 Q R X W 5 Q R X t|ƒdk�s2t‚d S )Nzis not implemented©Úmatchr!   r?   )
r   r   r   Úwarnsr   r   r$   Úlenr   re   )r   Zwarning_linesr5   r   r   r   Útest_rshift_warnsE  s:     ÿ
 ÿ ÿ ÿz&TestQuantityCreation.test_rshift_warnsN)r_   r`   ra   r   r'   r*   r6   r;   rN   rQ   rU   r]   rf   rq   rw   r€   r‰   rŽ   r   r   r   r   r      s   $#/r   c                   @   s¾   e Zd Ze dej¡Ze dej¡Zdd„ Z	dd„ Z
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zejjd!d"�d#d$„ ƒZd%d&„ Zd'S )(ÚTestQuantityOperationsr   ç       @c                 C   s’   | j | j }|jdkst‚|jtjks*t‚| j| j  }|jdksDt‚|jtjksTt‚t dtj	¡t dtj
¡ }|jtj	ks€t‚|jdksŽt‚d S )Ng      '@g     ø‘@gfffffp—@g      +@gÍÌÌÌLÍ@)r:   rK   r2   r   r   r   r   Ú
centimeterr   r$   re   )r   Únew_quantityÚnew_qr   r   r   Útest_additiona  s    z$TestQuantityOperations.test_additionc                 C   sX   | j | j }|jdkst‚|jtjks*t‚| j| j  }|jdksDt‚|jtjksTt‚d S )Ng®Gáz®&@g     ¸‘À©r:   rK   r2   r   r   r   r   r‘   ©r   r’   r   r   r   Útest_subtractionp  s    z'TestQuantityOperations.test_subtractionc                 C   s´   | j | j }|jdkst‚|jtjtj ks0t‚| j| j  }|jdksJt‚|jtjtj ks`t‚d| j  }|jdksxt‚|jtjksˆt‚| j d }|jdks t‚|jtjks°t‚d S )Ng×£p=
×V@ç      .@gš™™™™ie@r•   r–   r   r   r   Útest_multiplication{  s    

z*TestQuantityOperations.test_multiplicationc                 C   s  | j | j }t|jddd� |jtjtj ks2t‚| j| j  }t|jddd� |jtjtj ksdt‚tj	dtjd�}tj	dtj
d�}|| }t|jd	d
d� |jtjtj
 ks²t‚| j d }|jdksÊt‚|jtjksÚt‚d| j  }|jdksòt‚|jt d¡k�st‚d S )Ng×£p=
×ö?é   ©rI   g»-.;´jæ?é   r7   r   rV   g=
×£p=ò?rr   gƒÀÊ¡Eò?r   r?   z1/m)r:   rK   r   r2   r   r   r   r‘   r   r   r   r"   )r   r’   r:   rK   r   r   r   Útest_division�  s"    

z$TestQuantityOperations.test_divisionc                 C   sr   t  dd¡}| jt j t j| j   kr0|ks6n t‚| jt j t  dd¡ksRt‚t j| j t  dd¡ksnt‚dS )zRegression test for issue #587.r   zm*súm/sg»-.;´j¶?zs/mN)r   r   r:   rB   r   )r   r“   r   r   r   Útest_commutativity«  s    *z)TestQuantityOperations.test_commutativityc                 C   s`   | j d }t|jddd� |jt d¡ks.t‚| j d }t|jddd� |jt d	¡ks\t‚d S )
Nrs   g¾Á&SM`@rš   r›   zm^2rt   g¥žÐkE—@rƒ   zm^3)r:   r   r2   r   r   r"   r   r–   r   r   r   Ú
test_power´  s    

z!TestQuantityOperations.test_powerc              	   C   sþ   t  d¡}|tj }|| }t  ||k¡s.t‚|| }t  ||k¡sHt‚|| }t  ||tjd  k¡slt‚t  dddgdddgdddggdddgdddgdddggdddgdddgdddggg¡tj }|| }t  |t  ||j	¡|j
 |j
 k¡sút‚d S )Nrt   rs   r?   r{   )r0   Úeyer   r$   r~   r   rE   rB   Úmatmulr2   r   )r   r[   r5   Zresult1Zresult2Zresult3rK   Zresult4r   r   r   Útest_matrix_multiplication¾  s6    

þþþúÿ
öz1TestQuantityOperations.test_matrix_multiplicationc                 C   sŒ   | j  }|j| j j kst‚|j| j jks.t‚| j   }|j| j jksJt‚|j| j jks\t‚| j 
 }|j| j jksvt‚|j| j jksˆt‚d S ©N)r:   r2   r   r   r–   r   r   r   Ú
test_unaryÕ  s    
z!TestQuantityOperations.test_unaryc                 C   sv   dt j t j }t|ƒ}|j|jks(t‚|j|jks8t‚dt j t j }t|ƒ}|j|j ksbt‚|j|jksrt‚d S )Nr?   r„   )r   r$   rB   Úabsr2   r   r   )r   r5   r’   r   r   r   Útest_absæ  s    zTestQuantityOperations.test_absc              	   C   sD   t jdt jd�}t jdt jd�}t t j¡� ||  W 5 Q R X 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:   rK   r   r   r   Útest_incompatible_unitsñ  s    z.TestQuantityOperations.test_incompatible_unitsc              	   C   sl   t jdt jd�}t t¡�}|ddi  W 5 Q R X |jjd  d¡sHt	‚t t¡� |t j  W 5 Q R X d S )Nr   r   r[   r!   r   z*Unsupported operand type(s) for ufunc add:)
r   r   r   r   r   r   r2   ÚargsÚ
startswithr   )r   r:   Úexcr   r   r   Útest_non_number_typeú  s    ÿz+TestQuantityOperations.test_non_number_typec              	   C   sÀ  dt j t j }|dt j t j  }|jdks2t‚|j|jksBt‚|d }|jdksXt‚|jt jksht‚t 	t j
¡�  | jt jdt  d¡d�  W 5 Q R X t 	t j
¡�  | jt jdt  d¡d�  W 5 Q R X t jt dd	d
g¡t jt j td�}|t dddg¡ }|jt jk�st‚t|jt dddg¡ƒ t 	t¡� |t dd	d
g¡7 }W 5 Q R X t dd	d
g¡t j t j }|t dddg¡7 }|jt jk�sšt‚t |jt dddg¡k¡�s¼t‚d S )Nry   r?   g5^ºI@g?5^ºIð?çš™™™™™¹?r/   r   r!   rs   rt   rA   é   rš   é   g/Ý$@g5^ºI@gP�—n@iì  iÕ  i¾  )r   r$   re   r   r2   r   r   Údimensionless_unscaledr   r   r†   r:   r   r"   r0   rE   rC   r   r   r~   )r   ZdqZdq1Zdq2r5   rK   r   r   r   Útest_dimensionless_operations  s*    $$$z4TestQuantityOperations.test_dimensionless_operationsc           
      C   sì   ddl m} t dtj¡}t dtj¡}||  |jtj ¡}t	|j
ddd� t dtjd	 tj tjd
  ¡}ddtj |   tjd tjd  tj ¡}t dtj¡}t dtj¡}|| }	t	|	j
ddd� |	jtjtj ksèt‚dS )zPerform a more complicated testr   )Úimperialr˜   g      &@gž˜õb(g@rš   r›   gyÐ´WÒ=rt   rs   r?   ç      @éýÿÿÿéþÿÿÿç      @g     @S@é   N)Zastropy.unitsr²   r   r   r   r   ÚtoZmileÚhourr   r2   r$   ÚkgrB   r0   ÚpiÚpcr‘   r   r    r   )
r   r²   ZdistanceÚtimeÚvelocityÚGr%   Zside1Zside2Zarear   r   r   Útest_complicated_operation&  s    ".z1TestQuantityOperations.test_complicated_operationc              
   C   s  dt jt j  dt jd  ks"t‚dt j dt j ks:t‚dt j dt j ksRt‚t jd }d| }| |¡tksvt‚| |¡dksˆt‚||ks”t‚dt jd  }||ks®t‚dt j dkrÀt‚dt j dksÒt‚dt j dt j fD ]&}tj	t
dd	�� t|ƒ W 5 Q R X qæd S )
Nr!   rµ   éd   rt   r?   Trz   zWThe truth value of a Quantity is ambiguous. In the future this will raise a ValueError.rŠ   )r   r    r   r$   Ú__eq__ÚNotImplementedr   r°   r   rŒ   r
   Úbool)r   r   r5   r   r   r   r   Útest_comparison;  s$    "
ýz&TestQuantityOperations.test_comparisonc           	   	   C   sŒ  t  dt j¡}d}d}t t¡�}t|ƒ W 5 Q R X |jjd |ksHt	‚t t¡�}t
|ƒ W 5 Q R X |jjd |kszt	‚t t¡�}| ¡  W 5 Q R X |jjd |ks¬t	‚t  dt jt j ¡}t|ƒt| t j¡ƒksÜt	‚t
|ƒt
| t j¡ƒksøt	‚t t¡�}| ¡  W 5 Q R X |jjd |k�s,t	‚t  dt j¡}t|ƒdk�sLt	‚t
|ƒdk�s^t	‚t t¡�}| ¡  W 5 Q R X |jjd |k�s’t	‚t jdt jt
d�}t|ƒdk�s¶t	‚t
|ƒdk�sÈt	‚| ¡ dk�sÚt	‚t  ddgt j¡}t t¡�}t|ƒ W 5 Q R X |jjd |k�s t	‚t t¡�}t
|ƒ W 5 Q R X |jjd |k�sTt	‚t t¡�}| ¡  W 5 Q R X |jjd |k�sˆt	‚d S )	Nr!   zGonly dimensionless scalar quantities can be converted to Python scalarszOonly integer dimensionless scalar quantities can be converted to a Python indexr   ç®Gáz®ó?rs   rA   r@   )r   r   r$   r   r   r   rD   r2   r©   r   rC   Ú	__index__re   rˆ   r°   )	r   r:   Zconverter_err_msgZindex_err_msgr«   rK   r&   rL   rM   r   r   r   Útest_numeric_convertersZ  sP    ÿÿz.TestQuantityOperations.test_numeric_convertersz/list multiplication only works for numpy <=1.10)Úreasonc                 C   s8   t jdt jtd�}|dddg ddddddgks4t‚dS )z*Test that use of __index__ actually works.rs   rA   r[   ÚbÚcN)r   r   r°   rC   r   )r   rL   r   r   r   Ú+test_numeric_converter_to_index_in_practice¦  s    zBTestQuantityOperations.test_numeric_converter_to_index_in_practicec                 C   sj   t  dt j¡}t t |¡t dg¡k¡s.t‚t  dddgt j¡}t t |¡t dddg¡k¡sft‚d S )NrÆ   r?   r@   ry   )r   r   r$   r0   r~   rE   r   r4   r   r   r   Útest_array_converters¬  s     z,TestQuantityOperations.test_array_convertersN)r_   r`   ra   r   r   r   r:   r‘   rK   r”   r—   r™   r�   rŸ   r    r£   r¥   r§   r¨   r¬   r±   rÀ   rÅ   rÈ   r   ÚmarkZxfailrÌ   rÍ   r   r   r   r   r�   ]  s(   	
	!L
r�   c               	   C   s    t jdt jd�} | j}|dks"t‚|  t j¡}|dks:t‚|  t j¡}|jdksTt‚t 	t j
¡� |  t j¡ W 5 Q R X t 	t j
¡� |  t j¡ W 5 Q R X d S )Nr­   r   g-Cëâ6?)r   r   r   r2   r   rˆ   Ú	kilometerr¸   r   r   r†   Zzettastokes)r:   r2   Zvalue_in_kmr’   r   r   r   Útest_quantity_conversion¶  s    rÐ   c               	   C   sp   t jdt jd�} t t j¡� | t jK } W 5 Q R X t  t  ¡ ¡� | t jK } W 5 Q R X t	 
| dt j ¡slt‚d S )Nrr   r   )r   r   Úoner   r   ZUnitConversionErrorZradZadd_enabled_equivalenciesZdimensionless_anglesr0   Úiscloser   ©r5   r   r   r   Útest_quantity_ilshiftÅ  s    rÔ   c                  C   s@   t jdt jtd�} | t jK } | jt jks,t‚| jtj	ks<t‚d S )Nrr   rA   )
r   r   re   rC   r¼   r   r   r>   r0   rS   )Úxr   r   r   Útest_regression_12964Ô  s    
rÖ   c                  C   s  t jddgt jd�} | j}d|d< t | ddgt j k¡s>t‚|  ¡ }d|d< t | ddgt j k¡sjt‚|  d¡}d|d< t | ddgt j k¡s˜t‚| jdd	d
�}dt j |d< t | ddgt j k¡sÐt‚|  d¡}d|d< t | ddgt j k¡sþt‚d S )Nr?   r@   r   r{   r   ry   r!   r$   FrX   rs   r    )	r   r   r   r2   r0   r~   r   rˆ   r¸   )r:   Zv1Úv2Úv3rK   Zv4r   r   r   Útest_quantity_value_viewsß  s     

rÙ   c                  C   sþ   t jdt jd�} | jt jt  ¡ d�}t|dƒ | jt jt  ¡ d�}t|j|ƒ t jdt j	d�} | jt j
t  ¡ d�}| jt j
t  ¡ d�}|jt jt  ¡ d�}|jt jt  ¡ d�}t|dƒ t|j|ƒ |jt j
ksÔt‚t|dƒ t|j|ƒ |jt jksút‚d S )Nr­   r   )Zequivalenciesg  €\VæAgš™™™™™Ù?gö(\8yAgKƒ2·�N{?)r   r   r   rˆ   ÚHzÚspectralr   r¸   r2   Z	arcsecondÚauZparallaxZ	arcminuter   r   )r:   r×   rK   rØ   r&   r   r   r   Ú#test_quantity_conversion_with_equivô  s     


rÝ   c                     s¶   G ‡ fdd„dt jƒ‰ ˆ ddgt jd�} |  t j¡}|jt jksDt‚| t j¡}|jt jks`t‚t|j| jƒ ˆ ddgt jd�}| t j¡ t j¡}|jt jks¤t‚t|j|jƒ d S )Nc                       s,   e Zd Ze ¡ Z‡ fdd„Z‡ fdd„ZdS )zBtest_quantity_conversion_equivalency_passed_on.<locals>.MySpectralc                    s
   |  ˆ ¡S r¤   )r}   )r   Úobjr   ©Ú
MySpectralr   r   Ú__quantity_view__  s    zTtest_quantity_conversion_equivalency_passed_on.<locals>.MySpectral.__quantity_view__c                    s
   ˆ ||ŽS r¤   r   )r   r©   Úkwargsrß   r   r   Ú__quantity_instance__  s    zXtest_quantity_conversion_equivalency_passed_on.<locals>.MySpectral.__quantity_instance__N)r_   r`   ra   r   rÛ   Z_equivalenciesrá   rã   r   rß   r   r   rà   
  s   rà   éè  éÐ  r   )	r   r   rÚ   r¸   Únmr   r   r   r2   )r:   rK   r&   rL   rM   r   rß   r   Ú.test_quantity_conversion_equivalency_passed_on	  s    	rç   c                   C   s0   t j dt j ¡st‚t j dt j ¡s,t‚d S )Nr   r!   )r   ÚdegÚis_equivalentZradianr   r   r   r   r   Útest_self_equivalency"  s    rê   c                  C   s¤   dt j t jd  dt j d  } | jjdks2t‚| jjt jksDt‚dt j }|jjdks^t‚|jjt jkspt‚dt j }|jjdksŠt‚|jjdt j ks t‚d S )NrV   rs   ç      i@éú   rr   r!   )r   r$   rB   ÚmsÚsir2   r   r   ©r:   r5   r   r   r   Útest_si'  s    "

rð   c                  C   sÐ   dt j t jd  dt j d  } | jjdks2t‚| jjt jksDt‚dt j }|jjdks^t‚|jjt jkspt‚dt j }|jjdksŠt‚|jjdt j ks t‚dt j	 }|jjdksºt‚|jjt j
ksÌt‚d S )	NrV   rs   rë   rì   rä   rr   r!   rÁ   )r   r    rB   rí   Zcgsr2   r   r   r$   ZPaZbaryerï   r   r   r   Útest_cgs5  s    "


rñ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestQuantityComparisonc                 C   s  t jddd�t jddd�ks t‚t jddd�t jddd�kr@t‚t jdt jd�t jdt jd�kdksht‚t jdt jd�t jdt jd�kdks�t‚t jd	t jd�t jd	t jd�kdks¸t‚t  d	t j¡d
ksÎt‚t  dt j¡d
ksät‚t  dt j¡tjksüt‚t  tjt j¡tjk�st‚d S )Nrä   r$   r   r!   re   éL  TFr   r{   )r   r   r   r$   rB   r0   r-   r)   r   r   r   Útest_quantity_equalityH  s      (((z-TestQuantityComparison.test_quantity_equalityc                 C   s4  t  dddgt j¡}t  dt j¡}||k}||k}t |dddgk¡sJt‚t ||k¡s\t‚t  dt j¡}||k}||k}|dks†t‚|dks’t‚|dk}|dk}|dks®t‚|dksºt‚|dk}|dk}t |dddgk¡sât‚t ||k¡sôt‚t dddg¡}||k}||k}|dk�s"t‚|dk�s0t‚d S )Nr{   r?   rz   FTr   )	r   r   r$   re   r0   r~   r   rB   rE   )r   r[   rÊ   ÚeqÚnerË   Údr   r   r   Útest_quantity_equality_arrayU  s0    z3TestQuantityComparison.test_quantity_equality_arrayc              	   C   sü  t jdt jd�t jdt jd�ks$t‚t jdt jd�t jdt jd�k sHt‚t t j¡�* t jdt jd�t jdt jd�kszt‚W 5 Q R X t t j¡�* t jdt jd�t jdt jd�k s¶t‚W 5 Q R X t jdt jd�t jdt jd�ksät‚t jdt jd�t jdt jd�k�s
t‚t jdt jd�t jdt jd�k�s0t‚t jdt jd�t jdt jd�k�sVt‚t t j¡�, t jdt jd�t jdt jd�k�sŠt‚W 5 Q R X t t j¡�, t jdt jd�t jdt jd�k�sÈt‚W 5 Q R X t jdt jd�t jdt jd�k�søt‚d S )Nró   r   r!   i„  rä   i°  )	r   r   r   rÏ   r   r   r   r†   r   r)   r   r   r   Útest_quantity_comparisons  s    $$..$&&&00z/TestQuantityComparison.test_quantity_comparisonN)r_   r`   ra   rô   rø   rù   r   r   r   r   rò   G  s   rò   c                   @   s
  e Zd Zejdded�Zejddd�Zejdddgdd�Ze e	dd	ƒ¡Z
e e	dd
ƒd ¡Ze e	ddƒd ¡Ze e d¡e	ddƒd  ¡Ze e d¡e	ddƒd  ¡Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚTestQuantityDisplayr!   r$   r=   gÍÌÌÌÌÌô?r   gffffff@gÍÌÌÌÌÌ!@r?   r@   g„þäqÙ™Eg‘(,*‹ Er„   g„þäqÙ™Ågã yÏùhGrt   é}   c                 C   sd   t jddd�}t jddtd�}t| j| ƒdks4t‚t| j| ƒdksJt‚t| j| ƒdks`t‚d S )	Nr?   úm-1r   r!   r=   z<Quantity 1.>z<Quantity [1. , 2.3, 8.9]>z<Quantity 1>)r   r   rC   ÚreprÚ
scalarintqr   Úarrq©r   rK   r&   r   r   r   Ú test_dimensionless_quantity_repr—  s
    z4TestQuantityDisplay.test_dimensionless_quantity_reprc                 C   sd   t jddd�}t jddtd�}t| j| ƒdks4t‚t| j| ƒdksJt‚t| j| ƒdks`t‚d S )	Nr?   rü   r   r!   r=   z1.0Ú1z[1.  2.3 8.9])r   r   rC   Ústrrþ   r   rÿ   r   r   r   r   Útest_dimensionless_quantity_strž  s
    z3TestQuantityDisplay.test_dimensionless_quantity_strc                 C   s0   t  d¡}t|dƒdkst‚|d›dks,t‚d S )Ng…ëQ¸	@z.2fz3.14Úcds)r   r   Úformatr   r9   r   r   r   Ú"test_dimensionless_quantity_format¥  s    
z6TestQuantityDisplay.test_dimensionless_quantity_formatc                 C   s(   t | jƒdkst‚t | jƒdks$t‚d S )Nú1 mú1.3 m)r  rþ   r   Úscalarfloatqr)   r   r   r   Útest_scalar_quantity_strª  s    z,TestQuantityDisplay.test_scalar_quantity_strc                 C   s(   t | jƒdkst‚t | jƒdks$t‚d S )Nz<Quantity 1 m>z<Quantity 1.3 m>)rý   rþ   r   r
  r)   r   r   r   Útest_scalar_quantity_repr®  s    z-TestQuantityDisplay.test_scalar_quantity_reprc                 C   s   t | jƒdkst‚d S )Nz[1.  2.3 8.9] m)r  rÿ   r   r)   r   r   r   Útest_array_quantity_str²  s    z+TestQuantityDisplay.test_array_quantity_strc                 C   s   t | jƒdkst‚d S )Nz<Quantity [1. , 2.3, 8.9] m>)rý   rÿ   r   r)   r   r   r   Útest_array_quantity_reprµ  s    z,TestQuantityDisplay.test_array_quantity_reprc                 C   sd   t | jdƒdkst‚t | jdƒdks(t‚t | jdƒdks<t‚| jd›dksNt‚| jd›dks`t‚d S )NÚ02dz01 mz.1fr	  z.0fr  r  )r  rþ   r   r
  r)   r   r   r   Útest_scalar_quantity_format¸  s
    z/TestQuantityDisplay.test_scalar_quantity_formatc                 C   s>   t  d¡ tj¡}t|ƒ t¡s$t‚t	|ƒ td ¡s:t‚d S )NrV   ú>)
r0   rY   r}   r   r   r  Úendswithr   r   rý   )r   Zbad_quantityr   r   r   Útest_uninitialized_unit_format¿  s    z2TestQuantityDisplay.test_uninitialized_unit_formatc                 C   s&  t  dd¡}t|ƒ| ¡ ks t‚d}d|jt jt j d�› �|ksFt‚d}d|jdt jt j d�› �|ksnt‚d	}|jd
d�|ks†t‚|jd
dd�|ksœt‚d}|jd
dd�|ks¶t‚d}|jdd�|ksÎt‚|jddd�|ksät‚d}|jddd�|ksþt‚d}t d¡ 	t j¡ ¡ |k�s"t‚d S )Nç  ì“áBrž   z&Quantity as KMS: 150000000000.0 km / szQuantity as KMS: r   z!Quantity as KMS: 1.500e+11 km / srt   )Ú	precisionr   ú,$1.5 \times 10^{14} \; \mathrm{\frac{m}{s}}$Úlatex)r  Úinline)r  Zsubfmtz:$\displaystyle 1.5 \times 10^{14} \; \mathrm{\frac{m}{s}}$Údisplayz*$1.5 \times 10^{14} \; \mathrm{m\,s^{-1}}$Zlatex_inlinez8$\displaystyle 1.5 \times 10^{14} \; \mathrm{m\,s^{-1}}$z[0 1 2] (Unit not initialised))
r   r   r  Z	to_stringr   re   rB   r0   rY   r}   )r   ZqscalarÚresr   r   r   Útest_to_stringÄ  s&    "ÿz"TestQuantityDisplay.test_to_stringc              	   C   sº  ddl m} t dd¡}| j ¡ dks*t‚| j ¡ dks<t‚| ¡ dksLt‚| j ¡ dks^t‚| j	 ¡ d	kspt‚| j
 ¡ d
ks‚t‚| j ¡ dks”t‚| j ¡ dks¦t‚d| j ¡ ks¸t‚t d¡tj }t d¡tj }t d¡d tj }t ¡ }|j}�zzt dd¡}t dddg¡tj }	tjdd� | ¡ dk�s>t‚|	 ¡ dk�sPt‚tjdd� | ¡ dk�snt‚|	 ¡ dk�s€t‚d|_| ¡ }
d|
k�sœt‚| ¡ }d|k�s²t‚| ¡ }d|k�sÈt‚d|_| ¡ }
d|
k�sät‚| ¡ }d|k�sút‚| ¡ }d|k�st‚d|_tjdd� | ¡ }
d|
k�s8t‚| ¡ }d|k�sNt‚| ¡ }d|k�sdt‚| d ¡�stt‚W 5 tjf |Ž ||_X tjtj tjgtj }| ¡ d!k�s¶t‚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Á   rä   i'  g    eÍÍAgoÍ�X4oÍAg8ÛÜ˜ž�@g¨[óW4o�Ar‚   )r  z1$9.8765432 \times 10^{8} \; \mathrm{\frac{m}{s}}$z6$[7.89123,~1.2345679 \times 10^{8},~0] \; \mathrm{cm}$rs   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}$)Úastropy.units.quantityr  r   r   rþ   Z_repr_latex_r   r
  rÿ   Úscalar_complex_qÚscalar_big_complex_qÚscalar_big_neg_complex_qÚarr_complex_qÚbig_arr_complex_qr0   rY   r$   Zget_printoptionsZlatex_array_thresholdZset_printoptionsrE   r    r  r-   r+   )r   r  Zq2scalarZqmedZqbigZqvbigZpopsZoldlatr5   ÚqaZlsmedZlsbigZlsvbigZqinfnanr   r   r   Útest_repr_latexâ  s‚    
ÿÿÿÿÿÿ
ÿÿÿz#TestQuantityDisplay.test_repr_latexN)r_   r`   ra   r   r   rC   rþ   r
  rÿ   Úcomplexr!  r"  r#  r0   rY   r$  r%  r  r  r  r  r  r  r  r  r  r  r'  r   r   r   r   rú   Œ  s&   rú   c                  C   s4   dt j } |  ¡ dt j t j t jd  ks0t‚d S )Nrš   rµ   )r   ÚNÚ	decomposerº   r$   rB   r   ©r:   r   r   r   Útest_decompose6  s    
r,  c                  C   sš   t  dddg¡tj dtj  } t  |  ¡ jt  dddg¡k¡sDt‚t  | t  dddg¡tj dtj  k¡srt‚t  |  ¡ jt  dddg¡k¡s–t‚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!   rs   rt   r@   gü©ñÒMb@?gü©ñÒMbP?gú~j¼t“X?N)	r0   rE   r   r$   re   r~   r*  r2   r   rÓ   r   r   r   Útest_decompose_regression;  s    	 $.r-  c               	   C   sÒ  t  t d¡t j¡} t| jtjƒs&t‚| j	r0t‚t
| ƒt
| jƒksFt‚| dd… }|j| jksbt‚t|t jƒsrt‚t
|ƒdks‚t‚t  dt j¡}|j	sšt‚t t¡� t
|ƒ W 5 Q R X t t¡� |d  W 5 Q R X t jt d¡t jtd�}|j	søt‚t t¡� t
|ƒ W 5 Q R X t t¡� |d  W 5 Q R X t|jtjƒ�sHt‚tjdd	d
gdtfdtfdtfgd�}t  |t j¡}|j	�rˆt‚|d }|j|d k�s¤t‚|j|jk�s¶t‚t|t jƒ�sÈt‚|j	�sÔt‚|d }t |j|d k¡�söt‚|j|jk�st‚t|t jƒ�st‚|j	�r&t‚|d d }|j|jk�sDt‚t|t jƒ�sVt‚|j	�sbt‚|d d }	|	j	�szt‚|	|k�sˆt‚t  ttdƒƒt j¡} t| jtjƒ�s²t‚t| d jt d¡d ƒ t| d jt d¡d ƒ t t j¡�  t| d jt d¡d ƒ W 5 Q R X t t j¡�  t| d jt d¡d ƒ W 5 Q R X t d¡t j }
t jt d¡ }t | |
k¡�s~t‚t |
|k¡�s’t‚t t¡� t| ƒ W 5 Q R X t t¡� t| ƒ W 5 Q R X dS )z0
    Test using quantites with array values
    rr   rs   rš   rt   rV   r   rA   )r?   r@   ry   )r³   r…   ç      @)r¶   r�   g      "@rÕ   ÚyÚzr!   N)r   r   r0   rY   r   r   r2   r|   r   Zisscalarr�   r   r   r   r   rE   rC   ÚnumbersÚIntegralrD   Úkpcr~   ÚlistÚranger   r†   )ZqsecZ	qsecsub25ZqsecnotarrayZqseclen0arrayr[   ZqkpcZqkpc0ZqkpcxZqkpcx1Zqkpc1xZqsec2Zqsec3r   r   r   Útest_arraysJ  sx    


þ$$r6  c                  C   sX   t  dddg¡tj } | d dtj ks,t‚t  | dd… t ddgtj¡k¡sTt‚d S )Nr?   r@   ry   r   rs   )r0   rE   r   r$   r   r~   r   rÓ   r   r   r   Útest_array_indexing_slicingŸ  s    r7  c                  C   sX   t  dddg¡tj } t  dg¡tj | dd…< t  | t  dddg¡tj k¡sTt‚d S )Nr?   r@   ry   g      y@r!   rs   r³   )r0   rE   r   r$   r    r~   r   rÓ   r   r   r   Útest_array_setslice¥  s    r8  c                  C   s¢   t  dt jt j ¡} | d }d|  }| t d¡ }|jdks@t‚|jt jt j ksVt‚|jdksdt‚|jt jt j kszt‚|jdksˆt‚|jt jt j ksžt‚dS )z)
    Regression test from issue #679
    r³   rs   r@   ç      à?N)	r   r   r   r   r0   rE   r2   r   r   )r5   ZqotZtoqZnpqotr   r   r   Útest_inverse_quantity«  s    r:  c               	   C   sX   t  dt jt j t j ¡} t t¡� d| _W 5 Q R X t t¡� t j| _	W 5 Q R X d S )Ngš™™™™™#@rt   )
r   r   r   r   r   r   r8   r2   rº   r   rÓ   r   r   r   Útest_quantity_mutability¾  s
    r;  c                  C   s¦   t  dt j¡} t  | t j¡}|jdks*t‚t  | |gt j¡}|d jdksNt‚|d jdks`t‚t  || g¡}|j|jks~t‚|d jdks�t‚|d jdks¢t‚d S )Né<   r!   r   )r   r   r   Úminuter2   r   r   ©r:   rK   r&   rL   r   r   r   Ú'test_quantity_initialized_with_quantityÈ  s    r?  c                  C   sZ   dt j d } | jdkst‚| jt jt j ks2t‚| d }|jt jt j t j ksVt‚d S )Nr?   rB   r!   r$   )r   r$   r2   r   r   rB   ©r:   rK   r   r   r   Útest_quantity_string_unitØ  s
    rA  c                	   C   s$   t  t¡� dtj  W 5 Q R X d S )NÚfoo©r   r   r(   r   r$   r   r   r   r   Ú!test_quantity_invalid_unit_stringá  s    rD  c                  C   s<   t  dt j¡} d| _t| jdƒ t| jdƒ t| jdƒ d S )Nr?   TrÁ   gÁm²Ì‹®‚<)r   r   r   Ú _include_easy_conversion_membersr   r‘   r    ÚparsecrÓ   r   r   r   Útest_implicit_conversionæ  s
    rG  c               	   C   s–   t  dt j¡} d| _d| _t| ƒ}d|ks.t‚d|ks:t‚d|ksFt‚d|ksRt‚d|ks^t‚d	|ksjt‚d
|ksvt‚t t	¡� | j
 W 5 Q R X d S )Nr?   Té*   r‘   r    rF  rB  r¸   r2   Ú__setattr__)r   r   r   rE  rB  Údirr   r   r   r8   Úl)r5   Úattrsr   r   r   Ú%test_implicit_conversion_autocompleteï  s    rM  c                  C   sV   ddgt j } t| ƒst‚tt| ƒƒ}|dt j ks8t‚t|ƒrDt‚t tt|¡ dS )z‚Regressiont 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   r   ÚnextÚiterr   r   r   r@  r   r   r   Útest_quantity_iterability  s    rP  c                  C   s@  t jt dddgdddgg¡t jd�} |  ¡ }t | j|jk¡sDt‚| j	|j	ksTt‚| j
|j
ksdt‚| j|jk	stt‚| jdd	�}|jd
 sŽt‚t | j|jk¡s¤t‚| j	|j	ks´t‚| j
|j
ksÄt‚| j|jk	sÔt‚| jdd	�}|jd sît‚t | j|jk¡�st‚| j	|j	k�st‚| j
|j
k�s*t‚| j|jk	�s<t‚d S )Nr?   r@   ry   r³   r…   r.  r   rk   rh   rl   rg   rj   )r   r   r0   rE   r$   rW   r~   r2   r   r   r>   rn   r>  r   r   r   r]     s$    &r]   c                  C   s€   t jt dddg¡t jd�} t | ¡}t|t jƒs6t‚t 	| j
|j
k¡sLt‚| j|jks\t‚| j|jkslt‚| j
|j
k	s|t‚d S )Nr?   r@   ry   r   )r   r   r0   rE   r$   rW   Údeepcopyr   r   r~   r2   r   r>   r@  r   r   r   Útest_deepcopy+  s    
rR  c                   C   sF   ddt j kst‚t d¡dt j ks*t‚dt j t d¡ksBt‚dS )z˜
    A regression test to ensure that numpy scalars are correctly compared
    (which originally failed due to the lack of ``__array_priority__``).
    rr   rV   N)r   r$   r   r0   Zint64r   r   r   r   Útest_equality_numpy_scalar7  s    rS  c                  C   s\   t  d¡tj } t t | ¡¡}t  | j|jk¡s6t	‚| j
 |j
¡sHt	‚| j
|j
ksXt	‚dS )z+
    Testing pickleability of quantity
    rr   N)r0   rY   r   r$   ÚpickleÚloadsÚdumpsr~   r2   r   r   ré   r@  r   r   r   Útest_quantity_pickelabilityA  s
    rW  c               	   C   sÖ  t  d¡} | jt jkst‚| jdks(t‚t  d¡} | jt jt j ksHt‚| jdksVt‚t  | ¡t  d¡ksnt‚t  d¡} | t  dt j¡ksŽt‚t  d¡} | t  dt j	¡ks®t‚t  d	¡} | t  dt j	¡ksÎt‚t  d
¡} | t  dt j	¡ksît‚t  d¡} | t  dt j	¡k�st‚t  dt j¡} | t  dt j¡k�s6t‚t  dt j¡} | jdk�sTt‚| jt jk�sft‚t  d¡} | t  dt j
¡k�sˆt‚t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  dg¡ W 5 Q R X t t¡� t  t dg¡¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X t t¡� t  d¡ W 5 Q R X d S )Nr  r?   z1.5 m/sç      ø?z.5 mr9  z-1e1kmiöÿÿÿz-1e+1kmz+.5kmz+5e-1kmÚ5r…   z5 kmg     ˆ³@Z5Emr/   r$   z	1.2.3 degz1+degz1-2degz
1.2e-13.3mZ5Ez5 foo)r   r   r   r°   r   r2   r$   rB   r"   re   ZEmr   r   r   r0   rE   r(   rÓ   r   r   r   Ú(test_quantity_initialisation_from_stringO  sX    







rZ  c               	   C   s6   t  d¡tj } t t¡� t  | | ¡ W 5 Q R X d S )Nrr   )r0   rY   r   r$   r   r   r   Zbitwise_andr+  r   r   r   Útest_unsupported  s    r[  c                  C   s   dt j } | jt jkst‚d S )Nr?   )r   r¹   r   r   rÓ   r   r   r   Útest_unit_identity†  s    
r\  c                  C   sH   t  ddg¡tj } |  tj¡}| jd dks2t‚|jd dksDt‚d S )Nrä   rå   r   r!   )r0   rE   r   r$   r¸   re   r2   r   r@  r   r   r   Útest_quantity_to_view‹  s    r]  c                	   C   s(   t  t¡� dtj d  W 5 Q R X d S )Nr…   )r!   rs   rC  r   r   r   r   Útest_quantity_tuple_power’  s    r^  c                  C   sJ   dt jd  tddƒ } | jdks&t‚| jt jks6t‚| jjdksFt‚d S )Ng      9@rs   r!   r…   Úf)r   r$   r   r2   r   r   r>   ÚkindrÓ   r   r   r   Útest_quantity_fraction_power—  s    ra  c               	   C   sØ  ddl m}  | t d¡t d¡gddgd�}tj|d _t |d ¡}|jtjksVt‚t	|j
|d ƒ t |d ¡}|jtjks„t‚t	|j
|d ƒ t |d tj¡}|jtjks¶t‚t	|j
|d d ƒ t |d tj¡}|jtjksìt‚t	|j
|d ƒ t tjtjd  ¡|d _t |d ¡}|jt tjtjd  ¡k�sHt‚t	|j
|d ƒ tj|d d	d
�}t|tjƒ�s|t‚|jt tjtjd  ¡k�sžt‚t	|j
|d ƒ t tj¡� t |d ¡ W 5 Q R X 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š   r[   rÊ   )ÚdataÚnamesrä   rs   Trc   N)Úastropy.tablerb  r0   rY   r   r3  r   r   r   r   r2   r°   r¼   Údexr    rB   ÚDexr   r   r   ÚUnitTypeError)rb  Útr&  ZqbZqapZqbpZfqZfq2r   r   r   Útest_quantity_from_table   s2     ""rj  c                  C   sä   ddl m} m} | t d¡tjd�}t |¡}|d d… |d d…< |ƒ }t d¡tj |d< t d¡tj |d< t	|d ƒ| ks„t
‚t |d |d g¡jtj }ddd	g}||df j|d | jksÌt
‚|d | ||df< d S )
Nr   )ÚColumnrb  rV   r   rs   rr   rÕ   r/  r®   )re  rk  rb  r0   rY   r   r   r   Úonesrd   r   ZvstackÚTr   )rk  rb  rË   r5   ri  ZxyÚiir   r   r   Ú$test_assign_slice_with_quantity_likeÌ  s    

 ro  c               	   C   s¨  ddgt j } |  ddt j ¡}t |jdddgk¡s:t‚|jt jksJt‚|j	j
dksZt‚ttdƒr¦|  dddgt j ¡}t |jddddgk¡s–t‚|jt jks¦t‚t t j¡� |  ddt j ¡ W 5 Q R X ddgd	d
ggt j } | jdddgt j dd�}t |jddgddgd	d
ggk¡�s(t‚| jdddgt j dd�}t |jdddgd	dd
ggk¡�sht‚| jddt j dd�}t |jdddgd	dd
ggk¡�s¤t‚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!   rs   r   rä   r_  z1.8.0rå   rX  rt   r®   rr   é   )ZaxisN)r   r$   Úinsertre   r0   r~   r2   r   r   r>   r`  r	   r   r   r†   rB   )r5   rK   r   r   r   Útest_insertâ  s$    
(&rr  c                  C   sB   t jdtj dtj gtd�} t| ƒdks.t‚t| ƒdks>t‚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!   rs   rA   z7array([<Quantity 1. m>, <Quantity 2. s>], dtype=object)z![<Quantity 1. m> <Quantity 2. s>]N)	r0   rE   r   r$   rB   r#   rý   r   r  )r[   r   r   r   Útest_repr_array_of_quantity  s    	rs  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestSpecificTypeQuantityc                 C   sH   G dd„ dt jƒ}G dd„ d|ƒ}G dd„ d|ƒ}|| _|| _|| _d S )Nc                   @   s   e Zd ZejZdS )z5TestSpecificTypeQuantity.setup_method.<locals>.LengthN)r_   r`   ra   r   r$   Z_equivalent_unitr   r   r   r   ÚLength  s   ru  c                   @   s   e Zd ZejZdS )z6TestSpecificTypeQuantity.setup_method.<locals>.Length2N)r_   r`   ra   r   r$   Ú_default_unitr   r   r   r   ÚLength2  s   rw  c                   @   s   e Zd ZejZdS )z6TestSpecificTypeQuantity.setup_method.<locals>.Length3N)r_   r`   ra   r   r$   Ú_unitr   r   r   r   ÚLength3  s   ry  )r   ZSpecificTypeQuantityru  rw  ry  )r   ru  rw  ry  r   r   r   Úsetup_method  s    z%TestSpecificTypeQuantity.setup_methodc              	   C   sÞ   |   t d¡tj ¡}t|ƒ| j ks(t‚t tj	¡� |   t d¡tj
 ¡ W 5 Q R X t tj	¡� |   t d¡¡ W 5 Q R X |  t d¡¡}t|ƒ| jks t‚|j| jjks²t‚t tj	¡� |  t d¡¡ W 5 Q R X d S )NrV   r…   )ru  r0   rY   r   re   rd   r   r   r   rh  r¹   rw  rv  ry  )r   rK  Úl2r   r   r   Útest_creation"  s     z&TestSpecificTypeQuantity.test_creationc              	   C   sÆ   t  d¡tj  | j¡}t|ƒ| jks*t‚t 	tj
¡� t  d¡tj  | j¡ W 5 Q R X t  d¡ | j¡}t|ƒ| jks~t‚|jd ksŒt‚t  d¡ | j¡}t|ƒ| jks°t‚|j| jjksÂt‚d S )Nr…   )rs   rs   )r0   rY   r   re   r}   ru  rd   r   r   r   rh  rB   rx  rl  ry  r   )r   rK  ÚvÚl3r   r   r   Ú	test_view2  s    "z"TestSpecificTypeQuantity.test_viewc                 C   s®   |   t d¡tj ¡}|dtj  }t|ƒ| j ks6t‚dtj | }t|ƒ| j ksVt‚|| }t|ƒ| j kspt‚|dtj  }t|ƒtj	ks�t‚|| }t|ƒtj	ksªt‚d S )Nr…   r?   )
ru  r0   rY   r   r    r$   rd   r   re   r   )r   rK  Zsum1Zsum2Zsum3Zres1Zres2r   r   r   Ú&test_operation_precedence_and_fallback@  s    z?TestSpecificTypeQuantity.test_operation_precedence_and_fallbackN)r_   r`   ra   rz  r|  r  r€  r   r   r   r   rt    s   rt  c                  C   sh   G dd„ dt jƒ} t  dt j¡}| |_t  d|¡}t|ƒt jksDt‚t jd|dd�}t|ƒ| ksdt‚d S )Nc                   @   s   e Zd ZdS )z,test_unit_class_override.<locals>.MyQuantityNr^   r   r   r   r   Ú
MyQuantityO  s   r�  Zmy_degr?   Trc   )r   r   r"   rè   Z_quantity_classrd   r   )r�  Zmy_unitr:   rK   r   r   r   Útest_unit_class_overrideN  s    r‚  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚQuantityMimicc                 C   s   || _ || _d S r¤   )r2   r   )r   r2   r   r   r   r   Ú__init__[  s    zQuantityMimic.__init__c                 C   s   t  | j¡S r¤   )r0   rE   r2   r)   r   r   r   Ú	__array___  s    zQuantityMimic.__array__N)r_   r`   ra   r„  r…  r   r   r   r   rƒ  Z  s   rƒ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚQuantityMimic2c                 C   s   t  | j| j¡ |¡S r¤   )r   r   r2   r   r¸   ©r   r   r   r   r   r¸   d  s    zQuantityMimic2.toc                 C   s   t  | j| j¡ |¡S r¤   )r   r   r2   r   rˆ   r‡  r   r   r   rˆ   g  s    zQuantityMimic2.to_valueN)r_   r`   ra   r¸   rˆ   r   r   r   r   r†  c  s   r†  c                   @   sL   e Zd ZdZej deef¡dd„ ƒZ	ej deef¡dd„ ƒZ
dd„ Zd	S )
ÚTestQuantityMimicsz5Test Quantity Mimics that are not ndarray subclasses.ÚMimicc                 C   s~   t  d¡}||tjƒ}t |¡}|jtjks0t‚t  |j|k¡sDt‚t |tj	¡}|jtj	ksbt‚t  |jd| k¡szt‚d S )NrV   rÁ   )
r0   rY   r   r$   r   r   r   r~   r2   r    )r   r‰  r2   Úmimicr5   rK   r   r   r   Útest_mimic_inputn  s    

z#TestQuantityMimics.test_mimic_inputc                 C   sv   |ddgt jƒ}t  t d¡t j¡}||dd …< t |d d… jt d¡k¡sRt‚t |dd … jddgk¡srt‚d S )Nr?   r@   rV   r‚   r�   g      Y@rë   )	r   r$   r   r0   rY   r    r~   r2   r   )r   r‰  rŠ  r5   r   r   r   Útest_mimic_settingy  s
    "z%TestQuantityMimics.test_mimic_settingc              	   C   sî   t ddgt tjtjd  ¡ƒ}t |¡}t|tjƒs:t‚|jt tjtjd  ¡ksZt‚t	 
|jddgk¡srt‚tj|dd�}t|tjƒs�t‚|jt tjtjd  ¡ks°t‚t	 
|jddgk¡sÈt‚t tj¡� t |¡ W 5 Q R X d S )Nr?   r@   rs   Trc   )rƒ  r   rf  r    rB   rg  r   r   r   r0   r~   r2   r   r   r   rh  )r   rŠ  r÷   r5   r   r   r   Útest_mimic_function_unit�  s     
  z+TestQuantityMimics.test_mimic_function_unitN)r_   r`   ra   Ú__doc__r   rÎ   Zparametrizerƒ  r†  r‹  rŒ  r�  r   r   r   r   rˆ  k  s   


rˆ  c                  C   s:   t jjddddgtj ddddgd�} t| ƒ t| ƒ dS )	z5Ensure we don't break masked Quantity representation.r!   rs   rt   r®   TF)ÚmaskN)r0   ÚmarE   r   rº   r  rý   )Zmasked_quantityr   r   r   Útest_masked_quantity_str_repr�  s    &r‘  c                   @   s(   e Zd Zedd„ ƒZdd„ Zdd„ ZdS )Ú!TestQuantitySubclassAboveAndBelowc                 C   sP   G dd„ dt jƒ}|| _tdtj|ftdd�ƒ| _td|tjftdd�ƒ| _d S )Nc                       s   e Zd Z‡ fdd„Z‡  ZS )z>TestQuantitySubclassAboveAndBelow.setup_class.<locals>.MyArrayc                    s.   t ƒ j}|d k	r||ƒ t|dƒr*|j| _d S )NÚmy_attr)ÚsuperÚ__array_finalize__rT   r“  )r   rÞ   Zsuper_array_finalize©Ú	__class__r   r   r•  œ  s
    
zQTestQuantitySubclassAboveAndBelow.setup_class.<locals>.MyArray.__array_finalize__)r_   r`   ra   r•  Ú__classcell__r   r   r–  r   ÚMyArray›  s   r™  ÚMyQuantity1r  )r“  ÚMyQuantity2Ú2)	r0   r|   r™  rd   r   r   Údictrš  r›  )r   r™  r   r   r   Úsetup_class™  s    z-TestQuantitySubclassAboveAndBelow.setup_classc                 C   s|   |   dtj¡}t|| j ƒst‚|jdks,t‚|jtjks<t‚|  dtj¡}t|| jƒsZt‚|jdksht‚|jtjksxt‚d S ©Nrr   r  rœ  )rš  r   r$   r   r   r“  r   r›  )r   Úmq1Úmq2r   r   r   Ú
test_setup§  s    z,TestQuantitySubclassAboveAndBelow.test_setupc                 C   s°   |   dtj¡}|  |¡}t|| jƒs(t‚t|| j ƒr8t‚|jdksFt‚|jtjksVt‚|  dtj¡}|   |¡}t|| j ƒs~t‚t|| jƒrŽt‚|jdksœt‚|jtjks¬t‚d S rŸ  )rš  r   r$   r›  r   r   r“  r   )r   r   Zmq12r¡  Zmq21r   r   r   Útest_attr_propagation±  s    

z7TestQuantitySubclassAboveAndBelow.test_attr_propagationN)r_   r`   ra   Úclassmethodrž  r¢  r£  r   r   r   r   r’  ˜  s   

r’  )HrŽ  rW   rI   r1  rT  Ú	fractionsr   Únumpyr0   r   Znumpy.testingr   r   r   Zastropyr   r   r   r   Zastropy.utilsr   r	   Zastropy.utils.exceptionsr
   r   r   r�   rÐ   rÔ   rÖ   rÙ   rÝ   rç   rê   rð   rñ   rò   rú   r,  r-  r6  r7  r8  r:  r;  r?  rA  rD  rG  rM  rP  r]   rR  rS  rW  rZ  r[  r\  r]  r^  ra  rj  ro  rr  rs  rt  r‚  rƒ  r†  rˆ  r‘  r’  r   r   r   r   Ú<module>   s€     I  [E +U
		
0	,#;	$	