Ë
    0Ò^j¹•  ã                   ó$  — d dl Z d dlZd dlZd dlmZmZ d dlmZ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 d dlmZmZ d„ Zd„ Zd	„ Z G d
„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zd„ Z G d„ d«      Z  G d„ d«      Z!y)é    N)ÚraisesÚwarns)Úxp_assert_closeÚxp_assert_equal)Ú	argrelmaxÚ	argrelminÚpeak_prominencesÚpeak_widthsÚ_unpack_condition_argsÚ
find_peaksÚfind_peaks_cwtÚ_identify_ridge_lines)Úgaussian)Ú_local_maxima_1dÚPeakPropertyWarningc                 ó  — t        j                  d|«      j                  t        «      }t        j                  |t        ¬«      }t        |«      D ],  \  }}|| |   z
  |z  }|t        j                  |dz   «      z  }Œ. |S )Nr   ©Údtypeé   )ÚnpÚarangeÚastypeÚfloatÚzerosÚ	enumerateÚexp)Úcenter_locsÚsigmasÚtotal_lengthÚxdataÚout_dataÚindÚsigmaÚtmps           úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/scipy/signal/tests/test_peak_finding.pyÚ_gen_gaussiansr&      sy   € Ü�I‰I�a˜Ó&×-Ñ-¬eÓ4€EÜ�x‰x˜¬EÔ2€HÜ Ó'ò &‰
ˆˆUØ�{ 3Ñ'Ñ'¨5Ñ0ˆØ”B—F‘F˜S !™V˜9Ó%Ñ%‰ð&ð €Oó    c                 ó¦   — t        | «      }||dz   z  }t        j                  |||z
  |¬«      j                  t        «      }t        || |«      }||fS )Né   )Únum)Úlenr   Úlinspacer   Úintr&   )r   r   Ú	num_peaksÚdeltar   r!   s         r%   Ú_gen_gaussians_evenr0      sU   € Ü�F“€IØ˜I¨™MÑ*€EÜ—+‘+˜e \°EÑ%9¸yÔI×PÑPÔQTÓU€KÜ˜k¨6°<Ó@€HØ�[Ð Ð r'   c                 ó¤  — d„ }t        j                  |«      }t        j                  |«      }t        j                  |dgt        ¬«      }| |ddd…f<   |d   | d   z
  t        |«      z
  }||k  rt        d«      ‚|t        |«      z  dz
  }|t        |«      z  dz
  }	t        d|«      D ]”  }
||
dz
  df   }||
dz
  df   dz   }|
|z  dk(  r't        |«      dkD  r|d|
z  |j                  «       z  z  }|
|	z  dk(  r!t        |«      dkD  r||j                  «       z  } |||d   «      } |||d   «      }||g||
dd…f<   Œ– |dd…df   |dd…df   gS )	a¾  
    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                 ó6   — t        | d«      }t        ||«      }|S )Nr   )ÚmaxÚmin)r*   Úmax_valÚouts      r%   Úkeep_boundsz$_gen_ridge_line.<locals>.keep_bounds5   s   € Ü�#�q‹kˆÜ�#�wÓˆØˆ
r'   r   r   r   Nz3Cannot generate ridge line according to constraintsr)   éÿÿÿÿ)
ÚcopyÚdeepcopyr   r   r-   ÚsumÚ
ValueErrorr+   ÚrangeÚpop)Ú
start_locsÚmax_locsÚlengthÚ	distancesÚgapsr7   Úlocsr   Údist_intÚgap_intr"   ÚnextcolÚnextrows                r%   Ú_gen_ridge_linerI   '   s  € òô
 �=‰=˜Ó€DÜ—‘˜iÓ(€Iä�8‰8�V˜Q�K¤sÔ+€DØ€DˆŠAˆ�JØ˜A‘; ¨A¡Ñ.´°T³Ñ:€LØ�fÒÜÐNÓOÐOØœ˜I›Ñ&¨Ñ*€HØ”s˜4“yÑ  1Ñ$€GÜ�Q˜Óò 	*ˆØ�s˜Q‘w �zÑ"ˆØ�s˜Q‘w �zÑ" QÑ&ˆØ�(‰N˜aÒ¤c¨)£n°qÒ&8Ø˜˜c™	 9§=¡=£?Ñ2Ñ2ˆGØ�'‰M˜QÒ¤S¨£Y°¢]Ø�t—x‘x“zÑ!ˆGÙ˜g x°¡{Ó3ˆÙ˜g x°¡{Ó3ˆØ Ð)ˆˆS’!ˆVŠð	*ð ’�A�‰J˜šQ ˜T™
Ð#Ð#r'   c            	       óà   — e Zd Zd„ Zd„ Zd„ Zd„ Zej                  j                  d e
j                  g d¢«       e
j                  g d¢«       e
j                  g d¢«      g«      d	„ «       Zd
„ Zy)ÚTestLocalMaxima1dc                 óÌ   — t        j                  g t         j                  ¬«      }t        |«      D ]1  }t	        |t        j                  g «      d¬«       |j
                  €Œ1J ‚ y)zTest with empty signal.r   F©Úcheck_dtypeN)r   ÚarrayÚfloat64r   r   Úbase©ÚselfÚxrO   s      r%   Ú
test_emptyzTestLocalMaxima1d.test_emptyT   sN   € ä�H‰H�RœrŸz™zÔ*ˆÜ% aÓ(ò 	&ˆEÜ˜E¤2§8¡8¨B£<¸UÕCØ—:‘:Ñ%Ð%Ð%ñ	&r'   c                 óÊ   — t        j                  dd«      }t        |«      D ]?  }t        |t        j                  g t         j
                  ¬«      «       |j                  €Œ?J ‚ y)zTest with linear signal.r   éd   r   N)r   r,   r   r   rO   ÚintprQ   rR   s      r%   Útest_linearzTestLocalMaxima1d.test_linear[   sO   € ä�K‰K˜˜3ÓˆÜ% aÓ(ò 	&ˆEÜ˜E¤2§8¡8¨B´b·g±gÔ#>Ô?Ø—:‘:Ñ%Ð%Ð%ñ	&r'   c                 óø   — t        j                  ddd«      }|ddd…xx   dz  cc<   t        j                  dddt         j                  ¬«      }t	        |«      D ]  }t        ||d	¬
«       |j                  €ŒJ ‚ y)zTest with simple signal.éöÿÿÿé
   é2   r   Né   r)   r   FrM   )r   r,   r   rX   r   r   rQ   )rS   rT   ÚexpectedrO   s       r%   Útest_simplezTestLocalMaxima1d.test_simpleb   sq   € ä�K‰K˜˜R Ó$ˆØ	ˆ!ˆ$ˆQˆ$‹�1‰‹Ü—9‘9˜Q  A¬R¯W©WÔ5ˆÜ% aÓ(ò 	&ˆEô ˜E 8¸Õ?Ø—:‘:Ñ%Ð%Ð%ñ		&r'   c                 ó"  — t        j                  g d¢«      }t        |«      \  }}}t        |t        j                  g d¢«      d¬«       t        |t        j                  g d¢«      d¬«       t        |t        j                  g d¢«      d¬«       y)z+Test if flat maxima are detected correctly.)gÍÌÌÌÌÌô¿r   r)   r   r   r   r   r^   r^   r^   gìQ¸…ë@é   rb   rb   rb   r[   éûÿÿÿrc   rc   rc   rc   r[   )r   rb   é   é   é   FrM   )r   rb   é   é   é   )r   é   é	   é   é   N)r   rO   r   r   )rS   rT   Ú	midpointsÚ
left_edgesÚright_edgess        r%   Útest_flat_maximaz"TestLocalMaxima1d.test_flat_maximam   sh   € ä�H‰Hò /ó 0ˆä-=¸aÓ-@Ñ*ˆ	�:˜{Ü˜	¤2§8¡8Ò,=Ó#>ÈEÕRÜ˜
¤B§H¡HÒ->Ó$?ÈUÕSÜ˜¤R§X¡XÒ.?Ó%@ÈeÖTr'   rT   )ç      ð?r   r   )ç      @r^   r   rb   rb   )ç      @rj   rj   r   é   ru   ru   c                 óž   — t        |«      D ]?  }t        |t        j                  g t        j                  ¬«      «       |j
                  €Œ?J ‚ y)z,Test if behavior on signal edges is correct.r   N)r   r   r   rO   rX   rQ   rR   s      r%   Útest_signal_edgesz#TestLocalMaxima1d.test_signal_edgesv   sA   € ô & aÓ(ò 	&ˆEÜ˜E¤2§8¡8¨B´b·g±gÔ#>Ô?Ø—:‘:Ñ%Ð%Ð%ñ	&r'   c                 óè  — t        t        d¬«      5  t        t        j                  d«      «       ddd«       t        t        d¬«      5  t        t        j                  dt
        ¬«      «       ddd«       t        t        d¬«      5  t        d	d
g«       ddd«       t        t        d¬«      5  t        d«       ddd«       y# 1 sw Y   Œ”xY w# 1 sw Y   ŒbxY w# 1 sw Y   ŒGxY w# 1 sw Y   yxY w)z,Test input validation and raised exceptions.zwrong number of dimensions©Úmatch)r)   r)   Nzexpected 'const float64_t'r)   r   Úlistrr   ç       @z'x' must not be None)r   r<   r   r   Úonesr-   Ú	TypeError©rS   s    r%   Útest_exceptionsz!TestLocalMaxima1d.test_exceptions�   s½   € ä”JÐ&BÔCñ 	.ÜœRŸW™W V›_Ô-÷	.ä”JÐ&BÔCñ 	4ÜœRŸW™W Q¬cÔ2Ô3÷	4ä”I VÔ,ñ 	'Ü˜b "˜XÔ&÷	'ä”IÐ%;Ô<ñ 	#Ü˜TÔ"÷	#ð 	#÷	.ð 	.ú÷	4ð 	4ú÷	'ð 	'ú÷	#ð 	#ús/   ’CÁ
%CÂCÂ/C(ÃCÃCÃC%Ã(C1N)Ú__name__Ú
__module__Ú__qualname__rU   rY   r`   rq   ÚpytestÚmarkÚparametrizer   rO   rw   r€   © r'   r%   rK   rK   R   sr   „ ò&ò&ò	&òUð ‡[�[×Ñ˜SØˆ�‰’ÓØˆ�‰Ò!Ó"Øˆ�‰Ò'Ó(ð#ó ñ
&óð
&ó	#r'   rK   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestRidgeLinesc                 ó”   — t        j                  ddg«      }t        |t        j                  dd«      d«      }t	        |«      dk(  sJ ‚y )Nrm   rW   r   r)   r   )r   r   r   Úfullr+   )rS   Ú	test_matrÚliness      r%   rU   zTestRidgeLines.test_empty�   s<   € Ü—H‘H˜b #˜YÓ'ˆ	Ü% i´·±¸¸Q³ÀÓCˆÜ�5‹z˜QŠÐ‰r'   c                 óð  — t        j                  ddg«      }d|d<   t        |t        j                  dd«      d«      }t	        |«      dk(  sJ ‚|D ]'  }t        |d   t        j                  |d   «      «       Œ) t        j                  ddg«      }d|dd…df<   t        |t        j                  dd«      d«      }t	        |«      dk(  sJ ‚|D ]'  }t        |d   t        j                  |d   «      «       Œ) y )Nrm   rW   r)   )r   r\   r   r   r\   )r   r   r   r‹   r+   r   Úsort)rS   rŒ   r�   Úlines       r%   Útest_minimalzTestRidgeLines.test_minimal”   sè   € Ü—H‘H˜b #˜YÓ'ˆ	Øˆ	�%ÑÜ% i´·±¸¸Q³ÀÓCˆÜ�5‹z˜QŠÐˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ð	7ô —H‘H˜b #˜YÓ'ˆ	Øˆ	�!�A�#�r�'ÑÜ% i´·±¸¸Q³ÀÓCˆÜ�5‹z˜QŠÐˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ñ	7r'   c                 óÎ  — g d¢}g d¢}t        j                  ddg«      dz   }d}t        ddg|j                  |||«      }d	||d   |d	   f<   t        j                  dt        |«      «      }t        ||t        |«      d	z   «      }t        |«      d	k(  sJ ‚|D ]'  }t        |d   t        j                  |d   «      «       Œ) t        |d   |«      D ]  \  }	}
t        |	|
d
¬«       Œ y )N©r   r)   r   rj   )r   r)   r   r   r)   rm   r]   gê-�™—q=re   r   é   r)   FrM   )r   r   rI   Úshaper‹   r3   r   r+   r   r�   Úzip)rS   rB   rC   rŒ   rA   r�   Úmax_distancesÚidentified_linesÚilineÚiline_Úline_s              r%   Útest_single_passzTestRidgeLines.test_single_pass£   sõ   € Ú ˆ	ÚˆÜ—H‘H˜b "˜XÓ&¨Ñ.ˆ	ØˆÜ  2˜w¨	¯©¸ÀÈDÓQˆØ&'ˆ	�$�q‘'˜4 ™7Ð"Ñ#ÜŸ™ ¤C¨	£NÓ3ˆÜ0°Ø1>Ü14°T³¸Q±ó@Ðô Ð#Ó$¨Ò)Ð)Ð)Ø%ò 	9ˆEÜ˜E !™H¤b§g¡g¨e°A©hÓ&7Õ8ð	9ä Ð!1°!Ñ!4°dÓ;ò 	>‰MˆF�EÜ˜F E°uÖ=ñ	>r'   c                 ó´  — g d¢}g d¢}t        j                  ddg«      }d}t        ddg|j                  |||«      }d||d   |d   f<   d	}t        j                  d|«      }t        ||t        |«      dz   «      }t        |«      d
k(  sJ ‚|D ]É  }	t        |	d   t        j                  |	d   «      «       t        j                  |	d   «      }
t         j                  j                  t        j                  |
«      |«       t        j                  |	d   «      }t         j                  j                  t        j                  |«      t        |«      dz   «       ŒË y )Nr“   )r   r)   r   rb   rm   r]   re   r   r”   r)   r^   r   çš™™™™™¹?)r   r   rI   r•   r‹   r   r3   r+   r   r�   ÚdiffÚtestingÚassert_array_lessÚabs)rS   rB   rC   rŒ   rA   r�   Úmax_distr—   r˜   r™   ÚadistsÚagapss               r%   Útest_single_bigdistz"TestRidgeLines.test_single_bigdist´   s+  € Ú ˆ	ÚˆÜ—H‘H˜b "˜XÓ&ˆ	ØˆÜ  2˜w¨	¯©¸ÀÈDÓQˆØ&'ˆ	�$�q‘'˜4 ™7Ð"Ñ#ØˆÜŸ™  HÓ-ˆä0°Ø1>Ü14°T³¸Q±ó@Ðô Ð#Ó$¨Ò)Ð)Ð)à%ò 	IˆEÜ˜E !™H¤b§g¡g¨e°A©hÓ&7Ô8Ü—W‘W˜U 1™XÓ&ˆFÜ�J‰J×(Ñ(¬¯©°«¸ÔBä—G‘G˜E !™HÓ%ˆEÜ�J‰J×(Ñ(¬¯©°«¼¸D»	ÀC¹ÕHñ	Ir'   c                 ó   — g d¢}d}g d¢}t        j                  ddg«      }d}t        ddg|j                  |||«      }d	||d   |d	   f<   d
}t        j                  d|«      }t        |||«      }	t        |	«      dk(  sJ ‚|	D ]É  }
t        |
d   t        j                  |
d   «      «       t        j                  |
d	   «      }t         j                  j                  t        j                  |«      |«       t        j                  |
d   «      }t         j                  j                  t        j                  |«      t        |«      dz   «       ŒË y )Nr“   r^   )r   rb   r   r)   rm   r]   re   r   r”   r)   ru   r   rž   ©r   r   rI   r•   r‹   r   r+   r   r�   rŸ   r    r¡   r¢   r3   ©rS   rB   Úmax_gaprC   rŒ   rA   r�   r£   r—   r˜   r™   r¤   r¥   s                r%   Útest_single_biggapz!TestRidgeLines.test_single_biggapË   s!  € Ú ˆ	ØˆÚˆÜ—H‘H˜b "˜XÓ&ˆ	ØˆÜ  2˜w¨	¯©¸ÀÈDÓQˆØ&'ˆ	�$�q‘'˜4 ™7Ð"Ñ#ØˆÜŸ™  HÓ-ˆä0°¸MÈ7ÓSÐÜÐ#Ó$¨Ò)Ð)Ð)à%ò 	IˆEÜ˜E !™H¤b§g¡g¨e°A©hÓ&7Ô8Ü—W‘W˜U 1™XÓ&ˆFÜ�J‰J×(Ñ(¬¯©°«¸ÔBä—G‘G˜E !™HÓ%ˆEÜ�J‰J×(Ñ(¬¯©°«¼¸D»	ÀC¹ÕHñ	Ir'   c                 óž  — 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        |	«      dk(  sJ ‚|	D ]É  }
t        |
d   t        j                  |
d   «      «       t        j                  |
d   «      }t         j                  j                  t        j                  |«      |«       t        j                  |
d   «      }t         j                  j                  t        j                  |«      t        |«      dz   «       ŒË y )	Nr   r)   r^   ru   r]   é   r”   rž   r¨   r©   s                r%   Útest_single_biggapsz"TestRidgeLines.test_single_biggapsá   s'  € Ø�Cˆ	ØˆØ�1ˆvˆÜ—H‘H˜b "˜XÓ&ˆ	ØˆÜ  2˜w¨	¯©¸ÀÈDÓQˆØ&'ˆ	�$�q‘'˜4 ™7Ð"Ñ#ØˆÜŸ™  HÓ-ˆä0°¸MÈ7ÓSÐÜÐ#Ó$¨Ò)Ð)Ð)à%ò 	IˆEÜ˜E !™H¤b§g¡g¨e°A©hÓ&7Ô8Ü—W‘W˜U 1™XÓ&ˆFÜ�J‰J×(Ñ(¬¯©°«¸ÔBä—G‘G˜E !™HÓ%ˆEÜ�J‰J×(Ñ(¬¯©°«¼¸D»	ÀC¹ÕHñ	Ir'   c                 óº  — t        j                  ddg«      }d|d<   d|d<   d|d<   t        |t        j                  dd«      d«      }|D ]'  }t	        |d	   t        j
                  |d	   «      «       Œ) t        j                  ddg«      }d|d
<   d|d<   d|d<   t        |t        j                  dd«      d«      }|D ]'  }t	        |d	   t        j
                  |d	   «      «       Œ) t        j                  ddg«      }d|d<   d|d<   d|d<   d|d<   t        |t        j                  dd«      d«      }|D ]'  }t	        |d	   t        j
                  |d	   «      «       Œ) t        j                  ddg«      }d|d<   d|d<   d|d<   d|d<   d|d<   t        |t        j                  dd«      d«      }|D ]'  }t	        |d	   t        j
                  |d	   «      «       Œ) y )Nrj   r\   rr   )rb   rj   ©r^   rb   )r^   ru   r   r)   r   )r   r^   )r   rg   )r)   rj   r^   é   )r   r   )r   re   )r)   rg   ru   re   )rj   rj   )rb   r^   )rb   rg   ©r^   rj   )r   rj   )r   r   r   r‹   r   r�   )rS   rŒ   Úridge_linesr�   s       r%   Útest_sortingzTestRidgeLines.test_sorting÷   sà  € Ü—H‘H˜a ˜WÓ%ˆ	Øˆ	�$‰Øˆ	�$‰Øˆ	�$‰Ü+¨I´r·w±w¸qÀ!³}ÀaÓHˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ð	7ô —H‘H˜a ˜WÓ%ˆ	Øˆ	�$‰Øˆ	�$‰Øˆ	�$‰Ü+¨I´r·w±w¸qÀ!³}ÀaÓHˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ð	7ô —H‘H˜a ˜WÓ%ˆ	Øˆ	�$‰Øˆ	�$‰Øˆ	�%ÑØˆ	�$‰Ü+¨I´r·w±w¸qÀ!³}ÀaÓHˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ð	7ô —H‘H˜a ˜WÓ%ˆ	Øˆ	�$‰Øˆ	�$‰Øˆ	�$‰Øˆ	�$‰Øˆ	�$‰Ü+¨I´r·w±w¸qÀ!³}ÀaÓHˆØò 	7ˆDÜ˜D ™G¤R§W¡W¨T°!©WÓ%5Õ6ñ	7r'   N)
r�   r‚   rƒ   rU   r‘   rœ   r¦   r«   r®   r´   r‡   r'   r%   r‰   r‰   �   s(   „ òò
7ò>ò"Iò.Iò,Ió,"7r'   r‰   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú
TestArgrelc                 ó   — t        j                  g t        ¬«      }t        j                  d«      }t	        |«      }t        t        |«      d«       t        |d   |d¬«       t        j                  d«      }t	        |d¬«      \  }}t        ||d¬«       t        ||d¬«       t	        |d¬«      \  }}t        ||d¬«       t        ||d¬«       y )	Nr   rj   r)   r   FrM   r²   ©Úaxis)r   rO   r-   r   r   r   r+   )rS   Úempty_arrayÚz1ÚiÚz2ÚrowÚcols          r%   rU   zTestArgrel.test_empty  s¦   € ô —h‘h˜r¬Ô-ˆä�X‰X�a‹[ˆä�b‹MˆÜœ˜A› Ô"Ü˜˜!™˜k°uÕ=ä�X‰X�fÓˆä˜R aÔ(‰ˆˆSÜ˜˜[°eÕ<Ü˜˜[°eÕ<ä˜R aÔ(‰ˆˆSÜ˜˜[°eÕ<Ü˜˜[°eÖ<r'   c                 ó¤  — t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        |d¬«      \  }}t        j                  |«      }t	        ||   g d¢d	¬
«       t	        ||   g d¢d	¬
«       t        |d¬«      \  }}t        j                  |«      }t	        ||   g d¢d	¬
«       t	        ||   g d¢d	¬
«       t        |d¬«      \  }}t        j                  |«      }t	        ||   g d¢d	¬
«       t	        ||   g d¢d	¬
«       t        |d¬«      \  }}t        j                  |«      }t	        ||   g d¢d	¬
«       t	        ||   g d¢d	¬
«       y )N)r)   r   r   r^   r   )r   r)   r   r   r^   )r^   r   r)   r   r   )r   r^   r   r)   r   )r)   r   r^   r   r)   r   r¸   ©r)   r   r^   FrM   )rb   r   r)   r)   )r   r^   rb   )r^   r)   r   )r   rO   r   Úargsortr   r   )rS   rT   r¾   r¿   Úorders        r%   Ú
test_basiczTestArgrel.test_basic6  s  € ô
 �H‰H’oÚ%Ú%Ú%Ú%ð	'ó (ˆô ˜Q QÔ'‰ˆˆSÜ—
‘
˜3“ˆÜ˜˜E™
¢I¸5ÕAÜ˜˜E™
¢I¸5ÕAä˜Q QÔ'‰ˆˆSÜ—
‘
˜3“ˆÜ˜˜E™
¢I¸5ÕAÜ˜˜E™
¢I¸5ÕAä˜Q QÔ'‰ˆˆSÜ—
‘
˜3“ˆÜ˜˜E™
¢I¸5ÕAÜ˜˜E™
¢I¸5ÕAä˜Q QÔ'‰ˆˆSÜ—
‘
˜3“ˆÜ˜˜E™
¢I¸5ÕAÜ˜˜E™
¢I¸5ÖAr'   c                 óä   — d}g d¢}t        |d«      \  }}||   dz  |||z   <   ||   dz  |||z
  <   t        ||d¬«      d   }t        |«      t        |«      k(  sJ ‚||k(  j                  «       sJ ‚y )Nr   )rr   r|   ç      $@rt   g      .@éô  gwJëÿï?Úclip)rÃ   Úmoder   )r0   r   r+   Úall)rS   rÃ   r   Ú	test_dataÚact_locsÚrel_max_locss         r%   Útest_highorderzTestArgrel.test_highorderU  s�   € ØˆÚ,ˆÜ1°&¸#Ó>Ñˆ	�8Ø&/°Ñ&9¸'Ñ&Aˆ	�(˜UÑ"Ñ#Ø&/°Ñ&9¸'Ñ&Aˆ	�(˜UÑ"Ñ#Ü  °%¸fÔEÀaÑHˆä�<Ó ¤C¨£MÒ1Ð1Ð1Ø Ñ(×-Ñ-Ô/Ð/Ñ/r'   c                 ó‚  — g d¢}t        |d«      \  }}d}t        j                  dt        |«      «      |z
  }t        j                  |||   g«      }t        |dd¬«      \  }}t        d|j                  d   «      D ]A  }	||	k(  }
t        ||
   «      t        |«      k(  sJ ‚|||
   ||	z  z
  k(  j                  «       rŒAJ ‚ y )N)rr   r|   rÆ   rW   rm   r   r)   )r¹   rÃ   )	r0   r   r   r+   Úvstackr   r=   r•   rÊ   )rS   r   rË   rÌ   Ú
rot_factorÚ	rot_rangeÚtest_data_2Úrel_max_rowsÚrel_max_colsÚrwÚindss              r%   Útest_2d_gaussianszTestArgrel.test_2d_gaussians`  sÏ   € Ú!ˆÜ1°&¸#Ó>Ñˆ	�8Øˆ
Ü—I‘I˜a¤ Y£Ó0°:Ñ=ˆ	Ü—i‘i ¨I°iÑ,@Ð AÓBˆÜ%.¨{ÀÈ!Ô%LÑ"ˆ�lä˜˜;×,Ñ,¨QÑ/Ó0ò 	LˆBØ  BÑ&ˆDä�| DÑ)Ó*¬c°(«mÒ;Ð;Ð;Ø ¨dÑ!3°jÀ±mÑ!CÑD×IÑIÕKÐKÐKñ		Lr'   N)r�   r‚   rƒ   rU   rÄ   rÎ   rØ   r‡   r'   r%   r¶   r¶     s   „ ò=ò0Bò>	0óLr'   r¶   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestPeakProminencesc                 óÄ  — t        g d¢g «      }t        |t        j                  t        j                  t        j                  g«      D ]'  \  }}|j
                  dk(  sJ ‚|j                  |k(  rŒ'J ‚ t        g g «      }t        |t        j                  t        j                  t        j                  g«      D ]'  \  }}|j
                  dk(  sJ ‚|j                  |k(  rŒ'J ‚ y)úN
        Test if an empty array is returned if no peaks are provided.
        rÁ   r   N)r	   r–   r   rP   rX   Úsizer   )rS   r6   Úarrr   s       r%   rU   zTestPeakProminences.test_emptyq  s¼   € ô šy¨"Ó-ˆÜ˜c¤B§J¡J´·±¼¿¹Ð#AÓBò 	&‰JˆC�Ø—8‘8˜q’=Ð �=Ø—9‘9 Ó%Ð%Ð%ð	&ô ˜r 2Ó&ˆÜ˜c¤B§J¡J´·±¼¿¹Ð#AÓBò 	&‰JˆC�Ø—8‘8˜q’=Ð �=Ø—9‘9 Ó%Ð%Ð%ñ	&r'   c                 ó„  — t        j                  g d¢«      }t        j                  g d¢«      }t        j                  g d¢«      }t        j                  g d¢«      }||   t        j                  ||   ||   gd¬«      z
  }t        ||«      }t	        |d   |d¬«       t	        |d	   |d¬«       t	        |d
   |d¬«       y)zŠ
        Test if height of prominences is correctly calculated in signal with
        rising baseline (peak widths are 1 sample).
        )r8   ç333333ó?rà   r)   çš™™™™™	@gÍÌÌÌÌÌô?g
×£p=
@gÍÌÌÌÌÌ @)r)   r   rb   ru   )r   r   r   rj   )r^   r^   rj   rg   r   r¸   FrM   r)   r   N)r   rO   r3   r	   r   )rS   rT   ÚpeaksÚlbasesÚrbasesÚpromsr6   s          r%   rÄ   zTestPeakProminences.test_basic  sŸ   € ô �H‰HÒ;Ó<ˆÜ—‘šÓ&ˆÜ—‘š,Ó'ˆÜ—‘š,Ó'ˆØ�%‘œ2Ÿ6™6 1 V¡9¨a°©iÐ"8¸qÔAÑAˆä˜q %Ó(ˆÜ˜˜A™ °5Õ9Ü˜˜A™ °EÕ:Ü˜˜A™ °EÖ:r'   c                 ó–  — g d¢}g d¢}t        ||«      \  }}}t        |t        j                  g d¢«      d¬«       t        |g d¢d¬«       t        |g d¢d¬«       g d¢}t        j                  g d¢«      }t        ||«      \  }}}t        |t        j                  g d	¢«      «       t        ||d
z
  d¬«       t        ||d
z   d¬«       y)z"
        Test edge cases.
        )r   r   r)   r   r)   r   r   ©r)   r^   rj   )r|   r   r   FrM   )r   r   r   )ru   ru   ru   )r   r)   r   r)   r   r)   r   )rr   r)   r)   r)   N)r	   r   r   ÚasarrayrO   ©rS   rT   râ   rå   rã   rä   s         r%   Útest_edge_casesz#TestPeakProminences.test_edge_cases�  s©   € ò
 "ˆÚˆÜ 0°°EÓ :Ñˆˆv�vÜ˜œrŸz™zª+Ó6ÀEÕJÜ˜¢	°uÕ=Ü˜¢	°uÕ=ò "ˆÜ—‘šÓ#ˆÜ 0°°EÓ :Ñˆˆv�vÜ˜œrŸz™zª+Ó6Ô7Ü˜ ¨¡	°uÕ=Ü˜ ¨¡	°uÖ=r'   c                 ó  — t        j                  g d¢d«      }t        j                  g d¢d«      }t        |ddd…   |ddd…   «      \  }}}t        |t        j                  g d¢«      «       t        |g d¢d¬«       t        |g d	¢d¬«       y)
ú:
        Test with non-C-contiguous input arrays.
        )i÷ÿÿÿrk   rk   r   r^   r)   r   )r)   r   rb   N)g      "@rk   r   )r   r   r^   FrM   )r^   r^   rj   )r   Úrepeatr	   r   rè   ré   s         r%   Útest_non_contiguousz'TestPeakProminences.test_non_contiguous¤  ss   € ô �I‰IÒ)¨1Ó-ˆÜ—	‘	š) QÓ'ˆÜ 0°±3°Q°3±¸¹sÀ¸s¹Ó DÑˆˆv�vÜ˜œrŸz™zª+Ó6Ô7Ü˜¢	°uÕ=Ü˜¢	°uÖ=r'   c                 óà   — g d¢}dg}t        ||«      }t        |g d¢«      D ]  \  }}||k(  rŒJ ‚ dD ]9  \  }}t        |||«      }t        |d|z
  d|z   d|z
  g«      D ]  \  }}||k(  rŒJ ‚ Œ; y)	zO
        Test if wlen actually shrinks the evaluation range correctly.
        )r   r)   r   r^   r)   r   r8   r^   )rs   r   ru   ))rd   r   )rg   r   )ru   r   )rj   r)   )rá   r)   ©r^   r   )çš™™™™™ñ?r   rs   r   ru   N)r	   r–   )rS   rT   Úpeakrå   ÚpromÚvalÚwlenr¼   s           r%   Ú	test_wlenzTestPeakProminences.test_wlen¯  sŸ   € ò #ˆØˆsˆä   DÓ)ˆÜ˜U¢KÓ0ò 	‰IˆD�#Ø˜3“;Ð�;ð	ð Tò 	#‰GˆD�!Ü$ Q¨¨dÓ3ˆEÜ  ¨¨a©°°Q±¸¸A¹Ð(>Ó?ò #‘	��cØ˜s“{Ð"�{ñ#ñ	#r'   c                 ó$  — t        t        d¬«      5  t        g d¢gddg«       ddd«       t        t        d¬«      5  t        g d¢ddgg«       ddd«       t        t        d¬«      5  t        ddg«       ddd«       t        t        d	¬«      5  t        g dg«       ddd«       d
D ]+  }t        t        d	¬«      5  t        g d¢|g«       ddd«       Œ- t        t        d¬«      5  t        g d¢ddg«       ddd«       t        t        d¬«      5  t        t	        j
                  d«      ddgd¬«       ddd«       y# 1 sw Y   �ŒxY w# 1 sw Y   ŒüxY w# 1 sw Y   ŒáxY w# 1 sw Y   ŒÆxY w# 1 sw Y   ŒÐxY w# 1 sw Y   Œ„xY w# 1 sw Y   yxY w)zA
        Verify that exceptions and warnings are raised.
        ú	1-D arrayry   )r   r)   r)   r   r)   r   Nr^   r   únot a valid index)iœÿÿÿr8   r^   éè  ©r)   r   r   úcannot safely castrñ   çffffff@rõ   r\   rj   ©rõ   )r   r<   r	   r~   r   r   )rS   Úps     r%   r€   z#TestPeakProminences.test_exceptions¿  so  € ô
 ”J kÔ2ñ 	5Üšl˜^¨a°¨VÔ4÷	5ô ”J kÔ2ñ 	5Üš\¨Q°¨F¨8Ô4÷	5ô ”J kÔ2ñ 	&Ü˜Q  Ô%÷	&ô ”JÐ&9Ô:ñ 	&Ü˜R ! Ô%÷	&ð %ò 	1ˆAÜœ
Ð*=Ô>ñ 1Ü ¢¨Q¨CÔ0÷1ð 1ð	1ô
 ”IÐ%9Ô:ñ 	7Üš\¨C°¨:Ô6÷	7ô ”J fÔ-ñ 	<ÜœRŸY™Y r›]¨Q°¨F¸Õ;÷	<ð 	<÷-	5ñ 	5ú÷	5ð 	5ú÷	&ð 	&ú÷	&ð 	&ú÷1ð 1ú÷	7ð 	7ú÷	<ð 	<úsR   ’D=½E
Á(EÂE"Â;E.Ã&E:Ä$FÄ=EÅ
EÅEÅ"E+Å.E7	Å:FÆFc                 óî   — d}dD ]+  }t        t        |¬«      5  t        g d¢|g«       ddd«       Œ- t        t        |¬«      5  t        g d¢dgd¬«       ddd«       y# 1 sw Y   ŒcxY w# 1 sw Y   yxY w)	ú>
        Verify that appropriate warnings are raised.
        z!some peaks have a prominence of 0)r   r)   r   ry   rû   N©r   r)   r)   r)   r   r   rþ   )r   r   r	   )rS   Úmsgrÿ   s      r%   Útest_warningsz!TestPeakProminences.test_warningsÝ  s~   € ð 2ˆØò 	2ˆAÜÔ*°#Ô6ñ 2Ü ¢¨Q¨DÔ1÷2ð 2ð	2ô Ô&¨cÔ2ñ 	;Üš_¨q¨c¸Õ:÷	;ð 	;÷2ð 2ú÷	;ð 	;ús   ™AÁA+ÁA(	Á+A4N)
r�   r‚   rƒ   rU   rÄ   rê   rî   rö   r€   r  r‡   r'   r%   rÚ   rÚ   o  s%   „ ò&ò;ò">ò(	>ò#ò <ó<	;r'   rÚ   c                   ó´   — e Zd Zd„ Zej
                  j                  d«      d„ «       Zd„ Zd„ Z	d„ Z
d„ Zd„ Zej
                  j                  d«      d	„ «       Zy
)ÚTestPeakWidthsc                 óx  — t        g g «      d   }t        |t        j                  «      sJ ‚|j                  dk(  sJ ‚t        g d¢g «      d   }t        |t        j                  «      sJ ‚|j                  dk(  sJ ‚t        g g «      }|D ]/  }t        |t        j                  «      sJ ‚|j                  dk(  rŒ/J ‚ y)rÜ   r   rÁ   N)r
   Ú
isinstancer   ÚndarrayrÝ   )rS   Úwidthsr6   rÞ   s       r%   rU   zTestPeakWidths.test_emptyë  s±   € ô ˜R Ó$ QÑ'ˆÜ˜&¤"§*¡*Ô-Ð-Ð-Ø�{‰{˜aÒÐÐÜšY¨Ó+¨AÑ.ˆÜ˜&¤"§*¡*Ô-Ð-Ð-Ø�{‰{˜aÒÐÐÜ˜"˜bÓ!ˆØò 	!ˆCÜ˜c¤2§:¡:Ô.Ð.Ð.Ø—8‘8˜q“=Ð �=ñ	!r'   ú#ignore:some peaks have a width of 0c           	      ó€  — t        j                  g d¢«      }d}dD ]   \  }}}}t        |dg|«      \  }}}	}
t        |t        j                  |g«      «       t        |t        j                  d||z  z
  g«      «       t        |	t        j                  |g«      «       t        |
t        j                  |g«      «       Œ¢ y)zk
        Test a simple use case with easy to verify results at different relative
        heights.
        )r)   r   r)   r   r)   r   r8   r   ))ç        r  rs   rs   )g      Ð?rr   ç      @ç      @)ç      à?r|   r|   ç      @)ç      è?rs   ç      ø?ç      @)rr   r  rr   rt   )r|   rt   rr   ç      @)rs   rt   rr   r  r^   N)r   rO   r
   r   rè   )rS   rT   Ú
prominenceÚ
rel_heightÚ
width_trueÚlip_trueÚrip_trueÚ
width_calcÚheightÚlip_calcÚrip_calcs              r%   rÄ   zTestPeakWidths.test_basicú  s°   € ô �H‰HÒ+Ó,ˆØˆ
ð;
ò 	>Ñ6ˆJ˜
 H¨hô 6AØ�A�3˜
ó6$Ñ2ˆJ˜ ¨(ä˜J¬¯
©
°J°<Ó(@ÔAÜ˜F¤B§J¡J°°JÀÑ4KÑ0KÐ/LÓ$MÔNÜ˜H¤b§j¡j°(°Ó&<Ô=Ü˜H¤b§j¡j°(°Ó&<Õ=ñ	>r'   c           	      óà   — t        j                  g d¢d«      }t        j                  dgd«      }t        |ddd…   |ddd…   «      }t        |t        j                  dgdgdgdgg«      «       y)	rì   )r   rW   r]   rb   r)   r^   Nr  éK   r  )r   rí   r
   r   rè   )rS   rT   râ   Úresults       r%   rî   z"TestPeakWidths.test_non_contiguous  si   € ô �I‰I’l AÓ&ˆÜ—	‘	˜1˜#˜qÓ!ˆÜ˜Q™s ˜s™V U©3¨Q¨3¡ZÓ0ˆÜ˜ÜŸ
™
 T F¨R¨D°4°&¸3¸%Ð#@ÓAõ	
r'   c                 óÞ  — t        t        d¬«      5  t        t        j                  d«      t        j
                  d«      «       ddd«       t        t        d¬«      5  t        ddg«       ddd«       t        t        d¬«      5  t        t        j                  d«      t        j
                  dt        j                  ¬	«      «       ddd«       t        t        d¬«      5  t        t        j                  d«      d«       ddd«       t        t        d
¬«      5  t        t        j                  d«      ddg«       ddd«       t        t        d
¬«      5  t        g ddg«       ddd«       t        t        d¬«      5  t        t        j                  d«      ddg«       ddd«       t        t        d¬«      5  t        g d¢ddgd¬«       ddd«       t        t        d¬«      5  t        g d¢dgd¬«       ddd«       y# 1 sw Y   �Œ¼xY w# 1 sw Y   �Œ¢xY w# 1 sw Y   �ŒSxY w# 1 sw Y   �Œ'xY w# 1 sw Y   ŒøxY w# 1 sw Y   ŒÜxY w# 1 sw Y   Œ­xY w# 1 sw Y   Œ�xY w# 1 sw Y   yxY w)zD
        Verify that argument validation works as intended.
        rø   ry   r°   r^   Nr   r\   rð   r   rù   rd   rh   r)   r   rü   rñ   rý   r  )r   r)   r   r)   r   r8   ©r  ÚNone)r)   r   r)   )NNN©Úprominence_data)	r   r<   r
   r   r   r}   r   rX   r~   r   s    r%   r€   zTestPeakWidths.test_exceptions  só  € ô ”J kÔ2ñ 	6äœŸ™ Ó(¬"¯'©'°!«*Ô5÷	6ô ”J kÔ2ñ 	 ä˜˜A˜3Ô÷	 ô ”J kÔ2ñ 	GäœŸ	™	 "›¤r§w¡w¨v¼R¿W¹WÔ'EÔF÷	Gô ”J kÔ2ñ 	*äœŸ	™	 "› qÔ)÷	*ô ”JÐ&9Ô:ñ 	0äœŸ	™	 "›¨¨2 wÔ/÷	0ô ”JÐ&9Ô:ñ 	$ä˜˜Q ˜FÔ#÷	$ô ”IÐ%9Ô:ñ 	3äœŸ	™	 "›¨¨S zÔ2÷	3ô ”J lÔ3ñ 	@äš¨!¨Q¨¸BÕ?÷	@ô ”I VÔ,ñ 	Läš	 A 3Ð8JÕK÷	Lð 	L÷1	6ñ 	6ú÷	 ñ 	 ú÷	Gñ 	Gú÷	*ñ 	*ú÷	0ð 	0ú÷	$ð 	$ú÷	3ð 	3ú÷	@ð 	@ú÷	Lð 	Lúsl   ’3G?ÁHÂAHÃ! H&Ä"H3ÅH?Å="IÆ8IÇ$I#Ç?H	ÈHÈH#È&H0È3H<È?IÉIÉI É#I,c                 ó¼  — d}t        t        |¬«      5  t        g d¢dgd¬«       ddd«       t        t        |¬«      5  t        g d¢d	gt        j                  d
gt        j
                  «      t        j                  d	gt        j                  «      t        j                  d	gt        j                  «      f¬«       ddd«       y# 1 sw Y   Œ¡xY w# 1 sw Y   yxY w)r  zsome peaks have a width of 0ry   ©r   r)   r   r)   r   r#  Nr  r   r  r%  )r   r   r
   r   rO   rP   rX   )rS   r  s     r%   r  zTestPeakWidths.test_warnings=  s®   € ð -ˆÜÔ&¨cÔ2ñ 	6äš	 A 3°1Õ5÷	6ô Ô&¨cÔ2ñ 	äÚ ! Ü!#§¡¨2¨$´·
±
Ó!;Ü!#§¡¨1¨#¬r¯w©wÓ!7Ü!#§¡¨1¨#¬r¯w©wÓ!7ð!9õ÷	ð 	÷	6ð 	6ú÷	ð 	ús   ”C¿A>CÃCÃCc                 óœ  — g d¢}dg}t        g d¢«      D ]©  \  }\  }}}t        j                  |t        j                  ¬«      t        j                  |t        j                  ¬«      t        j                  |t        j                  ¬«      f}|dk  rd}nd}t        t        |¬«      5  t        |||¬	«       d
d
d
«       Œ« y
# 1 sw Y   Œ¶xY w)z4Test with mismatching peak and / or prominence data.r(  r)   ))©rr   )r8   ©r   )r*  ©r   )r^   )r*  r+  r,  )©rr   rr   ©r   r   ©r   r   )r-  r,  r+  )r*  r.  r+  )r*  r,  r/  r   r^   z#prominence data is invalid for peakz4arrays in `prominence_data` must have the same shapery   r%  N)r   r   rO   rP   rX   r   r<   r
   )	rS   rT   rò   r¼   ÚprominencesÚ
left_basesÚright_basesr&  rz   s	            r%   Ú test_mismatching_prominence_dataz/TestPeakWidths.test_mismatching_prominence_dataN  s¾   € âˆØˆsˆÜ9Bò D
ó :ò 	FÑ5ˆAÑ5�˜Z¨ô  "Ÿx™x¨¼2¿:¹:ÔFÜ!Ÿx™x¨
¼"¿'¹'ÔBÜ!Ÿx™x¨¼2¿7¹7ÔCðEˆOð �1ŠuØ=‘àN�Üœ
¨%Ô0ñ FÜ˜A˜t°_ÕE÷Fð Fñ%	F÷$Fð Fús   Â(CÃC	c                 óN  — t        j                  g d¢«      }t        j                  dg«      }t        j                  dg«      t        j                  dg«      t        j                  dg«      f}t        |||¬«      }t        j                  dgdgd	gdgg«      }t	        ||«       y )
N)r   r)   r)   r)   g      ð¿r   r   r%  r  r  rr   )r   rO   r
   rè   r   )rS   rT   rò   r&  r!  Úresult_expecteds         r%   Ú*test_no_zero_division_with_prominence_dataz9TestPeakWidths.test_no_zero_division_with_prominence_datag  sƒ   € ô
 �H‰H’YÓˆÜ�x‰x˜˜‹}ˆÜŸ8™8 T FÓ+¬R¯X©X°q°c«]¼B¿H¹HÀaÀS»MÐJˆÜ˜Q °oÔFˆÜŸ*™* s e¨c¨U°R°D¸3¸%Ð%@ÓAˆÜ˜ Õ0r'   c                 óx   — g d¢}t        t        |dgd¬«      g d¢«       t        t        |dgd¬«      g d¢«       y)	z3Test if x == eval_height counts as an intersection.)r   r)   r   r)   r^   r^   r^   r)   r   r)   r   rj   r   )râ   r  ))r  ©rs   ©rt   r9  gUUUUUUå?))r  r*  r8  )g      @N)r   r
   )rS   rT   s     r%   Útest_intersection_rulesz&TestPeakWidths.test_intersection_ruless  s;   € ò .ˆäœ A¨a¨S¸QÔ?Ú4ô	6ô 	œ A¨a¨S¸SÔAÚ4õ	6r'   N)r�   r‚   rƒ   rU   r„   r…   ÚfilterwarningsrÄ   rî   r€   r  r3  r6  r:  r‡   r'   r%   r  r  é  sm   „ ò!ð ‡[�[×ÑÐ EÓFñ>ó Gð>ò.	
òLò@ò"Fò2
1ð ‡[�[×ÑÐ EÓFñ	6ó Gñ	6r'   r  c                  ó|  — t        j                  d«      } | }|dz   }|ddd…   }dt        d| |«      k(  sJ ‚dt        d| |«      k(  sJ ‚dt        d| |«      k(  sJ ‚dt        d| |«      k(  sJ ‚dt        d| |«      k(  sJ ‚t        ||f| |«      \  }}t        |||   «       t        |||   «       t	        t
        d	¬
«      5  t        |t        j                  d«      |«       ddd«       t	        t
        d¬
«      5  t        d|ft        j                  d«      |«       ddd«       y# 1 sw Y   ŒFxY w# 1 sw Y   yxY w)zW
    Verify parsing of condition arguments for `scipy.signal.find_peaks` function.
    r\   r)   Nr   ©NN)r)   N©Nr   )rs   r  zarray size of lowerry   rh   zarray size of upper)r   r   r   r   r   r<   )rT   Ú	amin_trueÚ	amax_truerâ   Ú	amin_calcÚ	amax_calcs         r%   Útest_unpack_condition_argsrC  €  s]  € ô 	�	‰	�"‹€AØ€IØ˜B‘€IØ�a�d˜�d‰O€Eð Ô1°,ÀÀ5ÓIÒIÐIÐIØÔ.¨q°!°UÓ;Ò;Ð;Ð;ØÔ.¨y¸!¸UÓCÒCÐCÐCØÔ.¨y¸!¸UÓCÒCÐCÐCØÔ.¨y¸!¸UÓCÒCÐCÐCô 2°9¸iÐ2HÈ!ÈUÓSÑ€IˆyÜ�I˜y¨Ñ/Ô0Ü�I˜y¨Ñ/Ô0ô 
”
Ð"7Ô	8ñ @Ü˜y¬"¯)©)°B«-¸Ô?÷@ä	”
Ð"7Ô	8ñ HÜ  iÐ0´"·)±)¸B³-ÀÔG÷Hð H÷@ð @ú÷Hð Hús   Ã !D&Ã:#D2Ä&D/Ä2D;c                   óæ   — e Zd Zh d£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ej                  j#                  di ddiddiddig«      d„ «       Zy)ÚTestFindPeaks>
   r
  Úleft_ipsÚ	right_ipsr1  r0  r2  Úpeak_heightsÚwidth_heightsÚleft_thresholdsÚright_thresholdsc                 óÀ   — d}t        t        j                  d«      ||||¬«      \  }}|j                  dk(  sJ ‚| j                  D ]  }||   j                  dk(  rŒJ ‚ y)z@
        Test behavior for signal without local maxima.
        r=  r\   ©r  Ú	thresholdr  Úwidthr   N)r   r   r}   rÝ   Úproperty_keys)rS   Úopen_intervalrâ   ÚpropsÚkeys        r%   Útest_constantzTestFindPeaks.test_constant£  si   € ð %ˆÜ!¤"§'¡'¨"£+Ø)6À-Ø-:À-ôQ‰ˆˆuð �z‰z˜QŠÐˆØ×%Ñ%ò 	(ˆCØ˜‘:—?‘? aÓ'Ð'Ð'ñ	(r'   c                 ó–  — t        j                  g d¢«      }t        j                  |j                  dz  dz   «      }||ddd…<   t        j                  |j                  t
        ¬«      }|ddd…   |ddd…<   t        j                  ||«      }t        |d¬«      \  }}t        |g d¢d	¬
«       t        |d   |d	¬
«       t        |d   ||dz
  dz  z
  d	¬
«       t        |d   ||dz  z   d	¬
«       t        t        |d¬«      d   g d¢d	¬
«       t        t        |d¬«      d   g d¢d	¬
«       t        t        |d¬«      d   ddgd	¬
«       y)z8
        Test plateau size condition for peaks.
        )r)   r   r^   rb   rd   rm   éo   r   r)   Nr   r=  )Úplateau_size)r)   r^   rg   rh   rf   é!   rW   FrM   Úplateau_sizesro   rp   rb   r   )rh   rf   rX  rW   )Nr  )r)   r^   rg   )rj   r]   rf   rX  )	r   rO   r   rÝ   r}   r-   rí   r   r   )rS   rY  rT   Úrepeatsrâ   rR  s         r%   Útest_plateau_sizezTestFindPeaks.test_plateau_size¯  sF  € ô
 Ÿ™Ò!9Ó:ˆÜ�H‰H�]×'Ñ'¨!Ñ+¨aÑ/Ó0ˆØˆˆ!ˆ$ˆQˆ$‰Ü—'‘'˜!Ÿ&™&¬Ô,ˆØ˜!˜$˜Q˜$™ˆ���1�‰Ü�I‰I�a˜Ó!ˆô " !°,Ô?‰ˆˆuÜ˜Ò9ÀuÕMÜ˜˜oÑ.°È5ÕQÜ˜˜lÑ+¨U°mÀaÑ6GÈAÑ5MÑ-MØ$)õ	+ä˜˜mÑ,¨e°mÀqÑ6HÑ.HØ$)õ	+ô 	œ
 1°1Ô5°aÑ8Ò:KØ$)õ	+äœ
 1°;Ô?ÀÑBÂIØ$)õ	+äœ
 1°7Ô;¸AÑ>ÀÀRÀØ$)ö	+r'   c                 óÞ  — d}t        |d¬«      \  }}t        |t        j                  g d¢«      d¬«       t        |d   t        j                  g d¢«      d¬«       t        t        |d	¬«      d
   t        j                  ddg«      d¬«       t        t        |d¬«      d
   t        j                  ddg«      d¬«       t        t        |d¬«      d
   t        j                  dg«      d¬«       y)z2
        Test height condition for peaks.
        )r  çUUUUUUÕ?r  r  r   r  r   r=  )r  rç   FrM   rH  )r]  r  r  r  r   r^   rj   )Nr^   r)   )r   r^   N)r   r   r   rO   ©rS   rT   râ   rR  s       r%   Útest_height_conditionz#TestFindPeaks.test_height_conditionÌ  sÀ   € ð )ˆÜ! !¨LÔ9‰ˆˆuÜ˜œrŸx™xª	Ó2ÀÕFÜ˜˜nÑ-¬r¯x©xºÓ/GØ$)õ	+äœ
 1¨SÔ1°!Ñ4´b·h±hÀÀ1¸vÓ6FØ$)õ	+äœ
 1¨YÔ7¸Ñ:¼B¿H¹HÀaÈÀVÓ<LØ$)õ	+äœ
 1¨VÔ4°QÑ7¼¿¹À1À#»Ø$)ö	+r'   c                 óô  — d}t        |d¬«      \  }}t        |t        j                  ddg«      d¬«       t        |d   t        j                  d	d
g«      «       t        |d   t        j                  ddg«      «       t        t        |d¬«      d   t        j                  dg«      d¬«       t        t        |d¬«      d   t        j                  g t        ¬«      d¬«       t        t        |d¬«      d   t        j                  ddg«      d¬«       t        t        |d¬«      d   t        j                  dg«      d¬«       t        t        |d¬«      d   t        j                  g t        ¬«      d¬«       y)z5
        Test threshold condition for peaks.
        )r   r   r)   rb   r8   r=  )rN  r)   r^   FrM   rJ  r|   rs   rK  rr   rt   r   r   r  r   )Nrj   )Nrb   )r   rb   N)r   r   r   rO   r-   r^  s       r%   Útest_threshold_conditionz&TestFindPeaks.test_threshold_conditionÜ  s*  € ð ˆÜ! !¨|Ô<‰ˆˆuÜ˜œrŸx™x¨¨A¨Ó/¸UÕCÜ˜Ð/Ñ0´"·(±(¸CÀ¸:Ó2FÔGÜ˜Ð0Ñ1´2·8±8¸SÀ#¸JÓ3GÔHÜœ
 1°Ô2°1Ñ5´r·x±xÀÀ³}Ø$)õ	+äœ
 1°Ô4°QÑ7¼¿¹À"ÌCÔ9PØ$)õ	+äœ
 1°	Ô:¸1Ñ=¼r¿x¹xÈÈAÈÓ?OØ$)õ	+äœ
 1°	Ô:¸1Ñ=¼r¿x¹xÈÈ»}Ø$)õ	+äœ
 1°Ô7¸Ñ:¼B¿H¹HÀRÌsÔ<SØ$)ö	+r'   c                 ó"  — t        j                  ddd«      }t        j                  d«      }||xx   t        j                  dd|j                  «      z  cc<   t        t        |d¬«      d   |d¬«       t        |d	¬«      d   }t        j                  ||d
¬«      j                  dk(  sJ ‚t        j                  |«      }t        |dt        j                  |«      z  «       g d¢}t        |d¬«      d   }|j                  dk(  r|d   dk(  sJ ‚y)z4
        Test distance condition for peaks.
        r)   é   r^   r   ©Údistancer   FrM   g9ÖÅm4 @T)Úassume_uniqueru   )éþÿÿÿr)   r8   r   éýÿÿÿr\   N)
r   r   r   r,   rÝ   r   r   Ú	setdiff1drŸ   Ú	ones_like)rS   Ú	peaks_allrT   Úpeaks_subsetÚdfss        r%   Útest_distance_conditionz%TestFindPeaks.test_distance_conditionð  só   € ô
 —I‘I˜a  QÓ'ˆ	Ü�H‰H�R‹LˆØ	ˆ)‹œŸ™ A q¨)¯.©.Ó9Ñ9‹ô 	œ
 1¨qÔ1°!Ñ4°iÈUÕSô " !¨fÔ5°aÑ8ˆä�|‰|˜L¨)À4ÔH×MÑMÐQRÒRÐRÐRô �g‰g�lÓ#ˆÜ˜˜QœrŸ|™|¨CÓ0Ñ0Ô1ò ˆÜ! !¨bÔ1°!Ñ4ˆØ× Ñ  AÒ%¨,°q©/¸QÒ*>Ð>Ð>Ð*>r'   c                 ó  — t        j                  ddd«      }t        j                  ddd«      }t        j                  dd|j                  «      }||xx   |z  cc<   ||   ||dz      z
  }d}t        j                  |d   |k  ||d   k  z  «      }t        ||¬«      \  }}t        |||   d	¬
«       t        |d   ||   d	¬
«       t        |d   t        j                  |d   «      «       t        |d   ||   dz   d	¬
«       y)z6
        Test prominence condition for peaks.
        r   r\   rW   r)   éc   r   )r^   rk   )r  FrM   r0  r1  r2  N)r   r,   r   rÝ   Únonzeror   r   Ú
zeros_like)	rS   rT   Ú
peaks_trueÚoffsetr0  ÚintervalÚkeepÚ
peaks_calcÚ
propertiess	            r%   Útest_prominence_conditionz'TestFindPeaks.test_prominence_condition
  s  € ô �K‰K˜˜2˜sÓ#ˆÜ—Y‘Y˜q " aÓ(ˆ
Ü—‘˜Q  J§O¡OÓ4ˆØ	ˆ*‹˜Ñ‹Ø˜
‘m a¨
°Q©Ñ&7Ñ7ˆØˆÜ�z‰zØ�a‰[˜KÑ'¨K¸8ÀA¹;Ñ,FÑGóIˆô ",¨A¸(Ô!CÑˆ
�JÜ˜
 J¨tÑ$4À%ÕHÜ˜
 =Ñ1°;¸tÑ3DÐRWÕXÜ˜
 <Ñ0ÜŸ™ j°Ñ&>Ó?ô	Aä˜
 =Ñ1°:¸dÑ3CÀaÑ3GØ$)ö	+r'   c                 óÒ  — t        j                  g d¢«      }t        |dd¬«      \  }}|j                  dk(  sJ ‚t	        |dt        j
                  |«      z  «       t        |d   t        j                  dg«      «       t        |d	   t        j                  d
g«      «       t        |d   t        j                  dg«      «       t        |d   t        j                  dg«      «       y)z1
        Test width condition for peaks.
        )	r)   r   r)   r   r)   r   r8   rb   r   r>  r  )rO  r  r)   rg   r
  gš™™™™™õ?rI  rr   rF  gš™™™™™@rG  g      @N)r   rO   r   rÝ   r   rj  r   rè   r^  s       r%   Útest_width_conditionz"TestFindPeaks.test_width_condition  s´   € ô �H‰HÒ1Ó2ˆÜ! !¨9ÀÔF‰ˆˆuØ�z‰z˜QŠÐˆÜ˜˜q¤§¡¨eÓ!4Ñ4Ô5Ü˜˜h™¬¯©°T°FÓ);Ô<Ü˜˜oÑ.´·
±
¸B¸4Ó0@ÔAÜ˜˜jÑ)¬2¯:©:°s°eÓ+<Ô=Ü˜˜kÑ*¬B¯J©J¸°vÓ,>Õ?r'   c                 óÚ   — d}g d¢}t        |||||¬«      \  }}t        |«      t        | j                  «      k(  sJ ‚| j                  D ]   }|j                  ||   j                  k(  rŒ J ‚ y)z+
        Test returned properties.
        r=  )
r   r)   r   r   r  r   r^   r   rj   rk   rM  N)r   r+   rP  rÝ   )rS   rQ  rT   râ   rR  rS  s         r%   Útest_propertieszTestFindPeaks.test_properties,  sw   € ð %ˆÚ,ˆÜ! !Ø)6À-Ø-:À-ôQ‰ˆˆuô �5‹zœS ×!3Ñ!3Ó4Ò4Ð4Ð4Ø×%Ñ%ò 	1ˆCØ—:‘:  s¡§¡Ó0Ð0Ð0ñ	1r'   c                 ó   — t        t        d¬«      5  t        t        j                  d«      «       ddd«       t        t        d¬«      5  t        t        j
                  d«      «       ddd«       t        t        d¬«      5  t        t        j                  d«      d¬	«       ddd«       y# 1 sw Y   Œ|xY w# 1 sw Y   ŒPxY w# 1 sw Y   yxY w)
z5
        Test exceptions raised by function.
        rø   ry   r)   Nr/  re  r\   r8   rd  )r   r<   r   r   rO   r}   r   r   s    r%   Útest_raiseszTestFindPeaks.test_raises9  s˜   € ô ”J kÔ2ñ 	$Ü”r—x‘x “{Ô#÷	$ä”J kÔ2ñ 	(Ü”r—w‘w˜v“Ô'÷	(ä”J jÔ1ñ 	3Ü”r—y‘y “}¨rÕ2÷	3ð 	3÷		$ð 	$ú÷	(ð 	(ú÷	3ð 	3ús#   ’B,Á
B8Â!CÂ,B5Â8CÃCz(ignore:some peaks have a prominence of 0r  c                 ó~  — t        g d¢ddd¬«      \  }}t        |dt        j                  |«      z  «       t        |d   t        j                  |d   «      «       t        |d   t        j                  |d   «      «       t        |d   t        j                  |d   «      «       dD ]  }t        ||   |d	¬
«       Œ y)z³
        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.
        r  r=  r   )r  rO  rõ   r0  r
  rI  )r1  r2  rF  rG  FrM   N)r   r   r   rj  rr  )rS   râ   rR  rS  s       r%   Útest_wlen_smaller_plateauz'TestFindPeaks.test_wlen_smaller_plateauD  s©   € ô "¢/¸lØ(4¸1ô>‰ˆˆuä˜˜q¤2§<¡<°Ó#6Ñ6Ô7Ü˜˜mÑ,¬b¯m©m¸EÀ-Ñ<PÓ.QÔRÜ˜˜h™¬¯©°u¸X±Ó)GÔHÜ˜˜oÑ.´·±¸UÀ?Ñ=SÓ0TÔUØIò 	BˆCÜ˜E #™J¨¸5ÖAñ	Br'   Úkwargsre  rs   r  r=  rO  r>  c                 óÆ   — t        j                  ddd«      }|j                  «       }d|j                  _        t        |«      \  }}t        |fi |¤Ž\  }}t        ||«       y)z4
        Test readonly arrays are accepted.
        r   r\   r±   FN)r   r,   r9   ÚflagsÚ	writeabler   r   )rS   r‚  rT   Ú
x_readonlyrâ   Ú_Úpeaks_readonlys          r%   Útest_readonly_arrayz!TestFindPeaks.test_readonly_arrayV  sZ   € ô �K‰K˜˜2˜rÓ"ˆØ—V‘V“Xˆ
Ø%*ˆ
×ÑÔ"ä˜a“=‰ˆˆqÜ& zÑ<°VÑ<Ñˆ˜ä˜˜~Õ.r'   N)r�   r‚   rƒ   rP  rT  r[  r_  ra  rn  ry  r{  r}  r  r„   r…   r;  r�  r†   r‰  r‡   r'   r%   rE  rE  œ  s©   „ ò?€Mò
(ò+ò:+ò +ò(?ò4+ò*@ò1ò	3ð ‡[�[×ÑÐ JØ EóGñBóGðBð  ‡[�[×Ñ˜XØ
Ø	�SÐØ	�|Ð$Ø	�)Ðð	(ó ñ/óñ/r'   rE  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestFindPeaksCwtc                 óª   — g d¢}d}t        ||«      \  }}t        j                  dt        |«      «      }t	        ||ddd¬«      }t        ||dd	¬
«       y)zX
        Generate a series of gaussians and attempt to find the peak locations.
        ©rt   rs   rÆ   g      4@rÆ   g      I@rÇ   rž   r   r   N)Ú
gap_threshÚmin_snrÚ
min_lengthFz4Found maximum locations did not equal those expected)rN   Úerr_msg)r0   r   r   r3   r   r   )rS   r   Ú
num_pointsrË   rÌ   r
  Ú
found_locss          r%   Útest_find_peaks_exactz&TestFindPeaksCwt.test_find_peaks_exactm  sZ   € ò 4ˆØˆ
Ü1°&¸*ÓEÑˆ	�8Ü—‘˜3¤ F£Ó,ˆÜ# I¨vÀ!ÈQØ48ô:ˆ
ä˜
 HØ$)Ø Vö	
r'   c                 óü  — g d¢}d}t        ||«      \  }}t        j                  dt        |«      «      }d}t        j                  j                  d«      }||j	                  |«      dz
  d|z  z  z  }t        ||dd	|d
z  ¬«      }d}	t        |«      t        |«      k(  sJ |	«       ‚t        j                  ||z
  «      }
t        j                  |«      d
z  }t        j                  j                  |
|dd|› �z   «       y)zz
        Verify that peak locations are (approximately) found
        for a series of gaussians with added noise.
        r�  rÇ   rž   gìQ¸…ë±?éor  r   r±   r)   rj   )r�  rŽ  r�  z-Different number of peaks found than expectedzMaximum location differedzby more than N)r0   r   r   r3   ÚrandomÚdefault_rngr   r+   r¢   rO   r    r¡   )rS   r   r’  rË   rÌ   r
  Ú	noise_ampÚrngr“  r‘  ÚdiffsÚ	max_diffss               r%   Útest_find_peaks_withnoisez*TestFindPeaksCwt.test_find_peaks_withnoise|  sú   € ò
 4ˆØˆ
Ü1°&¸*ÓEÑˆ	�8Ü—‘˜3¤ F£Ó,ˆØˆ	Ü�i‰i×#Ñ# HÓ-ˆØ�c—j‘j Ó,¨sÑ2°Q°y±[ÑAÑAˆ	Ü# I¨vÀ"Ø45¸yÈ1¹}ôNˆ
ð AˆÜ�:‹¤# h£-Ò/Ð8°Ó8Ð/Ü—‘�z HÑ,Ó-ˆÜ—H‘H˜VÓ$ qÑ(ˆ	Ü
�
‰
×$Ñ$ U¨IÐ7RØ'4°Y°KÐ%@ñ8Aõ 	Br'   c                 óè   — d}d}t         j                  j                  d«      }|j                  |«      dz
  d|z  z  }t        j                  dd«      }t        ||dd	¬
«      }t        |«      dk(  sJ ‚y)zQ
        Verify that no peak is found in
        data that's just noise.
        rr   rW   iWÖ
r  r   r\   r]   rj   r­   )r�  Ú
noise_percr   N)r   r—  ÚRandomStateÚrandr   r   r+   )rS   r™  r’  rš  rË   r
  r“  s          r%   Útest_find_peaks_nopeakz'TestFindPeaksCwt.test_find_peaks_nopeak’  sp   € ð
 ˆ	Øˆ
Ü�i‰i×#Ñ# IÓ.ˆØ—X‘X˜jÓ)¨CÑ/°!°I±+Ñ>ˆ	Ü—‘˜2˜rÓ"ˆÜ# I¨v¸qÈRÔPˆ
Ü�:‹ !Ò#Ð#Ñ#r'   c                 ó²   — t        dd«      }t        j                  g d¢«      }t        ||t         ¬«      }t	        |t        j
                  dg«      d¬«       y )NéÈ   r   )r)   r   r^   rb   )ÚwaveletrW   FrM   )r   r   rO   r   r   rè   )rS   rT   r
  Úas       r%   Ú)test_find_peaks_with_non_default_waveletsz:TestFindPeaksCwt.test_find_peaks_with_non_default_waveletsŸ  sA   € Ü�S˜!ÓˆÜ—‘š,Ó'ˆÜ˜1˜f¬hÔ7ˆä˜œ2Ÿ:™: s eÓ,¸%Ö@r'   c                 ó  — ddg}d}t        ||«      \  }}t        j                  dt        |«      d«      }d}t        j                  j                  d«      }||j                  |«      dz
  d|z  z  z  }|d	d
xxx dz  ccc t        ||dddd¬«      }t        j                  t        «      5  |j                  |j                  k(  sJ ‚	 ddd«       t        ||dddd¬«      }|j                  |j                  k(  sJ ‚y# 1 sw Y   Œ6xY w)zq
        Verify that window_size is passed correctly to private function and
        affects the result.
        r|   rú   rž   gš™™™™™É?çš™™™™™©?r–  r  r   éú   i@  r)   r^   N)rŽ  r�  r�  Úwindow_sizerm   )r0   r   r   r3   r—  r   r¡  r   r„   r   ÚAssertionErrorrÝ   )	rS   r   r’  rË   rÌ   r
  r™  rš  r“  s	            r%   Útest_find_peaks_window_sizez,TestFindPeaksCwt.test_find_peaks_window_size¦  s  € ð
 �s�ˆØˆ
Ü1°&¸*ÓEÑˆ	�8Ü—‘˜3¤ F£¨SÓ1ˆØˆ	Ü�i‰i×#Ñ# HÓ-ˆØ�c—h‘h˜zÓ*¨SÑ0°1°Y±;Ñ?Ñ?ˆ	ð 	�#�cÓ˜aÑÓä# I¨vÀ!ÈQØ/3ÀôGˆ
ä�]‰]œ>Ó*ñ 	4Ø—?‘? h§m¡mÒ3Ð3Ñ3÷	4ô $ I¨vÀ!ÈQØ/3ÀôEˆ
à�‰ (§-¡-Ò/Ð/Ñ/÷	4ð 	4ús   Â,C>Ã>Dc                 óÔ   — t        j                  dt         j                  d«      }t        j                  |«      }d}t	        ||«      }t         j
                  j                  |d«       y)z]
        Verify that the `width` argument
        in `find_peaks_cwt` can be a float
        r   r©  r)   é    N)r   r   ÚpiÚsinr   r    Úassert_equal)rS   ÚxsrË   r
  r“  s        r%   Útest_find_peaks_with_one_widthz/TestFindPeaksCwt.test_find_peaks_with_one_widthÀ  sL   € ô
 �Y‰Y�qœ"Ÿ%™% Ó&ˆÜ—F‘F˜2“Jˆ	ØˆÜ# I¨vÓ6ˆ
ä
�
‰
×Ñ 
¨BÕ/r'   N)	r�   r‚   rƒ   r”  r�  r¢  r§  r­  r´  r‡   r'   r%   r‹  r‹  k  s"   „ ò
òBò,$òAò0ó4
0r'   r‹  )"r9   Únumpyr   r„   r   r   Úscipy._lib._array_apir   r   Úscipy.signal._peak_findingr   r   r	   r
   r   r   r   r   Úscipy.signal.windowsr   Ú scipy.signal._peak_finding_utilsr   r   r&   r0   rI   rK   r‰   r¶   rÚ   r  rC  rE  r‹  r‡   r'   r%   ú<module>rº     s›   ðÛ ã Û ß  ß B÷	÷ 	ó 	õ *ß Ròò!ò($÷V8#ñ 8#÷vL7ñ L7÷^PLñ PL÷fw;ñ w;÷tT6ñ T6ònH÷8L/ñ L/÷^_0ò _0r'   