Ë
    ÏÍ:j¨  ã                   óô  — d Z ddlZddlZddlmZmZmZ ddlm	Z	 ej                  j                  Zd„ Zdd„Z ee	j                  «      ej                  j                  dg d¢«      ej                  j                  d	g d
¢«      d„ «       «       «       Z ee	j                  «       edd¬«      ej                  j                  dg d¢«      ej                  j                  dg d¢«      d„ «       «       «       «       Zy)zTests for spline filtering.é    N)Úassert_almost_equalÚxp_assert_closeÚmake_xp_test_case)Úndimagec                 ó2   — dgdgddgddgg d¢g d¢dœ}||    S )z0Knot values to the right of a B-spline's center.é   é   é   )éæ   éL   r   )éB   é   r   ©r   r   é   é   r
   é   © )ÚorderÚknot_valuess     úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/scipy/ndimage/tests/test_splines.pyÚget_spline_knot_valuesr      s4   € à�cØ�cØ˜!�fØ˜!�fÚ"Ú!ñ#€Kð �uÑÐó    c                 ó\  — t        |«      }t        j                  ||f«      }t        |«      D ]<  \  }}t        j                  ||«      }|dk(  r||||f<   Œ)|||||z
  f<   ||||z
  |f<   Œ> |d   dt        |dd «      z  z   }	|dk(  rd\  }
}n$|dk(  rd\  }
}n|d	k(  rd
\  }
}nt        d|› �«      ‚t        t        |«      dz
  «      D ]M  }t        ||dz   d «      D ]7  \  }}|||
||z  z   fxx   |z  cc<   || dz
  |
 dz
  ||z  z
  fxx   |z  cc<   Œ9 ŒO | j                  ||	z  «      S )z1Matrix to invert to find the spline coefficients.r   r   r   NÚmirror)r   r   Úreflect)r   r   ú	grid-wrap)éÿÿÿÿr   zunsupported mode )
r   ÚnpÚzerosÚ	enumerateÚarangeÚsumÚ
ValueErrorÚrangeÚlenÚasarray)ÚxpÚnr   Úmoder   ÚmatrixÚdiagÚ
knot_valueÚindicesÚknot_values_sumÚstartÚstepÚrowÚidxs                 r   Úmake_spline_knot_matrixr3      sŽ  € ä(¨Ó/€Kô �X‰X�q˜!�fÓ€FÜ% kÓ2ò 9ÑˆˆjÜ—)‘)˜D !Ó$ˆØ�1Š9Ø'1ˆF�7˜GÐ#Ò$à.8ˆF�7˜G d™NÐ*Ñ+Ø.8ˆF�7˜T‘> 7Ð*Ò+ð9ð " !‘n q¬3¨{¸1¸2¨Ó+?Ñ'?Ñ?€OàˆxÒØ‰ˆ‰tØ	�Ò	Ø‰ˆ‰tØ	�Ò	Ø‰ˆ‰täÐ,¨T¨FÐ3Ó4Ð4ä”S˜Ó%¨Ñ)Ó*ò BˆÜ(¨°S¸1±W°XÐ)>Ó?ò 	B‰OˆC�Ø�3˜  S¡Ñ(Ð(Ó)¨ZÑ7Ó)Ø�C�4˜!‘8˜e˜V a™Z¨$¨s©(Ñ2Ð2Ó3°zÑAÔ3ñ	BðBð
 �:‰:�f˜Ñ.Ó/Ð/r   r   r   r)   )r   r   r   c                 ó  — d}|j                  ||j                  ¬«      }t        j                  |d| |¬«      }t        j                  |d| |¬«      }t	        ||| |¬«      }t        |||z  «       t        |||j                  z  «       y )Néd   ©Údtyper   ©Úaxisr   r)   r   ©r)   )ÚeyeÚfloat64r   Úspline_filter1dr3   r   ÚT)r   r)   r'   r(   r;   Úspline_filter_axis_0Úspline_filter_axis_1r*   s           r   Ú%test_spline_filter_vs_matrix_solutionrA   ;   s‡   € ð 	€AØ
�&‰&�˜"Ÿ*™*ˆ&Ó
%€CÜ"×2Ñ2°3¸QÀeØ8<ô>Ðä"×2Ñ2°3¸QÀeØ8<ô>Ðä$ R¨¨E¸Ô=€FÜ˜Ð1°FÑ:Ô;Ü˜Ð1°F·H±HÑ<Õ=r   Úcupyz.CuPy spline_filter1d has the same aliasing bug)Úreason)r   r   r
   r   r(   c                 ó°   — |j                  ||j                  ¬«      }t        j                  |d| d¬«      }t	        ||| d¬«      }t        ||z  |d¬«       y )Nr6   r   r   r8   r:   gê-�™—q=)Úatol)r;   r<   r   r=   r3   r   )r   r(   r'   r;   Úfilteredr*   s         r   Ú"test_spline_filter_reflect_small_nrG   J   sQ   € ð �&‰&�˜"Ÿ*™*ˆ&Ó
%€CÜ×&Ñ& s°¸%ÀiÔP€HÜ$ R¨¨E¸	ÔB€FÜ�H˜vÑ% s°Ö7r   )r   )Ú__doc__ÚpytestÚnumpyr   Úscipy._lib._array_apir   r   r   Úscipyr   ÚmarkÚxfail_xp_backendsr   r3   r=   ÚparametrizerA   rG   r   r   r   ú<module>rP      sî   ðÙ !Û ã ÷ñ õ à—K‘K×1Ñ1Ð ò	ó0ñD �7×*Ñ*Ó+Ø‡�×Ñ˜Ò"4Ó5Ø‡�×Ñ˜Ò!CÓDñ	>ó Eó 6ó ,ð	>ñ �7×*Ñ*Ó+Ù�6Ð"RÔSØ‡�×Ñ˜¢,Ó/Ø‡�×Ñ˜šlÓ+ñ8ó ,ó 0ó Tó ,ñ8r   