ó
šßÈ[c        	   @   så  d  d l  Z  d  d l Z d  d l m Z d d l m Z d d l m Z d d l m	 Z	 e	 j
 Z g  e D] Z e d k rh e ^ qh Z g  e D] Z d	 e k r e ^ q Z g  e D] Z d
 e k r² e ^ q² Z d d d d g Z e  j d d d d d g d d d „ ƒ Z e  j j d d d g ƒ e  j j d d d g ƒ e  j j d d d g ƒ e  j j d d d g ƒ d „  ƒ ƒ ƒ ƒ Z e  j j d e ƒ e  j j d e e g ƒ e  j j d e e g ƒ e  j j d  e e g ƒ e  j j d! e e g ƒ e  j j d" e ƒ d# „  ƒ ƒ ƒ ƒ ƒ ƒ Z e  j j d e ƒ e  j j d e e g ƒ e  j j d e e g ƒ e  j j d  e e g ƒ e  j j d" e ƒ d$ „  ƒ ƒ ƒ ƒ ƒ Z e  j j d e ƒ e  j j d e e g ƒ e  j j d e e g ƒ e  j j d  e e g ƒ e  j j d% d d d g ƒ e  j j d" e ƒ d& „  ƒ ƒ ƒ ƒ ƒ ƒ Z e  j j d e ƒ e  j j d e e g ƒ e  j j d e e g ƒ e  j j d  e e g ƒ e  j j d% d d d g ƒ d' „  ƒ ƒ ƒ ƒ ƒ Z e  j j d e	 j
 ƒ e  j j d( d; d< d= d> d? g ƒ d) „  ƒ ƒ Z e  j j d e	 j
 ƒ d* „  ƒ Z e  j j d e e g ƒ e  j j d e e g ƒ e  j j d" d d g ƒ e  j j d+ e e g ƒ d, „  ƒ ƒ ƒ ƒ Z e  j j d e e g ƒ e  j j d! e e g ƒ e  j j d- d d. g ƒ d/ „  ƒ ƒ ƒ Z  e  j j d0 e j! e j" g ƒ e  j j d1 e j# d e j! g ƒ e  j j d2 e j$ e j% g ƒ d3 „  ƒ ƒ ƒ Z& d4 „  Z' d5 „  Z( e  j d6 d d d7 „ ƒ Z) e  j j d" e ƒ d8 „  ƒ Z* d d d9 „ Z+ d d d: „ Z, d S(@   iÿÿÿÿN(   t   assert_allclosei   (   t   units(   t   assert_quantity_allclosei   (   t   LombScarglet   autot   fastt   chi2t   standardt   psdt   logt   modelid   i   i
   i   i    c   	      C   s±   t  j j | ƒ } d | | j |  ƒ } d t  j | } | d | d t  j | | ƒ | d t  j | | ƒ } | d | j |  ƒ } | | | j |  ƒ 7} | | | f S(   s   Generate some data for testingi   i   i    i   g      à?(   t   npt   randomt   RandomStatet   randt   pit   sint   cost   randn(	   t   Nt   periodt   thetat   dyt   rseedt   rngt   tt   omegat   y(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   data   s    <t   minimum_frequencyg      ð?t   maximum_frequencyg      @t   nyquist_factort   samples_per_peaki   c         C   s  |  \ } } } | j  ƒ  | j ƒ  } t | | | ƒ j | | | | ƒ }	 |	 d |	 d }
 t |
 d | | ƒ | d  k r” t |	 d d |
 ƒ n t |	 d | ƒ | d  k rç d t | ƒ | } t |	 d | | d d |
 ƒn t |	 d | d d |
 ƒd  S(   Ni   i    g      ð?g      à?iÿÿÿÿt   atol(   t   maxt   minR   t   autofrequencyR    t   Nonet   len(   R   R   R   R   R    R   R   R   t   baselinet   freqt   dft   avg_nyquist(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_autofrequency   s    	"t   methodt   center_datat   fit_meant   with_errorst
   with_unitst   normalizationc         C   s  | d k r | s | r d  S|  \ } } }	 d d t  j d ƒ }
 | r | t j } | t j } |	 t j }	 |
 | j }
 n  | sŽ d  }	 n  t d | ƒ } t | | |	 d | d | ƒ} | j	 |
 |  } | t
 k rï t d t ƒ | d	 <n  | j	 |
 d
 | | } | rZ| d k r?| r?| j | j d k sWt ‚ qp| j t j k spt ‚ n t | d ƒ spt ‚ t | | ƒ d  S(   Nt   scipygš™™™™™é?g{®Gáz„?i(   R1   R-   R.   t   use_fftt   method_kwdsR,   R   i   t   unit(   R   t   arangeR   t   dayt   magR5   R%   t   dictR   t   powert   FAST_METHODSt   Falset   AssertionErrort   dimensionless_unscaledt   hasattrR   (   R   R,   R-   R.   R/   R0   R1   R   R   R   t	   frequencyt   kwdst   lst
   P_expectedt   P_method(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_all_methods=   s.    	c         C   s;  | d k r | s | r d  S|  \ } } } t  j d | ƒ } | j t ƒ }	 t  j d | ƒ } | j t ƒ }
 t  j d | ƒ } | j d ƒ } d d d t  j d ƒ } | sÁ d  } d  } n  t d | d | ƒ } t | | | |  j | d	 | d
 | ƒ} t |	 |
 | |  j | d	 | d
 | ƒ} t	 | | ƒ d  S(   NR2   id   t   int32g{®Gáz„?gš™™™™™é?i(   R-   R.   R,   R1   (
   R   t   floort   astypet   intR6   R%   R9   R   R:   R    (   R   R,   R-   R.   R/   R1   R   R   R   t   t_intt   y_intt   dy_intR@   RA   t   P_floatt   P_int(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_integer_inputsf   s.    				t   ntermsc      
   C   sE  | \ } } }	 d d t  j d ƒ }
 | s5 d  }	 n  t | | |	 d | d | d | ƒ} t d | ƒ } | d k rÜ | rÜ t j t ƒ  } | j |
 d	 |  | Wd  QXd t	 | j
 ƒ k rÓ d
 t	 | j
 ƒ k sAt ‚ ne | j |
 |  } d |  k rt d t ƒ | d <n  | j |
 d	 |  | } t | | d d d d ƒd  S(   Ngš™™™™™é?g{®Gáz„?i(   R-   R.   RP   R1   i    R,   t   biasR   R3   R4   t   rtolgH¯¼šò×z>R!   gÙ}ÚõÐò¾:(   R   R6   R%   R   R9   t   pytestt   raisest
   ValueErrorR:   t   strt   valueR=   R<   R    (   R,   R-   R.   R/   RP   R1   R   R   R   R   R@   RB   RA   t   errRC   RD   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_nterms_methods   s     	3c      
   C   sˆ  | \ } } } d d t  j d ƒ }	 | s5 d  } n  t | | | d | d | d | ƒ}
 t d |  d d	 ƒ } |  d
 k rÌ | d k rÌ t j t ƒ  } |
 j |	 |  Wd  QXd t	 | j
 ƒ k s„t ‚ n¸ | d k r:| r:t j t ƒ  } |
 j |	 |  Wd  QXd t	 | j
 ƒ k r1d t	 | j
 ƒ k s„t ‚ nJ |
 j |	 |  } t d t ƒ | d <|
 j |	 |  } t | | d d ƒd  S(   Ngš™™™™™é?g{®Gáz„?i(   R-   R.   RP   R,   R1   R   R   i   i    RQ   R3   R4   R!   gü©ñÒMb€?(   R   R6   R%   R   R9   RS   RT   RU   R:   RV   RW   R=   R<   R    (   R,   R-   R.   R/   RP   R   R   R   R   R@   RB   RA   RX   t   P_fastt   P_slow(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_fast_approximations®   s&    	3t   shapec         C   s€   | \ } } } t  j t  j | ƒ ƒ } t  j d | j d ƒ | _ t | | d t ƒj | d |  ƒ} | j	 | k s| t
 ‚ d  S(   Ni   R.   R,   (   R   t   asarrayt   zerosR6   t   sizet   flatR   R<   R:   R]   R=   (   R,   R]   R   R   R   R   R(   t   PLS(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_output_shapesÒ   s
    $c         C   sö   | \ } } } | t  j } | t  j } t j d d d ƒ } t j t ƒ ) } t | | d t	 ƒj
 | d |  ƒWd  QXt | j ƒ j d ƒ s– t ‚ t j t ƒ - } t | | | d t	 ƒj
 | | j ƒ Wd  QXt | j ƒ j d ƒ sò t ‚ d  S(   Ng      à?g      ø?i
   R.   R,   s!   Units of frequency not equivalents   Units of dy not equivalent(   R   t   secondR8   R   t   linspaceRS   RT   RU   R   R<   R:   RV   RW   t
   startswithR=   R5   (   R,   R   R   R   R   R@   RX   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_errors_on_unit_mismatchÜ   s    (,t
   with_errorc         C   sX  |  \ } } } | t  j } t  j | d ƒ }	 | t  j }
 t  j |
 d ƒ } t | |	 ƒ t |
 | ƒ | r} | t  j } n d  } t | |
 | ƒ j ƒ  \ } } t |	 | | ƒ j ƒ  \ } } | j d t  j k sÛ t	 ‚ | j d t  j
 k s÷ t	 ‚ t | | ƒ t | | ƒ t | |
 | ƒ j | ƒ } t |	 |
 | ƒ j | ƒ } t | | ƒ d  S(   Nt   hourt
   millimeterg      ð?(   R   R7   t   Quantityt   meterR   R%   R   t	   autopowerR5   R=   Ri   R:   (   R   R.   R-   R1   Rh   R   R   R   t   t_dayt   t_hourt   y_metert   y_millimetert   freq_dayt   P1t	   freq_hourt   P2t   P3t   P4(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_unit_conversionsñ   s&    R(   g       @c   	      C   sþ   t  j j d ƒ } d | j d ƒ } d | j d ƒ } t  j | ƒ } |  r^ | | d 7} n  | | d t  j d t  j | | | d ƒ 7} | rÀ | t j } | t j	 } | t j } n  t
 | | d t d |  ƒ} | j | | ƒ } t | | ƒ d  S(	   Ni    i
   i(   i   i   i   R-   R.   (   R   R   R   R   t
   zeros_likeR   R   R   R7   R8   R   R<   R
   R   (	   R.   R0   R(   R   R   t   paramsR   RB   t   y_fit(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt
   test_model  s    2t   t_unitt   frequency_unitt   y_unitc         C   sŽ   |  \ } } } | d  } d } | | } | | } | | } | | } | | } t  | | | ƒ }	 |	 j | | ƒ }
 |
 j | k sŠ t ‚ d  S(   Ni   g      ð?(   R   R
   R5   R=   (   R   R}   R~   R   R   R   R   t   t_fitR@   RB   R{   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_model_units_match0  s    





c      
   C   sP  |  \ } } } d } | d  } | t  j } | t  j } | t  j } d | j } t j t ƒ # } t | | ƒ j | d d ƒWd  QXt	 | j
 ƒ j d ƒ s¥ t ‚ t j t ƒ & } t | | ƒ j d d g | ƒ Wd  QXt	 | j
 ƒ j d ƒ sú t ‚ t j t ƒ # } t | | | ƒ j | | ƒ Wd  QXt	 | j
 ƒ j d ƒ sLt ‚ d  S(	   Ng      ð?i   R@   s!   Units of frequency not equivalenti   i   s   Units of t not equivalents   Units of dy not equivalent(   R   Rd   R8   R5   RS   RT   RU   R   R
   RV   RW   Rf   R=   (   R   R   R   R   R@   R€   RX   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_model_units_mismatchC  s     
"%"c   
   	   C   s“   |  \ } } } t  | | | ƒ } t d d d d d d d d  ƒ } | j |   } | j | ƒ } | j |   \ } }	 t | | ƒ t | |	 ƒ d  S(   NR    i   R   i   R   R   (   R   R9   R%   R$   R:   Rm   R    (
   R   R   R   R   RB   t   kwargst   freq1t   power1t   freq2t   power2(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_autopower]  s    iè  c         C   s`   t  j j | ƒ } d | j |  ƒ } d | d | j |  ƒ } | | j |  ƒ } | | | f S(   s   Generate null hypothesis dataid   g      à?i   (   R   R   R   R   R   (   R   R   R   R   R   R   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt	   null_dataj  s
    c      	   C   sH  |  \ } } } t  | ƒ } t | | | ƒ } | j d | d d ƒ \ } } t j d | j ƒ  d ƒ }	 |	 d |	 d }
 |	 d  d |
 } t | | d | ƒ} t |	 | d | ƒ} t | t j	 | ƒ |
 d	 d
 d d ƒt j
 | d d t ƒ\ } } d | d | d  } t | | d | ƒ} t | | d	 d d d | d ƒd  S(   NR1   R   i(   i    iè  i   iÿÿÿÿg      à?RR   gñhãˆµøä>R!   g:Œ0âŽyE>i   t   normedgš™™™™™©?(   R&   R   Rm   R   Re   R"   t   _lombscargle_pdft   _lombscargle_cdfR    t   difft	   histogramt   True(   R‰   R1   R   R   R   R   RB   R(   R:   t   zt   dzt   z_midt   pdft   cdft   histt   binst	   midpoints(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   test_distributiont  s    &c         C   sÕ   | | d k r t  d ƒ ‚ n  | | } | d k rC t j |  ƒ S| d k rk d | d |  d | d S| d k r“ d | d |  d | d S| d	 k r¼ d | t j d | |  ƒ St d
 j | ƒ ƒ ‚ d S(   sâ  Probability density function for Lomb-Scargle periodogram

    Compute the expected probability density function of the periodogram
    for the null hypothesis - i.e. data consisting of Gaussian noise.

    Parameters
    ----------
    z : array-like
        the periodogram value
    N : int
        the number of data points from which the periodogram was computed
    normalization : string
        The periodogram normalization. Must be one of
        ['standard', 'model', 'log', 'psd']
    dH, dK : integers (optional)
        The number of parameters in the null hypothesis and the model

    Returns
    -------
    pdf : np.ndarray
        The expected probability density function

    Notes
    -----
    For normalization='psd', the distribution can only be computed for
    periodograms constructed with errors specified.
    All expressions used here are adapted from Table 1 of Baluev 2008 [1]_.

    References
    ----------
    .. [1] Baluev, R.V. MNRAS 385, 1279 (2008)
    i   s   Degrees of freedom != 2R   R   g      à?i   g      à¿R
   R	   s%   normalization='{0}' is not recognizedN(   t   NotImplementedErrorR   t   expRU   t   format(   R   R   R1   t   dHt   dKt   Nk(    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyR‹     s    !
	c         C   sÅ   | | d k r t  d ƒ ‚ n  | | } | d k rG d t j |  ƒ S| d k rg d d |  d | S| d k r‡ d d |  d | S| d	 k r¬ d t j d | |  ƒ St d
 j | ƒ ƒ ‚ d S(   sà  Cumulative distribution for the Lomb-Scargle periodogram

    Compute the expected cumulative distribution of the periodogram
    for the null hypothesis - i.e. data consisting of Gaussian noise.

    Parameters
    ----------
    z : array-like
        the periodogram value
    N : int
        the number of data points from which the periodogram was computed
    normalization : string
        The periodogram normalization. Must be one of
        ['standard', 'model', 'log', 'psd']
    dH, dK : integers (optional)
        The number of parameters in the null hypothesis and the model

    Returns
    -------
    cdf : np.ndarray
        The expected cumulative distribution function

    Notes
    -----
    For normalization='psd', the distribution can only be computed for
    periodograms constructed with errors specified.
    All expressions used here are adapted from Table 1 of Baluev 2008 [1]_.

    References
    ----------
    .. [1] Baluev, R.V. MNRAS 385, 1279 (2008)
    i   s   Degrees of freedom != 2R   i   R   g      à¿R
   g      à?R	   s%   normalization='{0}' is not recognizedN(   R™   R   Rš   RU   R›   (   R   R   R1   Rœ   R   Rž   (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyRŒ   Â  s    !
	(    (   i   (   i   (   i   (   i   i   (-   RS   t   numpyR   t   numpy.testingR    t    R   t   tests.helperR   R   t   available_methodst   ALL_METHODSR,   t   ALL_METHODS_NO_AUTOR;   t   NTERMS_METHODSt   NORMALIZATIONSt   fixtureR   t   markt   parametrizeR%   R+   R   R<   RE   RO   RY   R\   Rc   Rg   Rx   R|   Rd   R7   t   HzR8   t   janskyR   R‚   Rˆ   R‰   R˜   R‹   RŒ   (    (    (    sO   lib/python2.7/site-packages/astropy/stats/lombscargle/tests/test_lombscargle.pyt   <module>   st   	%%%$--$*#-3 0	!-%*"0			2