Ë
    7^(hB  ã                   ó.  — d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d dlmZ d d	l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# d dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+  edddgie,f¬«      Z- ed«      Z. e%dedz  dez  z   dz   e«      Z/ e%ededz  z  dez  z   dz   e«      Z0 e%eedz  dz
  e«      Z1 e%dedz  e«      Z2 e%dedz  dez  z   dz   e«      Z3 e%dde«      Z4 e%dez  dz  dedz  z  z   dez  z   dz   dedz  z  dedz  z  z   dz   e«      Z5 e%dedz  dez   ez  z   dz   e«      Z6 e&e2 e%dedz
  e«      «      Z7 e&e1 e%eedz   e«      «      Z8 e'e/e0«      Z9d„ Z:d„ Z;d „ Z<d!„ Z=d"„ Z>d#„ Z?d$„ Z@d%„ ZAd&„ ZBd'„ ZCd(„ ZDd)„ ZEy*)+é    ©Úisclose)ÚIÚ	all_close)ÚDummy)ÚAbsÚarg)Úlog)Úsqrt)ÚsÚpÚa)Úpi)Úimport_module)Úpole_zero_numerical_dataÚpole_zero_plotÚstep_response_numerical_dataÚstep_response_plotÚimpulse_response_numerical_dataÚimpulse_response_plotÚramp_response_numerical_dataÚramp_response_plotÚbode_magnitude_numerical_dataÚbode_phase_numerical_dataÚ	bode_plotÚnyquist_plot_exprÚnichols_plot_expr)ÚTransferFunctionÚSeriesÚParallelÚTransferFunctionMatrix)ÚraisesÚskipÚ
matplotlibÚfromlistÚpyplot)Úimport_kwargsÚcatchÚnumpyé   é   ç      à?é   é   é
   é   é   é	   çš™™™™™¹?é   é   c                 ó.   — t        | «      t        |«      fS ©N)Útuple©r   Úbs     úl/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/control/tests/test_control_plots.pyÚ	_to_tupler<   +   s   € Ü�‹8”U˜1“XÐÐó    c           	      óô   — t        | |«      \  } }t        | dd | t        | «      dz  t        | «      dz  dz    z   | dd  z   «      t        |dd |t        |«      dz  t        |«      dz  dz    z   |dd  z   «      fS )Nr   r+   r*   éþÿÿÿ)r<   r8   Úlenr9   s     r;   Ú_trim_tuplerA   .   s�   € Ü�Q˜‹?�D€A€qÜ��1�a�˜1œS ›V Q™Y¬¨Q«°©°Q©Ð7Ñ7¸!¸B¸C¸&Ñ@ÓAÜˆa��1ˆg˜œ#˜a›& !™)¤c¨!£f¨a¡i°!¡mÐ4Ñ4°q¸¸°vÑ=Ó>ð?ð ?r=   c                 óœ   ‡‡—  | ‰«      \  }}t        ||«      \  }}t        ˆˆfd„|D «       «      }t        d„ t        ||«      D «       «      S )z€Checks whether the y-coordinate value of the plotted
    data point is equal to the value of the function at a
    particular x.c              3   ó0   •K  — | ]  } ‰‰|«      –— Œ y ­wr7   © )Ú.0Úx_iÚ
evalf_funcÚsystems     €€r;   ú	<genexpr>z(y_coordinate_equality.<locals>.<genexpr>9   s   øè ø€ Ò7¨c‘*˜V S×)Ñ7ùs   ƒc              3   óD   K  — | ]  \  }}t        ||z
  «      d k  –— Œ y­w)g:Œ0âŽyE>N)r   )rE   Úy_exp_iÚy_is      r;   rI   z(y_coordinate_equality.<locals>.<genexpr>:   s"   è ø€ ÒK©\¨W°cŒs�7˜S‘=Ó! DÕ(ÑKùs   ‚ )rA   r8   ÚallÚzip)Úplot_data_funcrG   rH   ÚxÚyÚy_exps    ``   r;   Úy_coordinate_equalityrS   3   sJ   ù€ ñ ˜&Ó!�D€A€qÜ�q˜!Ó�D€A€qÜÔ7°QÔ7Ó7€EÜÑK¼SÀÈ»]ÔKÓKÐKr=   c                  ó<  ‡ ‡‡— t         st        d«       t        t        t        gt        t        gg«      Šdt
        dz  dz
  z  Š t        t        ˆfd„«       t        t        ˆ fd„«       t        t        ˆ fd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆ fd	„«       t        t        ˆ fd
„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        t
        dz   t
        «      Št        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        ˆfd„«       t        t        d„ «       t        t        d„ «       t        t        d„ «       t        t        d„ «       t        t        d„ «       t        t        d„ «       y )Nz"Matplotlib not the default backendr*   r+   c                  ó   •— t        ‰ «      S r7   ©r   ©Útfms   €r;   ú<lambda>ztest_errors.<locals>.<lambda>D   s   ø€ ¬°sÓ(;€ r=   c                  ó   •— t        ‰ «      S r7   ©r   ©Úexprs   €r;   rY   ztest_errors.<locals>.<lambda>E   s   ø€ Ô(@ÀÓ(F€ r=   c                  ó   •— t        ‰ «      S r7   ©r   r\   s   €r;   rY   ztest_errors.<locals>.<lambda>F   s   ø€ Ô(=¸dÓ(C€ r=   c                  ó   •— t        ‰ «      S r7   ©r   rW   s   €r;   rY   ztest_errors.<locals>.<lambda>G   s   ø€ Ô(GÈÓ(L€ r=   c                  ó   •— t        ‰ «      S r7   ©r   rW   s   €r;   rY   ztest_errors.<locals>.<lambda>H   s   ø€ Ô(:¸3Ó(?€ r=   c                  ó   •— t        ‰ «      S r7   ©r   r\   s   €r;   rY   ztest_errors.<locals>.<lambda>I   s   ø€ Ô(DÀTÓ(J€ r=   c                  ó   •— t        ‰ «      S r7   ©r   r\   s   €r;   rY   ztest_errors.<locals>.<lambda>J   s   ø€ Ô(:¸4Ó(@€ r=   c                  ó   •— t        ‰ «      S r7   ©r   rW   s   €r;   rY   ztest_errors.<locals>.<lambda>K   s   ø€ Ô(DÀSÓ(I€ r=   c                  ó   •— t        ‰ «      S r7   ©r   rW   s   €r;   rY   ztest_errors.<locals>.<lambda>L   s   ø€ ¬	°#«€ r=   c                  ó   •— t        ‰ «      S r7   rV   ©Útf_as   €r;   rY   ztest_errors.<locals>.<lambda>P   s   ø€ œ~¨dÓ3€ r=   c                  ó   •— t        ‰ «      S r7   r[   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>Q   s   ø€ Ô7¸Ó=€ r=   c                  ó   •— t        ‰ «      S r7   r_   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>R   s   ø€ Ô4°TÓ:€ r=   c                  ó   •— t        ‰ «      S r7   ra   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>S   s   ø€ Ô>¸tÓD€ r=   c                  ó   •— t        ‰ «      S r7   rc   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>T   ó   ø€ Ô1°$Ó7€ r=   c                  ó   •— t        ‰ «      S r7   re   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>U   ó   ø€ Ô;¸DÓA€ r=   c                  ó   •— t        ‰ «      S r7   rg   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>V   rs   r=   c                  ó   •— t        ‰ «      S r7   ri   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>W   ru   r=   c                  ó   •— t        ‰ «      S r7   rk   rm   s   €r;   rY   ztest_errors.<locals>.<lambda>X   s   ø€ œy¨›€ r=   c                  ó$   — t        t        d¬«      S )Néÿÿÿÿ©Úlower_limit)r   Útf1rD   r=   r;   rY   ztest_errors.<locals>.<lambda>[   s   € Ô4´SÀbÔI€ r=   c                  ó$   — t        t        d¬«      S )Nçš™™™™™¹¿r{   )r   r}   rD   r=   r;   rY   ztest_errors.<locals>.<lambda>\   ó   € Ô1´#À4ÔH€ r=   c                  ó$   — t        t        d¬«      S )NgUUUUUUõ¿r{   ©r   r}   rD   r=   r;   rY   ztest_errors.<locals>.<lambda>]   r€   r=   c                  ó$   — t        t        d¬«      S )Nr   )Úsloper‚   rD   r=   r;   rY   ztest_errors.<locals>.<lambda>`   s   € Ô1´#¸TÔB€ r=   c                  ó$   — t        t        d¬«      S )NÚhz)Ú	freq_unit©r   r}   rD   r=   r;   rY   ztest_errors.<locals>.<lambda>c   s   € œy¬¸Ô>€ r=   c                  ó$   — t        t        d¬«      S )NÚdegree)Ú
phase_unitrˆ   rD   r=   r;   rY   ztest_errors.<locals>.<lambda>d   s   € œy¬¸(ÔC€ r=   )r$   r#   r!   Útf6Útf5r   r"   ÚNotImplementedErrorr   r   Ú
ValueError)r]   rn   rX   s   @@@r;   Útest_errorsr�   =   sd  ú€ ÝÜÐ1Ô2ô !¤3¬ *¬s´C¨jÐ!9Ó
:€CØŒa�‰d�Q‰h‰<€DÜ
ÔÓ ;Ô<Ü
ÔÓ FÔGÜ
ÔÓ CÔDÜ
ÔÓ LÔMÜ
ÔÓ ?Ô@Ü
ÔÓ JÔKÜ
ÔÓ @ÔAÜ
ÔÓ IÔJÜ
ÔÓ 6Ô7ô œAœq 1™u¤aÓ(€DÜ
Œ:Ó3Ô4Ü
Œ:Ó=Ô>Ü
Œ:Ó:Ô;Ü
Œ:ÓDÔEÜ
Œ:Ó7Ô8Ü
Œ:ÓAÔBÜ
Œ:Ó7Ô8Ü
Œ:ÓAÔBÜ
Œ:Ó.Ô/ô Œ:ÑIÔJÜ
Œ:ÑHÔIÜ
Œ:ÑHÔIô Œ:ÑBÔCô Œ:Ñ>Ô?Ü
Œ:ÑCÕDr=   c                  ó  — d„ } g ddgg}dgddgg}dgg d¢g}g g d¢g}g d	¢g d
¢g}g ddgg} | t         |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t
        |«      sJ ‚y )Nc                 óf   — t        | «      \  }}t        ||d   «      }t        ||d   «      }|xr |S )Nr   r*   )r   r   )ÚsysÚexpected_valueÚ_zÚ_pÚz_checkÚp_checks         r;   Ú	pz_testerz!test_pole_zero.<locals>.pz_testeri   s=   € Ü)¨#Ó.‰ˆˆBÜ˜B ¨qÑ 1Ó2ˆÜ˜B ¨qÑ 1Ó2ˆØÒ"˜7Ð"r=   yþÿÿÿÿÿÏ¿ÃÁhdEö¿yþÿÿÿÿÿÏ¿ÃÁhdEö?ç        y      Ð¿‘4ŠËé§Ô¿y      Ð¿‘4ŠËé§Ô?)yþÿÿÿÿÿï?        y     à¿²LXèz¶ë¿y     à¿²LXèz¶ë?)rš   rš   rš   g      @)gv|éÔ?•Àg     à¿g°8h±¬Ö¿)yûÿÿÿÿÿÏ¿�4ŠËé§Ô¿yùÿÿÿÿÿÏ¿�4ŠËé§Ô?yûÿÿÿÿÿÏ¿ÂÁhdEö¿yùÿÿÿÿÿÏ¿ÂÁhdEö?y¬¬ZEf ò¿;êÄÐ]Ày´¦Ju3¿ê¿;êÄÐ]@)r}   Útf2Útf3Úser1Úpar1Útf8)r™   Úexp1Úexp2Úexp3Úexp4Úexp5Úexp6s          r;   Útest_pole_zeror¦   g   sÑ   € ò#ð Ð9Ð;cÐdÐe€DØˆEÐ-Ð/HÐIÐJ€DØˆEò 1ð 2€DàÒ$Ð%€DÚJò	2ð3€Dð
 Ð7Ø
1ð3ð 4€Dñ ”S˜$ÔÐÐÙ”S˜$ÔÐÐÙ”S˜$ÔÐÐÙ”T˜4Ô Ð Ð Ù”T˜4Ô Ð Ð Ù”S˜$ÔÐÑr=   c                  óÎ   ‡‡— t         st        d«       d„ Šd„ Šˆˆfd„}  | t        «      sJ ‚ | t        «      sJ ‚ | t        «      sJ ‚ | t
        «      sJ ‚ | t        «      sJ ‚y )NúNumPy is required for this testc                 óØ   — | j                  «       }t        dd¬«      }|j                  | j                  t        |z  i«      }t        |«      j                  ||i«      j                  «       S )NÚwT©Úreal)Úto_exprr   ÚsubsÚvarr   r	   Úevalf©rH   Úpointr]   Ú_wÚw_exprs        r;   Úbode_phase_evalfz#test_bode.<locals>.bode_phase_evalfˆ   sW   € Ø�~‰~ÓˆÜ�3˜TÔ"ˆØ—‘˜FŸJ™J¬¨"©Ð-Ó.ˆÜ�6‹{×Ñ  U Ó,×2Ñ2Ó4Ð4r=   c                 óò   — | j                  «       }t        dd¬«      }|j                  | j                  t        |z  i«      }dt        t        |«      d«      j                  ||i«      j                  «       z  S )Nrª   Tr«   é   r/   )r­   r   r®   r¯   r   r
   r   r°   r±   s        r;   Úbode_mag_evalfz!test_bode.<locals>.bode_mag_evalfŽ   sc   € Ø�~‰~ÓˆÜ�3˜TÔ"ˆØ—‘˜FŸJ™J¬¨"©Ð-Ó.ˆØ”#”c˜&“k 2Ó&×+Ñ+¨R°¨KÓ8×>Ñ>Ó@Ñ@Ð@r=   c                 óL   •— t        t        ‰| «      xr t        t        ‰| «      S r7   )rS   r   r   )r“   r¸   rµ   s    €€r;   Útest_bode_dataz!test_bode.<locals>.test_bode_data”   s,   ø€ Ü$Ô%BÀNÐTWÓXò XÜ%Ô&?ÐAQÐSVÓWð	Xr=   )r)   r#   r}   r›   rœ   Útf4r�   )rº   r¸   rµ   s    @@r;   Ú	test_boder¼   „   sh   ù€ ÝÜÐ.Ô/ò5òAõXñ œ#ÔÐÐÙœ#ÔÐÐÙœ#ÔÐÐÙœ#ÔÐÐÙœ#ÔÐÑr=   c                 ó:   — t        d„ t        | |«      D «       «      S )Nc              3   ó4   K  — | ]  }t        |d ddœŽ–— Œ y­w)r3   g�íµ ÷Æ°>)Úrel_tolÚabs_tolNr   )rE   Ú_s     r;   rI   z'check_point_accuracy.<locals>.<genexpr>    s#   è ø€ ò Øô ˜ 4°ö 
ñ ùs   ‚)rM   rN   r9   s     r;   Úcheck_point_accuracyrÂ   Ÿ   s"   € Üñ Ü�q˜!“9ôó ð r=   c                  ó  — t         st        d«       d„ } d}d}d}d}d}d}d	} | t        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t
        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚y )
Nr¨   c                 óx   — t        t        | dd¬«      Ž \  }}t        ||d   «      }t        ||d   «      }|xr |S ©NFr/   )ÚadaptiveÚnr   r*   )r<   r   rÂ   ©r“   r”   rP   rQ   Úx_checkÚy_checks         r;   Úimpulse_res_testerz1test_impulse_response.<locals>.impulse_res_tester¨   sL   € ÜÔ9¸#Ø˜bô"ð #‰ˆˆ1ä& q¨.¸Ñ*;Ó<ˆÜ& q¨.¸Ñ*;Ó<ˆØÒ"˜7Ð"r=   )©
rš   grÇqÇñ?grÇqÇ@g«ªªªªª
@grÇqÇ@gŽã8Žã8@g«ªªªªª@gÈqÇq@grÇqÇ!@ç      $@)
rš   gÏ¡(œhá?g �éÁj”?gò°yîÓ¿gTÆH¸f—¿g˜—œ'ÃÆ?g*Vrv»”?gÇ>�ï¹¿g)c «Ž¿g�k·ýz­?)rÌ   )
g“vWUUÅ?gVù!öyµ?g°7ñ—?gŠfïê¦Ž¿gJI§P½¡¿gÒW�MJÄ¤¿g›ì"çýG£¿ga¥•6ƒßž¿gÂûiÞƒ«•¿gP=)ŸŠ¿)rÌ   )
g   ¤¿Ä2>g¶··ïÌò?gxëL#‚V
@gøÄ®UÝ"@gž™„™ø^<@gôÁT»ã‹U@g|�/u^p@gj²D#;Ýˆ@gi²Åóûá¢@gNUÕ(®¼@)rÌ   )
rš   gfàéÖü°@gfàéÖü°8@gsÇqÇK@gfàéÖü°X@gO·æ‡EJc@gsÇqÇk@gÎ‹”�çr@gfàéÖü°x@g     @@)rÌ   )
rš   gÙµ: /Äº¿g�”y%µL±?g�2Æœ� ¿gGLK&Ñ‹?gy•bÅ”™u¿gµÎ•”â¹_?gˆ-~×HF¿gÎo¾f.?g¡&;™¿)rÌ   )
g   `n×9¾g&¹ÑëlÖ?g´q„É”û
@g(w\=(@gãl%)kÜ9@g‡Á+<Z=@gƒlÞ‡¨~>ÀgL“�òqÀgö„ÇÅçùŠÀg‹f}ØL›À)rÌ   )
rš   gµ6qDï2@g7†Õ´îâ´@gOë/ß¡ 5Agés¨æYµAgz³C’5BglÔÌ¹ËµBgC²¡/ï6CgÊJ‡À@¶Cgè"®ð-|6D)	r)   r#   r}   r›   rœ   r»   r�   Útf7r�   )rË   r    r¡   r¢   r£   r¤   r¥   Úexp7s           r;   Útest_impulse_responserÐ   ¤   sº   € ÝÜÐ.Ô/ò#ð^€Dðe€DðC€Dð#€Dðg€Dð€Dð
 €Dñ œc 4Ô(Ð(Ð(Ùœc 4Ô(Ð(Ð(Ùœc 4Ô(Ð(Ð(Ùœc 4Ô(Ð(Ð(Ùœc 4Ô(Ð(Ð(Ùœc 4Ô(Ð(Ð(Ùœd DÔ)Ð)Ñ)r=   c                  óø   — t         st        d«       d„ } d}d}d}d}d}d} | t        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚ | t
        |«      sJ ‚ | t        |«      sJ ‚ | t        |«      sJ ‚y )	Nr¨   c                 óx   — t        t        | dd¬«      Ž \  }}t        ||d   «      }t        ||d   «      }|xr |S rÅ   )r<   r   rÂ   rÈ   s         r;   Ústep_res_testerz+test_step_response.<locals>.step_res_testerÛ   sL   € ÜÔ6°sØ˜bô"ð #‰ˆˆ1ä& q¨.¸Ñ*;Ó<ˆÜ& q¨.¸Ñ*;Ó<ˆØÒ"˜7Ð"r=   )rÌ   )
g   jÏ›T¾gÚ´WºÛ?g˜Àíé?gógä	ù¿á?gû—M¬²Õ?gø#J�Ý?g"@teéâ?gýÇ ˆ„Êà?g‘�/P·Ü?g¯†cÎøÞ?)rÌ   )
rš   gR¤ul†’Á?gø¬qlíÈ?gì."ÚaGÉ?g»¥¬ŽÅ?gbò…–À?gò°V±ß´?g¡-b[S¦?g7 Ï—ÞŽ?g\£7' Êm¿)rÌ   )
rš   gNôÛwß4ä?güh&7|@g°ûÉ.Á"@gòÇôÉs<@g�Hv�U@gšrnTÇ^p@gh¤Úø%Ýˆ@gsÚöõá¢@g{îct'®¼@)rÌ   )
rš   gÛ�^’6J@gÛ�^’6J2@gb�ÿ<ÝN@gÛ�^’6Jb@g‡VðJyÜq@gb�ÿ<Ý~@g°o�ˆ@gÛ�^’6J’@gù g³ª
š@)rÌ   )
g   è.1¾gÑŠÚQ�å?góÏUÆZÜ?g—up•à?gr™Bz¤ß?g5“µkà?gëŽ¸­’øß?g(%
-ò à?gjöþ”ÿß?g9Á×U à?)rÌ   )
g   ØÎƒ¾gù†
V—ñÕ?g€öˆ}{ò?g.ócRßz	@g Ä¯"^ó"@g²y;Ñ+º<@g¯¾¯NÕÒU@gŠ@ö l“p@gÛ&O-‰@gÛN2qÆ£@)r)   r#   r}   r›   rœ   r»   r�   Úser2)rÓ   r    r¡   r¢   r£   r¤   r¥   s          r;   Útest_step_responserÕ   ×   s¡   € ÝÜÐ.Ô/ò#ð1€Dð
 €Dð
i€DðM€Dð2€Dð
€Dñ œ3 Ô%Ð%Ð%Ùœ3 Ô%Ð%Ð%Ùœ3 Ô%Ð%Ð%Ùœ3 Ô%Ð%Ð%Ùœ3 Ô%Ð%Ð%Ùœ4 Ô&Ð&Ñ&r=   c                  ó  — t         st        d«       dd„} d}d}d}d}d}d} | t        d	|«      sJ ‚ | t        d
|d«      sJ ‚ | t        d
|d«      sJ ‚ | t
        d
|d«      sJ ‚ | t        d
|d«      sJ ‚ | t        d
|«      sJ ‚y )Nr¨   c                 óz   — t        t        | |d|¬«      Ž \  }}t        ||d   «      }t        ||d   «      }|xr |S )NF)r„   rÆ   rÇ   r   r*   )r<   r   rÂ   )r“   Ú
num_pointsr”   r„   rP   rQ   rÉ   rÊ   s           r;   Úramp_res_testerz+test_ramp_response.<locals>.ramp_res_tester  sN   € ÜÔ6°sØ %¨:ô7ð 8‰ˆˆ1ä& q¨.¸Ñ*;Ó<ˆÜ& q¨.¸Ñ*;Ó<ˆØÒ"˜7Ð"r=   ))rš   g       @g      @g      @g       @rÍ   )rš   g¸óë+^pç?g CùŽÛÿ?gšåmX‚]@g˜’BOBa@gNµÊ¡f@)rÌ   )
g    (Z>g�órº?gº8gÃ((Õ?gŒo!(ïã?g»ÙŠ2ûê?gz$¶ÆY£ð?gxM�žw×ò?gÿÖ5^)ô?g—v]ûÅô?g†Ç“Äüßô?)rÌ   )
g   ˜We¾gD/lç3Ö?g† ø�Âÿ@g7CÐƒª(@g!%’8D@gÚìlZÚõ_@gëRÃ—¬vx@gJÌ³  ’@gÜs;4öO¬@gñk<0Ý�Å@)rÌ   )
rš   gÆ?°{þ?gÆ?°{>@gQ·æ‡EJc@gÆ?°{~@g(|Rþš’@gQ·æ‡EJ£@gåöÿ`Þ±@gÆ?°{¾@g     jÈ@)rÌ   )
rš   g™ÂgGS@gU-Xø˜H"@gEB­T1,@gÞ�n3@gzj8@g¢ÜSÜ\=@g«ª}ÚA@g5jÙ‡ÇŒC@gÿ>6ÅÎF@)rÌ   rÌ   r-   r/   g333333ó?g      ø?r.   r2   )r*   )r)   r#   r}   r›   rœ   r»   r�   rŒ   )rÙ   r    r¡   r¢   r£   r¤   r¥   s          r;   Útest_ramp_responserÚ     s¶   € ÝÜÐ.Ô/ó#ðC€Dð€Dð
V€Dð%€Dð/€DðA€Dñ œ3  4Ô(Ð(Ð(Ùœ3  D¨#Ô.Ð.Ð.Ùœ3  D¨#Ô.Ð.Ð.Ùœ3  D¨!Ô,Ð,Ð,Ùœ3  D¨!Ô,Ð,Ð,Ùœ3  DÔ)Ð)Ñ)r=   c                  ó0  — t        t        «      \  } }}t        t        «      \  }}}t        t        «      \  }}}t        t        «      \  }	}
}| d|dz  z
  d|dz  z  d|dz  z
  dz  z   z  k(  sJ ‚|d|z  d|dz  z  d|dz  z
  dz  z   z  k(  sJ ‚|d|dz  z  d|dz  z  dd|dz  z  z
  dz  z   z  k(  sJ ‚||dd|dz  z  z
  z  d|dz  z  dd|dz  z  z
  dz  z   z  k(  sJ ‚||dz   |dz  dz   z  k(  sJ ‚|| |dz  dz   z  k(  sJ ‚|	d	k(  sJ ‚|
d
|dz  z  k(  sJ ‚y )Nr+   g      Ð?g      à¿r.   r2   r*   r-   r1   r   r/   )r   r}   r›   rœ   r»   )Úr1Úi1Úw1Úr2Úi2Úw2Úr3Úi3Úw3Úr4Úi4Úw4s               r;   Útest_nyquist_plot_exprrè   1  s}  € Ü"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBØ�!�b˜!‘e‘)˜d 2 q¡5™j¨A°°A±©I¸©>Ñ9Ñ:Ò:Ð:Ð:Ø��b‘˜$˜r 1™u™*¨¨B°©E©	°A¡~Ñ5Ñ6Ò6Ð6Ð6Ø��2�q‘5‘˜!˜B ™E™' Q¨¨2¨q©5©¡[°1Ñ$4Ñ4Ñ5Ò5Ð5Ð5Ø��Q˜˜2˜q™5™‘[Ñ! 1 R¨¡U¡7¨a°!°B¸±E±'©k¸AÑ-=Ñ#=Ñ>Ò>Ð>Ð>Ø�"�a‘%�˜˜Q™ ™Ñ#Ò#Ð#Ð#Ø�"��b˜!‘e˜a‘i‘Ò Ð Ð Ø�Š7€Nˆ7Ø��B˜‘E‘Š>Ð‰>r=   c                  óô  — t        t        «      \  } }}t        t        «      \  }}}t        t        «      \  }}}t        t        «      \  }	}
}| dt        dt        |dz  d|dz  z  z
  dz   «      z  «      z  t        d«      z  k(  sJ ‚|dt        d|dz   d|z  t        z  z   dz   z  «      z  t        z  k(  sJ ‚|dt        t        |«      t        d	|dz  z  d
|dz  z  z
  dz   «      z  «      z  t        d«      z  k(  sJ ‚|dt        |t        z  d|dz  z  d
|z  t        z  z   dz   z  «      z  t        z  k(  sJ ‚|dt        t        |«      t        |dz  dz   «      z  «      z  t        d«      z  k(  sJ ‚|dt        | t        z  |d
z  t        z  dz   z  «      z  t        z  k(  sJ ‚|	dt        d|dz  t        |«      z  z  «      z  t        d«      z  k(  sJ ‚|
dt        t        |d
z  z  «      z  t        z  k(  sJ ‚y )Nr·   r*   r1   g      @r+   r/   é´   r,   é$   r.   iúÿÿÿr-   )r   r}   r›   rœ   r»   r
   r   r	   r   r   r   )Úm1Úp1rÞ   Úm2Úp2rá   Úm3Úp3rä   Úm4Úp4rç   s               r;   Útest_nichols_exprrô   @  s  € Ü"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBÜ"¤3Ó'�J€BˆˆBØ�”C˜œ$˜r 1™u t¨B°©E¡zÑ1°AÑ5Ó6Ñ6Ó7Ñ7¼¸B»Ñ?Ò?Ð?Ð?Ø�”S˜˜R ™U˜F S¨¡V¬A¡XÑ-°Ñ1Ñ2Ó3Ñ3´BÑ6Ò6Ð6Ð6Ø�”Cœ˜B›¤ R¨¨A©¡X°°"°a±%±Ñ%7¸!Ñ%;Ó <Ñ<Ó=Ñ=¼cÀ"»gÑEÒEÐEÐEØ�”S˜œA™˜r " a¡%™x¨!¨B©$¬q©&Ñ0°1Ñ4Ñ5Ó6Ñ6´rÑ9Ò9Ð9Ð9Ø�”Cœ˜B›¤ R¨¡U¨Q¡Y£Ñ/Ó0Ñ0´°R³Ñ8Ò8Ð8Ð8Ø�”S˜"˜œQ™  A¡¤a¡¨!¡Ñ,Ó-Ñ-¬bÑ0Ò0Ð0Ð0Ø�”C˜˜B ™E¤# b£'™MÑ*Ó+Ñ+¬C°«GÑ3Ò3Ð3Ð3Ø�”Sœ˜2˜q™5™“\Ñ!¤"Ñ$Ò$Ð$Ñ$r=   N)FÚmathr   Úsympy.core.numbersr   r   Úsympy.core.symbolr   Ú$sympy.functions.elementary.complexesr   r	   Ú&sympy.functions.elementary.exponentialr
   Ú(sympy.functions.elementary.miscellaneousr   Ú	sympy.abcr   r   r   Úsympyr   Úsympy.externalr   Ú#sympy.physics.control.control_plotsr   r   r   r   r   r   r   r   r   r   r   r   r   Úsympy.physics.control.ltir   r   r    r!   Úsympy.testing.pytestr"   r#   ÚRuntimeErrorr$   r)   r}   r›   rœ   r»   r�   rŒ   rÎ   rŸ   r�   rÔ   rž   r<   rA   rS   r�   r¦   r¼   rÂ   rÐ   rÕ   rÚ   rè   rô   rD   r=   r;   ú<module>r     sï  ðÝ ß +Ý #ß ;Ý 6Ý 9ß Ñ Ý Ý (÷÷ ÷ õ ÷.ó .ç -áØ Z°(°Ð$<Øˆoô€
ñ 	�gÓ€á�q˜!˜Q™$  Q¡™,¨Ñ*¨AÓ.€Ù�q˜!˜A˜q™D™& 1 Q¡3™,¨Ñ*¨AÓ.€Ù�q˜!˜Q™$ ™( AÓ&€Ù�r˜1˜a™4 Ó#€Ù�q˜!˜Q™$  1¡™* r™/¨1Ó-€Ù�q˜!˜QÓ€Ù�q˜‘s˜1‘u˜q  A¡™v‘~¨¨A©Ñ-°Ñ2°A°a¸±d±F¸Q¸qÀ!¹t¹V±OÀbÑ4HÈ!ÓL€Ù�q˜!˜Q™$ ! A¡# q¡™.¨2Ñ-¨qÓ1€áˆcÑ# A q¨1¡u¨aÓ0Ó1€ÙˆcÑ# A q¨1¡u¨aÓ0Ó1€á��SÓ€òò?ò
Lò'EòT ò:ò6ò
0*òf-'ò`'*òTó%r=   