Ë
    7^(h¤r  ã                   ó¸  — d dl 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 d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dl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/m0Z0m1Z1m2Z2  ed«      Z3 ed«      Z4d„ Z5d„ Z6d„ Z7d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd „ ZBd!„ ZCd"„ ZDd#„ ZEd$„ ZFd%„ ZGd&„ ZHe!d'„ «       ZIy())é    )Úrandint)ÚFunction)ÚMul)ÚIÚRationalÚoo)ÚEq)ÚS)ÚDummyÚsymbols)ÚexpÚlog)Útanh)Úsqrt)Úsin)ÚPoly)Úratsimp)Úcheckodesol)Úslow)Úriccati_normalÚriccati_inverse_normalÚriccati_reducedÚmatch_riccatiÚinverse_transform_polyÚlimit_at_infÚcheck_necessary_condsÚ
val_at_infÚconstruct_c_case_1Úconstruct_c_case_2Úconstruct_c_case_3Úconstruct_d_case_4Úconstruct_d_case_5Úconstruct_d_case_6Úrational_laurent_seriesÚsolve_riccatiÚfÚxc                 óD   — t        t        |  | «      t        d| «      «      S ©Né   )r   r   )Úmaxints    úb/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/solvers/ode/tests/test_riccati.pyÚrand_rationalr-      s   € Ü”G˜V˜G VÓ,¬g°a¸Ó.@ÓAÐAó    c                 ój   — t        t        |dz   «      D �cg c]  }t        |«      ‘Œ c}| «      S c c}w r)   )r   Úranger-   )r'   Údegreer+   Ú_s       r,   Ú	rand_polyr3   !   s*   € Ü´°f¸Q±h³Ö@¨1”˜vÕ&Ò@À!ÓDÐDùÒ@s   –0c                 óÈ   — t        d|«      }t        d|«      }t        | ||«      }t        | ||«      }|t        d| «      k(  rt        | ||«      }|t        d| «      k(  rŒ||z  S )Nr*   r   )r   r3   r   )r'   r1   r+   ÚdegnumÚdegdenÚnumÚdens          r,   Úrand_rational_functionr9   %   sl   € Ü�Q˜Ó€FÜ�Q˜Ó€FÜ
�A�v˜vÓ
&€CÜ
�A�v˜vÓ
&€CØ
”�a˜“Ò
Ü˜˜6 6Ó*ˆð ”�a˜“Ó
à�‰9Ðr.   c                 óX  — | }|j                  |«      }t        |dd«      }t        |dd«      }|dk(  rt        |dd«      }|dk(  rŒt        |||z  z
  ||dz  z  z
  «      }t        |j                  «       |||z  z   ||dz  z  z   «      }t        ||«      }	t	        ||	«      dk(  sJ ‚||||fS )Nr*   é   r   é   )Tr   )Údiffr9   r   r	   r   )
Úratfuncr'   ÚyfÚyÚypÚq1Úq2Úq0ÚeqÚsols
             r,   Úfind_riccati_oderG   /   sÂ   € Ø€AØ	
�‰�‹€BÜ	  1 aÓ	(€BÜ	  1 aÓ	(€BØ
�Š'Ü# A q¨!Ó,ˆð �‹'ä	��b˜‘d‘˜R  1¡™WÑ$Ó	%€BÜ	ˆB�G‰G‹I�r˜B˜r™E‘z B r¨1¡u¡HÑ,Ó	-€BÜ
ˆR�‹)€CÜ�r˜3Ó 9Ò,Ð,Ð,Øˆr�2�rˆ>Ðr.   c                  óº	  — t         t         dz
  z  t         dz  dz   dz  t         z  t         t         dz   t         dz
  z  t         t         dz  dz  t        d«      dz  z   z  dz  z
  ddt         z  z  z
  fdt         z  dz   dt         z  dz   z  ddt         z  z
  t         dz   z  dt         z  dt         z  dt         z  dz   z  dt         z  dz   z  ddt         z  z
  t        dt         dz   d¬«      z  z
  ddt         z  z  z
  fd	dt         dz  z  dz
  z  d
dt         z
  dt         z  dz
  z  dt         z
  dt         z  dz
  dt         dz  z  dz
  z  z  dt         z  dz
  t        ddt         z
  d¬«      dt         z  dz
  dz  z  ddt         z  dz
  z  z
  z  t        ddt         z
  d¬«      z  z
  ft         dt         z  dz
  dt         z  dz   z  t         dz  dt         z  dz
  z  t         dz   dt         z  dz
  z  dt         z  dz
  t        ddt         z  dz   d¬«      z  z
  dt         z  dz
  dt         dz  z  dt         z  dz
  dz  z  dt         dz  z  dt         z  dz
  z  z   z  dt         dz  z  z  z
  fg} | D ]C  \  }}}}|t        |t         ||«      k(  sJ ‚|t	        |t         ||«      j                  «       k(  rŒCJ ‚ dt         z  dz
  dt         dz  z  dt         z  z   dz
  z  dt         z  t          dz
  dt         z  z  dt         dz  z  ddt         z  z  t          dz
  dt         dz  z  z  z   z  t          dz
  dz  z  dt          dz
  z  z   dt         z  d	dt         z  z  t          dz
  dt         dz  z  z  z
  z  t          dz
  z  dt         z  dz
  t          dz
  z  dt         z  dt         dz  z  dt         z  z   dz
  z  z  z
  dt         z  z   fddt         dz  z  z  dt         z  t          dz
  dt         z  z  dt         dz  z  ddt         z  z  t          dz
  dt         dz  z  z  z   z  t          dz
  dz  z  dt          dz
  z  z   dt         z  d	dt         z  z  t          dz
  dt         dz  z  z  z
  z  t          dz
  z  dt         z  z   t        dt          dz
  d¬«      dt         dz  z  z  z
  fg} | D ]E  \  }}}}}|t        |t         ||«      k(  sJ ‚|t	        |t         |||«      j                  «       k(  rŒEJ ‚ y)ar  
    This function tests the transformation of the
    solution of a Riccati ODE to the solution of
    its corresponding normal Riccati ODE.

    Each test case 4 values -

    1. w - The solution to be transformed
    2. b1 - The coefficient of f(x) in the ODE.
    3. b2 - The coefficient of f(x)**2 in the ODE.
    4. y - The solution to the normal Riccati ODE.
    r*   r<   é   r;   é   éûÿÿÿF©Úevaluateéÿÿÿÿr   é   éüÿÿÿé   é   é	   é   éúÿÿÿéþÿÿÿN)r'   r
   r   r   r   Úcancel)ÚtestsÚwÚb1Úb2r@   Úbps         r,   Útest_riccati_transformationr]   ?   s`  € ô 	
Œ1ˆq‰5‰	Ü	
ˆA‰�‰�1‰”Q‰Ü	Ü	
ˆA‰ˆŒq�1‰u‰œœ1˜a™4 ™6¤A a£D¨¡F™?Ñ+¨AÑ-Ñ-°°1´Q±3±Ñ7ð	ð 
Œ1‰ˆq‰�1”Q‘3˜‘7ÑØ	
ˆQŒq‰S‰”1�q‘5ÑØ	Œ!‰Ø
Œ1‰ˆa”‰c�A‰g‰˜œ!™˜a™Ñ  A¨¬!©¡G¬c°!´Q¸±UÀUÔ.KÑ#LÑLÈqÐRSÔTUÑRUÉwÑVð	ð 	ˆAŒa�‰d‰F�Q‰J‰Ø	Ø	
ŒQ‰�”1‘�q‘ÑØ	
ŒQ‰�!”A‘#˜‘'˜Aœa ™d™F Q™JÑ'Ñ(¨A¬a©C°!©G´c¸"¸aÄ!¹eÈeÔ6TÐVWÔXYÑVYØ	ñW
ØñVñ 7Ø�1”Q‘3˜‘7‘ñ7ñ ,Ü! ! Q¬¡U°UÔ;ñ,=ñ 	=ð	ô 	
Ø	
Œ1‰ˆr‰�B”q‘D˜1‘HÑÜ	ˆ1‰ˆa”‰c�A‰g‰Ü	
ˆA‰ˆˆq”‰s�Q‰w‰˜1œQ™3 ™8¤c¨!¨R´©T°A©XÀÔ&FÑGÑGÈ1ÌQÉ3ÐQRÉ7ÐUWÔXYÐ[\ÑX\ÑU\Ð^_Ô`aÑ^aØ
ñ_Øñ^ñ VØ”A�q‘D‘&˜!œA™# ™'Ñ"ñV#ñ K$Ø%&¤q¨!¡t¡VñK-ñ 	-ð	ð)€Eð6 ò B‰ˆˆ2ˆr�1Ø”N 1¤a¨¨RÓ0Ò0Ð0Ð0ØÔ*¨1¬a°°RÓ8×?Ñ?ÓAÓAÐAÐAðBð 
ŒA‰�‰�A”a˜‘d‘F˜Qœq™S‘L 1Ñ$Ñ%Ø
Œ1‰Ü
ˆˆa‰�!”A‘#‰Ø	Œ!ˆQ‰$‰��1”Q‘3‘œA˜2 ™6 A¤a¨¡d¡FÑ+Ñ+Ñ,¬q¨b°1©f°q©[Ñ8¸1¼q¸bÀ1¹f¹:ÑEØ
Œ1‰ˆb�!”A‘#‰hœ1˜"˜q™& 1¤Q¨¡T¡6Ñ*Ñ*Ñ+¬a¨R°!©VÑ4¸¼1¹¸q¹ÄAÀ2ÈÁ6Ñ7JÈAÌaÉCÐQRÔSTÐVWÑSWÑQWÐZ[Ô\]ÑZ]ÑQ]Ø
ñRñ Mñ 8ñ 	Ø”!‘ñ	ðð 	
ˆ1ŒQ�‰T‰6‰
Ø
Œ1‰Ü
ˆˆa‰�!”A‘#‰Ø	Œ!ˆQ‰$‰��1”Q‘3‘œA˜2 ™6 A¤a¨¡d¡FÑ+Ñ+Ñ,¬q¨b°1©f°q©[Ñ8¸1¼q¸bÀ1¹f¹:ÑEØ
Œ1‰ˆb�!”A‘#‰hœ1˜"˜q™& 1¤Q¨¡T¡6Ñ*Ñ*Ñ+¬a¨R°!©VÑ4°q¼±sÑ:¼SÀÄQÀBÈÁFÐUZÔ=[Ð]^Ô_`ÐbcÑ_cÑ]cÑ=dÑdðð€Eð  "ò FÑˆˆ2ˆr�2�qØ”N 1¤a¨¨RÓ0Ò0Ð0Ð0ØÔ*¨1¬a°°R¸Ó<×CÑCÓEÓEÐEÐEñFr.   c                  óŒ
  — t        t        «      j                  t        «      t        dz  z
  t        t        t        «      z  z
  t        t        t        «      dz  z  z
  t        t        «      j                  t        «      t        t        «      dz  z   t        dz  z   t        dz  dz  z
  ddt        dz  z  z  z
  fdt        z  dt        z  dz   z  t        t        «      j                  t        «      z   t        dz   t        t        «      dz  z  t        z  z
  dt        dz  z  dt        z  t         dz
  t        dz  z  z   dz  z  dt         dz
  dz  z  z  t        dt         dz
  d¬	«      dt        z  dz   z  z   t        t        «      dz  z   t        t        «      j                  t        «      z   d
t        dz   t        z  z   t        t         dz
  z  z  z
  ft        t        «      dz  t        t        «      j                  t        «      z   t        dz
  t        t        «      z  t         t	        d«      dz  z
  z  z
  dt        z  dz
  dz   ddt        z  dz   dz  z  z  dt        z  dz
  dt        z  dz   dz  z  z   t        t        «      dz  z   t        t        «      j                  t        «      z   ddt        z  dz   z  z
  ft        t        «      j                  t        «      t        t        «      dz  t        z  z
  t        t        «      dz  t        t        «      j                  t        «      z   ddt        dz  z  z  z   fdt        dz   t        z
  dz   z  t        dz  dt        z  z   dz   z  t        t        «      j                  t        «      z   t        t        «      dz  t        z  z   t        t        «      dz  t        t        «      j                  t        «      z   dt        dz  z  t        dz  dt        z  z   dz   z  dt        z  t        dz  dt        z  z   dz   z  z   dt        dz  dt        z  z   dz   z  z
  t        z  z   ddt        dz  z  z  z   fdt        z  dt        z  dz   z  t        t        «      j                  t        «      z   t        dz   t        t        «      z  t        z  z
  dft        t        «      t        t        «      j                  t        «      z  dt        z  z
  t        t        «      dz  z   t        t        «      dz  t        dz  dz
  z  z   dfg} | D ]  \  }}|t        |t         t        «      k(  rŒJ ‚ y)zÌ
    This function tests the transformation of a
    Riccati ODE to its normal Riccati ODE.

    Each test case 2 values -

    1. eq - A Riccati ODE.
    2. normal_eq - The normal Riccati ODE of eq.
    r<   r;   rO   rT   rS   r*   éýÿÿÿFrL   rN   N)r&   r'   r=   r   r
   r   )rX   rE   Ú	normal_eqs      r,   Útest_riccati_reducedra   �   sQ  € ô 	
Œ!‹�	‰	”!‹”q˜!‘tÑœa¤¤!£™fÑ$¤q¬¬1«¨q©¡yÑ0ä	Œ!‹�	‰	”!‹”qœ“t˜Q‘wÑ¤ A¡Ñ%¬¨1©¨Q©Ñ.°°A´a¸±d±F±Ñ;ðð 	
Œ!‰ˆQŒq‰S�1‰W‰œœ!›Ÿ	™	¤!›Ñ$¬¨A©¬q´«t°Q©w¡´qÑ'8Ñ8à
Œ1ˆa‰4‰�”1‘œ˜˜Q™¤ 1¡‘}Ñ$ qÑ(Ñ(¨!¬a¨R°!©V°a©K©-Ñ8¼3¸qÜ	
ˆˆQ‰˜ô< Ø!"¤1¡ q¡ñ<*ñ 	*Ü,-¬a«D°!©Gñ	4Ü67¼³d·i±iÄ³lñ	Cà”�Q‘œ‘	‰>œA¤˜r A™v™JÑ
'ñ	(ðô 	
Œ!‹ˆa‰”!”A“$—)‘)œA“,Ñ¤! a¡%¬¬1«¡´¨r´A°a³D¸±F©{Ñ!;Ñ;à
ŒA‰#�‰'�A‰ˆ�q˜!œA™# ™' A™‘~Ñ&¨!¬A©#°©'°A´a±C¸!±G¸a±<Ñ)?Ñ?Ü	Œ!‹ˆa‰ñ	Ü”A“$—)‘)œA“,ñ	Ø!" A¤a¡C¨!¡G¡ñ	-ðô 	
Œ!‹�	‰	”!‹”qœ“t˜Q‘wœq‘yÑ ä	Œ!‹ˆa‰”!”A“$—)‘)œA“,Ñ  A¤a¨¡d¡F¡Ñ+ðð 	ŒQ�‰TˆE”A‰I˜‰MÑœA˜q™D 1¤Q¡3™J¨™NÑ+¬a´«d¯i©i¼«lÑ:¼Q¼q»TÀ1¹WÄQ¹YÑFä	Œ!‹ˆa‰”!”A“$—)‘)œA“,Ñ !¤A q¡D¡&¬!¨Q©$°´1±©*°q©.Ñ"9¸A¼a¹CÄÀAÁØ
ŒA‰#ñBØñBñ =ñ #Øœ˜1™˜q¤™s™
 Q™Ñ'ñ#(Ü)*ñ"+ñ 	+Ø-.°´!°Q±$±©Zñ	8ðð 	
Œ!‰ˆQŒq‰S�1‰W‰œœ!›Ÿ	™	¤!›Ñ$¬¨A©¬q´«t¡|´A¡~Ñ5àðô 	
Œ!‹ŒQŒq‹T�Y‰Y”q‹\Ñ˜Aœa™CÑ¤!¤A£$ q¡&Ñ(¬1¬Q«4°©7´A°q±D¸1±HÑ+=Ñ=àððG'€EðP ò 6‰ˆˆIØœO¨B´´1Ó5Ó5Ð5Ð5ñ6r.   c                  óš  — t        t        «      j                  t        «      dt        dz  z  dt        dz  z  z
  dt        z  z
  dz   dt        dz  z  d	t        dz  z  z
  d
t        dz  z  z   dt        z  z   dz
  z  z
  dz
  t        t        «      dz  dt        z  dz   z  z
  t        d«      dz  t        z
  t        t        «      z  t        d«      dz  dt        z  dz  z
  z  z
  ddt        dz  z  dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        z  z   dz
  z  dt        dz  z  dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        z  z   dz
  z  z
  dt        z  dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        z  z   dz
  z  z
  dz   ddt        dz  z  d	t        dz  z  z
  d
t        dz  z  z   dt        z  z   dz
  z  z   t	        dddt        z  z
  d¬«      d t        z  dz
  z  ddt        z  dz   z  ft        t        «      j                  t        «      dt        z  dz  z   t        dz  dz
  t        t        «      dz  z  z
  dt        z  dz  dz   t        t        «      z  dt        z  dz   z  z
  t        d!«      dz  z
  d"t        dz  z  d#t        z  z   d$z   d%t        dz  z  d&t        dz  z  z   z  z
  dd't        z  dz  t        d!«      dz  z   ddt        dz  z  dt        dz  z  z   z  z   d(d)t        dz  z  dt        z  z   z  z   d"d%t        z  d&z   z  z   t	        dd*t        z  dz
  d¬«      d t        z  dz   z  t        dz  dz
  ft        t        «      j                  t        «      d+t        d,z  z  d-t        dz  z  z
  d.t        dz  z  z   d/t        dz  z  z
  d0t        z  z   d1z
  d)t        dz  z  d&t        d,z  z  z
  d2t        dz  z  z   d3t        dz  z  z
  d4t        dz  z  z   d1t        z  z
  z  z
  t        d5«      d z  z
  t        t        d«      dz  z
  t        t        «      z  t        dz  t        d«      dz  z
  z  z
  t        dz  dz
  t        t        «      dz  z  dt        z  z  z
  dd+t        dz  z  d)t        d,z  z  d&t        dz  z  z
  d2t        dz  z  z   d3t        dz  z  z
  d4t        z  z   d1z
  z  d-t        dz  z  d)t        d,z  z  d&t        dz  z  z
  d2t        dz  z  z   d3t        dz  z  z
  d4t        z  z   d1z
  z  z
  d.t        dz  z  d)t        d,z  z  d&t        dz  z  z
  d2t        dz  z  z   d3t        dz  z  z
  d4t        z  z   d1z
  z  z   d6t        z  d7t        d,z  z  dt        dz  z  z
  d8t        dz  z  z   d9t        dz  z  z
  d:t        z  z   d)z
  z  z
  t        d5«      d z  z   d7dt        dz  z  dt        d,z  z  z
  d;t        dz  z  z   d<t        dz  z  z
  d=t        dz  z  z   d7t        z  z
  z  z
  d>dt        d,z  z  dt        dz  z  z
  d;t        dz  z  z   d<t        dz  z  z
  d=t        z  z   d7z
  z  z   t	        dddt        z  z
  d¬«      t        dz
  z  t	        dd t        z
  d¬«      d t        z  z  ft        t        «      j                  t        «      t        t        d«      dz  z  t        t        d«      dz  z  dz
  z  z
  t        dz  t        t        «      z  z   t        t        t        «      dz  z  t        t        d«      dz  z  z  z   dd?d?d?ft        t        «      j                  t        «      t        t        dz  «      z
  t        t        «      t        t        «      z  z   t        t        «      t        t        «      dz  z  z   dd?d?d?ft        t        «      j                  t        «      t        t        t        t        «      z   «      z
  t        t        «      z   t        dz  t        t        «      dz  z  z   dd?d?d?fdt        dz  z
  t        t        «      j                  t        d«      z  dt        z  t        t        «      j                  t        «      z  z
  dt        t        «      z  z   dd?d?d?ft        t        «      j                  t        «      t        dz  z
  t        dz  t        t        «      z  z   t        dz  t        dz   z  t        t        «      dz  z  z   dd?d?d?ft        t        «      j                  t        «      t        t        «      dz  z  t        dz  dz
  t        dz  dz   z  t        t        «      z  z   ddt        z  dz   z  z   t        t        «      dz  z   dd?d?d?fg	} | D ]4  \  }}}}}t        |t         t        «      \  }}||k(  sJ ‚|sŒ+|||g|k(  rŒ4J ‚ y@)Aa  
    This function tests if an ODE is Riccati or not.

    Each test case has 5 values -

    1. eq - The Riccati ODE.
    2. match - Boolean indicating if eq is a Riccati ODE.
    3. b0 -
    4. b1 - Coefficient of f(x) in eq.
    5. b2 - Coefficient of f(x)**2 in eq.
    i•  r;   ir  r<   éN   é\   éó   rO   i±  iN  é´   éH   r*   Té-   é   éi   é^   é   rQ   éb   é   éQ   é;  i  é<   é   rN   rT   FrL   rS   é
   i	  i§  é¢   iD  éØ   rP   é/   é$   rV   i0  rJ   ié  iw  il  éÆ   él   iÝ  i7  ih  é   i$  rR   éŸ   é½   éx   é5   é?   é(   é   r   N)r&   r'   r=   r
   r   r   r   r   r   r   r   )rX   rE   ÚresÚb0rZ   r[   ÚmatchÚfuncss           r,   Útest_match_riccatir†   ·   sÌ	  € ô 	
Œ!‹�	‰	”!‹˜œA˜q™D™ 3¤q¨!¡t¡8Ñ+¨b´©dÑ2°RÑ7¸#¼aÀ¹d¹(Ø
Œa�‰d‰(ñ;Øœ˜A™‘Xñ;Ø #¤A¡ñ;&Ø(*ñ;+ñ ,ñ 	,Ø./ñ	0Ü23´A³$¸±'¸1¼Q¹3À¹7Ñ2Cñ	DäˆQ‹4�‰6”A‰:”qœ“tÑ
œQ˜q›T !™V a¬¡c¨!¡e™^Ñ
,ñ	-ð 	à
Œ1ˆa‰4‰�”A�q‘D‘˜3œq !™t™8Ñ# b¬¨A©¡gÑ-°´1±Ñ4°qÑ8Ñ9¸B¼qÀ!¹t¹GØ	ŒAˆq‰D‰�3”q˜!‘t‘8Ñ	˜b¤ A¡™gÑ	%¨¬1©Ñ	,¨qÑ	0ñ=2ñ 	2Ø46´q±D¸"¼QÀ¹T¹'ØŒAˆq‰D‰ñ;Ø”q˜!‘t‘8ñ;Ø ¤™dñ;#Ø%'ñ;(ñ 5)ñ	)à+,ñ	-à/1°3´q¸!±t±8¸cÄ!ÀQÁ$¹hÑ3FØ
Œa�‰d‰(ñ4Øœ‘Uñ4Øñ4 ñ 0!ñ	!ô
 	ˆB��A”a‘C‘ %Ô(¨!¬A©#°©'Ñ2à	ˆ1ŒQ‰3�‰7‰ðô" 	
Œ!‹�	‰	”!‹�qœ‘s˜2‘vÑ¤ 1¡ q¡¬!¬A«$°©'Ñ 1Ñ1°Q´q±S¸±UØ	ñ6
ÜŒQ‹4ñ5Ø”1‘�q‘ñ5ñ 	Ü˜b›E "™Hñ	%Ø(+¬A¨q©D©°3´q±5Ñ(8¸3Ñ(>Ø
Œa�‰d‰(�Sœ˜A™‘XÑ
ñ(ñ	ð 	à
Œ1‰ˆR‰”!�B“%˜‘(Ñ˜Q ¤! Q¡$¡¨¬1¨a©4©¡Ñ0Ñ0°2°r¼!¸Q¹$±wØ
ŒQ‰$ñ8ñ 4ñ 	Ø�sœ1‘u˜s‘{Ñ#ñ	$ô 	ˆB�”1‘�q‘ 5Ô)¨1¬Q©3°©7Ñ3ä	ˆ!‰ˆa‰ðô 	
Œ!‹�	‰	”!‹˜œA˜q™D™ 3¤q¨!¡t¡8Ñ+¨c´!°Q±$©hÑ6¸¼QÀ¹T¹ÑAØ
Œa‰%ñØñØœ1˜a™4™ #¤a¨¡d¡(Ñ*¨S´°A±©XÑ5¸¼A¸q¹D¹Ñ@ØŒAˆq‰D‰ñØ”q‘5ñññ 	ä˜b›E !™Gñ	$ä'(¬1¨Q«4°©6¡z´1´Q³4Ñ&7¼¸1¹Ü	ˆ!‹ˆQ‰ñ:ñ 'ñ	ô �Q‘3˜‘7œAœa›D !™GÑ# Q¤q¡SÑ)ñ	*ð
 	àŒAˆq‰D‰�"”Q˜‘T‘'˜C¤ 1¡™HÑ$ s¬1¨a©4¡xÑ/°#´a¸±d±(Ñ:¸SÄ¹UÑBØññ 	Ø”1�a‘4‰x˜œA˜q™D™ 3¤q¨!¡t¡8Ñ+¨c´!°Q±$©hÑ6¸¼QÀ¹T¹ÑAØŒA‰ñØññ ñ	àœ1˜a™4‘x ¤A q¡D¡¨3¬q°!©t©8Ñ!3°c¼!¸Q¹$±hÑ!>ÀÜ	ˆ1‰ñBñ "Ø”1‰uñ"Øñ"ñ ñ	ð "¤!™e R¬¨1©¡W¨r´!°Q±$©wÑ%6¸¼QÀ¹T¹Ñ%AØŒAˆq‰D‰ñ&Ø”q‘5ñ&Øñ&ñ ñ	ô "# 2£ q¡ñ		)ð ,.¨q´°A±©v¸¼1¸a¹4¹Ñ/?Ø
Œ1ˆa‰4‰ñ0Ø”Q˜‘T‘'ñ0Øœq !™t™Gñ0$Ø&(¬¡dñ0+ñ ,,ñ		,ð
 /1°!´A°q±D±&¸2¼aÀ¹d¹7Ñ2BØ
ŒQ�‰T‰'ñ3Ø”q˜!‘t‘Gñ3Ø ¤™dñ3#Ø%'ñ3(ñ /)ñ	)ô 	ˆB��A”a‘C‘ %Ô(¬!¨a©%Ñ0äˆB�”A‘ Ô&¨¬!©Ñ,ð%ô, 	
Œ!‹�	‰	”!‹”qœ1˜Q›4 ™6‘{¤A¬¨!«¨Q©¡K°!¡OÑ4Ñ4´q¸!±t¼A¼a»D±yÑ@Ü	Œ!ŒA‹$�‰'‰	”1”q˜“t˜A‘v‘;Ññ	 àˆq�!�Qðô 	
Œ!‹�	‰	”!‹”sœ1˜a™4“yÑ ¤3¤q£6¬!¬A«$¡;Ñ.´´Q³¼¼!»¸a¹±Ñ?Øˆq�!�Qðô
 	
Œ!‹�	‰	”!‹”tœA¤¤Q£™KÓ(Ñ(¬1¬Q«4Ñ/´!°Q±$´q¼³t¸Q±w±,Ñ>Øˆq�!�Qðð 
ŒQ�‰T‰”1”Q“4—9‘9œQ “?Ñ" Q¤q¡S¬¬1«¯©´1«Ñ%5Ñ5¸¼1¼Q»4¹Ñ?Øˆq�!�Qðô
 	
Œ!‹�	‰	”!‹”q˜!‘tÑœa ™d¤1¤Q£4™iÑ'¬1¨a©4´°Q±©<¼¼1»¸q¹Ñ*@Ñ@Øˆq�!�Qðô
 	
Œ!‹�	‰	”!‹”Q”q“T˜1‘WÑ¤ 1¡ q¡¬1¨a©4°!©8Ñ4´Q´q³TÑ9Ñ9¸A¸qÄ¹sØ
ñ@ñ =ñ 	Ü”‹t�Q‰wñ	àˆq�!�QððWO€Eð`  %ò )ÑˆˆC��R˜Ü$ R¬¬AÓ.‰ˆˆuØ˜Š|Ðˆ|ÚØ˜˜B�< 5Ó(Ð(Ð(ñ	)r.   c                  óˆ  — t        dt        dz  z  dt        dz  z  z   dt        z  z
  dz   t        «      t        dt        dz  z  t        dz  z
  d	t        dz  z  z   d
t        d
z  z  z   dt        dz  z  z   dt        d	z  z  z   d
t        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  d	t        z  z   dz   t        «      d
ft        dt        «      t        dt        dz  z  dt        dz  z  z   dt        dz  z  z   dt        z  z
  dz
  t        «      dft        dt        dz  z  dt        dz  z  z
  dt        z  z   dz
  t        «      t        dt        dz  z  dt        dz  z  z   dt        z  z
  dz
  t        «      dft        dt        dz  z  dt        d
z  z  z
  dt        dz  z  z
  dt        d	z  z  z   dt        dz  z  z   t        dz  z
  t        dz  z   dt        z  z
  t        «      t        dt        dz  z  t        z   t        «      dft        d	t        dz  z  dt        d	z  z  z   dt        dz  z  z
  dt        dz  z  z
  t        dz  z   dt        z  z
  dz   t        «      t        dt        dz  z  dt        dz  z  z   dt        dz  z  z
  dt        z  z   dz   t        «      dfg} | D ]  \  }}}t        ||t        «      |k(  rŒJ ‚ y)a  
    This function tests the valuation of rational
    function at oo.

    Each test case has 3 values -

    1. num - Numerator of rational function.
    2. den - Denominator of rational function.
    3. val_inf - Valuation of rational function at oo
    rs   r;   rQ   r<   é   rT   ióÿÿÿrS   rJ   rI   rO   é   r*   é÷ÿÿÿé   é   rU   rK   rR   r   iòÿÿÿrV   N)r   r'   r   )rX   r7   r8   Úvals       r,   Útest_val_at_infrŽ     sÅ  € ô 	ˆR”�1‘‰W�qœ˜A™‘vÑ ¤1¡Ñ$ qÑ(¬!Ó,ÜˆS”�B‘‰Yœ˜A™Ñ ¤! Q¡$¡Ñ&¨¬1¨a©4©Ñ/°"´Q¸±T±'Ñ9¸A¼aÀ¹d¹FÑBÀQÄqÈ!ÁtÁVÑKÈbÔQRÐTUÑQUÉgÑUÐXYÔZ[Ð]^ÑZ^ÑX^Ñ^ÐabÔcdÑadÑdÐgiÑiÔklÓmØ	
ðô 	ˆQ”‹
ÜˆR”�1‘‰W�qœ˜A™‘vÑ ¤1 a¡4¡Ñ'¨!¬A©#Ñ-°Ñ2´AÓ6Ø	
ðô 	ˆR”�1‘‰W�qœ˜A™‘vÑ ¤!¡Ñ# aÑ'¬Ó+ÜˆR”�1‘‰W�rœ!˜Q™$‘wÑ ¤1¡Ñ$ qÑ(¬!Ó,Ø	
ðô 	ˆR”�1‘‰W�rœ!˜Q™$‘wÑ ¤A q¡D¡Ñ(¨1¬Q°©T©6Ñ1°A´a¸±d±FÑ:¼QÀ¹TÑAÄAÀqÁDÑHÈ2ÌaÉ4ÑOÔQRÓSÜˆS”�A‘‰Xœ‰\œ1ÓØ	ðô 	ˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜r¤! Q¡$™wÑ&¨¬1¨a©4©Ñ/´!°Q±$Ñ6¸¼1¹Ñ<¸qÑ@Ä!ÓDÜˆR”�1‘‰W�qœ˜A™‘vÑ ¤! Q¡$¡Ñ&¨¬A©Ñ-°Ñ2´AÓ6Ø	ðð1€Eð: ò .‰ˆˆS�#Ü˜#˜s¤AÓ&¨#Ó-Ð-Ð-ñ.r.   c                  óœ   — t        dg d¢«      dk(  sJ ‚t        dg d¢«      dk(  sJ ‚t        dg d¢«      dk(  sJ ‚t        dg d¢«      d	k(  sJ ‚y
)zt
    This function tests the necessary conditions for
    a Riccati ODE to have a rational particular solution.
    r_   )r*   r<   rO   Fr*   r<   )r;   r*   rT   éöÿÿÿ)r*   r<   rQ   rR   TN)r   © r.   r,   Útest_necessary_condsr’   F  sX   € ô ! ¢YÓ/°5Ò8Ð8Ð8ä  ¢IÓ.°%Ò7Ð7Ð7ä  ¢IÓ.°%Ò7Ð7Ð7ä  ¢mÓ4¸Ò<Ð<Ñ<r.   c            	      ó"  — dt         dz  z  dt         dz  z  z
  dt         z  z
  dz
  dt         z  dz   z  dt         dz  z  d	t         d
z  z  z   dt         dz  z  z   dt         dz  z  z   dt         z  z
  dz
  dt         dz  z  dt         dz  z  z
  dt         z  z   dz   z  dt         dz  z  dt         d
z  z  z
  dt         dz  z  z   dt         dz  z  z
  dt         z  z
  dz
  dt         d
z  z  dt         dz  z  z   dt         dz  z  z   dt         z  z   dz
  z  dt         dz  z  dt         dz  z  z   dt         dz  z  z
  dt         d
z  z  z
  dt         dz  z  z   dt         z  z   dz
  dt         dz  z  dt         z  z
  dz
  z  dt         dz  z  dt         dz  z  z
  dt         d
z  z  z   dt         dz  z  z
  dt         z  z   dz   dt         dz  z  dt         dz  z  z
  dt         dz  z  z   dt         d
z  z  z   dt         dz  z  z
  dt         dz  z  z   dt         z  z   dz
  z  g} | D ]x  }|j                  «       D �cg c]  }t        |t         «      ‘Œ c}\  }}t        ||t         «      \  }}|j	                  t         dt         z  «      j                  «       ||z  k(  rŒxJ ‚ yc c}w )zi
    This function tests the substitution x -> 1/x
    in rational functions represented using Poly.
    r‹   r;   rQ   r<   rT   é   rf   rJ   r€   rO   éP   é   rq   é–   éK   rR   iñÿÿÿrw   rI   rr   rl   éd   éð   rs   rh   rS   r*   N)r'   Úas_numer_denomr   r   ÚsubsrW   )Úfnsr&   Úer7   r8   s        r,   Útest_inverse_transform_polyrŸ   U  sµ  € ð Œˆ1‰�Wˆq”�A‘‰vÑ˜œ!™Ñ˜aÑ "¤Q¡$¨¡(Ñ+àŒˆA‰�X�”1�a‘4‘Ñ˜"œQ ™T™'Ñ! B¤q¨!¡t¡GÑ+¨b´©dÑ2°RÑ7¸#¼aÀ¹d¹(ÀSÌÈAÉÁXÑ:MÐPRÔSTÑPTÑ:TÐWYÑ:YÑZàŒˆA‰�X�”1�a‘4‘Ñ˜"œQ ™T™'Ñ! B¤q¨!¡t¡GÑ+¨b´©dÑ2°RÑ7¸"¼QÀ¹T¹'ÀBÄqÈ!ÁtÁGÑ:KÈbÔQRÐTUÑQUÉgÑ:UÐXZÔ[\ÑX\Ñ:\Ð_aÑ:aÑbàŒˆ1‰�Wˆr”!�Q‘$‰wÑ˜œA˜q™D™Ñ  2¤a¨¡d¡7Ñ*¨R´°1±©WÑ4°s¼1±uÑ<¸rÑAÀCÌÈ1ÉÁHÈrÔRSÉtÁOÐVXÑDXÑYàŒˆ1‰�Wˆr”!�Q‘$‰wÑ˜œA˜q™D™Ñ  2¤a¨¡d¡7Ñ*¨R´©TÑ1°BÑ6¸¼1¸b¹5¹À2ÄaÈÁdÁ7Ñ9JÈRÔPQÐSTÑPTÉWÑ9TÐWYÔZ[Ð]^ÑZ^ÑW^Ñ9^ÐabÔcdÐfgÑcgÑagÑ9gØŒˆA‰�gñ:Ø”1‘ñ:Øñ:ñ ð€Cð ò 2ˆØ()×(8Ñ(8Ó(:Ö; 1”D˜œA•JÒ;‰ˆˆSÜ)¨#¨s´AÓ6‰ˆˆSØ�v‰v”a˜œ1™‹~×$Ñ$Ó&¨#¨c©'Ó1Ð1Ð1ñ2ùÚ;s   È%Jc                  óŠ  — t        dt        dz  z  dt        z  z   dz   t        «      t        dt        dz  z  dt        dz  z  z   dt        z  z   dz
  t        «      dft        dt        d	z  z  dt        dz  z  z
  d
t        dz  z  z
  dt        z  z
  dz   t        «      t        dt        dz  z  dt        dz  z  z
  dt        z  z   dz
  t        «      t        ft        dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        d	z  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        z  z   dz   t        «      t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z
  dt        d	z  z  z   dt        dz  z  z
  d t        dz  z  z   d!t        z  z   d"z   t        «      t         ft        d!t        dz  z  d#t        dz  z  z
  d$t        dz  z  z   d$t        d	z  z  z   d%t        dz  z  z
  d&t        dz  z  z   d't        z  z   d(z   t        «      t        d)t        dz  z  dt        dz  z  z   d*t        dz  z  z   d*t        d	z  z  z   d+t        dz  z  z
  d,t        dz  z  z
  d-t        z  z   d.z   t        «      t        d/«      dz  ft        d0t        d	z  z  d1t        dz  z  z
  d.t        dz  z  z   d2t        z  z
  d3z
  t        «      t        d4t        d	z  z  dt        dz  z  z   d5t        dz  z  z
  dt        z  z   dz   t        «      t        d0«      d4z  fg} | D ]  \  }}}t	        ||t        «      |k(  rŒJ ‚ y6)7a   
    This function tests the limit at oo of a
    rational function.

    Each test case has 3 values -

    1. num - Numerator of rational function.
    2. den - Denominator of rational function.
    3. limit_at_inf - Limit of rational function at oo
    éôÿÿÿr<   rl   é    r;   rg   r   éì  rO   i¼  ix  iœ  i'  éô  i  i!ýÿÿrQ   rI   i�  rT   rp   rJ   iX  éH  i  iv  iÄ  ið  é|  éT   é¤  iè  rj   é¨   iÀ  rq   r•   rh   r}   r‹   iß  iÐ  iÐ   iØ	  ið
  i  r*   é   iÂ  i„  éZ   i_  i  N)r   r'   r   r
   r   )rX   r7   r8   Úlims       r,   Útest_limit_at_infr­   l  sM  € ô 	ˆS”�A‘‰X˜œ1™‰_˜rÑ!¤1Ó%ÜˆR”�1‘‰W�rœ!˜Q™$‘wÑ ¤1¡Ñ$ rÑ)¬1Ó-Ø	ðô 	ˆT”!�Q‘$‰Y˜œa ™d™Ñ" S¬¨A©¡XÑ-°´Q±Ñ6¸Ñ=¼qÓAÜˆT”!�Q‘$‰Y˜œa ™d™Ñ" S¬¡UÑ*¨SÑ0´!Ó4Ü
ðô 	ˆT”!�Q‘$‰Y˜œa ™d™Ñ" T¬!¨Q©$¡YÑ.°´Q¸±T±Ñ9¸CÄÀ1Á¹HÑDÀsÌ1ÈaÉ4ÁxÑOÐRUÔVWÐYZÑVZÑRZÑZØ
Œa‰%ñØñÜó	äˆT”!�Q‘$‰Y˜œa ™d™Ñ" R¬¨1©¡WÑ,¨t´A°q±D©yÑ8¸3¼qÀ!¹t¹8ÑCÀdÌ1ÈaÉ4ÁiÑOÐRUÔVWÑRWÑWÐZ]Ñ]Ô_`ÓaÜ	ˆð	ô 	ˆS”�A‘‰X˜œA˜q™D™Ñ  2¤a¨¡d¡7Ñ*¨R´°1±©WÑ4°r¼!¸Q¹$±wÑ>ÀÄAÀqÁDÁÑHÈ3ÌqÉ5ÑPÐSUÑUÔWXÓYÜˆS”�A‘‰X˜œA˜q™D™Ñ  3¤q¨!¡t¡8Ñ+¨c´!°Q±$©hÑ6¸¼aÀ¹d¹ÑBÀTÌ!ÈQÉ$ÁYÑNÐQUÔVWÑQWÑWÐZ]Ñ]Ô_`ÓaÜ	ˆ!‹ˆQ‰ðô 	ˆS”�A‘‰X˜œA˜q™D™Ñ  3¤q¨!¡t¡8Ñ+¨c´!©eÑ3°bÑ8¼!Ó<ÜˆS”�A‘‰X˜œA˜q™D™Ñ  4¬¨1©¡9Ñ,¨s´1©uÑ4°sÑ:¼AÓ>Ü	ˆ#‹ˆs‰
ðð5€Eð> ò 0‰ˆˆS�#Ü˜C ¤aÓ(¨CÓ/Ð/Ð/ñ0r.   c                  óN  — t        dt        dz  z  dt        dz  z  z   dt        z  z   dz
  t        d¬«      t        dt        dz  z  d	t        d
z  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   t        d¬«      t        d«      t        d«      dz  t        d«      t        z  dz  z   gt        d«      dz  t        d«      t        z  dz  z
  ggft        dt        dz  z  dt        dz  z  z   dt        z  z   dz   t        d¬«      t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        z  z   dz   t        d¬«      t        d
«      dz  t        d«      dz  t        d«      dz  z   gt        d«      dz  t        d«      dz  z
  ggft        dt        z  dz   t        d¬«      t        dt        dz  z  ddt        d«      z  z
  t        dz  z  z   ddt        d«      z  z
  t        dz  z  z   ddt        d«      z  z
  t        z  z   dt        d«      z  z   d	z   t        d¬ «      t        d«      t        d«      z   dz  t        d«      dz  t        t        ddt        d«      z  dz   d!¬"«      d#t        d«      z  d$z   z  dz   «      dz  z   gt        d«      dz  t        t        ddt        d«      z  dz   d!¬"«      d#t        d«      z  d$z   z  dz   «      dz  z
  ggfg} | D ]  \  }}}}t        ||t        |«      |k(  rŒJ ‚ y%)&ab  
    This function tests the Case 1 in the step
    to calculate coefficients of c-vectors.

    Each test case has 4 values -

    1. num - Numerator of the rational function a(x).
    2. den - Denominator of the rational function a(x).
    3. pole - Pole of a(x) for which c-vector is being
       calculated.
    4. c - The c-vector for the pole.
    r_   r;   r<   rO   rJ   T©Ú	extensionrQ   é   rI   rS   rR   rT   r   r*   i°  i   i0  i0  é€   i�  ið  ie  i�  é1   ijÁù iz  r”   rŒ   r‰   zQQ<sqrt(3)>©ÚdomainFrL   é   é,   N)r   r'   r
   r   r   r   r   )rX   r7   r8   ÚpoleÚcs        r,   Útest_construct_c_case_1rº   š  s  € ô 	ˆR”�1‘‰W�qœ˜A™‘vÑ ¤!¡Ñ# aÑ'¬°dÔ;ÜˆQŒq�!‰t‰V�bœ˜A™‘gÑ ¤! Q¡$¡Ñ&¨¬A¨q©D©Ñ0°1´Q¸±T±6Ñ9¸B¼qÀ!¹t¹GÑCÄQÐRVÔWÜ	ˆ!‹Ü
ˆA‹$ˆq‰&”4˜“7œ1‘9˜Q‘;Ñ
Ð	¤! A£$ q¡&¬4°«7´1©9°Q©;Ñ"6Ð!7Ð8ð	ô 	ˆT”!�Q‘$‰Y˜œa ™d™Ñ" S¬¡UÑ*¨SÑ0´!¸tÔDÜˆS”�A‘‰X˜œA˜q™D™Ñ  4¬¨1©¡9Ñ,¨t´A°q±D©yÑ8¸3¼q¹5Ñ@À2ÑEÄqÐTXÔYÜ	ˆ!‹ˆQ‰Ü
ˆA‹$ˆq‰&”4˜“> #Ñ%Ñ
%Ð	&¬¨1«¨a©´$°x³.ÀÑ2DÑ)DÐ(EÐFð	ô 	ˆQŒq‰S�1‰W”a 4Ô(ÜˆR”�1‘‰W˜˜Bœt A›w™J™¬¨1©Ñ,Ñ,°°R¼¸Q»±Z±ÄÀAÁÑ/EÑEÈÈQÌtÐTUËwÉYÉÔXYÑHYÑYØ”�Q“‰iñØñÜ¨ô	7ä	
ˆ1‹”�Q“‰˜ÑÜ
ˆA‹$ˆq‰&”4œ˜A˜q¤ a£™y¨1™}°uÔ=¸rÄ$ÀqÃ'¹zÈB¹ÑOÐRSÑSÓTÐUVÑVÑ
VÐ	WÜˆq‹T�!‰V”dœ3˜q !¤D¨£G¡)¨a¡-¸%Ô@À"ÄTÈ!ÃWÁ*ÈrÁ/ÑRÐUVÑVÓWÐXYÑYÑYÐZð	\ðð€Eð* #ò :ÑˆˆS�$˜Ü! # s¬A¨tÓ4¸Ó9Ð9Ð9ñ:r.   c                  ó.	  — t        dt        d¬«      t        t        dz
  dz  t        dz
  z  t        d¬«      ddt         dt        z
  z  dz  gt        dt        z   z  dz  ggft        dt        dz  z  dt        d	z  z  z
  d
t        dz  z  z
  dz   t        d¬«      t        dt        z  dz
  dz  t        dz   dz  z  t        d¬«      t        d«      dz  dt        d«       dz  gt        d«       dz  ggft        t        dz  t        dz  z
  d	t        z  z   t        d¬«      t        t        dz
  d	z  t        dz   dz  z  t        d¬«      dd	d
t	        d«      z  t        d«      dz  d	t	        d«      z  d
z  z
  z  dz  dt	        d«      z  d
z  gdt	        d«      z  t        d«      dz  d	t	        d«      z  d
z  z   z  dz  dt	        d«      z  d
z  ggft        dt        dz  z  t        d	z  z   dz   t        d¬«      t        d	t        z  dz   d	z  t        dz   z  t        d¬«      t        d«       d	z  d	dt	        d«      z  t	        d«       dz  t        d«      dz  z
  z  dz  t	        d«      dz  gdt	        d«      z  t	        d«      dz  t        d«      dz  z
  z  dz  t	        d«       dz  ggft        t        dz  dz   t        d¬«      t        dt        z  dz
  dz  t        dz  dz   z  t        d¬«      t        d«      dz  ddt	        d«      z  t	        d«       dz  t        d«      dz  z
  z  dz  dt	        d«      z  dz  t	        d«      d z  gd!t	        d«      z  t	        d«      dz  t        d«      dz  z
  z  dz  dt	        d«      z  dz  t	        d«       d z  ggft        t        dz  dz   t        d¬«      t        t        t	        d«      z
  dz  t        d¬«      t	        d«      dt	        d"«      t        d«      d
z  dt	        d"«      z  z
  z  d#z  t	        d
«      d
z  t	        d"«      gt	        d"«       t        d«      d
z  dt	        d"«      z  z   z  d#z  t	        d
«       d
z  t	        d"«       ggfg} | D ]   \  }}}}}t        ||t        ||«      |k(  rŒ J ‚ y$)%a�  
    This function tests the Case 2 in the step
    to calculate coefficients of c-vectors.

    Each test case has 5 values -

    1. num - Numerator of the rational function a(x).
    2. den - Denominator of the rational function a(x).
    3. pole - Pole of a(x) for which c-vector is being
       calculated.
    4. mul - The multiplicity of the pole.
    5. c - The c-vector for the pole.
    r*   Tr¯   r<   rN   r;   rJ   rR   rO   rI   éY   rm   rS   rq   iW  éùÿÿÿrV   r²   i·  é7   i 8  é   i€ÿÿÿrT   ri   éB   é6   éƒ   i$ r�   iÍ  rt   iåÿÿÿrŒ   é   N)r   r'   r   r
   r   r   )rX   r7   r8   r¸   Úmulr¹   s         r,   Útest_construct_c_case_2rÅ   À  sk  € ô" 	ˆQ”˜TÔ"ÜŒa�!‰e�a‰Zœ˜Q™Ñ¤¨dÔ3Ø	ˆ1Üˆ"ˆb”1‰f‰+�a‰-ˆœ1˜b¤1™f™: a™<˜.Ð)ð	ô 	ˆQŒq�!‰t‰V�bœ˜A™‘gÑ ¤! Q¡$¡Ñ&¨Ñ*¬A¸Ô>Üˆa”‰c�A‰g˜‰\œ1˜q™5 1™*Ñ$¤a°4Ô8Ü	ˆ!‹ˆQ‰�ÜˆR‹5ˆ&�‰)ˆœ˜!›�u˜R‘x�jÐ!ð	ô 	ŒQ�‰T”A�q‘D‰[˜1œQ™3Ñ¤¨TÔ2ÜŒa�!‰e�a‰Zœ˜Q™ ™
Ñ"¤A°Ô6Ø	ˆ1Ø
ŒD�‹G‰)”Q�r“U˜3‘Y ¤4¨£7¡¨1¡Ñ,Ñ
-¨bÑ
0°!´D¸³G±)¸A±+Ð	>Ø	ŒD�‹G‰”Q�r“U˜3‘Y ¤4¨£7¡¨1¡Ñ,Ñ	-¨bÑ	0°"´T¸!³W±*¸Q±,Ð?ð	Að	ô 	ˆQŒq�!‰t‰V”a˜‘d‰]˜QÑ¤¨TÔ2Üˆa”‰c�A‰g˜‰\œ1˜q™5Ñ!¤1°Ô5Ü	
ˆ1‹ˆˆa‰�Ø
Œd�3‹i‰-œ$˜s›)˜ C™¬!¨B«%°©+Ñ5Ñ
6°sÑ
:¼DÀ»IÀc¹MÐ	JØ	Œd�3‹i‰œ˜c› 3™¬¨2«¨u©Ñ4Ñ	5°cÑ	9¼DÀ»I¸:Àc¹>ÐJð	Lð	ô 	ŒQ�‰T�A‰X”q DÔ)Üˆa”‰c�A‰g˜‰\œ1˜a™4 !™8Ñ$¤a°4Ô8Ü	ˆ!‹ˆQ‰�Ø
ŒT�"‹X‰+œ˜R›�y ‘|¤a¨£f¨V¡mÑ3Ñ
4°RÑ
7¸¼DÀ»H¹ÀTÑ9IÌ4ÐPRË8ÐTWÉ<Ð	XØ	ŒT�"‹X‰”t˜B“x ‘{¤Q s£V¨F¡]Ñ2Ñ	3°BÑ	6¸¼$¸r»(¹
À4¹Ì$ÈrË(ÈÐSVÉÐWð	Yð	ô 	ŒQ�‰T�B‰Yœ TÔ*ÜŒa”$�q“'‰k˜AÑœq¨DÔ1ÜˆQ‹�Ü
ˆr‹(”A�a“D˜‘F˜Qœt B›x™ZÑ'Ñ
(¨Ñ
+¬T°!«W°Q©Y¼¸R»Ð	AÜ
ˆr‹(ˆ”A�a“D˜‘F˜Qœt B›x™ZÑ'Ñ	(¨Ñ	+¬d°1«g¨X°a©Z¼$¸r»(¸ÐCð	Eð	ðK+€EðX #(ò ?ÑˆˆS�$˜˜QÜ! # s¬A¨t°SÓ9¸QÓ>Ð>Ð>ñ?r.   c                  ó&   — t        «       dggk(  sJ ‚y)z`
    This function tests the Case 3 in the step
    to calculate coefficients of c-vectors.
    r*   N)r    r‘   r.   r,   Útest_construct_c_case_3rÇ   þ  s   € ô
 Ó Q C 5Ò(Ð(Ñ(r.   c                  ó~  — t        t        dz   dt        dz  z  z
  dt        dz  z  z   dt        z  z   dz   t        d¬«      t        dt        dz  z  dt        dz  z  z
  dt        z  z   dz
  t        d¬«      ddt        z  d	z  t        dz  d
t        z  t        d«      dz  t        dz  z
  z  dz  gdt        z  d	z  t         dz  dt        z  t        d«      dz  t        dz  z   z  dz  ggft        t        dz   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        z  z   dz   t        d¬«      t        t        dz  dt        dz  z  z   dt        dz  z  z   t        z
  dz   t        d¬«      ddt        z  t        t         dt        z
  z  dz  gdt        z  t         t        dt        z   z  dz  ggft        dt        dz  z  t        dz  z
  t        dz  z
  dt        dz  z  z
  t        dz  z
  dt        z  z
  dz
  t        d¬«      t        dt        dz  z  dt        z  z   dz   t        d¬«      ddt	        d«      z  t        z  dz  dt	        d«      z  t        z  dz  t	        d«      t        z  dz  t	        d«       t        z  t        d«      dz  dt	        d«      z  t        z  dz  z
  z  dz  gdt	        d«      z  t        z  dz  dt	        d«      z  t        z  dz  t	        d«       t        z  dz  t	        d«      t        z  t        d«      dz  dt	        d«      z  t        z  dz  z   z  dz  ggft        d
t        dz  z  dt        dz  z  z
  dt        dz  z  z
  t        dz  z
  dz
  t        d¬«      t        dt        z  dz
  t        d¬«      ddt        z  dz  dt        z  dz  t        dz  t         t        d«       d z  t        z
  z  gd!t        z  dz  d"t        z  dz  t         dz  t        t        d«       d z  t        z   z  ggft        t        dz   t        dz  z
  t        dz  z
  t        dz  z
  t        z
  t        d¬«      t        t        dz   t        d¬«      dd#t        z  dz  dt        z  t         t        t         d$dt        z  z
  z  dz  gdt        z  dz  dt        z  t        t         t        d$dt        z  z   z  dz  ggft        t        dz   t        dz  z
  dt        dz  z  z
  dt        dz  z  z
  t        dz  z
  t        dz  z
  dt        z  z   dz
  t        d¬«      t        dt        z  dz
  t        d¬«      ddt	        d«      z  t        z  dz  dt	        d«      z  t        z  dz  t	        d«      t        z  dz  t	        d«      t        z  dz  t	        d«       t        z  t        d«       d%z  dt	        d«      z  t        z  dz  z
  z  dz  gd
t	        d«      z  t        z  dz  d
t	        d«      z  t        z  dz  t	        d«       t        z  dz  t	        d«       t        z  dz  t	        d«      t        z  t        d«       d%z  dt	        d«      z  t        z  dz  z   z  dz  ggfg} | D ]3  \  }}}}t        ||t        t        |d«      }t        ||dz  «      |k(  rŒ3J ‚ y&)'a9  
    This function tests the Case 4 in the step
    to calculate coefficients of the d-vector.

    Each test case has 4 values -

    1. num - Numerator of the rational function a(x).
    2. den - Denominator of the rational function a(x).
    3. mul - Multiplicity of oo as a pole.
    4. d - The d-vector.
    rJ   r<   rO   r;   Tr¯   rS   rs   ri   r_   éž   re   r�   rT   rI   rR   rU   rz   rV   i  rª   iïÿÿÿrw   iIB  i 
  ióþÿÿr*   é)   éÀ   rr   é;   i   i×ÿÿÿr½   rK   rŠ   rQ   N)r   r'   r   r
   r   r$   r   r!   )rX   r7   r8   rÄ   ÚdÚsers         r,   Útest_construct_d_case_4rÏ     sM  € ô 	Œa�‰dˆU�Q”q˜!‘t‘V‰^˜a¤ 1¡™fÑ$ q¬¡sÑ*¨QÑ.´¸TÔBÜˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜r¤!™tÑ# aÑ'¬°dÔ;Ø	Ø
ŒQ‰$ˆr‰'”1�Q‘3˜œ1™œa ›f S™j¬1¨Q©3Ñ.Ñ/°Ñ1Ð	2Ø	ŒQ‰ˆr‰”A�2�a‘4˜œ1™œa ›f S™j¬1¨Q©3Ñ.Ñ/°Ñ1Ð2ð	4ð	ô 	Œa�‰dˆU�Q”q˜!‘t‘V‰^˜a¤ 1¡™fÑ$ q¬¨A©¡vÑ-°´!°Q±$±Ñ6¸¼1¹Ñ<¸qÑ@Ä!ÈtÔTÜŒQ�‰T�A”a˜‘d‘F‰]˜R¤ 1¡™WÑ$¤qÑ(¨1Ñ,¬a¸4Ô@Ø	Ø
ŒQ‰$””A�2�rœA‘v‘;˜q‘=Ð	! A¤a¡C¬!¨¬Q°´Q±©Z¸©\Ð#:Ð;ð	ô 	ˆR”�1‘‰W”q˜!‘t‰^œa ™dÑ" Q¤q¨!¡t¡VÑ+¬a°©dÑ2°Q´q±SÑ8¸1Ñ<¼aÈ4ÔPÜˆQŒq�!‰t‰V�bœ‘d‰]˜QÑ¤¨TÔ2Ø	Ø
Œd�1‹g‰+”a‰-˜Ñ
˜S¤ a£™[¬™]¨2Ñ-¬t°A«w´q©y¸©{¼TÀ!»W¸HÄQ¹JÌÈ%ËÐQUÉØ
ŒD�‹G‰)”A‰+�a‰-ñIñ =Øñ=ð 
Ø"¤4¨£7™l¬1™n¨SÑ0°"´T¸!³W±*¼Q±,¸r±/ÄDÈÃGÀ8ÌAÁ:ÈaÁ<ÜˆQ‹”‰	”1�U“8˜D‘= 1¤T¨!£W¡9¬Q¡;¨q¡=Ñ0Ñ1°!Ñ3ð5ð	6ð	ô 	ˆR”�1‘‰W�qœ˜A™‘vÑ ¤! Q¡$¡Ñ&¬¨A©Ñ-°Ñ1´1ÀÔEÜˆR”‰T�A‰X”q DÔ)Ø	Ø
ŒQ‰$ˆs‰(�A”a‘C˜‘FœA˜a™C¤! ¤a¨£e V¨D¡[´1¡_Ñ!5Ð	6Ø	ŒQ‰ˆs‰�B”q‘D˜‘Gœa˜R ™T¤1¤q¨£u f¨T¡k´A¡oÑ#6Ð7ð	9ð	ô 	Œa�‰dˆU”Q˜‘T‰\œA˜q™DÑ ¤1 a¡4Ñ'¬!Ñ+¬Q¸$Ô?ÜŒQ�‰U”A Ô&Ø	Ø
ŒQ‰$ˆq‰&�!”A‘#œ�rœ1œq˜b " q¬¡s¡(™m¨A™oÐ	.°´1±°Q±¸¼1¹¼aÄ!ÀÄQÈÈQÌqÉSÉÁ\ÐRSÁ^Ð0TÐUð	ô 	Œa�‰dˆU”Q˜‘T‰\˜Aœa ™d™FÑ" Q¤q¨!¡t¡VÑ+¬a°©dÑ2´Q¸±TÑ9¸A¼a¹CÑ?À!ÑCÄQÐRVÔWÜˆQŒq‰S�1‰W”a 4Ô(Ø	Ø
ŒD�‹G‰)”A‰+�a‰-˜œ4 ›7™¤1™ Q™¬¨Q«´©	°!©´T¸!³W¼Q±Y¸q±[Ä4ÈÃ7À(Ì1Á*ÌqÐQRËtÈeÐTUÉgØ	Œ$ˆq‹'‰	”!‰�A‰ñOñ CØñCð 
Øœt A›w™J¤q™L¨™N¨B¬t°A«w©J´q©L¸©N¼TÀ!»W¸HÄQ¹JÀq¹LÌ4ÐPQË7È(ÔSTÉ*ÐUVÉ,ÜˆQ‹”‰	”A�a“D�5˜‘7˜Qœt A›w™Y¤q™[¨™]Ñ*Ñ+¨AÑ-ð/ð	0ð	ðM-€Eð\ "ò 4ÑˆˆS�#�qÜ% c¨3´´2°s¸AÓ>ˆÜ! # s¨A¡vÓ.°!Ó3Ð3Ð3ñ4r.   c            
      ód  — t        dt        dz  z  t        dz  z   t        z   dz
  t        d¬«      t        dt        dz  z  dt        dz  z  z   dt        z  z   dz
  t        d¬«      t        d«      dz  t        d«       dz  gt        d«       dz  t        d«      dz  ggft        dt        dz  z  t        d	z  z   t        dz  z
  t        dz  z   dt        z  z
  dz
  t        d
¬«      t        dt        dz  z  dt        d	z  z  z   dt        dz  z  z   dt        dz  z  z   dt        z  z   dz   t        d
¬«      t        d«      dz  dt        d«      z  dz  gt        d«       dz  dt        d«      z  dz  ggft        t        dz  t        z
  dz   t        d
¬«      t        dt        dz  z  dt        z  z   dz   t        d
¬«      t        d«      dz  dt        d«      z  dz  gt        d«       dz  dt        d«      z  dz  ggfg} | D ].  \  }}}t        ||t        t        dd«      }t        |«      |k(  rŒ.J ‚ y)a  
    This function tests the Case 5 in the step
    to calculate coefficients of the d-vector.

    Each test case has 3 values -

    1. num - Numerator of the rational function a(x).
    2. den - Denominator of the rational function a(x).
    3. d - The d-vector.
    r<   r;   Tr¯   rS   rJ   r*   ry   rO   ÚZZr´   rI   rV   ri   rK   r   N)r   r'   r   r$   r   r"   )rX   r7   r8   rÍ   rÎ   s        r,   Útest_construct_d_case_5rÒ   E  s  € ô 	ˆQŒq�!‰t‰V”a˜‘d‰]œQÑ Ñ"¤A°Ô6ÜˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜q¤™sÑ" QÑ&¬°TÔ:Ü
ˆq‹'�!‰)”d˜1“g�X˜c‘\Ð	"¤d¨1£g X¨a¡Z´°a³¸±Ð$=Ð>ðô 	ˆQŒq�!‰t‰V”a˜‘d‰]œQ ™TÑ!¤A q¡DÑ(¨1¬Q©3Ñ.°Ñ2´A¸dÔCÜˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜q¤ A¡™vÑ%¨¬!¨Q©$©Ñ.°´1±Ñ4°qÑ8¼!ÀDÔIÜ
ˆq‹'�!‰)�Rœ˜Q›‘Z ‘]Ð	#¤t¨A£w h¨q¡j°!´D¸³G±)¸B±,Ð%?Ð@ðô 	ŒQ�‰T”A‰X˜‰\œ1 TÔ*ÜˆQŒq�!‰t‰V�aœ‘c‰\˜AÑœq¨Ô.Ü
ˆq‹'�!‰)�Rœ˜Q›‘Z ‘\Ð	"¤d¨1£g X¨a¡Z°´4¸³7±¸1±Ð$=Ð>ðð€Eð  ò ,‰ˆˆS�!ä% c¨3´´2°q¸!Ó<ˆÜ! #Ó&¨!Ó+Ð+Ð+ñ,r.   c            	      óÒ  — t        dt        dz  z  dz
  t        d¬«      t        dt        dz  z  dt        dz  z  z   dt        z  z   dz   t        d¬«      t        d«      dz  t        dz  z   gt        d«      dz  t        dz  z
  ggft        dt        d	z  z  dt        dz  z  z
  dt        z  z
  dz
  t        d¬«      t        t        d
z  t        dz  z
  dt        dz  z  z   dt        d	z  z  z
  dt        dz  z  z
  dt        z  z
  dz   t        d¬«      dgdggft        dt        d	z  z  t        dz  z   dt        z  z   dz   t        d¬«      t        d
t        dz  z  dt        dz  z  z
  dt        d
z  z  z
  dt        dz  z  z
  dt        dz  z  z
  dt        d	z  z  z
  dt        dz  z  z
  dt        z  z
  dz
  t        d¬«      dgdggfg} | D ]  \  }}}t	        ||t        «      |k(  rŒJ ‚ y)a  
    This function tests the Case 6 in the step
    to calculate coefficients of the d-vector.

    Each test case has 3 values -

    1. num - Numerator of the rational function a(x).
    2. den - Denominator of the rational function a(x).
    3. d - The d-vector.
    rV   r<   rJ   rÑ   r´   rO   rs   r*   r;   rT   rS   r   rK   r‰   rR   rQ   rn   rI   ri   r·   é.   é"   é*   N)r   r'   r
   r   r#   )rX   r7   r8   rÍ   s       r,   Útest_construct_d_case_6r×   f  só  € ô 	ˆR”�1‘‰W�q‰[œ! DÔ)ÜˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜r¤!™tÑ# aÑ'¬°4Ô8Ü
ˆA‹$ˆq‰&”1�Q‘3‰,ˆœ!˜A›$˜q™&¤1 Q¡3™,˜Ð(ðô 	ˆR”�1‘‰W�qœ˜A™‘vÑ ¤!¡Ñ# aÑ'¬°4Ô8ÜŒQ�‰T”A�q‘D‰[˜1œQ ™T™6Ñ! A¤a¨¡d¡FÑ*¨Q¬q°!©t©VÑ3°a¼±cÑ9¸AÑ=¼qÈÔNØ
ˆˆqˆcˆ
ðô 	ˆR”�1‘‰W”q˜!‘t‰^˜b¤™dÑ" RÑ'¬°4Ô8ÜˆQŒq�!‰t‰V�bœ˜A™‘gÑ ¤1 a¡4¡Ñ'¨"¬Q°©T©'Ñ1°B´q¸!±t±GÑ;¸bÄÀAÁ¹gÑEÈÌ1ÈaÉ4ÉÑOØ
ŒQ‰$ñØñÜ˜tô	%à
ˆˆqˆcˆ
ð	ð€Eð" ò 4‰ˆˆS�!Ü! # s¬AÓ.°!Ó3Ð3Ð3ñ4r.   c                  óÎ  — t        t        dz  dt        z  z
  dz   t        d¬«      t        t        dz  t        z
  t        d¬«      t        d«      dddd	dd
dd
dœft        dt        dz  z  dt        z  z
  dz   t        d¬«      t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z
  dt        z  z   dz
  t        d¬«      t        d«      dz  ddt        d«      dz  t        d«      dz  t        d«      dz  t        d«      dz  dœft        dt        d¬«      t        t        dz  dt        d«      z  dz
  t        dz  z  z   dt        d«      z  d z   t        dz  z  z   d!dt        d«      z  z
  t        dz  z  z   ddt        d«      z  z   t        z  z   dz
  t        d¬«      t        d«      dddt        d«      z   d"dt        d«      z  z
  t	        d#d"dt        d«      z  z
  d$¬%«      d#t        d«      z   z  d"dt        d«      z  z
  d#t        d«      z   dz  z  t	        d#d"dt        d«      z  z
  d$¬%«      d#t        d«      z   dz  z  d"dt        d«      z  z
  d#t        d«      z   dz  z  d&œft        t        dz  dt        dz  z  z
  dt        dz  z  z   d't        z  z   d(z
  t        d¬«      t        t        dz  dz
  t        d¬«      t
        dddd)ddd*d+d,œft        dt        dz  z  dt        dz  z  z   dt        z  z
  dz   t        d¬«      t        dt        dz  z  t        dz  z
  dt        dz  z  z
  dt        z  z   dz   t        d¬«      t        d«      dz  d)dt        d-«      d.z  t        d/«      d0z  t        d1«      d2z  t        d3«      d4z  t        d5«      d6z  d7œft        d8t        dz  z  dt        z  z   dz
  t        d¬«      t        dt        dz  z  dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        z  z   dz   t        d¬«      t
        d)dd)d)t        d9«       d:z  d)d#t        d;«      dz  d<œfg} | D ]"  \  }}}}}}|t        ||t        |||«      k(  rŒ"J ‚ y=)>aè  
    This function tests the computation of coefficients
    of Laurent series of a rational function.

    Each test case has 5 values -

    1. num - Numerator of the rational function.
    2. den - Denominator of the rational function.
    3. x0 - Point about which Laurent series is to
       be calculated.
    4. mul - Multiplicity of x0 if x0 is a pole of
       the rational function (0 otherwise).
    5. n - Number of terms upto which the series
       is to be calculated.
    r<   r;   rS   Tr¯   r*   rT   rI   iøÿÿÿrŠ   )r*   r   rN   rV   r_   rP   é@   iÀ  iÀ  rO   r•   i?  i  iÌ  rQ   i üêiKÝÅiû  iØ  l    `B l   -­R iý0 i}' )r   r<   rN   r*   rJ   rP   rR   r¡   r_   rN   FrL   )rO   r;   r<   r*   r   rN   rs   rˆ   r   r‹   rz   )r;   r<   r*   r   rN   rV   i  iè  iÝ i�¤) l   ?PT l   @qs lýÿÿÿF41l   @4ôÆlüÿÿÿ…J!tðz½ l    Zdjm® )r   rN   rV   r_   rP   r½   éG   r³   r‰   )r   rV   rK   rN   r_   rP   N)r   r'   r
   r   r   r   r$   )rX   r7   r8   Úx0rÄ   ÚnrÎ   s          r,   Útest_rational_laurent_seriesrÝ   †  sa  € ô& 	ŒQ�‰T�A”a‘C‰Z˜!‰^œQ¨$Ô/ÜŒQ�‰T”A‰X”q DÔ)Ü	ˆ!‹ˆa�Ø�"˜! ¨°Ñ3ð	ô 	ˆR”�1‘‰W�tœA‘vÑ Ñ$¤a°4Ô8ÜˆR”�1‘‰W�rœ!˜Q™$‘wÑ ¤Q¨¡T¡Ñ)¨D´©FÑ2°SÑ8¼!ÀtÔLÜ	ˆ!‹ˆQ‰��1Üˆh‹K˜Ñ ¤Q t£W¨S¡[´a¸³nÀ[Ñ6PÜˆV‹9�U‰?ñ	ð	ô 	ˆQ”˜TÔ"ÜŒQ�‰T�Rœ˜Q›‘Z !‘^¤Q¨¡TÑ)Ñ)¨Q¬t°A«w©Y¸©^¼QÀ¹TÑ,AÑAÀSÈ1ÌTÐRSËWÉ9Á_ÔVWÐYZÑVZÑDZÑZØˆq”�a“‰y‰=œ!Ñ
ñØñ Ü!"¨dô	4äˆQ‹��AØ”�Q“‰K˜B ¤4¨£7¡™N¬s°2°r¸A¼dÀ1»g¹I±~ÐPUÔ/VÐXZÜ
ˆq‹'ñYñ 0Ø˜Qœt A›w™Y™¨¬d°1«g©¸Ñ(9Ñ9¼cÀ"ÀbÈ1ÌTÐRSËWÉ9ÁnÐ_dô ?
Ø”�Q“‰<˜!Ñ
ñ?Ø"$ q¬¨a«¡y¡.°2¼¸Q»±<À!Ñ2CÑ!Cñ	Eðô 	ŒQ�‰T�A”a˜‘d‘F‰]˜Qœq !™t™VÑ# b¬¡dÑ*¨RÑ/´¸dÔCÜŒQ�‰T�A‰X”q DÔ)Ü
ˆAˆqØ�!˜˜a R¨RÑ0ð	ô 	ˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜q¤™sÑ" QÑ&¬°TÔ:ÜˆQŒq�!‰t‰V”a˜‘d‰]˜Qœq !™t™VÑ# a¬¡cÑ)¨AÑ-¬q¸DÔAÜ	ˆ!‹ˆQ‰��1Üˆd‹G�D‰Lœa ›i¨Ñ/´Q°z³]À:Ñ5MÜˆnÓ˜mÑ+´Ð3DÓ1EÐFVÑ1Vñ	Xð	ô 	ˆR”�1‘‰W�qœ‘s‰]˜QÑ¤¨TÔ2ÜˆQŒq�!‰t‰V�aœ˜1™‘f‰_˜q¤ A¡™vÑ%¨¬!¨Q©$©Ñ.°´1±Ñ4°qÑ8¼!ÀtÔLÜ
ˆAˆqØ�1œ1˜R›5˜& ™)¨°¼¸"»¸a¹Ñ@ð	ðS.€Eð^ &+ò GÑ!ˆˆS�"�c˜1˜cØÔ-¨c°3¼¸2¸sÀAÓFÓFÐFÐFñGr.   c                 óž  ‡— t        | t        «      r| j                  | j                  z
  } t	        | t
        t        «      \  }}t        t        t        «      t        g|¢­Ž }t        d«      }|D �cg c]  }|j                  |‰«      ‘Œ }}t        d„ t        | |«      D «       «      sJ ‚t        ˆfd„t        ||«      D «       «      sJ ‚yc c}w )z‚
    Helper function to check if actual solution
    matches expected solution if actual solution
    contains dummy symbols.
    ÚC1c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   Nr‘   )Ú.0r'   s     r,   ú	<genexpr>z"check_dummy_sol.<locals>.<genexpr>×  s   è ø€ Ò3˜ˆq��tÑ3ùs   ‚c              3   óH   •K  — | ]  \  }}|j                  |‰«      –— Œ y ­w)N)Údummy_eq)rá   Ús1Ús2Ú	dummy_syms      €r,   râ   z"check_dummy_sol.<locals>.<genexpr>Ø  s    øè ø€ ÒI©f¨b°"ˆr�{‰{˜2˜y×)ÑIùs   ƒ"N)Ú
isinstancer	   ÚlhsÚrhsr   r&   r'   r%   r   rœ   Úallr   Úzip)rE   Úsolserç   r2   r…   Úsolsrß   rF   s     `     r,   Úcheck_dummy_solrï   É  s©   ø€ ô �"”bÔØ�V‰V�b—f‘f‰_ˆÜ˜R¤¤AÓ&�H€A€uäœœ1›œqÐ) 5Ò)€DÜ	ˆt‹€BØ/3Ö4¨ˆC�H‰H�R˜Õ#Ð4€DÐ4äÑ3œ[¨¨TÓ2Ô3Ô3Ð3Ð3ÜÓI¼¸DÀ%Ó8HÔIÔIÐIÑIùò 5s   Á0C
c                  ó"  — t        d«      } t        t        t        «      j	                  t        «      t        t        «      dz  z   dz
  d«      t        t        t        «      t        d«      «      t        t        t        «      t        d«       «      gft        t        «      dz  t        t        «      j	                  t        «      z   dt        t        «      z  t        z  z   dt        dz  z  z   t        t        t        «      d| z  t        z
  | t        z  t        dz  z   z  «      gfdt        dz  z  t        t        «      j	                  t        «      z  t        dt        t        «      z  t        t        «      j	                  t        «      z   dz
  z  z
  t        t        «      dz
  t        t        «      z  z   t        t        t        «      | dt        dz  z  z   | t        z   z  «      gft        t        t        «      j	                  t        «      t        t        «      dz   dt        dz  t        dz  z
  z  z
  «      t        t        t        «      dt        dz  t        z
  z  «      gft        dz  dt        z  dt        z  z   t        t        «      z  z
  t        t        «      dz  z   t        t        «      j	                  t        «      z   t        t        t        «      | t        z  t        dz  z   dt        z  z   | t        dz  z   z  «      t        t        t        «      t        «      gft        dz  t        t        «      j	                  t        «      z  t        dz  z   t        dt        t        «      dz  z  t        t        «      j	                  t        «      z   z  z
  t        t        «      z   t        t        t        «      | t        dz  z  t        z   | t        dz  z   z  «      t        t        t        «      t        dz  «      gft        t        «      dz   t        t        «      j	                  t        «      z   dt        dz  z  d	t        z  z
  d
z   t        dz
  dz  dt        z  dz
  dz  z  z  z   t        t        t        «      d| z  t        z  d| z  z
  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        z  z
  dz   d| z  t        dz  z  d| z  t        z  z
  d| z  z   dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        z  z
  z  «      t        t        t        «      dt        z  dz
  dt        dz  z  dt        z  z
  dz   z  «      gft        t        «      dz  t        t        «      j	                  t        «      z   dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z   d
t        dz  z  z   d	t        z  z
  dz   dt        dz  z  z  z
  t        t        t        «      dt        dz  z  dt        dz  z  z
  t        dz  z
  dt        dz  z  z   dt        z  z   dz
  dt        dz  z  dt        dz  z  z
  z  «      gft        t        t        «      j	                  t        «      t        dz   dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        z  z
  dz   t        dz  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        d
z  z  z
  d t        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z
  dt        dz  z  z   dt        z  z
  dz   z  t        t        «      dz  z   t        t        «      z   «      t        t        t        «      dt        dz  dt        dz  z  z
  dt        dz  z  z   d	t        dz  z  z
  dt        dz  z  z   dt        z  z
  dz   z  «      gft        t        t        «      j	                  t        «      t        t        t        «      z  dt        z  z   dt        z  dz
  t        t        «      dz  z  dt        z  dz   z  z   dt        dz  z  d
t        z  z
  d!z   d"t        dz  z  dt        dz  z  z
  dz   z  z   t        d«      dz  z
  «      t        t        t        «      ddt        z  z
  dt        z  dz
  z  «      gft        t        t        «      j	                  t        «      d#t        dz  z  d$t        z  z
  dz
  dt        dz  z  dt        dz  z  z
  dt        z  z   dz   z  dt        t        «      dz  z  dt        z  dz   z  z   «      t        t        t        «      dt        z  dz   dt        z  dz
  z  «      gft        t        «      j	                  t        «      dt        dz  z  dz   t        t        «      dz  z  t        z  z   dt        dz  z  t        z
  dz   t        t        «      z  t        t        dz
  z  z  z   dt        dz  z  dt        z  z
  dz   t        t        dz
  dz  z  z  z   t        t        t        «      |  t        dz  z
  t        dz  z   dt        z  z
  | t        z  | z
  t        dz  z   t        dz  z
  t        dz  z   t        z
  z  «      t        t        t        «      d%t        dz
  z  «      gft        t        «      j	                  t        «      dt        z  t        t        «      dz  dz   z  t        z  z
  t        t        t        «      t         | z  t        t        dz  z  z   | t        dz  z   z  «      t        t        t        «      t         «      gft        t        t        «      j	                  t        «      t        t        t        «      z  t        d«      dz  dt        z  z
  z  t        dz  t        d«      dz  z
  t        t        «      dz  z  dt        z  dz  t        d«      dz  z
  z  z   t        d«      dz  z
  d&t        dz  z  d't        z  z
  d(z   d"t        dz  z  dt        dz  z  z
  z  z   «      t        t        t        «      dt        z
  t        z  «      t        t        t        «      dt        d)z  z  d*t        d+z  z  z   d,t        dz  z  z   d-t        dz  z  z   d.t        dz  z  z   d/t        dz  z  z   d0t        dz  z  z   d1t        d
z  z  z   d2t        dz  z  z   d3t        dz  z  z   d4t        dz  z  z   d5t        dz  z  z   d6t        dz  z  z   d7t        z  z   d8z   dt        d)z  z  d9t        d+z  z  z   d:t        dz  z  z   d;t        dz  z  z   d<t        dz  z  z   d/t        dz  z  z   d=t        dz  z  z   d>t        d
z  z  z   d?t        dz  z  z   d@t        dz  z  z   dAt        dz  z  z   dBt        dz  z  z   dBt        dz  z  z   dCt        z  z   z  «      gft        t        t        «      j	                  t        «      dDt        dz  z  dDt        dz  z  z   t         dz  t        d«      dz  z
  t        t        «      dz  z  z   dz   «      t        t        t        «      dt        z  «      gft        t        t        «      j	                  t        «      dEt        dz  z  dz  dt        z  dz  z   t        dz  t        d«      dz  z
  t        t        «      dz  z  z   dz   dt        z
  t        t        «      z  t        z  z   dt        z  z   «      t        t        t        «      dEt        z  dz  dz
  «      gfg}|D ]  \  }}t        ||| «       Œ yF)Gaû  
    This function tests the computation of rational
    particular solutions for a Riccati ODE.

    Each test case has 2 values -

    1. eq - Riccati ODE to be solved.
    2. sol - Expected solution to the equation.

    Some examples have been taken from the paper - "Statistical Investigation of
    First-Order Algebraic ODEs and their Rational General Solutions" by
    Georg Grasegger, N. Thieu Vo, Franz Winkler

    https://www3.risc.jku.at/publications/download/risc_5197/RISCReport15-19.pdf
    ÚC0r<   r   rO   rV   r*   r;   r‹   rl   rI   rS   rT   rJ   rq   rk   rg   r–   é   é9   é:   rQ   rR   r€   rh   rr   r‰   rÀ   rs   éÜ   éï  i  iœ  rn   r±   r¡   é0   rN   i  r£   r¤   rŒ   rÃ   rˆ   r¨   r¦   i0H  i– iFî i4å" i˜<… iî±i2Ò�i"0Â	iÐ�imë–i…^ÈéŒ   r¥   i  i<Z  i8X iÄ4 iLžB i¾‹¦ i|Mi:£ói�Ñù r”   r_   N)	r   r	   r&   r'   r=   r   r
   r   rï   ©rñ   rX   rE   rF   s       r,   Útest_solve_riccatirú   Û  s¿  € ô  
ˆt‹€Bô 	Œ1ŒQ‹4�9‰9”Q‹<œ!œA›$ ™'Ñ! AÑ% qÓ)Ü	ŒAŒa‹D”$�q“'Ó	œBœq¤›t¤d¨1£g XÓ.Ð/ðô 	
Œ!‹ˆa‰”!”A“$—)‘)œA“,Ñ ¤1¤Q£4¡¬¡Ñ)¨A¬a°©d©FÑ2Ü	ŒAŒa‹D�2�b‘5œ1‘9˜r¤!™t¤a¨¡d™{Ñ+Ó	,Ð-ðð 	
Œ!ˆQ‰$‰Œq”‹t�y‰yœ‹|Ñœa ¤1¤Q£4¡¬!¬A«$¯)©)´A«,Ñ!6¸Ñ!:Ñ;Ñ;¼qÄ»tÀa¹xÌÌ1Ë¹oÑMÜ	ŒAŒa‹D�2˜œ!˜Q™$™‘; ¤a¡Ñ(Ó	)Ð*ðô 	Œ1ŒQ‹4�9‰9”Q‹<œ!œA›$ ™'˜ A¤q¨!¡t¬a°©d¡{¡OÑ3Ó4Ü	ŒAŒa‹D�!”Q˜‘TœA‘X‘,Ó	Ð ðô 	
ˆ1‰�”!‘�aœ‘c‘	œ1œQ›4ÑÑ¤!¤A£$¨¡'Ñ)¬A¬a«D¯I©I´a«LÑ8Ü	ŒAŒa‹D�2”a‘4œ!˜Q™$‘; ¤1¡Ñ$ r¬A¨q©D¡yÑ1Ó	2´B´q¼³t¼Q³KÐ@ðô
 	
ˆ1‰ŒQŒq‹T�Y‰Y”q‹\ÑœA˜q™DÑ ¤1 a¬¬!«¨a©¡i´!´A³$·)±)¼A³,Ñ&>Ñ#?Ñ?Ä!ÄAÃ$ÑFÜ	ŒAŒa‹D�2”a˜‘d‘7œQ‘; ¤a¨¡d¡Ñ+Ó	,¬b´´1³´q¸!±t«nÐ=ðô 
Œ1‹ˆq‰ˆ”1”Q“4—9‘9œQ“<Ñ 2¤a¨¡d¡7¨R´©T¡>°AÑ#5¼¸Q¹À¹
ÀAÄaÁCØñEØñDñ 9ñ #ñ 	ä	ŒAŒa‹D�1�R‘4œ‘6˜A˜b™D‘= 2¤a¨¡d¡7Ñ*¨R´°1±©WÑ4°r¼!¸Q¹$±wÑ>ÀÄAÀqÁDÁÑHØ
ŒQ‰$ñØñØ�r‘Tœ!˜Q™$‘Y  2¡¤a¡Ñ'¨!¨B©$Ñ.°´1°a±4±Ñ7¸"¼QÀ¹T¹'ÑAØ
Œ1ˆa‰4‰ñØ”Q˜‘T‘'ñØœq !™t™Gñ$Ø&'¬¡cñ*ñ+ó 
,ä-/´´!³°q¼±s¸Q±wÀÄ1ÀaÁ4ÁØ
ŒA‰#ñBØñBñ 7ó .ð	ðô 	
Œ!‹ˆa‰”!”A“$—)‘)œA“,Ñ !¤A q¡D¡&¨1¬Q°©T©6¡/°B´q¸!±t±GÑ";¸aÄÀ1Á¹fÑ"DØŒa�‰d‰Fñ#Øœ‘Tñ#Øñ#Ø !¤! Q¡$¡ñ"(ñ 	(ä	ŒAŒa‹D�1”Q˜‘T‘6˜Aœa ™d™F‘?¤Q¨¡TÑ)¨A¬a°©d©FÑ2°Q´q±SÑ8¸1Ñ<¸qÄÀAÁ¹vØ”�1‘‰fñ@ñ ó 
ð 	ðô 	Œ1ŒQ‹4�9‰9”Q‹<œ1˜a™4˜% "¤Q¨¡T¡'™/¨B¬q°!©t©GÑ3°b¼¸A¹±gÑ=ÀÄ1ÁÑDÀqÑHÜ�‰U�Rœ˜2™‘XÑ ¤1 b¡5¡Ñ(¨3¬q°!©t©8Ñ3°c¼!¸Q¹$±hÑ>ÀÄQÈÁTÁÑIÈCÔPQÐSTÑPTÉHÑTØ”�1‘‰HñØœ1˜a™4‘xñ Ø"%¤a¨¡d¡(ñ+Ø-/´°1±©Wñ5Ø79¼!±tñ<Ø>?ñ@ñAäCDÄQÃ4ÈÁ7ñKäMNÌqËTñRó 	Sô 
ŒAŒa‹D�!”Q˜‘T˜Aœa ™d™F‘] R¬¨1©¡WÑ,¨r´!°Q±$©wÑ6¸¼A¸q¹D¹Ñ@À1ÄQÁ3ÑFÈÑJÑKÓ	LÐMð	ô 	Œ1ŒQ‹4�9‰9”Q‹<œœ1œQ›4™ !¤A¡#™¨¬1©¨q©´!´A³$¸±'Ñ(9¸1¼Q¹3À¹7Ñ(CÑCØŒq�!‰t‰V�aœ‘c‰\˜BÑ ¤A q¡D¡¨2¬a°©d©7Ñ!2°QÑ!6Ñ7ñ8Ü:;¸A»$¸q¹&ñAó 	Bä	ŒAŒa‹D�1�qœ‘s‘7˜Qœq™S 1™WÑ%Ó	&Ð'ðô 	Œ1ŒQ‹4�9‰9”Q‹<˜#œa ™d™( R¬¡T™/¨BÑ.°´A°q±D±¸2¼aÀ¹d¹7Ñ1BÀQÄqÁSÑ1HÈ1Ñ1LÑMØ””!“�a‘‰i˜œ1™˜q™Ñ!ñ"ó 	#ä	ŒAŒa‹D�1”Q‘3˜‘7˜Qœq™S 1™WÑ%Ó	&Ð'ðô 	
Œ!‹�	‰	”!‹˜œ!˜Q™$™ ™
¤A¤a£D¨!¡GÑ+¬AÑ-Ñ-°´1°a±4±¼!±¸a±ÄÄ1ÃÑ0EÄqÌ!ØñKñ Hñ 1ñ 	Ø”q˜!‘t‘V˜a¤™c‘\ AÑ%¬¬1¨q©5°1©*©Ñ5ñ	6ä	ŒAŒa‹D�B�3œ˜A™‘:¤ 1¡Ñ$ q¬¡sÑ*¨R´©T°B©Y¼¸A¹Ñ-=ÄÀ1ÁÑ-DÄqÈ!ÁtÑ-KÜñ.ñ ó 
Ü”aœ“d˜B¤ A¡™JÓ'ð	)ðô 	
Œ!‹�	‰	”!‹�qœ‘sœAœa›D !™G a™KÑ(¬Ñ*Ñ*Ü	ŒAŒa‹D”A�2�b‘5œ1œQ ™T™6‘> B¬¨A©¡IÑ.Ó	/´´A´a³D¼1¸"³Ð>ðô 	Œ1ŒQ‹4�9‰9”Q‹<œœ1œQ›4™¤ 1£ a¡¨!¬A©#¡Ñ.´!°A±#¼¸!»¸Q¹±,ÄÄ!ÃÀaÁÑ1GØŒq‰S�‰U”Q�q“T˜!‘V‰^ñ2ñ Ü  ›t A™vñ&Ø),¬Q°©T©°D¼±FÑ):¸SÑ)@À2ÄaÈÁdÁ7ÈRÔPQÐSTÑPTÉWÑCTÑ(UñVó 	Wä	ŒAŒa‹D�1”q‘5œ!‘)Ó	œb¤¤1£¨¬1¨b©5©°2´a¸±e±8Ñ(;¸cÄ!ÀRÁ%¹iÑ(GÈ$ÌqÐRTÉuÉ*Ñ(TØ”!�R‘%‰Kñ)Ø ¤ A¡™+ñ)&Ø(.¬q°!©t©ñ)4Ø6=¼aÀ¹d±lñ)CØELÌQÐPQÉTÁ\ñ)RØT\Üˆq‰DñUñ)àœA˜q™D‘=ñ)!à#,¬Q°©T¡>ñ)2à4=¼aÀ¹d±Nñ)CàENÌqÁ[ñ)QàS\ñ)]ð ”�B‘‰h˜œQ ™U™Ñ" S¬¨B©¡YÑ.°´a¸±e±Ñ;¸eÄAÀrÁE¹kÑIÈFÔSTÐVWÑSWÉKÑWØ”1�a‘4‰KñØ!¤! Q¡$™,ñ'Ø)0´°A±©ñ6Ø8@ÄÀAÁ¹ñFØHPÔQRÐTUÑQUÉñVØX`Ü�‰TñYñàœQ ™T‘Mñ"à$,¬Q¡Jñ/ñ(1ó 2ð 	3ð	ô 	Œ1ŒQ‹4�9‰9”Q‹<˜œA˜q™D™ 2¤a¨¡d¡7Ñ*¬q¨b°©d´Q°q³T¸!±V©m¼Q¼q»TÀ1¹WÑ-DÑDÀqÑHÓIÜ	ŒAŒa‹D�!”A‘#‹ˆðô 	Œ1ŒQ‹4�9‰9”Q‹<˜œA˜q™D™ ™ R¬¡T¨!¡VÑ+¬q°©s´Q°q³T¸!±V©|¼Q¼q»TÀ1¹WÑ.DÑDØñØ”q‘5œ!œA›$‘,œq‘.ñ!Ø#$¤Q¡3ñ'ó 	(ä	ŒAŒa‹D�"”Q‘$�q‘&˜1‘*Ó	ÐððAd€EðJ ò %‰ˆˆCÜ˜˜C Õ$ñ%r.   c            	      ó\  — t        d«      } t        t        t        «      j	                  t        «      dt        z
  t        t        «      z  t        dz
  z  ddt        z  z
  t        t        «      dz  z  dt        z  dz
  z  z   dt        dz  z  dt        dz  z  z
  d	t        z  z   d
z
  dt        dz  z  dt        dz  z  z
  dt        dz  z  z   dt        z  z
  dz   z  z   dz   «      t        t        t        «      dt        z  dz   dt        z  dz
  z  «      gfg}|D ]  \  }}t        ||| «       Œ y)zß
    This function tests the computation of rational
    particular solutions for a Riccati ODE.

    Each test case has 2 values -

    1. eq - Riccati ODE to be solved.
    2. sol - Expected solution to the equation.
    rñ   r*   r;   r<   rR   rS   iŒÖ  i/ i»‹ i-˜ rQ   rO   é„   i*  i‹  rö   r”   rT   N)r   r	   r&   r'   r=   rï   rù   s       r,   Útest_solve_riccati_slowrý   X  s-  € ô 
ˆt‹€Bô 	Œ1ŒQ‹4�9‰9”Q‹<˜!œa™%¤¤1£™¤q¨1¡uÑ-°°R¼±T±¼1¼Q»4À¹7Ñ0BÀAÄaÁCÈ!ÁGÑ0LÑLØ”1�a‘4‰Z˜&¤ A¡™+Ñ%¨´©	Ñ1°GÑ;¸aÄÀ1Á¹fÀsÌ1ÈaÉ4ÁxÑ>OÐRUÔVWÐYZÑVZÑRZÑ>ZØ”‰Fñ?Øñ?ñ ñà ñ!ó 	"ô 
ŒAŒa‹D�2”a‘4˜!‘8˜a¤™c A™gÑ&Ó	'Ð(ð	ð€Eð ò %‰ˆˆCÜ˜˜C Õ$ñ%r.   N)JÚsympy.core.randomr   Úsympy.core.functionr   Úsympy.core.mulr   Úsympy.core.numbersr   r   r   Úsympy.core.relationalr	   Úsympy.core.singletonr
   Úsympy.core.symbolr   r   Ú&sympy.functions.elementary.exponentialr   r   Ú%sympy.functions.elementary.hyperbolicr   Ú(sympy.functions.elementary.miscellaneousr   Ú(sympy.functions.elementary.trigonometricr   Úsympy.polys.polytoolsr   Úsympy.simplify.ratsimpr   Úsympy.solvers.ode.subscheckr   Úsympy.testing.pytestr   Úsympy.solvers.ode.riccatir   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r-   r3   r9   rG   r]   ra   r†   rŽ   r’   rŸ   r­   rº   rÅ   rÇ   rÏ   rÒ   r×   rÝ   rï   rú   rý   r‘   r.   r,   ú<module>r     sî   ðÝ %Ý (Ý ß 0Ñ 0Ý $Ý "ß .ß =Ý 6Ý 9Ý 8Ý &Ý *Ý 3Ý %÷÷ ÷ ÷ ó ñ ˆSƒM€ÙˆCƒL€ò
BòEòòò ?FòD36òl`)òF).òX=ò2ò.+0ò\#:òL;?ò|)ò<4ò~,òB4ò@@GòFJò$z%ðz ñ%ó ñ%r.   