
    e!h                        d dl Z d dlZd dlm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mZmZmZmZ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 d dZ G d d	      Z  G d
 d      Z! G d d      Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z) G d d      Z* G d d      Z+y)!    N)suppress_warnings)raises)assert_almost_equalxp_assert_equalxp_assert_close)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalizeplace_polesTransferFunction
StateSpaceZerosPolesGain)BadCoefficientsc           
         |j                         }| D ]  }d}t        |j                  d         D ]  }t        j                  t        j
                  |      t        j                  |      gt        j
                  ||         t        j                  ||         g||      srd}t        j                  ||        n |rt        dt        |      z   dz   t        |      z          y)a  
    Check each pole in P1 is close to a pole in P2 with a 1e-8
    relative tolerance or 1e-8 absolute tolerance (useful for zero poles).
    These tolerances are very strict but the systems tested are known to
    accept these poles so we should not be far from what is requested.
    Fr   TzCan't find pole z in N)
copyrangeshapenpallcloserealimagdelete
ValueErrorstr)P1P2rtolatolp1foundp2_idxs          f/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer*      s     
B 
NBHHQK( 	F{{BGGBK5GGBvJ/F1DE' 		"f%	 /#b'9FBSWLMM
N    c                   \    e Zd Zd Zd Zd Zd Zej                  j                  d        Z
y)TestPlacePolesc                 ,   t        |||fi |}t        j                  j                  |t        j                  ||j
                        z
        \  }}t        ||j                         t        ||j                         t        ||j                         |S )z
        Perform the most common tests on the poles computed by place_poles
        and return the Bunch object for further specific tests
        )	r   r   linalgeigdotgain_matrixr*   requested_polescomputed_poles)selfABPkwargsfsfexpected_s           r)   _checkzTestPlacePoles._check*   sv    
 !Q,V,iimmAq#//(B$BC!Hc&9&9:Hc&8&89Ac112
r+   c                    t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        j                  g d      }| j                  |||d       | j                  |||d       t        j                  d	
      5  | j                  ||d       d d d        y # 1 sw Y   y xY w)NgGz?gʿg\(@gNbX9g<,Ԛg)\(r   g?gOn?d;O@gV-gOn@g~jt?r@   grh|?gE    )r   K@V-?rC   r   r   ^I+	r      皙ɿ      g}гY9gDT!KNV0methodYTignore)invalid)rE   rE      rO   )r   arrayreshaper=   errstate)r5   r6   r7   r8   s       r)   	test_realzTestPlacePoles.test_real6   s     HH % &&-gam 	
 HH=>FFq!LHH34 	Aq!F+Aq!D) [[* 	)KK1i(	) 	) 	)s   &CCc                    t        j                  g dg dg dg dg      }t        j                  ddgddgddgddgg      }t        j                  g d      }t        j                  dd      5  | j                  |||       d d d        g d	}t        j                  dd      5  | j                  |||d
       d d d        t        j                  g d      j	                  dd      }t        j                  g d      j	                  dd      }g d}| j                  |||       t        j
                  d      t        j                  d      z
  }t        j
                  d      t        j                  dgdz  d      d d dd f   z
  }||d dd df<   ||d dd df<   g d}t        j                  dd      5  | j                  |||       d d d        g d}| j                  |d dd df   |d dd df   |       g d}| j                  |d dd df   |d dd df   |       t        j                  g d      j	                  dd      }t        j                  g d      j	                  dd      }t        j                  g d      }t        j                  dd      5  t        |||       d d d        t        j                  g d      }t        j                  dd      5  | j                  |||       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   y xY w)N)r      r   r   )r   r   r   竪@)r   r   r   r   r      )                          ?rM   )dividerN   )y        ưy        ư>
   i  maxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirE   iSiiigiiipii   )iiiii0i_iLi`iiiii]ii#iii"iHiii<i^iUiiiciiiR   )y      9      =y      9      =@y      ?@      Ey      ?@      E@y     @@     Dy     @@     D@)   rc   rc   )rc   r^   r^   )r]   (   2   <   F   y      4      y      4      @y      @      @y      @      )
r]   rd   re   iiiirY   )
y      $      $@y      4      4@y      >      >@y      D      D@y      I      I@y      $      $y      4      4y      >      >y      D      Dy      I      I)r   rU   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   rb   r   r   r   r   	   )
r   r   r   r   rW   r   r   rW   rE   rO   rE   )y            ?y                        ?            )rn   rX   ro   rp   )	r   rP   rR   r=   rQ   oneseyediagr   )r5   r6   r7   r8   big_Abig_Bs         r)   test_complexzTestPlacePoles.test_complexL   s    HHl%""$ % HHq!f!f!f!f 
 HH+, [[(; 	!KK1a 	! %[[(; 	/KK1aK.	/ HHG
 WQq\ 	
 HH(
 wq| 	
 KAq!
  + !R!21QR4!88bqb!ebqb!e=[[(; 	)KKua(	) 7E#2#crc'NE#2#crc'NA66E#2#crc'NE#2#crc'NA6 HH ) **1'!A, 	
HH*+33Aa8HH56[[(; 	!1a 	!
 HH/0[[(; 	!KK1a 	! 	!{	! 	!	/ 	/>	) 	) 	! 	!	! 	!s<   1L(L L%*L2.L>LL"%L/2L;>Mc                    t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        j                  g d      }| j                  |||      }t        j                  |j
                        sJ t        j                  |j                        sJ t        j                  d      }| j                  |||      }t        j                  |j
                        sJ t        j                  |j                        sJ |d d df   j                  dd      }t        j                  d      }| j                  |||      }|j
                  dk(  sJ |j                  dk(  sJ y )Nr?   rA   )r   rB   rC   rC   r   r   rD   r   rW   rE   rO   rA   rb   ra   rU      rF   )r[   rZ   rX   rn   r   rW   )r   rP   rQ   r=   isnanr$   nb_iter)r5   r6   r7   r8   r:   s        r)   test_tricky_BzTestPlacePoles.test_tricky_B   sG    HH % &&-gam 	
 HH " ##*71a= 	

 HH34kk!Q" xx!!!xx$$$ HH()kk!Q"xx!!!xx$$$ acFNN1QHH()kk!Q" xx1}}{{ar+   c           
         t        j                  g d      j                  dd      }t        j                  g d      j                  dd      }t        t        t
        ||dd       t        t        t
        ||t        j                  d      j                  dd             t        t        t
        |d d d d t         j                  f   |d       t        t        t
        ||d d d d t         j                  f   d       t        t        t
        ||d	       t        t        t
        ||d
       t        t        t
        ||dd       t        t        t
        ||dd       t        t        t
        ||d       t        t        t
        t        j                  d      t        j                  d      d       t        j                  d      5 }t        j                  d       t        ||ddd      }t        |      dk(  sJ t        |d   j                  t              sJ dt        |d   j                         v sJ |j"                  dk(  sJ 	 d d d        t        t        t
        ||d       t        t        t
        |d d d df   |d       t        t        t
        ||d dd d f   d       t        t        t
        ||dd       y # 1 sw Y   zxY w) N)r   rU   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   rA   )r   r   r   r   rW   r   r   rW   rE   ) 皙ffffff333333foorJ   rW   )r~   r   r   r   rX   )r~   r   r   *   r$   ir_   )rn   rn   rn   rn   )rA   rA   )rA   rE   rW   rE   rO   rA   T)recordalways)rY   rn   rX   rq   gؗҜ<)r$   r`   rY   z4Convergence was not reached after maxiter iterations)r[   rZ                @rn   rO   )rn   rX   rq   )r[   rZ   r   y             rI   )r   rP   rQ   assert_raisesr    r   newaxisrr   warningscatch_warningssimplefilterlen
issubclasscategoryUserWarningr!   messager{   )r5   r6   r7   wr:   s        r)   test_errorszTestPlacePoles.test_errors   s`    HH9:BB1QGHH&'//!4 	j+q!5J"	$ 	j+q!hh45==aB	D 	j+q1RZZ/@!+	- 	j+q!Aa

N2C+	- 	j+q!5MN 	j+q!5EF 	j+q!5J	 	j+q!5J!	# 	j+q!]C 	j+rwwu~ggeni	1
 $$D1 	%Q!!(+aMrJCq6Q;;aennk:::J1R5==)* + *;;"$$$	% 	j+q!5KL 	j+q2A2w=I 	j+q!BQBqD'=I 	j+q!/	@'	% 	%s   
BKKN)__name__
__module____qualname__r=   rS   rw   r|   pytestmarkthread_unsafer    r+   r)   r-   r-   (   s;    
),N!`  D [[@@ @@r+   r-   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)		TestSS2TFc           	          t        t        j                  ||f      t        j                  ||f      t        j                  ||f      t        j                  ||f      d       y )Nr   )r   r   zerosr5   pqrs       r)   check_matrix_shapeszTestSS2TF.check_matrix_shapes  sK    bhh1vhh1vhh1vhh1v	#r+   c                 @    dD ]  \  }}}| j                  |||        y )N))rO   rO   rO   )rW   rO   rO   rW   rW   rW   )r   r   s       r)   test_shapeszTestSS2TF.test_shapes
  s+     9 	.GAq!$$Q1-	.r+   c                 p   t        j                  g d      }t        j                  g d      }t        ||      \  }}}}t        |ddgddggd       t        |d	gdggd       t        |d	d
ggd       t        |d	ggd       t	        ||||      \  }}t        |d   |d       t        ||d       y )N)      ?      @      @)r          @r          rX   rW   r   vIh%<=r   r   rE   +=)r   rP   r	   r   r   )	r5   bar6   r7   CDbbaas	            r)   
test_basiczTestSS2TF.test_basic  s    HH_%HH_%1a[
1aS"I1v.U;RD1#;U3RG951RD6.q!Q"B1qu-AE*r+   c                 "   d}t        | \  }}}}t        |dggd       t        |dggd       t        |dggd       t        |dggd       t        ||||      \  }}t        |ddggd       t        |ddgd       dgd	ggd
f}t        | \  }}}}t        |dggd       t        |dggd       t        |dgdggd       t        |dgd	ggd       t        ||||      \  }}t        |ddgd	dggd       t        |ddgd       y )N)rE   rW           r   r   r   r   r   rb   rE   rW   r   )r	   r   r   r5   tfr6   r7   r   r   numdens           r)   test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trip  s5   BZ
1aRD6.RD6.RD6.RD6.Aq!$Sr1gYU3b!W51sQCj!_BZ
1aRD6.RD6.RD1#;U3RD1#;U3Aq!$Sr1g1v.U;b!W51r+   c                 R   ddgddggddgf}t        | \  }}}}t        |dggd       t        |dggd       t        |dgdggd       t        |dgdggd       t        ||||      \  }}t        |dd	gddggd       t        |dd	gd       g d
g dgg df}t        | \  }}}}t        |ddgddggd       t        |dgdggd       t        |ddgddggd       t        |dgdggd       t        ||||      \  }}t        |g dg dgd       t        |g dd       g dg dgg df}t        | \  }}}}t        |g dg dg dgd       t        |dgdgdggd       t        |g dg dgd       t        |dgdggd       t        ||||      \  }}t        |g dg dgd       t        |g dd       t        j                  dddggt
              ddgf}t        | \  }}}}t        |dggd       t        |dggd       t        |dgdggd       t        |dgdggd       t        ||||      \  }}t        |ddgddggd       t        |ddgd       t        j                  ddgg dgt
              g df}t        | \  }}}}t        |dd gddggd       t        |dgdggd       t        |ddgd!d"ggd       t        |dgdggd       t        ||||      \  }}t        |g d#g dgd       t        |g d$d       y )%NrW   rE   r   r   r   r   r         r   )rW   r   rW   r   )r   r   r   )r   r   r   )rW   rE   rO   r   )r   rX   rq   )rW   r   r   r   rW   r   r   )r   rE   rO   )r   rW   rE   rO   )r   rW   rE   rO   )r   rE   rO   rA   rO   )dtypera   g      ghe99irX   )rW   ra   rb   r   rq   rn   )r   rW   rX   )r   ra   rb   )r	   r   r   r   rP   objectr   s           r)   test_simo_round_tripzTestSS2TF.test_simo_round_trip7  sq   1v1vA'BZ
1aSE7/RD6.RD3%=u5RD2$<e4Aq!$Sr2hR1>b"XE2)$i0BZ
1aS#JR1>RD2$<e4S"IBx0u=RD2$<e4Aq!$SlL9F\6)$l3BZ
1aM9i@uMRD1#s+%8J	2?RD1#;U3Aq!$Sm\:G]7hhAq6{&1Aq6:BZ
1aSE7/RD6.RD2$<e4RD1#;U3Aq!$Sr1g1v.U;b!W51hhB+6:IFBZ
1aS"I1v.U;RD1#;U3RHr2h/e<RD1#;U3Aq!$Sk95EBZe4r+   c                     g dg dg dg}dgdgdgg}g dg}dgg}t        ||||      \  }}t        |g dgdd	
       t        |g dd       y )Nr   )r   r   rW   )rX   rq   rn   r   rW   )rb   rW   r   )r   r   r   r   r   r   r$   r%   )r   r         @r   r   )r   r   )r5   r6   r7   r   r   r   r   s          r)   test_all_int_arrayszTestSS2TF.test_all_int_arraysp  sb    	<0S1#sOKSEAq!$S23%eL1>r+   c                 <   t        j                  g dg dg dg dg      }t        j                  dgdgdgdgg      }t        j                  g dg d	g d
g      }t        j                  dgdgdgg      }t        ||||      \  }}t        |||d   |d         \  }}t        |||d   |d         \  }	}
t        |||d   |d         \  }}t        ||d       t        |
|d       t        ||d       t        |t        j                  ||	|f      dd       y )N)r   r   r   r   )r   r   r   r   )g      r   r   r   )g              @r   r   333333?r   g      @)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   rW   rE   r   r   r   r   )r   rP   r   r   vstack)r5   r6   r7   r   r   b_allr   b0a0b1a1b2a2s                r)   test_multioutputzTestSS2TF.test_multioutputy  s;    HH++++- . HHseeee  HH***, - HHseee 
 Aq!$q q!QqT1Q4(Bq!QqT1Q4(Bq!QqT1Q4(B 	AE*AE*AE*ryy"b"6UOr+   N)
r   r   r   r   r   r   r   r   r   r   r   r+   r)   r   r     s'    #.+2075r?$Pr+   r   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestLsimrU   c                     t               5 }|j                  t               t        | }d d d        |S # 1 sw Y   S xY wN)r   filterr   r
   )r5   argssupsystems       r)   
lti_nowarnzTestLsim.lti_nowarn  s=      	 CJJ'$ZF	  	  s   3=c                    | j                  dddd      }t        j                  dd      }t        j                  |      }t	        |||dg      \  }}}t        j
                  |       }t        ||       t        ||       y Nr   r   r   r   rb   X0r   r   linspace
zeros_liker   expr   r5   r   tutoutyx
expected_xs           r)   test_first_orderzTestLsim.test_first_order  sq     R2.KK!MM!&!QC51
aVVTE]
Az*Az*r+   c                    t        j                  ddd      }t        j                  |      }| j                  dgg d      }t	        |||ddg      \  }}}d|z
  t        j
                  |       z  }t        |d d df   |       y )Nr   r^   i  r   r   r   r   r   r   )r   r   r   r   r   r   r   )r5   r   r   r   r   r   r   r   s           r)   test_second_orderzTestLsim.test_second_order  sz    KK2t$MM! #8&!QC:6
aDjBFFD5M1
AadGZ0r+   c                     | j                  dddd      }t        j                  dd      }|}t        |||      \  }}}d|dz  z  }t	        ||| j
                         t	        ||| j
                         y )Nr   r   r   rb         ?rE   decimal)r   r   r   r   r   digits_accuracyr   s           r)   test_integratorzTestLsim.test_integrator  sp    RR0KK!&!Q'
a47]
Az43G3GHAz43G3GHr+   c                 t   t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  ddg      }t        j                  d      }| j                  ||||      }t        j                  ddd      }t        j                  t        |      d	f      }t        |||ddg
      \  }}	}
t        j                  |       }t        j                  |       }t        j                  d|z        }t        |	|       t        |
d d df   |       t        |
d d df   |       y )Nr   r   r   r   rW   rE   r   g      $@   rE   )UTr   rW   	r   rP   r   r   r   r   r   r   r   r5   r6   r7   r   r   r   r   r   r   r   r   
expected_yexpected_x0expected_x1s                 r)   test_two_stateszTestLsim.test_two_states  s   HHtSkC;/0HHsCj3*-.HHc3Z HHVAq!,KK4$HHc!fa[!&ASz:
aVVTE]
ffdUmffTD[)Az*AadG[1AadG[1r+   c                    t        j                  ddgddgg      }t        j                  dgdgg      }t        j                  ddgg      }| j                  |||d      }t        j                  dd      }t        j                  |      }t        |||      \  }}}	t        j                  t        j                  d|dz  z  |g            }
|dz  }t        |	|
| j                         t        ||| j                         y )	Nr   r   r   r   rb   r   rE   r   )	r   rP   r   r   	ones_liker   	transposer   r   )r5   r6   r7   r   r   r   r   r   r   r   r   r   s               r)   test_double_integratorzTestLsim.test_double_integrator  s    HHr2hR)*HHrdRD\"HHr2hZ Aq"-KK!LLO&!Q'
a\\"((C$'M4+@"AB
1W
Az43G3GHAz43G3GHr+   c                    t        j                  ddgddgg      }t        j                  dgdgg      }t        j                  ddgg      }| j                  |||d      }t        j                  dd      }t        j                  |      }t        |||ddg      \  }}}	|t        j                  |       z  }
t        ||
       y r   )r   rP   r   r   r   r   r   r   )r5   r6   r7   r   r   r   r   r   r   r   r   s              r)   test_jordan_blockzTestLsim.test_jordan_block  s     HHsBi"c+,HHrdRD\"HHr2hZ Aq"-KK!MM!&!QC:6
aBFFD5M)
Az*r+   c                 t   t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  ddg      }t        j                  d      }| j                  ||||      }t        j                  ddd      }t        j                  t        |      d	f      }t        |||ddg
      \  }}	}
t        j                  |       }t        j                  |       }t        j                  d|z        }t        |	|       t        |
d d df   |       t        |
d d df   |       y )Nr   r   r   r   r   r   r   e   rE   r   rW   r   r   s                 r)   	test_misozTestLsim.test_miso  s   HHtSkC;/0HHsCj3*-.HHc3Z HHUOAq!,KK3$HHc!fa[!&!QC:6
aVVTE]
ffdUmffT$Y'Az*AacFK0AacFK0r+   c                     | j                  dddd      }t        j                  dd      }t        j                  |      }t	        |||dg      \  }}}t        j
                  |       }t        ||       y )Nr   r   r   rW   rE   r   r   )r5   r   r   r   r   r   r   r   s           r)   test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time  se    R2.KK!MM!&!QC51
aVVTE]
Az*r+   c                     t        j                  g d      }t        j                  g d      }dgddgf}t        t        d      5  t	        |||dg      \  }}}d d d        y # 1 sw Y   y xY w)N)r   r   r   r   )r   r   r   r   r   r   z"Time steps are not equally spaced.)matchr   )r   rP   r   r    r   )r5   r   r   r   r   r   r   s          r)   test_nonequal_timestepsz TestLsim.test_nonequal_timesteps  sk    HH)*HH)*%#s$:!EG 	6fau5JD!Q	6 	6 	6s   A%%A.N)r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r   r+   r)   r   r     s;    O	+	1I2&I+ 1$+6r+   r   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestImpulsec                 r    dgddgf}t        |      \  }}t        j                  |       }t        ||       y Nr   r   r   r   r   r5   r   r   r   r   s        r)   r   zTestImpulse.test_first_order  s:     %#c#&/aVVTE]
Az*r+   c                     dgddgf}d}t        j                  dd|      }t        ||      \  }}|j                  |fk(  sJ t	        ||       t        j
                  |       }t	        ||       y )Nr   r   r   r   r   )r   r   r   r   r   r   r5   r   nr   r   r   r   s          r)   test_first_order_fixed_timez'TestImpulse.test_first_order_fixed_time'  sr    
 %#c#KK3"&A&azzaT!!!D!$VVQBZ
Az*r+   c                 |    dgddgf}t        |d      \  }}dt        j                  |       z  }t        ||       y Nr   r   r   r   r  r  s        r)   test_first_order_initialz$TestImpulse.test_first_order_initial5  sB    
 %#c#&S)a2664%=(
Az*r+   c                 ~    dgddgf}t        |dg      \  }}dt        j                  |       z  }t        ||       y r  r  r  s        r)   test_first_order_initial_listz)TestImpulse.test_first_order_initial_list?  sD    
 %#c#&cU+a2664%=(
Az*r+   c                 p    dgddgf}t        |      \  }}t        j                  |      }t        ||       y Nr   r   )r   r   r  r   r  s        r)   r   zTestImpulse.test_integratorI  s7    %#c#&/a\\$'
Az*r+   c                 x    dgg df}t        |      \  }}|t        j                  |       z  }t        ||       y )Nr   r   r  r  s        r)   r   zTestImpulse.test_second_orderP  s;     %)&/aBFFD5M)
Az*r+   c                 `    dgg df}t        |dgddg      \  }}t        |dgdg      \  }}y )Nr   r   rO   rb   ra   r   r   r   r5   r   r   r   s       r)   test_array_likezTestImpulse.test_array_likeY  s<    %)&aSQF3a&aSQC0ar+   c                 4    dgg df}t        |dd      \  }}y )Nr   r   rO   rb   r$  r%  r&  s       r)   test_array_like2zTestImpulse.test_array_like2`  s     %)&Q!,ar+   N)r   r   r   r   r  r  r  r   r   r'  r)  r   r+   r)   r  r    s*    ++++++1-r+   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestStepc                 x    dgddgf}t        |      \  }}dt        j                  |       z
  }t        ||       y r  r   r   r   r   r  s        r)   r   zTestStep.test_first_orderf  s?     %#c#v,a2664%=(
Az*r+   c                     dgddgf}d}t        j                  dd|      }t        ||      \  }}|j                  |fk(  sJ t	        ||       dt        j
                  |       z
  }t	        ||       y )Nr   r   r   r   r  rW   )r   r   r   r   r   r   r  s          r)   r  z$TestStep.test_first_order_fixed_timen  sv    
 %#c#KK3"v#azzaT!!!D!$^
Az*r+   c                     dgddgf}t        |d      \  }}ddt        j                  |       z  z   }t        ||       y Nr   r   r   rW   r   r-  r  s        r)   r  z!TestStep.test_first_order_initial|  sG    
 %#c#v#&aRVVTE]**
Az*r+   c                     dgddgf}t        |dg      \  }}ddt        j                  |       z  z   }t        ||       y r0  r-  r  s        r)   r  z&TestStep.test_first_order_initial_list  sI    
 %#c#v3%(aRVVTE]**
Az*r+   c                 J    dgddgf}t        |      \  }}|}t        ||       y r!  )r   r   r  s        r)   r   zTestStep.test_integrator  s0     %S	"v,a
Az*r+   c                     dgg df}t        |      \  }}dd|z   t        j                  |       z  z
  }t        ||       y )Nr   r   rW   r-  r  s        r)   r   zTestStep.test_second_order  sD     %)v,a!d(bffdUm33
Az*r+   c                 6    dgg df}t        |ddg      \  }}y )Nr   r   rb   ra   r  r   r&  s       r)   r'  zTestStep.test_array_like  s"    %)v!Q(ar+   c                 "    t        g dgdf       y )NrY   y      ?        r5  r5   s    r)   test_complex_inputzTestStep.test_complex_input  s     	b2$r+   N)r   r   r   r   r  r  r  r   r   r'  r8  r   r+   r)   r+  r+  e  s*    ++++++)r+   r+  c                       e Zd Zd Zy)TestLtic                 \   t        dgdg      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J t        t        j                  g       t        j                  dg      d      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J t        g dgd      }t        dgdgdd      }t        |t              sJ t        |t               sJ t        |t              rJ |j                  J y )NrW   rY   rO   )	r
   
isinstancer   r   dtr   rP   r   r   r5   ss     r)   test_lti_instantiationzTestLti.test_lti_instantiation  s   
 bTN!-...!S!!!a&&&tt|| bhhtna0!^,,,!S!!!a&&&tt|| RD!bT1a !Z(((!S!!!a&&&tt||r+   N)r   r   r   r@  r   r+   r)   r:  r:    s    r+   r:  c                   $    e Zd Zd Zd Zd Zd Zy)TestStateSpacec                    t        dddd       t        dgdgdgdg       t        t        j                  ddgddgg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg             y )NrW   rE   rO   rA   r   )r   r   rP   r7  s    r)   test_initializationz"TestStateSpace.test_initialization  sy    1aAA3aS1#&288aVaV,-rxx!qc
/C88aVH%rxx!	8r+   c                 &   t        dddd      }t        |j                         t               sJ t        |j                         t              sJ t        |j                         t              sJ t        |      |usJ |j                         |usJ y )NrW   rE   rO   rA   )r   r<  to_ssto_tfr   to_zpkr   r>  s     r)   test_conversionzTestStateSpace.test_conversion  s}    q!Q"!'')Z000!'')%5666!((*n555 !}A%%%wwy!!!r+   c                     t        dddd      }t        |j                  dg       t        |j                  dg       |j                  J y )NrW   r   r   )r   r   polesr   r=  r>  s     r)   test_propertieszTestStateSpace.test_properties  sB    
 q!Q""&"&tt||r+   c                     G d d      }t        t        j                  ddgddgg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg            }t        t        j                  d	d
gdd
gg      t        j                  dgdgg      t        j                  ddgg      t        j                  dgg            }|j                  d      }|j                  d      }|j                  d      }t        j                  ddd      }t        j
                  |      }d|d<   t        t        t        t        j                  t        j                  t        j                  fD ]  }	t        t         |	d      |z  ||      d    |	d      t        |||      d   z         t        t        | |	d      z  ||      d   t        |||      d    |	d      z         t        t        | |	d      z  ||      d   t        |||      d    |	d      z         t        t              5   |	d      |z   d d d         t        t        |dz  ||      d   t        |d|z  |      d          t        t        ||z  ||      d   t        |t        |||      d   |      d   d       t        t              5  ||z   d d d        t        t              5  ||z   d d d        t        t              5  ||z   d d d        t        t              5  | |       z   d d d        t        t              5   |       |z   d d d        t        t              5  | |       z   d d d        t        t              5   |       |z   d d d        t        t        |dz   ||      d   d|z  t        |||      d   z          t        t              5  |t        j                  ddg      z    d d d        t        t              5  t        j                  ddg      |z    d d d        t        t              5  ||z    d d d        t        t              5  |t        j                  ddgddgg      z   d d d        t        t              5  ||z    d d d        t        t              5  | |       z    d d d        t        t              5   |       |z    d d d        t        t        ||z   ||      d   t        |||      d   t        |||      d   z          t        t        |dz
  ||      d   d|z  t        |||      d   z          t        t        d|z
  ||      d   d|z  t        | ||      d   z          t        t        ||z
  ||      d   t        |||      d   t        |||      d   z
         t        t              5  | |       z
   d d d        t        t              5   |       |z
   d d d        ||z   }
|
j                   dk(  sJ ||z  }
|
j                   dk(  sJ d|z  }
|
j                   dk(  sJ | }
|
j                   dk(  sJ 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   oxY w# 1 sw Y   ZxY w# 1 sw Y   ExY w# 1 sw Y   0x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   zxY w# 1 sw Y   jxY w# 1 sw Y   UxY w# 1 sw Y   @xY w# 1 sw Y   FxY w# 1 sw Y   1xY w)Nc                       e Zd Zy).TestStateSpace.test_operators.<locals>.BadTypeN)r   r   r   r   r+   r)   BadTyperO    s    r+   rP  rH   gffffff?r   grW   r   rG   gg?皙?g?d   rE   )r   r   gh㈵>)r%   rO   rA   rn   )r   r   rP   to_discreter   r   intfloatcomplexfloat32
complex128r   r   r   	TypeErrorr    r=  )r5   rP  s1s2
s_discretes2_discretes3_discreter   r   typr?  s              r)   test_operatorszTestStateSpace.test_operators  s   	 	 4+T{!;<1#s,1a&*1# 4,d!<=1#s,1a&*1# ^^C(
nnS)nnS) KK1c"MM!! R]]BHHM 	CDQ"Q7:FT"Q%7%::< Dc!fQ7: qA.q1CF:< Dc!fQ7: qA.q1CF:< y) A 	 	R!VqA.q1R1q5A.q1	3 	R"WQ/2R4a1#5a#8A>qA!	# 9% 	G	 9% 	O	 9% 	%$	% 9% 	N	 9% 	IN	 9% 	N	 9% 	IN	 	R!VqA.q1AR1 21 55	7 :& 	"1a&!!	" :& 	"HHaVr!	" 9% 	O	 :& 	,Aq6Aq6*++	, 9% 	%$	% 9% 	N	 9% 	IN	 	R"WQ/2R1*1-R10B10EE	G 	R!VqA.q1QbA!3A!66	8 	QVqA.q1AbSA 3A 66	8 	R"WQ/2R1*1-R10B10EE	G 9% 	N	 9% 	IN	 $tts{{$tts{{
Ntts{{Ktts{{q 	 		 		% 	%	 		 		 		 		" 	"	" 	"	 		, 	,	% 	%	 		 	 	 		 	s   Y3Z 5ZZ/Z'Z43[[*[[([5+\!\>\ \)'\6	]3Y=	 Z
ZZ$'Z14Z>[[[%([25[?\\\&)\36] ]N)r   r   r   rD  rI  rL  r`  r   r+   r)   rB  rB    s    8	"~r+   rB  c                       e Zd Zd Zd Zd Zy)TestTransferFunctionc                     t        dd       t        dgdg       t        t        j                  dg      t        j                  dg             y NrW   rE   )r   r   rP   r7  s    r)   rD  z(TestTransferFunction.test_initializationh  s8    A!qc"1#!6r+   c                 *   t        ddgddg      }t        |j                         t              sJ t        |j	                         t               sJ t        |j                         t              sJ t        |      |usJ |j	                         |usJ y )NrW   r   rY   )r   r<  rF  r   rG  rH  r   r>  s     r)   rI  z$TestTransferFunction.test_conversionn  s    aVaW-!'')Z000!'')%5666!((*n555  "!+++wwy!!!r+   c                     t        ddgddg      }t        |j                  dg       t        |j                  dg       y )NrW   r   rY   r   r   )r   r   rK  r   r>  s     r)   rL  z$TestTransferFunction.test_propertiesy  s8    
 aVaW-"&"&r+   N)r   r   r   rD  rI  rL  r   r+   r)   rb  rb  g  s    7	"'r+   rb  c                       e Zd Zd Zd Zy)TestZerosPolesGainc                     t        ddd       t        dgdgd       t        t        j                  dg      t        j                  dg      d       y rd  )r   r   rP   r7  s    r)   rD  z&TestZerosPolesGain.test_initialization  s>    q!QsQC#rxx}bhhsmQ7r+   c                 $   t        ddd      }t        |j                         t              sJ t        |j	                         t
              sJ t        |j                         t               sJ t        |      |usJ |j                         |usJ y )NrW   rE   rO   )r   r<  rF  r   rG  r   rH  r>  s     r)   rI  z"TestZerosPolesGain.test_conversion  s|    1a#!'')Z000!'')%5666!((*n555 a )))xxz"""r+   N)r   r   r   rD  rI  r   r+   r)   rh  rh    s    8	#r+   rh  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)Test_abcd_normalizec                     t        j                  ddgddgg      | _        t        j                  dgdgg      | _        t        j                  ddgg      | _        t        j                  dgg      | _        y )Nr   r   r   r   r   r         @)r   rP   r6   r7   r   r   r7  s    r)   setup_methodz Test_abcd_normalize.setup_method  sa    C:Sz23D6C5/*C:,'C5'"r+   c                 ,    t        t        t               y r   )r   r    r   r7  s    r)   test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_fails  s    j.1r+   c                 t    t        t        t        ddg| j                  | j                  | j
                         y )NrW   rY   )r   r    r   r7   r   r   r7  s    r)   test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_fails  s'    j.1b'ffdffdff	.r+   c                 t    t        t        t        | j                  ddg| j                  | j
                         y NrY   rb   r   r    r   r6   r   r   r7  s    r)   test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails  '    j.$&&2q'ffdff	&r+   c                 x    t        t        t        | j                  | j                  dgdgg| j
                         y )Nr   r   )r   r    r   r6   r7   r   r7  s    r)   test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_fails  s+    j.$&&$&&usendff	.r+   c           	      t    t        t        t        | j                  | j                  | j
                  ddg       y )Nrn  r   )r   r    r   r6   r7   r   r7  s    r)   test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_fails  s'    j.$&&$&&ffsAh	(r+   c                 t    t        t        t        | j                  ddg| j                  | j
                         y ru  rv  r7  s    r)   test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_fails  rx  r+   c                 *   t        | j                  | j                  | j                  | j                        \  }}}}t        || j                         t        || j                         t        || j                         t        || j                         y r   )r   r6   r7   r   r   r   r5   r6   r7   r   r   s        r)   "test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchanged  sb    #DFFDFFDFFDFFC
1a466"466"466"466"r+   c                    t        | j                  | j                  ddgd      \  }}}}t        |j                  d   |j                  d          t        |j                  d   |j                  d          t        |j                  d   |j                  d          t        |j                  d   |j                  d          t        |j                  d   |j                  d          y )NrW   r   )r   r6   r7   r   r   r  s        r)   r   zTest_abcd_normalize.test_shapes  s    #DFFDFFQFA>
1a
AGGAJ/
AGGAJ/
AGGAJ/
AGGAJ/
AGGAJ/r+   c                    t        j                  d      }t        j                  d      }t        | j                  ||      \  }}}}t	        || j                         t	        ||       t	        ||       |j
                  d   |j
                  d   k(  sJ |j
                  d   | j                  j
                  d   k(  sJ y )NrE   r   )r   r   r6   r7   r   r   rW   r   r   r   r6   r   r   )r5   B_D_r6   r7   r   r   s          r)    test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1  s    XXfXXf#dffb9
1a466"22wwqzRXXa[(((wwqzTVV\\!_,,,r+   c                 r   t        j                  d      }t        j                  d      }t        | j                  ||      \  }}}}t	        || j                         t	        ||       t	        ||       |j
                  d   |j
                  d   k(  sJ |j
                  d   |j
                  d   k(  sJ y )Nr  )r   rE   r6   r7   r   r   rW   r  )r5   r  C_r6   r7   r   r   s          r)    test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2  s    XXfXXf#dffb9
1a466"22wwqzRXXa[(((wwqzRXXa[(((r+   c                 l   t        | j                  | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r7   r   r   r   rW   )r   r7   r   r   r   r  s        r)   test_missing_Az"Test_abcd_normalize.test_missing_A      #dff$&&A
1awwqzQWWQZ'''wwqzQWWQZ'''ww466<<?DFFLLO<<<<r+   c                 l   t        | j                  | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r6   r   r   r   rW   )r   r6   r   r   r   r  s        r)   test_missing_Bz"Test_abcd_normalize.test_missing_B  r  r+   c                 l   t        | j                  | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )Nr  r   rW   )r   r6   r7   r   r   r  s        r)   test_missing_Cz"Test_abcd_normalize.test_missing_C  r  r+   c                 l   t        | j                  | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )Nr  r   rW   )r   r6   r7   r   r   r  s        r)   test_missing_Dz"Test_abcd_normalize.test_missing_D  r  r+   c                    t        | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r   r   r   rW   )r   r   r   r   r  s        r)   test_missing_ABz#Test_abcd_normalize.test_missing_AB  s    #dff7
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww466<<?DFFLLO<<<<ww466<<?DFFLLO<<<<r+   c                 \   t        | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r7   r   r   rW   )r   r7   r   r   r  s        r)   test_missing_ACz#Test_abcd_normalize.test_missing_AC      #dff7
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''ww466<<?DFFLLO<<<<ww466<<?DFFLLO<<<<r+   c                 \   t        | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r7   r   r   rW   )r   r7   r   r   r  s        r)   test_missing_ADz#Test_abcd_normalize.test_missing_AD   r  r+   c                 `   t        | j                  | j                        \  }}}}|j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   |j                  d   k(  sJ |j                  d   sJ |j                  d          |j                  | j                  j                  d   | j                  j                  d   fk(  sJ |j                  | j                  j                  d   | j                  j                  d   fk(  sJ y )N)r6   r   r   rW   )r   r6   r   r   r  s        r)   test_missing_BCz#Test_abcd_normalize.test_missing_BC	  s    #dff7
1awwqzQWWQZ'''wwqzQWWQZ'''wwqzQWWQZ'''wwqz%1771:%zww466<<?DFFLLO<<<<ww466<<?DFFLLO<<<<r+   c                 D    t        t        t        | j                         y )N)r   )r   r    r   r   r7  s    r)   test_missing_ABC_failsz*Test_abcd_normalize.test_missing_ABC_fails  s    j.DFF;r+   c                 Z    t        t        t        | j                  | j                         y )N)r6   r   )r   r    r   r6   r   r7  s    r)   test_missing_BD_failsz)Test_abcd_normalize.test_missing_BD_fails      j.DFFdffEr+   c                 Z    t        t        t        | j                  | j                         y )N)r6   r7   )r   r    r   r6   r7   r7  s    r)   test_missing_CD_failsz)Test_abcd_normalize.test_missing_CD_fails  r  r+   N)r   r   r   ro  rq  rs  rw  rz  r|  r~  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r+   r)   rl  rl    sr    #2.&.(&#0-)========<FFr+   rl  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)	Test_bodec                 p    t        dgddg      }g d}t        ||      \  }}}g d}t        ||d       y )NrW   rQ  rW   r^   rR  r   )r   rX   rd   rj   r   r
   r   r   )r5   r   r   magphaseexpected_mags         r)   test_01zTest_bode.test_01  s>     aS1a&!Vq)3(Cq9r+   c                 p    t        dgddg      }g d}t        ||      \  }}}g d}t        ||d       y )NrW   rQ  rW   r^   r  )gig33333Ur   r  )r5   r   r   r  r  expected_phases         r)   test_02zTest_bode.test_02,  s>     aS1a&!Vq)3+E>1=r+   c                 2   t        dgddg      }g d}t        ||      \  }}}|dz  }t        j                  |j                  |      t        j                  |j
                  |      z  }dt        j                  t        |            z  }t        ||       y )NrW   r  r                ?g      4@)	r
   r   r   polyvalr   r   log10absr   )r5   r   r   r  r  jwr   r  s           r)   test_03zTest_bode.test_038  s     aS1a&!Vq)3VJJvzz2&FJJ)CCbhhs1v..C.r+   c                 l   t        dgddg      }g d}t        ||      \  }}}|dz  }t        j                  |j                  |      t        j                  |j
                  |      z  }t        j                  |j                  |j                        dz  t        j                  z  }t        ||       y )NrW   r  r  r  g     f@)r
   r   r   r  r   r   arctan2r   r   pir   )r5   r   r   r  r  r  r   r  s           r)   test_04zTest_bode.test_04C  s     aS1a&!Vq)3VJJvzz2&FJJ)CCAFFAFF3e;beeCE>2r+   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}}t	        ||       y NrW   r^   rn   r  )r
   r   logspacer   r   )r5   r   r  
expected_wr   r  r  s          r)   test_05zTest_bode.test_05N  sI     aS1a&![[Q*
Vq)3Az*r+   c                 X    t        dgddg      }t        |d      \  }}}|d   dk(  sJ y NrW   r   rE   r  g{Gz?r
   r   r5   r   r   r  r  s        r)   test_06zTest_bode.test_06X  s8     aS1a&!Vq)3tt||r+   c                 D    t        dgg d      }t        |d      \  }}}y )NrW   )rW   r   rR  rE   r  r  r  s        r)   test_07zTest_bode.test_07_  s$     aS+&Vq)3r+   c                     t        g g dd      }|j                  t        j                  ddd            \  }}}t	        t        |      dd	       y )
N)r]   re   rj   rk   rl   rW   rX   rf   rR  r  i>   r   )r
   r   r   r  r   minr  s        r)   test_08zTest_bode.test_08e  sD    R2A6bkk"b#&>?3CJb9r+   c           	      *   t        j                  g d      }t        j                  |      j                  }t        j                  dgdgdgg      }t        j                  g dg      }t        j                  dgg      }t               5 }|j                  t               t        ||||      }t        |d      \  }}	}
d d d        dt        j                  t        j                  dddz  z   z              z  }t        	|       y # 1 sw Y   JxY w)	Nr   r   r   r   r   r   r   r   r   rR  r     ra   )r   rP   r/   	companionr   r   r   r   r
   r   r  sqrtr   )r5   r   r6   r7   r   r   r   r   r   r  r  expected_magnitudes               r)   test_from_state_spacezTest_bode.test_from_state_spacek  s     HH)*Q!!HHsecUSE*+HHo&'HHseW  	0CJJ'Aq!_F 3/MAsE	0
  "((2773#1*3E+F"GGC!34	0 	0s   5D		DN)r   r   r   r  r  r  r  r  r  r  r  r  r   r+   r)   r  r    s/    :
>	/	3+*:5r+   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Test_freqrespc                     t        dgddg      }g d}t        ||      \  }}g d}g d}t        |j                  |d       t        |j                  |d       y )NrW   r  r  )gGz?r   gׁsF?)MbXrH   r  r   r
   r   r   r   r   )r5   r   r   Hexpected_reexpected_ims         r)   test_output_manualz Test_freqresp.test_output_manual  sU     aS1a&!!$1),AFFK;AFFK;r+   c                 V   t        dgddg      }g d}t        ||      \  }}|dz  }t        j                  |j                  |      t        j                  |j
                  |      z  }t        |j                  |j                         t        |j                  |j                         y )NrW   r  r  r  )	r
   r   r   r  r   r   r   r   r   r5   r   r   r  r?  r;   s         r)   test_outputzTest_freqresp.test_output  s     aS1a&!!$1F::fjj!,rzz&**a/HHAFFHMM2AFFHMM2r+   c                     t        dgddg      }d}t        j                  dd|      }t        ||      \  }}t	        ||       y r  )r
   r   r  r   r   )r5   r   r  r  r   r  s         r)   test_freq_rangezTest_freqresp.test_freq_range  sG     aS1a&![[Q*
!$1Az*r+   c                 V    t        dgddg      }t        |d      \  }}|d   dk(  sJ y r  )r
   r   )r5   r   r   r  s       r)   test_pole_zerozTest_freqresp.test_pole_zero  s6     aS1a&!!$1tt||r+   c                 f   t        j                  g d      }t        j                  |      j                  }t        j                  dgdgdgg      }t        j                  g dg      }t        j                  dgg      }t               5 }|j                  t               t        ||||      }t        |d      \  }}	d d d        dz  }
ddd|
z  z   d|
dz  z  z   |
d	z  z   z  }t        	j                  |j                         t        |	j                  |j                         y # 1 sw Y   ixY w)
Nr  r   r   r  rR  r  r  rE   rO   )r   rP   r/   r  r   r   r   r   r
   r   r   r   r   )r5   r   r6   r7   r   r   r   r   r   r  r?  r;   s               r)   r  z#Test_freqresp.test_from_state_space  s    HH)*Q!!HHseSE3%()HHo&'HHseW  	+CJJ'Aq!_FFc*DAq	+ F319qAv-145AFFHMM2AFFHMM2	+ 	+s   4D''D0c                     t        g dgdz  dg      }g d}t        ||      \  }}|dz  }d|dz   dz  z  }t        |j                  |j                         t        |j                  |j                         y )NrY   rA   rW   r  r  r  r  r  s         r)   test_from_zpkzTest_freqresp.test_from_zpk  sk    RQs#!$1FAz>AFFHMM2AFFHMM2r+   N)	r   r   r   r  r  r  r  r  r  r   r+   r)   r  r    s     <	3+3*3r+   r  ):0yE>r  ),r   numpyr   numpy.testingr   r   r   r   scipy._lib._array_apir   r   r   scipy.signalr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   scipy.signal._filter_designr   scipy.linalgr/   r*   r-   r   r   r  r+  r:  rB  rb  rh  rl  r  r  r   r+   r)   <module>r     s      +  * H H H H 8 N*W@ W@t[P [P|{6 {6|D- D-NF FR 8[ [z' '8# #&CF CFLa5 a5HI3 I3r+   