Ë
    7^(hÉ' ã                  óÆ  — U d Z ddlmZ ddlmZmZ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 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&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ ddl]m^Z^ ddl_m`Z`maZa ddlbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZk ddllmmZm d d!lnmoZo dd"lpmqZq dd#lrmsZs dd$ltmuZumvZvmwZwmxZx dd%lymzZz 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… dd*l†m‡Z‡ e G d+„ d,e	«      «       Zˆe G d-„ d.eˆe	«      «       Z‰e G d/„ d0e‰«      «       ZŠe G d1„ d2eˆ«      «       Z‹e G d3„ d4e‰«      «       ZŒe G d5„ d6e‰«      «       Z�e G d7„ d8eˆ«      «       ZŽe G d9„ d:eˆ«      «       Z�e G d;„ d<eˆ«      «       Z�e G d=„ d>eˆ«      «       Z‘e G d?„ d@e‰e	«      «       Z’e G dA„ dBe’«      «       Z“e G dC„ dDe’«      «       Z”e G dE„ dFe’«      «       Z•e G dG„ dHe’«      «       Z–e G dI„ dJe’«      «       Z—e G dK„ dLe’«      «       Z˜e G dM„ dNe‰e	«      «       Z™e G dO„ dPe™«      «       Zše G dQ„ dRe™«      «       Z›e G dS„ dTe‰«      «       Zœe G dU„ dVe‰«      «       Z�e G dW„ dXe‰«      «       Zže G dY„ dZe‰«      «       ZŸe G d[„ d\e‰«      «       Z e G d]„ d^e‰«      «       Z¡e G d_„ d`e‰«      «       Z¢e G da„ dbeˆ«      «       Z£e G dc„ ddeˆ«      «       Z¤e G de„ dfe‰«      «       Z¥e G dg„ dheˆ«      «       Z¦e G di„ dje¦«      «       Z§e G dk„ dleˆ«      «       Z¨e G dm„ dneˆ«      «       Z©e G do„ dpe‰«      «       Zªe G dq„ dreˆ«      «       Z«e G ds„ dte‰«      «       Z¬e G du„ dve‰e	«      «       Z­e G dw„ dxe­«      «       Z®e G dy„ dze­«      «       Z¯e G d{„ d|e­«      «       Z°e G d}„ d~e­«      «       Z±e G d„ d€e­«      «       Z²e G d�„ d‚e­«      «       Z³e G dƒ„ d„e­«      «       Z´e G d…„ d†e­«      «       Zµe G d‡„ dˆe‰e	«      «       Z¶e G d‰„ dŠe¶«      «       Z·e G d‹„ dŒe¶«      «       Z¸e G d�„ dŽe¶«      «       Z¹e G d�„ d�e¶«      «       Zºe G d‘„ d’e¶«      «       Z»e G d“„ d”e¶«      «       Z¼e G d•„ d–e‰«      «       Z½e G d—„ d˜e‰«      «       Z¾e G d™„ dše‰«      «       Z¿e G d›„ dœe‰«      «       ZÀe G d�„ dže‰«      «       ZÁe G dŸ„ d e‰«      «       ZÂe G d¡„ d¢e‰«      «       ZÃ G d£„ d¤e«      ZÄd¥„ ZÅd¦„ ZÆeKeJeIeLeMeNfZÇd§„ ZÈd¨„ ZÉd©„ ZÊdª„ ZËd«„ ZÌd¬„ ZÍd­„ ZÎd®„ ZÏd¯„ ZÐg ZÑd°eÒd±<   g ZÓ e,d²«      ZÔd³„ ZÕdôd´„ZÖdõdµ„Z×dödõd¶„ZØd·„ ZÙdõd¸„ZÚd÷d¹„ZÛdº„ ZÜd»„ ZÝdõd¼„ZÞd½„ Zßdõd¾„Zàdödõd¿„ZádødÀ„ZâedÁ„ «       ZãedÂ„ «       ZäedÃ„ «       ZåedÄ„ «       ZæedÅ„ «       ZçdÆ„ ZèdÇ„ Zé eèdÈ„ «      Zê eédÉ„ «      Zë eèdÊ„ «      Zì eédË„ «      Zí eèdÌ„ «      Zî eédÍ„ «      Zï eèdÎ„ «      Zð eédÏ„ «      Zñ eèdÐ„ «      Zò eédÑ„ «      Zó eèdÒ„ «      Zô eédÓ„ «      Zõ eèdÔ„ «      Zö eédÕ„ «      Z÷ eèdÖ„ «      Zø eéd×„ «      ZùdØ„ ZúdÙ„ ZûdÚ„ ZüdÛ„ ZýdÜ„ ZþdÝ„ ZÿdÞ„ �Z dõdß„�Zdà„ �Z eÉdá„ dâ„ «      �Z eÉdã„ dä„ «      �Z eÉdå„ dæ„ «      �Z eÉdç„ dè„ «      �Zdé„ �Zdê„ �Zdë„ �Z	i �Z
dìeÒdí<    e�e«      �ZdîeÒdï<    e,dð«      �Zdñ„ �Zdò„ �Zyó)ùa/  Integration method that emulates by-hand techniques.

This module also provides functionality to get the steps used to evaluate a
particular integral, in the ``integral_steps`` function. This will return
nested ``Rule`` s representing the integration rules used.

Each ``Rule`` class represents a (maybe parametrized) integration rule, e.g.
``SinRule`` for integrating ``sin(x)`` and ``ReciprocalSqrtQuadraticRule``
for integrating ``1/sqrt(a+b*x+c*x**2)``. The ``eval`` method returns the
integration result.

The ``manualintegrate`` function computes the integral by calling ``eval``
on the rule returned by ``integral_steps``.

The integrator can be extended with new heuristics and evaluation
techniques. To do so, extend the ``Rule`` class, implement ``eval`` method,
then write a function that accepts an ``IntegralInfo`` object and returns
either a ``Rule`` instance or ``None``. If the new technique requires a new
match, add the key and call to the antiderivative function to integral_steps.
To enable simple substitutions, add the match to find_substitutions.

é    )Úannotations)Ú
NamedTupleÚTypeÚCallableÚSequence)ÚABCÚabstractmethod)Ú	dataclass)Údefaultdict)ÚMapping)ÚAdd)Úcacheit)ÚDict)ÚExpr)Ú
Derivative)Ú	fuzzy_not)ÚMul)ÚIntegerÚNumberÚE)ÚPow)ÚEqÚNeÚBoolean)ÚS)ÚDummyÚSymbolÚWild)ÚAbs)ÚexpÚlog)ÚHyperbolicFunctionÚcschÚcoshÚcothÚsechÚsinhÚtanhÚasinh)Úsqrt)Ú	Piecewise)ÚTrigonometricFunctionÚcosÚsinÚtanÚcotÚcscÚsecÚacosÚasinÚatanÚacotÚacscÚasec)Ú	HeavisideÚ
DiracDelta)
ÚerfÚerfiÚfresnelcÚfresnelsÚCiÚChiÚSiÚShiÚEiÚli)Ú
uppergamma)Ú
elliptic_eÚ
elliptic_f)	Ú
chebyshevtÚ
chebyshevuÚlegendreÚhermiteÚlaguerreÚassoc_laguerreÚ
gegenbauerÚjacobiÚOrthogonalPolynomial)Úpolylogé   )ÚIntegral)ÚAnd)Úprimefactors)ÚdegreeÚlcm_listÚgcd_listÚPoly)Úfraction)Úsimplify)Úsolve)ÚswitchÚdo_oneÚ	null_safeÚ	condition)Úiterable)Údebugc                  óF   — e Zd ZU ded<   ded<   edd„«       Zed	d„«       Zy)
ÚRuler   Ú	integrandr   Úvariablec                 ó   — y ©N© ©Úselfs    ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/integrals/manualintegrate.pyÚevalz	Rule.evalM   ó   € àó    c                 ó   — y rh   ri   rj   s    rl   Úcontains_dont_knowzRule.contains_dont_knowQ   rn   ro   N©Úreturnr   ©rs   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r	   rm   rq   ri   ro   rl   rd   rd   H   s3   … àƒOØÓàòó ðð òó ñro   rd   c                  ó   — e Zd ZdZdd„Zy)Ú
AtomicRulez1A simple rule that does not depend on other rulesc                 ó   — y)NFri   rj   s    rl   rq   zAtomicRule.contains_dont_knowY   s   € Øro   Nrt   )rv   rw   rx   Ú__doc__rq   ri   ro   rl   r{   r{   V   s
   „ á;ôro   r{   c                  ó   — e Zd ZdZdd„Zy)ÚConstantRulezintegrate(a, x)  ->  a*xc                ó4   — | j                   | j                  z  S rh   )re   rf   rj   s    rl   rm   zConstantRule.eval`   s   € Ø�~‰~ §¡Ñ-Ð-ro   Nrr   ©rv   rw   rx   r}   rm   ri   ro   rl   r   r   ]   s
   „ á"ô.ro   r   c                  ó@   — e Zd ZU dZded<   ded<   ded<   d
d„Zdd„Zy	)ÚConstantTimesRulez.integrate(a*f(x), x)  ->  a*integrate(f(x), x)r   ÚconstantÚotherrd   Úsubstepc                óP   — | j                   | j                  j                  «       z  S rh   )r„   r†   rm   rj   s    rl   rm   zConstantTimesRule.evalk   s   € Ø�}‰}˜tŸ|™|×0Ñ0Ó2Ñ2Ð2ro   c                ó6   — | j                   j                  «       S rh   ©r†   rq   rj   s    rl   rq   z$ConstantTimesRule.contains_dont_known   ó   € Ø�|‰|×.Ñ.Ó0Ð0ro   Nrr   rt   ©rv   rw   rx   r}   ry   rm   rq   ri   ro   rl   rƒ   rƒ   d   s   … á8ØƒNØƒKØƒMó3ô1ro   rƒ   c                  ó.   — e Zd ZU dZded<   ded<   dd„Zy)Ú	PowerRulezintegrate(x**a, x)r   Úbaser    c                óÄ   — t        | j                  | j                  dz   z  | j                  dz   z  t        | j                  d«      ft	        | j                  «      df«      S ©NrR   éÿÿÿÿT)r+   rŽ   r    r   r!   rj   s    rl   rm   zPowerRule.evalx   sP   € ÜØ�i‰i˜$Ÿ(™( Q™,Ñ'¨$¯(©(°Q©,Ñ7¼¸D¿H¹HÀbÓ9IÐJÜ�—‘‹^˜TÐ"ó
ð 	
ro   Nrr   ©rv   rw   rx   r}   ry   rm   ri   ro   rl   r�   r�   r   s   … áØ
ƒJØ	ƒIô
ro   r�   c                  ó.   — e Zd ZU dZded<   ded<   dd„Zy)ÚNestedPowRulezintegrate((x**a)**b, x)r   rŽ   r    c                óÈ   — | j                   | j                  z  }t        || j                  dz   z  t	        | j                  d«      f|t        | j                   «      z  df«      S r�   )rŽ   re   r+   r    r   r!   )rk   Úms     rl   rm   zNestedPowRule.eval…   sU   € Ø�I‰I˜Ÿ™Ñ&ˆÜ˜!˜tŸx™x¨!™|Ñ,¬b°·±¸2Ó.>Ð?Øœc $§)¡)›nÑ,¨dÐ3ó5ð 	5ro   Nrr   r’   ri   ro   rl   r”   r”      s   … á!Ø
ƒJØ	ƒIô5ro   r”   c                  ó,   — e Zd ZU dZded<   dd„Zdd„Zy)	ÚAddRulezDintegrate(f(x) + g(x), x) -> integrate(f(x), x) + integrate(g(x), x)ú
list[Rule]Úsubstepsc                ó4   — t        d„ | j                  D «       Ž S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrh   )rm   ©Ú.0r†   s     rl   ú	<genexpr>zAddRule.eval.<locals>.<genexpr>‘   s   è ø€ ÒA¨�W—\‘\—^ÑAùó   ‚)r   rš   rj   s    rl   rm   zAddRule.eval�   s   € ÜÑA°4·=±=ÔAÐBÐBro   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrh   ©rq   r�   s     rl   rŸ   z-AddRule.contains_dont_know.<locals>.<genexpr>”   s   è ø€ ÒM°G�7×-Ñ-×/ÑMùr    )Úanyrš   rj   s    rl   rq   zAddRule.contains_dont_know“   s   € ÜÑM¸t¿}¹}ÔMÓMÐMro   Nrr   rt   r‹   ri   ro   rl   r˜   r˜   ‹   s   … áNØÓóCôNro   r˜   c                  ó@   — e Zd ZU dZded<   ded<   ded<   dd„Zdd	„Zy
)ÚURulez;integrate(f(g(x))*g'(x), x) -> integrate(f(u), u), u = g(x)r   Úu_varr   Úu_funcrd   r†   c                óP  — | j                   j                  «       }| j                  j                  rQ| j                  j	                  «       \  }}|dk(  r/|j                  t        | j                  «      t        |«       «      }|j                  | j                  | j                  «      S )Nr‘   )r†   rm   r¨   Úis_PowÚas_base_expÚsubsr!   r§   )rk   ÚresultrŽ   Úexp_s       rl   rm   z
URule.evalž   su   € Ø—‘×"Ñ"Ó$ˆØ�;‰;×ÒØŸ™×0Ñ0Ó2‰JˆD�$Ø�rŠzàŸ™¤S¨¯©£_´s¸4³y°jÓA�Ø�{‰{˜4Ÿ:™: t§{¡{Ó3Ð3ro   c                ó6   — | j                   j                  «       S rh   r‰   rj   s    rl   rq   zURule.contains_dont_know§   rŠ   ro   Nrr   rt   r‹   ri   ro   rl   r¦   r¦   —   s   … áEØƒMØƒLØƒMó4ô1ro   r¦   c                  óJ   — e Zd ZU dZded<   ded<   ded<   ded	<   dd
„Zdd„Zy)Ú	PartsRulez@integrate(u(x)*v'(x), x) -> u(x)*v(x) - integrate(u'(x)*v(x), x)r   Úur   Údvrd   Úv_stepúRule | NoneÚsecond_stepc                ó¦   — | j                   €J ‚| j                  j                  «       }| j                  |z  | j                   j                  «       z
  S rh   )r¶   r´   rm   r²   )rk   Úvs     rl   rm   zPartsRule.eval³   sH   € Ø×ÑÐ+Ð+Ð+Ø�K‰K×ÑÓˆØ�v‰v˜‰z˜D×,Ñ,×1Ñ1Ó3Ñ3Ð3ro   c                óŽ   — | j                   j                  «       xs* | j                  d uxr | j                  j                  «       S rh   )r´   rq   r¶   rj   s    rl   rq   zPartsRule.contains_dont_know¸   s@   € Ø�{‰{×-Ñ-Ó/ò TØ×Ñ DÐ(ÒR¨T×-=Ñ-=×-PÑ-PÓ-Rð	Tro   Nrr   rt   r‹   ri   ro   rl   r±   r±   «   s%   … áJØƒIØƒHØƒLØÓó4ô
Tro   r±   c                  ó6   — e Zd ZU dZded<   ded<   d	d„Zd
d„Zy)ÚCyclicPartsRulez9Apply PartsRule multiple times to integrate exp(x)*sin(x)zlist[PartsRule]Úparts_rulesr   Úcoefficientc                óØ   — g }d}| j                   D ]@  }|j                  ||j                  z  |j                  j	                  «       z  «       |dz  }ŒB t        |Ž d| j                  z
  z  S )NrR   r‘   )r¼   Úappendr²   r´   rm   r   r½   )rk   r­   ÚsignÚrules       rl   rm   zCyclicPartsRule.evalÃ   sl   € ØˆØˆØ×$Ñ$ò 	ˆDØ�M‰M˜$ §¡™-¨$¯+©+×*:Ñ*:Ó*<Ñ<Ô=Ø�B‰J‰Dð	ô �Fˆ|˜q 4×#3Ñ#3Ñ3Ñ4Ð4ro   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrh   r£   r�   s     rl   rŸ   z5CyclicPartsRule.contains_dont_know.<locals>.<genexpr>Ì   s   è ø€ ÒP°G�7×-Ñ-×/ÑPùr    )r¤   r¼   rj   s    rl   rq   z"CyclicPartsRule.contains_dont_knowË   s   € ÜÑP¸t×?OÑ?OÔPÓPÐPro   Nrr   rt   r‹   ri   ro   rl   r»   r»   ½   s   … áCØ Ó ØÓó5ôQro   r»   c                  ó   — e Zd Zy)ÚTrigRuleN©rv   rw   rx   ri   ro   rl   rÅ   rÅ   Ï   ó   „ àro   rÅ   c                  ó   — e Zd ZdZdd„Zy)ÚSinRulezintegrate(sin(x), x) -> -cos(x)c                ó.   — t        | j                  «       S rh   )r-   rf   rj   s    rl   rm   zSinRule.eval×   ó   € Ü�D—M‘MÓ"Ð"Ð"ro   Nrr   r�   ri   ro   rl   rÉ   rÉ   Ô   s
   „ á)ô#ro   rÉ   c                  ó   — e Zd ZdZdd„Zy)ÚCosRulezintegrate(cos(x), x) -> sin(x)c                ó,   — t        | j                  «      S rh   )r.   rf   rj   s    rl   rm   zCosRule.evalÞ   ó   € Ü�4—=‘=Ó!Ð!ro   Nrr   r�   ri   ro   rl   rÍ   rÍ   Û   s
   „ á(ô"ro   rÍ   c                  ó   — e Zd ZdZdd„Zy)Ú
SecTanRulez%integrate(sec(x)*tan(x), x) -> sec(x)c                ó,   — t        | j                  «      S rh   )r2   rf   rj   s    rl   rm   zSecTanRule.evalå   rÏ   ro   Nrr   r�   ri   ro   rl   rÑ   rÑ   â   s
   „ á/ô"ro   rÑ   c                  ó   — e Zd ZdZdd„Zy)Ú
CscCotRulez&integrate(csc(x)*cot(x), x) -> -csc(x)c                ó.   — t        | j                  «       S rh   )r1   rf   rj   s    rl   rm   zCscCotRule.evalì   rË   ro   Nrr   r�   ri   ro   rl   rÔ   rÔ   é   s
   „ á0ô#ro   rÔ   c                  ó   — e Zd ZdZdd„Zy)ÚSec2Rulez!integrate(sec(x)**2, x) -> tan(x)c                ó,   — t        | j                  «      S rh   )r/   rf   rj   s    rl   rm   zSec2Rule.evaló   rÏ   ro   Nrr   r�   ri   ro   rl   r×   r×   ð   s
   „ á+ô"ro   r×   c                  ó   — e Zd ZdZdd„Zy)ÚCsc2Rulez"integrate(csc(x)**2, x) -> -cot(x)c                ó.   — t        | j                  «       S rh   )r0   rf   rj   s    rl   rm   zCsc2Rule.evalú   rË   ro   Nrr   r�   ri   ro   rl   rÚ   rÚ   ÷   s
   „ á,ô#ro   rÚ   c                  ó   — e Zd Zy)ÚHyperbolicRuleNrÆ   ri   ro   rl   rÝ   rÝ   þ   rÇ   ro   rÝ   c                  ó   — e Zd ZdZdd„Zy)ÚSinhRulez integrate(sinh(x), x) -> cosh(x)c                ó,   — t        | j                  «      S rh   )r$   rf   rj   s    rl   rm   zSinhRule.eval  ó   € Ü�D—M‘MÓ"Ð"ro   Nrr   r�   ri   ro   rl   rß   rß     s
   „ á*ô#ro   rß   c                  ó   — e Zd ZdZd„ Zy)ÚCoshRulez integrate(cosh(x), x) -> sinh(x)c                ó,   — t        | j                  «      S rh   )r'   rf   rj   s    rl   rm   zCoshRule.eval  rá   ro   Nr�   ri   ro   rl   rã   rã   
  s
   „ á*ó#ro   rã   c                  ó.   — e Zd ZU dZded<   ded<   dd„Zy)ÚExpRulez integrate(a**x, x) -> a**x/ln(a)r   rŽ   r    c                óF   — | j                   t        | j                  «      z  S rh   )re   r!   rŽ   rj   s    rl   rm   zExpRule.eval  s   € Ø�~‰~¤ D§I¡I£Ñ.Ð.ro   Nrr   r’   ri   ro   rl   ræ   ræ     s   … á*Ø
ƒJØ	ƒIô/ro   ræ   c                  ó$   — e Zd ZU dZded<   dd„Zy)ÚReciprocalRulezintegrate(1/x, x) -> ln(x)r   rŽ   c                ó,   — t        | j                  «      S rh   )r!   rŽ   rj   s    rl   rm   zReciprocalRule.eval   s   € Ü�4—9‘9‹~Ðro   Nrr   r’   ri   ro   rl   ré   ré     s   … á$Ø
ƒJôro   ré   c                  ó   — e Zd ZdZdd„Zy)Ú
ArcsinRulez'integrate(1/sqrt(1-x**2), x) -> asin(x)c                ó,   — t        | j                  «      S rh   )r4   rf   rj   s    rl   rm   zArcsinRule.eval'  rá   ro   Nrr   r�   ri   ro   rl   rì   rì   $  s
   „ á1ô#ro   rì   c                  ó   — e Zd ZdZdd„Zy)ÚArcsinhRulez'integrate(1/sqrt(1+x**2), x) -> asin(x)c                ó,   — t        | j                  «      S rh   )r)   rf   rj   s    rl   rm   zArcsinhRule.eval.  s   € Ü�T—]‘]Ó#Ð#ro   Nrr   r�   ri   ro   rl   rï   rï   +  s
   „ á1ô$ro   rï   c                  ó8   — e Zd ZU dZded<   ded<   ded<   dd„Zy)	ÚReciprocalSqrtQuadraticRulezWintegrate(1/sqrt(a+b*x+c*x**2), x) -> log(2*sqrt(c)*sqrt(a+b*x+c*x**2)+b+2*c*x)/sqrt(c)r   ÚaÚbÚcc           	     óü   — | j                   | j                  | j                  | j                  f\  }}}}t	        dt        |«      z  t        |||z  z   ||dz  z  z   «      z  |z   d|z  |z  z   «      t        |«      z  S )Né   )ró   rô   rõ   rf   r!   r*   ©rk   ró   rô   rõ   Úxs        rl   rm   z ReciprocalSqrtQuadraticRule.eval9  st   € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�Ü�1”T˜!“W‘9œT ! A a¡C¡%¨¨!¨Q©$©¡,Ó/Ñ/°Ñ1°!°A±#°a±%Ñ7Ó8¼¸a»Ñ@Ð@ro   Nrr   r’   ri   ro   rl   rò   rò   2  s   … áaØƒGØƒGØƒGôAro   rò   c                  óB   — e Zd ZU dZded<   ded<   ded<   ded<   d
d„Zy	)ÚSqrtQuadraticDenomRulez(integrate(poly(x)/sqrt(a+b*x+c*x**2), x)r   ró   rô   rõ   z
list[Expr]Úcoeffsc           	     óü  ‡‡‡— | j                   | j                  | j                  | j                  j	                  «       | j
                  f\  }}}ŠŠg Š‰j	                  «       Št        t        ‰«      dz
  «      D ]g  }t        ‰«      dz
  |z
  }‰|   ||z  z  }‰j                  |«       ‰|dz   xx   d|z  dz
  |z  dz  |z  z  cc<   ‰|dz   xx   |dz
  |z  |z  z  cc<   Œi ‰d   ‰d   }}t        ||‰z  z   |‰dz  z  z   «      }	|||z  d|z  z  z
  }
|
dk(  rd}n-t        t        d|	z  ‰«      d¬«      }|
|j                  «       z  }t        g ˆˆˆfd„t        t        ‰«      «      D «       ¢||z  ‘­Ž |	z  |z   S )	Nr÷   rR   r‘   éþÿÿÿr   F©Ú
degeneratec              3  óR   •K  — | ]  }‰|   ‰t        ‰«      d z
  |z
  z  z  –— Œ  y­w)r÷   N)Úlen)rž   Úirü   Úresult_coeffsrù   s     €€€rl   rŸ   z.SqrtQuadraticDenomRule.eval.<locals>.<genexpr>^  s4   øè ø€ ò 9Øð # 1Ñ% a¬#¨f«+°a©-¸©/Ñ&:Õ:ñ 9ùs   ƒ$')ró   rô   rõ   rü   Úcopyrf   Úranger  r¿   r*   Úinverse_trig_ruleÚIntegralInform   r   )rk   ró   rô   rõ   r  ÚnÚcoeffÚdÚeÚsr„   ÚI0Ústeprü   r  rù   s                @@@rl   rm   zSqrtQuadraticDenomRule.evalF  sŸ  ú€ Ø!ŸV™V T§V¡V¨T¯V©V°T·[±[×5EÑ5EÓ5GÈÏÉÐVÑˆˆ1ˆa�˜ð ˆØ—‘“ˆÜ”s˜6“{ 1‘}Ó%ò 	)ˆAÜ�F“˜A‘˜a‘ˆAØ˜1‘I˜q ™s‘OˆEØ× Ñ  Ô'Ø�1�Q‘3‹K˜A˜a™C ™E 1™9 Q™; uÑ,Ñ,‹KØ�1�Q‘3‹K˜A˜a™C ™7 5™=Ñ(ŒKð	)ð �b‰z˜6 "™:ˆ1ˆÜ��1�Q‘3‘�q˜˜A™‘v‘ÓˆØ�Q�q‘S˜!˜A™#‘Y‘;ˆØ�qŠ=Ø‰Bä$¤\°!°A±#°qÓ%9ÀeÔLˆDØ˜$Ÿ)™)›+Ñ%ˆBÜð ?õ 9Ü#¤C¨Ó$6Ó7ô9ð ?Ø:;¸A¹#ò?Ø?@ñAØCEñFð 	Fro   Nrr   r’   ri   ro   rl   rû   rû   >  s    … á2ØƒGØƒGØƒGØÓôFro   rû   c                  ó8   — e Zd ZU dZded<   ded<   ded<   dd„Zy)	ÚSqrtQuadraticRulez integrate(sqrt(a+b*x+c*x**2), x)r   ró   rô   rõ   c                óx   — t        t        | j                  | j                  «      d¬«      }|j	                  «       S )NFrÿ   )Úsqrt_quadratic_ruler  re   rf   rm   )rk   r  s     rl   rm   zSqrtQuadraticRule.evali  s*   € Ü"¤<°·±ÀÇÁÓ#NÐ[`ÔaˆØ�y‰y‹{Ðro   Nrr   r’   ri   ro   rl   r  r  b  s   … á*ØƒGØƒGØƒGôro   r  c                  ó,   — e Zd ZU dZded<   dd„Zdd„Zy)	ÚAlternativeRulez Multiple ways to do integration.r™   Úalternativesc                ó<   — | j                   d   j                  «       S ©Nr   )r  rm   rj   s    rl   rm   zAlternativeRule.evals  s   € Ø× Ñ  Ñ#×(Ñ(Ó*Ð*ro   c                ó:   — t        d„ | j                  D «       «      S )Nc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wrh   r£   r�   s     rl   rŸ   z5AlternativeRule.contains_dont_know.<locals>.<genexpr>w  s   è ø€ ÒQ°G�7×-Ñ-×/ÑQùr    )r¤   r  rj   s    rl   rq   z"AlternativeRule.contains_dont_knowv  s   € ÜÑQ¸t×?PÑ?PÔQÓQÐQro   Nrr   rt   r‹   ri   ro   rl   r  r  n  s   … á*ØÓó+ôRro   r  c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚDontKnowRulezLeave the integral as is.c                óB   — t        | j                  | j                  «      S rh   )rS   re   rf   rj   s    rl   rm   zDontKnowRule.eval}  s   € Ü˜Ÿ™¨¯©Ó6Ð6ro   c                 ó   — y©NTri   rj   s    rl   rq   zDontKnowRule.contains_dont_know€  s   € Øro   Nrr   rt   )rv   rw   rx   r}   rm   rq   ri   ro   rl   r  r  z  s   „ á#ó7ôro   r  c                  ó   — e Zd ZdZdd„Zy)ÚDerivativeRulezintegrate(f'(x), x) -> f(x)c                ó  — t        | j                  t        «      sJ ‚t        | j                  j                  «      }t        |«      D ]#  \  }\  }}|| j                  k(  sŒ||dz
  f||<    n t        | j                  j                  g|¢­Ž S ©NrR   )Ú
isinstancere   r   ÚlistÚvariable_countÚ	enumeraterf   Úexpr)rk   r&  r  ÚvarÚcounts        rl   rm   zDerivativeRule.eval‡  s„   € Ü˜$Ÿ.™.¬*Ô5Ð5Ð5Ü˜dŸn™n×;Ñ;Ó<ˆÜ(¨Ó8ò 	‰OˆA‰|��UØ�d—m‘mÓ#Ø%(¨%°!©)Ð$4�˜qÑ!Ùð	ô ˜$Ÿ.™.×-Ñ-Ð?°Ò?Ð?ro   Nrr   r�   ri   ro   rl   r!  r!  „  s   „ á%ô@ro   r!  c                  ó6   — e Zd ZU dZded<   ded<   d	d„Zd
d„Zy)ÚRewriteRulez;Rewrite integrand to another form that is easier to handle.r   Ú	rewrittenrd   r†   c                ó6   — | j                   j                  «       S rh   )r†   rm   rj   s    rl   rm   zRewriteRule.eval—  s   € Ø�|‰|× Ñ Ó"Ð"ro   c                ó6   — | j                   j                  «       S rh   r‰   rj   s    rl   rq   zRewriteRule.contains_dont_knowš  rŠ   ro   Nrr   rt   r‹   ri   ro   rl   r,  r,  ‘  s   … áEØƒOØƒMó#ô1ro   r,  c                  ó   — e Zd ZdZy)ÚCompleteSquareRulez7Rewrite a+b*x+c*x**2 to a-b**2/(4*c) + c*(x+b/(2*c))**2N)rv   rw   rx   r}   ri   ro   rl   r1  r1  ž  s   „ áAØro   r1  c                  ó(   — e Zd ZU ded<   dd„Zdd„Zy)ÚPiecewiseRulez%Sequence[tuple[Rule, bool | Boolean]]Úsubfunctionsc                óx   — t        | j                  D ��cg c]  \  }}|j                  «       |f‘Œ c}}Ž S c c}}w rh   )r+   r4  rm   )rk   r†   Úconds      rl   rm   zPiecewiseRule.eval¨  sD   € ÜØ04×0AÑ0A÷CÙ,˜w¨ð $ŸL™L›N¨DÒ1ó Cð Dð 	Dùó Cs   •6
c                ó:   — t        d„ | j                  D «       «      S )Nc              3  óB   K  — | ]  \  }}|j                  «       –— Œ y ­wrh   r£   )rž   r†   Ú_s      rl   rŸ   z3PiecewiseRule.contains_dont_know.<locals>.<genexpr>­  s   è ø€ ÒT±J°G¸Q�7×-Ñ-×/ÑTùs   ‚)r¤   r4  rj   s    rl   rq   z PiecewiseRule.contains_dont_know¬  s   € ÜÑTÀ$×BSÑBSÔTÓTÐTro   Nrr   rt   ©rv   rw   rx   ry   rm   rq   ri   ro   rl   r3  r3  ¤  s   … à7Ó7óDôUro   r3  c                  ó<   — e Zd ZU ded<   ded<   ded<   d	d„Zd
d„Zy)ÚHeavisideRuler   ÚhargÚibndrd   r†   c                ó´   — | j                   j                  «       }t        | j                  «      ||j	                  | j
                  | j                  «      z
  z  S rh   )r†   rm   r9   r=  r¬   rf   r>  )rk   r­   s     rl   rm   zHeavisideRule.eval¶  sB   € ð
 —‘×"Ñ"Ó$ˆÜ˜Ÿ™Ó# v°·±¸D¿M¹MÈ4Ï9É9Ó0UÑ'UÑVÐVro   c                ó6   — | j                   j                  «       S rh   r‰   rj   s    rl   rq   z HeavisideRule.contains_dont_know¾  rŠ   ro   Nrr   rt   r:  ri   ro   rl   r<  r<  °  s   … à
ƒJØ
ƒJØƒMóWô1ro   r<  c                  ó4   — e Zd ZU ded<   ded<   ded<   dd„Zy)ÚDiracDeltaRuler   r	  ró   rô   c                óÊ   — | j                   | j                  | j                  | j                  f\  }}}}|dk(  rt	        |||z  z   «      |z  S t        |||z  z   |dz
  «      |z  S ©Nr   rR   )r	  ró   rô   rf   r9   r:   ©rk   r	  ró   rô   rù   s        rl   rm   zDiracDeltaRule.evalÈ  se   € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�Ø�Š6Ü˜Q˜q ™s™UÓ# AÑ%Ð%Ü˜!˜A˜a™C™%  1¡Ó% aÑ'Ð'ro   Nrr   ©rv   rw   rx   ry   rm   ri   ro   rl   rB  rB  Â  s   … àƒGØƒGØƒGô(ro   rB  c                  óP   — e Zd ZU ded<   ded<   ded<   ded<   ded<   dd	„Zdd
„Zy)ÚTrigSubstitutionRuler   ÚthetaÚfuncr-  rd   r†   zbool | BooleanÚrestrictionc                ó  — | j                   | j                  | j                  }}}|j                  t	        |«      dt        |«      z  «      }|j                  t        |«      dt        |«      z  «      }|j                  t        |«      dt        |«      z  «      }t        |j                  t        «      «      }t        |«      dk(  sJ ‚|d   }t        ||z
  |«      }t        |«      dk(  sJ ‚t        |d   «      \  }}t!        |t        «      r'|}|}	t#        |dz  |dz  z
  «      }
t%        |d   «      }n]t!        |t
        «      r'|}
|}	t#        |dz  |dz  z
  «      }t'        |d   «      }n&|}|}
t#        |dz  |dz  z   «      }	t)        |d   «      }t        |«      ||	z  ft        |«      |
|	z  ft        |«      ||
z  f||fg}t+        | j,                  j/                  «       j                  |«      j1                  «       | j2                  f«      S )NrR   r   r÷   )rI  rJ  rf   r¬   r2   r-   r1   r.   r0   r/   r%  Úfindr,   r  r\   rZ   r$  r*   r4   r3   r5   r+   r†   rm   ÚtrigsimprK  )rk   rI  rJ  rù   Útrig_functionÚrelationÚnumerÚdenomÚoppositeÚ
hypotenuseÚadjacentÚinverseÚsubstitutions                rl   rm   zTrigSubstitutionRule.eval×  s÷  € ØŸ™ T§Y¡Y°·±�QˆtˆØ�y‰yœ˜U› Q¤s¨5£z¡\Ó2ˆØ�y‰yœ˜U› Q¤s¨5£z¡\Ó2ˆØ�y‰yœ˜U› Q¤s¨5£z¡\Ó2ˆä˜TŸY™YÔ'<Ó=Ó>ˆÜ�=Ó! QÒ&Ð&Ð&Ø% aÑ(ˆÜ˜˜T™ =Ó1ˆÜ�8‹} Ò!Ð!Ð!Ü ¨¡Ó,‰ˆˆuä�m¤SÔ)ØˆHØˆJÜ˜E 1™H u¨a¡xÑ/Ó0ˆHÜ˜8 A™;Ó'‰GÜ˜¤sÔ+ØˆHØˆJÜ˜E 1™H u¨a¡xÑ/Ó0ˆHÜ˜8 A™;Ó'‰GàˆHØˆHÜ˜e Q™h¨°©Ñ1Ó2ˆJÜ˜8 A™;Ó'ˆGô �‹Z˜ *Ñ,Ð-Ü�‹Z˜ *Ñ,Ð-Ü�‹Z˜ (Ñ*Ð+Ø�GÐð	
ˆô Ø—‘×"Ñ"Ó$×)Ñ)¨,Ó7×@Ñ@ÓBÀD×DTÑDTÐUó
ð 	
ro   c                ó6   — | j                   j                  «       S rh   r‰   rj   s    rl   rq   z'TrigSubstitutionRule.contains_dont_knowþ  rŠ   ro   Nrr   rt   r:  ri   ro   rl   rH  rH  Ï  s'   … àƒKØ
ƒJØƒOØƒMØÓó%
ôN1ro   rH  c                  ó8   — e Zd ZU dZded<   ded<   ded<   dd„Zy)	Ú
ArctanRulezAintegrate(a/(b*x**2+c), x) -> a/b / sqrt(c/b) * atan(x/sqrt(c/b))r   ró   rô   rõ   c                óÆ   — | j                   | j                  | j                  | j                  f\  }}}}||z  t	        ||z  «      z  t        |t	        ||z  «      z  «      z  S rh   )ró   rô   rõ   rf   r*   r5   rø   s        rl   rm   zArctanRule.eval	  sT   € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�Ø�‰s”T˜!˜A™#“Y‰¤ a¬¨Q¨q©S«	¡kÓ!2Ñ2Ð2ro   Nrr   r’   ri   ro   rl   rZ  rZ    s   … áKØƒGØƒGØƒGô3ro   rZ  c                  ó   — e Zd ZU ded<   y)ÚOrthogonalPolyRuler   r	  N©rv   rw   rx   ry   ri   ro   rl   r]  r]    s   … à„Gro   r]  c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)Ú
JacobiRuler   ró   rô   c           	     óN  — | j                   | j                  | j                  | j                  f\  }}}}t	        dt        |dz   |dz
  |dz
  |«      z  ||z   |z   z  t        ||z   |z   d«      f|t        |d«      f||z   dz   |dz  z  dz  ||z
  |z  dz  z   t        |d«      f«      S )Nr÷   rR   r   é   )r	  ró   rô   rf   r+   rO   r   r   rE  s        rl   rm   zJacobiRule.eval  s·   € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�ÜØŒv�a˜!‘e˜Q ™U A¨¡E¨1Ó-Ñ-¨q°1©u°q©yÑ9¼2¸aÀ!¹eÀa¹iÈÓ;KÐLØ”�1�a“ˆMØ�!‰e�a‰i˜˜A™Ñ˜aÑ 1 q¡5¨!¡)¨A¡+Ñ-¬r°!°Q«xÐ8ó:ð 	:ro   Nrr   rF  ri   ro   rl   r`  r`    s   … àƒGØƒGô:ro   r`  c                  ó    — e Zd ZU ded<   dd„Zy)ÚGegenbauerRuler   ró   c                ó  — | j                   | j                  | j                  }}}t        t	        |dz   |dz
  |«      d|dz
  z  z  t        |d«      ft        |dz   |«      |dz   z  t        |d«      ft        j                  df«      S )NrR   r÷   r‘   T)	r	  ró   rf   r+   rN   r   rH   r   ÚZero)rk   r	  ró   rù   s       rl   rm   zGegenbauerRule.eval$  s�   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆÜÜ˜˜A™˜q 1™u aÓ(¨!¨Q°©U©)Ñ4´b¸¸A³hÐ?Ü˜˜A™˜qÓ! 1 q¡5Ñ)¬2¨a°«9Ð5Ü�V‰V�TˆNóð 	ro   Nrr   rF  ri   ro   rl   rd  rd     s   … àƒGôro   rd  c                  ó   — e Zd Zdd„Zy)ÚChebyshevTRulec                óÜ   — | j                   | j                  }}t        t        |dz   |«      |dz   z  t        |dz
  |«      |dz
  z  z
  dz  t	        t        |«      d«      f|dz  dz  df«      S )NrR   r÷   T)r	  rf   r+   rH   r   r   ©rk   r	  rù   s      rl   rm   zChebyshevTRule.eval.  s|   € Ø�v‰v�t—}‘}ˆ1ˆÜÜ˜˜Q™ Ó" A¨¡EÑ*Ü˜˜Q™ Ó" A¨¡EÑ*ñ+Ø,-ñ.Ü/1´#°a³&¸!«}ð>à�‰T�!‰V�TˆNóð 	ro   Nrr   ©rv   rw   rx   rm   ri   ro   rl   rh  rh  ,  s   „ ôro   rh  c                  ó   — e Zd Zdd„Zy)ÚChebyshevURulec                ó¨   — | j                   | j                  }}t        t        |dz   |«      |dz   z  t	        |d«      ft
        j                  df«      S r�   )r	  rf   r+   rH   r   r   rf  rj  s      rl   rm   zChebyshevURule.eval8  sM   € Ø�v‰v�t—}‘}ˆ1ˆÜÜ˜˜A™˜qÓ! 1 q¡5Ñ)¬2¨a°«9Ð5Ü�V‰V�TˆNóð 	ro   Nrr   rk  ri   ro   rl   rm  rm  6  s   „ ôro   rm  c                  ó   — e Zd Zdd„Zy)ÚLegendreRulec                ó‚   — | j                   | j                  }}t        |dz   |«      t        |dz
  |«      z
  d|z  dz   z  S ©NrR   r÷   )r	  rf   rJ   rj  s      rl   rm   zLegendreRule.evalA  sA   € Ø�v‰v�t—}‘}ˆ1ˆÜ˜˜A™˜qÓ!¤H¨Q°©U°AÓ$6Ñ6¸¸1¹¸q¹ÑAÐAro   Nrr   rk  ri   ro   rl   rp  rp  ?  s   „ ôBro   rp  c                  ó   — e Zd Zdd„Zy)ÚHermiteRulec                ób   — | j                   | j                  }}t        |dz   |«      d|dz   z  z  S rr  )r	  rf   rK   rj  s      rl   rm   zHermiteRule.evalH  s1   € Ø�v‰v�t—}‘}ˆ1ˆÜ�q˜1‘u˜aÓ  ! Q¨¡U¡)Ñ,Ð,ro   Nrr   rk  ri   ro   rl   rt  rt  F  s   „ ô-ro   rt  c                  ó   — e Zd Zdd„Zy)ÚLaguerreRulec                ój   — | j                   | j                  }}t        ||«      t        |dz   |«      z
  S r#  )r	  rf   rL   rj  s      rl   rm   zLaguerreRule.evalO  s/   € Ø�v‰v�t—}‘}ˆ1ˆÜ˜˜1‹~¤¨¨Q©°Ó 2Ñ2Ð2ro   Nrr   rk  ri   ro   rl   rw  rw  M  ó   „ ô3ro   rw  c                  ó    — e Zd ZU ded<   dd„Zy)ÚAssocLaguerreRuler   ró   c                óf   — t        | j                  dz   | j                  dz
  | j                  «       S r#  )rM   r	  ró   rf   rj   s    rl   rm   zAssocLaguerreRule.evalX  s(   € Ü˜tŸv™v¨™z¨4¯6©6°A©:°t·}±}ÓEÐEÐEro   Nrr   rF  ri   ro   rl   r{  r{  T  s   … àƒGôFro   r{  c                  ó"   — e Zd ZU ded<   ded<   y)ÚIRuler   ró   rô   Nr^  ri   ro   rl   r~  r~  \  s   … àƒGØ„Gro   r~  c                  ó   — e Zd Zdd„Zy)ÚCiRulec                ó´   — | j                   | j                  | j                  }}}t        |«      t	        ||z  «      z  t        |«      t        ||z  «      z  z
  S rh   )ró   rô   rf   r-   r?   r.   rA   ©rk   ró   rô   rù   s       rl   rm   zCiRule.evald  óF   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆÜ�1‹v”b˜˜1™“g‰~¤ A£¤r¨!¨A©#£w¡Ñ.Ð.ro   Nrr   rk  ri   ro   rl   r€  r€  b  ó   „ ô/ro   r€  c                  ó   — e Zd Zdd„Zy)ÚChiRulec                ó´   — | j                   | j                  | j                  }}}t        |«      t	        ||z  «      z  t        |«      t        ||z  «      z  z   S rh   )ró   rô   rf   r$   r@   r'   rB   r‚  s       rl   rm   zChiRule.evalk  óH   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆÜ�A‹w”s˜1˜Q™3“xÑ¤$ q£'¬#¨a°©c«(Ñ"2Ñ2Ð2ro   Nrr   rk  ri   ro   rl   r†  r†  i  ry  ro   r†  c                  ó   — e Zd Zdd„Zy)ÚEiRulec                ó~   — | j                   | j                  | j                  }}}t        |«      t	        ||z  «      z  S rh   )ró   rô   rf   r    rC   r‚  s       rl   rm   zEiRule.evalr  s1   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆÜ�1‹v”b˜˜1™“g‰~Ðro   Nrr   rk  ri   ro   rl   rŠ  rŠ  p  s   „ ôro   rŠ  c                  ó   — e Zd Zdd„Zy)ÚSiRulec                ó´   — | j                   | j                  | j                  }}}t        |«      t	        ||z  «      z  t        |«      t        ||z  «      z  z   S rh   )ró   rô   rf   r.   r?   r-   rA   r‚  s       rl   rm   zSiRule.evaly  rƒ  ro   Nrr   rk  ri   ro   rl   r�  r�  w  r„  ro   r�  c                  ó   — e Zd Zdd„Zy)ÚShiRulec                ó´   — | j                   | j                  | j                  }}}t        |«      t	        ||z  «      z  t        |«      t        ||z  «      z  z   S rh   )ró   rô   rf   r'   r@   r$   rB   r‚  s       rl   rm   zShiRule.eval€  rˆ  ro   Nrr   rk  ri   ro   rl   r�  r�  ~  ry  ro   r�  c                  ó   — e Zd Zdd„Zy)ÚLiRulec                ór   — | j                   | j                  | j                  }}}t        ||z  |z   «      |z  S rh   )ró   rô   rf   rD   r‚  s       rl   rm   zLiRule.eval‡  s1   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆÜ�!�A‘#˜‘'‹{˜1‰}Ðro   Nrr   rk  ri   ro   rl   r“  r“  …  s   „ ôro   r“  c                  ó4   — e Zd ZU ded<   ded<   ded<   dd„Zy)ÚErfRuler   ró   rô   rõ   c                óú  — | j                   | j                  | j                  | j                  f\  }}}}|j                  rÙt        t        t        j                  «      t        | «      z  dz  t        ||dz  d|z  z  z
  «      z  t        d|z  |z  |z
  dt        | «      z  z  «      z  |dk  ft        t        j                  «      t        |«      z  dz  t        ||dz  d|z  z  z
  «      z  t        d|z  |z  |z   dt        |«      z  z  «      z  df«      S t        t        j                  «      t        |«      z  dz  t        ||dz  d|z  z  z
  «      z  t        d|z  |z  |z   dt        |«      z  z  «      z  S )Nr÷   rb  rþ   r   T)ró   rô   rõ   rf   Úis_extended_realr+   r*   r   ÚPir    r;   r<   rø   s        rl   rm   zErfRule.eval’  sh  € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�Ø×ÒÜÜ”a—d‘d“œD ! ›HÑ$ QÑ&¬¨Q°°A±°q¸±s±©^Ó)<Ñ<Ü˜˜A™˜a™ !™ a¬¨a¨R«¡jÑ1Ó2ñ3Ø45¸±Eð;ä”a—d‘d“œD ›GÑ# AÑ%¬¨A°°1±°a¸±c±
©NÓ(;Ñ;Ü˜!˜A™#˜a™% !™) a¬¨Q«¡iÑ0Ó1ñ2Ø37ð9ó:ð :ô
 ”A—D‘D‹zœ$˜q›'Ñ! !Ñ#¤c¨!¨a°©d°A°a±C©j©.Ó&9Ñ9Ü�a˜‘c˜!‘e˜a‘i !¤D¨£G¡)Ñ,Ó-ñ.ð 	.ro   Nrr   rF  ri   ro   rl   r–  r–  Œ  s   … àƒGØƒGØƒGô	.ro   r–  c                  ó4   — e Zd ZU ded<   ded<   ded<   dd„Zy)ÚFresnelCRuler   ró   rô   rõ   c           
     óì  — | j                   | j                  | j                  | j                  f\  }}}}t	        t
        j                  «      t	        d|z  «      z  t        |dz  d|z  z  |z
  «      t        d|z  |z  |z   t	        d|z  t
        j                  z  «      z  «      z  t        |dz  d|z  z  |z
  «      t        d|z  |z  |z   t	        d|z  t
        j                  z  «      z  «      z  z   z  S ©Nr÷   rb  )ró   rô   rõ   rf   r*   r   r™  r-   r=   r.   r>   rø   s        rl   rm   zFresnelCRule.eval¤  óØ   € Ø—V‘V˜TŸV™V T§V¡V¨T¯]©]Ð:‰
ˆˆ1ˆa�Ü”A—D‘D‹zœ$˜q ™s›)Ñ#Ü��1‘�a˜‘c‘
˜Q‘Ó¤¨!¨A©#¨a©%°!©)´T¸!¸A¹#¼a¿d¹d¹(³^Ñ)CÓ DÑDÜ��1‘�a˜‘c‘
˜Q‘Ó¤¨!¨A©#¨a©%°!©)´T¸!¸A¹#¼a¿d¹d¹(³^Ñ)CÓ DÑDñEñFð 	Fro   Nrr   rF  ri   ro   rl   r›  r›  ž  ó   … àƒGØƒGØƒGôFro   r›  c                  ó4   — e Zd ZU ded<   ded<   ded<   dd„Zy)ÚFresnelSRuler   ró   rô   rõ   c           
     óì  — | j                   | j                  | j                  | j                  f\  }}}}t	        t
        j                  «      t	        d|z  «      z  t        |dz  d|z  z  |z
  «      t        d|z  |z  |z   t	        d|z  t
        j                  z  «      z  «      z  t        |dz  d|z  z  |z
  «      t        d|z  |z  |z   t	        d|z  t
        j                  z  «      z  «      z  z
  z  S r�  )ró   rô   rõ   rf   r*   r   r™  r-   r>   r.   r=   rø   s        rl   rm   zFresnelSRule.eval±  rž  ro   Nrr   rF  ri   ro   rl   r¡  r¡  «  rŸ  ro   r¡  c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)ÚPolylogRuler   ró   rô   c                ób   — t        | j                  dz   | j                  | j                  z  «      S r#  )rQ   rô   ró   rf   rj   s    rl   rm   zPolylogRule.eval½  s$   € Ü�t—v‘v ‘z 4§6¡6¨D¯M©MÑ#9Ó:Ð:ro   Nrr   rF  ri   ro   rl   r¤  r¤  ¸  s   … àƒGØƒGô;ro   r¤  c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)ÚUpperGammaRuler   ró   r  c                ó˜   — | j                   | j                  | j                  }}}||z  | |z  | z  z  t        |dz   | |z  «      z  |z  S r#  )ró   r  rf   rE   )rk   ró   r  rù   s       rl   rm   zUpperGammaRule.evalÆ  sQ   € Ø—&‘&˜$Ÿ&™& $§-¡-ˆaˆ1ˆØ�!‰t˜�r˜!‘t ˜r‘lÑ"¤Z°°A±¸°r¸!±tÓ%<Ñ<¸QÑ>Ð>ro   Nrr   rF  ri   ro   rl   r§  r§  Á  s   … àƒGØƒGô?ro   r§  c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)ÚEllipticFRuler   ró   r  c                óˆ   — t        | j                  | j                  | j                  z  «      t	        | j                  «      z  S rh   )rG   rf   r  ró   r*   rj   s    rl   rm   zEllipticFRule.evalÐ  ó,   € Ü˜$Ÿ-™-¨¯©°·±©Ó7¼¸T¿V¹V»ÑDÐDro   Nrr   rF  ri   ro   rl   rª  rª  Ë  ó   … àƒGØƒGôEro   rª  c                  ó*   — e Zd ZU ded<   ded<   dd„Zy)ÚEllipticERuler   ró   r  c                óˆ   — t        | j                  | j                  | j                  z  «      t	        | j                  «      z  S rh   )rF   rf   r  ró   r*   rj   s    rl   rm   zEllipticERule.evalÙ  r¬  ro   Nrr   rF  ri   ro   rl   r¯  r¯  Ô  r­  ro   r¯  c                  ó"   — e Zd ZU ded<   ded<   y)r  r   re   r   ÚsymbolNr^  ri   ro   rl   r  r  Ý  s   … ØƒOØ„Nro   r  c                ó>  ‡— | j                   �r| j                   d   }t        | t        «      r |j                  ‰«      t	        |«      dz  z  S t        | t
        «      r!|j                  ‰«       t        |«      dz  z  S t        | t        «      r)|j                  ‰«      t	        |«      z  t        |«      z  S t        | t        «      r*|j                  ‰«       t        |«      z  t        |«      z  S t        | t        «      rt        ˆfd„| j                   D «       «      S t        | t        «      r^t        | j                   «      dk(  rFt        | j                   d   t        «      r)| j                   d   t        | j                   d   ‰«      z  S | j                  ‰«      S )a  Derivative of f in form expected by find_substitutions

    SymPy's derivatives for some trig functions (like cot) are not in a form
    that works well with finding substitutions; this replaces the
    derivatives for those particular forms with something that works better.

    r   r÷   c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrh   )Úmanual_diff©rž   Úargr²  s     €rl   rŸ   zmanual_diff.<locals>.<genexpr>õ  s   øè ø€ ÒB°C”{ 3¨×/ÑBùó   ƒrR   )Úargsr$  r/   Údiffr2   r0   r1   r   Úsumr   r  r   rµ  )Úfr²  r·  s    ` rl   rµ  rµ  â  s;  ø€ ð 	‡vƒvØ�f‰f�Q‰iˆÜ�aœÔØ—8‘8˜FÓ#¤c¨#£h°¡kÑ1Ð1Ü˜œ3ÔØ—H‘H˜VÓ$Ð$¤s¨3£x°¡{Ñ2Ð2Ü˜œ3ÔØ—8‘8˜FÓ#¤c¨#£hÑ.´°S³Ñ9Ð9Ü˜œ3ÔØ—H‘H˜VÓ$Ð$¤s¨3£xÑ/´#°c³(Ñ:Ð:Ü˜œ3ÔÜÓB¸1¿6¹6ÔBÓBÐBÜ˜œ3ÔÜ�1—6‘6‹{˜aÒ¤J¨q¯v©v°a©y¼&Ô$AØ—v‘v˜a‘y¤;¨q¯v©v°a©y¸&Ó#AÑAÐAØ�6‰6�&‹>Ðro   c                óÚ  ‡‡— t        |«      dk(  rB|d   }t        |t        t        f«      r|j	                  «       }n3t        |«      s(t        d«      ‚t        |«      dk(  r|g}nt        d«      ‚g }|D ]Y  \  }Št        |t        «      sŒ|j                  d   Š| j                  ˆfd„ˆfd„«      } |j                  ‰t        ‰«      f«       Œ[ | j                  t        |«      |z   «      S )zn
    A wrapper for `expr.subs(*args)` with additional logic for substitution
    of invertible functions.
    rR   r   z(Expected an iterable of (old, new) pairsr÷   z$subs accepts either 1 or 2 argumentsc                ó>   •— | j                   xr | j                  ‰k(  S rh   )rª   rŽ   )rù   Úx0s    €rl   ú<lambda>zmanual_subs.<locals>.<lambda>  s   ø€ ¨!¯(©(Ò*C°q·v±vÀ±|€ ro   c                ó4   •— t        | j                   ‰z  «      S rh   )r    )rù   Únews    €rl   rÀ  zmanual_subs.<locals>.<lambda>  s   ø€ œ#˜aŸe™e C™i›.€ ro   )r  r$  r   r   Úitemsra   Ú
ValueErrorr!   r¹  Úreplacer¿   r    r¬   r%  )r(  r¹  ÚsequenceÚnew_subsÚoldrÂ  r¿  s        @@rl   Úmanual_subsrÉ  û  sØ   ù€ ô
 ˆ4ƒy�A‚~Ø˜‘7ˆÜ�h¤¤w Ô0Ø—~‘~Ó'‰HÜ˜(Ô#ÜÐGÓHÐHÜ	ˆT‹�aŠØ�6‰äÐ?Ó@Ð@à€HØò 	,‰ˆˆSÜ�cœ3Õð
 —‘˜!‘ˆBØ—<‘<Ó CÛ(ó*ˆDà�O‰O˜R¤ S£˜NÕ+ð	,ð �9‰9”T˜(“^ hÑ.Ó/Ð/ro   c                óH  ‡ ‡‡‡— g }ˆ ˆˆfd„}dˆfd„}ˆˆfd„Št        t        j                   ‰‰ «       |‰ «      z   «      «      D ]X  }|‰k(  rŒ	t        |‰«      } |||«      }|dusŒ#|\  }	}|‰ j	                  ‰‰«      k(  rŒ>||	|f}
|
|vsŒH|j                  |
«       ŒZ |S )Nc                óª  •— |dk(  ry‰|z  }t        dj                  || ‰«      «       t        || ‰«      j                  «       }|j	                  ‰«      ry‰j                  ‰«      r[|j                  ‰«      rJt        ˆfd„‰j                  «       D «       «      }t        ˆfd„|j                  «       D «       «      }||kD  ry|j                  ‰d¬«      S )Nr   Fz!substituted: {}, u: {}, u_var: {}c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrh   ©rV   )rž   Útr²  s     €rl   rŸ   z;find_substitutions.<locals>.test_subterm.<locals>.<genexpr>-  s   øè ø€ ÒS°1œV A v×.ÑSùr¸  c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrh   rÍ  )rž   rÎ  r§   s     €rl   rŸ   z;find_substitutions.<locals>.test_subterm.<locals>.<genexpr>.  s   øè ø€ ÒS°œF 1 e×,ÑSùr¸  )Úas_Add)	rb   ÚformatrÉ  ÚcancelÚhas_freeÚis_rational_functionÚmaxÚas_numer_denomÚas_independent)r²   Úu_diffÚsubstitutedÚ
deg_beforeÚ	deg_afterre   r²  r§   s        €€€rl   Útest_subtermz(find_substitutions.<locals>.test_subterm"  sÆ   ø€ Ø�QŠ;ØØ &Ñ(ˆÜÐ1×8Ñ8¸ÀaÈÓOÔPÜ! +¨q°%Ó8×?Ñ?ÓAˆà×Ñ Ô'Øà×)Ñ)¨&Ô1°k×6VÑ6VÐW\Ô6]ÜÓS¸	×8PÑ8PÓ8RÔSÓSˆJÜÓS°k×6PÑ6PÓ6RÔSÓSˆIØ˜:Ò%ØØ×)Ñ)¨%¸Ð)Ó>Ð>ro   c                óf  •— g }g }t        dd„ g¬«      }| j                  t        «      D ]\  }|j                  d   }‰|j                  vrŒ!|j                  |‰z  «      }|r|j                  ||   «       ŒL|j                  |«       Œ^ |r&|j                  t        t        |«      ‰z  «      «       |S )Nr	  c                ó   — | j                   S rh   )Ú
is_Integer©r	  s    rl   rÀ  z:find_substitutions.<locals>.exp_subterms.<locals>.<lambda>6  s
   € ¨A¯L©L€ ro   ©Ú
propertiesr   )r   rM  r    r¹  Úfree_symbolsÚmatchr¿   rX   )ÚtermÚlinear_coeffsÚtermsr	  r®   r·  rä  r²  s          €rl   Úexp_subtermsz(find_substitutions.<locals>.exp_subterms3  sª   ø€ ØˆØˆÜ�Ñ"8Ð!9Ô:ˆØ—I‘Iœc“Nò 	#ˆDØ—)‘)˜A‘,ˆCØ˜S×-Ñ-Ñ-ØØ—I‘I˜a ™hÓ'ˆEÙØ×$Ñ$ U¨1¡XÕ.à—‘˜TÕ"ð	#ñ Ø�L‰LœœX mÓ4°VÑ;Ó<Ô=Øˆro   c           
     óÜ  •— t        | t        t        gt        ¢t        ‘t
        ‘t        ‘­«      r| j                  d   gS t        | t        t        t        t        t        f«      r| j                  d   gS t        | t        t        f«      r| j                  d   gS t        | t        «      r| j                  d   gS t        | t         «      r=g }| j                  D ]*  }|j#                  |«       |j%                   ‰|«      «       Œ, |S t        | t&        «      r÷| j                  D �cg c]  }|j)                  ‰«      sŒ|‘Œ }}| j                  j*                  r´|j%                  t-        | j                  «      D �cg c]5  }d|cxk  rt/        | j                  d   «      k  rn n| j0                  |z  ‘Œ7 c}«       | j0                  j2                  r;|j%                   ‰| j0                  «      D �cg c]  }|j4                  r|‘Œ c}«       |S t        | t6        «      r=g }| j                  D ]*  }|j#                  |«       |j%                   ‰|«      «       Œ, |S g S c c}w c c}w c c}w )Nr   rR   r÷   é   )r$  r,   r"   Úinverse_trig_functionsr    r!   r9   r¹  rH   rI   rJ   rK   rL   rN   rM   rO   r   r¿   Úextendr   Úhasrß  rU   ÚabsrŽ   Úis_Addrª   r   )rå  Úrr²   r·  r  rÎ  Úpossible_subtermsr²  s         €€rl   rñ  z-find_substitutions.<locals>.possible_subtermsD  s  ø€ Ü�dÔ2Ô4Fð 2Ü4ð2ä ð2ä"%ð2ä'0ñ2ô 3ð —I‘I˜a‘L�>Ð!Ü˜œz¬:Ü ¤'¬8ð5ô 6à—I‘I˜a‘L�>Ð!Ü˜œz¬>Ð:Ô;Ø—I‘I˜a‘L�>Ð!Ü˜œfÔ%Ø—I‘I˜a‘L�>Ð!Ü˜œcÔ"ØˆAØ—Y‘Yò /�Ø—‘˜”Ø—‘Ñ*¨1Ó-Õ.ð/ð ˆHÜ˜œcÔ"Ø $§	¡	Ö=˜¨S¯W©W°V­_’Ð=ˆAÐ=Ø�x‰x×"Ò"Ø—‘´¸T¿X¹XÓ0Fö 2¨1Ø˜1Ô0œs 4§9¡9¨Q¡<Ó0Õ0ð Ÿ)™) Q›,ò 2ô 3à—9‘9×#Ò#Ø—H‘HÑ):¸4¿9¹9Ó)Eö % AØŸ8š8ò  ò %ô &àˆHÜ˜œcÔ"ØˆAØ—y‘yò 1�Ø—‘˜”Ø—‘Ñ*¨3Ó/Õ0ð1ð ˆHØˆ	ùò >ùò2ùò%s   Ä'IÄ>IÅ<:I$Ç2I)F)rå  r   )r%  ÚdictÚfromkeysrµ  r¬   r¿   )re   r²  r§   ÚresultsrÜ  rè  r²   rØ  Únew_integrandr„   rW  rñ  s   ```        @rl   Úfind_substitutionsrö    s¸   û€ Ø€Gö?õ"õ"!ôF ”$—-‘-Ñ 1°)Ó <¹|ÈIÓ?VÑ VÓWÓXò -ˆØ�Š;ØÜ˜Q Ó'ˆÙ$ Q¨Ó/ˆØ Ò%Ø&3Ñ#ˆH�mØ 	§¡¨v°uÓ =Ò=ØØ˜x¨Ð7ˆLØ 7Ò*Ø—‘˜|Õ,ð-ð €Nro   c                ó   ‡ ‡— ˆ ˆfd„}|S )z$Strategy that rewrites an integrand.c                óÄ   •— | \  }}t        dj                  |‰|«      «        ‰| Ž r9 ‰| Ž }||k7  r.t        ||«      }t        |t        «      s|rt        ||||«      S y y y y )Nz/Integral: {} is rewritten with {} on symbol: {})rb   rÑ  Úintegral_stepsr$  r  r,  )Úintegralre   r²  r-  r†   r`   Úrewrites        €€rl   Ú	_rewriterzrewriter.<locals>._rewriterx  s}   ø€ Ø$Ñˆ	�6ÜÐ?×FÑFÀyÐRYÐ[aÓbÔcÙ�hÑÙ Ð*ˆIØ˜IÒ%Ü(¨°FÓ;�Ü! '¬<Ô8¹WÜ& y°&¸)ÀWÓMÐMð >EÐ8ð &ð  ro   ri   )r`   rû  rü  s   `` rl   Úrewriterrý  v  s   ù€ õNð Ðro   c                ó   ‡ ‡— ˆ ˆfd„}|S )zAStrategy that rewrites an integrand based on some other criteria.c           	     óÀ   •— | \  } }|\  }}t        dj                  |‰|| «      «       | t        |«      z   } ‰|Ž r# ‰|Ž }||k7  rt        |||t	        ||«      «      S y y )Nz@Integral: {} is rewritten with {} on symbol: {} and criteria: {})rb   rÑ  r%  r,  rù  )Úcriteriarú  re   r²  r¹  r-  r`   rû  s         €€rl   Ú_proxy_rewriterz'proxy_rewriter.<locals>._proxy_rewriter…  s€   ø€ Ø%Ñˆ�(Ø$Ñˆ	�6ÜÐP×WÑWÐXaÐcjÐlrÐt|Ó}Ô~Øœ$˜x›.Ñ(ˆÙ�dÑÙ ˜ˆIØ˜IÒ%Ü" 9¨f°iÄÐPYÐ[aÓAbÓcÐcð &ð ro   ri   )r`   rû  r  s   `` rl   Úproxy_rewriterr  ƒ  s   ù€ õdð Ðro   c                ó   ‡ — ˆ fd„}|S )z4Apply the rule that matches the condition, else Nonec                óZ   •— ‰j                  «       D ]  \  }} || «      sŒ || «      c S  y rh   )rÃ  )r(  ÚkeyrÁ   Ú
conditionss      €rl   Úmultiplexer_rlz#multiplexer.<locals>.multiplexer_rl’  s0   ø€ Ø#×)Ñ)Ó+ò 	"‰IˆC�Ù�4�yÙ˜D“zÒ!ñ	"ro   ri   )r  r  s   ` rl   Úmultiplexerr  �  s   ø€ ô"ð Ðro   c                 ó   ‡ — ˆ fd„}|S )zHStrategy that makes an AlternativeRule out of multiple possible results.c                óŽ  •— g }d}t        d«       ‰D ]Z  }|dz   }t        dj                  ||«      «        || «      }|sŒ.t        |t        «      rŒ?|| k7  sŒE||vsŒJ|j	                  |«       Œ\ t        |«      dk(  r|d   S |r<|D �cg c]  }|j                  «       rŒ|‘Œ }}|rt        g | ¢|‘­Ž S t        g | ¢|‘­Ž S y c c}w )Nr   zList of Alternative RulesrR   úRule {}: {})rb   rÑ  r$  r  r¿   r  rq   r  )rú  Úaltsr*  rÁ   r­   ÚdoableÚruless         €rl   Ú_alternativesz#alternatives.<locals>._alternativesš  sÛ   ø€ ØˆØˆÜÐ)Ô*Øò 	$ˆDØ˜A‘IˆEÜ�-×&Ñ& u¨dÓ3Ô4á˜(“^ˆFÚœz¨&´,Õ?Ø˜(Ó" v°TÒ'9Ø—‘˜FÕ#ð	$ô ˆt‹9˜Š>Ø˜‘7ˆNÙØ'+ÖM˜t°4×3JÑ3JÕ3L’dÐMˆFÐMÙÜ&Ð9¨Ð9°&Ò9Ð9ä&Ð7¨Ð7°$Ò7Ð7ð ùÚMs   Â	CÂCri   )r  r  s   ` rl   r  r  ˜  s   ø€ ô8ð( Ðro   c                ó   — t        | Ž S rh   )r   ©rú  s    rl   Úconstant_ruler  °  ó   € Ü˜Ð"Ð"ro   c           
     ó  — | \  }}|j                  «       \  }}||j                  vr<t        |t        «      r,t	        |dz   «      dk(  rt        |||«      S t        ||||«      S ||j                  vr�t        |t        «      rt        ||||«      }t        t        |«      j                  «      r|S t        |«      j                  rt        d|«      S t        |||t        t        |«      d«      ft        d|«      dfg«      S y y )NrR   r   T)r«   rã  r$  r   r[   ré   r�   ræ   r   r!   Úis_zeror   r3  r   )rú  re   r²  rŽ   ÚexptrÁ   s         rl   Ú
power_ruler  ³  sÿ   € Ø Ñ€IˆvØ×&Ñ&Ó(�J€Dˆ$à�T×&Ñ&Ñ&¬:°d¼FÔ+CÜ�D˜1‘HÓ Ò"Ü! )¨V°TÓ:Ð:Ü˜ F¨D°$Ó7Ð7Ø	�t×(Ñ(Ñ	(¬Z¸¼fÔ-EÜ�y &¨$°Ó5ˆä”S˜“Y×&Ñ&Ô'ØˆKÜ�‹Y×ÒÜ  6Ó*Ð*ä˜Y¨Ø”2”c˜$“i Ó#Ð$Ü˜!˜VÓ$ dÐ+ð1
ó ð 	ð .FÐ	(ro   c                ó†   — | \  }}t        |j                  d   t        «      rt        ||t        |j                  d   «      S y r  )r$  r¹  r   ræ   r   ©rú  re   r²  s      rl   Úexp_ruler  È  s>   € Ø Ñ€IˆvÜ�)—.‘. Ñ#¤VÔ,Ü�y &¬!¨Y¯^©^¸AÑ->Ó?Ð?ð -ro   c                óÆ  ‡— t         t        t        t        t        t
        t        t        t        t        t        t        t        t        t        t        i}t         dt        dt        di}| \  }Š|D ]p  }t!        ||«      sŒ|j#                  |d«      }|j$                  |   ‰u sŒ4t'        ˆfd„|j$                  d | D «       «      rŒV ||   |‰g|j$                  d | ¢­Ž c S  y )Nrê  r÷   rR   c              3  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wrh   ©rí  )rž   r¸   r²  s     €rl   rŸ   z'orthogonal_poly_rule.<locals>.<genexpr>ã  s   øè ø€ ÒF a�A—E‘E˜&—MÑFùó   ƒ)rO   r`  rN   rd  rH   rh  rI   rm  rJ   rp  rK   rt  rL   rw  rM   r{  r$  Úgetr¹  r¤   )rú  Úorthogonal_poly_classesÚorthogonal_poly_var_indexre   ÚklassÚ	var_indexr²  s         @rl   Úorthogonal_poly_ruler$  Î  s×   ø€ ä”
Ü”NÜ”NÜ”NÜ”,Ü”Ü”,ÜÔ)ð	
Ðô 	�Ü�AÜ˜ð!
Ðð
 !Ñ€IˆvØ(ò jˆÜ�i Õ'Ø1×5Ñ5°e¸QÓ?ˆIØ—‘˜yÑ)¨VÒ3ÜÓF¨9¯>©>¸*¸9Ð+EÔFÕFØ9Ð2°5Ñ9¸)ÀVÐiÈiÏnÉnÐ]gÐ^gÐNhÒiÒiñjro   z/list[tuple[Type, Expr, Callable | None, tuple]]Ú_special_function_patternsrù   c                óÎ  ‡— | \  }}t         �sft        dt        gd„ g¬«      }t        dt        g¬«      }t        dt        g¬«      }t        dt        gd„ g¬«      }t        d	t        gd
„ g¬«      }t        j	                  |||||f«       |t        z  |z   }|t        dz  z  |t        z  z   |z   }	t         j	                  t
        t        |d¬«      t        z  d t        ft
        t        |d¬«      t        z  d t        ft
        t        |d¬«      t        z  d t        ft
        t        |d¬«      t        z  d t        ft
        t        |d¬«      t        z  d t        ft         dt#        |d¬«      z  d t$        ft        t        |	d¬«      d t&        ft        t        |	d¬«      d t(        ft        t        |	d¬«      d t*        ft
        t        |z  t        |t        z  d¬«      z  d t,        ft
        t/        ||t        z  d¬«      t        z  d t0        ft         dt3        ||t        t        d¬«      dz  z  z
  «      z  d„ t4        ft         t3        ||t        t        d¬«      dz  z  z
  «      d„ t6        ff«       |j9                  |t        «      }
t         D ]S  \  }}}}t;        |
|«      sŒ|
j=                  |«      Š‰sŒ)t?        ˆfd„t        D «       «      }|� ||Ž sŒI |||g|¢­Ž c S  y )Nró   c                ó   — | j                    S rh   ©r  ©rù   s    rl   rÀ  z'special_function_rule.<locals>.<lambda>ï  ó   € À1Ç9Á9¸}€ ro   ©Úexcluderâ  rô   ©r,  rõ   r  c                ó   — | j                    S rh   r(  r)  s    rl   rÀ  z'special_function_rule.<locals>.<lambda>ò  r*  ro   r  c                ó8   — | j                   xr | j                   S rh   )Úis_nonnegativeÚ
is_integerr)  s    rl   rÀ  z'special_function_rule.<locals>.<lambda>ô  s   € ˜1×+Ñ+Ò<°·±Ð=€ ro   r÷   F©ÚevaluaterR   c                ó   — | |k7  S rh   ri   ©ró   r  s     rl   rÀ  z'special_function_rule.<locals>.<lambda>  ó
   € ˜Q !™V€ ro   c                ó   — | |k7  S rh   ri   r5  s     rl   rÀ  z'special_function_rule.<locals>.<lambda>
  r6  ro   c              3  ób   •K  — | ]&  }‰j                  |«      �‰j                  |«      –— Œ( y ­wrh   )r  )rž   Úwrä  s     €rl   rŸ   z(special_function_rule.<locals>.<genexpr>  s.   øè ø€ ò "?°1Ø%*§Y¡Y¨q£\Ð%=ð #(§)¡)¨A§,ñ "?ùs   ƒ,/) r%  r   Ú_symbolÚ_wildsrì  r   r    rŠ  r-   r€  r$   r†  r.   r�  r'   r�  r   r!   r“  r–  r¡  r›  r§  rQ   r¤  r*   rª  r¯  r¬   r$  rä  Útuple)rú  re   r²  ró   rô   rõ   r  r  Úlinear_patternÚquadratic_patternÚ
_integrandÚtype_ÚpatternÚ
constraintrÁ   Ú	wild_valsrä  s                   @rl   Úspecial_function_rulerD  ì  s   ø€ Ø Ñ€IˆvÞ%Ü�œw˜iÑ5LÐ4MÔNˆÜ�œw˜iÔ(ˆÜ�œw˜iÔ(ˆÜ�œw˜iÑ5LÐ4MÔNˆÜ�œw˜iÙ=ð5?ô @ˆä�‰�q˜!˜Q  1�oÔ&ð œ7™ Q™ˆØœg q™j™L¨1¬W©9Ñ4°qÑ8ÐÜ"×)Ñ)Ü”#�n¨uÔ5´gÑ=¸tÄVÐLÜ”#�n¨uÔ5´gÑ=¸tÄVÐLÜ”$�~°Ô6´wÑ>ÀÄgÐNÜ”#�n¨uÔ5´gÑ=¸tÄVÐLÜ”$�~°Ô6´wÑ>ÀÄgÐNÜ�!”C˜°Ô7Ñ7¸¼vÐFÜ”#Ð'°%Ô8¸$ÄÐHÜ”#Ð'°%Ô8¸$ÄÐMÜ”#Ð'°%Ô8¸$ÄÐMÜ”'˜1‘*œS ¤7¡°UÔ;Ñ;¸TÄ>ÐRÜ”'˜!˜Qœw™Y°Ô7¼Ñ?ÀÄ{ÐSÜ�!”D˜˜Qœs¤7°UÔ;¸QÑ>Ñ>Ñ>Ó?Ñ?Ù#¤]ð4ä”$�q˜1œS¤°5Ô9¸1Ñ<Ñ<Ñ<Ó=Ù#¤]ð4ð+
ô 	ð" —‘ ¬Ó0€JÜ,Fò ?Ñ(ˆˆw˜
 DÜ�j %Õ(Ø×$Ñ$ WÓ-ˆEÚÜ!ó "?¼ô "?ó ?�	àÐ%©°YÒ)?Ù 	¨6Ð>°IÒ>Ò>ñ?ro   c                óh  — |€|S t        |t        «      r2|j                  D ��cg c]  \  }}||| z  j                  «       f‘Œ }}}n|| fg}t        |t        «      r||j                  z  }n!|j	                  |t
        j                  f«       t        |j                  |j                  |«      S c c}}w rh   )	r$  r3  r4  r[   r¿   r   Útruere   rf   )Úgeneric_condÚgeneric_stepÚdegenerate_stepr†   r6  r4  s         rl   Ú_add_degenerate_steprJ    s¶   € ØÐØÐÜ�,¤Ô.à-9×-FÑ-F÷HÙ)˜G Tð ! 4¨,Ñ#6×"@Ñ"@Ó"BÒCð Hˆò Hð & |Ð4Ð5ˆÜ�/¤=Ô1Ø˜×4Ñ4Ñ4‰à×Ñ˜_¬a¯f©fÐ5Ô6Ü˜×/Ñ/°×1FÑ1FÈÓUÐUùóHs   ¤B.c                ó€  ‡‡‡‡	‡
‡‡— | \  }Št        d‰g¬«      Št        d‰dg¬«      Š	‰‰	‰z  z   Št        j                  Š
 G d„ dt        «      Šdˆˆˆˆ	ˆ
ˆˆfd„Š	  ‰|«      \  }}‰
t        j                  u rd }nt	        |j                  ‰d«      ‰«      }t        |‰||«      }t        ‰
||«      S # ‰$ r Y y w xY w)	Nró   r-  rô   r   c                  ó   — e Zd Zy)ú nested_pow_rule.<locals>.NoMatchNrÆ   ri   ro   rl   ÚNoMatchrM  /  s   „ Øro   rN  c                ó  •— | j                  ‰«      s t        j                  t        j                  fS | j                  r¬| j                  «       \  }}|s t        j                  t        j                  fS |D �cg c]
  } ‰|«      ‘Œ }}|D ��ch c]  \  }}|’Œ	 }}}|j                  t        j                  «       t        |«      dk(  r|j                  «       t        d„ |D «       Ž fS ‰‚| j                  r=| j                  | j                  }}|j                  ‰«      r‰‚ ‰|«      \  }}	||	|z  fS | j                  ‰«      }
|
r0|
‰   |
‰   }}‰||z  z   }t        |d«      Š|t        j                  fS ‰‚c c}w c c}}w )NrR   c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wrh   ri   )rž   r9  r  s      rl   rŸ   z9nested_pow_rule.<locals>._get_base_exp.<locals>.<genexpr>=  s   è ø€ Ò)@±°°1¬!Ñ)@ùs   ‚r   )rÓ  r   ÚOnerf  Úis_MulÚas_coeff_mulÚdiscardr  Úpopr   rª   rŽ   r    rä  r   )r(  r9  rç  rå  rô  rô   Úbasesr  Úbase_Úsub_exprä  ró   rN  Ú_get_base_expÚa_Úb_rG  rA  rù   s               €€€€€€€rl   rY  z&nested_pow_rule.<locals>._get_base_exp2  sT  ø€ Ø�}‰}˜QÔÜ—5‘5œ!Ÿ&™&�=Ð Ø�;Š;Ø×(Ñ(Ó*‰HˆAˆuÙÜ—u‘uœaŸf™f�}Ð$Ø7<Ö=¨t‘} TÕ*Ð=ˆGÐ=Ø#*×+™4˜1˜a’QÐ+ˆEÑ+Ø�M‰Mœ!Ÿ%™%Ô Ü�5‹z˜QŠØ—y‘y“{¤CÑ)@¸Ô)@Ð$AÐAÐAØˆMØ�;Š;Ø—9‘9˜dŸh™hˆqˆAØ�z‰z˜!Œ}Ø�Ù*¨1Ó-‰NˆE�7Ø˜' A™+Ð%Ð%Ø—
‘
˜7Ó#ˆÙØ˜‘9˜e B™iˆqˆAØ˜˜!™‘GˆEä˜a ›8ˆLØœ!Ÿ%™%�<ÐØˆùò' >ùÛ+s   Á8E9ÂE>)r(  r   rs   ztuple[Expr, Expr])r   r   rF  Ú	Exceptionr   r¬   r”   rJ  )rú  re   rŽ   r®   rI  rH  rN  rY  rZ  r[  rG  rA  rù   s         @@@@@@@rl   Únested_pow_ruler]  &  sÈ   þ€ à�L€Iˆqä	ˆc˜A˜3Ô	€BÜ	ˆc˜A˜q˜6Ô	"€BØ��A‘‰g€GÜ—6‘6€Lô”)ô ÷ó ð8Ù" 9Ó-‰
ˆˆdð ”q—v‘vÑØ‰ô ' y§~¡~°a¸Ó';¸QÓ?ˆÜ  ¨A¨t°TÓ:€LÜ ¨l¸OÓLÐLøð ò Ùðús   ÁB5 Â5B=Â<B=c                ó¨  ‡‡— | \  ŠŠ‰j                  «       \  }}t        d‰g¬«      }t        d‰g¬«      }t        d‰dg¬«      }|j                  ||‰z  z   |‰dz  z  z   «      }|sydˆˆfd„}|||fD �	cg c]"  }	|j                  |	t        j
                  «      ‘Œ$ c}	\  }}}t        |d«      }
|r|
t        j                  u rd}n:|j                  rt        ||z  ‰«      }nt        t        ||‰z  z   |z  ‰«      «      }t        d|z  d	z   «      dk(  �rˆ| d|z  z  ||dz  d
|z  z  z
  }}t        |d«      }d}|t        j                  ur4t        d	t        |‰|z
  dz  z  «      z  ‰‰|z
  t        j                  «      }|t        j                   u r|S t#        ‰‰|||«      }t%        |||«      }|j&                  rÔ|j&                  rÈg }t(        |d	| d|ft+        |dkD  |dk  «      ft,        |d	|d	|ft+        |dkD  |dkD  «      ffD ]G  \  }}|t        j                  u r ||Ž c S |t        j                   usŒ2|j/                   ||Ž |f«       ŒI |r;|j0                  s!|j/                  |t        j                  f«       t3        ‰‰|«      }n|}t%        |
||«      S |t        j4                  k(  rt7        ‰‰|||«      }t%        |
||«      S yc c}	w )zm
    Set degenerate=False on recursive call where coefficient of quadratic term
    is assumed non-zero.
    ró   r-  rô   rõ   r   r÷   Nc                ól  •— t        d«      }dt        ||z  ||z  ‰|z
  dz  z  z   «      z  }t        ||z  «      ‰|z
  z  }dt        |«      z  }	d }
|‰ur|}
|}dt        |||dz  z  z   «      z  } | ||«      }|	dk7  rt        |	|z  ‰|	||«      }|
�t        |‰||
|«      }|dk7  rt	        ‰‰||«      }|S )Nr²   rR   r÷   r   )r   r*   rƒ   r¦   r1  )Ú	RuleClassró   Úsign_arõ   Úsign_cÚhr§   r-  Úquadratic_baser„   r¨   Ústandard_formr†   re   r²  s                €€rl   Úmake_inverse_trigz,inverse_trig_rule.<locals>.make_inverse_trigj  sí   ø€ Ü�c“
ˆØ”d˜6 !™8 f¨Q¡h°°q±¸1©}Ñ&<Ñ<Ó=Ñ=ˆ	Ü˜a ™c› F¨1¡HÑ-ˆØ”T˜!“W‘9ˆØˆØ Ñ'Ø#ˆFØ"ˆNØœ$˜v¨¨~¸qÑ/@Ñ(@Ñ@ÓAÑAˆÙ˜M¨>Ó:ˆØ�qŠ=Ü'¨°Ñ(>ÀÈÐR_ÐahÓiˆGØÐÜ˜I v¨u°f¸gÓFˆGØ�Š6Ü(¨°F¸IÀwÓOˆGØˆro   rR   rb  r‘   )rs   rd   )r«   r   rä  r  r   rf  r   rF  r  r   Úsqrt_linear_ruler  r[   r”   r*   ÚNegativeOneÚfalserò   rJ  Úis_realrì   rT   rï   r¿   Úis_positiver3  ÚHalfr  )rú  r   rŽ   r    ró   rô   rõ   rä  rf  r  rG  rI  rc  ÚkÚnon_square_condÚsquare_steprH  r  r  r¹  r6  re   r²  s                        @@rl   r  r  [  sÜ  ù€ ð
 !Ñ€IˆvØ×%Ñ%Ó'�I€Dˆ#ÜˆS˜6˜(Ô#€AÜˆS˜6˜(Ô#€AÜˆS˜6 1˜+Ô&€AØ�J‰J�q˜1˜V™8‘| a¨°©	¡kÑ1Ó2€EáØöð& /0°°A¨YÖ7¨ˆu�y‰y˜œAŸF™FÕ#Ò7�G€A€qˆ!Ü�a˜“8€LÙ˜¬¯©Ñ/Ø‰Ø	
�ŠÜ& q¨C¡x°Ó8‰ä*¬<¸¸QÀ¹Z¹ÈCÑ8OÐQWÓ+XÓYˆä��#‘˜‘	Ó˜aÓØˆr�1�Q‘3‰x˜˜Q ™T 1 Q¡3™Z™ˆ1ˆÜ˜Q ›(ˆØˆØ¤!§&¡&Ñ(Ü'¨¬$¨q°&¸±(¸Q±©Ó*?Ñ(?ÀÈÐPQÉÔST×S`ÑS`ÓaˆKØœaŸg™gÑ%ØÐÜ2°9¸fÀaÈÈAÓNˆÜ# O°\À;ÓOˆØ�9Š9˜ŸšàˆEä˜a  Q B¨¨AÐ.´°A¸±E¸1¸q¹5Ó0AÐBÜ˜q ! Q¨¨1Ð-¬s°1°q±5¸!¸a¹%Ó/@ÐAðò C‘
��dð œ1Ÿ6™6‘>Ù,¨dÐ3Ò3ØœqŸw™wÒ&Ø—L‘LÑ"3°TÐ":¸DÐ!AÕBðCñ Ø—}’}Ø—L‘L ,´·±Ð!7Ô8Ü$ Y°¸Ó>‘à#�Ü# L°$¸ÓHÐHØ
Œa�f‰f‚}Ü  ¨F°A°q¸!Ó<ˆÜ# L°$¸ÓHÐHð ùòK 8s   Á7'Kc                óŠ   — | \  }}|j                  «       D �cg c]  }t        ||«      ‘Œ }}d |v rd S t        |||«      S c c}w rh   )Úas_ordered_termsrù  r˜   )rú  re   r²  Úgrô  s        rl   Úadd_rulers  §  sX   € Ø Ñ€Iˆvà ×1Ñ1Ó3ö5Øô ˜a Õ(ð 5€Gð 5à˜7‘?ˆ4ÐK¬°	¸6À7Ó(KÐKùò5s   ˜A c                ó|   — | \  }}|j                  |«      \  }}|dk7  rt        ||«      }|�t        |||||«      S y y r#  )r×  rù  rƒ   )rú  re   r²  r
  r¼  Ú	next_steps         rl   Úmul_rulerv  ®  sX   € Ø Ñ€Iˆvð ×'Ñ'¨Ó/�H€Eˆ1Ø�‚zÜ" 1 fÓ-ˆ	ØÐ Ü$ Y°¸¸qÀ)ÓLÐLð !ð ro   c                óÒ  ‡— ˆfd„}d
d„} |t         «       |t        Ž | |t        t        «       |t        «      g}t        d«      }t        | t         gt        ¢­«      r|| z  } t        |«      D �]õ  \  }} || «      }|sŒ|\  }	}
‰|	j                  vr|	j                  |«      s y |	j                  |d«      }	|
j                  |d«      }
||k(  r|	j                  ‰«      s y t        |	t         «      r'd|
z  }|j                  ‰«      rt        |‰«      dk(  r y ||k(  ry|
j                  s%|
j                  t        «      st        |
t        «      rHt!        |
‰«      }|j#                  «       r y |	j%                  ‰«      }|j'                  «       }|	|
|||fc S d}|dk  rd}np||k(  r+|
j(                  rt+        d„ |
j(                  D «       «      rd}n@||dz   d  D ]5  } || «      }|sŒ|d	   j                  |d«      j-                  |
«      sŒ3d} n |s�Œ§|	j%                  ‰«      }t!        t/        |
«      ‰«      }|j#                  «       r�Œß|j'                  «       }|	|
|||fc S  y )Nc                ó"  •— | j                  «       j                  «       } t        | t        «      s| j                  sg n+| j
                  D �cg c]  }|j                  ‰«      sŒ|‘Œ c}}|rt        |Ž }| |z  j                  «       }||fS y c c}w rh   )rÒ  Útogetherr$  r+   rR  r¹  Úis_algebraic_exprr   )re   r·  Ú	algebraicr²   r³   r²  s        €rl   Úpull_out_algebraicz'_parts_rule.<locals>.pull_out_algebraic¼  s„   ø€ Ø×$Ñ$Ó&×/Ñ/Ó1ˆ	ä% i´Ô;À9×CSÒCS‘RØ!*§¡ÖQ˜#°3×3HÑ3HÈÕ3P’#ÒQð 	áÜ�Y�ˆAØ˜a‘-×'Ñ'Ó)ˆBØ�b�5ˆLð ùò Rs   ÁBÁ#Bc                 ó   ‡ — dˆ fd„}|S )Nc                ó¾   •‡ ‡— t        ˆ fd„‰D «       «      rA‰ j                  D �‡cg c]  Št        ˆfd„‰D «       «      r‰‘Œ }}|rt        |Ž }‰ |z  }||fS y c c}w )Nc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrh   r  ©rž   r¼  re   s     €rl   rŸ   zI_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<genexpr>È  s   øè ø€ Ò7¨�9—=‘= ×#Ñ7ùr  c              3  ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wrh   )r$  )rž   Úclsr·  s     €rl   rŸ   zI_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<genexpr>Ê  s   øè ø€ ÒI¸œz¨#¨s×3ÑIùr¸  )r¤   r¹  r   )re   r·  r¹  r²   r³   Ú	functionss   ``   €rl   Úpull_out_u_rlz6_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rlÇ  si   ú€ ÜÓ7¨YÔ7Ô7Ø'0§~¡~÷ K ÜÓI¸yÔIÔIò ð K�ð KáÜ˜T˜
�AØ" Q™�BØ˜b˜5�LØùòKs   §A)re   r   rs   ztuple[Expr, Expr] | Noneri   )rƒ  r„  s   ` rl   Ú
pull_out_uz_parts_rule.<locals>.pull_out_uÆ  s   ø€ õ	ð Ðro   Ú	temporaryrR   Fr÷   Tc              3  óR   K  — | ]  }t        |t        t        t        f«      –— Œ! y ­wrh   )r$  r.   r-   r    )rž   ró   s     rl   rŸ   z_parts_rule.<locals>.<genexpr>  s%   è ø€ ò "Øô ˜q¤3¬¬S /×2ñ "ùs   ‚%'r   )rs   z*Callable[[Expr], tuple[Expr, Expr] | None])r!   rë  r.   r-   r    r   r$  r'  rã  rí  r¬   Úis_polynomialrV   Úis_Derivativer,   rP   rù  rq   rº  rm   r¹  ÚallÚequalsr[   )re   r²  r|  r…  Úliate_rulesÚdummyÚindexrÁ   r­   r²   r³   Úrec_dvr´   Údur¸   ÚacceptÚlrulerð  s    `                rl   Ú_parts_ruler“  ¹  s`  ø€ ôóñ œc“?¡JÔ0FÐ$GØ%¡z´#´sÓ';Ùœc“?ð$€Kô
 �+Ó€Eä�)œcÐ;Ô$:Ñ;Ô<Ø˜IÑ%ˆ	ä  Ó-ó 70‰ˆˆtÙ�i“ˆâØ‰EˆAˆrð ˜QŸ^™^Ñ+°A·E±E¸%´LÙà—‘�u˜aÓ ˆAØ—‘˜ Ó"ˆBð Ð)Ò)°!·/±/À&Ô2IÙä˜!œSÔ!Ø˜2™�Ø×(Ñ(¨Ô0Ü˜6 6Ó*¨aÒ/Ùð Ð)Ò)Ø×#Ò# r§v¡vÔ.CÔ'DÜ" 2Ô';Ô<Ü+¨B°Ó7�FØ×0Ñ0Ô2Ù#àŸV™V F›^˜Ø"ŸK™K›M˜Ø  " a¨¨VÐ3Ò3ð ˆFØ�qŠyØ‘ØÐ,Ò,°·²Üñ "ØŸ™ô"ô "à!‘Fà(¨°©¨Ð4ò �EÙ˜iÓ(�AÚ˜Q˜q™TŸY™Y u¨aÓ0×7Ñ7¸Õ;Ø!%˜Ùð	ó Ø—V‘V˜F“^�Ü'¬°«°fÓ=�Ø×0Ñ0Ö2ØŸ™›�AØ˜b ! R¨Ð/Ò/ðo70ðp ro   c                óZ  ‡‡— | \  }Š|j                  «       \  }}t        |‰«      }g }|�r¬|\  }}}}}	t        dj                  |||||	«      «       |j	                  |«       t        |t        «      ry t        |t        t        t        t        t        f«      r5|j                  ‰t        i«      }
t        |
   dkD  ry t        |
xx   dz  cc<   t        d«      D ]ü  }t        dj                  ||||«      «       ||z  |z  j!                  «       }|dk(  r nÂ‰|j"                  vrdt%        |‰|D �����	cg c]  \  }}}}}	t'        d d |||	d «      ‘Œ c}	}}}}dt)        |«      z  |z  «      }|dk7  r|rt+        ||z  ‰|||«      }|c S ||z  j                  «       \  }}t        |‰«      }|r)|\  }}}}}	||z  }||z  }|j	                  |||||	f«       Œü n ˆˆfd„Š|rC|d   \  }}}}}	t'        |‰|||	 ‰|dd  ||z  «      «      }|dk7  r|rt+        ||z  ‰|||«      }|S y c c}	}}}}w )	Nz,u : {}, dv : {}, v : {}, du : {}, v_step: {}r÷   rR   rb  z7Cyclic integration {} with v: {}, du: {}, integrand: {}r‘   c                óp   •— | r(| d   \  }}}}}t        |‰||| ‰| dd  ||z  «      «      S t        |‰«      S rD  )r±   rù  )	Ústepsre   r²   r³   r¸   r�  r´   Úmake_second_stepr²  s	          €€rl   r—  z$parts_rule.<locals>.make_second_stepI  sU   ø€ ÙØ#(¨¡8Ñ ˆAˆr�1�b˜&Ü˜Y¨°°2°vÑ?OÐPUÐVWÐVXÐPYÐ[\Ð_aÑ[aÓ?bÓcÐcÜ˜i¨Ó0Ð0ro   r   )Úas_coeff_Mulr“  rb   rÑ  r¿   r$  rS   r.   r-   r    r'   r$   ÚxreplaceÚ_cache_dummyÚ_parts_u_cacher  rÒ  rã  r»   r±   r  rƒ   )rú  re   r„   r­   r–  r²   r³   r¸   r�  r´   Úcachekeyr9  r½   rÁ   Únext_constantÚnext_integrandr—  r²  s                   @@rl   Ú
parts_rulerŸ    s‚  ù€ Ø Ñ€IˆvØ#×0Ñ0Ó2Ñ€Hˆiä˜ FÓ+€Fà€EÚØ%Ñˆˆ2ˆq�"�fÜÐ<×CÑCÀAÀrÈ1ÈbÐRXÓYÔZØ�‰�VÔä�aœÔ"Øô �aœ#œs¤C¬¬tÐ4Ô5Ø—z‘z 6¬<Ð"8Ó9ˆHÜ˜hÑ'¨!Ò+ØÜ˜8Ó$¨Ñ)Ó$ô �q“ò 	ˆAÜÐK×RÑRÐSTÐVWÐY[Ð]fÓgÔhØ ™F iÑ/×7Ñ7Ó9ˆKØ˜aÒÙØ˜[×5Ñ5Ñ5Ü& y°&à38÷:ò :Ù/˜!˜R  B¨ô ˜t T¨1¨b°&¸$Õ?ö :àœC ›JÑ&¨Ñ4ó6�ð  ’M¡tÜ,¨X¸	Ñ-AÀ6È8ÐU^Ð`dÓe�DØ’ð ./°©V×,AÑ,AÓ,CÑ)ˆM˜>Ü  °Ó8ˆFáØ'-Ñ$��2�q˜"˜fØ�]Ñ"�Ø�mÑ#�Ø—‘˜a  Q¨¨FÐ3Õ4áð1	õ41ñ Ø$ Q™xÑˆˆ2ˆq�"�fÜ˜ F¨A¨r°6Ñ;KÈEÐRSÐRTÈIÐWXÐ[]ÑW]Ó;^Ó_ˆØ˜ŠM™tÜ$ X°	Ñ%9¸6À8ÈYÐX\Ó]ˆDØˆð ùö3:s   Ä3H$c           	     ój  — | \  }}|t        |«      k(  rt        ||«      S |t        |«      k(  rt        ||«      S |t	        |«      dz  k(  rt        ||«      S |t        |«      dz  k(  rt        ||«      S t        |t        «      r&t        |j                  Ž t        |j                  Ž z  }nót        |t        «      r&t        |j                  Ž t        |j                  Ž z  }n½t        |t        «      rN|j                  d   }t	        |«      dz  t        |«      t	        |«      z  z   t	        |«      t        |«      z   z  }n_t        |t        «      rN|j                  d   }t        |«      dz  t        |«      t        |«      z  z   t        |«      t        |«      z   z  }ny t        |||t        ||«      «      S ©Nr÷   r   )r.   rÉ   r-   rÍ   r2   r×   r1   rÚ   r$  r/   r¹  r0   r,  rù  )rú  re   r²  r-  r·  s        rl   Ú	trig_ruler¢  W  sy  € Ø Ñ€IˆvØ”C˜“KÒÜ�y &Ó)Ð)Ø”C˜“KÒÜ�y &Ó)Ð)Ø”C˜“K ‘NÒ"Ü˜	 6Ó*Ð*Ø”C˜“K ‘NÒ"Ü˜	 6Ó*Ð*ä�)œSÔ!Ü˜Ÿ™Ð(¬3°	·±Ð+?Ñ?‰	Ü	�IœsÔ	#Ü˜Ÿ™Ð(¬3°	·±Ð+?Ñ?‰	Ü	�IœsÔ	#Ø�n‰n˜QÑˆÜ˜#“h ‘k¤C¨£H¬s°3«xÑ$7Ñ7Ü˜#“h¤ S£Ñ)ñ+‰	ä	�IœsÔ	#Ø�n‰n˜QÑˆÜ˜#“h ‘k¤C¨£H¬s°3«xÑ$7Ñ7Ü˜#“h¤ S£Ñ)ñ+‰	ð 	ä�y &¨)´^ÀIÈvÓ5VÓWÐWro   c                ó¦   — | \  }}|t        |«      t        |«      z  k(  rt        ||«      S |t        |«      t	        |«      z  k(  rt        ||«      S y rh   )r2   r/   rÑ   r1   r0   rÔ   r  s      rl   Útrig_product_ruler¤  s  sU   € Ø Ñ€IˆvØ”C˜“K¤# f£+Ñ-Ò-Ü˜) VÓ,Ð,Ø”C˜“K¤# f£+Ñ-Ò-Ü˜) VÓ,Ð,ð .ro   c                ó  — | \  }}t        d|g¬«      }t        d|g¬«      }t        d|g¬«      }|j                  |||dz  z  |z   z  «      }|�r}||   ||   ||   }}}t        |||||«      }|j                  �r|j                  �r ||z  dkD  }|t        j
                  u r|S |dt        | «      z  t        |«      z  z  }	t        | |z  «      }
d||
z
  z  }d||
z   z  }t        ||||
z
  «      t        | |d|t        ||||
z   «      «      g}||z
  x}}t        |||«      }|	dk7  rt        |	|d	¬
«      }t        |||	||«      }t        ||||«      }|t        j                  u r|S t        ||||f|t        j
                  fg«      S t        |||d«      }|dk7  rt        ||d|z  |dz  |«      }t        |||t        |d«      f|dfg«      S t        d|g¬«      }|j                  |||dz  z  ||z  z   |z   z  «      }|rf||   ||   }}|j                   ry t#        d«      }||d|z  z  z   }|j%                  |||d|z  z  z
  «      }t'        ||«      }|rt)        |||||«      S y t        d|g¬«      }|j                  ||z  |z   ||dz  z  ||z  z   |z   z  «      }|râ||   ||   ||   ||   ||   f\  }}}}}|j                   ry ||dz  z  ||z  z   |z   }|d|z  z  }d|z  |z  |z   }| |z  |z   }t#        d«      }t)        ||||t'        |dz  |«      «      }|dk7  rt        ||z  |z  ||||z  |«      }|j                   r|S t'        ||z  |«      }t        ||||g«      } ||z  |z  ||z  z   }!t        |||!| «      S y )Nró   r-  rô   rõ   r÷   r   rR   r‘   Fr2  rþ   Tr  r²   r  )r   rä  rZ  r˜  r   rF  r*   ré   rƒ   r˜   r   r,  ri  r3  r�   r   r  r   r¬   rù  r¦   )"rú  re   r²  ró   rô   rõ   rä  Úgeneral_ruleÚpositive_condr
  r„   Úr1Úr2Ú	log_stepsr-  ÚsubÚnegative_stepÚpowerr  Úmatch2r²   r¨   Ú
integrand2ru  r  Úmatch3ÚdenominatorÚconstÚnumer1Únumer2Ústep1Ústep2rš   Úrewritens"                                     rl   Úquadratic_denom_ruler¸  {  s;  € Ø Ñ€IˆvÜˆS˜6˜(Ô#€AÜˆS˜6˜(Ô#€AÜˆS˜6˜(Ô#€Aà�O‰O˜A  V¨q¡[¡°1Ñ!4Ñ5Ó6€EâØ˜‘(˜E !™H e¨A¡hˆaˆ1ˆÜ! )¨V°Q¸¸1Ó=ˆØ×Ó !×"4Ó"4Ø˜a™C !™GˆMØ¤§¡Ñ&Ø#Ð#Ø�qœ˜q˜b›‘z¤$ q£'Ñ)Ñ*ˆEÜ˜Q˜B˜q™D“zˆHØ�F˜8‘OÑ$ˆBØ�F˜8‘OÑ$ˆBÜ'¨¨F°F¸8±OÓDÜ*¨B¨3°¸¸BÄÈrÐSYÐ[aÐbjÑ[jÓ@kÓlðnˆIà  2™gÐ%ˆI˜Ü# C¨°Ó;ˆMØ˜ŠzÜ  s°UÔ;�	Ü 1°)¸VÀUÈCÐQ^Ó _�Ü'¨	°6¸9ÀmÓTˆMØ¤§¡Ñ'Ø$Ð$Ü  ¨F°lÀMÐ5RÐUbÔde×djÑdjÐTkÐ4lÓmÐmä˜) V¨V°RÓ8ˆØ�Š6Ü% i°¸¸1¹¸fÀb¹jÈ%ÓPˆEä˜Y¨°,ÄÀ1ÀaÃÐ1IÈEÐSWÈ=Ð0YÓZÐZäˆS˜6˜(Ô#€AØ�_‰_˜Q ! f°¡k¡/°A¸±JÑ">ÀÑ"BÑCÓD€FÙØ�q‘	˜6 !™9ˆ1ˆØ�9Š9ØÜ�#‹JˆØ˜!˜Q˜q™S™'Ñ!ˆØ—^‘^ F¨A°°Q°q±S±	©MÓ:ˆ
Ü" :¨qÓ1ˆ	ÙÜ˜ V¨Q°¸	ÓBÐBàÜˆS˜6˜(Ô#€AØ�_‰_˜a ™i¨!™m°°F¸a±K±À!ÀfÁ*Ñ0LÈqÑ0PÑQÓR€FÙØ˜q™	 6¨!¡9¨f°Q©i¸À¹ÀFÈ1ÁIÐM‰ˆˆ1ˆa��AØ�9Š9ØØ˜& !™)‘m a¨&¡jÑ0°1Ñ4ˆØ�A�a‘C‘ˆØ�Q‘3�v‘:˜a‘<ˆØ�˜‘˜Q‘ˆÜ�#‹JˆÜ�i Ø˜¤n°Q¸±W¸aÓ&@óBˆà�AŠ:Ü% e¨F¡l°;Ñ&>ÀØ&+¨V°KÑ-?ÀóHˆEà�>Š>ØˆLÜ˜v kÑ1°6Ó:ˆÜ˜9 f¨u°e¨nÓ=ˆØ˜‘< Ñ+¨F°;Ñ,>Ñ>ˆÜ˜9 f¨h¸ÓAÐAà
ro   c                ó  — | \  }}t        d|g¬«      }t        d|dg¬«      }dx}}g g g }	}}|j                  t        «      D ]á  }
|
j                  |
j                  }}|j
                  s||j                  vrŒ6|j                  s y|j                  |||z  z   «      }|sŒ^||   ||   }}||z  ||z  k7  s||z  j                  s y|dk(  s||z  dkD  t        j                  u r||}}|j                  |«       |	j                  |«       |j                  |j                  «       Œã |dk(  ryt        |«      }|||z  z   d|z  z  }t        d«      }|j!                  t#        ||	|«      D ���ci c]=  \  }}}|t        j$                  |z  z  ||z  t        j$                  |z  z  |||z  z  z  “Œ? c}}}«      j!                  |||z  |z
  |z  «      }t'        |||dz
  z  z  |z  |z  |«      }|j)                  «       s�t+        |||||«      }t-        |d«      }|t        j                  urR|j!                  t.        j1                  |	d«      «      }t'        ||«      }t3        ||||f|t        j                  fg«      }|S yc c}}}w )z*
    Substitute common (a+b*x)**(1/n)
    ró   r-  rô   r   NrR   r²   )r   rM  r   rŽ   r    rß  rã  Úis_Rationalrä  r0  r   rF  r¿   ÚqrW   r   r¬   ÚziprQ  rù  rq   r¦   r   rò  ró  r3  )rú  re   rù   ró   rô   Úa0Úb0rV  ÚqsÚbsÚpow_rŽ   r®   rä  Úa1Úb1Úq0Úu_xr²   r»  rÙ  r†   r  rG  Ú
simplifiedrI  s                             rl   rg  rg  È  s”  € ð �L€IˆqÜˆS˜1˜#Ô€AÜˆS˜1˜a˜&Ô!€AØ€K€BˆØ˜˜Bˆrˆ2€EØ—‘œsÓ#ò ˆØ—Y‘Y §¡ˆdˆØ�?Š?˜a t×'8Ñ'8Ñ8ØØ×ÒÙØ—
‘
˜1˜Q˜q™S™5Ó!ˆÙØØ�q‘˜5 ™8ˆBˆØˆb‰5�B�r‘EŠ> " R¡%×!7Ò!7ÙØ�Š7�r˜"‘u˜q‘y¤Q§V¡VÑ+Ø˜�ˆBØ�‰�TÔØ
�	‰	�"ŒØ
�	‰	�$—&‘&Õð!ð" 
ˆQ‚wØÜ˜2“,€BØ��1‘‰9˜˜"™Ñ
€CÜˆc‹
€AØ—.‘.Ü47¸¸rÀ2Ó4F÷"Hð "HÙ&0 d¨A¨qð #'¬¯©¨q©¡/°A°b±D¼A¿E¹EÀ!¹GÑ3DÀQÈÈAÉÁYÑ3NÑ"Nô "Hó IßIMÉÈaÐRSÐUWÑRWÐXZÑRZÐ\^ÑQ^ÓI_ð ä˜[¨¨R°©T©Ñ2°2Ñ5°bÑ8¸!Ó<€GØ×%Ñ%Ô'Ü˜9 a¨¨C°Ó9ˆÜ˜"˜a“yˆØœqŸv™vÑ%Ø"Ÿ™¬¯©°b¸!Ó(<Ó=ˆJÜ,¨Z¸Ó;ˆOÜ  ¨A°°|Ð0DÀÔXY×X^ÑX^ÐF_Ð/`ÓaˆDØˆð (ùô"Hs   Å,AI=c           
     ób  ‡‡‡‡— | \  }Št        d‰g¬«      Št        d‰g¬«      Št        d‰dg¬«      Št        d«      }t        dd„ g¬	«      }|j                  |t        ‰‰‰z  z   ‰‰d
z  z  z   «      |z  z  «      }|sy |‰   |‰   |‰   ||   ||   f\  ŠŠŠ}}|j                  ‰«      }|€y t	        ‰d«      }|r|t
        j                  u rd }nR‰j                  rt        |t        ‰«      |z  z  ‰«      }n*t        t        |t        ‰‰‰z  z   «      |z  z  ‰«      «      }dˆˆˆˆfd„}	|dkD  r`|‰‰‰z  z   ‰‰d
z  z  z   |dz   d
z  z  z  }
|
j                  «       t        ‰‰‰z  z   ‰‰d
z  z  z   «      z  } |	|
|«      }t        |‰||«      }n|dk(  r
 |	||«      }ny t        |||«      S )Nró   r-  rô   rõ   r   r¼  r	  c                ó6   — | j                   xr | j                  S rh   )rß  Úis_oddrà  s    rl   rÀ  z%sqrt_quadratic_rule.<locals>.<lambda>ú  s   € ¨¯©Ò(A¸¿¹€ ro   rá  r÷   c                ó$  •— t        ‰‰‰z  z   ‰‰dz  z  z   «      }| j                  «       }|dk  �r>|dk(  r| j                  «       nt        j                  | j                  «       f\  }}|d‰z  z  }||‰z  z
  }d‰z  ‰z  ‰z   |z  }d }	d }
|dk7  rit        d«      }t        dt        |«      z  ||t        j                   «      }t        |‰|‰‰‰z  z   ‰‰dz  z  z   |«      }
|dk7  rt        ||z  ‰|||
«      }
|dk7  r4t        t        d|z  ‰«      d¬«      }	|dk7  rt        ||z  ‰|d|z  |	«      }	|
r3|	r1t        ||z  ||z  d¬«      }t        |‰|t        |‰|
|	g«      «      }|S |
xs |	}|S | j                  «       }t!        |‰‰‰‰|«      }|S )Nr÷   rR   r   r²   Frÿ   r2  )r*   rV   Ú
all_coeffsr   rf  Úas_exprr   r�   rl  r¦   rƒ   r  r  r   r,  r˜   rû   )Ú
numer_polyre   rR  Údegr  r  ÚAÚBÚpre_substituteÚconstant_stepÚlinear_stepr²   Úpow_ruleÚaddr  rü   ró   rô   rõ   rù   s                   €€€€rl   Úsqrt_quadratic_denom_rulez6sqrt_quadratic_rule.<locals>.sqrt_quadratic_denom_rule  sÎ  ø€ Ü�Q�q˜‘s‘U˜1˜Q ™T™6‘\Ó"ˆØ×ÑÓ!ˆØ�!‹8à.1°Qªh�:×(Ñ(Ô*¼Q¿V¹VÀZ×EWÑEWÓEYÐ<Z‰DˆAˆqà�1�Q‘3‘ˆAØ�!�A‘#‘ˆAØ ™c !™e A™g u™_ˆNØ)-ˆMØ'+ˆKØ�AŠvÜ˜#“J�Ü$ Q¤t¨A£w¡Y°°1´q·v±v°gÓ>�Ü# N°A°q¸!¸A¸a¹C¹%ÀÀ!ÀQÁ$Á¹,ÈÓQ�Ø˜’6Ü"3°A°nÑ4DÀaÈÈNÐ\gÓ"h�KØ�AŠvÜ 1´,¸qÀ¹wÈÓ2JÐW\Ô ]�Ø˜’6Ü$5°a¸±g¸qÀ!ÀQÀuÁWÈmÓ$\�MÙ™}Ü˜!˜NÑ*¨A¨e©G¸eÔD�Ü$/°	¸1¸cÄ7È3ÐPQÐT_ÐanÐSoÓCpÓ$q�ð ˆð	 #Ò3 m�ð ˆð  ×*Ñ*Ó,ˆFÜ)¨)°Q¸¸1¸aÀÓHˆDØˆro   rR   r‘   )rÍ  rY   re   r   )r   rä  r*   Úas_polyr   r   rF  r  rù  rg  r  rÌ  r,  rJ  )rú  r   re   r¼  r	  rä  Úf_polyrG  rI  rÖ  rÍ  r-  r†   rH  ró   rô   rõ   rù   s                 @@@@rl   r  r  ô  sÚ  û€ Ø�L€IˆqÜˆS˜1˜#Ô€AÜˆS˜1˜#Ô€AÜˆS˜1˜a˜&Ô!€AÜˆS‹	€AÜˆSÑAÐBÔC€AØ�O‰O˜Aœd 1 Q q¡S¡5¨¨1¨a©4©¡<Ó0°!Ñ3Ñ3Ó4€EÙØØ˜!‘H˜e A™h¨¨a©°%¸±(¸EÀ!¹HÐD�M€A€qˆ!ˆQ�Ø�Y‰Y�q‹\€FØ€~Øä�a˜“8€LÙ˜¬¯©Ñ/Ø‰Ø	
�ŠÜ(¨¬4°«7°A©:©°qÓ9‰ä*¬<¸¼$¸qÀÀ1Á¹u»+Àq¹.Ñ8HÈ!Ó+LÓMˆ÷ð ð@ 	ˆ1‚uØ˜q  1¡™u Q q¨!¡t¡V™|°°!±°Q©wÑ7Ñ7ˆ
Ø×&Ñ&Ó(¬¨a°°!±©e°A°a¸±d±F©lÓ);Ñ;ˆ	Ù+¨J¸	ÓBˆÜ" 9¨a°¸GÓD‰Ø	
ˆbŠÙ0°¸ÓC‰àÜ ¨l¸OÓLÐLro   c                ó   — | \  }}t        |t        «      �rè|j                  d   |k(  �rÔ|j                  t        k(  rt        ||«      S |j                  t        k(  rt        ||«      S t        d«      }|j                  t        k(  rIt	        |«      t        |«      z  }t        |||t        |||t        |«      t        d|z  ||«      «      «      S |j                  t        k(  rIt        |«      t	        |«      z  }t        |||t        |||t	        |«      t        d|z  ||«      «      «      S |j                  t        «      }|j                  t        k(  rbt        |||t        |||t        |dz  «      t!        d|dz  dz   z  |t#        d«      t"        j$                  t"        j$                  «      «      «      S |j                  t&        k(  r5t        |||t        |||t        |dz  «      t        d|z  ||«      «      «      S y y y )Nr   r²   rR   r÷   )r$  r"   r¹  rJ  r'   rß   r$   rã   r   r(   r,  r¦   ré   r%   rû  r&   rZ  r   rQ  r#   )rú  re   r²  r²   r-  s        rl   Úhyperbolic_rulerÚ  7  sÙ  € Ø Ñ€IˆvÜ�)Ô/Õ0°Y·^±^ÀAÑ5FÈ&Ó5PØ�>‰>œTÒ!Ü˜I vÓ.Ð.Ø�>‰>œTÒ!Ü˜I vÓ.Ð.Ü�#‹JˆØ�>‰>œTÒ!Ü˜V›¤T¨&£\Ñ1ˆIÜ˜y¨&°)Ü˜ F¨A¬t°F«|¼^ÈAÈaÉCÐQRÐTUÓ=VÓWóYð Yà�>‰>œTÒ!Ü˜V›¤T¨&£\Ñ1ˆIÜ˜y¨&°)Ü˜ F¨A¬t°F«|¼^ÈAÈaÉCÐQRÐTUÓ=VÓWóYð Yð "×)Ñ)¬$Ó/ˆIØ�~‰~¤Ò%Ü" 9¨f°iÜ˜Y¨°´4¸¸q¹³>Ü! ! Q¨¡T¨A¡X¡,°´1°Q³4¼¿¹ÄÇÁÓFóHóIð Ið �~‰~¤Ò%Ü" 9¨f°iÜ˜Y¨°´4¸¸q¹³>Ü% a¨¡c¨1¨aÓ0ó2ó3ð 3ð &ð) 6QÐ0ro   c                óŠ   — t        d| g¬«      }t        d| g¬«      }t        d| gd„ g¬«      }t        d| gd„ g¬«      }||||fS )	Nró   r-  rô   r–   c                ó"   — t        | t        «      S rh   ©r$  r   rà  s    rl   rÀ  zmake_wilds.<locals>.<lambda>V  ó   € ¼*ÀQÌÓ:P€ ro   r+  r	  c                ó"   — t        | t        «      S rh   rÝ  rà  s    rl   rÀ  zmake_wilds.<locals>.<lambda>W  rÞ  ro   )r   )r²  ró   rô   r–   r	  s        rl   Ú
make_wildsrà  R  sT   € äˆS˜6˜(Ô#€AÜˆS˜6˜(Ô#€AÜˆS˜6˜(Ñ0PÐ/QÔR€AÜˆS˜6˜(Ñ0PÐ/QÔR€Aàˆa��Aˆ:Ðro   c                óv   — t        | «      \  }}}}t        || z  «      |z  t        || z  «      |z  z  }|||||fS rh   )rà  r.   r-   ©r²  ró   rô   r–   r	  rA  s         rl   Úsincos_patternrã  [  óI   € ä˜FÓ#�J€A€qˆ!ˆQÜ�!�F‘(‹m˜QÑ¤ Q v¡X£°Ñ!1Ñ1€Gà�A�q˜!˜QÐÐro   c                óv   — t        | «      \  }}}}t        || z  «      |z  t        || z  «      |z  z  }|||||fS rh   )rà  r/   r2   râ  s         rl   Útansec_patternræ  b  rä  ro   c                óv   — t        | «      \  }}}}t        || z  «      |z  t        || z  «      |z  z  }|||||fS rh   )rà  r0   r1   râ  s         rl   Úcotcsc_patternrè  i  rä  ro   c                ó„   — t        d| g¬«      }t        d| g¬«      }t        d«      }t        || z  |z   «      |z  }||||fS )Nr–   r-  rô   rr  )r   r9   )r²  r–   rô   rr  rA  s        rl   Úheaviside_patternrê  p  sM   € äˆS˜6˜(Ô#€AÜˆS˜6˜(Ô#€AÜˆS‹	€AÜ˜˜&™ 1™Ó%¨Ñ)€Gà�A�q˜!ÐÐro   c                ó   ‡ — ˆ fd„}|S )Nc                ó   •—  ‰| Ž S rh   ri   )r¹  rJ  s    €rl   Ú
uncurry_rlzuncurry.<locals>.uncurry_rlz  s   ø€ Ù�Tˆ{Ðro   ri   )rJ  rí  s   ` rl   Úuncurryrî  y  s   ø€ ôàÐro   c                ó   ‡ — ˆ fd„}|S )Nc           	     ól   •— | \  }}}}}} ‰||||||«      }||k7  rt        |||t        ||«      «      S y rh   )r,  rù  )	r¹  ró   rô   r–   r	  re   r²  r-  rû  s	           €rl   Útrig_rewriter_rlz'trig_rewriter.<locals>.trig_rewriter_rl  sO   ø€ Ø(,Ñ%ˆˆ1ˆa��I˜vÙ˜A˜q ! Q¨	°6Ó:ˆ	Ø˜	Ò!Ü˜y¨&°)¼^ÈIÐW]Ó=^Ó_Ð_ð "ro   ri   )rû  rñ  s   ` rl   Útrig_rewriterrò  ~  s   ø€ ô`ð
 Ðro   c                ón   — |j                   xr( |j                   xr |j                  xr |j                  S rh   )Úis_evenr0  ©ró   rô   r–   r	  r  r  s         rl   rÀ  rÀ  ‡  s4   € ˜QŸY™Yò *¨1¯9©9ò *Ø×Ñò*Ø×)Ñ)ð ro   c                óx   — dt        d| z  |z  «      z
  dz  |dz  z  dt        d|z  |z  «      z   dz  |dz  z  z  S rr  )r-   ©ró   rô   r–   r	  r  r²  s         rl   rÀ  rÀ  ‹  sM   €  q¬3¨q°©s°6©z«?Ñ':¸aÑ&?ÀQÈÁUÑ%KØ'(¬3¨q°©s°6©z«?Ñ':¸aÑ&?ÀQÈÁUÑ%Kñ%M€ ro   c                ó(   — |j                   xr |dk\  S ©Nrê  ©rÉ  rõ  s         rl   rÀ  rÀ  Ž  ó   € ¸1¿8¹8Ò;NÈÈQÉ€ ro   c                ó~   — dt        | |z  «      dz  z
  |dz
  dz  z  t        | |z  «      z  t        ||z  «      |z  z  S rr  )r-   r.   r÷  s         rl   rÀ  rÀ  ‘  óJ   €  Q¬¨Q¨v©X«¸Ñ)9Ñ%9¸aÀ!¹eÀq¹[Ñ$IÜ$'¨¨&©£Mñ%2ä$'¨¨&©£M°QÑ$6ñ%7€ ro   c                ó(   — |j                   xr |dk\  S rù  rú  rõ  s         rl   rÀ  rÀ  •  rû  ro   c                ó~   — dt        ||z  «      dz  z
  |dz
  dz  z  t        ||z  «      z  t        | |z  «      |z  z  S rr  )r.   r-   r÷  s         rl   rÀ  rÀ  ˜  rý  ro   c                ó(   — |j                   xr |dk\  S ©Nrb  ©rô  rõ  s         rl   rÀ  rÀ  œ  ó   € ¸A¿I¹IÒ<PÈ!ÈqÉ&€ ro   c                ó„   — dt        ||z  «      dz  z   |dz  dz
  z  t        ||z  «      dz  z  t        | |z  «      |z  z  S rr  )r/   r2   r÷  s         rl   rÀ  rÀ  ž  óO   €  Q¬¨Q¨v©X«¸Ñ)9Ñ%9¸qÀ¹sÀQ¹wÑ$GÜ$'¨¨&©£M°1Ñ$4ñ%5ä$'¨¨&©£M°QÑ$6ñ%7€ ro   c                ó   — |j                   S rh   rú  rõ  s         rl   rÀ  rÀ  ¢  ó
   € ¸1¿8¹8€ ro   c                ó~   — t        | |z  «      dz  dz
  |dz
  dz  z  t        | |z  «      z  t        ||z  «      |z  z  S ©Nr÷   rR   )r2   r/   r÷  s         rl   rÀ  rÀ  ¤  sJ   € ¤S¨¨6©£]°AÑ%5¸Ñ%9ÀÀAÁÈ¹{Ñ$KÜ%(¨¨6©£]ñ%3ä%(¨¨6©£]°aÑ%7ñ%8€ ro   c                ó   — |dk(  xr |dk(  S r¡  ri   rõ  s         rl   rÀ  rÀ  ¨  s   € ¸AÀ¹FÒ<MÀqÈAÁv€ ro   c                ó*   — t        | |z  «      dz  dz
  S r	  )r2   r÷  s         rl   rÀ  rÀ  ª  s   € ¤C¨¨&©£M°1Ñ$4°qÑ$8€ ro   c                ó(   — |j                   xr |dk\  S r  r  rõ  s         rl   rÀ  rÀ  ¬  r  ro   c                ó„   — dt        ||z  «      dz  z   |dz  dz
  z  t        ||z  «      dz  z  t        | |z  «      |z  z  S rr  )r0   r1   r÷  s         rl   rÀ  rÀ  ®  r  ro   c                ó   — |j                   S rh   rú  rõ  s         rl   rÀ  rÀ  ²  r  ro   c                ó~   — t        | |z  «      dz  dz
  |dz
  dz  z  t        | |z  «      z  t        ||z  «      |z  z  S r	  )r1   r0   r÷  s         rl   rÀ  rÀ  ´  sJ   € ¤S¨¨6©£]°AÑ%5¸Ñ%9ÀÀAÁÈ¹{Ñ$KÜ$'¨¨&©£Mñ%2ä$'¨¨&©£M°QÑ$6ñ%7€ ro   c                óz  ‡	— | \  Š	}t        ˆ	fd„t        t        fD «       «      r’t        |«      \  }}}}}‰	j	                  |«      }|sy  t        t        t        t        t        t        t        i«      t        ||||fD �cg c]"  }|j                  |t        j                  «      ‘Œ$ c}‰	|gz   «      «      S y c c}w )Nc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrh   r  r€  s     €rl   rŸ   z#trig_sincos_rule.<locals>.<genexpr>»  ó   øè ø€ Ò
0 ˆ9�=‰=˜×Ñ
0ùr  )r¤   r.   r-   rã  rä  r  Úsincos_botheven_conditionÚsincos_bothevenÚsincos_sinodd_conditionÚsincos_sinoddÚsincos_cosodd_conditionÚsincos_cosoddr<  r  r   rf  ©
rú  r²  rA  ró   rô   r–   r	  rä  r  re   s
            @rl   Útrig_sincos_ruler  ¸  s¸   ø€ Ø Ñ€Iˆvä
Ó
0¤c¬3 ZÔ
0Ô0Ü,¨VÓ4Ñˆ��A�q˜!Ø—‘ Ó(ˆÙØðŒ{Ü%¤Ü#¤]Ü#¤]ð
ó ô Ø,-¨q°!°Q¨<Ö8 aˆU�Y‰Y�qœ!Ÿ&™&Õ!Ò8Ø˜Ðñ ó!ó	"ð 	"ð 1ùò 9s   Â 'B8c                óÊ  ‡	— | \  Š	}‰	j                  dt        |«      z  t        |«      i«      Š	t        ˆ	fd„t        t        fD «       «      r’t        |«      \  }}}}}‰	j                  |«      }|sy  t        t        t        t        t        t        t        i«      t        ||||fD �cg c]"  }|j                  |t         j"                  «      ‘Œ$ c}‰	|gz   «      «      S y c c}w )NrR   c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrh   r  r€  s     €rl   rŸ   z#trig_tansec_rule.<locals>.<genexpr>Ð  r  r  )r¬   r-   r2   r¤   r/   ræ  rä  r  Útansec_tanodd_conditionÚtansec_tanoddÚtansec_seceven_conditionÚtansec_secevenÚtan_tansquared_conditionÚtan_tansquaredr<  r  r   rf  r  s
            @rl   Útrig_tansec_ruler#  É  sÞ   ø€ Ø Ñ€Iˆvà—‘Ø	ŒC�‹K‰œ˜V›ð ó €Iô Ó
0¤c¬3 ZÔ
0Ô0Ü,¨VÓ4Ñˆ��A�q˜!Ø—‘ Ó(ˆÙØðŒ{Ü#¤]Ü$¤nÜ$¤nð
ó ô Ø,-¨q°!°Q¨<Ö8 aˆU�Y‰Y�qœ!Ÿ&™&Õ!Ò8Ø˜Ðñ ó!ó	"ð 	"ð 1ùò 9s   Â('C c                ó$  ‡	— | \  Š	}‰	j                  dt        |«      z  t        |«      dt        |«      z  t	        |«      t        |«      t        |«      z  t	        |«      i«      Š	t        ˆ	fd„t        t        fD «       «      rˆt        |«      \  }}}}}‰	j                  |«      }|sy  t        t        t        t        t        i«      t        ||||fD �cg c]"  }|j                  |t         j"                  «      ‘Œ$ c}‰	|gz   «      «      S y c c}w )NrR   c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrh   r  r€  s     €rl   rŸ   z#trig_cotcsc_rule.<locals>.<genexpr>æ  r  r  )r¬   r.   r1   r/   r0   r-   r¤   rè  rä  r  Úcotcsc_cotodd_conditionÚcotcsc_cotoddÚcotcsc_csceven_conditionÚcotcsc_cscevenr<  r  r   rf  r  s
            @rl   Útrig_cotcsc_ruler*  Þ  s   ø€ Ø Ñ€IˆvØ—‘Ø	ŒC�‹K‰œ˜V›Ø	ŒC�‹K‰œ˜V›ÜˆF‹”c˜&“kÑ!¤3 v£;ð ó €Iô Ó
0¤c¬3 ZÔ
0Ô0Ü,¨VÓ4Ñˆ��A�q˜!Ø—‘ Ó(ˆÙØðŒ{Ü#¤]Ü$¤nð
ó ô Ø,-¨q°!°Q¨<Ö8 aˆU�Y‰Y�qœ!Ÿ&™&Õ!Ò8Ø˜Ðñ ó!ó"ð 	"ð 1ùò 9s   Ã'Dc                óö   — | \  }}t        dt        d|z  «      g¬«      }|j                  t        d|z  «      |z  «      }|r8dt        |«      z  t        |«      z  t        d|z  «      z  }t	        ||z  |«      S y )Nró   r÷   r-  )r   r.   rä  r-   rù  )rú  re   r²  ró   rä  Ú
sin_doubles         rl   Útrig_sindouble_ruler-  ó  sy   € Ø Ñ€IˆvÜˆSœ3˜q ™x›=˜/Ô*€AØ�O‰OœC  &¡›M¨!™OÓ,€EÙØ”s˜6“{‘]¤3 v£;Ñ.¬s°1°V±8«}Ñ<ˆ
Ü˜i¨*Ñ4°fÓ=Ð=ð ro   c           	     ó’   —  t        t        t        «      t        t        «      t        t        «      t        t
        «      «      | «      S rh   )r^   r_   r  r#  r*  r-  r  s    rl   Útrig_powers_products_ruler/  û  s@   € ð2Œ6”)Ô,Ó-ÜÔ,Ó-ÜÔ,Ó-ÜÔ/Ó0ó2ð 3;ó<ð <ro   c           
     ó  — | \  }}t        dd|g¬«      }t        dd|g¬«      }t        d«      }|||dz  z  z   }|j                  |«      }|D �]»  }|j                  |«      }	|	j	                  |t
        j                  «      }
|	j	                  |t
        j                  «      }|
j                  xr |
dkD  xs |
j                  }|j                  xr |dkD  xs |j                  }|
j                  xr |
dk  xs |
j                  }|j                  xr |dk  xs |j                  }d }|r(|r&t        |
«      t        |«      z  t        |«      z  }d}n{|r<|r:t        |
«      t        | «      z  }|t        |«      z  }t        || kD  ||k  «      }n=|r;|r9t        |
 «      t        |«      z  }|t        |«      z  }t        || kD  ||k  «      }|s�Œ„i }t        t        t        t        t         t"        fD ]?  } ||«      |t         ||«      dz  «      <   d ||«      z  |t         ||«      d	z  «      <   ŒA |j%                  ||«      j'                  «       }t)        ||«      }|j+                  |«      r�Œ'|t-        ||«      z  }|j'                  «       }|j                  dt        |«      z  «      }|r(|j/                  dt        |«      z  t        |«      i«      }t1        ||«      }|j3                  «       r�Œ«t5        ||||||«      c S  y )
Nró   r   r-  rô   rI  r÷   TrR   rþ   )r   r   rM  rä  r  r   rf  Ú	is_numberrk  Úis_negativer*   r/   r.   rT   r2   r-   r1   r0   r¬   rN  rÉ  rí  rµ  r™  rù  rq   rH  )rú  re   r²  rÏ  rÐ  rI  Útarget_patternÚmatchesr(  rä  ró   rô   Ú
a_positiveÚ
b_positiveÚ
a_negativeÚ
b_negativeÚx_funcrK  r„   Úsubstitutionsr¼  ÚreplacedÚsecantsr†   s                           rl   Útrig_substitution_ruler=    sß  € Ø Ñ€IˆvÜˆS˜1˜f˜+Ô&€AÜˆS˜1˜f˜+Ô&€AÜ�'‹N€EØ˜˜6 1™9™‘_€Nà�n‰n˜^Ó,€GØó 2GˆØ—
‘
˜>Ó*ˆØ�I‰I�aœŸ™Ó ˆØ�I‰I�aœŸ™Ó ˆà—{‘{Ò, q¨1¡uÒ>°·±ˆ
Ø—{‘{Ò, q¨1¡uÒ>°·±ˆ
Ø—{‘{Ò, q¨1¡uÒ>°·±ˆ
Ø—{‘{Ò, q¨1¡uÒ>°·±ˆ
ØˆÙ™*ä˜1“gœd 1›g‘o¬¨U«Ñ3ˆFð ‰KÙ™Jä˜A“wœt Q B›xÑ'ˆHØ¤ E£
Ñ*ˆFÜ˜f¨ yÑ0°&¸8Ñ2CÓD‰KÙ™Jä˜Q˜B“x¤ Q£Ñ'ˆHØ¤ E£
Ñ*ˆFÜ˜f¨ yÑ0°&¸8Ñ2CÓDˆKÛð ˆMÜœ3¤Üœ3¤ð%ò A�á34°U³8�œd¡1 U£8¨Q¡;Ó/Ñ0Ø67¹¸%»±j�œd¡1 U£8¨b¡>Ó2Ò3ðAð
 !—~‘~ f¨fÓ5×>Ñ>Ó@ˆHÜ" 8¨]Ó;ˆHØ—<‘< Ö'ØœK¨°Ó6Ñ6�Ø#×,Ñ,Ó.�Ø"Ÿ-™-¨¬#¨e«*©Ó5�ÙØ'×0Ñ0Øœ#˜e›*™¤c¨%£jð2ó  �Hô )¨°5Ó9�Ø×1Ñ1Ö3Ü/°	¸6Ø˜v x°¸+óGò Gñc2Gro   c                óÊ   — | \  }}t        |«      \  }}}}|j                  |«      }|r;d||   k7  r2t        ||   |«      }||   ||   }}t        ||||z  |z   | |z  |«      S y y r  )rê  rä  rù  r<  )	rú  re   r²  rA  r–   rô   rr  rä  r†   s	            rl   Úheaviside_ruler?  =  sƒ   € Ø Ñ€IˆvÜ(¨Ó0Ñ€GˆQ��1Ø�O‰O˜GÓ$€EÙ��e˜A‘h’ä   q¡¨6Ó2ˆØ�Q‰x˜˜q™ˆ1ˆÜ˜Y¨°°&±¸1±¸q¸bÀ¹dÀGÓLÐLð	 €uro   c                óâ  — | \  }}t        |j                  «      dk(  rt        j                  }n|j                  d   }|j                  r|dk  ry t        d|g¬«      t        d|dg¬«      }}|j                  d   j                  |||z  z   «      }|sy ||   ||   }}t        |d«      }|t        j                  u rd }nt        t        ||«      |«      }t        |||||«      }	t        ||	|«      S )NrR   r   ró   r-  rô   )r  r¹  r   rf  rß  r   rä  r   rF  r   r:   rB  rJ  )
rú  re   rù   r	  ró   rô   rä  rG  rI  rH  s
             rl   Údirac_delta_rulerA  H  sè   € Ø�L€IˆqÜ
ˆ9�>‰>Ó˜aÒÜ�F‰F‰à�N‰N˜1ÑˆØ�<Š<˜1˜qš5ØÜ�˜a˜SÔ!¤4¨°a¸°VÔ#<€q€AØ�N‰N˜1Ñ×#Ñ# A a¨¡c¡EÓ*€EÙØØ�‰8�U˜1‘X€q€AÜ�a˜“8€LØ”q—v‘vÑØ‰ä&¤z°!°QÓ'7¸Ó;ˆÜ! )¨Q°°1°aÓ8€LÜ ¨l¸OÓLÐLro   c           
     óL  — | \  }}t        d«      }t        |||«      }d}|�r‚t        d«       g }|D �]L  \  }}}	t        |	|«      }
|dz   }t        dj	                  ||
«      «       |
j                  «       rŒEt        |dz
  «      dk7  rÙ|j                  «       \  }}|
rt        ||	z  |||	|
«      }
|j                  r¦g }g }t        |t        «      r|j                  }n|j                  |«       |D ]O  }t        |j                  «      rŒt        t!        ||d«      |«      }|sŒ3|j                  |t#        |d«      f«       ŒQ |j                  |
df«       t%        |	||«      }
|j                  t'        |||||
«      «       �ŒO t)        |«      dkD  rt+        |||«      S |r|d   S y y )Nr²   r   zList of Substitution RulesrR   r  T)r   rö  rb   rù  rÑ  rq   r[   rÖ  rƒ   rã  r$  r   r¹  r¿   r   r  rÉ  r   r3  r¦   r  r  )rú  re   r²  r§   r:  r*  Úwaysr¨   rõ   rÙ  Úsubruler9  rR  Ú	piecewiseÚcould_be_zeror(  r†   s                    rl   Úsubstitution_rulerG  ^  s¾  € Ø Ñ€Iˆvä�#‹J€EÜ& y°&¸%Ó@€MØ€EÚÜÐ*Ô+ØˆØ&3ó "	JÑ"ˆF�A�{Ü$ [°%Ó8ˆGØ˜A‘IˆEÜ�-×&Ñ& u¨gÓ6Ô7à×)Ñ)Ô+Øä˜˜A™‹ !Ò#Ø×+Ñ+Ó-‘��5ÙÜ/°°K±ÀÈÈ;ÐX_Ó`�Gà×%Ò%Ø "�IØ$&�Mä! %¬Ô-Ø(-¯
©
™à%×,Ñ,¨UÔ3à -ò #˜Ü(¨¯©Õ6Ü&4´[ÀÈDÐRSÓ5TÐV\Ó&]˜Gâ&Ø )× 0Ñ 0Ø$+Ü$& t¨Q£Kð2"õ !#ð#ð ×$Ñ$ g¨t _Ô5Ü+¨K¸ÀÓK�Gà�K‰Kœ˜i¨°¸ÀÓHÖIðE"	JôH ˆt‹9�qŠ=Ü" 9¨f°dÓ;Ð;ÙØ˜‘7ˆNð ðS ro   c                ó"   — | j                  «       S rh   )rÔ  ©re   r²  s     rl   rÀ  rÀ  ’  s   € ˜i×<Ñ<Ó>€ ro   c                ó$   — | j                  |«      S rh   )ÚapartrI  s     rl   rÀ  rÀ  “  s   € ˜iŸo™o¨fÓ5€ ro   c                 ó   — yr  ri   rI  s     rl   rÀ  rÀ  ˜  s   � ro   c                ó"   — | j                  «       S rh   )rÒ  rI  s     rl   rÀ  rÀ  ™  ó   € ˜i×.Ñ.Ó0€ ro   c                óp   ‡— t        | t        t        f«      xs t        ˆfd„| j                  D «       «      S )Nc              3  ó\   •K  — | ]#  }|j                   xs |j                  ‰«      –— Œ% y ­wrh   )rª   rˆ  r¶  s     €rl   rŸ   z<lambda>.<locals>.<genexpr>�  s*   øè ø€ Ò0sÐ]`°·±Ò1X¸s×?PÑ?PÐQWÓ?XÓ1XÑ0sùs   ƒ),)r$  r   r   rŠ  r¹  rI  s    `rl   rÀ  rÀ  œ  s-   ø€ Ü�9œs¤C˜jÓ)Òs¬SÓ0sÐdm×drÑdrÔ0sÓ-sð ro   c                ó"   — | j                  «       S rh   ©ÚexpandrI  s     rl   rÀ  rÀ  ž  rN  ro   c                ó„   — t        | j                  t        «      D �ch c]  }|j                  d   ’Œ c}«      dkD  S c c}w rD  )r  Úatomsr,   r¹  )re   r²  ró   s      rl   rÀ  rÀ  ¢  s4   € Ü 	§¡Ô0EÓ FÖG˜1ˆQ�V‰V�A‹YÒGÓHÈ1ÑLð ùÚGs   �=c                ó&   — | j                  d¬«      S )NT)ÚtrigrR  rI  s     rl   rÀ  rÀ  ¤  s   € ˜i×.Ñ.°DÐ.Ó9€ ro   c                óØ   — | d   }|j                   }|j                  }|j                  }| j                  |v r,| j                  |v rt	        | Ž S t        || j                  «      S t        | Ž S r  )Ú	variablesr(  rã  r²  r!  r  r   )rú  re   Údiff_variablesÚundifferentiated_functionÚintegrand_variabless        rl   Úderivative_ruler]  ¦  sl   € Ø˜‘€IØ×(Ñ(€NØ )§¡ÐØ3×@Ñ@Ðà‡�Ð-Ñ-Ø�?‰?˜nÑ,Ü! 8Ð,Ð,ä 	¨8¯?©?Ó;Ð;ä˜XÐ&Ð&ro   c           	     óÆ   — | \  }}|j                  dt        |«      z  «      r?|j                  dt        |«      z  t        |«      «      }t	        |||t        ||«      «      S y r#  )rä  r-   r¬   r2   r,  rù  )rú  re   r²  r-  s       rl   Úrewrites_ruler_  ´  sZ   € Ø Ñ€Iˆvà‡��qœ˜V›‘}Ô%Ø—N‘N 1¤S¨£[¡=´#°f³+Ó>ˆ	Ü˜9 f¨i¼È	ÐSYÓ9ZÓ[Ð[ð &ro   c                ó   — t        | Ž S rh   )r  r  s    rl   Úfallback_rulera  »  r  ro   zdict[Expr, Expr | None]Ú_integral_cachezdict[Expr, int]r›  Úzc                óh  ‡‡— | j                  ‰t        i«      }|t        v r4t        |   €t        | ‰«      S t        |   j                  t        ‰«      ‰fS dt        |<   t	        | ‰«      }ˆfd„Šˆfd„} t        t        t        «      t        t        ‰t        t        t        t        «      t        t        «      t        t        «      t        t        «      «      t        t        t        t         t"        t$        t&        t        t        t(        «      t        t*        «      t        t,        «      t        t        «      t        t        «      t        t.        «      «      t0        t2        t4        t6        t8        t,        t:        t<        t>        t@        tB        tD        i«      «      t        t        t6        «      t        tF        «      t        tI        tJ        tL        tO         |t&        t        «      tP        «      tO         |t&        t        «      tR        «      tO         |t&        tT        gtV        ¢­Ž tX        «      tO         |t&        t        «      tZ        «      t\        t^        «      «      t        tO         |t&        t        «      t`        «      «      t        tb        «      «      td        «      |«      }t        |= |S )a‹  Returns the steps needed to compute an integral.

    Explanation
    ===========

    This function attempts to mirror what a student would do by hand as
    closely as possible.

    SymPy Gamma uses this to provide a step-by-step explanation of an
    integral. The code it uses to format the results of this function can be
    found at
    https://github.com/sympy/sympy_gamma/blob/master/app/logic/intsteps.py.

    Examples
    ========

    >>> from sympy import exp, sin
    >>> from sympy.integrals.manualintegrate import integral_steps
    >>> from sympy.abc import x
    >>> print(repr(integral_steps(exp(x) / (1 + exp(2 * x)), x)))     # doctest: +NORMALIZE_WHITESPACE
    URule(integrand=exp(x)/(exp(2*x) + 1), variable=x, u_var=_u, u_func=exp(x),
    substep=ArctanRule(integrand=1/(_u**2 + 1), variable=_u, a=1, b=1, c=1))
    >>> print(repr(integral_steps(sin(x), x)))     # doctest: +NORMALIZE_WHITESPACE
    SinRule(integrand=sin(x), variable=x)
    >>> print(repr(integral_steps((x**2 + 3)**2, x)))     # doctest: +NORMALIZE_WHITESPACE
    RewriteRule(integrand=(x**2 + 3)**2, variable=x, rewritten=x**4 + 6*x**2 + 9,
    substep=AddRule(integrand=x**4 + 6*x**2 + 9, variable=x,
    substeps=[PowerRule(integrand=x**4, variable=x, base=x, exp=4),
    ConstantTimesRule(integrand=6*x**2, variable=x, constant=6, other=x**2,
    substep=PowerRule(integrand=x**2, variable=x, base=x, exp=2)),
    ConstantRule(integrand=9, variable=x)]))

    Returns
    =======

    rule : Rule
        The first step; most rules have substeps that must also be
        considered. These substeps can be evaluated using ``manualintegrate``
        to obtain a result.

    Nc                ó¦   •— | j                   }‰|j                  vrt        S t        t        t
        fD ]  }t        ||«      sŒ|c S  t        |«      S rh   )re   rã  r   r   r,   rP   r$  Útype)rú  re   r‚  r²  s      €rl   r  zintegral_steps.<locals>.key  sT   ø€ Ø×&Ñ&ˆ	à˜×/Ñ/Ñ/ÜˆMÜÔ1Ô3GÐHò 	ˆCÜ˜) SÕ)Ø’
ð	ô �I‹Ðro   c                 ó   •‡ — ˆˆ fd„}|S )Nc                ó4   •—  ‰| «      }|xr t        |‰«      S rh   )Ú
issubclass)rú  rm  r  Úklassess     €€rl   Ú_integral_is_subclasszKintegral_steps.<locals>.integral_is_subclass.<locals>._integral_is_subclass  s   ø€ Ù�H“ˆAØÒ/œ A wÓ/Ð/ro   ri   )rj  rk  r  s   ` €rl   Úintegral_is_subclassz,integral_steps.<locals>.integral_is_subclass  s   ù€ õ	0ð %Ð$ro   )3r™  rš  rb  r  r  r^   r_   rD  r]   r   r  r  rg  r¸  r   r    r  r   rs  r   rv  r¤  r?  r  r   r]  r,   r¢  r9   r:   rA  rP   r$  r   r  rÚ  r  r_  rG  r`   Úpartial_fractions_ruleÚcancel_ruler!   rë  rŸ  Údistribute_expand_ruler/  Útrig_expand_ruler]  r=  ra  )re   r²  Úoptionsrœ  rú  rl  r­   r  s    `     @rl   rù  rù  Å  s&  ù€ ðZ ×!Ñ! 6¬<Ð"8Ó9€HØ”?Ñ"Ü˜8Ñ$Ð,ä 	¨6Ó2Ð2ô $ HÑ-×6Ñ6´|ÀVÓLØðð ð %)Œ˜Ñ!ä˜I vÓ.€Hôô%ð-ŒVÜÔ'Ó(Ü”&˜Ü”œ	¤*Ó-¬yÔ9JÓ/KÜ!Ô"2Ó3Ü!Ô"6Ó7ó9ô ”JÜ”Ü”Ü”œ	¤(Ó+¬YÔ7HÓ-IÜ!¤.Ó1´9Ô=QÓ3RÜ!Ô"2Ó3Ü!Ô"5Ó6ó8ô œÜ!¤9Ü”~ÜÔ(Ü Ô"6Ü”Mð!
ó ó 	ô$ 	Ü”iÓ Ü”oÓ&Ü”lÜÜ!ÜÙ(¬¬cÓ2Ü*ó,ô Ù(¬¬cÓ2Üó!ô Ù(¬¬cð -Ü+ò-äó ô Ù(¬¬cÓ2Ü*ó,ô *Ü ó#ó ô& ”iÑ 4´S¼#Ó >ÄÓPÓQÜÔ,Ó-ó/	
ô2 	ó[-ðZ  ó[-!€Fô\ 	˜Ð!Ø€Mro   c                ó¬  — t        | |«      j                  «       }t        j                  «        t	        |t
        «      r•t        |j                  «      dk(  r}|j                  d   d   }t	        |t        «      r[|j                  d   d   dk(  rF|j                  |j                  d   d   t        |j                  Ž f|j                  d   d   df«      }|S )a$  manualintegrate(f, var)

    Explanation
    ===========

    Compute indefinite integral of a single variable using an algorithm that
    resembles what a student would do by hand.

    Unlike :func:`~.integrate`, var can only be a single symbol.

    Examples
    ========

    >>> from sympy import sin, cos, tan, exp, log, integrate
    >>> from sympy.integrals.manualintegrate import manualintegrate
    >>> from sympy.abc import x
    >>> manualintegrate(1 / x, x)
    log(x)
    >>> integrate(1/x)
    log(x)
    >>> manualintegrate(log(x), x)
    x*log(x) - x
    >>> integrate(log(x))
    x*log(x) - x
    >>> manualintegrate(exp(x) / (1 + exp(2 * x)), x)
    atan(exp(x))
    >>> integrate(exp(x) / (1 + exp(2 * x)))
    RootSum(4*_z**2 + 1, Lambda(_i, _i*log(2*_i + exp(x))))
    >>> manualintegrate(cos(x)**4 * sin(x), x)
    -cos(x)**5/5
    >>> integrate(cos(x)**4 * sin(x), x)
    -cos(x)**5/5
    >>> manualintegrate(cos(x)**4 * sin(x)**3, x)
    cos(x)**7/7 - cos(x)**5/5
    >>> integrate(cos(x)**4 * sin(x)**3, x)
    cos(x)**7/7 - cos(x)**5/5
    >>> manualintegrate(tan(x), x)
    -log(cos(x))
    >>> integrate(tan(x), x)
    -log(cos(x))

    See Also
    ========

    sympy.integrals.integrals.integrate
    sympy.integrals.integrals.Integral.doit
    sympy.integrals.integrals.Integral
    r÷   r   rR   T)rù  rm   r›  Úclearr$  r+   r  r¹  r   rJ  r   )r¼  r)  r­   r6  s       rl   Úmanualintegratert  C  s·   € ôb ˜A˜sÓ#×(Ñ(Ó*€Fä×ÑÔä�&œ)Ô$¬¨V¯[©[Ó)9¸QÒ)>Ø�{‰{˜1‰~˜aÑ ˆÜ�dœBÔ F§K¡K°¡N°1Ñ$5¸Ò$=Ø—[‘[Ø—‘˜Q‘ Ñ"¤B¨¯	©	 NÐ3Ø—‘˜Q‘ Ñ" DÐ)ó+ˆFð €Mro   N)rH  rd   rI  rµ   rs   rd   )rú  r  )T)rs   z*tuple[Expr, Expr, Expr, Expr, Rule] | None)rú  ztuple[Expr, Symbol](  r}   Ú
__future__r   Útypingr   r   r   r   Úabcr   r	   Údataclassesr
   Úcollectionsr   Úcollections.abcr   Úsympy.core.addr   Úsympy.core.cacher   Úsympy.core.containersr   Úsympy.core.exprr   Úsympy.core.functionr   Úsympy.core.logicr   Úsympy.core.mulr   Úsympy.core.numbersr   r   r   Úsympy.core.powerr   Úsympy.core.relationalr   r   r   Úsympy.core.singletonr   Úsympy.core.symbolr   r   r   Ú$sympy.functions.elementary.complexesr   Ú&sympy.functions.elementary.exponentialr    r!   Ú%sympy.functions.elementary.hyperbolicr"   r#   r$   r%   r&   r'   r(   r)   Ú(sympy.functions.elementary.miscellaneousr*   Ú$sympy.functions.elementary.piecewiser+   Ú(sympy.functions.elementary.trigonometricr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   Ú'sympy.functions.special.delta_functionsr9   r:   Ú'sympy.functions.special.error_functionsr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   Ú'sympy.functions.special.gamma_functionsrE   Ú*sympy.functions.special.elliptic_integralsrF   rG   Ú#sympy.functions.special.polynomialsrH   rI   rJ   rK   rL   rM   rN   rO   rP   Ú&sympy.functions.special.zeta_functionsrQ   Ú	integralsrS   Úsympy.logic.boolalgrT   Úsympy.ntheory.factor_rU   Úsympy.polys.polytoolsrV   rW   rX   rY   Úsympy.simplify.radsimprZ   Úsympy.simplify.simplifyr[   Úsympy.solvers.solversr\   Úsympy.strategies.corer]   r^   r_   r`   Úsympy.utilities.iterablesra   Úsympy.utilities.miscrb   rd   r{   r   rƒ   r�   r”   r˜   r¦   r±   r»   rÅ   rÉ   rÍ   rÑ   rÔ   r×   rÚ   rÝ   rß   rã   ræ   ré   rì   rï   rò   rû   r  r  r  r!  r,  r1  r3  r<  rB  rH  rZ  r]  r`  rd  rh  rm  rp  rt  rw  r{  r~  r€  r†  rŠ  r�  r�  r“  r–  r›  r¡  r¤  r§  rª  r¯  r  rµ  rÉ  rë  rö  rý  r  r  r  r  r  r  r$  r%  ry   r;  r:  rD  rJ  r]  r  rs  rv  r“  rŸ  r¢  r¤  r¸  rg  r  rÚ  rà  rã  ræ  rè  rê  rî  rò  r  r  r  r  r  r  r  r   r  r  r!  r"  r(  r)  r&  r'  r  r#  r*  r-  r/  r=  r?  rA  rG  rm  rn  ro  rp  r]  r_  ra  rb  Úintr›  rš  rù  rt  ri   ro   rl   ú<module>rž     sY
  ðòõ. #ß 7Ó 7ß #Ý !Ý #Ý #å Ý $Ý &Ý  Ý *Ý &Ý ß 1Ñ 1Ý  ß 1Ñ 1Ý "ß 1Ñ 1Ý 4ß ;÷)÷ )ó )å 9Ý :÷F÷ F÷ Fõ Fç I÷(÷ (÷ (å >ß M÷÷ õ õ ;Ý Ý #Ý .ß BÓ BÝ +Ý ,Ý 'ß FÓ FÝ .Ý &ð ô
ˆ3ó 
ó ð
ð ô��só ó ðð ô.�:ó .ó ð.ð ô
1˜ó 
1ó ð
1ð ô	
�
ó 	
ó ð	
ð ô5�Jó 5ó ð5ð ôNˆdó Nó ðNð ô1ˆDó 1ó ð1ð& ôT�ó Tó ðTð" ôQ�dó Qó ðQð" ô	ˆz˜3ó 	ó ð	ð ô#ˆhó #ó ð#ð ô"ˆhó "ó ð"ð ô"�ó "ó ð"ð ô#�ó #ó ð#ð ô"ˆxó "ó ð"ð ô#ˆxó #ó ð#ð ô	�Z ó 	ó ð	ð ô#ˆ~ó #ó ð#ð ô#ˆ~ó #ó ð#ð ô/ˆjó /ó ð/ð ô�Zó ó ðð ô#�ó #ó ð#ð ô$�*ó $ó ð$ð ôA *ó Aó ðAð ô F˜Zó  Fó ð FðF ô˜
ó ó ðð ôR�dó Ró ðRð ô�4ó ó ðð ô	@�Zó 	@ó ð	@ð ô	1�$ó 	1ó ð	1ð ô	˜ó 	ó ð	ð
 ôU�Dó Uó ðUð ô1�Dó 1ó ð1ð" ô	(�Zó 	(ó ð	(ð ô/1˜4ó /1ó ð/1ðd ô3�ó 3ó ð3ð ô˜ Só ó ðð ô	:Ð#ó 	:ó ð	:ð ôÐ'ó ó ðð ôÐ'ó ó ðð ôÐ'ó ó ðð ôBÐ%ó Bó ðBð ô-Ð$ó -ó ð-ð ô3Ð%ó 3ó ð3ð ôFÐ*ó Fó ðFð ôˆJ˜ó ó ðð
 ô/ˆUó /ó ð/ð ô3ˆeó 3ó ð3ð ôˆUó ó ðð ô/ˆUó /ó ð/ð ô3ˆeó 3ó ð3ð ôˆUó ó ðð ô.ˆjó .ó ð.ð" ô	F�:ó 	Fó ð	Fð ô	F�:ó 	Fó ð	Fð ô;�*ó ;ó ð;ð ô?�Zó ?ó ð?ð ôE�Jó Eó ðEð ôE�Jó Eó ðEô�:ô ò
ò20ðB   d¨D°$¸Ð=Ð òUònòòòò0#òò*@òjð2 OQÐ ÐKÓ PØ	€Ù
�‹*€ò(?óVVó2MôjIIòXLóMó\ò~<ò~Xó8-òJóZ)ôX@MóF3ð6 	ñó 	ðð 	ñó 	ðð 	ñó 	ðð 	ñó 	ðð 	ñó 	ðòò
ñ $ñ*ó+Ð ñ  ñOóP€ñ "Ñ"NÓOÐ áñ8ó9€ñ
 "Ñ"NÓOÐ áñ8ó9€ñ
 #Ñ#PÓQÐ Ùñ9ó:€ñ
 "Ñ"CÓDÐ Ùñ:ó;€ñ
 #Ñ#MÓNÐ ÙÙ9ó;€ñ #Ñ#PÓQÐ Ùñ9ó:€ñ
 "Ñ"CÓDÐ Ùñ9ó:€ò
"ò""ò*"ò*>ò<ò:GóxMôMó,0ñf "Ù>Ù5ó7Ñ ñ ñ #Ù0ó	2�ñ "ñuá0ó2Ñ ñ
 ñNá9ó	;Ñ ó'ó\ó#ð ,.�Ð(Ó -Ù"-©cÓ"2��Ó 2Ù�S‹z�ó{ô|;ro   