ó
šßÈ[c           @   s'  d  d l  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 e  j e j d d d
 d ƒZ d d d „  ƒ  YZ d d d „  ƒ  YZ d d  d „  ƒ  YZ e j 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 „  ƒ Z d S(!   iÿÿÿÿNi   (   t   Timet	   TimeDeltat   OperandTypeErrori   (   t   units(   t   Columnt   rtolg       @iÌÿÿÿt   atoli   i  t   TestTimeQuantityc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s(   Test Interaction of Time with Quantitiesc         C   s‰  d t  j } t | d d d d ƒ} | j | j k s= t ‚ | j t  j ƒ } t | d d d d ƒ} | j | j k o | j t  j ƒ k n s› t ‚ | d t  j } t | d d d d ƒ} | j | j k sÜ t ‚ d t  j } t | | d d d d ƒ} | j | | j t  j ƒ k s)t ‚ d
 t  j }	 t |	 d d d d ƒ}
 |
 j |	 j k sft ‚ t |	 j t  j ƒ d d d d ƒ} | j |	 j k s¢t ‚ d t  j } t | d d ƒ} | j | j t  j ƒ k sât ‚ t | d d ƒ} | j | j t  j ƒ k st ‚ t | d d ƒ} | j | j t  j ƒ k sHt ‚ d t  j } t | d d d d ƒ} | j | j k s…t ‚ d S(   s:   Test Time formats that are allowed to take quantity input.g   (±BAt   formatt   jdt   scalet   utcg   @€OBAt   mjdg      8@g      B@g     Ÿ@t   jyearg      $@t   cxcsect   gpst   unixg     @Ÿ@g     Ðv@t	   plot_dateNg      ‹@g     G&A(	   t   ut   dayR    t   valuet   AssertionErrort   tot   secondt   to_valuet   yr(   t   selft   qt   t1t   q2t   t2t   q3t   t3t   qst   t4t   qyt   ty1t   ty2t   qy2t   tcxct   tgpst   tunixt   qdt   tplt(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_valid_quantity_input   s6    4%$!!!c         C   sp   t  j t j ƒ " t d t j d d d d ƒWd  QXt  j t j ƒ " t d t j d d d d ƒWd  QXd  S(   Ng    (±BAR   R	   R
   R   (   t   pytestt   raisesR   t
   UnitsErrorR    t   mt   dimensionless_unscaled(   R   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_invalid_quantity_input2   s    #c         C   s  t  j d d ƒ } t | d d ƒ} t t  j d d ƒ d d ƒ} t | d d ƒ} t  j | | k ƒ so t ‚ t t  j d d ƒ d d d d ƒ} t | d d ƒ} t  j | | k ƒ sÀ t ‚ t t  j d d ƒ d d d d ƒ} t j t j	 ƒ  t | d d ƒWd	 QXd	 S(
   s=   Ensure a Column without a unit is treated as an array [#3648]g     jè@g    @kè@R   R   t   namet   unitR   R0   N(
   t   npt   arangeR    R   t   allR   R-   R.   R   R/   (   R   t   at   tat   c1t   tc1t   c2t   tc2t   c3(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt"   test_column_with_and_without_units9   s    $$c         C   sN   d t  j } x: d D]2 } t j t ƒ  t | d | d	 d
 ƒWd QXq Wd S(   s9   Time formats that are not allowed to take Quantity input.g     Ÿ@t   isot   ydayt   datetimet   byeart	   byear_strt	   jyear_strR   R
   R   N(   R@   RA   RB   RC   RD   RE   (   R   R   R-   R.   t
   ValueErrorR    (   R   R#   t   fmt(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_no_quantity_input_allowedG   s
    
c         C   s  t  d d d ƒ} d t j } | | } t | t  ƒ s> t ‚ | j | j | j t j ƒ k sf t ‚ d t j } | | } t | j | j | j t j ƒ ƒ s¨ t ‚ t	 j
 d ƒ j d d ƒ t j } | | } | j | j k sì t ‚ t | j | j | j t j ƒ ƒ st ‚ d	 S(
   s?   Check that adding a time-valued quantity to a Time gives a Timeg     jø@R   R   g      $@g      ð?g      .@i   i   N(   R    R   R   t
   isinstanceR   R   R   R   t   allclose_secR5   R6   t   reshapet   hourt   shape(   R   t   t0t   q1R   R   R   R   R    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_valid_quantity_operationsO   s    
(
+"
c      	   C   sj   t  j t ƒ " t d d d ƒd t j k Wd QXt  j t ƒ " t d d d ƒd t j k Wd QXd S(   s„   Check that comparisons of Time with quantities does not work
        (even for time-like, since we cannot compare Time to TimeDelta)g     jø@R   R   g      $@N(   R-   R.   R   R    R   R0   R   (   R   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt    test_invalid_quantity_operations_   s    #(	   t   __name__t
   __module__t   __doc__R,   R2   R?   RH   RP   RQ   (    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyR      s   	 				t   TestTimeDeltaQuantityc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s-   Test interaction of TimeDelta with Quantitiesc         C   s’   d t  j } t | d d ƒ} | j | j k s7 t ‚ t | d d ƒ} | j | j t  j ƒ k sj t ‚ t | ƒ } | j | j k sŽ t ‚ d S(   s,   Test that TimeDelta can take quantity input.g     D@R   R	   t   secN(   R   R   R   R   R   R   R   (   R   R   t   dt1t   dt2t   dt3(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyR,   j   s    !c         C   s   t  j t j ƒ  t d t j d d ƒWd  QXt  j t j ƒ " t d t j d d d d ƒWd  QXt  j t ƒ " t d d d ƒd t j k Wd  QXd  S(	   Ng    (±BAR   R	   R
   R   id   RV   g      $@(	   R-   R.   R   R/   R   R0   R    R1   R   (   R   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyR2   t   s    #c         C   s‘   d t  j } t | ƒ } | j t  j ƒ | k s7 t ‚ | j t  j ƒ j | j t  j ƒ k sd t ‚ t j	 t  j
 ƒ  | j t  j ƒ Wd  QXd  S(   Ng     D@(   R   R   R   R   R   R   R   R   R-   R.   R/   R0   (   R   R   t   dt(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_quantity_output~   s    -c         C   sF  t  d d d ƒ} d t j } | | } t | t  ƒ s> t ‚ | j | j | j t j ƒ k sf t ‚ d t j } | | } t | j | j | j t j ƒ ƒ s¨ t ‚ | | k sº t ‚ | d t j	 k  sÓ t ‚ t
 j d ƒ j d d ƒ t j } | | } | j | j k st ‚ t | j | j | j t j ƒ ƒ sBt ‚ d	 S(
   s†   Check adding/substracting/comparing a time-valued quantity works
        with a TimeDelta.  Addition/subtraction should give TimeDeltag     úù@R   RV   g      $@g      ð?g      (@i   i   N(   R   R   R   RI   R   R   R   R   RJ   R   R5   R6   RK   RL   RM   (   R   RN   RO   R   R   R   R   R    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_valid_quantity_operations1†   s    
(
+"
c   	      C   sø  t  d d d ƒ} d | } t | t j ƒ s4 t ‚ | j d t j k sP t ‚ d t j t j d } | | } t | t j ƒ sŠ t ‚ | j	 ƒ  j t j t j k s¯ t ‚ t
 j | t j ƒ } t | t j ƒ sÝ t ‚ | j t
 j | j ƒ k sþ t ‚ d t j } | | } t | t j ƒ s-t ‚ | j	 ƒ  j t j t j k sRt ‚ t  t
 j d d ƒ j d d ƒ d d ƒ} t
 j d d	 g ƒ t j t j } | | } t | t j ƒ sÁt ‚ | j | j k sÙt ‚ | j j t j ƒ sôt ‚ d
 S(   s=   Check that TimeDelta is treated as a quantity where possible.g     jø@R   RV   g      ð?g      $@i   g    Àjø@i   g       @N(   R   RI   R   t   QuantityR   R4   R   R0   R   t	   decomposeR5   t   log10R   RV   R6   RK   t   arrayt   cyclet   HzRM   t   is_equivalent(	   R   RN   t   ft   gt   vR   t   sR   t   phase(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_valid_quantity_operations2š   s*    

%!
%*#
c         C   s7   t  j t ƒ " t d d d ƒd t j k Wd QXd S(   s>   Check comparisons of TimeDelta with non-time quantities fails.g     jø@R   RV   g      $@N(   R-   R.   R   R   R   R0   (   R   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyRQ   ³   s    c         C   sY   t  t j d ƒ j d d ƒ d d ƒ} t j t ƒ  | t j d ƒ t j Wd QXd S(   s7   Check broadcasting rules in interactions with Quantity.g      (@i   i   R   RV   g      @N(	   R   R5   R6   RK   R-   R.   RF   R   Rg   (   R   RN   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_invalid_quantity_broadcast¸   s    '(
   RR   RS   RT   R,   R2   R[   R\   Ri   RQ   Rj   (    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyRU   h   s   	
	
				t   TestDeltaAttributesc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s  t  d d d d d d d ƒ} d t j | _ | j j d	 k sF t ‚ d
 d t j | _ | j j d k sr t ‚ t j	 t j
 ƒ  d
 t j | _ Wd  QXt d d d ƒ| _ | j j d	 k sÈ t ‚ t d d d d d ƒ| _ | j j d k sý t ‚ d  S(   Ns   2010-01-01 00:00:00R   R@   R
   R   t	   precisioni   g333333Ó?s   2010-01-01 00:00:00.300000gš™™™™™Ù?g      N@s   2010-01-01 00:00:00.400000RV   g      à?g      8@g      ¬@R	   s   2010-01-01 00:00:00.500000(   R    R   Rg   t   delta_ut1_utct   ut1R@   R   t   minuteR-   R.   R/   R0   R   (   R   t   t(    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_delta_ut1_utcÀ   s    c         C   s  t  d d d d d d d ƒ} d t j | _ | j j d	 k sF t ‚ d
 d t j | _ | j j d k sr t ‚ t j	 t j
 ƒ  d t j | _ Wd  QXt d d d ƒ| _ | j j d k sÈ t ‚ t d d d d d ƒ| _ | j j d k sý t ‚ d  S(   Ns   2010-01-01 00:00:00R   R@   R
   t   ttRl   i   g      4@s   2010-01-01 00:00:20.000000g      >@g      N@s   2010-01-01 00:00:30.000000gš™™™™™Ù?g      D@RV   s   2010-01-01 00:00:40.000000g      I@g      8@g      ¬@R	   s   2010-01-01 00:00:50.000000(   R    R   R   t   delta_tdb_ttt   tdbR@   R   Ro   R-   R.   R/   R0   R   (   R   Rp   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   test_delta_tdb_ttÎ   s    (   RR   RS   Rq   Ru   (    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyRk   ¿   s   	s   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  sn t ‚ t |  | ƒ } | | } t | | ƒ d t j k  sª t ‚ t |  | d d ƒ} | | } t | | ƒ d t j k  sì t ‚ d S(	   sÒ   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.
    s   2001-01-01T00:00:00.R
   t   tais   2016-11-05T00:53:20.i   R   RV   N(   R    t   Nonet   absR   t   psR   R   (	   RO   R   Rp   t   expectedRN   RW   R   RX   R   (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt!   test_quantity_conversion_roundingÝ   s    
#
#
g      °<g      °<g      ø<g     µ=(    (    (    (   t	   functoolsR-   t   numpyR5   t    R    R   R   R   R   t   tableR   t   partialt   allcloseRJ   R   RU   Rk   t   markt   parametrizeRg   Rw   t   nst   usR{   (    (    (    sK   lib/python2.7/site-packages/astropy/time/tests/test_quantity_interaction.pyt   <module>   s   	YW