L iddlZddlZddlmZddlZddlmZddlm Z m Z m Z ddl m Z mZmZmZmZmZmZmZmZmZmZmZmZmZddlmZddlmZd dZGdd Z Gd d Z!Gd d Z"GddZ#GddZ$GddZ%GddZ&GddZ'GddZ(GddZ)GddZ*GddZ+y)!N)suppress_warnings)raises)assert_almost_equalxp_assert_equalxp_assert_close)ss2tftf2ssltidltibodefreqresplsimimpulsestepabcd_normalize place_polesTransferFunction StateSpaceZerosPolesGain)BadCoefficientsc |j}|D]}d}t|jdD]}tjtj |tj |gtj ||tj ||g||srd}tj||n|rtdt|zdzt|zy)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. FrTzCan't find pole z in N) copyrangeshapenpallcloserealimagdelete ValueErrorstr)P1P2rtolatolp1foundp2_idxs d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/signal/tests/test_ltisys.py_assert_poles_closer*s B NBHHQK( F{{BGGBK5GGBvJ/F1DE' "f%  /#b'9FBSWLM M Nc\eZdZdZdZdZdZejjdZ y)TestPlacePolesc ,t|||fi|}tjj|tj||j z \}}t ||jt ||jt ||j|S)z Perform the most common tests on the poles computed by place_poles and return the Bunch object for further specific tests ) rrlinalgeigdot gain_matrixr*requested_polescomputed_poles)selfABPkwargsfsfexpected_s r)_checkzTestPlacePoles._check*sv !Q,V,iimmAq#//(B$BC !Hc&9&9:Hc&8&89Ac112 r+ctjgdjdd}tjgdjdd}tjgd}|j|||d|j|||dtjd 5|j||d dddy#1swYyxYw) NgGz?gʿg\(@gNbX9g<,Ԛg)\(rg?gOn?d;O@gV-gOn@g~jt?r@grh|?gE)rK@V-?rCrr^I + r皙ɿg}гY9gDT!KNV0methodYTignore)invalid)rErErO)rarrayreshaper=errstate)r5r6r7r8s r) test_realzTestPlacePoles.test_real6s HH% &&-gam  HH= > F Fq! L HH3 4 Aq!F + Aq!D )[[ * ) KK1i ( ) ) )s &CC ctjgdgdgdgdg}tjddgddgddgddgg}tjgd}tjdd5|j|||dddgd }tjdd5|j|||d dddtjgd j d d }tjgdj d d}gd}|j|||tj dtj dz }tj dtjdgdzdddddfz }||dd dd f<||dd ddf<gd}tjdd5|j|||dddgd}|j|ddddf|ddddf|gd}|j|ddddf|ddddf|tjgdj dd}tjgdj dd}tjgd}tjdd5t|||dddtjgd}tjdd5|j|||dddy#1swYxYw#1swY\xYw#1swYSxYw#1swY{xYw#1swYyxYw)N)rrr)rrr竪@)rrrrr)?rM)dividerN)yưyư> imaxiter)$iii%iiFii[iiiYiiii\ii^iciii(i~iiiiirEiSiiigiiipii)iiiii0i_iLi`iiiii]ii#iii"iHiii>@yDD@yII@y$$y44y>>yDDyII)rrUrrrrrrVrrrrrrrrrrrrbrrrr ) rrrrrWrrrWrErOrE)y?y?)rnrXrorp) rrPrRr=rQoneseyediagr)r5r6r7r8big_Abig_Bs r) test_complexzTestPlacePoles.test_complexLs HHl%""$ % HHq!f!f!f!f  HH+ ,[[( ; ! KK1a  ! % [[( ; / KK1aK . / HHG  WQq\  HH(  wq| K Aq!  + !R!21QR4!88bqb!e bqb!e = [[( ; ) KKua ( ) 7 E#2#crc'NE#2#crc'NA6 6 E#2#crc'NE#2#crc'NA6 HH) **1'!A, HH* + 3 3Aa 8 HH5 6 [[( ; ! 1a  ! HH/ 0 [[( ; ! KK1a  ! !{ ! ! / /> ) )  ! !  ! !s<1L (LL%*L2.L> LL"%L/2L;>Mctjgdjdd}tjgdjdd}tjgd}|j|||}tj|j sJtj|j sJtjd}|j|||}tj|j sJtj|j sJ|dddfjdd}tjd}|j|||}|j dk(sJ|j dk(sJy)Nr?rA)rrBrCrCrrrDrrWrErOrArbrarUrF)r[rZrXrnrrW)rrPrQr=isnanr$nb_iter)r5r6r7r8r:s r) test_tricky_BzTestPlacePoles.test_tricky_BsG HH% &&-gam  HH" ##*71a= HH3 4kk!Q"xx!!!xx $$$ HH( )kk!Q"xx!!!xx $$$ acFNN1Q  HH( )kk!Q"xx1}}{{ar+c tjgdjdd}tjgdjdd}ttt ||ddttt ||tjdjddttt |ddddtj f|dttt ||ddddtj fdttt ||d ttt ||d ttt ||dd ttt ||dd ttt ||dttt tjdtjddtjd5}tjdt ||ddd }t|dk(sJt|djtsJdt|dj vsJ|j"d k(sJ dddttt ||dttt |ddddf|dttt ||ddddfdttt ||ddy#1swYzxYw) N)rrUrrrrrrVrrrrrrrrrA)rrrrrWrrrWrE)皙ffffff333333foorJrW)r~rrrrX)r~rr*r$ir_)rnrnrnrn)rArA)rArErWrErOrAT)recordalways)rYrnrXrqgؗҜ<)r$r`rYz4Convergence was not reached after maxiter iterations)r[rZ@rnrO)rnrXrq)r[rZryrI)rrPrQ assert_raisesr rnewaxisrrwarningscatch_warnings simplefilterlen issubclasscategory UserWarningr!messager{)r5r6r7wr:s r) test_errorszTestPlacePoles.test_errorss` HH9 : B B1Q G HH& ' / /! 4 j+q!5J" $ j+q!hh45==aB D j+q1RZZ/@!+ - j+q!Aa N2C+ - j+q!5MN j+q!5EF j+q!5J  j+q!5J! # j+q!]C j+rwwu~ggeni 1  $ $D 1 %Q  ! !( +aMrJCq6Q; ;aennk: ::J1R5==)* +*;;"$ $$ % j+q!5KL j+q2A2w=I j+q!BQBqD'=I j+q!/ @' % %s BKKN) __name__ __module__ __qualname__r=rSrwr|pytestmark thread_unsaferr+r)r-r-(s; ),N!`  D [[@@@@r+r-c6eZdZdZdZdZdZdZdZdZ y) TestSS2TFc ttj||ftj||ftj||ftj||fdy)Nr)rrzerosr5pqrs r)check_matrix_shapeszTestSS2TF.check_matrix_shapessK bhh1vhh1vhh1vhh1v #r+c@dD]\}}}|j|||y)N))rOrOrO)rWrOrOrWrWrW)rrs r) test_shapeszTestSS2TF.test_shapes s+9 .GAq!  $ $Q1 - .r+cptjgd}tjgd}t||\}}}}t|ddgddggdt|d gdggdt|d d ggdt|d ggd t ||||\}}t|d|dt||dy) N)?@@)r@rrXrWrvIh%<=rrrE+=)rrPr rr) r5bar6r7CDbbaas r) test_basiczTestSS2TF.test_basics HH_ % HH_ %1a[ 1aS"I1v.U;RD1#;U3RG951RD6.q!Q"B1qu-AE*r+c"d}t|\}}}}t|dggdt|dggdt|dggdt|dggdt||||\}}t|ddggdt|ddgddgd ggd f}t|\}}}}t|dggdt|dggdt|dgdggdt|d gd ggdt||||\}}t|d dgd dggdt|ddgdy) N)rErWrrrrrrbrErWr)r rrr5tfr6r7rrnumdens r)test_zero_order_round_tripz$TestSS2TF.test_zero_order_round_trips5 BZ 1aRD6.RD6.RD6.RD6.Aq!$Sr1gYU3b!W51sQCj!_BZ 1aRD6.RD6.RD1#;U3RD1#;U3Aq!$Sr1g1v.U;b!W51r+cRddgddggddgf}t|\}}}}t|dggdt|dggdt|dgdggdt|dgdggdt||||\}}t|dd gddggdt|dd gdgd gd ggd f}t|\}}}}t|ddgddggdt|dgdggdt|ddgddggdt|dgdggdt||||\}}t|gd gd gdt|gd dgdgdggdf}t|\}}}}t|gdgdgdgdt|dgdgdggdt|gdgdgdt|dgdggdt||||\}}t|gdgdgdt|gddtjdddggt ddgf}t|\}}}}t|dggdt|dggdt|dgdggdt|dgdggdt||||\}}t|ddgddggdt|ddgdtjddggdgt gdf}t|\}}}}t|dd gddggdt|dgdggdt|ddgd!d"ggdt|dgdggdt||||\}}t|gd#gdgdt|gd$dy)%NrWrErrrrrr)rWrrWr)rrr)rrr)rWrErOr)rrXrq)rWrrrrWrr)rrErO)rrWrErO)rrWrErO)rrErOrArO)dtyperagghe99irX)rWrarbrrqrn)rrWrX)rrarb)r rrrrPobjectrs r)test_simo_round_tripzTestSS2TF.test_simo_round_trip7sq1v1vA 'BZ 1aSE7/RD6.RD3%=u5RD2$b"XE2)$i 0BZ 1aS#JR1>RD2$r+c<tjgdgdgdgdg}tjdgdgdgdgg}tjgdgd gd g}tjdgdgd gg}t||||\}}t|||d |d \}}t|||d |d \} } t|||d|d\} } t||dt| |dt| |dt|tj|| | fddy)N)rrrr)rrrr)grrr)g @rr333333?rg@)rrrr)rrrr)rrrrrrrWrErrrr)rrPrrvstack) r5r6r7rrb_allrb0a0b1a1b2a2s r)test_multioutputzTestSS2TF.test_multioutputys; HH++++- . HHseeee  HH***, - HHseee  Aq!$qq!QqT1Q4(Bq!QqT1Q4(Bq!QqT1Q4(B AE*AE*AE*ryy"b"6UOr+N) rrrrrrrrrrrr+r)rrs'# . +2075r?$Pr+rcLeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z y ) TestLsimrUct5}|jtt|}ddd|S#1swYSxYwN)rfilterrr )r5argssupsystems r) lti_nowarnzTestLsim.lti_nowarns=   C JJ '$ZF    s3=c|jdddd}tjdd}tj|}t |||dg\}}}tj | }t ||t ||yNrrrrrbX0rrlinspace zeros_likerexprr5rtutoutyx expected_xs r)test_first_orderzTestLsim.test_first_ordersqR2. KK!  MM! &!QC51 aVVTE] Az*Az*r+ctjddd}tj|}|jdggd}t |||ddg\}}}d|z tj | z}t |dddf|y)Nrr^irrrrrr)rrrrrrr)r5rrrrrrrs r)test_second_orderzTestLsim.test_second_ordersz KK2t $ MM! #8&!QC:6 aDjBFFD5M1 AadGZ0r+c|jdddd}tjdd}|}t|||\}}}d|dzz}t |||j t |||j y)Nrrrrb?rEdecimal)rrrrrdigits_accuracyrs r)test_integratorzTestLsim.test_integratorspRR0 KK!  &!Q' a47] Az43G3GHAz43G3GHr+cttjddgddgg}tjddgddgg}tjddg}tjd}|j||||}tjddd}tjt |d f}t |||ddg \}} } tj| } tj| } tjd|z} t| | t| dddf| t| ddd f| y) NrrrrrWrErg$@rE)UTrrW rrPrrrrrrrr5r6r7rrrrrrrr expected_y expected_x0 expected_x1s r)test_two_stateszTestLsim.test_two_statess  HHtSkC;/ 0 HHsCj3*- . HHc3Z  HHV Aq!, KK4 $ HHc!fa[ !&ASz: aVVTE] ffdUm ffTD[) Az*AadG[1AadG[1r+ctjddgddgg}tjdgdgg}tjddgg}|j|||d}tjdd}tj|}t |||\}}} tj tjd|dzz|g} |dz} t| | |jt|| |jy) NrrrrrbrrEr) rrPrr ones_liker transposerr) r5r6r7rrrrrrrrrs r)test_double_integratorzTestLsim.test_double_integrators HHr2hR) * HHrdRD\ " HHr2hZ Aq"- KK!  LLO&!Q' a\\"((C$'M4+@"AB 1W Az43G3GHAz43G3GHr+ctjddgddgg}tjdgdgg}tjddgg}|j|||d}tjdd}tj|}t |||ddg\}}} |tj | z} t|| yr)rrPrrrrrr) r5r6r7rrrrrrrrs r)test_jordan_blockzTestLsim.test_jordan_blocks HHsBi"c+ , HHrdRD\ " HHr2hZ Aq"- KK!  MM! &!QC:6 aBFFD5M) Az*r+cttjddgddgg}tjddgddgg}tjddg}tjd}|j||||}tjddd}tjt |d f}t |||ddg \}} } tj| } tj| } tjd|z} t| | t| dddf| t| ddd f| y) NrrrrrrrerErrWrrs r) test_misozTestLsim.test_misos  HHtSkC;/ 0 HHsCj3*- . HHc3Z  HHUOAq!, KK3 $ HHc!fa[ !&!QC:6 aVVTE] ffdUm ffT$Y' Az*AacFK0AacFK0r+c|jdddd}tjdd}tj|}t |||dg\}}}tj | }t ||y)NrrrrWrErr)r5rrrrrrrs r)test_nonzero_initial_timez"TestLsim.test_nonzero_initial_time seR2. KK!  MM! &!QC51 aVVTE] Az*r+ctjgd}tjgd}dgddgf}ttd5t |||dg\}}}dddy#1swYyxYw)N)rrrr)rrrrrrz"Time steps are not equally spaced.)matchr)rrPrr r)r5rrrrrrs r)test_nonequal_timestepsz TestLsim.test_nonequal_timestepssk HH) * HH) *%#s$ :!EG 6fau5JD!Q 6 6 6s A%%A.N)rrrrrrrrrrrr r rrr+r)rrs;O + 1I2& I+ 1$+6r+rc<eZdZdZdZdZdZdZdZdZ dZ y ) TestImpulsecrdgddgf}t|\}}tj| }t||yNrrrrrr5rrrrs r)rzTestImpulse.test_first_orders:%#c#&/aVVTE] Az*r+cdgddgf}d}tjdd|}t||\}}|j|fk(sJt ||tj | }t ||y)Nrrrrr)rrrrrrr5rnrrrrs r)test_first_order_fixed_timez'TestImpulse.test_first_order_fixed_time'sr %#c#  KK3 "&A&azzaT!!!D!$VVQBZ Az*r+c|dgddgf}t|d\}}dtj| z}t||yNrrrrrrs r)test_first_order_initialz$TestImpulse.test_first_order_initial5sB %#c#&S)a2664%=( Az*r+c~dgddgf}t|dg\}}dtj| z}t||yrrrs r)test_first_order_initial_listz)TestImpulse.test_first_order_initial_list?sD %#c#&cU+a2664%=( Az*r+cpdgddgf}t|\}}tj|}t||yNrr)rrrrrs r)rzTestImpulse.test_integratorIs7%#c#&/a\\$' Az*r+cxdggdf}t|\}}|tj| z}t||y)Nrrrrs r)rzTestImpulse.test_second_orderPs;%)&/aBFFD5M) Az*r+c`dggdf}t|dgddg\}}t|dgdg\}}y)NrrrOrbrarrrr5rrrs r)test_array_likezTestImpulse.test_array_likeYs<%)&aSQF3a&aSQC0ar+c4dggdf}t|dd\}}y)NrrrOrbr$r%r&s r)test_array_like2zTestImpulse.test_array_like2`s %)&Q!,ar+N) rrrrrrrrrr'r)rr+r)rrs*+ +++++1-r+rc<eZdZdZdZdZdZdZdZdZ dZ y ) TestStepcxdgddgf}t|\}}dtj| z }t||yrrrrrrs r)rzTestStep.test_first_orderfs?%#c#v,a2664%=( Az*r+cdgddgf}d}tjdd|}t||\}}|j|fk(sJt ||dtj | z }t ||y)NrrrrrrW)rrrrrrrs r)rz$TestStep.test_first_order_fixed_timensv %#c#  KK3 "v#azzaT!!!D!$^ Az*r+cdgddgf}t|d\}}ddtj| zz}t||yNrrrrWrr-rs r)rz!TestStep.test_first_order_initial|sG %#c#v#&aRVVTE]** Az*r+cdgddgf}t|dg\}}ddtj| zz}t||yr0r-rs r)rz&TestStep.test_first_order_initial_listsI %#c#v3%(aRVVTE]** Az*r+cJdgddgf}t|\}}|}t||yr!)rrrs r)rzTestStep.test_integrators0%S "v,a Az*r+cdggdf}t|\}}dd|ztj| zz }t||y)NrrrWr-rs r)rzTestStep.test_second_ordersD%)v,a!d(bffdUm33 Az*r+c6dggdf}t|ddg\}}y)Nrrrbrarrr&s r)r'zTestStep.test_array_likes"%)v!Q(ar+c"tgdgdfy)NrYy?r5r5s r)test_complex_inputzTestStep.test_complex_inputs b2$ r+N) rrrrrrrrrr'r8rr+r)r+r+es*+ +++++) r+r+ceZdZdZy)TestLtic\tdgdg}t|tsJt|tsJt|trJ|jJtt j gt j dgd}t|tsJt|tsJt|trJ|jJtgdgd}tdgdgdd}t|tsJt|tsJt|trJ|jJy)NrWrYrO) r isinstancerr dtrrPrrr5ss r)test_lti_instantiationzTestLti.test_lti_instantiations bTN!-...!S!!!a&&&tt||  bhhtna 0!^,,,!S!!!a&&&tt|| RD!  bT1a !Z(((!S!!!a&&&tt||r+N)rrrr@rr+r)r:r:sr+r:c$eZdZdZdZdZdZy)TestStateSpacectddddtdgdgdgdgttjddgddggtjdgdggtjddggtjdggy)NrWrErOrAr)rrrPr7s r)test_initializationz"TestStateSpace.test_initializationsy1aAA3aS1#&288aVaV,-rxx!qc /C88aVH%rxx! 8r+c&tdddd}t|jtsJt|jtsJt|j t sJt||usJ|j|usJy)NrWrErOrA)rr<to_ssto_tfrto_zpkrr>s r)test_conversionzTestStateSpace.test_conversions} q!Q "!'')Z000!'')%5666!((*n555!}A%%%wwy!!!r+ctdddd}t|jdgt|jdg|jJy)NrWrr)rrpolesrr=r>s r)test_propertieszTestStateSpace.test_propertiessB q!Q ""&"&tt||r+c Gdd}ttjddgddggtjdgdggtjddggtjdgg}ttjd d gd d ggtjdgdggtjddggtjdgg}|jd }|jd }|jd }tjddd}tj |}d|d<t tttjtjtjfD]} tt| d|z||d| dt|||dztt|| dz||dt|||d| dztt|| dz ||dt|||d| dz tt5| d|z dddtt|dz||dt|d|z|dtt||z||dt|t|||d|ddtt5||z dddtt5||zdddtt5||zdddtt5||zdddtt5||zdddtt5||z dddtt5||z dddtt|dz||dd|zt|||dztt5|tjddgzdddtt5tjddg|zdddtt5||zdddtt5|tjddgddggz dddtt5||zdddtt5||zdddtt5||zdddtt||z||dt|||dt|||dztt|dz ||dd|zt|||dzttd|z ||dd|zt| ||dztt||z ||dt|||dt|||dz tt5||z dddtt5||z ddd||z} | j d k(sJ||z} | j d k(sJd|z} | j d k(sJ| } | j d k(sJy#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYoxYw#1swYZxYw#1swYExYw#1swY0xYw#1swYxYw#1swYxYw#1swYxYw#1swYzxYw#1swYjxYw#1swYUxYw#1swY@xYw#1swYFxYw#1swY1xYw)Nc eZdZy).TestStateSpace.test_operators..BadTypeN)rrrrr+r)BadTyperOs r+rPrHgffffff?rgrWrrGgg?皙?g?drE)rrgh㈵>)r%rOrArn)rrrP to_discreterrintfloatcomplexfloat32 complex128rrr TypeErrorr r=) r5rPs1s2 s_discrete s2_discrete s3_discreterrtypr?s r)test_operatorszTestStateSpace.test_operatorss  4+T{!;<1#s,1a&*1# 4,d !<=1#s,1a&*1# ^^C( nnS) nnS)  KK1c " MM! !R]]BHHM C DQ"Q7:FT"Q%7%:: < Dc!fQ7: qA.q1CF: < Dc!fQ7: qA.q1CF: <y) A     R!VqA.q1R1q5A.q1 3 R"WQ/2R4a1#5a#8A>qA! #9 %  G 9 %  O 9 % %  $ %9 %  N 9 %  IN 9 %  N 9 %  IN  R!VqA.q1AR1 21 55 7: & " 1a&! ! ": & " HHaV r ! "9 %  O : & , Aq6Aq6*+ + ,9 % %  $ %9 %  N 9 %  IN  R"WQ/2R1*1-R10B10EE G R!VqA.q1QbA!3A!66 8 QVqA.q1AbSA 3A 66 8 R"WQ/2R1*1-R10B10EE G9 %  N 9 %  IN   $tts{{  $tts{{ Ntts{{ Ktts{{q       % %         " " " "   , , % %         s Y3Z5Z Z/ Z' Z43 [ [*[[([5+\!\> \ \)' \6 ]3Y= Z  ZZ$'Z14Z>[ [[%([25[?\ \\&)\36]] N)rrrrDrIrLr`rr+r)rBrBs8 "~r+rBceZdZdZdZdZy)TestTransferFunctionctddtdgdgttjdgtjdgyNrWrE)rrrPr7s r)rDz(TestTransferFunction.test_initializationhs8A!qc"1#! 6r+c*tddgddg}t|jtsJt|j tsJt|j t sJt||usJ|j |usJy)NrWrrY)rr<rFrrGrHrr>s r)rIz$TestTransferFunction.test_conversionns aVaW -!'')Z000!'')%5666!((*n555 "!+++wwy!!!r+ctddgddg}t|jdgt|jdgy)NrWrrYrr)rrrKrr>s r)rLz$TestTransferFunction.test_propertiesys8 aVaW -"&"&r+N)rrrrDrIrLrr+r)rbrbgs7 "'r+rbceZdZdZdZy)TestZerosPolesGainctdddtdgdgdttjdgtjdgdyrd)rrrPr7s r)rDz&TestZerosPolesGain.test_initializations>q!QsQC#rxx}bhhsmQ7r+c$tddd}t|jtsJt|j t sJt|j tsJt||usJ|j |usJy)NrWrErO)rr<rFrrGrrHr>s r)rIz"TestZerosPolesGain.test_conversions| 1a #!'')Z000!'')%5666!((*n555a )))xxz"""r+N)rrrrDrIrr+r)rhrhs 8 #r+rhceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZy)Test_abcd_normalizectjddgddgg|_tjdgdgg|_tjddgg|_tjdgg|_y)Nrrrrrr@)rrPr6r7rrr7s r) setup_methodz Test_abcd_normalize.setup_methodsaC:Sz23D6C5/*C:,'C5'"r+c,tttyr)rr rr7s r)test_no_matrix_failsz(Test_abcd_normalize.test_no_matrix_failss j.1r+cttttddg|j|j|j y)NrWrY)rr rr7rrr7s r)test_A_nosquare_failsz)Test_abcd_normalize.test_A_nosquare_failss'j.1b'ffdffdff .r+ctttt|jddg|j|j yNrYrbrr rr6rrr7s r)test_AB_mismatch_failsz*Test_abcd_normalize.test_AB_mismatch_fails'j.$&&2q'ffdff &r+cxttt|j|jdgdgg|j y)Nrr)rr rr6r7rr7s r)test_AC_mismatch_failsz*Test_abcd_normalize.test_AC_mismatch_failss+j.$&&$&&usendff .r+c tttt|j|j|j ddgy)Nrnr)rr rr6r7rr7s r)test_CD_mismatch_failsz*Test_abcd_normalize.test_CD_mismatch_failss'j.$&&$&&ffsAh (r+ctttt|jddg|j|j yrurvr7s r)test_BD_mismatch_failsz*Test_abcd_normalize.test_BD_mismatch_failsrxr+c*t|j|j|j|j\}}}}t ||jt ||jt ||jt ||jyr)rr6r7rrrr5r6r7rrs r)"test_normalized_matrices_unchangedz6Test_abcd_normalize.test_normalized_matrices_unchangedsb#DFFDFFDFFDFFC 1a466"466"466"466"r+ct|j|jddgd\}}}}t|jd|jdt|jd|jdt|jd|jdt|jd|jdt|jd|jdy)NrWr)rr6r7rrrs r)rzTest_abcd_normalize.test_shapess#DFFDFFQFA> 1a AGGAJ/ AGGAJ/ AGGAJ/ AGGAJ/ AGGAJ/r+ctjd}tjd}t|j||\}}}}t ||jt ||t |||j d|j dk(sJ|j d|jj dk(sJy)NrEr)rrr6r7rrrWrrrr6rr)r5B_D_r6r7rrs r) test_zero_dimension_is_not_none1z4Test_abcd_normalize.test_zero_dimension_is_not_none1s XXf  XXf #dffb9 1a466"22wwqzRXXa[(((wwqzTVV\\!_,,,r+crtjd}tjd}t|j||\}}}}t ||jt ||t |||j d|j dk(sJ|j d|j dk(sJy)Nr)rrEr6r7rrrWr)r5rC_r6r7rrs r) test_zero_dimension_is_not_none2z4Test_abcd_normalize.test_zero_dimension_is_not_none2s XXf  XXf #dffb9 1a466"22wwqzRXXa[(((wwqzRXXa[(((r+clt|j|j|j\}}}}|jd|jdk(sJ|jd|jdk(sJ|j|jjd|jjdfk(sJy)N)r7rrrrW)rr7rrrrs r)test_missing_Az"Test_abcd_normalize.test_missing_A#dff$&&A 1awwqzQWWQZ'''wwqzQWWQZ'''ww466<<?DFFLLO<<<aS1a&! Vq) 3( Cq9r+cptdgddg}gd}t||\}}}gd}t||dy)NrWrQrWr^r)gig33333Urr)r5rrrrexpected_phases r)test_02zTest_bode.test_02,s> aS1a&! Vq) 3+E>1=r+c2tdgddg}gd}t||\}}}|dz}tj|j|tj|j |z }dtj t|z}t||y)NrWrr?g4@) r r rpolyvalrrlog10absr)r5rrrrjwrrs r)test_03zTest_bode.test_038saS1a&! Vq) 3 V JJvzz2 &FJJ)C Cbhhs1v.. C.r+cltdgddg}gd}t||\}}}|dz}tj|j|tj|j |z }tj |j|jdztjz }t||y)NrWrrrgf@) r r rrrrarctan2rrpir)r5rrrrrrrs r)test_04zTest_bode.test_04CsaS1a&! Vq) 3 V JJvzz2 &FJJ)C CAFFAFF3e;beeCE>2r+ctdgddg}d}tjdd|}t||\}}}t ||yNrWr^rnr)r rlogspacer r)r5rr expected_wrrrs r)test_05zTest_bode.test_05NsIaS1a&! [[Q* Vq) 3Az*r+cXtdgddg}t|d\}}}|ddk(sJyNrWrrErg{Gz?r r r5rrrrs r)test_06zTest_bode.test_06Xs8aS1a&!Vq) 3tt||r+cDtdggd}t|d\}}}y)NrW)rWrrRrErrrs r)test_07zTest_bode.test_07_s$aS+&Vq) 3r+ctggdd}|jtjddd\}}}t t |dd y) N)r]rerjrkrlrWrXrfrRri>r)r r rrrminrs r)test_08zTest_bode.test_08esDR2A6 bkk"b#&> ? 3CJb9r+c *tjgd}tj|j}tjdgdgdgg}tjgdg}tjdgg}t 5}|j tt||||}t|d\}} } ddddtjtjdddzzz z} t | y#1swYJxYw) NrrrrrrrrrrRrra) rrPr/ companionrrrrr r rsqrtr) r5rr6r7rrrrrrrexpected_magnitudes r)test_from_state_spacezTest_bode.test_from_state_spaceks HH) *   Q  ! ! HHsecUSE* + HHo& ' HHseW    0C JJ 'Aq!_F 3/MAsE 0  "((2773#1*3E+F"GGC!34  0 0s 5D  DN) rrrrrrrrrrrrrr+r)rrs/ : > / 3+* : 5r+rc0eZdZdZdZdZdZdZdZy) Test_freqrespctdgddg}gd}t||\}}gd}gd}t|j|dt|j|dy)NrWrr)gGz?rgׁsF?)MbXrHrrr r rrr)r5rrH expected_re expected_ims r)test_output_manualz Test_freqresp.test_output_manualsU aS1a&! !$1) , AFFK;AFFK;r+cVtdgddg}gd}t||\}}|dz}tj|j|tj|j |z }t |j|jt |j|jy)NrWrrr) r r rrrrrrrr5rrrr?r;s r) test_outputzTest_freqresp.test_outputsaS1a&! !$1 F::fjj!,rzz&**a/HHAFFHMM2AFFHMM2r+ctdgddg}d}tjdd|}t||\}}t ||yr)r rrr r)r5rrrrrs r)test_freq_rangezTest_freqresp.test_freq_rangesGaS1a&! [[Q* !$1Az*r+cVtdgddg}t|d\}}|ddk(sJyr)r r )r5rrrs r)test_pole_zerozTest_freqresp.test_pole_zeros6aS1a&!!$1tt||r+cftjgd}tj|j}tjdgdgdgg}tjgdg}tjdgg}t 5}|j tt||||}t|d\}} ddddz} ddd| zzd| dzzz| d zzz } t j| jt| j| jy#1swYixYw) NrrrrrRrrrErO) rrPr/rrrrrr r rrr) r5rr6r7rrrrrrr?r;s r)rz#Test_freqresp.test_from_state_spaces HH) *   Q  ! ! HHseSE3%( ) HHo& ' HHseW    +C JJ 'Aq!_FFc*DAq + F319qAv-145AFFHMM2AFFHMM2 + +s 4D''D0ctgdgdzdg}gd}t||\}}|dz}d|dzdzz }t|j|jt|j|jy)NrYrArWrrrrrs r) test_from_zpkzTest_freqresp.test_from_zpkskRQs# !$1 FAz>AFFHMM2AFFHMM2r+N) rrrrrrrrrrr+r)rrs  < 3+3*3r+r):0yE>r),rnumpyr numpy.testingrrrrscipy._lib._array_apirrr scipy.signalrr r r r r rrrrrrrrscipy.signal._filter_designr scipy.linalgr/r*r-rrrr+r:rBrbrhrlrrrr+r)rs+ *HHHH8N*W@W@t[P[P|{6{6|D-D-NFFR8[[z''8##&CFCFLa5a5HI3I3r+