ó
šßÈ[c           @   sþ   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d d l m Z m Z m	 Z	 m
 Z
 m Z m Z d d l m Z e  j e j d d d	 d
 ƒZ e  j e j d d d	 d ƒZ e  j e j d d d	 d ƒZ d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿNi   (   t   Timet	   TimeDeltat   OperandTypeErrort   ScaleValueErrort   TIME_SCALESt   TIME_DELTA_SCALESi   (   t   unitst   rtolg       @iÌÿÿÿt   atoli    i   i  t   TestTimeDeltac           B   s   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j	 j
 d d d g d g f g ƒ d	 „  ƒ Z d
 „  Z d „  Z d „  Z d „  Z RS(   s   Test TimeDelta classc         C   s²   t  d d d ƒ|  _ t  d d d ƒ|  _ t  d d d d d d d	 d
 d d d t j d t j d t j f ƒ|  _ t d d d ƒ|  _ t t	 j
 d d d ƒ d d ƒ|  _ d  S(   Ns
   2010-01-01t   scalet   utcs   2010-01-02 00:00:01s   2010-01-03 01:02:03t	   precisioni	   t	   in_subfmtt   date_hmst
   out_subfmtt   date_hmt   locationg     ÀRÀg      >@iô  g      Y@t   formatt   secid   iè  (   R    t   tt   t2t   ut   degreet   mt   t3R   t   dtt   npt   aranget   dt_array(   t   self(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   setup   s    *c         C   sÑ   |  j  |  j } t | ƒ j d ƒ s+ t ‚ t | j d d ƒ sG t ‚ t | j d ƒ s_ t ‚ |  j  | } | j	 |  j j	 k s‡ t ‚ | |  j
 } t | j d ƒ s¬ t ‚ t j t ƒ  | |  j Wd  QXd  S(   Ns>   <TimeDelta object: scale='tai' format='jd' value=1.00001157407g    õ@g     õ@g    Ðõ@(   R   R   t   reprt
   startswitht   AssertionErrort   allclose_jdt   jdt   allclose_secR   t   isoR   t   pytestt   raisesR   (   R   R   R   t   dt2(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_sub    s    c         C   s½   t  j t ƒ  |  j |  j Wd  QX|  j |  j } |  j | } | j |  j j k s\ t ‚ | |  j } t | j	 d ƒ s t ‚ |  j |  j } | |  j } | j |  j j k s¹ t ‚ d  S(   Ng    Põ@(
   R'   R(   R   R   R   R&   R"   R   R%   R   (   R   R   R   R)   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_add4   s    c         C   sG  t  d d d d d ƒ} t  d d g d d d d ƒ} t d d d ƒ} t d d	 g d d ƒ} | | } t | j d ƒ s‚ t ‚ | j s‘ t ‚ | | } t | j d d	 g ƒ s¹ t ‚ | j sÉ t ‚ | | } t | j d d
 g ƒ sñ t ‚ | j st ‚ | | } t | j d	 ƒ s#t ‚ | j s2t ‚ | | } t | j d	 d g ƒ sZt ‚ | j sjt ‚ | | } t | j d ƒ sŒt ‚ | j s›t ‚ | | } t | j d d	 g ƒ sÃt ‚ | j sÓt ‚ | | } t | j d d
 g ƒ sût ‚ | j st ‚ | | } t | j d	 d g ƒ s3t ‚ | j sCt ‚ d S(   si   Check time arithmetic as well as properly keeping track of whether
        a time is a scalar or a vectorg        R   t   mjdR
   R   g      ð?g      Y@R$   g      i@g     @Y@g     Àr@N(   R    R   R#   R,   R"   t   isscalarR$   (   R   R   R   R   R)   t   out(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_add_vectorG   s>    








c         C   sn  t  d d d d d ƒ} t  d d g d d d d ƒ} t d d d ƒ} t d d	 g d d ƒ} | | } t | j d
 ƒ s‚ t ‚ | j s‘ t ‚ | | } t | j d
 d g ƒ s¹ t ‚ | j sÉ t ‚ | | } t | j d
 d g ƒ sñ t ‚ | j st ‚ | | } t | j d ƒ s#t ‚ | j s2t ‚ | | } t | j d d
 g ƒ sZt ‚ | j sjt ‚ d S(   si   Check time arithmetic as well as properly keeping track of whether
        a time is a scalar or a vectorg        R   R,   R
   R   g      ð?g      Y@R$   g      i@g      YÀg      iÀg     ÀXÀN(   R    R   R#   R,   R"   R-   R$   (   R   R   R   R   R)   R.   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_sub_vectort   s&    




t   valuesg   ÀN»BAg   @O»BAc         C   sR  | \ } } t  | d d d d ƒ} t  | d d d d ƒ} | | } t | d t ƒ} t j | j | j k ƒ sy t ‚ | j j | j j k s— t ‚ | j j	 | j j	 k sµ t ‚ t | d t
 ƒ} t j | j | j k ƒ sè t ‚ | j j | j j k	 st ‚ | j j	 | j j	 k	 s$t ‚ t | d d ƒ} t | j d ƒ sNt ‚ d S(	   sg   Test copying the values of a TimeDelta object by passing it into the
        Time initializer.
        R   R$   R
   R   t   copyR   g     õ@N(   R    R   t   FalseR   t   allR$   R"   t   _timet   jd1t   jd2t   TrueR%   t   value(   R   R1   t   val1t   val2R   R   R   R)   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_copy_timedelta   s    
!!c         C   s¤   x |  j  |  j f D]‰ } | } t j | j | j k ƒ sB t ‚ t | ƒ } t j | j | j k ƒ so t ‚ t | ƒ } t j | j | j k ƒ s t ‚ q Wd  S(   N(   R   R   R   R4   R$   R"   t   abs(   R   R   R)   t   dt3t   dt4(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_neg_abs©   s    "!c         C   s  xr |  j  |  j f D]^ } | | | } d | } t | j | j ƒ sL t ‚ | d } t | j | j ƒ s t ‚ q W|  j  t j d ƒ } | d j d k s¤ t ‚ | d j |  j  |  j  j k sÊ t ‚ t j t	 ƒ  |  j  |  j  Wd  QXt j t	 ƒ  |  j  |  j
 Wd  QXd  S(   Ng      @i   i    g        iÿÿÿÿ(   R   R   R#   R$   R"   R   R   R'   R(   R   R   (   R   R   R)   R>   R?   t   dt5(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_mul_div²   s    

&c         C   sÜ  t  d d d ƒ} xX|  j |  j f D]D} | | } | j | j k sM t ‚ | j | j k se t ‚ | j | j k s} t ‚ | j | j k s• t ‚ | | } | j | j k s· t ‚ | j | j k sÏ t ‚ | j | j k sç t ‚ | j | j k sÿ t ‚ | | } | j | j k s!t ‚ | j | j k s9t ‚ | j | j k sQt ‚ | j | j k s% t ‚ q% W|  j j } t	 | d ƒ sŽt ‚ t	 | d ƒ s¤t ‚ | j
 } t	 | d ƒ sÂt ‚ t	 | d ƒ s×t ‚ | j } t	 | d ƒ sõt ‚ t	 | d ƒ s
t ‚ xË t j t j f D]· }	 |	 | | ƒ }
 t	 |
 d ƒ sHt ‚ t	 |
 d ƒ s^t ‚ |	 | | ƒ } t	 | d ƒ sƒt ‚ t	 | d ƒ s™t ‚ |	 | | ƒ } t	 | d ƒ s¾t ‚ t	 | d ƒ st ‚ qWd  S(   Ng     @@R   R   t   _delta_tdb_ttt   _delta_ut1_utc(   R   R   R   R   R"   R   R   R   t   tdbt   hasattrt   ut1R   t   operatort   addt   sub(   R   R   R   t   tat   trt   tst   t_tdbt	   t_tdb_ut1t   t_tdb_ut1_utct   opt   t1R   R   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_keep_propertiesÁ   sH    


		c         C   ss   t  d d d ƒ} | j d k s' t ‚ | j d k s< t ‚ d | _ | j d k sZ t ‚ | j d k so t ‚ d S(   s:   
        Test basics of setting format attribute.
        g     õ@R   R   R$   g      ð?N(   R   R9   R"   R   (   R   R   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_set_formatí   s    	(   g   ÀN»BAg   @O»BA(   t   __name__t
   __module__t   __doc__R   R*   R+   R/   R0   R'   t   markt   parametrizeR<   R@   RB   RS   RT   (    (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyR	      s   					-	!				,t   TestTimeDeltaScalesc           B   s³   e  Z d  Z d „  Z d „  Z e j j d e e	 j
 e e ƒ ƒ ƒ d „  ƒ Z d „  Z e j j d e e	 j
 e e j e j f ƒ ƒ ƒ d	 „  ƒ Z e j j d e ƒ d
 „  ƒ Z RS(   sg   Test scale conversion for Time Delta.
    Go through @taldcroft's list of expected behaviour from #1932c            sW   d d d d g ˆ  _  t ‡  f d †  t Dƒ ƒ ˆ  _ t ‡  f d †  t Dƒ ƒ ˆ  _ d  S(   Ns   2012-06-30 12:00:00s   2012-06-30 23:59:59s   2012-07-01 00:00:00s   2012-07-01 12:00:00c         3   s0   |  ]& } | t  ˆ  j d  | d d ƒf Vq d S(   R
   R   i	   N(   R    t	   iso_times(   t   .0R
   (   R   (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pys	   <genexpr>  s   c         3   s1   |  ]' } | ˆ  j  | ˆ  j  | d  f Vq d S(   i    N(   R   (   R\   R
   (   R   (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pys	   <genexpr>  s   (   R[   t   dictR   R   R   (   R   (    (   R   s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyR   þ   s    c      
   C   sv   x: t  t ƒ d  g D]% } t d d d g d d d | ƒq Wt j t ƒ $ t d d d g d d d d ƒWd  QXd  S(   Ng        g      ð?g      $@R   R   R
   R   (   t   listR   t   NoneR   R'   R(   R   (   R   R
   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_delta_scales_definition  s    #t   scale1t   scale2c   
      C   s  |  j  | } |  j  | } | | } | t k rH | j | k so t ‚ n' | d k sZ t ‚ | j d k so t ‚ | | } | j | k sŽ t ‚ t | | ƒ } t | j | j ƒ s¸ t ‚ | | } | j | k s× t ‚ t | | ƒ }	 t |	 j | j ƒ st ‚ d S(   sO  T(X) - T2(Y)  -- does T(X) - T2(Y).X and return dT(X)
        and T(X) +/- dT(Y)  -- does (in essence) (T(X).Y +/- dT(Y)).X

        I.e., time differences of two times should have the scale of the
        first time.  The one exception is UTC, which returns TAI.

        There are no timescales for which this does not work.
        R   t   taiN(   R   R   R
   R"   t   getattrR#   R$   (
   R   Ra   Rb   RR   R   R   t   t1_recover_t2_scalet
   t1_recovert   t2_recover_t1_scalet
   t2_recover(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_scales_for_time_minus_time  s    


c         C   s¸  |  j  d } |  j  d } | | } | j d k s9 t ‚ t | j d ƒ sQ t ‚ |  j  d } | | } | j d k s} t ‚ t | j d ƒ s– t ‚ |  j d j } | | d } | | } | j d k sÓ t ‚ t | j d ƒ së t ‚ | | }	 |	 j d k s
t ‚ t |	 j d ƒ s"t ‚ x3 d D]+ }
 t j t	 ƒ  | |  j  |
 Wd	 QXq)W|  j  d } |  j  d } | | } | j d k s‘t ‚ t | j d ƒ sªt ‚ |  j d j
 } | | d } | | } | j d k sçt ‚ t | j d ƒ sÿt ‚ x3 d D]+ }
 t j t	 ƒ  | |  j  |
 Wd	 QXqW|  j  d } | | d } | j d k set ‚ | d j d k s~t ‚ x3 d D]+ }
 t j t	 ƒ  | |  j  |
 Wd	 QXq…Wd	 S(   s°   dT(X) +/- dT2(Y) -- Add/substract JDs for dT(X) and dT(Y).X

        I.e. this will succeed if dT(Y) can be converted to scale X.
        Returns delta time in scale X
        Rc   t   ttg        t   tcgi    RE   t   tcbRG   NR   iÿÿÿÿ(   RE   Rl   RG   (   R   Rc   Rj   Rk   RG   (   R   Rc   Rj   Rk   Rl   RE   (   R   R
   R"   R%   R   R   Rk   R'   R(   t	   TypeErrorRE   (   R   t   dt_tait   dt_ttt   dt0t   dt_tcgt   dt1t	   t_tai_tcgt
   dt_tai_tcgR)   R>   R
   t   dt_tcbt   dt_tdbR?   t	   t_tcb_tdbt
   dt_tcb_tdbRA   t   dt_ut1(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt!   test_scales_for_delta_minus_delta,  sP    





R
   RQ   c         C   s"  t  d d d d g d d ƒ} | j d k s3 t ‚ | j d ƒ } |  j | } | | | ƒ } | j | j k sv t ‚ t | j | | j | j ƒ ƒ s t ‚ | | | ƒ } | j | j k sÄ t ‚ t | j | | j | j ƒ ƒ së t ‚ | | | ƒ } | j | j k st ‚ t | j | j ƒ s-t ‚ |  j | }	 | |	 | ƒ }
 |
 j |	 j k sat ‚ t |
 j | |	 j | j ƒ ƒ sˆt ‚ | t	 j
 k rÜ| | |	 ƒ } | j |	 j k s¾t ‚ t | j |
 j ƒ sÜt ‚ n  | |	 | ƒ } | j |	 j k st ‚ t | j |
 j ƒ st ‚ d S(	   sI  T(X) +/- dT(None) or T(X) +/- Quantity(time-like)

        This is always allowed and just adds JDs, i.e., the scale of
        the TimeDelta or time-like Quantity will be taken to be X.
        The one exception is again for X=UTC, where TAI is assumed instead,
        so that a day is always defined as 86400 seconds.
        g        g      ð?g      ð¿g     @@R   R   t   sN(   R   R
   R_   R"   t   toR   R#   R$   R   RH   RI   (   R   R
   RQ   t   dt_nonet   q_timeR   Rr   R)   R>   R   RR   R   R   (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt#   test_scales_for_delta_scale_is_nonej  s0    '''c   
      C   sE  |  j  | } t d d d ƒ} | j d ƒ } | d | d } t | j | j ƒ | d k Ase t ‚ | d | } t | j | d j ƒ | d k Asœ t ‚ | | d } t | j | d j ƒ | d k AsÓ t ‚ | d | } t | j | d j ƒ | d k As
t ‚ | d | }	 t |	 j | d j ƒ | d k AsAt ‚ d S(	   sÇ   TimeDelta or Quantity holding 1 day always means 24*60*60 seconds

        This holds true for all timescales but UTC, for which leap-second
        days are longer or shorter by one second.
        g      ð?R   R$   t   dayiÿÿÿÿi    R   N(   R   R   R|   R#   R$   R"   (
   R   R
   R   t   dt_dayt   q_dayt   dt_day_leapRR   R   R   t   t4(    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   test_delta_day_is_86400_seconds  s    %)))(   Ra   Rb   (   R
   RQ   (   RU   RV   RW   R   R`   R'   RX   RY   R^   t	   itertoolst   productR   Ri   Rz   RH   RI   RJ   R   R…   (    (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyRZ   ú   s   			$	>	$$g      °<g      °<g      °<g      °<g      °<g      ø<g     µ=(    (    (   t	   functoolsR†   t   numpyR   RH   R'   t    R    R   R   R   R   R   R   R   t   partialt   allcloseR#   t   allclose_jd2R%   R	   RZ   (    (    (    s<   lib/python2.7/site-packages/astropy/time/tests/test_delta.pyt   <module>   s   .		æ