U
    e»{jŸ3  ã                	   @   sÒ   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 e jejddd�ZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZej ddej dfdej dfdej dej fdej dej ff¡dd„ ƒZdS )é    N)Úunits)ÚColumn)ÚTimeÚ	TimeDeltag      °<g     µ=)ZrtolZatolc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestTimeQuantityz(Test Interaction of Time with Quantitiesc                 C   s¼  dt j }t|ddd�}|j|jks(t‚| t j¡}t|ddd�}|j|j  krb| t j¡kshn t‚|dt j  }t|ddd�}|j|jks”t‚dt j }t||ddd�}|j||  t j¡ksÈt‚dt j }	t|	d	dd�}
|
j|	jksðt‚t|	 t j¡d	dd�}|j|	jk�st‚d
t j }t|dd�}|j| t j¡k�sFt‚t|dd�}|j| t j¡k�sjt‚t|dd�}|j| t j¡k�sŽt‚dt j }t|ddd�}|j|jk�s¸t‚dS )z:Test Time formats that are allowed to take quantity input.g   (±BAÚjdÚutc©ÚformatÚscaleg   @€OBAÚmjdg      ‹@ç     Ÿ@Zjyearç      $@Úcxcsec©r
   ZgpsÚunixg     G&AZ	plot_dateN)	ÚuÚdayr   ÚvalueÚAssertionErrorÚtoÚsecondÚto_valueÚyr)ÚselfÚqÚt1Úq2Út2Úq3Út3ÚqsÚt4ÚqyZty1Zty2Zqy2ZtcxcZtgpsZtunixZqdZtplt© r$   úk/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/time/tests/test_quantity_interaction.pyÚtest_valid_quantity_input   s6    
&



z*TestTimeQuantity.test_valid_quantity_inputc              	   C   s\   t  tj¡� tdtj ddd� W 5 Q R X t  tj¡� tdtj ddd� W 5 Q R X d S )Nç    (±BAr   r   r	   )ÚpytestÚraisesr   Ú
UnitsErrorr   ÚmÚdimensionless_unscaled©r   r$   r$   r%   Útest_invalid_quantity_input3   s    z,TestTimeQuantity.test_invalid_quantity_inputc              	   C   s¼   t  dd¡}t|dd�}tt  dd¡dd�}t|dd�}t  ||k¡sJt‚tt  dd¡ddd�}t|dd�}t  ||k¡s~t‚tt  dd¡ddd�}t tj	¡� t|dd� W 5 Q R X d	S )
z=Ensure a Column without a unit is treated as an array [#3648]g     jè@g    @kè@r   r   )Únamer   )r/   Úunitr+   N)
ÚnpÚaranger   r   Úallr   r(   r)   r   r*   )r   ÚaÚtaÚc1Ztc1Úc2Ztc2Úc3r$   r$   r%   Ú"test_column_with_and_without_units:   s    z3TestTimeQuantity.test_column_with_and_without_unitsc              
   C   s<   dt j }dD ](}t t¡� t||dd� W 5 Q R X qdS )z9Time formats that are not allowed to take Quantity input.r   )ÚisoZydayÚdatetimeZbyearZ	byear_strZ	jyear_strr   r	   N)r   r   r(   r)   Ú
ValueErrorr   )r   r#   Úfmtr$   r$   r%   Útest_no_quantity_input_allowedH   s    
z/TestTimeQuantity.test_no_quantity_input_allowedc                 C   sÊ   t ddd�}dtj }|| }t|t ƒs,t‚|j|j| tj¡ ksHt‚dtj }|| }t|j|j| tj¡ ƒsxt‚t	 
d¡ dd¡tj }|| }|j|jks¨t‚t|j|j| tj¡ ƒsÆt‚d	S )
z?Check that adding a time-valued quantity to a Time gives a Timeç     jø@r   r   r   ç      ð?g      .@é   é   N)r   r   r   Ú
isinstancer   r   r   r   Úallclose_secr1   r2   ÚreshapeÚhourÚshape©r   Út0Úq1r   r   r   r   r    r$   r$   r%   Útest_valid_quantity_operationsO   s    

z/TestTimeQuantity.test_valid_quantity_operationsc              	   C   s\   t  t¡� tddd�dtj k W 5 Q R X t  t¡� tddd�dtj k W 5 Q R X dS )z„Check that comparisons of Time with quantities does not work
        (even for time-like, since we cannot compare Time to TimeDelta)r?   r   r   r   N)r(   r)   Ú	TypeErrorr   r   r+   r   r-   r$   r$   r%   Ú test_invalid_quantity_operations_   s     z1TestTimeQuantity.test_invalid_quantity_operationsN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r.   r9   r>   rK   rM   r$   r$   r$   r%   r      s    r   c                   @   s`   e Zd 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S )ÚTestTimeDeltaQuantityz-Test interaction of TimeDelta with Quantitiesc                 C   sd   dt j }t|dd�}|j|jks&t‚t|dd�}|j| t j¡ksHt‚t|ƒ}|j|jks`t‚dS )z,Test that TimeDelta can take quantity input.ç     D@r   r   ÚsecN)r   r   r   r   r   r   r   )r   r   Údt1Údt2Zdt3r$   r$   r%   r&   k   s    
z/TestTimeDeltaQuantity.test_valid_quantity_inputc              	   C   s†   t  tj¡� tdtj dd� W 5 Q R X t  tj¡� tdtj ddd� W 5 Q R X t  t¡� tddd�dtj k W 5 Q R X d S )	Nr'   r   r   r   r	   éd   rT   r   )	r(   r)   r   r*   r   r+   r   r,   rL   r-   r$   r$   r%   r.   u   s    z1TestTimeDeltaQuantity.test_invalid_quantity_inputc                 C   sÂ   dt j }t|ƒ}| t j¡|ks&t‚| t j¡|jks<t‚| d¡|jksPt‚| t j¡j| t j¡ksnt‚| t j¡| t j¡ksŠt‚| d¡| t j¡ks¤t‚| d¡| t j¡ks¾t‚d S )NrS   r   ÚsrT   )r   r   r   r   r   r   r   r   )r   r   Údtr$   r$   r%   Útest_quantity_output   s    
z*TestTimeDeltaQuantity.test_quantity_outputc              	   C   sî   t ddd�}t tj¡� | tj¡ W 5 Q R X t tj¡� | tj¡ W 5 Q R X t tj¡� |jtjd� W 5 Q R X tjtdd�� | d¡ W 5 Q R X t t	¡� |jdtj
d� W 5 Q R X t t	¡� |jtj
dd	� W 5 Q R X d S )
Ng     @o@rT   r   )r0   z7not one of the known formats.*failed to parse as a unit)ÚmatchÚparrotÚstr)Zsubfmt)r   r(   r)   r   r*   r   r+   r   r<   rL   rX   )r   rY   r$   r$   r%   Útest_quantity_output_errors‹   s     þz1TestTimeDeltaQuantity.test_quantity_output_errorsc                 C   s  t ddd�}dtj }|| }t|t ƒs,t‚|j|j| tj¡ ksHt‚dtj }|| }t|t ƒsht‚t|j|j| tj¡ ƒs†t‚||ks’t‚|dtj	 k s¤t‚t
 d¡ dd¡tj }|| }t|t ƒsÒt‚|j|jksât‚t|j|j| tj¡ ƒ�st‚d	S )
z†Check adding/substracting/comparing a time-valued quantity works
        with a TimeDelta.  Addition/subtraction should give TimeDeltag     úù@rT   r   r   r@   ç      (@é   rA   N)r   r   r   rC   r   r   r   r   rD   r   r1   r2   rE   rF   rG   rH   r$   r$   r%   Útest_valid_quantity_operations1ž   s     

z5TestTimeDeltaQuantity.test_valid_quantity_operations1c                 C   sŠ  t ddd�}d| }t|tjƒs$t‚|jdtj ks8t‚dtj tjd  }|| }t|tjƒsdt‚t 	||j
|j tj tj ¡sˆt‚t |tj ¡}t|tjƒs¨t‚|jt |j
¡ks¾t‚dtj }|| }t|tjƒsàt‚t 	|d|j
 tj tj ¡�st‚dtj }|| }t|tjƒ�s(t‚t 	||j
tjd  ¡�sFt‚dg| }	t|	tjƒ�sbt‚t 	|	d|j
tj  ¡�s€t‚t t dd¡ d	d¡dd�}
t dd
g¡tj tj }||
 }t|tjƒ�sÐt‚|j|
jk�sât‚t 	||
j
|j tj ¡�st‚||
 }t|tjƒ�st‚t || tj¡|
 tj¡ k¡�sDt‚|
| }t|tjƒ�s^t‚t ||
 tj¡| tj¡ k¡�s†t‚dS )z=Check that TimeDelta is treated as a quantity where possible.r?   rT   r   r@   r   é   é   g    Àjø@é   g       @N)r   rC   r   ZQuantityr   r0   r   r+   r   ÚallcloserT   r   r1   Úlog10rX   r2   rE   ÚarrayÚcycleZHzrG   r3   r   )r   rI   ÚfÚgÚvr   rX   Útr   r    r   Zphaser$   r$   r%   Útest_valid_quantity_operations2´   sD    $
$

 (z5TestTimeDeltaQuantity.test_valid_quantity_operations2c                 C   s¤  t ddd�}dtj }|| }t|t ƒs,t‚|t ddd�ks@t‚|| }t|t ƒsVt‚|t ddd�ksjt‚|| }t|t ƒs€t‚|t ddd�ks”t‚dtj }|| }t|t ƒs´t‚t|t ddd� ƒdtj k sÖt‚dtj dtj	  }|| }	t|t ƒ�st‚t|	t ddd� ƒdtj k �s&t‚|tj }
t|
t ƒ�s@t‚|
t ddd�k�sVt‚tj| }t|t ƒ�spt‚|t ddd�k�s†t‚|d	 }t|t ƒ�sžt‚|t ddd�k�s´t‚d	| }t|t ƒ�sÌt‚|t ddd�k�sât‚|tj }t|t ƒ�süt‚|
t ddd�k�st‚|d	 }t|t ƒ�s*t‚|t ddd�k�s@t‚|d
g }t|t ƒ�sZt‚|t ddd�k�spt‚d
g| }t|t ƒ�sŠt‚|t ddd�k�s t‚dS )z)Test a TimeDelta remains one if possible.r   r   r   g      Y@r@   gš™™™™™¹?g      B@g     @�@Ú rc   N)
r   r   ÚonerC   r   ÚpercentÚabsÚnsÚhrrX   )r   rI   r   r   r   r    r   r"   r   Zt5Zt6Zt7Zt8Zt9Zt10Zt11Zt12Zt13r$   r$   r%   Útest_valid_quantity_operations3Ú   sV    

"$




z5TestTimeDeltaQuantity.test_valid_quantity_operations3c              	   C   s0   t  t¡� tddd�dtj k W 5 Q R X dS )z>Check comparisons of TimeDelta with non-time quantities fails.r?   rT   r   r   N)r(   r)   rL   r   r   r+   r-   r$   r$   r%   rM   	  s    z6TestTimeDeltaQuantity.test_invalid_quantity_operationsc              	   C   sP   t ddd�}t t¡� |tƒ   W 5 Q R X t t¡� |tƒ   W 5 Q R X dS )z2Check that operations with non-time/quantity fail.r?   rT   r   N)r   r(   r)   rL   Úobject)r   Útdr$   r$   r%   Ú!test_invalid_quantity_operations2  s
    z7TestTimeDeltaQuantity.test_invalid_quantity_operations2c              	   C   sH   t t d¡ dd¡dd�}t t¡� |t d¡tj   W 5 Q R X dS )z7Check broadcasting rules in interactions with Quantity.r_   r`   rA   rT   r   g      @N)	r   r1   r2   rE   r(   r)   r<   r   rX   )r   rI   r$   r$   r%   Útest_invalid_quantity_broadcast  s    z5TestTimeDeltaQuantity.test_invalid_quantity_broadcastN)rN   rO   rP   rQ   r&   r.   rZ   r^   ra   rm   rt   rM   rw   rx   r$   r$   r$   r%   rR   h   s   

&/rR   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDeltaAttributesc              	   C   s¬   t ddddd�}dtj |_|jjdks,t‚dtj |_|jjd	ksHt‚t 	tj
¡� d
tj |_W 5 Q R X tddd�|_|jjdksŠt‚tddd�|_|jjdks¨t‚d S )Nú2010-01-01 00:00:00r:   r   rd   ©r
   r   Ú	precisiong333333Ó?z2010-01-01 00:00:00.300000gOè´�N{?z2010-01-01 00:00:00.400000çš™™™™™Ù?rT   r   g)QÎ ÈEØ>r   z2010-01-01 00:00:00.500000)r   r   rX   Zdelta_ut1_utcZut1r:   r   Úminuter(   r)   r*   r+   r   ©r   rl   r$   r$   r%   Útest_delta_ut1_utc  s    z&TestDeltaAttributes.test_delta_ut1_utcc              	   C   s¬   t ddddd�}dtj |_|jjdks,t‚dtj |_|jjd	ksHt‚t 	tj
¡� d
tj |_W 5 Q R X tddd�|_|jjdksŠt‚tddd�|_|jjdks¨t‚d S )Nrz   r:   Úttrd   r{   g      4@z2010-01-01 00:00:20.000000g      à?z2010-01-01 00:00:30.000000r}   g      D@rT   r   z2010-01-01 00:00:40.000000gi/¡½„öB?r   z2010-01-01 00:00:50.000000)r   r   r   Zdelta_tdb_ttZtdbr:   r   r~   r(   r)   r*   r+   r   r   r$   r$   r%   Útest_delta_tdb_tt,  s    z%TestDeltaAttributes.test_delta_tdb_ttN)rN   rO   rP   r€   r‚   r$   r$   r$   r%   ry     s   ry   zq1, q2g    eÍ½Ag ÈNgmÁ›Cg    „×·Ag  Ø…W4vCg  �Ä¼öBc           	      C   s°   t ddd�}t ddd�}|dkr*||  }n||  | }t|| ƒdtj k sPt‚t| |ƒ}|| }t|| ƒdtj k s|t‚t| |dd�}|| }t|| ƒdtj k s¬t‚dS )	zÒCheck that no rounding errors are incurred by unit conversion.

    This occurred before as quantities in seconds were converted to days
    before trying to split them into two-part doubles.  See gh-7622.
    z2001-01-01T00:00:00.Ztai)r   z2016-11-05T00:53:20.Né   rT   r   )r   rq   r   Zpsr   r   )	rJ   r   rl   ÚexpectedrI   rU   r   rV   r   r$   r$   r%   Ú!test_quantity_conversion_rounding;  s    

r…   )Ú	functoolsÚnumpyr1   r(   Zastropyr   r   Zastropy.tabler   Zastropy.timer   r   Úpartialre   rD   r   rR   ry   ÚmarkZparametrizerX   rr   Úusr…   r$   r$   r$   r%   Ú<module>   s.     ÿX 6üþ	