
    _MhS                     F   d dl Zd dlmZ d dlmZ d dlmZ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  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 dS )    N)suppress_warnings)raises)assert_array_almost_equalassert_almost_equalxp_assert_closexp_assert_equal)dlsimdstepdimpulsetf2zpkltidlti
StateSpaceTransferFunctionZerosPolesGain	dfreqrespdbodeBadCoefficientsc                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestDLTIc                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        t          j        d	d
d          d d t           j        f         t          j        dd          t          j        dd          f          }t          j        d	dd          }t          j        g dg          j        }t          j        d	d	gddgddgddgddgg          }	t          |||||f||          \  }
}}t          ||           t          |	|           t          ||
           t          dd           |d	dgd d f         }t          j        ddg          }t          |||||f||          \  }
}}t          ||           t          |	|           t          |
          t          |          k    sJ t          j        ddg          }t          j        g d          }t          j        g d g          j        }t          ||df|d d d	f         |          \  }
}t          ||           t          ||
           t          j        |d d d	f                   }|                    d!          }t          ||df||          \  }
}t          ||           t          ||
           t          j        dd"g          }t          j        d#t          j        d$          z  d%t          j        d$          z  g          }d}t          j        g d&g          j        }t          |||df|d d d	f         |          \  }
}t          ||           t          ||
           t          d'gd'd'g          }t          t          t          ||           d S )(N?皙?皙ɿg?r   皙        皙?r   333333?r   r   r         ?r   g      @   )num)r#      g{Gz?gMb`       @)gMbPgc#GgD2?gъo?g#Y?ga2U0*S?gMb@?gTƿ?gkHcCG?g'h'?g56Ng9!@gbmӿ)r%            r         ?r   )r    r*   皙?)r   r   g
@gqqg^B{	7@)r#                       ?r'   y             )r   r*   r&   g      @g      @r%   )npasarrayhstacklinspacenewaxisfullarrayTr	   r   lenreshapesqrtr   assert_raisesAttributeError)selfabcddtut_in
yout_truth
xout_truthtoutyoutxoutu_sparset_sparser$   denuflatzdpdksystems                         _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/signal/tests/test_dltisys.py
test_dlsimzTestDLTI.test_dlsim   s'   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** Ir{1cq111!!!RZ-@wvt,,wvv..0 1 1 {1cq))) X  ,  ,  , - . . /0	 	
 Z!Q"(&!1")7!3"*I!6"+Z!8	!: ; ;
 !!Q1b!11d;;dD!*d333!*d333!$--- 	i aVQQQY<:sCj)) !Q1b!18XFFdD!*d333!*d3334yyCII%%%% j#t%%j))X  2  2  2 3 4 4 56	 	 Cc?AaaadGT::
d!$
333!$--- 
1QQQT7##d##Cc?E488
d!$
333!$--- XsDk""XsRWQZZ'

):;<<X999:;;=
BAs+Qqqq!tWd;;
d!$
333!$--- aS1a&!!neVQ77777    c                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        g d	          t          j        g d
          t          j        g d          f}t          |||||fd          \  }}t          |          dk    sJ t	          dt          |                    D ]I}	||	         j        d         dk    sJ t          ||	                                         ||	                    Jdgddgdf}
t          j        g d          }t          |
d          \  }}t          |          dk    sJ t          |d                                         |           t          |
d         |
d                   dz   }t          |d          \  }}t          |          dk    sJ t          |d                                         |           t          dgddg          }t          t          t          |           d S )Nr   r   r   r   r   r    r!   r"   )
r   {Gz?g9v?gMO?gNz1?g0g >㷿gW	N3Ŀg+(ͿgGӿ)
r   g333333gV-g,Ԛga̦ۢgQo&g*~gIطgp,%Բg[W)
r   {Gzg9vgMOgNz1cg0?g >?gW	N3?g+(?gG?
   nr(   r   r*   )r   r*   r   r%   r"   )r.   r/   r
   r6   rangeshaper   flattenr   r   r9   r:   )r;   r<   r=   r>   r?   r@   yout_step_truthrE   rF   itfinyout_tfstepzpkinrO   s                 rP   
test_dstepzTestDLTI.test_dstepg   s~   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** : 'D 'D 'D E E : '7 '7 '7 8 8 : 'B 'B 'B C C	D Aq!Q+r222
d4yyA~~~~q#d))$$ 	M 	MA7=#r))))%d1goo&7&79KLLLL Sz3'j1141%%%
d4yyA~~~~!$q'//"3"3[AAAtAwQ((615A&&&
d4yyA~~~~!$q'//"3"3[AAA aS1a&!!neV44444rR   c                    t          j        ddgddgg          }t          j        g dg dg          }t          j        ddgg          }t          j        g dg          }d}t          j        g d	          t          j        g d
          t          j        g d          f}t          |||||fd          \  }}t          |          dk    sJ t	          dt          |                    D ]I}	||	         j        d         dk    sJ t          ||	                                         ||	                    Jdgddgdf}
t          j        g d          }t          |
d          \  }}t          |          dk    sJ t          |d                                         |           t          |
d         |
d                   dz   }t          |d          \  }}t          |          dk    sJ t          |d                                         |           t          dgddg          }t          t          t          |           d S )Nr   r   r   r   r   r    r!   r"   )
r   rT   g~jt?ggr]g{ю~gB"LQ.gE_ngRPɺ1g1%)
r   g?g rh?g<,?gdm?gZՒr0[gS¸xg^TDgg#~g}T`)
r   rU   g~jthgg?gr]?g{ю~?gB"LQ.?gE_n?gRPɺ1?g1%?rV   rW   r(   r   r*   )r   r*   g      r%   rY   )r.   r/   r   r6   rZ   r[   r   r\   r   r   r9   r:   )r;   r<   r=   r>   r?   r@   yout_imp_truthrE   rF   r^   r_   yout_tfimpulsera   rO   s                 rP   test_dimpulsezTestDLTI.test_dimpulse   s   Jc
T3K011J(((*:*:*:;<<Jc
|$$J((()** * &C &C &C D D * &D &D &D E E * &A &A &A B BC q!Q2."555
d4yyA~~~~q#d))$$ 	L 	LA7=#r))))%d1goo&7&79JKKKK Sz3'$4$4$455da(((
d4yyA~~~~!$q'//"3"3^DDDtAwQ((61eq)))
d4yyA~~~~!$q'//"3"3^DDD aS1a&!!nh77777rR   c                 *   t          j        dgg          }t          j        dgg          }t          j        dgg          }t          j        dgg          }d}t          j        |                              dd          }t	          ||||df|          \  }}}	t          |t          j        t          |                               t          |t          j        |df                     t          |	t          j        |df                     d S )Nr   r#   r%   r.   r4   zerosr7   r	   r   arangefloat)
r;   r<   r=   r>   r?   rX   rA   rE   rF   rG   s
             rP   test_dlsim_trivialzTestDLTI.test_dlsim_trivial   s    HseWHseWHseWHseWHQKKA&& !Q1a!44dDbia11222bh1v..///bh1v../////rR   c                 N   t          j        dgg          }t          j        dgg          }t          j        dgg          }t          j        dgg          }d}t          j        |                              dd          }t	          ||||df|d          \  }}}	t          |t          j        t          |                               dt          j        t          |                    z                      dd          }
t          ||
           t          |	|
           d S )Nr"   r   r*   r#   rh   r%   x0ri   )r;   r<   r=   r>   r?   rX   rA   rE   rF   rG   expecteds              rP   test_dlsim_simple1dzTestDLTI.test_dlsim_simple1d   s   HseWHseWHseWHseWHQKKA&& !Q1a!:::dDbia1122229U1XX...77A>>h'''h'''''rR   c                    d}d}t          j        |dgd|gg          }t          j        dgdgg          }t          j        ddgddgg          }t          j        dgdgg          }d}t          j        |                              dd          }t	          ||||df|d          \  }	}
}t          |	t          j        t          |                               t          j        ||g          t          j        t          |                                        dd          z  }t          |
|           t          ||           d S )	Nr"   g      ?r   r*   r#   rh   r%   ro   ri   )r;   lambda1lambda2r<   r=   r>   r?   rX   rA   rE   rF   rG   rq   s                rP   test_dlsim_simple2dzTestDLTI.test_dlsim_simple2d   sZ   HwnGn& ' 'Hsee  HsCjCj" # #Hsee  HQKKA&& !Q1a!:::dDbia11222Hgw/00 "	%(( 3 3 ; ;B B BCh'''h'''''rR   c                 `   d}d}t          j        |dgd|gg          }t          j        ddgddgg          }t          j        ddgg          }t          j        ddgg          }d}t          ||||df|          \  }}	dd|z
  z  d|t          j        |          z  z
  z  }
dd|z
  z  d|t          j        |          z  z
  z  }t	          |	d         d d df         |
           t	          |	d         d d df         |           t          j        ddg          }t          ||||df||	          \  }}t          j        ||g          t          j        d
|dz                                 d
d          z  }d|dd d f<   |d |df         t          j        |d|dz   d d f         |          z   }|d |df         t          j        |d|dz   d d f         |          z   }t	          |d         d d df         |           t	          |d         d d df         |           dgddgdf}t          |d          \  }\  }t	          |g d           t          |j	        g dg           t          |d          \  }\  }t	          |g d           t          |j	        g dg           d S )Nr"   g      ?r   r*   rV   r%   rW   r   )rX   rp   rh   r,   r   r(   )r   r   r+   )r   r*   g      ?)r   r%   r"   )
r.   r4   r
   rk   r   r   r7   dotr   r5   )r;   rt   ru   r<   r=   r>   r?   rX   tsysstp0stp1rp   tiyiimpy0y1rO   tys                        rP   test_more_step_and_impulsez#TestDLTI.test_more_step_and_impulse   s   HwnGn& ' 'HsCjCj" # #HsCj\""HsCj\"" 1aA!,,,B q7{#g1.E(EFq7{#g1.E(EF1aaadT***1aaadT*** XsCj!!1aAq/Q2666B x'*++Ib!a%0088Q??@AqqqD	!QZ"&Qq1uWaaaZ"555!QZ"&Qq1uWaaaZ"5551aaadR(((1aaadR((( %#tc*!$$$4A===)))mmm_---6Q'''4A===)))kkk]+++++rR   N)
__name__
__module____qualname__rQ   rb   rf   rm   rr   rv   r    rR   rP   r   r      s        S8 S8 S8j+5 +5 +5Z*8 *8 *8X
0 
0 
0( ( (( ( (*,, ,, ,, ,, ,,rR   r   c                       e Zd Zd ZdS )TestDltic           	      .   d}t          dgdg|          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        |k    sJ t          t          j        g           t          j        dg          d|          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        |k    sJ t          dgdgdd|          }t          |t                    sJ t          |t                     sJ t          |t                    rJ |j        |k    sJ t          t          t           d           t          t          t           ddddd           d S )Nr   r%   rh   r@   r(   )r   
isinstancer   r   r@   r.   r4   r   r   r9   
ValueError)r;   r@   ss      rP   test_dlti_instantiationz TestDlti.test_dlti_instantiation  s    !rdr"""!-.....!T"""""a%%%%%trzzzz "rx~~qR888!^,,,,,!T"""""a%%%%%trzzzz !rdAqR(((!Z(((((!T"""""a%%%%%trzzzz 	j$***j$1aA66666rR   N)r   r   r   r   r   rR   rP   r   r     s#        7 7 7 7 7rR   r   c                        e Zd Zd Zd Zd ZdS )TestStateSpaceDiscc                 `   d}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          |           t          ddddd           d S )	Nr   r%   r   r'   r(   r)   r   T)r   r.   r4   r;   r@   s     rP   test_initializationz&TestStateSpaceDisc.test_initialization=  s    1aA"%%%%A3aS1#"----28aVaV,--rx!qc
/C/C8aVH%%rx!2	? 	? 	? 	?1aA$''''''rR   c                 z   t          ddddd          }t          |                                t                     sJ t          |                                t                    sJ t          |                                t                    sJ t          |          |usJ |                                |usJ d S )Nr%   r'   r(   r)   r   r   )r   r   to_ssto_tfr   to_zpkr   r;   r   s     rP   test_conversionz"TestStateSpaceDisc.test_conversionF  s    q!Qd+++!''))Z00000!''))%566666!((**n55555 !}}A%%%%wwyy!!!!!!rR   c                     t          ddddd          }t          |j        dg           t          |j        dg           d S )Nr%   r   r   r*   r   )r   r   polesrj   r   s     rP   test_propertiesz"TestStateSpaceDisc.test_propertiesQ  sJ    
 q!Qd+++"&&&"&&&&&rR   Nr   r   r   r   r   r   r   rR   rP   r   r   <  sA        ( ( (	" 	" 	"' ' ' ' 'rR   r   c                        e Zd Zd Zd Zd ZdS )TestTransferFunctionc                     d}t          dd|           t          dgdg|           t          t          j        dg          t          j        dg          |           t          ddd           d S Nr   r%   r   r'   T)r   r.   r4   r   s     rP   r   z(TestTransferFunction.test_initialization\  sy    A"%%%%!qcb))))1#!"====A$''''''rR   c                 ~   t          ddgddgd          }t          |                                t                    sJ t          |                                t                     sJ t          |                                t                    sJ t          |          |usJ |                                |usJ d S )Nr%   r   rh   r   r   )r   r   r   r   r   r   r   r   s     rP   r   z$TestTransferFunction.test_conversiond  s    aVaW666!''))Z00000!''))%566666!((**n55555  ""!++++wwyy!!!!!!rR   c                     t          ddgddgd          }t          |j        dg           t          |j        dg           d S )Nr%   r   rh   r   r   r*   r   )r   r   r   rj   r   s     rP   r   z$TestTransferFunction.test_propertieso  sN    
 aVaW666"&&&"&&&&&rR   Nr   r   rR   rP   r   r   [  sA        ( ( (	" 	" 	"' ' ' ' 'rR   r   c                       e Zd Zd Zd ZdS )TestZerosPolesGainc                     d}t          ddd|           t          dgdgd|           t          t          j        dg          t          j        dg          d|           t          dddd           d S r   )r   r.   r4   r   s     rP   r   z&TestZerosPolesGain.test_initializationz  s    q!Q2&&&&sQCr****rx}}bhsmmQ2>>>>q!Q4((((((rR   c                 x   t          dddd          }t          |                                t                    sJ t          |                                t
                    sJ t          |                                t                     sJ t          |          |usJ |                                |usJ d S )Nr%   r'   r(   r   r   )r   r   r   r   r   r   r   r   s     rP   r   z"TestZerosPolesGain.test_conversion  s    1at,,,!''))Z00000!''))%566666!((**n55555 a  ))))xxzz""""""rR   N)r   r   r   r   r   r   rR   rP   r   r   y  s2        ) ) )	# 	# 	# 	# 	#rR   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Test_dfreqrespc                     t          dddgd          }g d}t          ||          \  }}g d}t          |j        |d	           g d
}t          |j        |d	           d S )Nr%   r   r   r   )r   r%   rV   w)gU0*?g;On?gfj+r)   decimal)gClÿg&WgZd;O?)r   r   r   realimag)r;   rO   r   Hexpected_reexpected_ims         rP   test_manualzTest_dfreqresp.test_manual  s     "!aY3777LL1%%%1 0//AFK;;;; 100AFK;;;;;;rR   c                 f   t          dddgd          }g d}t          ||          \  }}t          j        |dz            }t          j        |j        |          t          j        |j        |          z  }|j        }t          |j        |           |j	        }t          |j	        |           d S )Nr%   r   r   r   r   r%   rV   d   r   r-   )
r   r   r.   exppolyvalr$   rJ   r   r   r   )r;   rO   r   r   jwr   r   r   s           rP   	test_autozTest_dfreqresp.test_auto  s     "!aY37771%%%1VAF^^Jvz2&&FJ)C)CC fAFK000 fAFK00000rR   c                     t          dddgd          }d}t          j        dt          j        dd          }t	          ||	          \  }}t          ||           d S )
Nr%   r   r   r   rV   r   FendpointrW   )r   r.   r1   pir   r   )r;   rO   rX   
expected_wr   r   s         rP   test_freq_rangezTest_dfreqresp.test_freq_range  sg     "!aY3777[BE2>>>
1%%%1Az*****rR   c                 0   t          dgddgd          }t                      5 }|                    t          d           |                    t          d           t	          |d	          \  }}d d d            n# 1 swxY w Y   |d
         dk    sJ d S Nr%   rh   r   r   zdivide by zero)messagezinvalid value encounteredr'   rW   r   r   )r   r   filterRuntimeWarningr   )r;   rO   supr   r   s        rP   test_pole_onezTest_dfreqresp.test_pole_one  s     "1#2w3777   	*CJJ~/?J@@@JJ~/JJKKKVq)))DAq	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* trzzzzzzs   AA==BBc                 b    t          dgddg          }t          t          t          |           d S Nr%   )r   r9   r:   r   r;   rO   s     rP   
test_errorzTest_dfreqresp.test_error  s/    aS1a&!!ni88888rR   c                    t          dgg d          }t          j        g dg dg dg          }t          j        g dg          j        }t          j        g dg          }d}t          ||||          }dt          j        d	dd
          z  }t                      5 }|                    t                     t          ||          \  }	}
t          ||          \  }}d d d            n# 1 swxY w Y   t          |
|           d S )Nr'   )r%   r,   r   r   )r"   r   r   )r%   r   r   )r   r%   r   )r   r   r'   r   g      $@r"   r   )
r   r.   r4   r5   rk   r   r   r   r   r   )r;   	system_TFABCD	system_SSr   r   w1H1w2H2s                rP   test_from_state_spacez$Test_dfreqresp.test_from_state_space  sV    !ooo..	Hkkkiiii! " " Hiii[!!#Hiii[!!Aq!$$	")Bq$$$   	/CJJ'''yA...FByA...FB	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 	B#####s   AC..C25C2c                     t          g dgd          }t          dddg          }g d}t          ||          \  }}t          ||          \  }}t          ||           d S )Nr+   r    r%   r   r   r   )r   r   r   )r;   
system_ZPKr   r   r   r   r   r   s           rP   test_from_zpkzTest_dfreqresp.test_from_zpk  su    "cU3''
q$i((	:+++B9***BB#####rR   N)
r   r   r   r   r   r   r   r   r   r   r   rR   rP   r   r     s}        < < <1 1 1"+ + +	 	 	9 9 9
$ $ $*$ $ $ $ $rR   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )	Test_bodec                    d}t          dddg|          }dddt          j        g}t          ||          \  }}}g d}t	          ||d	
           g d}t	          ||d	
           t          t          j        |          |z  |           d S )Nr   r    r%   r   r   r"   r   )gD!gvq!g$~;#g0*(r)   r   )gzGgJAg_)Pg     f)r   r.   r   r   r   r   r4   )	r;   r@   rO   r   r   magphaseexpected_magexpected_phases	            rP   r   zTest_bode.test_manual  s     !#4yR888#q"% v+++C =<<Cq9999 BAAE>1==== 	b("-----rR   c                    t          dddgd          }t          j        dddt          j        g          }t	          ||          \  }}}t          j        |dz            }t          j        |j        |          t          j        |j        |          z  }d	t          j	        t          |                    z  }t          ||           t          j        t          j        |                    }	t          ||	           d S )
Nr    r%   r   r   r   r"   r   r-   g      4@)r   r.   r4   r   r   r   r   r$   rJ   log10absr   rad2degangle)
r;   rO   r   r   r   r   r   r   r   r   s
             rP   r   zTest_bode.test_auto  s     "#4yS999Hc325)**v+++CVAF^^Jvz2&&FJ)C)CC bhs1vv...C... BHQKK00E>22222rR   c                     d}t          dddgd          }d}t          j        dt          j        |d	          |z  }t	          ||
          \  }}}t          ||           d S )Nr   r    r%   r   r   rV   r   Fr   rW   )r   r.   r1   r   r   r   )r;   r@   rO   rX   r   r   r   r   s           rP   
test_rangezTest_bode.test_range  ss     !#4yS999[BE1u===B
f***3Az*****rR   c                 2   t          dgddgd          }t                      5 }|                    t          d           |                    t          d           t	          |d	          \  }}}d d d            n# 1 swxY w Y   |d
         dk    sJ d S r   )r   r   r   r   r   )r;   rO   r   r   r   r   s         rP   r   zTest_bode.test_pole_one  s     "1#2w3777   	/CJJ~/?J@@@JJ~/JJKKK!&A...MAsE	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ trzzzzzzs   AA>>BBc                 R    t          dgg dd          }t          |d           d S )Nr%   )r%   r   r   r   r   r'   rW   )r   r   r   s     rP   test_imaginaryzTest_bode.test_imaginary%  s7     "1#{{{s;;;frR   c                 b    t          dgddg          }t          t          t          |           d S r   )r   r9   r:   r   r   s     rP   r   zTest_bode.test_error+  s/    aS1a&!!neV44444rR   N)	r   r   r   r   r   r   r   r   r   r   rR   rP   r   r     sn        . . .&3 3 3"	+ 	+ 	+	 	 	  5 5 5 5 5rR   r   c                   $    e Zd ZdZd Zd Zd ZdS )TestTransferFunctionZConversionz=Test private conversions between 'z' and 'z**-1' polynomials.c                 >   t          j        g d          }t          j        g d          }t          j        ||          \  }}t	          ||           t	          ||           t          j        ||          \  }}t	          ||           t	          ||           d S )Nr&   r(   r)   )      @      r.   r/   r   
_z_to_zinvr   
_zinv_to_zr;   r$   rJ   num2den2s        rP   	test_fullz)TestTransferFunctionZConversion.test_full4  s    j%%j%%%0c::
dT"""T"""%0c::
dT"""T"""""rR   c                 F   t          j        ddg          }t          j        g d          }t          j        ||          \  }}t	          g d|           t	          ||           t          j        ||          \  }}t	          g d|           t	          ||           d S )Nr&   r(   )2   r   r   )r   r'   r(   )r&   r(   r   r   r   s        rP   test_numeratorz.TestTransferFunctionZConversion.test_numerator@  s    j#q""j$$%0c::
dT***T"""%0c::
dT***T"""""rR   c                 F   t          j        g d          }t          j        ddg          }t          j        ||          \  }}t	          ||           t	          g d|           t          j        ||          \  }}t	          ||           t	          g d|           d S )Nr   r   r   )r   r#   r   )r   r   r   r   r   s        rP   test_denominatorz0TestTransferFunctionZConversion.test_denominatorL  s    j$$j#q""%0c::
dT"""T***%0c::
dT"""T*****rR   N)r   r   r   __doc__r   r  r  r   rR   rP   r   r   1  sG        GG
# 
# 
#
# 
# 
#
+ 
+ 
+ 
+ 
+rR   r   )!numpyr.   numpy.testingr   pytestr   r9   scipy._lib._array_apir   r   r   r   scipy.signalr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   rP   <module>r
     sd       + + + + + + * * * * * *           = = = = = = = = = = = = = = = = = = = = = = = = = = = =
J, J, J, J, J, J, J, J,Z7 7 7 7 7 7 7 7>' ' ' ' ' ' ' '>' ' ' ' ' ' ' '<# # # # # # # #*X$ X$ X$ X$ X$ X$ X$ X$vE5 E5 E5 E5 E5 E5 E5 E5P%+ %+ %+ %+ %+ %+ %+ %+ %+ %+rR   