U
    e»{j6v  ã                   @   sR  d Z ddlZddlZddlm  mZ ddl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mZmZ ddlmZ ddlmZ dd	lmZ G d
d„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ dƒZ&G d d!„ d!eƒZ'dS )"z'
Test Structured units and quantities.
é    N)Úassert_array_equal)Úunits)Úcheck_pickling_recoveryÚpickle_protocol)ÚQuantityÚStructuredUnitÚUnitÚUnitBase)Ú_structured_unit_like_dtype)ÚNUMPY_LT_1_21_1)ÚMaskedc                   @   s   e Zd Zedd„ ƒZdS )ÚStructuredTestBasec                 C   sš   t  ddg¡| _t  d| jfdg¡| _tj| _tjtj | _tj| _	t  ddg¡| _t  d| jfdg¡| _t  
dddg| j¡| _t  
dd	d
g| j¡| _d S )N)ÚpÚf8)Úvr   Úpv©Útr   )ç      ð?g      Ð?)ç       @ç      à?)ç      @g      è?))g      @g      @g        ))ç      @r   r   ))g      @g      @r   )ÚnpÚdtypeÚpv_dtypeÚ
pv_t_dtypeÚuÚkmÚp_unitÚsÚv_unitÚt_unitÚarrayr   Úpv_t©Úself© r'   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/tests/test_structured.pyÚsetup_class   s    ýúzStructuredTestBase.setup_classN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr)   r'   r'   r'   r(   r      s   r   c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚStructuredTestBaseWithUnitsc                    s6   t ƒ  ¡  t| j| jfdƒ| _t| j| jfdƒ| _d S )N©r   r   ©r   r   )Úsuperr)   r   r   r!   Úpv_unitr"   Ú	pv_t_unitr%   ©Ú	__class__r'   r(   r)   *   s    
z'StructuredTestBaseWithUnits.setup_class)r*   r+   r,   r-   r)   Ú__classcell__r'   r'   r4   r(   r.   )   s   r.   c                   @   sÌ   e Zd Zdd„ Zdd„ Zdd„ Zej ddd	d
gfdgddd	d
gfdgddd	d
ggfdgddgddgdddgfdgg¡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 )*ÚTestStructuredUnitBasicsc                 C   sT  t | j| jfdƒ}|d | jks$t‚|d | jks6t‚t || jfdƒ}t|d t ƒsXt‚|d d | jksnt‚|d d | jks„t‚|d | jks–t‚|d |ks¦t‚t ddƒ}t|d tƒsÂt‚t|d tƒsÔt‚t ddƒ}|d tjksðt‚|d tjtj	 k�s
t‚t dƒ}|j
d	k�s"t‚|d
 tjk�s6t‚|d tjtj	 k�sPt‚d S )Nr/   r   r   r0   r   r   ©ÚAUúAU/dayú
AU, AU/day)Úf0Úf1r<   r=   )r   r   r!   ÚAssertionErrorr"   Ú
isinstancer	   r   r9   ÚdayÚfield_names)r&   ÚsuÚsu2Úsu3Úsu4Úsu5r'   r'   r(   Útest_initialization_and_keying2   s&    

z7TestStructuredUnitBasics.test_initialization_and_keyingc                 C   s²  t | j| jf| jfdƒ}t|d t ƒs*t‚|d d | jks@t‚|d d | jksVt‚|d | jksht‚t | j| jf| jfddgdfƒ}t|d t ƒsšt‚|d d | jks°t‚|d d | jksÆt‚|d | jksØt‚t dddgdfƒ}t|d t ƒsüt‚|d d tjk�st‚|d d tjtj k�s2t‚|d tj	k�sFt‚t d	dƒ}t|d t ƒ�sdt‚|d d tjk�s|t‚|d d tjtj k�sšt‚|d tj	k�s®t‚d S )
N)r/   r   r   r   r   r   Zp_vr/   )r8   Úyrú(AU, AU/day), yr)
r   r   r!   r"   r?   r>   r   r9   r@   rH   )r&   rB   rC   rD   rE   r'   r'   r(   Útest_recursive_initializationG   s4     ÿ 
ÿ
z6TestStructuredUnitBasics.test_recursive_initializationc              	   C   s8   t ddƒ}|jddddddd	d
gfgfgdfks4t‚d S )Nz!(yr,(AU,AU/day,(km,(day,day))),m))r   )r   r   )Úh©Zd1Zd2Úlr   Zpvhd1d2r   r   Zhd1d2rK   Zd1d2rL   rM   )r   rA   r>   ©r&   rB   r'   r'   r(   Ú%test_extreme_recursive_initializationa   s&    þ ÿÿÿÿÿùz>TestStructuredUnitBasics.test_extreme_recursive_initializationznames, invalidr   r   r   z
['p', 'v']r   z['pv', 'p', 'v']z['pv', ['p', 'v'])r   r'   z())r   )r   NÚNone)r   Ú z''c              	   C   s:   t  t¡�}td|ƒ W 5 Q R X d|› �t|ƒks6t‚d S )Nz(yr,(AU,AU/day)zinvalid entry )ÚpytestÚraisesÚ
ValueErrorr   Ústrr>   )r&   ÚnamesÚinvalidÚexcr'   r'   r(   Ú-test_initialization_names_invalid_list_errorsp   s    zFTestStructuredUnitBasics.test_initialization_names_invalid_list_errorsc                 C   s&   t | j| jfdƒ}t|ƒ|ks"t‚d S )Nr/   )r   r   r!   r   r>   rN   r'   r'   r(   Útest_looks_like_unit€   s    z-TestStructuredUnitBasics.test_looks_like_unitc                 C   s&  t d| jƒ}t|d tƒst‚t|d tƒs0t‚|d tjksBt‚|d tjtj ksZt‚t d| jƒ}t|d t ƒsxt‚t|d d tƒsŽt‚t|d tƒs t‚|d d tj	tj
 ks¼t‚t d| jƒ}t|d t ƒsÚt‚t|d d tƒsðt‚t|d tƒ�st‚|d d tj	tj
 k�s"t‚d S )N©r9   úAU/dr   r   ©©r   zkm/srH   r   r   ú(km, km/s), yr)r   r   r?   r	   r>   r   r9   r@   r   r   r    rN   r'   r'   r(   Ú test_initialize_with_float_dtype„   s    z9TestStructuredUnitBasics.test_initialize_with_float_dtypec                 C   sT   t ddd�}t d|d�}|jdks&t‚|d tjks8t‚|d tjtj ksPt‚d S )Nr[   r/   ©rV   r^   r   r   )r   rA   r>   r   r   r    )r&   rB   rC   r'   r'   r(   Ú.test_initialize_with_structured_unit_for_names•   s
    zGTestStructuredUnitBasics.test_initialize_with_structured_unit_for_namesc                 C   sz   t ddƒ}t|t ƒst‚t|d tƒs*t‚|d tjks<t‚t dƒ}t|t ƒsRt‚t|d tƒsdt‚|d tjksvt‚d S )Nr9   r   r<   )r   r?   r>   r	   r   r9   rN   r'   r'   r(   Útest_initialize_single_fieldœ   s    
z5TestStructuredUnitBasics.test_initialize_single_fieldc                 C   sl   t d| jƒ}|t d| jƒks t‚|t d| jƒks4t‚|t dƒksDt‚|t ddd�ksXt‚|t dƒksht‚d S )Nr[   )Úmr\   ©ÚqÚwra   )rd   zm/s)r   r   r>   rN   r'   r'   r(   Útest_equality¦   s    z&TestStructuredUnitBasics.test_equalityc                 C   sr  t dƒ}t|tƒst‚t|d tƒs(t‚t|d tƒs:t‚|d tjksLt‚|d tjtj ksdt‚t dƒ}t|tƒszt‚|tdƒksŠt‚t dƒ}t|tƒs t‚||ks¬t‚t dƒ}t|tƒsÂt‚|tdƒksÒt‚t d	ƒ}t|tƒsèt‚|ttjfƒksüt‚t d
ƒ}t|tƒ�st‚|ttj	tj
ffƒk�s0t‚t dƒ}|ttjt tjd d ƒtjtjtj ffƒk�snt‚d S )NzAU, AU/dr<   r=   zAU, AU/d, yr)r9   r\   rH   z(AU, AU/d, yr)r_   r]   zkm,z(m,s),zMsun, 0.5rad^2, (au, au/day)é   )r   r?   r   r>   r	   r   r9   r@   r   rd   r    ZMsunZrad)r&   rB   rC   Zsu2arD   rE   rF   Zldbody_unitr'   r'   r(   Útest_parsing¯   s2    &ÿz%TestStructuredUnitBasics.test_parsingc                 C   sJ   t tjtjtj fƒ}d}|jdd�|ks.t‚d}|jdd�|ksFt‚d S )Nz&$(\mathrm{km}, \mathrm{\frac{km}{s}})$Úlatex)Úformatz$$(\mathrm{km}, \mathrm{km\,s^{-1}})$Zlatex_inline)r   r   r   r    Z	to_stringr>   )r&   rB   Z	latex_strr'   r'   r(   Útest_to_stringÊ   s
    z'TestStructuredUnitBasics.test_to_stringc                 C   sD   t tjtjtj ftjfƒ}t|ƒdks,t‚tt|ƒƒ|ks@t‚d S )Nz((km, km / s), yr))r   r   r   r    rH   rU   r>   r   rN   r'   r'   r(   Útest_strÑ   s    z!TestStructuredUnitBasics.test_strc                 C   sD   t tjtjtj ftjfƒ}t|ƒdks,t‚tt|ƒƒ|ks@t‚d S )NzUnit("((km, km / s), yr)"))r   r   r   r    rH   Úreprr>   ÚevalrN   r'   r'   r(   Ú	test_reprÖ   s    z"TestStructuredUnitBasics.test_reprN)r*   r+   r,   rG   rJ   rO   rR   ÚmarkÚparametrizerY   rZ   r`   rb   rc   rh   rj   rm   rn   rq   r'   r'   r'   r(   r7   1   s.   úþ

	r7   c                   @   s4   e Zd Zdd„ Zdd„ Zejjedd�dd„ ƒZ	d	S )
ÚTestStructuredUnitsCopyPicklec                 C   s>   t   | j¡}|| jk	st‚|| jks(t‚|j| jjks:t‚d S ©N)Úcopyr3   r>   Ú_units©r&   Zsu_copyr'   r'   r(   Ú	test_copyÝ   s    z'TestStructuredUnitsCopyPickle.test_copyc                 C   s>   t  | j¡}|| jk	st‚|| jks(t‚|j| jjk	s:t‚d S ru   )rv   Údeepcopyr3   r>   rw   rx   r'   r'   r(   Útest_deepcopyã   s    z+TestStructuredUnitsCopyPickle.test_deepcopyz$https://stackoverflow.com/q/69571643)Úreasonc                 C   s   t | j|ƒ d S ru   )r   r3   )r&   r   r'   r'   r(   Útest_pickleé   s    z)TestStructuredUnitsCopyPickle.test_pickleN)
r*   r+   r,   ry   r{   rR   rr   Zskipifr   r}   r'   r'   r'   r(   rt   Ü   s   rt   c                   @   s^   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
eg¡d
d„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestStructuredUnitAsMappingc                 C   s(   t | jƒdkst‚t | jƒdks$t‚d S )Nri   )Úlenr2   r>   r3   r%   r'   r'   r(   Útest_lenï   s    z$TestStructuredUnitAsMapping.test_lenc                 C   s"   t | j ¡ ƒ}|ddgkst‚d S )Nr   r   )Úlistr3   Úkeysr>   )r&   Zslvr'   r'   r(   Ú	test_keysó   s    z%TestStructuredUnitAsMapping.test_keysc                 C   s"   | j  ¡ }|| j| jfkst‚d S ru   )r3   Úvaluesr2   r"   r>   )r&   r„   r'   r'   r(   Útest_values÷   s    
z'TestStructuredUnitAsMapping.test_valuesc                 C   s.   | j j}t|tƒst‚|ddgdfks*t‚d S )Nr   r/   r   )r3   rA   r?   Útupler>   )r&   rA   r'   r'   r(   Útest_field_namesû   s    z,TestStructuredUnitAsMapping.test_field_namesÚiterablec                 C   s0   || j ƒ}t||ƒst‚||ddgƒks,t‚d S )Nr   r   )r2   r?   r>   )r&   rˆ   Úslr'   r'   r(   Útest_as_iterable   s    
z,TestStructuredUnitAsMapping.test_as_iterablec                 C   s$   t | jƒ}|| j| jdœks t‚d S )Nr0   )Údictr3   r2   r"   r>   )r&   Úsdr'   r'   r(   Útest_as_dict  s    
z(TestStructuredUnitAsMapping.test_as_dictc                 C   s.   d| j kst‚d| j kst‚d| j ks*t‚d S )Nr   r   r   )r2   r>   r%   r'   r'   r(   Útest_contains
  s    z)TestStructuredUnitAsMapping.test_containsc              	   C   s*   t jtdd�� tj| jd< W 5 Q R X d S )Nzitem assignment©Úmatchr   )rR   rS   Ú	TypeErrorr   ZGyrr3   r%   r'   r'   r(   Útest_setitem_fails  s    z.TestStructuredUnitAsMapping.test_setitem_failsN)r*   r+   r,   r€   rƒ   r…   r‡   rR   rr   rs   r�   ÚsetrŠ   r�   rŽ   r’   r'   r'   r'   r(   r~   î   s   
r~   c                   @   sD   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S )ÚTestStructuredUnitMethodsc                 C   s4  | j  ¡ }t|ƒdkst‚|jjdks*t‚| j d  ¡ }| j d  ¡ }t ||fddg¡d }||ksjt‚|t ||fd¡d ks†t‚|d |ks–t‚|d |ks¦t‚|d	 |ks¶t‚|d
 |ksÆt‚| j ¡ }| j	 ¡ }|t ||fd¡d ksöt‚|d |k�st‚|d |k�st‚|d d
 |k�s0t‚d S )Nri   r/   r   r   )r   ÚO)r   r•   r'   úO,Or   é   r   r   )
r2   Z_get_physical_type_idr   r>   r   rV   r   r#   r3   r"   )r&   Zpv_ptidZp_ptidZv_ptidÚexpectedZ	pv_t_ptidZt_ptidr'   r'   r(   Útest_physical_type_id  s$    


z/TestStructuredUnitMethods.test_physical_type_idc                 C   sH   | j j}|t dd¡d ks t‚| jj}|t |dfd¡d ksDt‚d S )N)ÚlengthÚspeedr–   r'   Útime)r2   Zphysical_typer   r#   r>   r3   )r&   Zpv_ptZpv_t_ptr'   r'   r(   Útest_physical_type-  s    z,TestStructuredUnitMethods.test_physical_typec                 C   s0   | j j}|| j kst‚|d d jdks,t‚d S ©Nr   r   iè  )r3   Úsir>   Úscale)r&   Zpv_t_sir'   r'   r(   Útest_si4  s    z!TestStructuredUnitMethods.test_sic                 C   s0   | j j}|| j kst‚|d d jdks,t‚d S )Nr   r   i † )r3   Úcgsr>   r    )r&   Zpv_t_cgsr'   r'   r(   Útest_cgs9  s    z"TestStructuredUnitMethods.test_cgsc                 C   s$   | j  ¡ }|d d jdks t‚d S rž   )r3   Z	decomposer    r>   )r&   Zpv_t_decomposer'   r'   r(   Útest_decompose>  s    
z(TestStructuredUnitMethods.test_decomposec                 C   st   | j  d¡st‚| j  d¡r t‚| j  d¡r0t‚tddd�}|j| j jksNt‚| j  |¡s^t‚tj | j ¡rpt‚d S )Nr8   rd   )r9   r9   zm,m/sre   ra   )r2   Zis_equivalentr>   r   rA   r   rd   )r&   Zpv_altr'   r'   r(   Útest_is_equivalentB  s    z,TestStructuredUnitMethods.test_is_equivalentc                 C   sŠ  | j  d| j¡}t|tjƒs t‚|j| jjks2t‚t |d t	j
 | jd | j k¡sZt‚t |d t	j
 t	j | jd | j k¡sˆt‚t| j| jfdƒ}| d| j¡}|jjdks¸t‚|j| jjksÊt‚| j d| j¡}t|tjƒsêt‚|j| jjksüt‚t |d d t	j
 | jd d | j k¡�s.t‚t |d d t	j
 t	j | jd d | j k¡�sft‚t |d	 t	j | jd	 | j k¡�s�t‚| j dd
¡}|d d | j dd¡k�s¾t‚|d d | j dd¡k�sÞt‚|d	 | j dd¡k�sút‚| j dd
dg¡}t |d d | j dddg¡k¡�s6t‚t |d d | j dddg¡k¡�s`t‚t |d	 | j dddg¡k¡�s†t‚d S )Nr8   r   r   )ÚpositionÚvelocity)ZMmzmm/sr/   )r8   ÚMyrr   r   ))r   çš™™™™™¹?ç      $@r9   r   r:   r©   r¨   rª   ))r   çš™™™™™É?ç      4@r   r«   r¬   )r2   Útor   r?   r   Úndarrayr>   r   Úallr   r9   r   r@   r!   r   rV   r3   r$   r¨   r"   )r&   Úpv1rC   Úpv2Zpv_t1Zpv_t2Zpv_t3r'   r'   r(   Útest_conversionM  s8    (.2*ÿ
*   ÿ**z)TestStructuredUnitMethods.test_conversionN)
r*   r+   r,   r™   r�   r¡   r£   r¤   r¥   r²   r'   r'   r'   r(   r”     s   r”   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestStructuredUnitArithmaticc              	   C   sâ   | j tj }t|tƒst‚|jdks(t‚|d | jtj ks@t‚|d | j	tj ksXt‚tj| j  }||kspt‚| j d }||ks†t‚d| j  }||ksœt‚t
 t¡� | j | j   W 5 Q R X t
 t¡� d| j   W 5 Q R X d S )Nr/   r   r   Úaur9   zs,s)r2   r   r´   r?   r   r>   rA   r   r9   r!   rR   rS   r‘   )r&   Zpv_times_auZau_times_pvZpv_times_au2Zau_times_pv2r'   r'   r(   Útest_multiplicationo  s    

z0TestStructuredUnitArithmatic.test_multiplicationc              	   C   s´   | j tj }t|tƒst‚|jdks(t‚|d | jtj ks@t‚|d | jtj ksXt‚| j d }||ksnt‚t	 
t¡� d| j   W 5 Q R X t	 
t¡� tj| j   W 5 Q R X d S )Nr/   r   r   r    r   )r2   r   r    r?   r   r>   rA   r   r!   rR   rS   r‘   )r&   Zpv_by_sZpv_by_s2r'   r'   r(   Útest_division€  s    
z*TestStructuredUnitArithmatic.test_divisionN)r*   r+   r,   rµ   r¶   r'   r'   r'   r(   r³   n  s   r³   c                   @   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 ) ÚTestStructuredQuantityc              	   C   sH  t | j| jƒ}|d }t|t ƒs$t‚t|jtƒs4t‚t || jd | jd  k¡sVt‚|d }t|t ƒslt‚t|jtƒs|t‚t || jd | jd  k¡sžt‚t | j	| j
ƒ}|d }t || j	d | j
d  k¡sÖt‚|d }t|t ƒsìt‚|j| jksüt‚t t¡� t | j| j
ƒ W 5 Q R X t t¡� t | j	| jƒ W 5 Q R X d S )Nr   r   r   r   )r   r   r2   r?   r>   Úunitr	   r   r¯   r$   r3   rR   rS   rT   )r&   Úq_pvZq_pZq_vÚq_pv_tZq_tZq_pv2r'   r'   r(   rG   �  s&    """z5TestStructuredQuantity.test_initialization_and_keyingc                 C   s0   t | jdƒ}t|jtƒst‚|j| jks,t‚d S )N)r^   r    ©r   r$   r?   r¸   r   r>   r3   ©r&   rº   r'   r'   r(   Ú$test_initialization_with_unit_tuples¤  s    z;TestStructuredQuantity.test_initialization_with_unit_tuplesc                 C   s0   t | jdƒ}t|jtƒst‚|j| jks,t‚d S )Nz(km, km/s), sr»   r¼   r'   r'   r(   Útest_initialization_with_string©  s    z6TestStructuredQuantity.test_initialization_with_stringc                 C   sz   | j | j }|j| jkst‚t |j| j k¡s2t‚t || j ¡rDt‚| j| j  }|j| jks`t‚t |j|jk¡svt‚d S ru   ©r$   r3   r¸   r>   r   r¯   ÚvalueÚmay_share_memory)r&   rº   Zq_pv_t2r'   r'   r(   Ú/test_initialization_by_multiplication_with_unit®  s    zFTestStructuredQuantity.test_initialization_by_multiplication_with_unitc                 C   sH   | j | j> }|j| jkst‚t |j| j k¡s2t‚t || j ¡sDt‚d S ru   r¿   r¼   r'   r'   r(   Ú'test_initialization_by_shifting_to_unit¸  s    z>TestStructuredQuantity.test_initialization_by_shifting_to_unitc                 C   sl   t j| jd d�}t |j| jk¡s&t‚tt jj| jj	ƒ}|j
|ksFt‚|j
t  t jt jft jf¡ksht‚d S )N)r¸   )r   r   r$   r   r¯   rÀ   r>   r
   Z_default_unitr   r¸   r   Úone)r&   rº   Zexpected_unitr'   r'   r(   Ú test_initialization_without_unit¾  s     ÿz7TestStructuredQuantity.test_initialization_without_unitc                 C   sª   t | j| jƒ}|d d… }t|t ƒs(t‚|j|jks8t‚t |d |d d d… k¡sZt‚|d }t|t ƒspt‚|j|jks€t‚|jdksŽt‚|d |d d ks¦t‚d S )Nri   r   r—   r'   )	r   r$   r3   r?   r>   r¸   r   r¯   Úshape)r&   rº   Zq_pv_t01Zq_pv_t1r'   r'   r(   Útest_getitemË  s    "z#TestStructuredQuantity.test_getitemc                 C   sr   t | j| jƒ}|j}t|ƒtjks&t‚t || jk¡s:t‚|d j}t|ƒtj	ksVt‚t || jd k¡snt‚d S )Nr—   )
r   r$   r3   rÀ   Útyper   r®   r>   r¯   Úvoid)r&   rº   rÀ   Zvalue1r'   r'   r(   Ú
test_value×  s    
z!TestStructuredQuantity.test_valuec                 C   s°  t | j| jƒ}| d¡}t|t ƒs&t‚|d jtjks:t‚|d jtjtj	 ksTt‚t
 |d |d  tj¡k¡svt‚t
 |d |d  tjtj	 ¡k¡sžt‚| | j¡}|d j| jks¾t‚|d j| jksÒt‚t
 |d j| jd k¡sðt‚t
 |d j| jd k¡�st‚t
 ||¡�r"t‚| d¡}t|ƒt
jk�s@t‚t
 |d |d  tj¡k¡�sdt‚t
 |d |d  tjtj	 ¡k¡�sŽt‚|d  d¡}t|ƒt
jk�s°t‚||d k�sÂt‚t | j| jƒ}| d¡}|d d jtjk�sôt‚|d d jtjtj k�st‚|d jtjk�s*t‚t
 |d d |d d  tj¡k¡�sVt‚t
 |d d |d d  tjtj ¡k¡�sˆt‚t
 |d |d  tj¡k¡�s¬t‚d S )Nr8   r   r   r—   ))Úkpczkpc/Myrr¨   r   r   )r   r   r2   r­   r?   r>   r¸   r   r9   r@   r   r¯   r   r!   rÀ   rÁ   Zto_valuerÈ   r®   rÉ   r$   r3   rË   r¨   )r&   r¹   Úq1Úq2r°   Zpv11rº   r'   r'   r(   r²   à  s8    
"( 
$*
 ,2z&TestStructuredQuantity.test_conversionc                 C   s  t | j| jƒ}|tdƒ> }t|t ƒs(t‚|d jtjks<t‚|d jtjtj	 ksVt‚t
 |d |d  tj¡k¡sxt‚t
 |d |d  tjtj	 ¡k¡s t‚|| j> }|d j| jks¾t‚|d j| jksÒt‚t
 |d j| jd k¡sðt‚t
 |d j| jd k¡�st‚t
 ||¡�s"t‚t | j| jƒ}|d> }|d d jtjk�sRt‚|d d jtjtj k�srt‚|d jtjk�sˆt‚t
 |d d |d d  tj¡k¡�s´t‚t
 |d d |d d  tjtj ¡k¡�sæt‚t
 |d |d  tj¡k¡�s
t‚d S ©Nr8   r   r   z(kpc,kpc/Myr),Myrr   r   )r   r   r2   r   r?   r>   r¸   r   r9   r@   r   r¯   r­   r   r!   rÀ   rÁ   r$   r3   rË   r¨   )r&   r¹   rÌ   rÍ   rº   r'   r'   r(   Útest_conversion_via_lshiftþ  s*    "(
  ,2z1TestStructuredQuantity.test_conversion_via_lshiftc                 C   s¬  t | j| jƒ}| ¡ }|}|tdƒK }||k	s2t‚|d jtjksFt‚|d jtjtj	 ks`t‚t
 |d |d  tj¡k¡s‚t‚t
 |d |d  tjtj	 ¡k¡sªt‚t | j| jƒ}| ¡ }|}|dK }||k	sØt‚|d d jtjksðt‚|d d jtjtj k�st‚|d jtjk�s&t‚t
 |d d |d d  tj¡k¡�sRt‚t
 |d d |d d  tjtj ¡k¡�s„t‚t
 |d |d  tj¡k¡�s¨t‚d S rÎ   )r   r   r2   rv   r   r>   r¸   r   r9   r@   r   r¯   r­   r$   r3   rË   r¨   )r&   r¹   rÌ   Zq_linkrº   rÍ   r'   r'   r(   Útest_inplace_conversion  s(    "( ,2z.TestStructuredQuantity.test_inplace_conversionc                 C   s(   t | j| jƒ}|j}t|| d¡ƒ d S )Nz	(m,m/s),s)r   r$   r3   rŸ   r   r­   )r&   rº   Z	q_pv_t_sir'   r'   r(   r¡   -  s    zTestStructuredQuantity.test_sic                 C   s(   t | j| jƒ}|j}t|| d¡ƒ d S )Nz(cm,cm/s),s)r   r$   r3   r¢   r   r­   )r&   rº   Z
q_pv_t_cgsr'   r'   r(   r£   2  s    zTestStructuredQuantity.test_cgsc                 C   s‚  t | j| jƒ}||k}||k}t |¡s,t‚t |¡r:t‚||d k}||d k}t |dddgk¡sjt‚t ||k¡s|t‚| d¡}t ||k¡s˜t‚t ||k¡rªt‚t |jt	 
d¡ |k¡sÈt‚t |jt	 
d¡ |k¡ræt‚|dkdksöt‚d|kdk�st‚t | j| jƒ}t |d |kdddgk¡�s8t‚t |d |kdddgk¡�sZt‚||kdk�slt‚||kdk�s~t‚d S )Nr—   FTr8   r;   Úbri   )r   r   r2   r   r¯   r>   Úanyr­   rÀ   r   r   r$   r3   )r&   r¹   ÚequalÚ	not_equalZequal2Z
not_equal2rÌ   rº   r'   r'   r(   rh   7  s*    
""z$TestStructuredQuantity.test_equalityc              	   C   sÊ  t | j| jƒ}d| j |d< |d jt d| j¡ks8t‚dt 	d¡ |dd…< |d d dtj
 ksht‚|d d d	tj
 tj ksˆt‚dtj tj |d< t |d dtj tj k¡s¾t‚t tj¡� d
t 	d¡ |d< W 5 Q R X t tj¡� dtj |d< W 5 Q R X t | j| jƒ}d| j |d< |d jt d| j¡k�sHt‚dt 	d¡ |dd…< |d d dt 	d¡ k�s~t‚|d d dtj k�sšt‚d| j |d< t |d d| j k¡�sÆt‚d S )N©r   r   r—   ©r   r   r;   ri   r   r   r   r   )r   r   zAU, AU)rÕ   r   )rÖ   r   rI   r   r   r   )r   r   r2   rÀ   r   r#   r   r>   r   r   r9   r@   r   r    r¯   rR   rS   Ú
UnitsErrorr$   r3   r   rH   )r&   r¹   rº   r'   r'   r(   Útest_setitemP  s(     " z#TestStructuredQuantity.test_setitemN)r*   r+   r,   rG   r½   r¾   rÂ   rÃ   rÅ   rÇ   rÊ   r²   rÏ   rÐ   r¡   r£   rh   rØ   r'   r'   r'   r(   r·   Ž  s   
	r·   c                       sV   e Zd Ze‡ fdd„ƒZdd„ Zej de	j
e	jg¡dd„ ƒZdd	„ Zd
d„ Z‡  ZS )ÚTestStructuredQuantityFunctionsc                    s*   t ƒ  ¡  | j| j> | _| j| j> | _d S ru   )r1   r)   r   r2   r¹   r$   r3   rº   r%   r4   r'   r(   r)   h  s    
z+TestStructuredQuantityFunctions.setup_classc                 C   sB   t  | j¡}|j| jkst‚|j| jks,t‚|j| j	jks>t‚d S ru   )
r   Z
empty_liker¹   r   r   r>   r¸   r2   rÆ   r   )r&   Úzr'   r'   r(   Útest_empty_liken  s    z/TestStructuredQuantityFunctions.test_empty_likeÚfuncc                 C   sV   || j ƒ}|j| jkst‚|j| jks*t‚|j| jjks<t‚t||| jƒ| j> ƒ d S ru   )	r¹   r   r   r>   r¸   r2   rÆ   r   r   )r&   rÜ   rÚ   r'   r'   r(   Útest_zeros_ones_liket  s
    
z4TestStructuredQuantityFunctions.test_zeros_ones_likec              	   C   s,   t jtjdd�� t | j¡ W 5 Q R X d S )Nz'km / s'r�   )rR   rS   r   ZUnitConversionErrorÚrfnZstructured_to_unstructuredr¹   r%   r'   r'   r(   Útest_structured_to_unstructured|  s    z?TestStructuredQuantityFunctions.test_structured_to_unstructuredc              	   C   sH   t  dtfdtfg¡}tjtdd�� tj| j| jjd� W 5 Q R X d S )Nr=   Úf2z The length of the last dimensionr�   )r   )	r   r   ÚfloatrR   rS   rT   rÞ   Zunstructured_to_structuredr¹   )r&   r   r'   r'   r(   Útest_unstructured_to_structured„  s    z?TestStructuredQuantityFunctions.test_unstructured_to_structured)r*   r+   r,   r-   r)   rÛ   rR   rr   rs   r   Z
zeros_likeZ	ones_likerÝ   rß   râ   r6   r'   r'   r4   r(   rÙ   g  s   
rÙ   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú"TestStructuredSpecificTypeQuantityc                    s*   t ƒ  ¡  G ‡ fdd„dtjƒ}|ˆ _d S )Nc                       s   e Zd Z” jZdS )zHTestStructuredSpecificTypeQuantity.setup_class.<locals>.PositionVelocityN)r*   r+   r,   r2   Z_equivalent_unitr'   r%   r'   r(   ÚPositionVelocity’  s   rä   )r1   r)   r   ZSpecificTypeQuantityrä   )r&   rä   r4   r%   r(   r)   �  s    
z.TestStructuredSpecificTypeQuantity.setup_classc                 C   s€   |   | j| j¡}t|| j ƒs t‚t|d ƒtjks6t‚t|d | jd | jd > ƒ |   | jd¡}t|d | jd tj	> ƒ d S )Nr   ú	AU,AU/day)
rä   r   r2   r?   r>   rÈ   r   r   r   r9   )r&   r   r±   r'   r'   r(   Ú	test_init—  s    z,TestStructuredSpecificTypeQuantity.test_initc              	   C   sP   t  tj¡� |  | jd¡ W 5 Q R X t  tj¡� |  | jd¡ W 5 Q R X d S )Nr9   zAU,yr)rR   rS   r   r×   rä   r   r%   r'   r'   r(   Ú!test_error_on_non_equivalent_unit   s    zDTestStructuredSpecificTypeQuantity.test_error_on_non_equivalent_unit)r*   r+   r,   r)   ræ   rç   r6   r'   r'   r4   r(   rã   Ž  s   	rã   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestStructuredLogUnitc                 C   s(   t  ddg¡| _t  ddg| j¡| _d S )N)Úmagr   r   )r¬   rª   )g      9@g      Y@)r   r   Úmag_time_dtyper#   Úmag_timer%   r'   r'   r(   r)   ¨  s    z!TestStructuredLogUnit.setup_classc                 C   sR   t tjtjf| jƒ}|d tjks&t‚|d tjks8t‚t d¡}||ksNt‚d S )Nré   r   ú	mag(ST),s)r   r   ÚSTmagr    rê   r>   r   )r&   Zmag_time_unitZmag_time_unit2r'   r'   r(   Útest_unit_initialization¬  s
    
z.TestStructuredLogUnit.test_unit_initializationc                 C   s‚   t  d¡}| j|> }t|d t jƒs(t‚t|d t jƒs<t‚|j|ksJt‚t|d | jd t j	> ƒ t|d | jd t j
> ƒ d S )Nrì   ré   r   )r   r   rë   r?   Z	Magnituder>   r   r¸   r   rí   r    )r&   rB   rë   r'   r'   r(   Útest_quantity_initialization´  s    

z2TestStructuredLogUnit.test_quantity_initializationc                 C   sB   | j t d¡> }|j}t|d |d jƒ t|d |d jƒ d S )Nz
mag(ST),yrré   r   )rë   r   r   rŸ   r   )r&   rë   Zmag_time_sir'   r'   r(   Útest_quantity_si½  s    z&TestStructuredLogUnit.test_quantity_siN)r*   r+   r,   r)   rî   rï   rð   r'   r'   r'   r(   rè   §  s   	rè   c                       s@   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z‡  Z	S )ÚTestStructuredMaskedQuantityz6Somewhat minimal tests.  Conversion is most stringent.c                    sN   t ƒ  ¡  | j| j> | _t dddgdtfdtfg¡| _t	| j| jd�| _
d S )N)TF)FF)FTr   r   )Úmask)r1   r)   r   r2   Úqpvr   r#   ÚboolÚpv_maskr   Úmpvr%   r4   r'   r(   r)   Ç  s    
ýúz(TestStructuredMaskedQuantity.setup_classc                 C   sD   t | jtƒst‚t | jtƒs t‚t| jj| jƒ t| jj| j	ƒ d S ru   )
r?   rö   r   r>   r   r   Úunmaskedró   rò   rõ   r%   r'   r'   r(   ræ   Ô  s    z&TestStructuredMaskedQuantity.test_initc                 C   sN   | j d }t|tƒst‚t|tƒs&t‚t|j| jd ƒ t|j| j	d ƒ d S )Nr   )
rö   r?   r   r>   r   r   r÷   ró   rò   rõ   )r&   Úmpr'   r'   r(   Útest_slicingÚ  s
    
z)TestStructuredMaskedQuantity.test_slicingc                 C   sb   | j  d¡}t|tƒst‚t|tƒs(t‚t|j| j d¡ƒ t|j	| j
ƒ t || j k¡s^t‚d S )Nrå   )rö   r­   r?   r   r>   r   r   r÷   ró   rò   rõ   r   r¯   ©r&   rö   r'   r'   r(   r²   á  s    z,TestStructuredMaskedQuantity.test_conversionc                 C   sZ   | j j}t|tƒst‚t|tƒs$t‚t|j| jjƒ t|j	| j
ƒ t || j k¡sVt‚d S ru   )rö   rŸ   r?   r   r>   r   r   r÷   ró   rò   rõ   r   r¯   rú   r'   r'   r(   r¡   é  s    z$TestStructuredMaskedQuantity.test_si)
r*   r+   r,   Ú__doc__r)   ræ   rù   r²   r¡   r6   r'   r'   r4   r(   rñ   Ä  s   rñ   )(rû   rv   Únumpyr   Znumpy.lib.recfunctionsÚlibZrecfunctionsrÞ   rR   Znumpy.testingr   Zastropyr   r   Zastropy.tests.helperr   r   Zastropy.unitsr   r   r   r	   Zastropy.units.quantityr
   Zastropy.utils.compatr   Zastropy.utils.maskedr   r   r.   r7   rt   r~   r”   r³   r·   rÙ   rã   rè   rñ   r'   r'   r'   r(   Ú<module>   s2    ,&Z  Z'