a
    ߙfb=o                     @   s4  d Z ddlZddlZddlZddlmZ ddlmZ	 ddl
mZmZmZmZ ddlmZ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)StructuredUnitUnitUnitBaseQuantity)pickle_protocolcheck_pickling_recovery)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 
g d| j| _t 
g d| 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&   Blib/python3.9/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&   r3   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g d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(S ))TestStructuredUnitBasicsc                 C   sT  t | j| jfd}|d | ju s$J |d | ju s6J t || jfd}t|d t sXJ |d d | ju snJ |d d | ju sJ |d | ju sJ |d |ksJ t dd}t|d tsJ t|d tsJ t dd}|d tjksJ |d tjtj ks
J t d}|j	d	ks"J |d
 tjks6J |d tjtj ksPJ d S )Nr.   r   r   r/   r   r   AUAU/day
AU, AU/day)f0f1r;   r<   )
r   r   r    r!   
isinstancer   r   r8   dayfield_names)r%   susu2su3su4su5r&   r&   r'   test_initialization_and_keying0   s&    

z7TestStructuredUnitBasics.test_initialization_and_keyingc                 C   s  t | j| jf| jfd}t|d t s*J |d d | ju s@J |d d | ju sVJ |d | ju shJ t | j| jf| jfddgdf}t|d t sJ |d d | ju sJ |d d | ju sJ |d | ju sJ t dddgdf}t|d t sJ |d d tjksJ |d d tjtj ks2J |d tjksFJ t d	d}t|d t sdJ |d d tjks|J |d d tjtj ksJ |d tjksJ d S )
N)r.   r   r   r   r   r   Zp_vr.   )r7   yr(AU, AU/day), yr)	r   r   r    r!   r=   r   r8   r>   rF   )r%   r@   rA   rB   rC   r&   r&   r'   test_recursive_initializationE   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s4J d S )Nz!(yr,(AU,AU/day,(km,(day,day))),m))r   )r   r   )hZd1Zd2lr   Zpvhd1d2r   r   Zhd1d2rI   Zd1d2rJ   rK   )r   r?   r%   r@   r&   r&   r'   %test_extreme_recursive_initialization^   s     z>TestStructuredUnitBasics.test_extreme_recursive_initializationznames, invalidr   r   r   z
['p', 'v'])r   r   r   z['pv', 'p', 'v']r   z['pv', ['p', 'v'])r   r&   z())r   )r   NNone)r    z''c                 C   sN   t t}td| W d    n1 s*0    Y  d| t|v sJJ d S )Nz(yr,(AU,AU/day)zinvalid entry )pytestraises
ValueErrorr   str)r%   namesZinvalidexcr&   r&   r'   -test_initialization_names_invalid_list_errorsh   s    (zFTestStructuredUnitBasics.test_initialization_names_invalid_list_errorsc                 C   s&   t | j| jfd}t||u s"J d S )Nr.   )r   r   r    r   rL   r&   r&   r'   test_looks_like_unitt   s    z-TestStructuredUnitBasics.test_looks_like_unitc                 C   s&  t d| j}t|d tsJ t|d ts0J |d tjksBJ |d tjtj ksZJ t d| j}t|d t sxJ t|d d tsJ t|d tsJ |d d tjtj	 ksJ t d| j}t|d t sJ t|d d tsJ t|d tsJ |d d tjtj	 ks"J d S )Nr8   AU/dr   r   r   zkm/srF   r   r   (km, km/s), yr)
r   r   r=   r   r   r8   r>   r   r   r   rL   r&   r&   r'    test_initialize_with_float_dtypex   s    z9TestStructuredUnitBasics.test_initialize_with_float_dtypec                 C   sT   t ddd}t d|d}|jdks&J |d tjks8J |d tjtj ksPJ d S )NrX   r.   rT   r[   r   r   )r   r?   r   r   r   )r%   r@   rA   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J t|d ts*J |d tjks<J t d}t|t sRJ t|d tsdJ |d tjksvJ d S )Nr8   r   r;   )r   r=   r   r   r8   rL   r&   r&   r'   test_initialize_single_field   s    
z5TestStructuredUnitBasics.test_initialize_single_fieldc                 C   sl   t d| j}|t d| jks J |t d| jks4J |t dksDJ |t dddksXJ |t dkshJ d S )NrX   )mrY   qwr^   )ra   zm/s)r   r   rL   r&   r&   r'   test_equality   s    z&TestStructuredUnitBasics.test_equalityc                 C   sr  t d}t|tsJ t|d ts(J t|d ts:J |d tjksLJ |d tjtj ksdJ t d}t|tszJ |tdksJ t d}t|tsJ ||ksJ t d}t|tsJ |tdksJ t d	}t|tsJ |ttjfksJ t d
}t|tsJ |ttjtj	ffks0J t d}|ttj
t tjd d tjtjtj ffksnJ d S )NzAU, AU/dr;   r<   zAU, AU/d, yr)r8   rY   rF   z(AU, AU/d, yr)r\   rZ   zkm,z(m,s),zMsun, 0.5rad^2, (au, au/day)   )r   r=   r   r   r   r8   r>   r   ra   r   ZMsunZrad)r%   r@   rA   Zsu2arB   rC   rD   Zldbody_unitr&   r&   r'   test_parsing   s2    &z%TestStructuredUnitBasics.test_parsingc                 C   sD   t tjtjtj ftjf}t|dks,J tt||ks@J d S )Nz((km, km / s), yr))r   r   r   r   rF   rS   r   rL   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,J tt||ks@J d S )NzUnit("((km, km / s), yr)"))r   r   r   r   rF   reprevalrL   r&   r&   r'   	test_repr   s    z"TestStructuredUnitBasics.test_reprN)r)   r*   r+   rE   rH   rM   rP   markparametrizerV   rW   r]   r_   r`   re   rg   rh   rk   r&   r&   r&   r'   r6   .   s(   


	r6   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usJ || jks(J |j| jju s:J d S N)copyr2   _unitsr%   Zsu_copyr&   r&   r'   	test_copy   s    z'TestStructuredUnitsCopyPickle.test_copyc                 C   s>   t | j}|| jusJ || jks(J |j| jjus:J d S ro   )rp   deepcopyr2   rq   rr   r&   r&   r'   test_deepcopy   s    z+TestStructuredUnitsCopyPickle.test_deepcopyz$https://stackoverflow.com/q/69571643)reasonc                 C   s   t | j| d S ro   )r	   r2   )r%   r   r&   r&   r'   test_pickle   s    z)TestStructuredUnitsCopyPickle.test_pickleN)
r)   r*   r+   rs   ru   rP   rl   Zskipifr
   rw   r&   r&   r&   r'   rn      s   rn   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J t | jdks$J d S )Nrf   )lenr1   r2   r$   r&   r&   r'   test_len   s    z$TestStructuredUnitAsMapping.test_lenc                 C   s"   t | j }|ddgksJ d S )Nr   r   )listr2   keys)r%   Zslvr&   r&   r'   	test_keys   s    z%TestStructuredUnitAsMapping.test_keysc                 C   s"   | j  }|| j| jfksJ d S ro   )r2   valuesr1   r!   )r%   r~   r&   r&   r'   test_values   s    
z'TestStructuredUnitAsMapping.test_valuesc                 C   s.   | j j}t|tsJ |ddgdfks*J d S )Nr   r.   r   )r2   r?   r=   tuple)r%   r?   r&   r&   r'   test_field_names   s    z,TestStructuredUnitAsMapping.test_field_namesiterablec                 C   s0   || j }t||sJ ||ddgks,J d S )Nr   r   )r1   r=   )r%   r   Zslr&   r&   r'   test_as_iterable   s    
z,TestStructuredUnitAsMapping.test_as_iterablec                 C   s$   t | j}|| j| jdks J d S )Nr/   )dictr2   r1   r!   )r%   Zsdr&   r&   r'   test_as_dict   s    
z(TestStructuredUnitAsMapping.test_as_dictc                 C   s.   d| j v sJ d| j v sJ d| j vs*J d S )Nr   r   r   )r1   r$   r&   r&   r'   test_contains   s    z)TestStructuredUnitAsMapping.test_containsc                 C   s>   t jtdd tj| jd< W d    n1 s00    Y  d S )Nzitem assignment)matchr   )rP   rQ   	TypeErrorr   ZGyrr2   r$   r&   r&   r'   test_setitem_fails   s    z.TestStructuredUnitAsMapping.test_setitem_failsN)r)   r*   r+   rz   r}   r   r   rP   rl   rm   r{   setr   r   r   r   r&   r&   r&   r'   rx      s   
rx   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J |jjdks*J | j d  }| j d  }t||fddgd }||ksjJ |t||fdd ksJ |d |ksJ |d |ksJ |d	 |ksJ |d
 |ksJ | j }| j }|t||fdd ksJ |d |ksJ |d |ksJ |d d
 |ks0J d S )Nrf   r.   r   r   )r   O)r   r   r&   O,Or      r   r   )	r1   Z_get_physical_type_idry   r   rT   r   r"   r2   r!   )r%   Zpv_ptidZp_ptidZv_ptidZ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 J | jj}|t|dfdd ksDJ d S )N)ZlengthZspeedr   r&   time)r1   Zphysical_typer   r"   r2   )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J |d d jdks,J d S Nr   r   i  )r2   siscale)r%   Zpv_t_sir&   r&   r'   test_si!  s    z!TestStructuredUnitMethods.test_sic                 C   s0   | j j}|| j ksJ |d d jdks,J d S )Nr   r   i )r2   cgsr   )r%   Zpv_t_cgsr&   r&   r'   test_cgs&  s    z"TestStructuredUnitMethods.test_cgsc                 C   s$   | j  }|d d jdks J d S r   )r2   Z	decomposer   )r%   Zpv_t_decomposer&   r&   r'   test_decompose+  s    
z(TestStructuredUnitMethods.test_decomposec                 C   st   | j dsJ | j dr J | j dr0J tddd}|j| j jksNJ | j |s^J tj| j rpJ d S )Nr7   ra   )r8   r8   zm,m/srb   r^   )r1   Zis_equivalentr   r?   r   ra   )r%   Zpv_altr&   r&   r'   test_is_equivalent/  s    z,TestStructuredUnitMethods.test_is_equivalentc                 C   s  | j d| j}t|tjs J |j| jjks2J t|d tj	 | jd | j
 ksZJ t|d tj	 tj | jd | j ksJ t| j
| jfd}|d| j}|jjdksJ |j| jjksJ | jd| j}t|tjsJ |j| jjksJ t|d d tj	 | jd d | j
 ks.J t|d d tj	 tj | jd d | j ksfJ t|d	 tj | jd	 | j ksJ | jdd
}|d d | j
ddksJ |d d | jddksJ |d	 | jddksJ | jdd
dg}t|d d | j
dddgks6J t|d d | jdddgks`J t|d	 | jdddgksJ d S )Nr7   r   r   )ZpositionZvelocity)ZMmzmm/sr.   )r7   Myrr   r   ))r   皙?      $@r8   r   r9   r   r   r   ))r   皙?      4@r   r   r   )r1   tor   r=   r   ndarrayr   allr   r8   r   r>   r    r   rT   r2   r#   r   r!   )r%   pv1rA   pv2Zpv_t1Zpv_t2Zpv_t3r&   r&   r'   test_conversion:  sF    (.*  **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J |jdks(J |d | jtj ks@J |d | jtj ksXJ tj| j  }||kspJ | j d }||ksJ d| j  }||ksJ t	
t | j | j   W d    n1 s0    Y  t	
t d| j   W d    n1 s0    Y  d S )Nr.   r   r   aur8   zs,s)r1   r   r   r=   r   r?   r   r8   r    rP   rQ   r   )r%   Zpv_times_auZau_times_pvZpv_times_au2Zau_times_pv2r&   r&   r'   test_multiplication^  s    

*z0TestStructuredUnitArithmatic.test_multiplicationc                 C   s   | j tj }t|tsJ |jdks(J |d | jtj ks@J |d | jtj ksXJ | j d }||ksnJ t	t
 d| j   W d    n1 s0    Y  t	t
 tj| j   W d    n1 s0    Y  d S )Nr.   r   r   r   r   )r1   r   r   r=   r   r?   r   r    rP   rQ   r   )r%   Zpv_by_sZpv_by_s2r&   r&   r'   test_divisiono  s    
(z*TestStructuredUnitArithmatic.test_divisionN)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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   st  t | j| j}|d }t|t s$J t|jts4J t|| jd | jd  ksVJ |d }t|t slJ t|jts|J t|| jd | jd  ksJ t | j| j	}|d }t|| jd | j	d  ksJ |d }t|t sJ |j| jksJ t
t t | j| j	 W d    n1 s,0    Y  t
t t | j| j W d    n1 sf0    Y  d S )Nr   r   r   r   )r   r   r1   r=   unitr   r   r   r#   r2   rP   rQ   rR   )r%   q_pvZq_pZq_vq_pv_tZq_tZq_pv2r&   r&   r'   rE   ~  s&    """.z5TestStructuredQuantity.test_initialization_and_keyingc                 C   s0   t | jd}t|jtsJ |j| jks,J d S )N)r[   r   r   r#   r=   r   r   r2   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J |j| jks,J 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u sJ t|j| j ks2J t|| j rDJ | j| j  }|j| ju s`J t|j|jksvJ d S ro   r#   r2   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u sJ t|j| j ks2J t|| j sDJ d S ro   r   r   r&   r&   r'   'test_initialization_by_shifting_to_unit  s    z>TestStructuredQuantity.test_initialization_by_shifting_to_unitc                 C   s   t | j| j}|d d }t|t s(J |j|jks8J t|d |d d d ksZJ |d }t|t spJ |j|jksJ |jdksJ |d |d d ksJ d S )Nrf   r   r   r&   )r   r#   r2   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u s&J t|| jks:J |d j}t|tju sVJ t|| jd ksnJ d S )Nr   )	r   r#   r2   r   typer   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&J |d jtjks:J |d jtjtj ksTJ t	
|d |d tjksvJ t	
|d |d tjtj ksJ || j}|d j| jksJ |d j| jksJ t	
|d j| jd ksJ t	
|d j| jd ksJ t	||r"J |d}t|t	ju s@J t	
|d |d tjksdJ t	
|d |d tjtj ksJ |d d}t|t	ju sJ ||d ksJ t | j| j}|d}|d d jtjksJ |d d jtjtj ksJ |d jtjks*J t	
|d d |d d tjksVJ t	
|d d |d d tjtj ksJ t	
|d |d tjksJ d S )Nr7   r   r   r   ))kpczkpc/Myrr   r   r   )r   r   r1   r   r=   r   r   r8   r>   r   r   r   r    r   r   Zto_valuer   r   r   r#   r2   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(J |d jtjks<J |d jtjtj ksVJ t	
|d |d tjksxJ t	
|d |d tjtj ksJ || j> }|d j| jksJ |d j| jksJ t	
|d j| jd ksJ t	
|d j| jd ksJ t	||s"J t | j| j}|d> }|d d jtjksRJ |d d jtjtj ksrJ |d jtjksJ t	
|d d |d d tjksJ t	
|d d |d d tjtj ksJ t	
|d |d tjks
J d S Nr7   r   r   z(kpc,kpc/Myr),Myrr   r   )r   r   r1   r   r=   r   r   r8   r>   r   r   r   r   r    r   r   r#   r2   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 }||u s2J |d jtjksFJ |d jtjtj ks`J t	
|d |d tjksJ t	
|d |d tjtj ksJ t | j| j}| }|}|dK }||u sJ |d d jtjksJ |d d jtjtj ksJ |d jtjks&J t	
|d d |d d tjksRJ t	
|d d |d d tjtj ksJ t	
|d |d tjksJ d S r   )r   r   r1   rp   r   r   r   r8   r>   r   r   r   r#   r2   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#   r2   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#   r2   r   r   r   )r%   r   Z
q_pv_t_cgsr&   r&   r'   r     s    zTestStructuredQuantity.test_cgsc                 C   s|  t | j| j}||k}||k}t|s,J t|r:J ||d k}||d k}t|g dkshJ t||kszJ |d}t||ksJ t||krJ t|jt	d |ksJ t|jt	d |krJ |dkdu sJ d|kdu sJ t | j
| j}t|d |kg d	ks4J t|d |kg d	ksTJ ||kdu sfJ ||kdu sxJ d S )
Nr   )FTFr7   r:   bFTrf   )FFT)r   r   r1   r   r   anyr   r   r   r   r#   r2   )r%   r   ZequalZ	not_equalZequal2Z
not_equal2r   r   r&   r&   r'   re     s*    
  z$TestStructuredQuantity.test_equalityc                 C   s  t | j| j}d| j |d< |d jtd| jks8J dtd |dd< |d d dtj	 kshJ |d d d	tj	 tj
 ksJ dtj tj |d< t|d dtj tj ksJ ttj" d
td |d< W d    n1 s0    Y  ttj dtj |d< W d    n1 s.0    Y  t | j| j}d| j |d< |d jtd| jksrJ dtd |dd< |d d dtd ksJ |d d dtj ksJ d| j |d< t|d d| j ksJ d S )Nr   r   r   r   r   r:   rf   r   r   r   r   )r   r   zAU, AU)r   r   )r   r   rG   r   r   r   )r   r   r1   r   r   r"   r   r   r   r8   r>   r   r   r   rP   rQ   
UnitsErrorr#   r2   r   rF   )r%   r   r   r&   r&   r'   test_setitem0  s(     "0. z#TestStructuredQuantity.test_setitemN)r)   r*   r+   rE   r   r   r   r   r   r   r   r   r   r   r   re   r   r&   r&   r&   r'   r   }  s   
	r   c                       sF   e Zd Ze fddZdd Zejde	j
e	jgdd Z  ZS )TestStructuredQuantityFunctionsc                    s*   t    | j| j> | _| j| j> | _d S ro   )r0   r(   r   r1   r   r#   r2   r   r$   r3   r&   r'   r(   H  s    
z+TestStructuredQuantityFunctions.setup_classc                 C   sB   t | j}|j| jksJ |j| jks,J |j| jjks>J d S ro   )	r   Z
empty_liker   r   r   r   r1   r   r   )r%   zr&   r&   r'   test_empty_likeN  s    z/TestStructuredQuantityFunctions.test_empty_likefuncc                 C   sV   || j }|j| jksJ |j| jks*J |j| jjks<J t||| j| j>  d S ro   )r   r   r   r   r1   r   r   r   )r%   r   r   r&   r&   r'   test_zeros_ones_likeT  s
    
z4TestStructuredQuantityFunctions.test_zeros_ones_like)r)   r*   r+   r,   r(   r   rP   rl   rm   r   Z
zeros_likeZ	ones_liker   r5   r&   r&   r3   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+   r1   Z_equivalent_unitr&   r$   r&   r'   PositionVelocitya  s   r   )r0   r(   r   ZSpecificTypeQuantityr   )r%   r   r3   r$   r'   r(   ^  s    
z.TestStructuredSpecificTypeQuantity.setup_classc                 C   s   |  | j| j}t|| j s J t|d tju s6J t|d | jd | jd >  |  | jd}t|d | jd tj>  d S )Nr   	AU,AU/day)	r   r   r1   r=   r   r   r   r   r8   )r%   r   r   r&   r&   r'   	test_initf  s    z,TestStructuredSpecificTypeQuantity.test_initc                 C   sx   t tj | | jd W d    n1 s00    Y  t tj | | jd W d    n1 sj0    Y  d S )Nr8   zAU,yr)rP   rQ   r   r   r   r   r$   r&   r&   r'   !test_error_on_non_equivalent_unito  s    ,zDTestStructuredSpecificTypeQuantity.test_error_on_non_equivalent_unit)r)   r*   r+   r(   r   r   r5   r&   r&   r3   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(   w  s    z!TestStructuredLogUnit.setup_classc                 C   sR   t tjtjf| j}|d tjks&J |d tjks8J td}||ksNJ d S )Nr   r   	mag(ST),s)r   r   STmagr   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(J t|d t js<J |j|ksJJ 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@   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   v  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                    sL   t    | j| j> | _tg ddtfdtfg| _t	| j| jd| _
d S )N))TF)FF)FTr   r   )mask)r0   r(   r   r1   qpvr   r"   boolpv_maskr   mpvr$   r3   r&   r'   r(     s    

z(TestStructuredMaskedQuantity.setup_classc                 C   sD   t | jtsJ t | jts J t| jj| j t| jj| j d S ro   )	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J t|ts&J t|j| jd  t|j| jd  d S )Nr   )	r   r=   r   r   r   r   r   r   r   )r%   Zmpr&   r&   r'   test_slicing  s
    
z)TestStructuredMaskedQuantity.test_slicingc                 C   sb   | j d}t|tsJ t|ts(J t|j| jd t|j| j	 t
|| j ks^J d S )Nr   )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J t|ts$J t|j| jj t|j| j	 t
|| j ksVJ d S ro   )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   r5   r&   r&   r3   r'   r     s   r   )"r   rp   rP   Znumpyr   Znumpy.testingr   Zastropyr   r   Zastropy.unitsr   r   r   r   Zastropy.tests.helperr   r	   Zastropy.utils.compatr
   Zastropy.utils.maskedr   r   r-   r6   rn   rx   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   s.   
 '\  K