o
    `^hq9                     @   sZ   d dl Zd dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ dd ZG dd dZdS )	    N)xp_assert_close)symiirorder1_icsymiirorder2_ic_fwdsymiirorder2_ic_bwd)symiirorder1symiirorder2c                 C   s   || }t | } t || d }|d|  d|  dd| t d|   ||   }d| d|  t | }|| t ||  |t ||     S )N       @      ?      )npabspowercostansin)kcsrsqomegacssqrsupkc0gamma r   ]/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/signal/tests/test_splines.py_compute_symiirorder2_bwd_hs   s   
 (r   c                   @   sT  e Zd Zejdejejej	ej
gejdg ddd Zdd Zejdejejej	ej
gejdg ddd	 Zejdd
dgdd Zejdd
dgejdg ddd Zejdejejgejdg ddd Zejdejejgejdg ddd Zejdd
dgdd Zdd Zdd ZdS )
TestSymIIRdtype	precision)g      gffffff?      ?g      ?gQ~?c           	      C   s   |}|dks
|dkr|t jt jhv rd}nd}d}tt t |t | }t jd||  d|  gg|d}d||  }t j|d |d}tt	||||dd	d
 t j||d}t jdd| |  dd|   gg|d}d||  }dt j
|d |d  }tt	||||dd	d
 d S )N        r	   ư>dy=333333?r
   r   >gH׊>atolrtolr    r   )r   float32	complex64intceillogasarrayonesr   r   arange)	selfr   r   c_precisionbn_expexpectedxb_dr   r   r   test_symiir1_ic   s,   " 
zTestSymIIR.test_symiir1_icc                 C   sZ   d}t jdt jd}dd|  }ttt||| ttt|dd ttt|dd d S )Nr$   d   r%   r
   r	   r   )r   r0   float64pytestraises
ValueErrorr   )r2   r4   r7   r   r   r   r   test_symiir1_ic_failsF   s   z TestSymIIR.test_symiir1_ic_failsc                 C   s  |}|dks
|dkr|t jt jhv rd}nd}d}d}d}t j||d}tt t |t | }t jd	||  d	|  |d}	d	||	  }	t j||d}
|	||
  }t j	||d}| d	|  ||
d d
   |d	d < t j	||d}d	d	|  |d	d < || | }| |d  |d
  }t j	||d}||d< t
d	|D ]}|||d	 |   |||d	    ||< q|d d d
 }t||||}t||ddd d S )Nr!   r	   r"   r#   g333333?r$      r%   r
   r;   r   >v!>r'   )r   r*   r+   r0   r,   r-   r.   r/   r1   zerosranger   r   )r2   r   r   r3   r   z1nsignalr5   initialposcomp1comp2comp3expected_fwdsym_condexp_outioutr   r   r   test_symiir1T   s6   &*zTestSymIIR.test_symiir1r*   r<   c                 C   s   t jd}tt |}|jdd|}t|dd}t jg d|jd}|j|ks+J t j	dt j
d	i| }t|||d
 |d|  }t|dd}|t j
krU|jt jksZJ t jsZJ t||d|  |d
 d S )N     sizer    皙?)gzj?g|ꚁ?g7F?g$d"?gv)u?gx?gF4˯0?g/yR?gdOm6wP?g^ۂ?gnI:5?g(?giԴIM?g|
?gIq?g?r%   gV瞯<gHz>r(                 ?)r   randomRandomStategetattruniformastyper   arrayr   r<   r*   r   r+   
complex128)r2   r   rngsresexp_resr(   r   r   r   test_symiir1_values   s   

$zTestSymIIR.test_symiir1_valuesc                 C   sN  t t|}|}|dks|dkr|tjtjhv rd}nd}tjd|d}tjtjd |d}dd	| t|  |d	  }tt|t	| t| }ttj| d	 }t
||}	|d	| t|  |d	  ||	d	  t	||	d
   t	|  ||	d
  t	||	d	   t	|  }
tt|t	| t| }ttj| d
 }t
||}	||d	 | t|  |d	 t	d
|  |d
 t	d	|   ||	d
  t	||	d    ||	d  t	||	d
    t	|  }tj|
|f d d d f }||}d}tj||d}t||||}t||ddd d S )Nr!   r	   r"   r#   r    r%         @r
   r         r:   rB   rC   r'   )r]   r   r*   r+   r/   pir   r-   r.   r   minr_r_   r0   r   r   )r2   r   r   r3   rr   r   ublbr5   fwd_initial_1fwd_initial_2r6   rG   rH   rR   r   r   r   test_symiir2_initial_fwd   sV   
$

&&$

z#TestSymIIR.test_symiir2_initial_fwdc                 C   s"  |}|dks
|dkr|t jt jhv rd}nd}t jd|d}t jt jd |d}dd	| t |  ||  }d	| t | }| | }d
}	t j|	|d}
t|
|||}t j|	d	 |d}|d |d d	< t	d	|	d	 D ]}||
|d	   |||d    |||d	    ||< qmt jd	|d}t 
|	}t|||| |t|d ||| | }t ||d dd  }t |d	 |k d }||d  |d< t|d ||| |t|d	 ||| | }t ||d dd  }t |d	 |k d }||d  |d< t||||d }t||ddd d S )Nr!   r	   r"   r#   r    r%   rg   r
   r   r:   r   r;   rB   rC   r'   )r   r*   r+   r/   rj   r   r0   r   rD   rE   r1   r   cumsumwherer   r   )r2   r   r   r3   rm   r   r   a2a3rG   rH   icrR   rQ   ic2idxdiff	ic2_0_allrJ   	ic2_1_allout_icr   r   r   test_symiir2_initial_bwd   sB   
6
z#TestSymIIR.test_symiir2_initial_bwdc                 C   s  t jd|d}t jt jd |d}dd| t |  ||  }d| t | }| | }d}t j||d}	t|	|||}
t j|d |d}|
d |d d< td|d D ]}||	|d   |||d    |||d    ||< qVt||||d }t j	||d}|d d d |d	d < t|d
 ddD ]}|||  |||d    |||d    ||< qt
|	|||}t||ddd d S )Nr    r%   rg   r
   r   r:   r   r;   rh   rB   rC   r'   )r   r/   rj   r   r0   r   rD   rE   r   emptyr   r   )r2   r   r   rm   r   r   ru   rv   rG   rH   rw   out1rQ   rx   exprR   r   r   r   test_symiir2!  s&   
62zTestSymIIR.test_symiir2dtypc                 C   s   t t|}tjd}|jdd|}t|dddd}tjg d|d}|j|ks,J t	||d	d
 |d|  }t
t t|dd}W d    d S 1 sPw   Y  d S )NrT   rU   rV   rX   g|=)r   )g윏 ?g_VQQ/?g|n4T?gAٌ?gJ8]<?gZ(Z?gTV?gRs?g?gd'Q?g*&?g$SЊ?g%֘?g4O?gM4?g!?r%   r&   rY   rZ   r    )r]   r   r[   r\   r^   r_   r   r`   r   r   r=   r>   	TypeError)r2   r   rb   rc   rd   re   r   r   r   test_symiir2_valuesD  s   

	"zTestSymIIR.test_symiir2_valuesc                 C   sD   t t dd dd}t|tdd}t|dd}t|| d S )Nr:   r   r;   r
   r    )r   rt   r1   r   r_   floatr   r2   rc   r6   rR   r   r   r   test_symiir1_integer_input`  s   z%TestSymIIR.test_symiir1_integer_inputc                 C   sP   t t dd dd}t|tdt jd }t|dt jd }t|| d S )Nr:   r   r;   r
   r    rg   )r   rt   r1   r   r_   r   rj   r   r   r   r   r   test_symiir2_integer_inputf  s   z%TestSymIIR.test_symiir2_integer_inputN)__name__
__module____qualname__r=   markparametrizer   r*   r<   r+   ra   r9   r@   rS   rf   rr   r~   r   r   r   r   r   r   r   r   r      sB    ,B
@- 
r   )numpyr   r=   scipy._lib._array_apir   scipy.signal._spliner   r   r   scipy.signalr   r   r   r   r   r   r   r   <module>   s   