ó
î&]\c           @` sš  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z m	 Z	 m
 Z
 m Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z d  d l m Z m Z d „  Z d	 „  Z d
 „  Z d e  f d „  ƒ  YZ! d e  f d „  ƒ  YZ" d e  f d „  ƒ  YZ# d e  f d „  ƒ  YZ$ d e  f d „  ƒ  YZ% d „  Z& d e  f d „  ƒ  YZ' d e  f d „  ƒ  YZ( d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   assert_t   assert_equalt   assert_allcloset   assert_array_equal(   t   raisest   warns(   t   xrange(   t	   argrelmaxt	   argrelmint   peak_prominencest   peak_widthst   _unpack_condition_argst
   find_peakst   find_peaks_cwtt   _identify_ridge_lines(   t   _local_maxima_1dt   PeakPropertyWarningc         C` s{   t  j d | ƒ j t ƒ } t  j | d t ƒ} xD t | ƒ D]6 \ } } | |  | | } | t  j | d ƒ 7} q= W| S(   Ni    t   dtypei   (   t   npt   aranget   astypet   floatt   zerost	   enumeratet   exp(   t   center_locst   sigmast   total_lengtht   xdatat   out_datat   indt   sigmat   tmp(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   _gen_gaussians   s    c         C` s[   t  |  ƒ } | | d } t j | | | d | ƒj t ƒ } t | |  | ƒ } | | f S(   Ni   t   num(   t   lenR   t   linspaceR   t   intR$   (   R   R   t	   num_peakst   deltaR   R    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   _gen_gaussians_even&   s
    %c         C` sÛ  d „  } t  j | ƒ } t  j | ƒ } t j | d g d t ƒ} |  | d d d … f <| d |  d t | ƒ } | | k  r t d ƒ ‚ n  | t | ƒ d } | t | ƒ d }	 x÷ t d | ƒ D]æ }
 | |
 d d f } | |
 d d f d } |
 | d k r6t | ƒ d k r6| d |
 | j	 ƒ  7} n  |
 |	 d k rkt | ƒ d k rk| | j	 ƒ  7} n  | | | d ƒ } | | | d ƒ } | | g | |
 d d … f <qÇ W| d d … d f | d d … d f g S(	   s¾  
    Generate coordinates for a ridge line.

    Will be a series of coordinates, starting a start_loc (length 2).
    The maximum distance between any adjacent columns will be
    `max_distance`, the max distance between adjacent rows
    will be `map_gap'.

    `max_locs` should be the size of the intended matrix. The
    ending coordinates are guaranteed to be less than `max_locs`,
    although they may not approach `max_locs` at all.
    c         S` s"   t  |  d ƒ } t | | ƒ } | S(   Ni    (   t   maxt   min(   R%   t   max_valt   out(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   keep_bounds<   s    i   R   i    Ns3   Cannot generate ridge line according to constraintsi   iÿÿÿÿ(
   t   copyt   deepcopyR   R   R(   t   sumt
   ValueErrorR&   R	   t   pop(   t
   start_locst   max_locst   lengtht	   distancest   gapsR0   t   locsR   t   dist_intt   gap_intR!   t   nextcolt   nextrow(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   _gen_ridge_line.   s*    	"" t   TestLocalMaxima1dc           B` s¤   e  Z d  „  Z d „  Z d „  Z d „  Z e j j d e	 j
 d d d g ƒ e	 j
 d d	 d d
 d
 g ƒ e	 j
 d d d d d d d g ƒ g ƒ d „  ƒ Z d „  Z RS(   c         C` s\   t  j g  d t  j ƒ} x= t | ƒ D]/ } t | t  j g  ƒ ƒ t | j d k ƒ q% Wd S(   s   Test with empty signal.R   N(   R   t   arrayt   float64R   R   R   t   baset   None(   t   selft   xRB   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt
   test_empty[   s    c         C` sV   t  j d d ƒ } x= t | ƒ D]/ } t | t  j g  ƒ ƒ t | j d k ƒ q Wd S(   s   Test with linear signal.i    id   N(   R   R'   R   R   RB   R   RD   RE   (   RF   RG   RB   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_linearb   s    c         C` s~   t  j d d d ƒ } | d d d … c d 7<t  j d d d ƒ } x4 t | ƒ D]& } t | | ƒ t | j d k ƒ qP Wd S(   s   Test with simple signal.iöÿÿÿi
   i2   i   Ni   i   (   R   R'   R   R   R   R   RD   RE   (   RF   RG   t   expectedRB   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_simplei   s    c         C` sÙ   t  j d d d d d d d d d d d d d d d d d	 d	 d	 d	 d	 d g ƒ } t | ƒ \ } } } t | t  j d d d
 d d g ƒ ƒ t | t  j d d d d d g ƒ ƒ t | t  j d d d d d g ƒ ƒ d S(   s+   Test if flat maxima are detected correctly.gÍÌÌÌÌÌô¿i    i   i   i   gìQ¸…ë@i   iöÿÿÿiûÿÿÿi   i   i   i   i   i   i   i	   i   i   N(   R   RB   R   R   (   RF   RG   t	   midpointst
   left_edgest   right_edges(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_flat_maximat   s    6%%RG   g      ð?i    i   g      @i   i   g      @i   i   c         C` sD   x= t  | ƒ D]/ } t | t j g  ƒ ƒ t | j d k ƒ q Wd S(   s,   Test if behavior on signal edges is correct.N(   R   R   R   RB   R   RD   RE   (   RF   RG   RB   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_signal_edges}   s    c      
   C` s®   t  t d d ƒ t t j d ƒ ƒ Wd QXt  t d d ƒ t t j d d t ƒƒ Wd QXt  t d d ƒ t d d	 g ƒ Wd QXt  t d d
 ƒ t d ƒ Wd QXd S(   s,   Test input validation and raised exceptions.t   matchs   wrong number of dimensionsi   Ns   expected 'float64_t'R   t   listg      ð?g       @s   'x' must not be None(   i   i   (   R   R4   R   R   t   onesR(   t	   TypeErrorRE   (   RF   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_exceptionsˆ   s    (   t   __name__t
   __module__RH   RI   RK   RO   t   pytestt   markt   parametrizeR   RB   RP   RU   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRA   Y   s   					3t   TestRidgeLinesc           B` s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` sN   t  j d d g ƒ } t | d t  j d ƒ d ƒ } t t | ƒ d k ƒ d  S(   Ni   id   i   i   i    (   R   R   R   RS   R   R&   (   RF   t	   test_matrt   lines(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRH   –   s    c         C` s¸   t  j d d g ƒ } d | d <t | d t  j d ƒ d ƒ } t t | ƒ d k ƒ t  j d d g ƒ } d | d d … d f <t | d t  j d ƒ d ƒ } t t | ƒ d k ƒ d  S(   Ni   id   i   i    i
   i   (   i    i
   (   R   R   R   RS   R   R&   (   RF   R\   R]   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_minimal›   s    
c         C` sÈ   d d d d g } d d d d d g } t  j d d g ƒ d } d } t d d	 g | j | | | ƒ } d | | d | d f <t | ƒ t  j d ƒ } t | | t | ƒ d ƒ } t | | g ƒ d  S(
   Ni    i   i   i   i   i2   gê-™—q=i   i   (   R   R   R@   t   shapeR,   RS   R   R   (   RF   R9   R:   R\   R8   t   linet   max_distancest   identified_lines(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_single_pass¦   s    !c         C` s@  d d d d g } d d d d g } t  j d d g ƒ } d } t d d	 g | j | | | ƒ } d | | d | d f <d
 } | t  j d ƒ } t | | t | ƒ d ƒ } t t | ƒ d k ƒ xv | D]n }	 t  j	 |	 d ƒ }
 t  j
 j t  j |
 ƒ | ƒ t  j	 |	 d ƒ } t  j
 j t  j | ƒ t | ƒ d ƒ qÊ Wd  S(   Ni    i   i   i   i   i   i2   i   i   i   gš™™™™™¹?(   R   R   R@   R_   RS   R   R,   R   R&   t   difft   testingt   assert_array_lesst   abs(   RF   R9   R:   R\   R8   R`   t   max_distRa   Rb   t   ilinet   adistst   agaps(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_single_bigdist±   s    !c         C` s<  d d d d g } d } d d d d g } t  j d d g ƒ } d	 } t d d
 g | j | | | ƒ } d | | d | d f <d } | t  j d ƒ } t | | | ƒ }	 t t |	 ƒ d k ƒ xv |	 D]n }
 t  j |
 d ƒ } t  j	 j
 t  j | ƒ | ƒ t  j |
 d ƒ } t  j	 j
 t  j | ƒ t | ƒ d ƒ qÆ Wd  S(   Ni    i   i   i   i   i   i   i2   i   i   i   gš™™™™™¹?(   R   R   R@   R_   RS   R   R   R&   Rd   Re   Rf   Rg   R,   (   RF   R9   t   max_gapR:   R\   R8   R`   Rh   Ra   Rb   Ri   Rj   Rk   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_single_biggapÅ   s     !c         C` s-  d g } d } d d g } t  j d d g ƒ } d } t d d g | j | | | ƒ } d | | d | d f <d } | t  j d ƒ } t | | | ƒ }	 t t |	 ƒ d k ƒ xv |	 D]n }
 t  j |
 d ƒ } t  j	 j
 t  j | ƒ | ƒ t  j |
 d ƒ } t  j	 j
 t  j | ƒ t | ƒ d ƒ q· Wd  S(	   Ni    i   i   i   i2   i   i   gš™™™™™¹?(   R   R   R@   R_   RS   R   R   R&   Rd   Re   Rf   Rg   R,   (   RF   R9   Rm   R:   R\   R8   R`   Rh   Ra   Rb   Ri   Rj   Rk   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_single_biggapsÚ   s     	!(   RV   RW   RH   R^   Rc   Rl   Rn   Ro   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyR[   ”   s   					t
   TestArgrelc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` sË   t  j g  d t ƒ} t  j d ƒ } t | ƒ } t t | ƒ d ƒ t | d | ƒ t  j d ƒ } t | d d ƒ\ } } t | | ƒ t | | ƒ t | d d ƒ\ } } t | | ƒ t | | ƒ d  S(   NR   i   i   i    i   t   axis(   i   i   (   R   RB   R(   R   R   R   R&   R   (   RF   t   empty_arrayt   z1t   it   z2t   rowt   col(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRH   ò   s    c      
   C` sÙ  t  j d d d d d g d d d d d g d d d d d g d d d d d g d d d d d g g ƒ } t | d d ƒ\ } } t  j | ƒ } t | | d d d g ƒ t | | d d d g ƒ t | d d ƒ\ } } t  j | ƒ } t | | d d d g ƒ t | | d d d g ƒ t | d d ƒ\ } } t  j | ƒ } t | | d d d g ƒ t | | d d d g ƒ t | d d ƒ\ } } t  j | ƒ } t | | d d d g ƒ t | | d d d g ƒ d  S(   Ni   i   i   Rq   i    i   (   R   RB   R
   t   argsortR   R   (   RF   RG   Rv   Rw   t   order(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt
   test_basic
  s*    c         C` s®   d } d d d d d g } t  | d ƒ \ } } | | d | | | <| | d | | | <t | d	 | d
 d ƒd } t t | ƒ t | ƒ k ƒ t | | k j ƒ  ƒ d  S(   Ni   g      ð?g       @g      $@g      @g      .@iô  gwJëÿï?Ry   t   modet   clipi    (   R+   R
   R   R&   t   all(   RF   Ry   R   t	   test_datat   act_locst   rel_max_locs(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_highorder)  s    c         C` sð   d d d g } t  | d ƒ \ } } d } t j d t | ƒ ƒ | } t j | | | g ƒ } t | d d d	 d ƒ\ } } xl t d | j d ƒ D]T }	 | |	 k }
 t t | |
 ƒ t | ƒ k ƒ t | | |
 | |	 k j	 ƒ  ƒ q” Wd  S(
   Ng      ð?g       @g      $@id   i   i    Rq   i   Ry   (
   R+   R   R   R&   t   vstackR
   R	   R_   R   R}   (   RF   R   R~   R   t
   rot_factort	   rot_ranget   test_data_2t   rel_max_rowst   rel_max_colst   rwt   inds(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_2d_gaussians4  s     (   RV   RW   RH   Rz   R   RŠ   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRp   ð   s   			t   TestPeakProminencesc           B` sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` sÛ   t  d d d g g  ƒ } xU t | t j t j t j g ƒ D]2 \ } } t | j d k ƒ t | j | k ƒ q: Wt  g  g  ƒ } xU t | t j t j t j g ƒ D]2 \ } } t | j d k ƒ t | j | k ƒ q¡ Wd S(   sN   
        Test if an empty array is returned if no peaks are provided.
        i   i   i   i    N(   R   t   zipR   RC   t   intpR   t   sizeR   (   RF   R/   t   arrR   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRH   E  s    ..c      	   C` sé   t  j d d d d d d d d g ƒ } t  j d d d	 d
 g ƒ } t  j d d d d g ƒ } t  j d d d d g ƒ } | | t  j | | | | g d d ƒ} t | | ƒ } t | d | ƒ t | d | ƒ t | d | ƒ d S(   sŠ   
        Test if height of prominences is correctly calculated in signal with
        rising baseline (peak widths are 1 sample).
        iÿÿÿÿg333333ó?i   gš™™™™™	@gÍÌÌÌÌÌô?g
×£p=
@gÍÌÌÌÌÌ @i   i   i   i    i   i   i   Rq   N(   R   RB   R,   R   R   (   RF   RG   t   peakst   lbasest   rbasest   promsR/   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRz   S  s    '+c         C` s  d d d d d d d g } d d d g } t  | | ƒ \ } } } t | d d d g ƒ t | d d d g ƒ t | d d d g ƒ d d d d d d d g } t j d d d g ƒ } t  | | ƒ \ } } } t | d d d g ƒ t | | d ƒ t | | d ƒ d S(   s"   
        Test edge cases.
        i    i   i   i   i   i   N(   R   R   R   RB   (   RF   RG   R   R“   R‘   R’   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_edge_casesd  s    c         C` s·   t  j d d d d d d g d ƒ } t  j d d d g d ƒ } t | d d d … | d d d … ƒ \ } } } t | d d d g ƒ t | d d d g ƒ t | d d d	 g ƒ d S(
   s:   
        Test with non-C-contiguous input arrays.
        i÷ÿÿÿi	   i    i   i   i   i   Ni   (   R   t   repeatR   R   (   RF   RG   R   R“   R‘   R’   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_non_contiguousx  s    $2c         C` s¡   d d d d d d d g } d g } t  t | | ƒ d d d g ƒ xW d d d d d d d g D]: \ } } t  t | | | ƒ d | d | d | g ƒ q_ Wd S(   sO   
        Test if wlen actually shrinks the evaluation range correctly.
        i    i   i   i   iÿÿÿÿg      @i   i   i   i   gš™™™™™	@gš™™™™™ñ?N(   i   i    (   i   i    (   i   i    (   i   i   (   gš™™™™™	@i   (   i   i   (   gš™™™™™ñ?i   (   R   R   (   RF   RG   t   peakt   wlenRt   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt	   test_wlenƒ  s
    	(c         C` sŽ  t  t d d ƒ' t d d d d g g d d g ƒ Wd QXt  t d d ƒ' t d d d d g d d g g ƒ Wd QXt  t d d ƒ t d d g ƒ Wd QXt  t d d ƒ t g  d g ƒ Wd QXxL d	 d
 d d g D]8 } t  t d d ƒ t d d d g | g ƒ Wd QXqÛ Wt  t d d ƒ$ t d d d d g d d g ƒ Wd QXt  t d d ƒ' t t j d ƒ d d g d d ƒWd QXd S(   sA   
        Verify that exceptions and warnings are raised.
        RQ   s   1D arrayi    i   i   Ni   s   not a valid indexiœÿÿÿiÿÿÿÿiè  s   cannot safely castgš™™™™™ñ?gffffff@R˜   i
   i   (   R   R4   R   RT   R   R   (   RF   t   p(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRU   Ž  s    ((#%c      
   C` s”   d } xI d d d g D]8 } t  t d | ƒ t d d d g | g ƒ Wd QXq Wt  t d | ƒ* t d d d d d g d g d d ƒWd QXd S(   s>   
        Verify that appropriate warnings are raised.
        s!   some peaks have a prominence of 0i    i   i   RQ   NR˜   (   R   R   R   (   RF   t   msgRš   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_warnings¬  s    #(	   RV   RW   RH   Rz   R”   R–   R™   RU   Rœ   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyR‹   C  s   						t   TestPeakWidthsc           B` sk   e  Z d  „  Z e j j d ƒ d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 e j j d ƒ d „  ƒ Z RS(   c         C` sÅ   t  g  g  ƒ d } t t | t j ƒ ƒ t | j d ƒ t  d d d g g  ƒ d } t t | t j ƒ ƒ t | j d ƒ t  g  g  ƒ } x4 | D], } t t | t j ƒ ƒ t | j d ƒ q‘ Wd S(   sN   
        Test if an empty array is returned if no peaks are provided.
        i    i   i   i   N(   R   R   t
   isinstanceR   t   ndarrayR   RŽ   (   RF   t   widthsR/   R   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRH   º  s    s#   ignore:some peaks have a width of 0c      
   C` s½   t  j d d d d d d d g ƒ } d } xŒ d d d d d d d g D]o \ } } } } t | d g | ƒ \ } } }	 }
 t | | ƒ t | d | | ƒ t |	 | ƒ t |
 | ƒ qF Wd S(   sk   
        Test a simple use case with easy to verify results at different relative
        heights.
        i   i    i   iÿÿÿÿg        g      @g      Ð?g      ð?g      @g      @g      à?g       @g      @g      è?g      ø?g      @g      @g      @i   N(   g        g        g      @g      @(   g      Ð?g      ð?g      @g      @(   g      à?g       @g       @g      @(   g      è?g      @g      ø?g      @(   g      ð?g      @g      ð?g      @(   g       @g      @g      ð?g      @(   g      @g      @g      ð?g      @(   R   RB   R   R   (   RF   RG   t
   prominencet
   rel_heightt
   width_truet   lip_truet   rip_truet
   width_calct   heightt   lip_calct   rip_calc(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRz   É  s     $c         C` sv   t  j d d d g d ƒ } t  j d g d ƒ } t | d d d … | d d d … ƒ } t | d d	 d d
 g ƒ d S(   s:   
        Test with non-C-contiguous input arrays.
        i    id   i2   i   i   i   Ng      è?iK   g      ø?(   R   R•   R   R   (   RF   RG   R   t   result(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyR–   á  s    )c         C` sä  t  t d d ƒ$ t t j d ƒ t j d ƒ ƒ Wd QXt  t d d ƒ t d d g ƒ Wd QXt  t d d ƒ- t t j d ƒ t j d d	 t j ƒƒ Wd QXt  t d d ƒ t t j d ƒ d ƒ Wd QXt  t d d
 ƒ! t t j d ƒ d d g ƒ Wd QXt  t d d
 ƒ t g  d d g ƒ Wd QXt  t d d ƒ! t t j d ƒ d d g ƒ Wd QXt  t d d ƒ- t d d d d d g d d g d d ƒWd QXt  t d d ƒ$ t d d d g d g d d ƒWd QXd S(   sD   
        Verify that argument validation works as intended.
        RQ   s   1D arrayi   i   Ni    i
   i   R   s   not a valid indexi   i   i   s   cannot safely castgš™™™™™ñ?gffffff@R¢   iÿÿÿÿRE   t   prominence_data(   i   i   (   i   i   (   NNN(
   R   R4   R   R   R   RS   R   R   RT   RE   (   RF   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRU   ê  s$    %."".c         C` s¿   d } t  t d | ƒ$ t d d d g d g d d ƒWd QXt  t d | ƒi t d d d d d g d g d t j d	 g t j ƒ t j d g t j ƒ t j d g t j ƒ f ƒWd QXd S(
   s>   
        Verify that appropriate warnings are raised.
        s   some peaks have a width of 0RQ   i    i   R¢   Ni   R«   g        (   R   R   R   R   RB   RC   R   (   RF   R›   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRœ   
  s    %c   	      C` s"  d d d g } d g } xt  d d d f d d d f d d d f d d d f d d d f d d d f d d  d! f g ƒ D]¡ \ } \ } } } t j | d t j ƒt j | d t j ƒt j | d t j ƒf } | d k  rè d } n d	 } t t d
 | ƒ t | | d | ƒWd QXqy Wd S("   s4   Test with mismatching peak and / or prominence data.i    i   g      ð?iÿÿÿÿi   i   R   s#   prominence data is invalid for peaks4   arrays in `prominence_data` must have the same shapeRQ   R«   N(   g      ð?(   iÿÿÿÿ(   i   (   g      ð?(   i    (   i   (   g      ð?(   i   (   i    (   g      ð?g      ð?(   i    i    (   i   i   (   g      ð?g      ð?(   i    (   i   (   g      ð?(   i    i    (   i   (   g      ð?(   i    (   i   i   (   R   R   RB   RC   R   R   R4   R   (	   RF   RG   R—   Rt   t   prominencest
   left_basest   right_basesR«   RQ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt    test_mismatching_prominence_data  s$    	(	c         C` s‡   d d d d d d d d d d d g } t  t | d d g d d ƒd d d d g ƒ t  t | d d g d d ƒd d d d g ƒ d S(   s3   Test if x == eval_height counts as an intersection.i    i   i   i   R   i   R¢   g        g      @g      @g      @g      ð?g      @N(   g        (   g      @(   g      @(   g      @gUUUUUUå?(   g      @(   g      ð?(   g      @(   g      @(   R   R   (   RF   RG   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_intersection_rules4  s
    '(   RV   RW   RH   RX   RY   t   filterwarningsRz   R–   RU   Rœ   R¯   R°   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyR   ¸  s   				 		c       	   C` sl  t  j d ƒ }  |  } | d } | d d d … } t d t d |  | ƒ k ƒ t d t d |  | ƒ k ƒ t d t d |  | ƒ k ƒ t d t d |  | ƒ k ƒ t d t d |  | ƒ k ƒ t | | f |  | ƒ \ } } t | | | ƒ t | | | ƒ t t d d ƒ t | t  j d	 ƒ | ƒ Wd QXt t d d
 ƒ$ t d | f t  j d	 ƒ | ƒ Wd QXd S(   sW   
    Verify parsing of condition arguments for `scipy.signal.find_peaks` function.
    i
   i   Ni   g      @g      @RQ   s   array size of loweri   s   array size of upper(   NN(   NN(   i   N(   i   N(   i   N(   Ni   (   Ni   (   g      @g      @(   g      @g      @(   R   R   R   RE   R   R   R   R4   (   RG   t	   amin_truet	   amax_trueR   t	   amin_calct	   amax_calc(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_unpack_condition_argsA  s     
t   TestFindPeaksc        
   B` s›   e  Z d  d d d d d d d d d	 h
 Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e j j d d ƒ d „  ƒ Z RS(   t   peak_heightst   left_thresholdst   right_thresholdsR¬   R­   R®   R    t   width_heightst   left_ipst	   right_ipsc      
   C` s{   d } t t j d ƒ d | d | d | d | ƒ\ } } t | j d k ƒ x( |  j D] } t | | j d k ƒ qV Wd S(	   s@   
        Test behavior for signal without local maxima.
        i
   R§   t	   thresholdR¡   t   widthi    N(   NN(   RE   R   R   RS   R   RŽ   t   property_keys(   RF   t   open_intervalR   t   propst   key(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_constantd  s    c      	   C` s’  t  j d d d d d d d g ƒ } t  j | j d d ƒ } | | d d d … <t  j | j d	 t ƒ} | d d d … | d d d … <t  j | | ƒ } t | d
 d ƒ\ } } t	 | d d d d d d d g ƒ t	 | d | ƒ t	 | d | | d d ƒ t	 | d | | d ƒ t	 t | d
 d ƒd d d d d g ƒ t	 t | d
 d ƒd d d d g ƒ t	 t | d
 d ƒd d d g ƒ d S(   s8   
        Test plateau size condition for peaks.
        i   i   i   i   i   i   io   NR   t   plateau_sizei   i   i   i!   id   t   plateau_sizesRM   RN   i    g      @i   i2   (   NN(   Ng      @(   i   i2   (
   R   RB   R   RŽ   RS   R(   R•   R   RE   R   (   RF   RÆ   RG   t   repeatsR   RÂ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_plateau_sizep  s    $ ")&c         C` sú   d d d d d d d f } t  | d d ƒ\ } } t | t j d d d g ƒ ƒ t | d	 t j d d d g ƒ ƒ t t  | d d
 ƒd t j d d g ƒ ƒ t t  | d d ƒd t j d d g ƒ ƒ t t  | d d ƒd t j d g ƒ ƒ d S(   s2   
        Test height condition for peaks.
        g        i   i   g      @i    g      @R§   i   R¸   g      à?i   NgUUUUUUÕ?(   NNgUUUUUUÕ?(   Ni   (   i   i   (   R   RE   R   R   RB   (   RF   RG   R   RÂ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_height_conditionˆ  s    #,,c         C` sH  d } t  | d d ƒ\ } } t | t j d d g ƒ ƒ t | d t j d d g ƒ ƒ t | d	 t j d d
 g ƒ ƒ t t  | d d ƒd t j d g ƒ ƒ t t  | d d ƒd t j g  ƒ ƒ t t  | d d ƒd t j d d g ƒ ƒ t t  | d d ƒd t j d g ƒ ƒ t t  | d d ƒd t j g  ƒ ƒ d S(   s5   
        Test threshold condition for peaks.
        i    i   i   i   iÿÿÿÿR¾   i   R¹   Rº   i   g      @N(   i    i   i   i   iÿÿÿÿ(   NN(   Ni   (   Ni   (   i   i   (   R   RE   R   R   RB   (   RF   RG   R   RÂ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_threshold_condition”  s      )&,)c         C` s  t  j d d d ƒ } t  j d ƒ } | | c t  j d d | j ƒ 7<t t | d d ƒd | ƒ t | d d ƒd } t t  j | | d t	 ƒj d k ƒ t t  j
 | ƒ d	 ƒ d
 d d d d g } t | d d ƒd } t | j d k oþ | d d k ƒ d S(   s4   
        Test distance condition for peaks.
        i   i   i   i   t   distancei    g9ÖÅm4 @t   assume_uniquei   iþÿÿÿiÿÿÿÿiýÿÿÿi
   N(   R   R   R   R'   RŽ   R   R   R   t	   setdiff1dt   TrueRd   (   RF   t	   peaks_allRG   t   peaks_subset(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_distance_condition£  s    ""c   	      C` s  t  j d d d ƒ } t  j d d d ƒ } t  j d d | j ƒ } | | c | 7<| | | | d } d } t  j | d | k | | d k @ƒ } t | d	 | ƒ\ } } t | | | ƒ t | d
 | | ƒ t | d d ƒ t | d | | d ƒ d S(   s6   
        Test prominence condition for peaks.
        i    i
   id   i   ic   i   i   i	   R¡   R¬   R­   R®   N(   i   i	   (   R   R'   R   RŽ   t   nonzeroR   R   (	   RF   RG   t
   peaks_truet   offsetR¬   t   intervalt   keept
   peaks_calct
   properties(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_prominence_condition½  s    !c      
   C` s­   t  j d d d d d d d d d g	 ƒ } t | d d d d ƒ\ } } t | j d ƒ t | d	 ƒ t | d
 d ƒ t | d d ƒ t | d d ƒ t | d d ƒ d S(   s1   
        Test width condition for peaks.
        i   i    i   iÿÿÿÿi   R¿   R¢   g      è?i   R    gš™™™™™õ?R»   g      ð?R¼   gš™™™™™@R½   g      @N(   Ni   (   R   RB   R   RE   R   RŽ   R   (   RF   RG   R   RÂ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_width_conditionÐ  s    *c      
   C` s¥   d } d d d d d d d d d d g
 } t | d | d	 | d
 | d | ƒ\ } } t t | ƒ t |  j ƒ k ƒ x+ |  j D]  } t | j | | j k ƒ q} Wd S(   s+   
        Test returned properties.
        i    i   i   g      ø?i   i   i	   R§   R¾   R¡   R¿   N(   NN(   RE   R   R   R&   RÀ   RŽ   (   RF   RÁ   RG   R   RÂ   RÃ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_propertiesÝ  s    $	c      
   C` sŽ   t  t d d ƒ t t j d ƒ ƒ Wd QXt  t d d ƒ t t j d	 ƒ ƒ Wd QXt  t d d ƒ t t j d ƒ d d ƒWd QXd S(
   s5   
        Test exceptions raised by function.
        RQ   s   1D arrayi   Ni   RË   i
   iÿÿÿÿ(   i   i   (   R   R4   R   R   RB   RS   R   (   RF   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_raisesê  s    s(   ignore:some peaks have a prominence of 0s#   ignore:some peaks have a width of 0c         C` s™   t  d d d d d g d d d d d d ƒ\ } } t | d ƒ t | d d ƒ t | d d ƒ t | d	 d ƒ x d D] } t | | | ƒ qz Wd S(   s³   
        Test behavior of prominence and width calculation if the given window
        length is smaller than a peak's plateau size.

        Regression test for gh-9110.
        i    i   R¡   R¿   R˜   i   R¬   R    R»   R­   R®   R¼   R½   N(   NN(   NN(   R­   R®   R¼   R½   (   R   RE   R   (   RF   R   RÂ   RÃ   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_wlen_smaller_plateauõ  s    	(   RV   RW   RÀ   RÄ   RÈ   RÉ   RÊ   RÑ   RÙ   RÚ   RÛ   RÜ   RX   RY   R±   RÝ   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyR·   ]  s   										t   TestFindPeaksCwtc           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c      	   C` s†   d d d d d d g } d } t  | | ƒ \ } } t j d t | ƒ ƒ } t | | d d	 d
 d d d ƒ} t j j | | d ƒ d S(   sX   
        Generate a series of gaussians and attempt to find the peak locations.
        g      @g      @g      $@g      4@g      I@iô  gš™™™™™¹?t
   gap_threshi   t   min_snri    t
   min_lengths4   Found maximum locations did not equal those expectedN(   R+   R   R   R,   R   RE   Re   R   (   RF   R   t
   num_pointsR~   R   R    t
   found_locs(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_find_peaks_exact
  s    	c   
   
   C` s  d d d d d d g } d } t  | | ƒ \ } } t j d t | ƒ ƒ } d } t j j d	 ƒ | t j j | ƒ d
 d | 7} t | | d d d d d | d ƒ} t j j	 t
 | ƒ t
 | ƒ d d ƒ t j | | ƒ } t j | ƒ d }	 t j j | |	 d d |	 ƒ d S(   sz   
        Verify that peak locations are (approximately) found
        for a series of gaussians with added noise.
        g      @g      @g      $@g      4@g      I@iô  gš™™™™™¹?gìQ¸…ë±?iog      à?i   Rá   i   Rß   i   Rà   i   s   Different numbers   of peaks found than expecteds   Maximum location differeds   by more than %sN(   R+   R   R   R,   t   randomt   seedt   randR   Re   R   R&   Rg   RB   Rf   (
   RF   R   Râ   R~   R   R    t	   noise_ampRã   t   diffst	   max_diffs(    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_find_peaks_withnoise  s    "c         C` s„   d } d } t  j j d ƒ t  j j | ƒ d d | } t  j d d ƒ } t | | d d	 d
 d ƒ} t  j j t | ƒ d ƒ d S(   sQ   
        Verify that no peak is found in
        data that's just noise.
        g      ð?id   iWÖ
g      à?i   i
   i2   Rà   i   t
   noise_perci   i    N(	   R   Rå   Ræ   Rç   R   R   Re   R   R&   (   RF   Rè   Râ   R~   R    Rã   (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   test_find_peaks_nopeak-  s    (   RV   RW   Rä   Rë   Rí   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyRÞ     s   		()   t
   __future__R    R   R   R1   t   numpyR   t   numpy.testingR   R   R   R   RX   R   R   t   scipy._lib.sixR	   t   scipy.signal._peak_findingR
   R   R   R   R   R   R   R   t    scipy.signal._peak_finding_utilsR   R   R$   R+   R@   t   objectRA   R[   Rp   R‹   R   R¶   R·   RÞ   (    (    (    sC   lib/python2.7/site-packages/scipy/signal/tests/test_peak_finding.pyt   <module>   s&   ":
				+;\Su‰	«