Ë
    ÏÍ:ja=  ã                   ó
  — d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d„ Zd„ Zej"                  j%                  dd	gg d
¢«      d„ «       Zej"                  j%                  dddg«      ej"                  j%                  dddg«      d„ «       «       Zej"                  j%                  g d¢g d¢dz  gdddedf ej,                  d«      dddedf ej.                  d«      dddedfg d¢dddedfg d¢ddded fg d¢dd ded!fg d¢ddd dged"fg d¢ddd gged"fddej2                  gddded#fg d¢ddddej2                  ged$fddej2                  gddg d¢ed%fg«      d&„ «       Zd'„ Zej"                  j%                  d	g d(¢«      d)„ «       Zej"                  j%                  dg d*¢«      d+„ «       Zej"                  j%                  d,dd-g«      ej"                  j%                  dg d*¢«      d.„ «       «       Zd/„ Zd0„ Z ej"                  j%                  d1ej2                  ejB                  d2g«      d3„ «       Z"d4„ Z#ej"                  j%                  dg d¢«      d5„ «       Z$ej"                  j%                  d,dd-g«      d6„ «       Z%y)7é    N)Úassert_allclose)Úwhittaker_henderson)Ú_logdet_difference_matrixÚ_polynomial_fitÚ_remlÚ_solveh_bandedÚ_solve_WH_banded)Úspecial_ortho_groupc                 ó  — | j                   d   }d|z  }t        j                  |«      }t        j                  |«      }t        j                  |«      }d|z   }d|z  |d<   d}||d   z  |d<   |d   |z  | d   z  |d<   |}|dk(  rd|z   ||d   z  z
  }d|d   z
  }nd|z   ||d   z  z
  }d|d   z
  }d|z  |d<   ||d   z  |d<   |d   || d   z  ||d   z  z   z  |d<   |}t        d|dz
  «      D ]b  }	d|z   |||	dz
     z  z
  ||	dz
     z
  }d|z  ||	<   d||	dz
     z
  }|||	   z  ||	<   ||	   || |	   z  |||	dz
     z  z   ||	dz
     z
  z  ||	<   |}Œd |dk\  re|dz
  }	d|z   |||	dz
     z  z
  ||	dz
     z
  }d|z  ||	<   d||	dz
     z
  }|||	   z  ||	<   ||	   || |	   z  |||	dz
     z  z   ||	dz
     z
  z  ||	<   |}|dz
  }	d|z   |||	dz
     z  z
  ||	dz
     z
  }d|z  ||	<   ||	   || |	   z  |||	dz
     z  z   ||	dz
     z
  z  ||	<   t        j                  |«      }
||dz
     |
|dz
  <   ||dz
     ||dz
     |
|dz
     z  z   |
|dz
  <   t        |dz
  dd«      D ](  }	||	   ||	   |
|	dz      z  z   ||	   |
|	dz      z  z
  |
|	<   Œ* |
S )	a%  Efficiently solve WH of order 2 according to Weinert.

    Needs order = 2 and n >= 3 (data points).

    Weinert (2007)
    "Efficient computation for Whittaker-Henderson smoothing".
    Computational Statistics and Data Analysis 52:959-74.
    https://doi.org/10.1016/j.csda.2006.11.038
    r   é   é   é   é   é   é   éÿÿÿÿ)ÚshapeÚnpÚemptyÚrange)ÚyÚlambÚnÚbÚeÚfÚdÚmuÚmu_oldÚiÚxs              úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/scipy/signal/tests/test_whittaker.pyÚ_solve_WH_order2_fastr#      s—  € ð 	
�‰�‰
€Að ˆt‰8€Dô 	�‰�‹€AÜ
�‰�‹€AÜ
�‰�‹€Aà	ˆD‰€AØˆq‰5€A€a�DØ	
€BØ��!‘‰9€A€a�DØˆQ‰4�$‰;˜˜1™Ñ€A€a�DØ€FàˆA‚vØ�‰H�v  !¡‘}Ñ$ˆØ��1‘‰X‰à�‰H�v  !¡‘}Ñ$ˆØ��1‘‰XˆØˆq‰5€A€a�DØ��!‘‰9€A€a�DØˆQ‰4�4˜!˜A™$‘; ¨!¨A©$¡Ñ.Ñ/€A€a�DØ€FÜ�1�a˜‘c‹]ò ˆØ�‰H�v  ! A¡#¡‘Ñ&¨¨1¨Q©3©Ñ/ˆØ�1‰uˆˆ!‰Ø��1�Q‘3‘‰ZˆØ�A�a‘D‰yˆˆ!‰Ø�‰t�t˜a ™d‘{ V¨a°°!±©f¡_Ñ4°q¸¸1¹±vÑ=Ñ>ˆˆ!‰Ø‰ðð 	ˆA‚vØ�‰EˆØ�‰H�v  ! A¡#¡‘Ñ&¨¨1¨Q©3©Ñ/ˆØ�1‰uˆˆ!‰Ø��1�Q‘3‘‰ZˆØ�A�a‘D‰yˆˆ!‰Ø�‰t�t˜a ™d‘{ V¨a°°!±©f¡_Ñ4°q¸¸1¹±vÑ=Ñ>ˆˆ!‰Øˆà	ˆA‰€AØ	ˆD‰�6˜A˜a ™c™F‘?Ñ" Q q¨¡s¡VÑ+€AØˆq‰5€A€a�DØˆQ‰4�4˜!˜A™$‘; ¨!¨A¨a©C©&¡Ñ0°1°Q°q±S±6Ñ9Ñ:€A€a�Dô 	�‰�‹€AØˆq�‰s‰V€A€aˆ�c�FØˆq�‰s‰V�a˜˜!™‘f˜q  1¡™v‘oÑ%€A€aˆ�c�FÜ�1�Q‘3˜˜BÓò 4ˆØ�‰t�a˜‘d˜Q˜q ™s™V‘mÑ# a¨¡d¨Q¨q°©s©V¡mÑ3ˆˆ!Šð4à€Hó    c                  ó>  — d} t        | d¬«      j                  «       }|t        j                  dt        j                  | «      z   «      z  |j
                  z  }t        j                  | «      }t        j                  | | f«      }t        j                  |d«      |dd d …f<   t        d| «      D ]   }t        j                  ||«      ||d | …f<   Œ" t        ||d¬«      \  }}}t        |t        j                  j                  ||«      d¬	«       t        |t        j                  t        j                  j                  |«      «      d¬	«       t        |d d
 |d¬«      \  }}}t        j                  t        j                  |«      «      t        j                  t        j                  |d«      d«      z   t        j                  t        j                  |d«      d«      z   }	t        |t        j                  t        j                  j                  |	«      «      d¬	«       y )Né
   iÒ  )Úseedr   r   T©Úcalc_logdetç•dyáý¥=©Úrtolr   r   )r
   Úrvsr   ÚdiagÚarangeÚTÚzerosÚdiagonalr   r   r   ÚlinalgÚsolveÚlogÚdet)
r   ÚQÚAr   Úabr    r!   ÚlogdetÚ_ÚA_tris
             r"   Útest_solveh_bandedr=   V   sŽ  € Ø
€Aä˜A DÔ)×-Ñ-Ó/€AØ	ŒB�G‰G�AœŸ	™	 !›Ñ$Ó%Ñ%¨¯©Ñ+€AÜ
�	‰	�!‹€AÜ	�‰�1�a�&Ó	€BÜ�{‰{˜1˜aÓ €B€qŠ!€t�HÜ�1�a‹[ò 'ˆÜ—[‘[  AÓ&ˆˆ1ˆc�ˆrˆcˆ6Š
ð'ä! " a°TÔ:�L€A€vˆqÜ�A”r—y‘y—‘ q¨!Ó,°5Õ9Ü�FœBŸF™F¤2§9¡9§=¡=°Ó#3Ó4¸5ÕAô " " R a &¨!¸Ô>�L€A€vˆqä
�‰”—‘˜“
ÓœbŸg™g¤b§g¡g¨a°£n°bÓ9Ñ9¼B¿G¹GÄBÇGÁGÈAÈqÃMÐSTÓ<UÑUð 
ô �FœBŸF™F¤2§9¡9§=¡=°Ó#7Ó8¸uÖEr$   Úorderr   ))r   r   )r   r&   )r   r   )r   r   )r   r   )r   é   )r   r   )r   é   )r   r&   )r   r?   )r   r@   )r   r&   )r   r?   c           
      óÚ  — | }t        ||¬«      }t        j                  t        j                  |«      |d¬«      }t	        |t        j
                  t        j                  j                  ||j                  z  «      «      d¬«       t        j                  j                  |j                  |z  «      }t	        |t        j                  t        j
                  ||dkD     «      «      d¬«       y )N)r>   r   r   ©r   Úaxisr*   r+   g:Œ0âŽyE>)r   r   ÚdiffÚeyer   r5   r3   r6   r0   ÚeigvalsÚsum)r>   r   Úpr:   ÚDrF   s         r"   Útest_logdet_difference_matrixrJ   l   sœ   € ð 	€AÜ&¨Q°!Ô4€FÜ
�‰”—‘�q“	˜Q QÔ'€AÜ�FœBŸF™F¤2§9¡9§=¡=°°Q·S±S±Ó#9Ó:ÀÕGÜ�i‰i×Ñ §¡ a¡Ó(€GÜ�FœBŸF™F¤2§6¡6¨'°'¸D±.Ñ*AÓ#BÓCÈ%ÖPr$   r)   FTr   gš™™™™™¹?ç@Œµx¯Dc                 óX  — d}t        j                  dt         j                  z  t        j                  dd|«      z  «      }t	        ||| ¬«      \  }}| s|dk(  sJ ‚t	        ||dt        j
                  |«      z  | ¬«      \  }}|t        j                  |d¬	«      k(  sJ ‚t        ||«       y
)z,Test that _polynomial_fit works as expected.r?   r   r   r   r(   ç®Gáz®ó?)Úweightsr)   gê-�™—q=©ÚrelN)	r   ÚsinÚpiÚlinspacer   ÚonesÚpytestÚapproxr   )r)   r   r   r   Úpolyr:   Úpoly2Úlogdet2s           r"   Útest_polynomial_fitrZ   }   s›   € ð 	€AÜ
�‰ˆq”2—5‘5‰yœ2Ÿ;™; q¨!¨QÓ/Ñ/Ó0€AÜ" 1 d¸ÔD�L€Dˆ&áØ˜Š{Ðˆ{ä$Ø	ˆ4˜¤§¡¨£
Ñ*¸ô�N€Eˆ7ð ”f—m‘m F°Ô6Ò6Ð6Ð6Ü�E˜4Õ r$   ©Úsignalr   r>   rN   ÚerrÚmsg)r   r   r   r   r   r   z*Input array signal must be of shape \(n,\)z,Input array signal must be at least of shaper&   gÍÌÌÌÌÌì¿zParameter lamb must be stringÚXXXz$Parameter lamb must be string 'reml'g      ø?zorder must be an integer.z(order must be an integer not less than 1zAInput array weights must have the same shape as the signal array.z"Input array signal must be finite.z#Input array weights must be finite.z3Input array weights must be zero for all non-finitec                 óz   — t        j                  ||¬«      5  t        | |||¬«       ddd«       y# 1 sw Y   yxY w)z"Test that whittaker raises errors.©Úmatch©r   r>   rN   N)rU   Úraisesr   r[   s         r"   Útest_whittaker_raisesre   �   s9   € ô8 
�‰�s #Ô	&ñ MÜ˜F¨°UÀGÕL÷M÷ Mñ Mús   ˜1±:c                  ó”  — d} t        j                  d«      }t        |d| ¬«      }t        j                  d| z   | g| d| z   gg«      dd| z  z   z  |z  }t	        |j
                  |d¬«       t        t        j                  d«      d| ¬«       t        j                  d«      }t        |d| ¬«      }t        j                  dd| z  z   d| z  |  gd| z  dd| z  z   d| z  g|  d| z  dd| z  z   gg«      dd| z  z   z  |z  }t	        |j
                  |d¬«       |j                  | k(  sJ ‚t        j                  d	«      }t        |d| ¬«      }| dz  }t        j                  d
|z  d| z  z   dz   d|z  d| z  z   d|z  | z
  d|z  gd|z  d| z  z   d|z  d| z  z   dz   d	|z  d	| z  z   d|z  | z
  gd|z  | z
  d	|z  d	| z  z   d|z  d| z  z   dz   d|z  d| z  z   gd|z  d|z  | z
  d|z  d| z  z   d
|z  d| z  z   dz   gg«      d|z  d| z  z   dz   z  |z  }t	        |j
                  |d¬«       t        t        j                  d«      d| ¬«       t        t        j                  d	«      d| ¬«       t        t        j                  d«      d| ¬«       t        t        j                  d«      d| ¬«       t        t        j                  d«      d| ¬«       y)z/Test that whittaker works on a few data points.r   r   )r>   r   gVçž¯Ò<)Úatolr   r   r   r   é   é   é   éüÿÿÿr@   r?   é   N)r   r/   r   Úarrayr   r!   r   )Úlar   ÚwhÚresÚla2s        r"   Útest_whittaker_small_datarr   ¯   sì  € ð 
€BÜ
�	‰	�!‹€AÜ	˜Q a¨bÔ	1€Bä�8‰8�a˜"‘f˜b�\ B¨¨B© <Ð0Ó1°Q¸¸R¹±ZÑ@ÀAÑ
E€CÜ�B—D‘D˜# EÕ*ÜœŸ	™	 !›¨A°BÕ7ä
�	‰	�!‹€AÜ	˜Q a¨bÔ	1€Bô 	�‰Ø��R‘‰Z˜Q ™V¨R¨CÐ0Ø�R‘˜˜Q ™V™¨¨R©Ð0Ø�C˜Q ™V Q¨¨R©¡ZÐ0ð
ó 	ð �!�b‘&‰jñ		ð ñ€Cô �B—D‘D˜# EÕ*Ø�7‰7�bŠ=Ðˆ=ä
�	‰	�!‹€AÜ	˜Q a¨bÔ	1€BØ
�‰'€CÜ
�(‰(Ø	ˆC‰�"�R‘%‰˜!Ñ	˜Q˜s™U Q r¡T™\¨q°©u¸©|ÀÀCÁÐTØ
ˆC‰%�1�R‘4‰-˜Q˜s™U Q r¡T™\¨AÑ-¨q°©u°q¸±t©|À!ÀCÁ%È2Á+ÐTØ
ˆC‰%�R‰-˜Q˜s™U Q r¡T™\¨q°©u°q¸±t©|¸aÑ/?À!ÀCÁ%È!ÈBÉ$Á,ÐTØ	ˆC‰˜Q˜s™U r™\¨q°©u°q¸±t©|ÀÀCÁÈ"ÈRÉ%ÁÐRSÑASÐTð	ó ð
 
ˆC‰�"�R‘%‰˜!Ñ	ñð
 !"ñ
"€Cô �B—D‘D˜# EÕ*ÜœŸ	™	 !›¨A°BÕ7äœŸ	™	 !›¨A°BÕ7ÜœŸ	™	 !›¨A°BÕ7ÜœŸ	™	 !›¨A°BÕ7ÜœŸ	™	 !›¨A°BÖ7r$   )r   r   r   éd   c                 ó†  — t         j                  j                  d«      }t        j                  dt         j                  z  t        j
                  dd| «      z  «      |j                  | «      z   }t        |dd¬«      \  }}t        |d¬«      }t        ||d¬	«       t        |dd¬«      }t        |j                  |d¬	«       y
)zTest equivalent resultsé*   r   r   r   rM   ©r   r>   ©r   r*   r+   N)r   ÚrandomÚdefault_rngrQ   rR   rS   Ústandard_normalr	   r#   r   r   r!   )r   Úrngr\   Úx1r;   Úx2ro   s          r"   Ú$test_whittaker_direct_vs_fast_order2r~   ß   s˜   € ô �)‰)×
Ñ
 Ó
#€CÜ�V‰V�AœŸ™‘I¤§¡¨A¨q°!Ó 4Ñ4Ó5¸×8KÑ8KÈAÓ8NÑN€FÜ˜V¨$°aÔ8�E€BˆÜ	˜v¨DÔ	1€BÜ�B˜ Õ'ä	˜V¨$°aÔ	8€BÜ�B—D‘D˜" 5Ö)r$   )r   r   r   r   c                 ó^  — t         j                  j                  d«      }d}t        j                  dt         j                  z  t        j
                  dd|«      z  «      }|j                  |«      }||z   }t        |d| ¬«      }t        |j                  |dd	¬
«       |j                  dk(  sJ ‚y)z.Test whittaker for penalty lamb close to zero.ru   rs   r   r   r   çH¯¼šò×z>rv   g-Cëâ6?çñhãˆµøä>©r,   rg   N)r   rx   ry   rQ   rR   rS   rz   r   r   r!   r   )r>   r{   r   r   Únoiser\   ro   s          r"   Ú!test_whittaker_limit_zero_penaltyr„   ì   s�   € ô �)‰)×
Ñ
 Ó
#€CØ€AÜ
�‰ˆq”—‘‰wœŸ™ Q¨¨1Ó-Ñ-Ó.€AØ×Ñ Ó"€EØ�‰Y€Fô 
˜V¨$°eÔ	<€BÜ�B—D‘D˜& t°$Õ7Ø�7‰7�dŠ?Ð‰?r$   rN   rT   c                 óô  — d}t        j                  dt         j                  z  t        j                  dd|«      z  «      }| €dnt        j                  |«      }t        |d||¬«      }t        j                  t        |«      «      }t         j                  j                  j                  |||dz
  ¬«      }t        |j                   ||«      d	d
|z   z  d¬«       |dk(  r't        j                  |j                  «      d   dk  sJ ‚|dkD  r4t        j                  t         d¬«      5  t        |d||¬«      }ddd«       nt        |d||¬«      }t        |j                   ||«      d¬«       y# 1 sw Y   Œ(xY w)z2Test whittaker for penalty lamb close to infinity.rs   r   r   r   Ng   èvH7Brc   ©r!   r   Údegr&   iúÿÿÿr�   r‚   z;The linear solver in Whittaker-Henderson smoothing detectedra   g  4&õkCrK   g»½×Ùß|Û=r+   )r   rQ   rR   rS   Ú	ones_liker   r/   ÚlenÚ
polynomialÚ
PolynomialÚfitr   r!   rD   rU   ÚwarnsÚUserWarning)rN   r>   r   r   Úwro   Úx_polyrW   s           r"   Ú%test_whittaker_limit_infinity_penaltyr‘   û   sF  € ð 	€AÜ
�‰ˆq”—‘‰wœŸ™ Q¨¨1Ó-Ñ-Ó.€AØ�‰¤R§\¡\°!£_€Aô 
˜Q T°ÀÔ	B€BÜ�Y‰Y”s˜1“vÓ€FÜ�=‰=×#Ñ#×'Ñ'¨&°A¸5À1¹9Ð'ÓE€DÜ�B—D‘D™$˜v›,¨R°"°u±*Ñ-=ÀDÕIØ�‚zô �w‰w�r—t‘t‹}˜QÑ !Ò#Ð#Ð#àˆq‚yô �\‰\ÜØOô
ñ 	Kô % Q¨T¸ÈÔJˆB÷		Kð 	Kô ! ¨°UÀAÔFˆÜ�B—D‘D™$˜v›,¨UÖ3÷	Kð 	Kús   Ä'E.Å.E7c                  ó  — d} t        j                  dt         j                  z  t        j                  dd| «      z  «      }t	        |d¬«      }t        |j                  |d¬«       t        j                  |j                  |«      rJ ‚y)	zTest whittaker for lamb=0.r&   r   r   r   rw   r*   r+   N)r   rQ   rR   rS   r   r   r!   Úmay_share_memory)r   r   ro   s      r"   Útest_whittaker_unpenalizedr”     sh   € à
€AÜ
�‰ˆq”—‘‰wœŸ™ Q¨¨1Ó-Ñ-Ó.€AÜ	˜Q QÔ	'€BÜ�B—D‘D˜! %Õ(Ü×"Ñ" 2§4¡4¨Ô+Ð+Ð+Ð+r$   c                  óø  — t         j                  j                  d«      } d}t        j                  dt         j                  z  t        j
                  dd|«      z  «      }| j                  |«      }||z   }t        |d¬«      }t        j                  |«      }t        |d|¬«      }t        |j                  |j                  d¬	«       t        |d
d
|z  ¬«      }t        |j                  |j                  d¬	«       y)zATest that whittaker with weights of 1 is same as without weights.ru   rs   r   r   r   rw   )r   rN   r*   r+   r   N)r   rx   ry   rQ   rR   rS   rz   r   rˆ   r   r!   )	r{   r   r   rƒ   r\   Úwh1r�   Úwh2Úwh3s	            r"   Útest_whittaker_weightsr™   %  sÀ   € ä
�)‰)×
Ñ
 Ó
#€CØ€AÜ
�‰ˆq”—‘‰wœŸ™ Q¨¨1Ó-Ñ-Ó.€AØ×Ñ Ó"€EØ�‰Y€FÜ
˜f¨1Ô
-€CÜ
�‰�VÓ€AÜ
˜f¨1°aÔ
8€CÜ�C—E‘E˜3Ÿ5™5 uÕ-ô ˜f¨1°a¸±cÔ
:€CÜ�C—E‘E˜3Ÿ5™5 uÖ-r$   Úmissing_valueg#B’¡œÇ;c           	      ó  — d}t        j                  dt         j                  z  t        j                  dd|«      z  «      }|ddxxx dz  ccc t        j                  |«      }| |dd d|dd t        |dd|¬	«      }t        j                  t        j                  dd«      d
dg|j                  d
   |j                  d   g«      }t        |j                  dd |d¬«       t        |dd|¬	«      }t         j                  j                  j                  g d¢|j                  d   |j                  d
   |j                  d   |j                  d   gd¬«      }t        |j                  dd  |t        j                  dd«      «      d¬«       y)z8Test that whittaker interpolates where weights are zero.rs   r   r   r   é2   Né(   é<   rc   é'   r*   r+   )é&   rŸ   rž   é=   r    r¡   r   r†   )r   rQ   rR   rS   rˆ   r   Úinterpr/   r!   r   rŠ   r‹   rŒ   )rš   r   r\   r�   ro   r¢   rW   s          r"   Ú(test_whittaker_zero_weight_interpolationr£   6  sL  € ð 	€AÜ�V‰V�A”b—e‘e‘GœbŸk™k¨!¨Q°Ó2Ñ2Ó3€FØ
ˆ2ˆ3ƒK�1ÑƒKÜ
�‰�VÓ€AØ!€Fˆ2ˆb€MØ€A€bˆ€Hô 
˜V¨!°1¸aÔ	@€BÜ�Y‰Y”r—y‘y  RÓ(¨2¨r¨(°R·T±T¸"±X¸r¿t¹tÀB¹xÐ4HÓI€FÜ�B—D‘D˜˜B�K ¨eÕ4ô 
˜V¨!°1¸aÔ	@€BÜ�=‰=×#Ñ#×'Ñ'Ú
˜rŸt™t B™x¨¯©¨b©°2·4±4¸±8¸R¿T¹TÀ"¹XÐFÈAð (ó €Dô �B—D‘D˜˜B�K¡¤b§i¡i°°BÓ&7Ó!8¸uÖEr$   c            	      ód  — d} t        j                  dt         j                  z  t        j                  dd| «      z  «      }|ddxxx dz  ccc t        j                  |«      }t         j
                  |dd d|dd t        |dd|¬«      }t        |j                  dd |j                  d	   d
¬«       t        |dd|¬«      }t         j                  j                  j                  dd	g|j                  dd d¬«      }t        |j                  dd  |t        j                  dd«      «      d
¬«       t        |dd|¬«      }t         j                  j                  j                  g d¢|j                  dd d¬«      }t        |j                  dd  |t        j                  dd«      «      d¬«       y)z8Test that whittaker extrapolates where weights are zero.rs   r   r   r   rœ   NéP   rc   éO   r*   r+   éN   r†   r   )éM   r§   r¦   r¨   g•Ö&è.>)r   rQ   rR   rS   rˆ   Únanr   r   r!   rŠ   r‹   rŒ   r/   )r   r\   r�   ro   rW   s        r"   Ú(test_whittaker_zero_weight_extrapolationrª   N  sa  € à€AÜ�V‰V�A”b—e‘e‘GœbŸk™k¨!¨Q°Ó2Ñ2Ó3€FØ
ˆ2ˆ3ƒK�1ÑƒKÜ
�‰�VÓ€AÜ—&‘&€Fˆ2ˆ3€KØ€A€b€c€Fô 
˜V¨!°1¸aÔ	@€BÜ�B—D‘D˜˜�I˜rŸt™t B™x¨eÕ4ô 
˜V¨!°1¸aÔ	@€BÜ�=‰=×#Ñ#×'Ñ'¨2¨r¨(°b·d±d¸2¸b°kÀqÐ'ÓI€DÜ�B—D‘D˜˜�I™t¤B§I¡I¨b°#Ó$6Ó7¸eÕDô 
˜V¨!°1¸aÔ	@€BÜ�=‰=×#Ñ#×'Ñ'ª,¸"¿$¹$¸rÀ"¸+È1Ð'ÓM€DÜ�B—D‘D˜˜�I™t¤B§I¡I¨b°#Ó$6Ó7¸dÖCr$   c                 ó`  ‡ ‡‡‡— d}dŠt        j                  dt         j                  z  t        j                  dd‰«      z  «      }t        j                  t        j
                  ‰«      ‰ d¬«      Š‰j                  ‰z  Šˆˆˆˆ fd„}t        ||‰ ¬«      } |||¬	«      }t        ||d
¬«       y )Ng�—nƒÀó?r&   r   r   r   rB   c                 óà  •— t        j                  ‰«      | ‰z  z   }t         j                  j                  ||«      }||z
  }||z  | |z  ‰z  |z  z   }d‰‰	z
  dt        j                  |‰‰	z
  z  «      z   z  t        j                  t         j                  j                  | ‰z  ‰j                  z  «      «      z
  t        j                  t         j                  j                  |«      «      z   z  S )Ng      à¿r   )r   rE   r3   r4   r5   r6   r0   )
rn   r   r8   r!   ÚresidÚr2rI   ÚMr   r>   s
         €€€€r"   Ú	test_remlz&test_reml_criterion.<locals>.test_remlo  sÇ   ø€ ä�F‰F�1‹I˜˜Q™ÑˆÜ�I‰I�O‰O˜A˜qÓ!ˆØ�A‘ˆØ�U‰]˜R !™V a™Z¨!™^Ñ+ˆØ˜˜%™ A¬¯©¨r°Q¸±YÑ/?Ó(@Ñ$@ÑAÜŸ™¤§	¡	§¡¨b°1©f°q·s±s©lÓ ;Ó<ñ=äŸ™¤§	¡	§¡¨aÓ 0Ó1ñ2ñ 3ð 	3r$   )r   r   r>   )rn   r   r*   r+   )	r   rQ   rR   rS   rD   rE   r0   r   r   )	r>   rn   r   r°   Úr1r®   rI   r¯   r   s	   `     @@@r"   Útest_reml_criterionr²   g  s‰   û€ à	€BØ
€AÜ
�‰ˆq”—‘‰wœŸ™ Q¨¨1Ó-Ñ-Ó.€AÜ
�‰”—‘�q“	˜U¨Ô+€AØ	�‰ˆa‰€A÷3ô 
�B˜! 5Ô	)€BÙ	�b˜AÔ	€BÜ�B˜ Ö'r$   c           	      óœ  — d}d}t        j                  dt         j                  z  t        j                  dd|«      z  «      }|j	                  «       }|ddd…xx   dz  cc<   |ddd…xx   dz  cc<   | €dnt        j
                  |«      }t        |d||¬«      }|j                  dkD  sJ ‚g d	¢}t        |j                  |d
¬«       d}|dz  }|j                  t        j                  |d
¬«      k(  sJ ‚t        |d|dt        j
                  |«      z  ¬«      }	|	j                  t        j                  d|j                  z  d
¬«      k(  sJ ‚y)z.Test that whittaker with REML criterion works.r&   r   r   r   Ngš™™™™™É?Úremlrc   )
gDùŽòßÊ?gM~¾{@áâ?get'óî?gös-–×‡è?g7í‹š˜]Ö?g7í‹š˜]Ö¿gös-–×‡è¿get'óî¿gM~¾{@áâ¿gDùŽòßÊ¿r€   r+   gÂ@´$„@é   rO   )r   rQ   rR   rS   Úcopyrˆ   r   r   r   r!   rU   rV   )
rN   r   r>   r\   r   r�   ro   ÚexpectedÚexpected_spr—   s
             r"   Útest_whittaker_remlr¹   ~  s"  € ð 	€AØ€EÜ�V‰V�A”b—e‘e‘GœbŸk™k¨!¨Q°Ó2Ñ2Ó3€FØ�‰‹€Aà�cˆ€cƒFˆc�MƒFØ€a€dˆ€dƒGˆs�NƒGØ�‰¤R§\¡\°!£_€Aä	˜Q V°5À!Ô	D€BØ�7‰7�QŠ;Ðˆ;ò"€Hô
 �B—D‘D˜(¨Õ.à€KØ�2Ñ€KØ�7‰7”f—m‘m K°TÔ:Ò:Ð:Ð:ô ˜a f°EÀ1ÄrÇ|Á|ÐTUÃÑCVÔ
W€CØ�8‰8”v—}‘} Q¨¯©¡[°dÔ;Ò;Ð;Ñ;r$   )&Únumpyr   rU   Únumpy.testingr   Úscipy.signalr   Úscipy.signal._whittakerr   r   r   r   r	   Úscipy.statsr
   r#   r=   ÚmarkÚparametrizerJ   rZ   Ú
ValueErrorr1   r/   Ú	TypeErrorr©   re   rr   r~   r„   r‘   r”   r™   Úinfr£   rª   r²   r¹   © r$   r"   ú<module>rÅ      s  ðÛ Û Ý )Ý ,÷õ õ ,òHòVFð, ‡�×ÑØ	�#ˆò	
óñQóðQð ‡�×Ñ˜¨°¨Ó6Ø‡�×Ñ˜ # t Ó-ñ!ó .ó 7ð!ð  ‡�×ÑÚ<â˜!‰mˆ_˜a  D¨*Ø;ð=àˆR�X‰X�a‹[˜!˜Q  jØ;ð=àˆR�Y‰Y�r‹]˜D ! T¨:Ø,ð.â˜˜q $¨
Ø3ð5â˜˜3  iØ(ð*â˜˜1˜d JØ7ð9â˜˜1˜q !˜f jØPðRâ˜˜1 ˜s˜e ZØPðRà��B—F‘Fˆ^˜Q  4¨Ø1ð3â˜˜1˜q ! R§V¡V˜n¨jØ2ð4à��B—F‘Fˆ^˜Q ¢9¨jØBðDð+	
óñ4Mó5ð4Mò-8ð` ‡�×Ñ˜šnÓ-ñ	*ó .ð	*ð ‡�×Ñ˜¢,Ó/ñó 0ðð ‡�×Ñ˜ T¨6 NÓ3Ø‡�×Ñ˜¢,Ó/ñ4ó 0ó 4ð4ò>,ò.ð" ‡�×Ñ˜¨2¯6©6°2·6±6¸5Ð*AÓBñFó CðFò.Dð2 ‡�×Ñ˜¢)Ó,ñ(ó -ð(ð, ‡�×Ñ˜ T¨6 NÓ3ñ*<ó 4ñ*<r$   