ó
Ë½÷Xc           @` 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 m Z d  d l m Z m Z m Z m Z d  d l m Z d „  Z d „  Z d „  Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k re	 ƒ  n  d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   TestCaset   run_module_suitet   assert_equalt   assert_array_equalt   assert_(   t	   argrelmaxt	   argrelmint   find_peaks_cwtt   _identify_ridge_lines(   t   xrangec         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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   gapsR)   t   locsR   t   dist_intt   gap_intR   t   nextcolt   nextrow(    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   _gen_ridge_line   s*    	"" 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   t   onesR   R   (   t   selft	   test_matrt   lines(    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt
   test_emptyK   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   R;   R   R   (   R<   R=   R>   (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_minimalP   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   R9   t   shapeR%   R;   R   R   (   R<   R2   R3   R=   R1   t   linet   max_distancest   identified_lines(    (    sC   /tmp/pip-build-7oUkmx/scipy/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   R9   RA   R;   R   R%   R   R   t   difft   testingt   assert_array_lesst   abs(   R<   R2   R3   R=   R1   RB   t   max_distRC   RD   t   ilinet   adistst   agaps(    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_single_bigdistf   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   R9   RA   R;   R   R   R   RF   RG   RH   RI   R%   (   R<   R2   t   max_gapR3   R=   R1   RB   RJ   RC   RD   RK   RL   RM   (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_single_biggapz   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   R9   RA   R;   R   R   R   RF   RG   RH   RI   R%   (   R<   R2   RO   R3   R=   R1   RB   RJ   RC   RD   RK   RL   RM   (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_single_biggaps   s     	!(   t   __name__t
   __module__R?   R@   RE   RN   RP   RQ   (    (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyR:   I   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   t   arrayR!   R   R	   R   R   R   (   R<   t   empty_arrayt   z1t   it   z2t   rowt   col(    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyR?   §   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   RU   i    i   (   R   RV   R   t   argsortR   R	   (   R<   t   xR[   R\   t   order(    (    sC   /tmp/pip-build-7oUkmx/scipy/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ëÿï?R_   t   modet   clipi    (   R$   R   R   R   t   all(   R<   R_   R   t	   test_datat   act_locst   rel_max_locs(    (    sC   /tmp/pip-build-7oUkmx/scipy/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    RU   i   R_   (
   R$   R   R   R   t   vstackR   R   RA   R   Rc   (   R<   R   Rd   Re   t
   rot_factort	   rot_ranget   test_data_2t   rel_max_rowst   rel_max_colst   rwt   inds(    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_2d_gaussiansé   s     (   RR   RS   R?   R`   Rg   Rp   (    (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyRT   ¥   s   			t   TestFindPeaksc           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
   t   NoneRG   R   (   R<   R   t
   num_pointsRd   Re   t   widthst
   found_locs(    (    sC   /tmp/pip-build-7oUkmx/scipy/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   Rt   i   Rr   i   Rs   i   s   Different numbers   of peaks found than expecteds   Maximum location differeds   by more than %sN(   R$   R   R   R%   t   randomt   seedt   randR
   RG   R   R   RI   RV   RH   (
   R<   R   Rv   Rd   Re   Rw   t	   noise_ampRx   t   diffst	   max_diffs(    (    sC   /tmp/pip-build-7oUkmx/scipy/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   Rs   i   t
   noise_perci   i    N(	   R   Rz   R{   R|   R   R
   RG   R   R   (   R<   R}   Rv   Rd   Rw   Rx   (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   test_find_peaks_nopeak  s    (   RR   RS   Ry   R€   R‚   (    (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyRq   ø   s   		t   __main__(   t
   __future__R    R   R   R*   t   numpyR   t   numpy.testingR   R   R   R   R   t   scipy.signal._peak_findingR   R	   R
   R   t   scipy._lib.sixR   R   R$   R9   R:   RT   Rq   RR   (    (    (    sC   /tmp/pip-build-7oUkmx/scipy/scipy/signal/tests/test_peak_finding.pyt   <module>   s   ("				+\S3