§
    OŠtjÉ' ã                  ó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dûS (  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                  óT   — e Zd ZU ded<   ded<   ed
d„¦   «         Zedd„¦   «         Zd	S )ÚRuler   Ú	integrandr   ÚvariableÚreturnc                ó   — d S ©N© ©Úselfs    ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/integrals/manualintegrate.pyÚevalz	Rule.evalM   ó   € àˆó    Úboolc                ó   — d S rj   rk   rl   s    rn   Úcontains_dont_knowzRule.contains_dont_knowQ   rp   rq   N©rh   r   ©rh   rr   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r	   ro   rt   rk   rq   rn   re   re   H   si   € € € € € € à€O€O�OØÐÐÑàðð ð ñ „^ðð ðð ð ñ „^ðð ð rq   re   c                  ó   — e Zd ZdZdd„ZdS )Ú
AtomicRulez1A simple rule that does not depend on other rulesrh   rr   c                ó   — dS )NFrk   rl   s    rn   rt   zAtomicRule.contains_dont_knowY   s   € Øˆurq   Nrv   )rw   rx   ry   Ú__doc__rt   rk   rq   rn   r|   r|   V   s.   € € € € € à;Ð;ðð ð ð ð ð rq   r|   c                  ó   — e Zd ZdZdd„ZdS )ÚConstantRulezintegrate(a, x)  ->  a*xrh   r   c                ó    — | j         | j        z  S rj   )rf   rg   rl   s    rn   ro   zConstantRule.eval`   s   € ØŒ~ ¤Ñ-Ð-rq   Nru   ©rw   rx   ry   r~   ro   rk   rq   rn   r€   r€   ]   s.   € € € € € à"Ð"ð.ð .ð .ð .ð .ð .rq   r€   c                  óB   — e Zd ZU dZded<   ded<   ded<   dd„Zdd
„ZdS )ÚConstantTimesRulez.integrate(a*f(x), x)  ->  a*integrate(f(x), x)r   ÚconstantÚotherre   Úsubsteprh   c                óD   — | j         | j                             ¦   «         z  S rj   )r…   r‡   ro   rl   s    rn   ro   zConstantTimesRule.evalk   s   € ØŒ}˜tœ|×0Ò0Ñ2Ô2Ñ2Ð2rq   rr   c                ó4   — | j                              ¦   «         S rj   ©r‡   rt   rl   s    rn   rt   z$ConstantTimesRule.contains_dont_known   ó   € ØŒ|×.Ò.Ñ0Ô0Ð0rq   Nru   rv   ©rw   rx   ry   r~   rz   ro   rt   rk   rq   rn   r„   r„   d   s_   € € € € € € à8Ð8Ø€N€N�NØ€K€K�KØ€M€M�Mð3ð 3ð 3ð 3ð1ð 1ð 1ð 1ð 1ð 1rq   r„   c                  ó0   — e Zd ZU dZded<   ded<   dd„ZdS )	Ú	PowerRulezintegrate(x**a, x)r   Úbaser    rh   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!   rl   s    rn   ro   zPowerRule.evalx   sP   € ÝØŒi˜$œ( Q™,Ñ'¨$¬(°Q©,Ñ7½¸D¼HÀbÑ9IÔ9IÐJÝ�”‰^Œ^˜TÐ"ñ
ô 
ð 	
rq   Nru   ©rw   rx   ry   r~   rz   ro   rk   rq   rn   rŽ   rŽ   r   sB   € € € € € € àÐØ€J€J�JØ€I€I�Ið
ð 
ð 
ð 
ð 
ð 
rq   rŽ   c                  ó0   — e Zd ZU dZded<   ded<   dd„ZdS )	ÚNestedPowRulezintegrate((x**a)**b, x)r   r�   r    rh   c                ó®   — | j         | j        z  }t          || j        dz   z  t	          | j        d¦  «        f|t          | j         ¦  «        z  df¦  «        S r‘   )r�   rf   r+   r    r   r!   )rm   Úms     rn   ro   zNestedPowRule.eval…   sU   € ØŒI˜œÑ&ˆÝ˜!˜tœx¨!™|Ñ,­b°´¸2Ñ.>Ô.>Ð?Ø�c $¤)™nœnÑ,¨dÐ3ñ5ô 5ð 	5rq   Nru   r“   rk   rq   rn   r•   r•      sB   € € € € € € à!Ð!Ø€J€J�JØ€I€I�Ið5ð 5ð 5ð 5ð 5ð 5rq   r•   c                  ó.   — e Zd ZU dZded<   d
d„Zdd„Zd	S )ÚAddRulezDintegrate(f(x) + g(x), x) -> integrate(f(x), x) + integrate(g(x), x)ú
list[Rule]Úsubstepsrh   r   c                ó2   — t          d„ | j        D ¦   «         Ž S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rj   ©ro   ©Ú.0r‡   s     rn   ú	<genexpr>zAddRule.eval.<locals>.<genexpr>‘   s*   è è € ÐAÐA¨�W—\’\‘^”^ÐAÐAÐAÐAÐAÐArq   )r   r›   rl   s    rn   ro   zAddRule.eval�   s   € ÝÐAÐA°4´=ÐAÑAÔAÐBÐBrq   rr   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rj   ©rt   rŸ   s     rn   r¡   z-AddRule.contains_dont_know.<locals>.<genexpr>”   s.   è è € ÐMÐM°G�7×-Ò-Ñ/Ô/ÐMÐMÐMÐMÐMÐMrq   )Úanyr›   rl   s    rn   rt   zAddRule.contains_dont_know“   s!   € ÝÐMÐM¸t¼}ÐMÑMÔMÑMÔMÐMrq   Nru   rv   rŒ   rk   rq   rn   r™   r™   ‹   sZ   € € € € € € àNÐNØÐÐÑðCð Cð Cð CðNð Nð Nð Nð Nð Nrq   r™   c                  óB   — e Zd ZU dZded<   ded<   ded<   dd	„Zdd„ZdS )ÚURulez;integrate(f(g(x))*g'(x), x) -> integrate(f(u), u), u = g(x)r   Úu_varr   Úu_funcre   r‡   rh   c                ó<  — | j                              ¦   «         }| j        j        rX| j                             ¦   «         \  }}|dk    r6|                     t          | j        ¦  «        t          |¦  «         ¦  «        }|                     | j        | j        ¦  «        S )Nr’   )r‡   ro   r©   Úis_PowÚas_base_expÚsubsr!   r¨   )rm   Úresultr�   Úexp_s       rn   ro   z
URule.evalž   s~   € Ø”×"Ò"Ñ$Ô$ˆØŒ;Ôð 	BØœ×0Ò0Ñ2Ô2‰JˆD�$Ø�rŠzˆzàŸš¥S¨¬¡_¤_µs¸4±y´y°jÑAÔA�Ø�{Š{˜4œ: t¤{Ñ3Ô3Ð3rq   rr   c                ó4   — | j                              ¦   «         S rj   rŠ   rl   s    rn   rt   zURule.contains_dont_know§   r‹   rq   Nru   rv   rŒ   rk   rq   rn   r§   r§   —   s_   € € € € € € àEÐEØ€M€M�MØ€L€L�LØ€M€M�Mð4ð 4ð 4ð 4ð1ð 1ð 1ð 1ð 1ð 1rq   r§   c                  óL   — 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dS )Ú	PartsRulez@integrate(u(x)*v'(x), x) -> u(x)*v(x) - integrate(u'(x)*v(x), x)r   Úur   Údvre   Úv_stepúRule | NoneÚsecond_steprh   c                óŽ   — | j         €J ‚| j                             ¦   «         }| j        |z  | j                              ¦   «         z
  S rj   )r·   rµ   ro   r³   )rm   Úvs     rn   ro   zPartsRule.eval³   sD   € ØÔÐ+Ð+Ð+ØŒK×ÒÑÔˆØŒv˜‰z˜DÔ,×1Ò1Ñ3Ô3Ñ3Ð3rq   rr   c                óx   — | j                              ¦   «         p!| j        d uo| j                             ¦   «         S rj   )rµ   rt   r·   rl   s    rn   rt   zPartsRule.contains_dont_know¸   s>   € ØŒ{×-Ò-Ñ/Ô/ð TØÔ DÐ(ÐR¨TÔ-=×-PÒ-PÑ-RÔ-Rð	Trq   Nru   rv   rŒ   rk   rq   rn   r²   r²   «   sq   € € € € € € àJÐJØ€I€I�IØ€H€H�HØ€L€L�LØÐÐÑð4ð 4ð 4ð 4ð
Tð Tð Tð Tð Tð Trq   r²   c                  ó8   — e Zd ZU dZded<   ded<   dd„Zdd	„Zd
S )ÚCyclicPartsRulez9Apply PartsRule multiple times to integrate exp(x)*sin(x)zlist[PartsRule]Úparts_rulesr   Úcoefficientrh   c                ó¾   — g }d}| j         D ]>}|                     ||j        z  |j                             ¦   «         z  ¦  «         |dz  }Œ?t          |Ž d| j        z
  z  S )NrR   r’   )r½   Úappendr³   rµ   ro   r   r¾   )rm   r®   ÚsignÚrules       rn   ro   zCyclicPartsRule.evalÃ   sk   € ØˆØˆØÔ$ð 	ð 	ˆDØ�MŠM˜$ ¤™-¨$¬+×*:Ò*:Ñ*<Ô*<Ñ<Ñ=Ô=Ð=Ø�B‰JˆDˆDÝ�Fˆ|˜q 4Ô#3Ñ3Ñ4Ð4rq   rr   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rj   r¤   rŸ   s     rn   r¡   z5CyclicPartsRule.contains_dont_know.<locals>.<genexpr>Ì   s.   è è € ÐPÐP°G�7×-Ò-Ñ/Ô/ÐPÐPÐPÐPÐPÐPrq   )r¥   r½   rl   s    rn   rt   z"CyclicPartsRule.contains_dont_knowË   s"   € ÝÐPÐP¸tÔ?OÐPÑPÔPÑPÔPÐPrq   Nru   rv   rŒ   rk   rq   rn   r¼   r¼   ½   sb   € € € € € € àCÐCØ Ð Ð Ñ ØÐÐÑð5ð 5ð 5ð 5ðQð Qð Qð Qð Qð Qrq   r¼   c                  ó   — e Zd ZdS )ÚTrigRuleN©rw   rx   ry   rk   rq   rn   rÆ   rÆ   Ï   ó   € € € € € à€Drq   rÆ   c                  ó   — e Zd ZdZdd„ZdS )ÚSinRulezintegrate(sin(x), x) -> -cos(x)rh   r   c                ó,   — t          | j        ¦  «         S rj   )r-   rg   rl   s    rn   ro   zSinRule.eval×   ó   € Ý�D”MÑ"Ô"Ð"Ð"rq   Nru   r‚   rk   rq   rn   rÊ   rÊ   Ô   s.   € € € € € à)Ð)ð#ð #ð #ð #ð #ð #rq   rÊ   c                  ó   — e Zd ZdZdd„ZdS )ÚCosRulezintegrate(cos(x), x) -> sin(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r.   rg   rl   s    rn   ro   zCosRule.evalÞ   ó   € Ý�4”=Ñ!Ô!Ð!rq   Nru   r‚   rk   rq   rn   rÎ   rÎ   Û   s.   € € € € € à(Ð(ð"ð "ð "ð "ð "ð "rq   rÎ   c                  ó   — e Zd ZdZdd„ZdS )Ú
SecTanRulez%integrate(sec(x)*tan(x), x) -> sec(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r2   rg   rl   s    rn   ro   zSecTanRule.evalå   rÐ   rq   Nru   r‚   rk   rq   rn   rÒ   rÒ   â   s.   € € € € € à/Ð/ð"ð "ð "ð "ð "ð "rq   rÒ   c                  ó   — e Zd ZdZdd„ZdS )Ú
CscCotRulez&integrate(csc(x)*cot(x), x) -> -csc(x)rh   r   c                ó,   — t          | j        ¦  «         S rj   )r1   rg   rl   s    rn   ro   zCscCotRule.evalì   rÌ   rq   Nru   r‚   rk   rq   rn   rÕ   rÕ   é   s.   € € € € € à0Ð0ð#ð #ð #ð #ð #ð #rq   rÕ   c                  ó   — e Zd ZdZdd„ZdS )ÚSec2Rulez!integrate(sec(x)**2, x) -> tan(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r/   rg   rl   s    rn   ro   zSec2Rule.evaló   rÐ   rq   Nru   r‚   rk   rq   rn   rØ   rØ   ð   s.   € € € € € à+Ð+ð"ð "ð "ð "ð "ð "rq   rØ   c                  ó   — e Zd ZdZdd„ZdS )ÚCsc2Rulez"integrate(csc(x)**2, x) -> -cot(x)rh   r   c                ó,   — t          | j        ¦  «         S rj   )r0   rg   rl   s    rn   ro   zCsc2Rule.evalú   rÌ   rq   Nru   r‚   rk   rq   rn   rÛ   rÛ   ÷   s.   € € € € € à,Ð,ð#ð #ð #ð #ð #ð #rq   rÛ   c                  ó   — e Zd ZdS )ÚHyperbolicRuleNrÇ   rk   rq   rn   rÞ   rÞ   þ   rÈ   rq   rÞ   c                  ó   — e Zd ZdZdd„ZdS )ÚSinhRulez integrate(sinh(x), x) -> cosh(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r$   rg   rl   s    rn   ro   zSinhRule.eval  ó   € Ý�D”MÑ"Ô"Ð"rq   Nru   r‚   rk   rq   rn   rà   rà     s.   € € € € € à*Ð*ð#ð #ð #ð #ð #ð #rq   rà   c                  ó   — e Zd ZdZd„ ZdS )ÚCoshRulez integrate(cosh(x), x) -> sinh(x)c                ó*   — t          | j        ¦  «        S rj   )r'   rg   rl   s    rn   ro   zCoshRule.eval  râ   rq   Nr‚   rk   rq   rn   rä   rä   
  s)   € € € € € à*Ð*ð#ð #ð #ð #ð #rq   rä   c                  ó0   — e Zd ZU dZded<   ded<   dd„ZdS )	ÚExpRulez integrate(a**x, x) -> a**x/ln(a)r   r�   r    rh   c                ó:   — | j         t          | j        ¦  «        z  S rj   )rf   r!   r�   rl   s    rn   ro   zExpRule.eval  s   € ØŒ~¥ D¤I¡¤Ñ.Ð.rq   Nru   r“   rk   rq   rn   rç   rç     sB   € € € € € € à*Ð*Ø€J€J�JØ€I€I�Ið/ð /ð /ð /ð /ð /rq   rç   c                  ó&   — e Zd ZU dZded<   dd„ZdS )ÚReciprocalRulezintegrate(1/x, x) -> ln(x)r   r�   rh   c                ó*   — t          | j        ¦  «        S rj   )r!   r�   rl   s    rn   ro   zReciprocalRule.eval   s   € Ý�4”9‰~Œ~Ðrq   Nru   r“   rk   rq   rn   rê   rê     s9   € € € € € € à$Ð$Ø€J€J�Jðð ð ð ð ð rq   rê   c                  ó   — e Zd ZdZdd„ZdS )Ú
ArcsinRulez'integrate(1/sqrt(1-x**2), x) -> asin(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r4   rg   rl   s    rn   ro   zArcsinRule.eval'  râ   rq   Nru   r‚   rk   rq   rn   rí   rí   $  s.   € € € € € à1Ð1ð#ð #ð #ð #ð #ð #rq   rí   c                  ó   — e Zd ZdZdd„ZdS )ÚArcsinhRulez'integrate(1/sqrt(1+x**2), x) -> asin(x)rh   r   c                ó*   — t          | j        ¦  «        S rj   )r)   rg   rl   s    rn   ro   zArcsinhRule.eval.  s   € Ý�T”]Ñ#Ô#Ð#rq   Nru   r‚   rk   rq   rn   rð   rð   +  s.   € € € € € à1Ð1ð$ð $ð $ð $ð $ð $rq   rð   c                  ó:   — e Zd ZU dZded<   ded<   ded<   d	d„ZdS )
Ú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Úcrh   c           	     óô   — | 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ö   rg   r!   r*   ©rm   rô   rõ   rö   Úxs        rn   ro   z ReciprocalSqrtQuadraticRule.eval9  sv   € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�Ý�1•T˜!‘W”W‘9�T ! A a¡C¡%¨¨!¨Q©$©¡,Ñ/Ô/Ñ/°Ñ1°!°A±#°a±%Ñ7Ñ8Ô8½¸a¹¼Ñ@Ð@rq   Nru   r“   rk   rq   rn   ró   ró   2  sQ   € € € € € € àaÐaØ€G€G�GØ€G€G�GØ€G€G�GðAð Að Að Að Að Arq   ró   c                  óD   — e Zd ZU dZded<   ded<   ded<   ded<   dd	„Zd
S )ÚSqrtQuadraticDenomRulez(integrate(poly(x)/sqrt(a+b*x+c*x**2), x)r   rô   rõ   rö   z
list[Expr]Úcoeffsrh   c           	     óN  ‡‡‡— | j         | j        | j        | j                             ¦   «         | j        f\  }}}ŠŠg Š‰                     ¦   «         Št          t          ‰¦  «        dz
  ¦  «        D ]x}t          ‰¦  «        dz
  |z
  }‰|         ||z  z  }‰                     |¦  «         ‰|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<   Œy‰d         ‰d         }}t          ||‰z  z   |‰dz  z  z   ¦  «        }	|||z  d|z  z  z
  }
|
dk    rd}n9t          t          d|	z  ‰¦  «        d¬¦  «        }|
|                     ¦   «         z  }t          g ˆˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         ¢||z  ‘R Ž |	z  |z   S )	Nrø   rR   r’   éþÿÿÿr   F©Ú
degeneratec              3  óZ   •K  — | ]%}‰|         ‰t          ‰¦  «        d z
  |z
  z  z  V — Œ&dS )rø   N)Úlen)r    Úirý   Úresult_coeffsrú   s     €€€rn   r¡   z.SqrtQuadraticDenomRule.eval.<locals>.<genexpr>^  sT   øè è € ð 9ð 9Øð # 1Ô% a­#¨f©+¬+°a©-¸©/Ñ&:Ñ:ð 9ð 9ð 9ð 9ð 9ð 9rq   )rô   rõ   rö   rý   Úcopyrg   Úranger  rÀ   r*   Úinverse_trig_ruleÚIntegralInforo   r   )rm   rô   rõ   rö   r  ÚnÚcoeffÚdÚeÚsr…   ÚI0Ústeprý   r  rú   s                @@@rn   ro   zSqrtQuadraticDenomRule.evalF  sþ  øøø€ Ø!œV T¤V¨T¬V°T´[×5EÒ5EÑ5GÔ5GÈÌÐVÑˆˆ1ˆa�˜ð ˆØ—’‘”ˆÝ•s˜6‘{”{ 1‘}Ñ%Ô%ð 	)ð 	)ˆAÝ�F‘”˜A‘˜a‘ˆAØ˜1”I˜q ™s‘OˆEØ× Ò  Ñ'Ô'Ð'Ø�1�Q‘3ˆKˆKŒK˜A˜a™C ™E 1™9 Q™; uÑ,Ñ,ˆKˆK‰KØ�1�Q‘3ˆKˆKŒK˜A˜a™C ™7 5™=Ñ(ˆKˆK‰KˆKØ�bŒz˜6 "œ:ˆ1ˆÝ��1�Q‘3‘�q˜˜A™‘v‘ÑÔˆØ�Q�q‘S˜!˜A™#‘Y‘;ˆØ�qŠ=ˆ=ØˆBˆBå$¥\°!°A±#°qÑ%9Ô%9ÀeÐLÑLÔLˆDØ˜$Ÿ)š)™+œ+Ñ%ˆBÝð ?ð 9ð 9ð 9ð 9ð 9ð 9Ý#¥C¨Ñ$6Ô$6Ñ7Ô7ð9ñ 9ô 9ð ?Ø:;¸A¹#ð?ð ?ð ?Ø?@ñAØCEñFð 	Frq   Nru   r“   rk   rq   rn   rü   rü   >  s]   € € € € € € à2Ð2Ø€G€G�GØ€G€G�GØ€G€G�GØÐÐÑðFð Fð Fð Fð Fð Frq   rü   c                  ó:   — e Zd ZU dZded<   ded<   ded<   d	d„ZdS )
ÚSqrtQuadraticRulez integrate(sqrt(a+b*x+c*x**2), x)r   rô   rõ   rö   rh   c                ó|   — t          t          | j        | j        ¦  «        d¬¦  «        }|                     ¦   «         S )NFr   )Úsqrt_quadratic_ruler	  rf   rg   ro   )rm   r  s     rn   ro   zSqrtQuadraticRule.evali  s1   € Ý"¥<°´ÀÄÑ#NÔ#NÐ[`ÐaÑaÔaˆØ�yŠy‰{Œ{Ðrq   Nru   r“   rk   rq   rn   r  r  b  sK   € € € € € € à*Ð*Ø€G€G�GØ€G€G�GØ€G€G�Gðð ð ð ð ð rq   r  c                  ó.   — e Zd ZU dZded<   d
d„Zdd„Zd	S )ÚAlternativeRulez Multiple ways to do integration.rš   Úalternativesrh   r   c                ó@   — | j         d                              ¦   «         S ©Nr   )r  ro   rl   s    rn   ro   zAlternativeRule.evals  s   € ØÔ  Ô#×(Ò(Ñ*Ô*Ð*rq   rr   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rj   r¤   rŸ   s     rn   r¡   z5AlternativeRule.contains_dont_know.<locals>.<genexpr>w  s.   è è € ÐQÐQ°G�7×-Ò-Ñ/Ô/ÐQÐQÐQÐQÐQÐQrq   )r¥   r  rl   s    rn   rt   z"AlternativeRule.contains_dont_knowv  s"   € ÝÐQÐQ¸tÔ?PÐQÑQÔQÑQÔQÐQrq   Nru   rv   rŒ   rk   rq   rn   r  r  n  sV   € € € € € € à*Ð*ØÐÐÑð+ð +ð +ð +ðRð Rð Rð Rð Rð Rrq   r  c                  ó"   — e Zd ZdZdd„Zd	d„ZdS )
ÚDontKnowRulezLeave the integral as is.rh   r   c                ó6   — t          | j        | j        ¦  «        S rj   )rS   rf   rg   rl   s    rn   ro   zDontKnowRule.eval}  s   € Ý˜œ¨¬Ñ6Ô6Ð6rq   rr   c                ó   — dS ©NTrk   rl   s    rn   rt   zDontKnowRule.contains_dont_know€  s   € Øˆtrq   Nru   rv   )rw   rx   ry   r~   ro   rt   rk   rq   rn   r  r  z  sB   € € € € € à#Ð#ð7ð 7ð 7ð 7ðð ð ð ð ð rq   r  c                  ó   — e Zd ZdZdd„ZdS )ÚDerivativeRulezintegrate(f'(x), x) -> f(x)rh   r   c                óø   — t          | j        t          ¦  «        sJ ‚t          | j        j        ¦  «        }t          |¦  «        D ]\  }\  }}|| j        k    r||dz
  f||<    nŒ t          | j        j        g|¢R Ž S ©NrR   )Ú
isinstancerf   r   ÚlistÚvariable_countÚ	enumeraterg   Úexpr)rm   r'  r  ÚvarÚcounts        rn   ro   zDerivativeRule.eval‡  s’   € Ý˜$œ.­*Ñ5Ô5Ð5Ð5Ð5Ý˜dœnÔ;Ñ<Ô<ˆÝ(¨Ñ8Ô8ð 	ð 	‰OˆA‰|��UØ�d”mÒ#Ð#Ø%(¨%°!©)Ð$4�˜qÑ!Ø�ð $õ ˜$œ.Ô-Ð?°Ð?Ð?Ð?Ð?rq   Nru   r‚   rk   rq   rn   r"  r"  „  s4   € € € € € à%Ð%ð@ð @ð @ð @ð @ð @rq   r"  c                  ó8   — e Zd ZU dZded<   ded<   dd„Zdd	„Zd
S )ÚRewriteRulez;Rewrite integrand to another form that is easier to handle.r   Ú	rewrittenre   r‡   rh   c                ó4   — | j                              ¦   «         S rj   )r‡   ro   rl   s    rn   ro   zRewriteRule.eval—  s   € ØŒ|× Ò Ñ"Ô"Ð"rq   rr   c                ó4   — | j                              ¦   «         S rj   rŠ   rl   s    rn   rt   zRewriteRule.contains_dont_knowš  r‹   rq   Nru   rv   rŒ   rk   rq   rn   r-  r-  ‘  sV   € € € € € € àEÐEØ€O€O�OØ€M€M�Mð#ð #ð #ð #ð1ð 1ð 1ð 1ð 1ð 1rq   r-  c                  ó   — e Zd ZdZdS )ÚCompleteSquareRulez7Rewrite a+b*x+c*x**2 to a-b**2/(4*c) + c*(x+b/(2*c))**2N)rw   rx   ry   r~   rk   rq   rn   r2  r2  ž  s   € € € € € àAÐAØ€Drq   r2  c                  ó*   — e Zd ZU ded<   d	d„Zd
d„ZdS )ÚPiecewiseRulez%Sequence[tuple[Rule, bool | Boolean]]Úsubfunctionsrh   r   c                ó2   — t          d„ | j        D ¦   «         Ž S )Nc                ó@   — g | ]\  }}|                      ¦   «         |f‘ŒS rk   rž   )r    r‡   Úconds      rn   ú
<listcomp>z&PiecewiseRule.eval.<locals>.<listcomp>©  s?   € ð Cð Cð CÙ,˜w¨ð $ŸLšL™NœN¨DÐ1ð Cð Cð Crq   )r+   r5  rl   s    rn   ro   zPiecewiseRule.eval¨  s5   € Ýð Cð CØ04Ô0AðCñ Cô Cð Dð 	Drq   rr   c                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  óD   K  — | ]\  }}|                      ¦   «         V — Œd S rj   r¤   )r    r‡   Ú_s      rn   r¡   z3PiecewiseRule.contains_dont_know.<locals>.<genexpr>­  s2   è è € ÐTÐT±J°G¸Q�7×-Ò-Ñ/Ô/ÐTÐTÐTÐTÐTÐTrq   )r¥   r5  rl   s    rn   rt   z PiecewiseRule.contains_dont_know¬  s"   € ÝÐTÐTÀ$ÔBSÐTÑTÔTÑTÔTÐTrq   Nru   rv   ©rw   rx   ry   rz   ro   rt   rk   rq   rn   r4  r4  ¤  sT   € € € € € € à7Ð7Ð7Ñ7ðDð Dð Dð DðUð Uð Uð Uð Uð Urq   r4  c                  ó>   — e Zd ZU ded<   ded<   ded<   dd„Zdd	„Zd
S )ÚHeavisideRuler   ÚhargÚibndre   r‡   rh   c                ó¤   — | j                              ¦   «         }t          | j        ¦  «        ||                     | j        | j        ¦  «        z
  z  S rj   )r‡   ro   r9   r@  r­   rg   rA  )rm   r®   s     rn   ro   zHeavisideRule.eval¶  sC   € ð
 ”×"Ò"Ñ$Ô$ˆÝ˜œÑ#Ô# v°·²¸D¼MÈ4Ì9Ñ0UÔ0UÑ'UÑVÐVrq   rr   c                ó4   — | j                              ¦   «         S rj   rŠ   rl   s    rn   rt   z HeavisideRule.contains_dont_know¾  r‹   rq   Nru   rv   r=  rk   rq   rn   r?  r?  °  s]   € € € € € € à€J€J�JØ€J€J�JØ€M€M�MðWð Wð Wð Wð1ð 1ð 1ð 1ð 1ð 1rq   r?  c                  ó6   — e Zd ZU ded<   ded<   ded<   dd„ZdS )	ÚDiracDeltaRuler   r
  rô   rõ   rh   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õ   rg   r9   r:   ©rm   r
  rô   rõ   rú   s        rn   ro   zDiracDeltaRule.evalÈ  se   € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�Ø�Š6ˆ6Ý˜Q˜q ™s™UÑ#Ô# AÑ%Ð%Ý˜!˜A˜a™C™%  1¡Ñ%Ô% aÑ'Ð'rq   Nru   ©rw   rx   ry   rz   ro   rk   rq   rn   rE  rE  Â  sE   € € € € € € à€G€G�GØ€G€G�GØ€G€G�Gð(ð (ð (ð (ð (ð (rq   rE  c                  óR   — 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dS )ÚTrigSubstitutionRuler   ÚthetaÚfuncr.  re   r‡   zbool | BooleanÚrestrictionrh   c                ó  — | j         | j        | j        }}}|                     t	          |¦  «        dt          |¦  «        z  ¦  «        }|                     t          |¦  «        dt          |¦  «        z  ¦  «        }|                     t          |¦  «        dt          |¦  «        z  ¦  «        }t          |                     t          ¦  «        ¦  «        }t          |¦  «        dk    sJ ‚|d         }t          ||z
  |¦  «        }t          |¦  «        dk    sJ ‚t          |d         ¦  «        \  }}t!          |t          ¦  «        r2|}|}	t#          |dz  |dz  z
  ¦  «        }
t%          |d         ¦  «        }nxt!          |t
          ¦  «        r2|}
|}	t#          |dz  |dz  z
  ¦  «        }t'          |d         ¦  «        }n1|}|}
t#          |dz  |dz  z   ¦  «        }	t)          |d         ¦  «        }t          |¦  «        ||	z  ft          |¦  «        |
|	z  ft          |¦  «        ||
z  f||fg}t+          | j                             ¦   «                              |¦  «                             ¦   «         | j        f¦  «        S )NrR   r   rø   )rL  rM  rg   r­   r2   r-   r1   r.   r0   r/   r&  Úfindr,   r  r]   rZ   r%  r*   r4   r3   r5   r+   r‡   ro   ÚtrigsimprN  )rm   rL  rM  rú   Útrig_functionÚrelationÚnumerÚdenomÚoppositeÚ
hypotenuseÚadjacentÚinverseÚsubstitutions                rn   ro   zTrigSubstitutionRule.eval×  sR  € Øœ T¤Y°´�QˆtˆØ�yŠy�˜U™œ Q¥s¨5¡z¤z¡\Ñ2Ô2ˆØ�yŠy�˜U™œ Q¥s¨5¡z¤z¡\Ñ2Ô2ˆØ�yŠy�˜U™œ Q¥s¨5¡z¤z¡\Ñ2Ô2ˆå˜TŸYšYÕ'<Ñ=Ô=Ñ>Ô>ˆÝ�=Ñ!Ô! QÒ&Ð&Ð&Ð&Ø% aÔ(ˆÝ˜˜T™ =Ñ1Ô1ˆÝ�8‰}Œ} Ò!Ð!Ð!Ð!Ý ¨¤Ñ,Ô,‰ˆˆuå�m¥SÑ)Ô)ð 	(ØˆHØˆJÝ˜E 1™H u¨a¡xÑ/Ñ0Ô0ˆHÝ˜8 Aœ;Ñ'Ô'ˆGˆGÝ˜¥sÑ+Ô+ð 		(ØˆHØˆJÝ˜E 1™H u¨a¡xÑ/Ñ0Ô0ˆHÝ˜8 Aœ;Ñ'Ô'ˆGˆGàˆHØˆHÝ˜e Q™h¨°©Ñ1Ñ2Ô2ˆJÝ˜8 Aœ;Ñ'Ô'ˆGõ �‰ZŒZ˜ *Ñ,Ð-Ý�‰ZŒZ˜ *Ñ,Ð-Ý�‰ZŒZ˜ (Ñ*Ð+Ø�GÐð	
ˆõ Ø”×"Ò"Ñ$Ô$×)Ò)¨,Ñ7Ô7×@Ò@ÑBÔBÀDÔDTÐUñ
ô 
ð 	
rq   rr   c                ó4   — | j                              ¦   «         S rj   rŠ   rl   s    rn   rt   z'TrigSubstitutionRule.contains_dont_knowþ  r‹   rq   Nru   rv   r=  rk   rq   rn   rK  rK  Ï  so   € € € € € € à€K€K�KØ€J€J�JØ€O€O�OØ€M€M�MØÐÐÑð%
ð %
ð %
ð %
ðN1ð 1ð 1ð 1ð 1ð 1rq   rK  c                  ó:   — e Zd ZU dZded<   ded<   ded<   d	d„ZdS )
Ú
ArctanRulezAintegrate(a/(b*x**2+c), x) -> a/b / sqrt(c/b) * atan(x/sqrt(c/b))r   rô   rõ   rö   rh   c                ó¶   — | j         | j        | j        | j        f\  }}}}||z  t	          ||z  ¦  «        z  t          |t	          ||z  ¦  «        z  ¦  «        z  S rj   )rô   rõ   rö   rg   r*   r5   rù   s        rn   ro   zArctanRule.eval	  sS   € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�Ø�‰s•T˜!˜A™#‘Y”Y‰¥ a­¨Q¨q©S©	¬	¡kÑ!2Ô!2Ñ2Ð2rq   Nru   r“   rk   rq   rn   r]  r]    sK   € € € € € € àKÐKØ€G€G�GØ€G€G�GØ€G€G�Gð3ð 3ð 3ð 3ð 3ð 3rq   r]  c                  ó   — e Zd ZU ded<   dS )ÚOrthogonalPolyRuler   r
  N©rw   rx   ry   rz   rk   rq   rn   r`  r`    s   € € € € € € à€G€G�G€G€Grq   r`  c                  ó,   — e Zd ZU ded<   ded<   dd„ZdS )Ú
JacobiRuler   rô   rõ   rh   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õ   rg   r+   rO   r   r   rH  s        rn   ro   zJacobiRule.eval  s¾   € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�ÝØ�v�a˜!‘e˜Q ™U A¨¡E¨1Ñ-Ô-Ñ-¨q°1©u°q©yÑ9½2¸aÀ!¹eÀa¹iÈÑ;KÔ;KÐLØ•�1�a‘”ˆMØ�!‰e�a‰i˜˜A™Ñ˜aÑ 1 q¡5¨!¡)¨A¡+Ñ-­r°!°Q©x¬xÐ8ñ:ô :ð 	:rq   Nru   rI  rk   rq   rn   rc  rc    s<   € € € € € € à€G€G�GØ€G€G�Gð:ð :ð :ð :ð :ð :rq   rc  c                  ó"   — e Zd ZU ded<   dd„ZdS )ÚGegenbauerRuler   rô   rh   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ô   rg   r+   rN   r   rH   r   ÚZero)rm   r
  rô   rú   s       rn   ro   zGegenbauerRule.eval$  sˆ   € Ø”&˜$œ& $¤-ˆaˆ1ˆÝÝ˜˜A™˜q 1™u aÑ(Ô(¨!¨Q°©U©)Ñ4µb¸¸A±h´hÐ?Ý˜˜A™˜qÑ!Ô! 1 q¡5Ñ)­2¨a°©9¬9Ð5ÝŒV�TˆNñô ð 	rq   Nru   rI  rk   rq   rn   rg  rg     s3   € € € € € € à€G€G�Gðð ð ð ð ð rq   rg  c                  ó   — e Zd Zdd„ZdS )ÚChebyshevTRulerh   r   c                óð   — | 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
  rg   r+   rH   r   r   ©rm   r
  rú   s      rn   ro   zChebyshevTRule.eval.  s‡   € ØŒv�t”}ˆ1ˆÝÝ˜˜Q™ Ñ"Ô" A¨¡EÑ*Ý˜˜Q™ Ñ"Ô" A¨¡EÑ*ñ+Ø,-ñ.Ý/1µ#°a±&´&¸!©}¬}ð>à�‰T�!‰V�TˆNñô ð 	rq   Nru   ©rw   rx   ry   ro   rk   rq   rn   rk  rk  ,  s(   € € € € € ðð ð ð ð ð rq   rk  c                  ó   — e Zd Zdd„ZdS )ÚChebyshevURulerh   r   c                ó¤   — | j         | j        }}t          t          |dz   |¦  «        |dz   z  t	          |d¦  «        ft
          j        df¦  «        S r‘   )r
  rg   r+   rH   r   r   ri  rm  s      rn   ro   zChebyshevURule.eval8  sQ   € ØŒv�t”}ˆ1ˆÝÝ˜˜A™˜qÑ!Ô! 1 q¡5Ñ)­2¨a°©9¬9Ð5ÝŒV�TˆNñô ð 	rq   Nru   rn  rk   rq   rn   rp  rp  6  s(   € € € € € ðð ð ð ð ð rq   rp  c                  ó   — e Zd Zdd„ZdS )ÚLegendreRulerh   r   c                ó~   — | j         | j        }}t          |dz   |¦  «        t          |dz
  |¦  «        z
  d|z  dz   z  S ©NrR   rø   )r
  rg   rJ   rm  s      rn   ro   zLegendreRule.evalA  sC   € ØŒv�t”}ˆ1ˆÝ˜˜A™˜qÑ!Ô!¥H¨Q°©U°AÑ$6Ô$6Ñ6¸¸1¹¸q¹ÑAÐArq   Nru   rn  rk   rq   rn   rs  rs  ?  s.   € € € € € ðBð Bð Bð Bð Bð Brq   rs  c                  ó   — e Zd Zdd„ZdS )ÚHermiteRulerh   r   c                óV   — | j         | j        }}t          |dz   |¦  «        d|dz   z  z  S ru  )r
  rg   rK   rm  s      rn   ro   zHermiteRule.evalH  s0   € ØŒv�t”}ˆ1ˆÝ�q˜1‘u˜aÑ Ô  ! Q¨¡U¡)Ñ,Ð,rq   Nru   rn  rk   rq   rn   rw  rw  F  s(   € € € € € ð-ð -ð -ð -ð -ð -rq   rw  c                  ó   — e Zd Zdd„ZdS )ÚLaguerreRulerh   r   c                óf   — | j         | j        }}t          ||¦  «        t          |dz   |¦  «        z
  S r$  )r
  rg   rL   rm  s      rn   ro   zLaguerreRule.evalO  s0   € ØŒv�t”}ˆ1ˆÝ˜˜1‰~Œ~¥¨¨Q©°Ñ 2Ô 2Ñ2Ð2rq   Nru   rn  rk   rq   rn   rz  rz  M  ó(   € € € € € ð3ð 3ð 3ð 3ð 3ð 3rq   rz  c                  ó"   — e Zd ZU ded<   dd„ZdS )ÚAssocLaguerreRuler   rô   rh   c                óP   — t          | j        dz   | j        dz
  | j        ¦  «         S r$  )rM   r
  rô   rg   rl   s    rn   ro   zAssocLaguerreRule.evalX  s%   € Ý˜tœv¨™z¨4¬6°A©:°t´}ÑEÔEÐEÐErq   Nru   rI  rk   rq   rn   r~  r~  T  s9   € € € € € € à€G€G�GðFð Fð Fð Fð Fð Frq   r~  c                  ó$   — e Zd ZU ded<   ded<   dS )ÚIRuler   rô   rõ   Nra  rk   rq   rn   r�  r�  \  s"   € € € € € € à€G€G�GØ€G€G�G€G€Grq   r�  c                  ó   — e Zd Zdd„ZdS )ÚCiRulerh   r   c                ó¶   — | j         | j        | j        }}}t          |¦  «        t	          ||z  ¦  «        z  t          |¦  «        t          ||z  ¦  «        z  z
  S rj   )rô   rõ   rg   r-   r?   r.   rA   ©rm   rô   rõ   rú   s       rn   ro   zCiRule.evald  óH   € Ø”&˜$œ& $¤-ˆaˆ1ˆÝ�1‰vŒv•b˜˜1™‘g”g‰~¥ A¡¤¥r¨!¨A©#¡w¤w¡Ñ.Ð.rq   Nru   rn  rk   rq   rn   rƒ  rƒ  b  ó(   € € € € € ð/ð /ð /ð /ð /ð /rq   rƒ  c                  ó   — e Zd Zdd„ZdS )ÚChiRulerh   r   c                ó¶   — | j         | j        | j        }}}t          |¦  «        t	          ||z  ¦  «        z  t          |¦  «        t          ||z  ¦  «        z  z   S rj   )rô   rõ   rg   r$   r@   r'   rB   r…  s       rn   ro   zChiRule.evalk  óJ   € Ø”&˜$œ& $¤-ˆaˆ1ˆÝ�A‰wŒw•s˜1˜Q™3‘x”xÑ¥$ q¡'¤'­#¨a°©c©(¬(Ñ"2Ñ2Ð2rq   Nru   rn  rk   rq   rn   r‰  r‰  i  r|  rq   r‰  c                  ó   — e Zd Zdd„ZdS )ÚEiRulerh   r   c                óp   — | j         | j        | j        }}}t          |¦  «        t	          ||z  ¦  «        z  S rj   )rô   rõ   rg   r    rC   r…  s       rn   ro   zEiRule.evalr  s/   € Ø”&˜$œ& $¤-ˆaˆ1ˆÝ�1‰vŒv•b˜˜1™‘g”g‰~Ðrq   Nru   rn  rk   rq   rn   r�  r�  p  s(   € € € € € ðð ð ð ð ð rq   r�  c                  ó   — e Zd Zdd„ZdS )ÚSiRulerh   r   c                ó¶   — | j         | j        | j        }}}t          |¦  «        t	          ||z  ¦  «        z  t          |¦  «        t          ||z  ¦  «        z  z   S rj   )rô   rõ   rg   r.   r?   r-   rA   r…  s       rn   ro   zSiRule.evaly  r†  rq   Nru   rn  rk   rq   rn   r�  r�  w  r‡  rq   r�  c                  ó   — e Zd Zdd„ZdS )ÚShiRulerh   r   c                ó¶   — | j         | j        | j        }}}t          |¦  «        t	          ||z  ¦  «        z  t          |¦  «        t          ||z  ¦  «        z  z   S rj   )rô   rõ   rg   r'   r@   r$   rB   r…  s       rn   ro   zShiRule.eval€  r‹  rq   Nru   rn  rk   rq   rn   r“  r“  ~  r|  rq   r“  c                  ó   — e Zd Zdd„ZdS )ÚLiRulerh   r   c                ó\   — | j         | j        | j        }}}t          ||z  |z   ¦  «        |z  S rj   )rô   rõ   rg   rD   r…  s       rn   ro   zLiRule.eval‡  s-   € Ø”&˜$œ& $¤-ˆaˆ1ˆÝ�!�A‘#˜‘'‰{Œ{˜1‰}Ðrq   Nru   rn  rk   rq   rn   r–  r–  …  s(   € € € € € ðð ð ð ð ð rq   r–  c                  ó6   — e Zd ZU ded<   ded<   ded<   dd„ZdS )	ÚErfRuler   rô   rõ   rö   rh   c                ó2  — | 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ø   re  rÿ   r   T)rô   rõ   rö   rg   Úis_extended_realr+   r*   r   ÚPir    r;   r<   rù   s        rn   ro   zErfRule.eval’  s…  € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�ØÔð 	:ÝÝ•a”d‘”�D ! ™HœHÑ$ QÑ&­¨Q°°A±°q¸±s±©^Ñ)<Ô)<Ñ<Ý˜˜A™˜a™ !™ a­¨a¨R©¬¡jÑ1Ñ2Ô2ñ3Ø45¸²Eð;å•a”d‘”�D ™GœGÑ# AÑ%­¨A°°1±°a¸±c±
©NÑ(;Ô(;Ñ;Ý˜!˜A™#˜a™% !™) a­¨Q©¬¡iÑ0Ñ1Ô1ñ2Ø37ð9ñ:ô :ð :õ
 •A”D‰zŒz�$˜q™'œ'Ñ! !Ñ#¥c¨!¨a°©d°A°a±C©j©.Ñ&9Ô&9Ñ9Ý�a˜‘c˜!‘e˜a‘i !¥D¨¡G¤G¡)Ñ,Ñ-Ô-ñ.ð 	.rq   Nru   rI  rk   rq   rn   r™  r™  Œ  sE   € € € € € € à€G€G�GØ€G€G�GØ€G€G�Gð	.ð 	.ð 	.ð 	.ð 	.ð 	.rq   r™  c                  ó6   — e Zd ZU ded<   ded<   ded<   dd„ZdS )	ÚFresnelCRuler   rô   rõ   rö   rh   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ø   re  )rô   rõ   rö   rg   r*   r   rœ  r-   r=   r.   r>   rù   s        rn   ro   zFresnelCRule.eval¤  óÞ   € Ø”V˜TœV T¤V¨T¬]Ð:‰
ˆˆ1ˆa�Ý•A”D‰zŒz�$˜q ™s™)œ)Ñ#Ý��1‘�a˜‘c‘
˜Q‘ÑÔ¥¨!¨A©#¨a©%°!©)µT¸!¸A¹#½a¼d¹(±^´^Ñ)CÑ DÔ DÑDÝ��1‘�a˜‘c‘
˜Q‘ÑÔ¥¨!¨A©#¨a©%°!©)µT¸!¸A¹#½a¼d¹(±^´^Ñ)CÑ DÔ DÑDñEñFð 	Frq   Nru   rI  rk   rq   rn   rž  rž  ž  óK   € € € € € € à€G€G�GØ€G€G�GØ€G€G�GðFð Fð Fð Fð Fð Frq   rž  c                  ó6   — e Zd ZU ded<   ded<   ded<   dd„ZdS )	ÚFresnelSRuler   rô   rõ   rö   rh   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ö   rg   r*   r   rœ  r-   r>   r.   r=   rù   s        rn   ro   zFresnelSRule.eval±  r¡  rq   Nru   rI  rk   rq   rn   r¤  r¤  «  r¢  rq   r¤  c                  ó,   — e Zd ZU ded<   ded<   dd„ZdS )ÚPolylogRuler   rô   rõ   rh   c                óL   — t          | j        dz   | j        | j        z  ¦  «        S r$  )rQ   rõ   rô   rg   rl   s    rn   ro   zPolylogRule.eval½  s!   € Ý�t”v ‘z 4¤6¨D¬MÑ#9Ñ:Ô:Ð:rq   Nru   rI  rk   rq   rn   r§  r§  ¸  s<   € € € € € € à€G€G�GØ€G€G�Gð;ð ;ð ;ð ;ð ;ð ;rq   r§  c                  ó,   — e Zd ZU ded<   ded<   dd„ZdS )ÚUpperGammaRuler   rô   r  rh   c                ó‚   — | j         | j        | j        }}}||z  | |z  | z  z  t          |dz   | |z  ¦  «        z  |z  S r$  )rô   r  rg   rE   )rm   rô   r  rú   s       rn   ro   zUpperGammaRule.evalÆ  sN   € Ø”&˜$œ& $¤-ˆaˆ1ˆØ�!‰t˜�r˜!‘t ˜r‘lÑ"¥Z°°A±¸°r¸!±tÑ%<Ô%<Ñ<¸QÑ>Ð>rq   Nru   rI  rk   rq   rn   rª  rª  Á  s<   € € € € € € à€G€G�GØ€G€G�Gð?ð ?ð ?ð ?ð ?ð ?rq   rª  c                  ó,   — e Zd ZU ded<   ded<   dd„ZdS )ÚEllipticFRuler   rô   r  rh   c                óp   — t          | j        | j        | j        z  ¦  «        t	          | j        ¦  «        z  S rj   )rG   rg   r  rô   r*   rl   s    rn   ro   zEllipticFRule.evalÐ  ó)   € Ý˜$œ-¨¬°´©Ñ7Ô7½¸T¼V¹¼ÑDÐDrq   Nru   rI  rk   rq   rn   r­  r­  Ë  óB   € € € € € € à€G€G�GØ€G€G�GðEð Eð Eð Eð Eð Erq   r­  c                  ó,   — e Zd ZU ded<   ded<   dd„ZdS )ÚEllipticERuler   rô   r  rh   c                óp   — t          | j        | j        | j        z  ¦  «        t	          | j        ¦  «        z  S rj   )rF   rg   r  rô   r*   rl   s    rn   ro   zEllipticERule.evalÙ  r¯  rq   Nru   rI  rk   rq   rn   r²  r²  Ô  r°  rq   r²  c                  ó$   — e Zd ZU ded<   ded<   dS )r	  r   rf   r   ÚsymbolNra  rk   rq   rn   r	  r	  Ý  s"   € € € € € € Ø€O€O�OØ€N€N�N€N€Nrq   r	  c                óÎ  ‡— | j         �rÈ| j         d         }t          | t          ¦  «        r(|                     ‰¦  «        t	          |¦  «        dz  z  S t          | t
          ¦  «        r)|                     ‰¦  «         t          |¦  «        dz  z  S t          | t          ¦  «        r5|                     ‰¦  «        t	          |¦  «        z  t          |¦  «        z  S t          | t          ¦  «        r6|                     ‰¦  «         t          |¦  «        z  t          |¦  «        z  S t          | t          ¦  «        r t          ˆfd„| j         D ¦   «         ¦  «        S t          | t          ¦  «        rat          | j         ¦  «        dk    rIt          | j         d         t          ¦  «        r)| j         d         t          | j         d         ‰¦  «        z  S |                      ‰¦  «        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  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rj   )Úmanual_diff©r    Úargrµ  s     €rn   r¡   zmanual_diff.<locals>.<genexpr>õ  s-   øè è € ÐBÐB°C•{ 3¨Ñ/Ô/ÐBÐBÐBÐBÐBÐBrq   rR   )Úargsr%  r/   Údiffr2   r0   r1   r   Úsumr   r  r   r¸  )Úfrµ  rº  s    ` rn   r¸  r¸  â  s£  ø€ ð 	„vñ BØŒf�QŒiˆÝ�a�ÑÔð 	BØ—8’8˜FÑ#Ô#¥c¨#¡h¤h°¡kÑ1Ð1Ý˜�3ÑÔð 
	BØ—H’H˜VÑ$Ô$Ð$¥s¨3¡x¤x°¡{Ñ2Ð2Ý˜�3ÑÔð 	BØ—8’8˜FÑ#Ô#¥c¨#¡h¤hÑ.µ°S±´Ñ9Ð9Ý˜�3ÑÔð 	BØ—H’H˜VÑ$Ô$Ð$¥s¨3¡x¤xÑ/µ#°c±(´(Ñ:Ð:Ý˜�3ÑÔð 	BÝÐBÐBÐBÐB¸1¼6ÐBÑBÔBÑBÔBÐBÝ˜�3ÑÔð 	BÝ�1”6‰{Œ{˜aÒÐ¥J¨q¬v°a¬y½&Ñ$AÔ$AÐØ”v˜a”y¥;¨q¬v°a¬y¸&Ñ#AÔ#AÑAÐAØ�6Š6�&‰>Œ>Ðrq   c                óJ  ‡‡— t          |¦  «        dk    rX|d         }t          |t          t          f¦  «        r|                     ¦   «         }nEt          |¦  «        st          d¦  «        ‚n&t          |¦  «        dk    r|g}nt          d¦  «        ‚g }|D ]g\  }Št          |t          ¦  «        rM|j        d         Š|  	                    ˆfd„ˆfd„¦  «        } | 
                    ‰t          ‰¦  «        f¦  «         Œh|                      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         o
| j        ‰k    S rj   )r«   r�   )rú   Úx0s    €rn   ú<lambda>zmanual_subs.<locals>.<lambda>  s   ø€ ¨!¬(Ð*C°q´vÀ²|€ rq   c                ó2   •— t          | j         ‰z  ¦  «        S rj   )r    )rú   Únews    €rn   rÂ  zmanual_subs.<locals>.<lambda>  s   ø€ �#˜aœe C™i™.œ.€ rq   )r  r%  r   r   Úitemsrb   Ú
ValueErrorr!   r»  ÚreplacerÀ   r    r­   r&  )r)  r»  ÚsequenceÚnew_subsÚoldrÄ  rÁ  s        @@rn   Úmanual_subsrË  û  s/  øø€ õ
 ˆ4�y„y�A‚~€~Ø˜”7ˆÝ�h¥¥w Ñ0Ô0ð 	IØ—~’~Ñ'Ô'ˆHˆHÝ˜(Ñ#Ô#ð 	IÝÐGÑHÔHÐHð	Iå	ˆT‰Œ�aŠˆØ�6ˆˆåÐ?Ñ@Ô@Ð@à€HØð 	,ð 	,‰ˆˆSÝ�c�3ÑÔð 	,ð
 ”˜!”ˆBØ—<’<Ð CÐ CÐ CÐ CØ(Ð(Ð(Ð(ñ*ô *ˆDà�OŠO˜R¥ S¡¤˜NÑ+Ô+Ð+øà�9Š9•T˜(‘^”^ hÑ.Ñ/Ô/Ð/rq   c                ó€  ‡ ‡‡‡— g }ˆ ˆˆfd„}dˆfd„}ˆˆfd„Št          t                                ‰‰ ¦  «         |‰ ¦  «        z   ¦  «        ¦  «        D ]g}|‰k    rŒ	t          |‰¦  «        } |||¦  «        }|dur>|\  }	}|‰                      ‰‰¦  «        k    rŒI||	|f}
|
|vr|                     |
¦  «         Œh|S )Nc                ó   •— |dk    rdS ‰|z  }t          d                     || ‰¦  «        ¦  «         t          || ‰¦  «                             ¦   «         }|                     ‰¦  «        rdS ‰                     ‰¦  «        rw|                     ‰¦  «        rbt          ˆfd„‰                     ¦   «         D ¦   «         ¦  «        }t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        }||k    rdS |                     ‰d¬¦  «        S )Nr   Fz!substituted: {}, u: {}, u_var: {}c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rj   ©rV   )r    Útrµ  s     €rn   r¡   z;find_substitutions.<locals>.test_subterm.<locals>.<genexpr>-  s-   øè è € ÐSÐS°1�V A vÑ.Ô.ÐSÐSÐSÐSÐSÐSrq   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rj   rÏ  )r    rÐ  r¨   s     €rn   r¡   z;find_substitutions.<locals>.test_subterm.<locals>.<genexpr>.  s-   øè è € ÐSÐS°�F 1 eÑ,Ô,ÐSÐSÐSÐSÐSÐSrq   )Úas_Add)	rc   ÚformatrË  ÚcancelÚhas_freeÚis_rational_functionÚmaxÚas_numer_denomÚas_independent)r³   Úu_diffÚsubstitutedÚ
deg_beforeÚ	deg_afterrf   rµ  r¨   s        €€€rn   Útest_subtermz(find_substitutions.<locals>.test_subterm"  s%  ø€ Ø�QŠ;ˆ;Ø�5Ø &Ñ(ˆÝÐ1×8Ò8¸ÀaÈÑOÔOÑPÔPÐPÝ! +¨q°%Ñ8Ô8×?Ò?ÑAÔAˆà×Ò Ñ'Ô'ð 	Ø�5à×)Ò)¨&Ñ1Ô1ð 	°k×6VÒ6VÐW\Ñ6]Ô6]ð 	ÝÐSÐSÐSÐS¸	×8PÒ8PÑ8RÔ8RÐSÑSÔSÑSÔSˆJÝÐSÐSÐSÐS°k×6PÒ6PÑ6RÔ6RÐSÑSÔSÑSÔSˆIØ˜:Ò%Ð%Ø�uØ×)Ò)¨%¸Ð)Ñ>Ô>Ð>rq   Útermr   c                óœ  •— g }g }t          dd„ g¬¦  «        }|                      t          ¦  «        D ]d}|j        d         }‰|j        vrŒ|                     |‰z  ¦  «        }|r|                     ||         ¦  «         ŒO|                     |¦  «         Œe|r2|                     t          t          |¦  «        ‰z  ¦  «        ¦  «         |S )Nr
  c                ó   — | j         S rj   )Ú
is_Integer©r
  s    rn   rÂ  z:find_substitutions.<locals>.exp_subterms.<locals>.<lambda>6  s   € ¨A¬L€ rq   ©Ú
propertiesr   )r   rP  r    r»  Úfree_symbolsÚmatchrÀ   rX   )rß  Úlinear_coeffsÚtermsr
  r¯   rº  rç  rµ  s          €rn   Úexp_subtermsz(find_substitutions.<locals>.exp_subterms3  sÜ   ø€ ØˆØˆÝ�Ð"8Ð"8Ð!9Ð:Ñ:Ô:ˆØ—I’I�c‘N”Nð 	#ð 	#ˆDØ”)˜A”,ˆCØ˜SÔ-Ð-Ð-ØØ—I’I˜a ™hÑ'Ô'ˆEØð #Ø×$Ò$ U¨1¤XÑ.Ô.Ð.Ð.à—’˜TÑ"Ô"Ð"Ð"Øð 	>Ø�LŠL��X mÑ4Ô4°VÑ;Ñ<Ô<Ñ=Ô=Ð=Øˆrq   c                óF  •‡ — t          ‰ t          t          gt          ¢t          ‘t
          ‘t          ‘R ¦  «        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           ¦  «        rAg }‰ j        D ]5}|                     |¦  «         |                      ‰|¦  «        ¦  «         Œ6|S t          ‰ t&          ¦  «        r�ˆfd„‰ j        D ¦   «         }‰ j        j        rl|                     ˆ fd„t+          ‰ j        ¦  «        D ¦   «         ¦  «         ‰ j        j        r-|                     d„  ‰‰ j        ¦  «        D ¦   «         ¦  «         |S t          ‰ t0          ¦  «        rAg }‰ j        D ]5}|                     |¦  «         |                      ‰|¦  «        ¦  «         Œ6|S g S )Nr   rR   rø   é   c                ó>   •— g | ]}|                      ‰¦  «        ¯|‘ŒS rk   ©Úhasr¹  s     €rn   r9  zAfind_substitutions.<locals>.possible_subterms.<locals>.<listcomp>W  s(   ø€ Ð=Ð=Ð=˜¨S¯WªW°V©_¬_Ð=�Ð=Ð=Ð=rq   c                ót   •— g | ]4}d |cxk     rt          ‰j        d          ¦  «        k     ¯'n n
‰j        |z  ‘Œ5S )rR   )Úabsr»  r�   )r    r  rß  s     €rn   r9  zAfind_substitutions.<locals>.possible_subterms.<locals>.<listcomp>Y  sX   ø€ ð 2ð 2ð 2¨1Ø˜1Ð0Ð0Ò0Ð0�s 4¤9¨Q¤<Ñ0Ô0Ò0Ð0Ð0Ð0Ð0ð œ) Q™,Ø0Ð0Ð0rq   c                ó    — g | ]}|j         ¯	|‘ŒS rk   )r«   )r    rÐ  s     rn   r9  zAfind_substitutions.<locals>.possible_subterms.<locals>.<listcomp>\  s.   € ð %ð %ð % AØœ8ð%˜að %ð %ð %rq   )r%  r,   r"   Úinverse_trig_functionsr    r!   r9   r»  rH   rI   rJ   rK   rL   rN   rM   rO   r   rÀ   Úextendr   râ  rU   r�   Úis_Addr   )rß  Úrr³   rº  Úpossible_subtermsrµ  s   `   €€rn   r÷  z-find_substitutions.<locals>.possible_subtermsD  s^  øø€ Ý�dÕ2Õ4Fð 2Ý4ð2å ð2å"%ð2å'0ð2ð 2ñ 3ô 3ð 	ð ”I˜a”L�>Ð!Ý˜�z­:Ý ¥'­8ð5ñ 6ô 6ð 	à”I˜a”L�>Ð!Ý˜�z­>Ð:Ñ;Ô;ð 	Ø”I˜a”L�>Ð!Ý˜�fÑ%Ô%ð 	Ø”I˜a”L�>Ð!Ý˜�cÑ"Ô"ð 	ØˆAØ”Yð /ð /�Ø—’˜‘”�Ø—’Ð*Ð*¨1Ñ-Ô-Ñ.Ô.Ð.Ð.ØˆHÝ˜�cÑ"Ô"ð 	Ø=Ð=Ð=Ð= ¤	Ð=Ñ=Ô=ˆAØŒxÔ"ð &Ø—’ð 2ð 2ð 2ð 2µ¸T¼XÑ0FÔ0Fð 2ñ 2ô 2ñ 3ô 3ð 3à”9Ô#ð &Ø—H’Hð %ð %Ð):Ð):¸4¼9Ñ)EÔ)Eð %ñ %ô %ñ &ô &ð &àˆHÝ˜�cÑ"Ô"ð 	ØˆAØ”yð 1ð 1�Ø—’˜‘”�Ø—’Ð*Ð*¨3Ñ/Ô/Ñ0Ô0Ð0Ð0ØˆHØˆ	rq   F)rß  r   )r&  ÚdictÚfromkeysr¸  r­   rÀ   )rf   rµ  r¨   ÚresultsrÞ  rê  r³   rÚ  Únew_integrandr…   rZ  r÷  s   ```        @rn   Úfind_substitutionsrü    s7  øøøø€ Ø€Gð?ð ?ð ?ð ?ð ?ð ?ð ?ð"ð ð ð ð ð ð"!ð !ð !ð !ð !ð !õF •$—-’-Ð 1Ð 1°)Ñ <Ô <¸|¸|ÈIÑ?VÔ?VÑ VÑWÔWÑXÔXð -ð -ˆØ�Š;ˆ;ØÝ˜Q Ñ'Ô'ˆØ$˜ Q¨Ñ/Ô/ˆØ Ð%Ð%Ø&3Ñ#ˆH�mØ 	§¢¨v°uÑ =Ô =Ò=Ð=ØØ˜x¨Ð7ˆLØ 7Ð*Ð*Ø—’˜|Ñ,Ô,Ð,øà€Nrq   c                ó   ‡ ‡— ˆ ˆfd„}|S )z$Strategy that rewrites an integrand.c                óø   •— | \  }}t          d                     |‰|¦  «        ¦  «          ‰| Ž rD ‰| Ž }||k    r;t          ||¦  «        }t          |t          ¦  «        s|rt          ||||¦  «        S d S d S d S d S )Nz/Integral: {} is rewritten with {} on symbol: {})rc   rÓ  Úintegral_stepsr%  r  r-  )Úintegralrf   rµ  r.  r‡   ra   Úrewrites        €€rn   Ú	_rewriterzrewriter.<locals>._rewriterx  s¿   ø€ Ø$Ñˆ	�6ÝÐ?×FÒFÀyÐRYÐ[aÑbÔbÑcÔcÐcØˆ9�hÐð 	NØ˜ Ð*ˆIØ˜IÒ%Ð%Ý(¨°FÑ;Ô;�Ý! '­<Ñ8Ô8ð N¸Wð NÝ& y°&¸)ÀWÑMÔMÐMð	Nð 	Nà%Ð%ðNð Nð Nð Nrq   rk   )ra   r  r  s   `` rn   Úrewriterr  v  s0   øø€ ðNð Nð Nð Nð Nð Nð Ðrq   c                ó   ‡ ‡— ˆ ˆfd„}|S )zAStrategy that rewrites an integrand based on some other criteria.c           	     óî   •— | \  } }|\  }}t          d                     |‰|| ¦  «        ¦  «         | t          |¦  «        z   } ‰|Ž r+ ‰|Ž }||k    r"t          |||t	          ||¦  «        ¦  «        S d S d S )Nz@Integral: {} is rewritten with {} on symbol: {} and criteria: {})rc   rÓ  r&  r-  rÿ  )Úcriteriar   rf   rµ  r»  r.  ra   r  s         €€rn   Ú_proxy_rewriterz'proxy_rewriter.<locals>._proxy_rewriter…  s¦   ø€ Ø%Ñˆ�(Ø$Ñˆ	�6ÝÐP×WÒWÐXaÐcjÐlrÐt|Ñ}Ô}Ñ~Ô~Ð~Ø�$˜x™.œ.Ñ(ˆØˆ9�dÐð 	dØ˜ ˜ˆIØ˜IÒ%Ð%Ý" 9¨f°iÅÐPYÐ[aÑAbÔAbÑcÔcÐcð	dð 	dà%Ð%rq   rk   )ra   r  r  s   `` rn   Úproxy_rewriterr  ƒ  s0   øø€ ðdð dð dð dð dð dð Ðrq   c                ó   ‡ — ˆ fd„}|S )z4Apply the rule that matches the condition, else Nonec                ól   •— ‰                      ¦   «         D ]\  }} || ¦  «        r || ¦  «        c S Œd S rj   )rÅ  )r)  ÚkeyrÂ   Ú
conditionss      €rn   Úmultiplexer_rlz#multiplexer.<locals>.multiplexer_rl’  sU   ø€ Ø#×)Ò)Ñ+Ô+ð 	"ð 	"‰IˆC�Øˆs�4‰yŒyð "Ø�t˜D‘z”zÐ!Ð!Ð!ð"ð	"ð 	"rq   rk   )r  r  s   ` rn   Úmultiplexerr  �  s$   ø€ ð"ð "ð "ð "ð "ð Ðrq   c                 ó   ‡ — ˆ fd„}|S )zHStrategy that makes an AlternativeRule out of multiple possible results.c                ó˜  •— g }d}t          d¦  «         ‰D ]k}|dz   }t          d                     ||¦  «        ¦  «          || ¦  «        }|r4t          |t          ¦  «        s|| k    r||vr|                     |¦  «         Œlt          |¦  «        dk    r|d         S |r*d„ |D ¦   «         }|rt          g | ¢|‘R Ž S t          g | ¢|‘R Ž S d S )Nr   zList of Alternative RulesrR   úRule {}: {}c                ó:   — g | ]}|                      ¦   «         °|‘ŒS rk   r¤   )r    rÂ   s     rn   r9  z7alternatives.<locals>._alternatives.<locals>.<listcomp>©  s)   € ÐMÐMÐM˜t°4×3JÒ3JÑ3LÔ3LÐM�dÐMÐMÐMrq   )rc   rÓ  r%  r  rÀ   r  r  )r   Úaltsr+  rÂ   r®   ÚdoableÚruless         €rn   Ú_alternativesz#alternatives.<locals>._alternativesš  s  ø€ ØˆØˆÝÐ)Ñ*Ô*Ð*Øð 	$ð 	$ˆDØ˜A‘IˆEÝ�-×&Ò& u¨dÑ3Ô3Ñ4Ô4Ð4à�T˜(‘^”^ˆFØð $�z¨&µ,Ñ?Ô?ð $Ø˜(Ò"Ð" v°TÐ'9Ð'9Ø—’˜FÑ#Ô#Ð#øÝˆt‰9Œ9˜Š>ˆ>Ø˜”7ˆNØð 	8ØMÐM tÐMÑMÔMˆFØð 8Ý&Ð9¨Ð9°&Ð9Ð9Ð9Ð9å&Ð7¨Ð7°$Ð7Ð7Ð7Ð7ð	8ð 	8rq   rk   )r  r  s   ` rn   r  r  ˜  s$   ø€ ð8ð 8ð 8ð 8ð 8ð( Ðrq   c                ó   — t          | Ž S rj   )r€   ©r   s    rn   Úconstant_ruler  °  ó   € Ý˜Ð"Ð"rq   c           
     ó^  — | \  }}|                      ¦   «         \  }}||j        vrNt          |t          ¦  «        r9t	          |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 d S d S )NrR   r   T)r¬   ræ  r%  r   r\   rê   rŽ   rç   r   r!   Úis_zeror€   r4  r   )r   rf   rµ  r�   ÚexptrÂ   s         rn   Ú
power_ruler  ³  s=  € Ø Ñ€IˆvØ×&Ò&Ñ(Ô(�J€Dˆ$à�TÔ&Ð&Ð&­:°d½FÑ+CÔ+CÐ&Ý�D˜1‘HÑÔ Ò"Ð"Ý! )¨V°TÑ:Ô:Ð:Ý˜ F¨D°$Ñ7Ô7Ð7Ø	�tÔ(Ð	(Ð	(­Z¸½fÑ-EÔ-EÐ	(Ý�y &¨$°Ñ5Ô5ˆå•S˜‘Y”YÔ&Ñ'Ô'ð 	+ØˆKÝ�‰YŒYÔð 	+Ý  6Ñ*Ô*Ð*å˜Y¨Ø•2•c˜$‘i”i Ñ#Ô#Ð$Ý˜!˜VÑ$Ô$ dÐ+ð1
ñ ô ð 	ð 
)Ð	(Ð	(Ð	(rq   c                ó”   — | \  }}t          |j        d         t          ¦  «        r"t          ||t          |j        d         ¦  «        S d S r  )r%  r»  r   rç   r   ©r   rf   rµ  s      rn   Úexp_ruler!  È  sM   € Ø Ñ€IˆvÝ�)”. Ô#¥VÑ,Ô,ð @Ý�y &­!¨Y¬^¸AÔ->Ñ?Ô?Ð?ð@ð @rq   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 ]~}t!          ||¦  «        rl|                     |d¦  «        }|j        |         ‰u rGt'          ˆfd„|j        d |…         D ¦   «         ¦  «        s ||         |‰g|j        d |…         ¢R Ž c S Œd S )Nrì  rø   rR   c              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S rj   rî  )r    r¹   rµ  s     €rn   r¡   z'orthogonal_poly_rule.<locals>.<genexpr>ã  s-   øè è € ÐFÐF a�A—E’E˜&‘M”MÐFÐFÐFÐFÐFÐFrq   )rO   rc  rN   rg  rH   rk  rI   rp  rJ   rs  rK   rw  rL   rz  rM   r~  r%  Úgetr»  r¥   )r   Úorthogonal_poly_classesÚorthogonal_poly_var_indexrf   ÚklassÚ	var_indexrµ  s         @rn   Úorthogonal_poly_ruler)  Î  s  ø€ å•
Ý•NÝ•NÝ•NÝ•,Ý•Ý•,ÝÕ)ð	
Ðõ 	�Ý�AÝ˜ð!
Ðð
 !Ñ€IˆvØ(ð jð jˆÝ�i Ñ'Ô'ð 	jØ1×5Ò5°e¸QÑ?Ô?ˆIØ”˜yÔ)¨VÐ3Ð3ÝÐFÐFÐFÐF¨9¬>¸*¸9¸*Ô+EÐFÑFÔFÑFÔFð 4à9Ð2°5Ô9¸)ÀVÐiÈiÌnÐ]gÐ^gÐ]gÔNhÐiÐiÐiÐiÐiÐiøðjð jrq   z/list[tuple[Type, Expr, Callable | None, tuple]]Ú_special_function_patternsrú   c                ó  ‡— | \  }}t           �sít          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                               |||||f¦  «         |t          z  |z   }|t          dz  z  |t          z  z   |z   }	t                                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¦  «         |                     |t          ¦  «        }
t           D ]a\  }}}}t;          |
|¦  «        rJ|
                     |¦  «        Š‰r3t?          ˆfd„t          D ¦   «         ¦  «        }|� ||Ž r |||g|¢R Ž c S Œbd S )Nrô   c                ó   — | j          S rj   ©r  ©rú   s    rn   rÂ  z'special_function_rule.<locals>.<lambda>ï  ó
   € À1Ä9¸}€ rq   ©Úexcluderå  rõ   ©r1  rö   r  c                ó   — | j          S rj   r-  r.  s    rn   rÂ  z'special_function_rule.<locals>.<lambda>ò  r/  rq   r  c                ó    — | j         o| j         S rj   )Úis_nonnegativeÚ
is_integerr.  s    rn   rÂ  z'special_function_rule.<locals>.<lambda>ô  s   € ˜1Ô+Ð<°´Ð=€ rq   rø   F©ÚevaluaterR   c                ó   — | |k    S rj   rk   ©rô   r  s     rn   rÂ  z'special_function_rule.<locals>.<lambda>  ó
   € ˜Q !šV€ rq   c                ó   — | |k    S rj   rk   r:  s     rn   rÂ  z'special_function_rule.<locals>.<lambda>
  r;  rq   c              3  ól   •K  — | ].}‰                      |¦  «        ®‰                      |¦  «        V — Œ/d S rj   )r$  )r    Úwrç  s     €rn   r¡   z(special_function_rule.<locals>.<genexpr>  sH   øè è € ð "?ð "?°1Ø%*§Y¢Y¨q¡\¤\Ð%=ð #(§)¢)¨A¡,¤,Ø%=Ð%=Ð%=Ð%=ð"?ð "?rq   ) 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   rf   rµ  rô   rõ   rö   r  r  Úlinear_patternÚquadratic_patternÚ
_integrandÚtype_ÚpatternÚ
constraintrÂ   Ú	wild_valsrç  s                   @rn   Úspecial_function_rulerI  ì  s‹  ø€ Ø Ñ€IˆvÝ%ñ Ý��w˜iÐ5LÐ5LÐ4MÐNÑNÔNˆÝ��w˜iÐ(Ñ(Ô(ˆÝ��w˜iÐ(Ñ(Ô(ˆÝ��w˜iÐ5LÐ5LÐ4MÐNÑNÔNˆÝ��w˜iØ=Ð=ð5?ð @ñ @ô @ˆå�Š�q˜!˜Q  1�oÑ&Ô&Ð&ð �7™ Q™ˆØ�g q™j™L¨1­W©9Ñ4°qÑ8ÐÝ"×)Ò)Ý•#�n¨uÐ5Ñ5Ô5µgÑ=¸tÅVÐLÝ•#�n¨uÐ5Ñ5Ô5µgÑ=¸tÅVÐLÝ•$�~°Ð6Ñ6Ô6µwÑ>ÀÅgÐNÝ•#�n¨uÐ5Ñ5Ô5µgÑ=¸tÅVÐLÝ•$�~°Ð6Ñ6Ô6µwÑ>ÀÅgÐNÝ�!•C˜°Ð7Ñ7Ô7Ñ7¸½vÐFÝ•#Ð'°%Ð8Ñ8Ô8¸$ÅÐHÝ•#Ð'°%Ð8Ñ8Ô8¸$ÅÐMÝ•#Ð'°%Ð8Ñ8Ô8¸$ÅÐMÝ•'˜1‘*�S ¥7¡°UÐ;Ñ;Ô;Ñ;¸TÅ>ÐRÝ•'˜!˜Q�w™Y°Ð7Ñ7Ô7½Ñ?ÀÅ{ÐSÝ�!•D˜˜Q�s¥7°UÐ;Ñ;Ô;¸QÑ>Ñ>Ñ>Ñ?Ô?Ñ?Ø#Ð#¥]ð4å•$�q˜1�S¥°5Ð9Ñ9Ô9¸1Ñ<Ñ<Ñ<Ñ=Ô=Ø#Ð#¥]ð4ð+
ñ 	ô 	ð 	ð" —’ ­Ñ0Ô0€JÝ,Fð ?ð ?Ñ(ˆˆw˜
 DÝ�j %Ñ(Ô(ð 	?Ø×$Ò$ WÑ-Ô-ˆEØð ?Ý!ð "?ð "?ð "?ð "?½ð "?ñ "?ô "?ñ ?ô ?�	àÐ%¨¨°YÐ)?Ð%Ø˜4 	¨6Ð>°IÐ>Ð>Ð>Ð>Ð>Ð>øð?ð ?rq   Úgeneric_stepÚdegenerate_stepr¶   rh   c                ó   ‡ — |€|S t          |t          ¦  «        rˆ fd„|j        D ¦   «         }n|‰ fg}t          |t          ¦  «        r||j        z  }n!|                     |t          j        f¦  «         t          |j        |j        |¦  «        S )Nc                óH   •— g | ]\  }}||‰z                        ¦   «         f‘ŒS rk   r[   )r    r‡   r8  Úgeneric_conds      €rn   r9  z(_add_degenerate_step.<locals>.<listcomp>  sI   ø€ ð Hð Hð HÙ)˜G Tð ! 4¨,Ñ#6×"@Ò"@Ñ"BÔ"BÐCð Hð Hð Hrq   )r%  r4  r5  rÀ   r   Útruerf   rg   )rN  rJ  rK  r5  s   `   rn   Ú_add_degenerate_steprP    s¸   ø€ ØÐØÐÝ�,¥Ñ.Ô.ð 6ðHð Hð Hð HØ-9Ô-FðHñ Hô Hˆˆð & |Ð4Ð5ˆÝ�/¥=Ñ1Ô1ð 7Ø˜Ô4Ñ4ˆˆà×Ò˜_­a¬fÐ5Ñ6Ô6Ð6Ý˜Ô/°Ô1FÈÑUÔUÐUrq   r   c                ó²  ‡‡‡‡	‡
‡‡— | \  }Št          d‰g¬¦  «        Št          d‰dg¬¦  «        Š	‰‰	‰z  z   Št          j        Š
 G d„ dt          ¦  «        Šdˆˆˆˆ	ˆ
ˆˆfd„Š	  ‰|¦  «        \  }}n# ‰$ r Y d S w xY w‰
t          j        u rd }n$t	          |                     ‰d¦  «        ‰¦  «        }t          |‰||¦  «        }t          ‰
||¦  «        S )Nrô   r2  rõ   r   c                  ó   — e Zd ZdS )ú nested_pow_rule.<locals>.NoMatchNrÇ   rk   rq   rn   ÚNoMatchrS  /  s   € € € € € Øˆrq   rT  r)  r   rh   útuple[Expr, Expr]c                óØ  •— |                       ‰¦  «        st          j        t          j        fS | j        r¦|                      ¦   «         \  }}|st          j        t          j        fS ˆfd„|D ¦   «         }d„ |D ¦   «         }|                     t          j        ¦  «         t          |¦  «        dk    r'|                     ¦   «         t          d„ |D ¦   «         Ž fS ‰‚| j
        r:| j        | j        }}|                      ‰¦  «        r‰‚ ‰|¦  «        \  }}|||z  fS |                      ‰¦  «        }	|	r6|	‰         |	‰         }}
‰|
|z  z   }t          |d¦  «        Š|t          j        fS ‰‚)Nc                ó&   •— g | ]} ‰|¦  «        ‘ŒS rk   rk   )r    rß  Ú_get_base_exps     €rn   r9  z:nested_pow_rule.<locals>._get_base_exp.<locals>.<listcomp>9  s#   ø€ Ð=Ð=Ð=¨t�}�} TÑ*Ô*Ð=Ð=Ð=rq   c                ó   — h | ]\  }}|’ŒS rk   rk   )r    rõ   r<  s      rn   ú	<setcomp>z9nested_pow_rule.<locals>._get_base_exp.<locals>.<setcomp>:  s   € Ð+Ð+Ð+™4˜1˜a�QÐ+Ð+Ð+rq   rR   c              3  ó    K  — | ]	\  }}|V — Œ
d S rj   rk   )r    r<  r  s      rn   r¡   z9nested_pow_rule.<locals>._get_base_exp.<locals>.<genexpr>=  s&   è è € Ð)@Ð)@±°°1¨!Ð)@Ð)@Ð)@Ð)@Ð)@Ð)@rq   r   )rÕ  r   ÚOneri  Úis_MulÚas_coeff_mulÚdiscardr  Úpopr   r«   r�   r    rç  r   )r)  r<  ré  rú  Úbasesrõ   r  Úbase_Úsub_exprç  rô   rT  rX  Úa_Úb_rN  rF  rú   s              €€€€€€€rn   rX  z&nested_pow_rule.<locals>._get_base_exp2  sz  ø€ Ø�}Š}˜QÑÔð 	!Ý”5�!œ&�=Ð ØŒ;ð 		Ø×(Ò(Ñ*Ô*‰HˆAˆuØð %Ý”u�aœf�}Ð$Ø=Ð=Ð=Ð=°uÐ=Ñ=Ô=ˆGØ+Ð+ 7Ð+Ñ+Ô+ˆEØ�MŠM�!œ%Ñ Ô Ð Ý�5‰zŒz˜QŠˆØ—y’y‘{”{¥CÐ)@Ð)@¸Ð)@Ñ)@Ô)@Ð$AÐAÐAØˆMØŒ;ð 	&Ø”9˜dœhˆqˆAØ�zŠz˜!‰}Œ}ð Ø�Ø*˜]¨1Ñ-Ô-‰NˆE�7Ø˜' A™+Ð%Ð%Ø—
’
˜7Ñ#Ô#ˆØð 	 Ø˜”9˜e BœiˆqˆAØ˜˜!™‘GˆEå˜a ™8œ8ˆLØ�!œ%�<ÐØˆrq   )r)  r   rh   rU  )r   r   rO  Ú	Exceptionr€   r­   r•   rP  )r   rf   r�   r¯   rK  rJ  rT  rX  rd  re  rN  rF  rú   s         @@@@@@@rn   Únested_pow_rulerg  &  sJ  øøøøøøø€ à�L€Iˆqå	ˆc˜A˜3Ð	Ñ	Ô	€BÝ	ˆc˜A˜q˜6Ð	"Ñ	"Ô	"€BØ��A‘‰g€GÝ”6€Lðð ð ð ð •)ñ ô ð ðð ð ð ð ð ð ð ð ð ð ð ð8Ø"�] 9Ñ-Ô-‰
ˆˆdˆdøØð ð ð Øˆˆðøøøà•q”vÐÐØˆˆõ ' y§~¢~°a¸Ñ';Ô';¸QÑ?Ô?ˆÝ  ¨A¨t°TÑ:Ô:€LÝ ¨l¸OÑLÔLÐLs   Á&A5 Á5A>Á=A>Tc                ó¾  ‡‡‡— | \  ŠŠ‰                      ¦   «         \  }}t          d‰g¬¦  «        }t          d‰g¬¦  «        }t          d‰dg¬¦  «        }|                     ||‰z  z   |‰dz  z  z   ¦  «        Š‰sdS dˆˆfd
„}ˆfd„|||fD ¦   «         \  }}}t          |d¦  «        }|r|t          j        u rd}	nA|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r8t          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k    |dk     ¦  «        ft(          |d|d|
ft'          |dk    |dk    ¦  «        ffD ]B\  }}|t          j        u r ||Ž c S |t          j        ur|                      ||Ž |f¦  «         ŒC|r:|j        s!|                     |t          j        f¦  «         t/          ‰‰|¦  «        }n|}t!          |||	¦  «        S |t          j        k    r$t3          ‰‰|||¦  «        }t!          |||	¦  «        S dS )zm
    Set degenerate=False on recursive call where coefficient of quadratic term
    is assumed non-zero.
    rô   r2  rõ   rö   r   rø   Nrh   re   c                ó¶  •— 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k    rt          |	|z  ‰|	||¦  «        }|
�t          |‰||
|¦  «        }|dk    rt	          ‰‰||¦  «        }|S )Nr³   rR   rø   r   )r   r*   r„   r§   r2  )Ú	RuleClassrô   Úsign_arö   Úsign_cÚhr¨   r.  Úquadratic_baser…   r©   Ústandard_formr‡   rf   rµ  s                €€rn   Ú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”W‘9ˆØˆØ Ð'Ð'Ø#ˆFØ"ˆNØ�$˜v¨¨~¸qÑ/@Ñ(@Ñ@ÑAÔAÑAˆØ�)˜M¨>Ñ:Ô:ˆØ�qŠ=ˆ=Ý'¨°Ñ(>ÀÈÐR_ÐahÑiÔiˆGØÐÝ˜I v¨u°f¸gÑFÔFˆGØ�Š6ˆ6Ý(¨°F¸IÀwÑOÔOˆGØˆrq   c                óP   •— g | ]"}‰                      |t          j        ¦  «        ‘Œ#S rk   ©r$  r   ri  ©r    r  rç  s     €rn   r9  z%inverse_trig_rule.<locals>.<listcomp>}  s)   ø€ Ð7Ð7Ð7¨ˆu�yŠy˜�AœFÑ#Ô#Ð7Ð7Ð7rq   rR   re  r’   )rh   re   )r¬   r   rç  r   r   rO  r  r€   Úsqrt_linear_ruler	  r\   r•   r*   ÚNegativeOneÚfalseró   rP  Úis_realrí   rT   rð   rÀ   Úis_positiver4  ÚHalfr  )r   r  r�   r    rô   rõ   rö   rp  rN  rK  rm  ÚkÚnon_square_condÚsquare_steprJ  r  r  r»  r8  rf   rç  rµ  s                      @@@rn   r  r  [  sv  øøø€ ð
 !Ñ€IˆvØ×%Ò%Ñ'Ô'�I€Dˆ#ÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6 1˜+Ð&Ñ&Ô&€AØ�JŠJ�q˜1˜V™8‘| a¨°©	¡kÑ1Ñ2Ô2€Eàð Øˆðð ð ð ð ð ð ð& 8Ð7Ð7Ð7¨a°°A¨YÐ7Ñ7Ô7�G€A€qˆ!Ý�a˜‘8”8€LØð Z˜­¬Ð/Ð/ØˆˆØ	
Œð ZÝ& q¨C¡x°Ñ8Ô8ˆˆå*­<¸¸QÀ¹Z¹ÈCÑ8OÐQWÑ+XÔ+XÑYÔYˆå��#‘˜‘	ÑÔ˜aÒÑØˆr�1�Q‘3‰x˜˜Q ™T 1 Q¡3™Z™ˆ1ˆÝ˜Q ™(œ(ˆØˆØ¥!¤&Ð(Ð(Ý'¨­$¨q°&¸±(¸Q±©Ñ*?Ô*?Ñ(?ÀÈÐPQÉÕSTÔS`ÑaÔaˆKØ�aœgÐ%Ð%ØÐÝ2°9¸fÀaÈÈAÑNÔNˆÝ# O°\À;ÑOÔOˆØŒ9ð 	$˜œð 	$àˆEå˜a  Q B¨¨AÐ.µ°A¸²E¸1¸qº5Ñ0AÔ0AÐBÝ˜q ! Q¨¨1Ð-­s°1°q²5¸!¸aº%Ñ/@Ô/@ÐAðð Cð C‘
��dð �1œ6�>�>Ø,Ð,¨dÐ3Ð3Ð3Ð3Ø�qœwÐ&Ð&Ø—L’LÐ"3Ð"3°TÐ":¸DÐ!AÑBÔBÐBøØð $Ø”}ð 9Ø—L’L ,µ´Ð!7Ñ8Ô8Ð8Ý$ Y°¸Ñ>Ô>��à#�Ý# L°$¸ÑHÔHÐHØ
�aŒf‚}€}Ý  ¨F°A°q¸!Ñ<Ô<ˆÝ# L°$¸ÑHÔHÐHð €}rq   c                ó|   ‡— | \  }Šˆfd„|                      ¦   «         D ¦   «         }d |v rd nt          |‰|¦  «        S )Nc                ó0   •— g | ]}t          |‰¦  «        ‘ŒS rk   )rÿ  )r    Úgrµ  s     €rn   r9  zadd_rule.<locals>.<listcomp>©  s3   ø€ ð 5ð 5ð 5Øõ ˜a Ñ(Ô(ð 5ð 5ð 5rq   )Úas_ordered_termsr™   )r   rf   rú  rµ  s      @rn   Úadd_ruler�  §  s_   ø€ Ø Ñ€Iˆvð5ð 5ð 5ð 5Ø ×1Ò1Ñ3Ô3ð5ñ 5ô 5€Gà˜7�?�?ˆ4ˆ4­°	¸6À7Ñ(KÔ(KÐKrq   c                óš   — | \  }}|                      |¦  «        \  }}|dk    r%t          ||¦  «        }|�t          |||||¦  «        S d S d S r$  )rÙ  rÿ  r„   )r   rf   rµ  r  r¾  Ú	next_steps         rn   Úmul_ruler„  ®  sf   € Ø Ñ€Iˆvð ×'Ò'¨Ñ/Ô/�H€Eˆ1Ø�‚z€zÝ" 1 fÑ-Ô-ˆ	ØÐ Ý$ Y°¸¸qÀ)ÑLÔLÐLð €zà Ð rq   ú*tuple[Expr, Expr, Expr, Expr, Rule] | Nonec                ó¸  ‡— ˆfd„}dd„} |t           ¦  «         |t          Ž | |t          t          ¦  «         |t          ¦  «        g}t          d¦  «        }t          | t           gt          ¢R ¦  «        r|| z  } t          |¦  «        D �]M\  }} || ¦  «        }|�r9|\  }	}
‰|	j        vr|	 	                    |¦  «        s d S |	 
                    |d¦  «        }	|
 
                    |d¦  «        }
||k    r|	                     ‰¦  «        s d S t          |	t           ¦  «        r1d|
z  }|                     ‰¦  «        rt          |‰¦  «        dk    r d S ||k    r�|
j        s/|
 	                    t          ¦  «        st          |
t          ¦  «        rYt!          |
‰¦  «        }|                     ¦   «         r d S |	                     ‰¦  «        }|                     ¦   «         }|	|
|||fc S d}|dk     rd	}n~||k    r(|
j        r!t+          d
„ |
j        D ¦   «         ¦  «        rd	}nP||dz   d …         D ]B} || ¦  «        }|r3|d          
                    |d¦  «                             |
¦  «        rd	} nŒC|rc|	                     ‰¦  «        }t!          t/          |
¦  «        ‰¦  «        }|                     ¦   «         s|                     ¦   «         }|	|
|||fc S �ŒOd S )Nc                ó  •— |                       ¦   «                              ¦   «         } t          | t          ¦  «        s| j        sg nˆfd„| j        D ¦   «         }|r$t          |Ž }| |z                        ¦   «         }||fS d S )Nc                ó>   •— g | ]}|                      ‰¦  «        ¯|‘ŒS rk   )Úis_algebraic_exprr¹  s     €rn   r9  z;_parts_rule.<locals>.pull_out_algebraic.<locals>.<listcomp>À  s,   ø€ ÐQÐQÐQ˜#°3×3HÒ3HÈÑ3PÔ3PÐQ�#ÐQÐQÐQrq   )rÔ  Útogetherr%  r+   r]  r»  r   )rf   Ú	algebraicr³   r´   rµ  s       €rn   Úpull_out_algebraicz'_parts_rule.<locals>.pull_out_algebraic¼  s™   ø€ Ø×$Ò$Ñ&Ô&×/Ò/Ñ1Ô1ˆ	å% iµÑ;Ô;ð RÀ9ÔCSð R�R�RØQÐQÐQÐQ ¤ÐQÑQÔQð 	àð 	Ý�Y�ˆAØ˜a‘-×'Ò'Ñ)Ô)ˆBØ�b�5ˆLð	ð 	rq   rh   ú*Callable[[Expr], tuple[Expr, Expr] | None]c                 ó   ‡ — dˆ fd„}|S )Nrf   r   rh   útuple[Expr, Expr] | Nonec                óŽ   •‡ — t          ˆ fd„‰D ¦   «         ¦  «        r'ˆfd„‰ j        D ¦   «         }|rt          |Ž }‰ |z  }||fS d S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S rj   rî  ©r    r¾  rf   s     €rn   r¡   zI_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<genexpr>È  s/   øè è € Ð7Ð7¨�9—=’= Ñ#Ô#Ð7Ð7Ð7Ð7Ð7Ð7rq   c                óL   •‡— g | ]Št          ˆfd „‰D ¦   «         ¦  «        ¯‰‘Œ S )c              3  ó8   •K  — | ]}t          ‰|¦  «        V — Œd S rj   )r%  )r    Úclsrº  s     €rn   r¡   zT_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<listcomp>.<genexpr>Ê  s-   øè è € ÐIÐI¸�z¨#¨sÑ3Ô3ÐIÐIÐIÐIÐIÐIrq   )r¥   )r    rº  Ú	functionss    @€rn   r9  zJ_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<listcomp>É  sR   øø€ ð Kð Kð K ÝÐIÐIÐIÐI¸yÐIÑIÔIÑIÔIðK˜ð Kð Kð Krq   )r¥   r»  r   )rf   r»  r³   r´   r–  s   `   €rn   Úpull_out_u_rlz6_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rlÇ  s�   øø€ ÝÐ7Ð7Ð7Ð7¨YÐ7Ñ7Ô7Ñ7Ô7ð !ðKð Kð Kð K y¤~ð Kñ Kô K�àð !Ý˜T˜
�AØ" Q™�BØ˜b˜5�LØ�4rq   )rf   r   rh   r�  rk   )r–  r—  s   ` rn   Ú
pull_out_uz_parts_rule.<locals>.pull_out_uÆ  s)   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð Ðrq   Ú	temporaryrR   Frø   Tc              3  óZ   K  — | ]&}t          |t          t          t          f¦  «        V — Œ'd S rj   )r%  r.   r-   r    ©r    rô   s     rn   r¡   z_parts_rule.<locals>.<genexpr>  sF   è è € ð "ð "Øõ ˜q¥3­­S /Ñ2Ô2ð "ð "ð "ð "ð "ð "rq   r   )rh   r�  )r!   ró  r.   r-   r    r   r%  r(  ræ  rï  r­   Úis_polynomialrV   Úis_Derivativer,   rP   rÿ  rt   r¼  ro   r»  ÚallÚequalsr\   )rf   rµ  rŒ  r˜  Úliate_rulesÚdummyÚindexrÂ   r®   r³   r´   Úrec_dvrµ   Údur¹   ÚacceptÚlrulerö  s    `                rn   Ú_parts_ruler§  ¹  sg  ø€ ðð ð ð ð ðð ð ð ð �:�c‘?”? J JÕ0FÐ$GØ% z zµ#µsÑ';Ô';Ø�:�c‘?”?ð$€Kõ
 �+ÑÔ€Eå�)�cÐ;Õ$:Ð;Ð;Ñ<Ô<ð &Ø˜IÑ%ˆ	å  Ñ-Ô-ð 70ñ 70‰ˆˆtØ��i‘”ˆàñ 4	0Ø‰EˆAˆrð ˜Qœ^Ð+Ð+°A·E²E¸%±L´LÐ+Ø�t�tà—’�u˜aÑ Ô ˆAØ—’˜ Ñ"Ô"ˆBð Ð)Ò)Ð)°!·/²/À&Ñ2IÔ2IÐ)Ø�t�tå˜!�SÑ!Ô!ð  Ø˜2™�Ø×(Ò(¨Ñ0Ô0ð  Ý˜6 6Ñ*Ô*¨aÒ/Ð/Ø˜4˜4ð Ð)Ò)Ð)ØÔ#ð 4 r§v¢vÕ.CÑ'DÔ'Dð 4Ý" 2Õ';Ñ<Ô<ð4å+¨B°Ñ7Ô7�FØ×0Ò0Ñ2Ô2ð 4Ø#˜t˜tàŸVšV F™^œ^˜Ø"ŸKšK™MœM˜Ø  " a¨¨VÐ3Ð3Ð3Ð3ð ˆFØ�qŠyˆyØ��ØÐ,Ò,Ð,°´Ð,Ýð "ð "Øœð"ñ "ô "ñ "ô "ð -ð "�F�Fà(¨°©¨¨Ô4ð ð �EØ˜˜iÑ(Ô(�AØð ˜Q˜qœTŸYšY u¨aÑ0Ô0×7Ò7¸Ñ;Ô;ð Ø!%˜Ø˜øàð 0Ø—V’V˜F‘^”^�Ý'­°©¬°fÑ=Ô=�Ø×0Ò0Ñ2Ô2ð 0ØŸš™œ�AØ˜b ! R¨Ð/Ð/Ð/Ð/ùØˆ4rq   c                óÚ  ‡‡— | \  }Š|                      ¦   «         \  }}t          |‰¦  «        }g }|�rØ|\  }}}}}	t          d                     |||||	¦  «        ¦  «         |                     |¦  «         t          |t          ¦  «        rd S t          |t          t          t          t          t          f¦  «        rD|                     ‰t          i¦  «        }
t          |
         dk    rd S t          |
xx         dz  cc<   t          d¦  «        D ]ü}t          d                     ||||¦  «        ¦  «         ||z  |z                       ¦   «         }|dk    r n´‰|j        vrQt%          |‰d„ |D ¦   «         dt'          |¦  «        z  |z  ¦  «        }|dk    r|rt)          ||z  ‰|||¦  «        }|c S ||z                        ¦   «         \  }}t          |‰¦  «        }|r-|\  }}}}}	||z  }||z  }|                     |||||	f¦  «         Œü ˆˆfd„Š|rW|d	         \  }}}}}	t+          |‰|||	 ‰|dd …         ||z  ¦  «        ¦  «        }|dk    r|rt)          ||z  ‰|||¦  «        }|S d S )
Nz,u : {}, dv : {}, v : {}, du : {}, v_step: {}rø   rR   re  z7Cyclic integration {} with v: {}, du: {}, integrand: {}c           
     óB   — g | ]\  }}}}}t          d d |||d ¦  «        ‘ŒS rj   )r²   )r    r³   r´   r¹   r¤  rµ   s         rn   r9  zparts_rule.<locals>.<listcomp>6  sD   € ð :ð :ð :Ù/˜!˜R  B¨õ ˜t T¨1¨b°&¸$Ñ?Ô?ð :ð :ð :rq   r’   c                ó–   •— | r7| d         \  }}}}}t          |‰||| ‰| dd …         ||z  ¦  «        ¦  «        S t          |‰¦  «        S rG  )r²   rÿ  )	Ústepsrf   r³   r´   r¹   r¤  rµ   Úmake_second_steprµ  s	          €€rn   r¬  z$parts_rule.<locals>.make_second_stepI  sj   ø€ Øð 	dØ#(¨¤8Ñ ˆAˆr�1�b˜&Ý˜Y¨°°2°vÐ?OÐ?OÐPUÐVWÐVXÐVXÔPYÐ[\Ð_aÑ[aÑ?bÔ?bÑcÔcÐcÝ˜i¨Ñ0Ô0Ð0rq   r   )Úas_coeff_Mulr§  rc   rÓ  rÀ   r%  rS   r.   r-   r    r'   r$   ÚxreplaceÚ_cache_dummyÚ_parts_u_cacher  rÔ  ræ  r¼   r  r„   r²   )r   rf   r…   r®   r«  r³   r´   r¹   r¤  rµ   Úcachekeyr<  r¾   rÂ   Únext_constantÚnext_integrandr¬  rµ  s                   @@rn   Ú
parts_ruler´    s  øø€ Ø Ñ€IˆvØ#×0Ò0Ñ2Ô2Ñ€Hˆiå˜ FÑ+Ô+€Fà€EØñ (Ø%Ñˆˆ2ˆq�"�fÝÐ<×CÒCÀAÀrÈ1ÈbÐRXÑYÔYÑZÔZÐZØ�Š�VÑÔÐå�a�Ñ"Ô"ð 	ØˆFõ �a�#�s¥C­­tÐ4Ñ5Ô5ð 	*Ø—z’z 6­<Ð"8Ñ9Ô9ˆHÝ˜hÔ'¨!Ò+Ð+Ø�Ý˜8Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$õ �q‘”ð 	ð 	ˆAÝÐK×RÒRÐSTÐVWÐY[Ð]fÑgÔgÑhÔhÐhØ ™F iÑ/×7Ò7Ñ9Ô9ˆKØ˜aÒÐØ�Ø˜[Ô5Ð5Ð5Ý& y°&ð:ð :Ø38ð:ñ :ô :à�C ™JœJÑ&¨Ñ4ñ6ô 6�ð  ’M�M t�MÝ,¨X¸	Ñ-AÀ6È8ÐU^Ð`dÑeÔe�DØ���ð ./°©V×,AÒ,AÑ,CÔ,CÑ)ˆM˜>Ý  °Ñ8Ô8ˆFàð Ø'-Ñ$��2�q˜"˜fØ�]Ñ"�Ø�mÑ#�Ø—’˜a  Q¨¨FÐ3Ñ4Ô4Ð4Ð4àð1ð 1ð 1ð 1ð 1ð 1ð ð Ø$ QœxÑˆˆ2ˆq�"�fÝ˜ F¨A¨r°6Ð;KÐ;KÈEÐRSÐRTÐRTÌIÐWXÐ[]ÑW]Ñ;^Ô;^Ñ_Ô_ˆØ˜ŠMˆM˜tˆMÝ$ X°	Ñ%9¸6À8ÈYÐX\Ñ]Ô]ˆDØˆðð rq   c           	     ó  — | \  }}|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          ¦  «        r`|j
        d         }t	          |¦  «        dz  t          |¦  «        t	          |¦  «        z  z   t	          |¦  «        t          |¦  «        z   z  }nwt          |t          ¦  «        r`|j
        d         }t          |¦  «        dz  t          |¦  «        t          |¦  «        z  z   t          |¦  «        t          |¦  «        z   z  }nd S t          |||t          ||¦  «        ¦  «        S ©Nrø   r   )r.   rÊ   r-   rÎ   r2   rØ   r1   rÛ   r%  r/   r»  r0   r-  rÿ  )r   rf   rµ  r.  rº  s        rn   Ú	trig_ruler·  W  sÑ  € Ø Ñ€IˆvØ•C˜‘K”KÒÐÝ�y &Ñ)Ô)Ð)Ø•C˜‘K”KÒÐÝ�y &Ñ)Ô)Ð)Ø•C˜‘K”K ‘NÒ"Ð"Ý˜	 6Ñ*Ô*Ð*Ø•C˜‘K”K ‘NÒ"Ð"Ý˜	 6Ñ*Ô*Ð*å�)�SÑ!Ô!ð Ý˜œÐ(­3°	´Ð+?Ñ?ˆ	‰	Ý	�I�sÑ	#Ô	#ð Ý˜œÐ(­3°	´Ð+?Ñ?ˆ	ˆ	Ý	�I�sÑ	#Ô	#ð 	ØŒn˜QÔˆÝ˜#‘h”h ‘k¥C¨¡H¤H­s°3©x¬xÑ$7Ñ7Ý˜#‘h”h¥ S¡¤Ñ)ñ+ˆ	ˆ	å	�I�sÑ	#Ô	#ð ØŒn˜QÔˆÝ˜#‘h”h ‘k¥C¨¡H¤H­s°3©x¬xÑ$7Ñ7Ý˜#‘h”h¥ S¡¤Ñ)ñ+ˆ	ˆ	ð 	ˆå�y &¨)µ^ÀIÈvÑ5VÔ5VÑWÔWÐWrq   c                óÜ   — | \  }}|t          |¦  «        t          |¦  «        z  k    rt          ||¦  «        S |t          |¦  «        t	          |¦  «        z  k    rt          ||¦  «        S d S rj   )r2   r/   rÒ   r1   r0   rÕ   r   s      rn   Útrig_product_ruler¹  s  sl   € Ø Ñ€IˆvØ•C˜‘K”K¥# f¡+¤+Ñ-Ò-Ð-Ý˜) VÑ,Ô,Ð,Ø•C˜‘K”K¥# f¡+¤+Ñ-Ò-Ð-Ý˜) VÑ,Ô,Ð,ð .Ð-rq   c                ó   — | \  }}t          d|g¬¦  «        }t          d|g¬¦  «        }t          d|g¬¦  «        }|                     |||dz  z  |z   z  ¦  «        }|�r³||         ||         ||         }}}t          |||||¦  «        }|j        �r*|j        �r"||z  dk    }|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k    r%t          |	|d	¬
¦  «        }t          |||	||¦  «        }t          ||||¦  «        }|t          j        u r|S t          ||||f|t          j        fg¦  «        S t          |||d¦  «        }|dk    rt          ||d|z  |dz  |¦  «        }t          |||t          |d¦  «        f|dfg¦  «        S t          d|g¬¦  «        }|                     |||dz  z  ||z  z   |z   z  ¦  «        }|ry||         ||         }}|j        rd S t#          d¦  «        }||d|z  z  z   }|                     |||d|z  z  z
  ¦  «        }t'          ||¦  «        }|rt)          |||||¦  «        S d S t          d|g¬¦  «        }|                     ||z  |z   ||dz  z  ||z  z   |z   z  ¦  «        }|�r||         ||         ||         ||         ||         f\  }}}}}|j        rd S ||dz  z  ||z  z   |z   }|d|z  z  }d|z  |z  |z   }| |z  |z   }t#          d¦  «        }t)          ||||t'          |dz  |¦  «        ¦  «        }|dk    rt          ||z  |z  ||||z  |¦  «        }|j        r|S t'          ||z  |¦  «        }t          ||||g¦  «        } ||z  |z  ||z  z   }!t          |||!| ¦  «        S d S )Nrô   r2  rõ   rö   rø   r   rR   r’   Fr7  rÿ   Tr  r³   r  )r   rç  r]  r›  r   rO  r*   rê   r„   r™   r   r-  rv  r4  rŽ   r   r  r   r­   rÿ  r§   )"r   rf   rµ  rô   rõ   rö   rç  Úgeneral_ruleÚpositive_condr  r…   Úr1Úr2Ú	log_stepsr.  ÚsubÚnegative_stepÚpowerr  Úmatch2r³   r©   Ú
integrand2rƒ  r  Úmatch3ÚdenominatorÚconstÚnumer1Únumer2Ústep1Ústep2r›   Úrewritens"                                     rn   Úquadratic_denom_rulerÍ  {  sè  € Ø Ñ€IˆvÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð#Ñ#Ô#€Aà�OŠO˜A  V¨q¡[¡°1Ñ!4Ñ5Ñ6Ô6€Eàñ [Ø˜”(˜E !œH e¨A¤hˆaˆ1ˆÝ! )¨V°Q¸¸1Ñ=Ô=ˆØÔñ 	n !Ô"4ñ 	nØ˜a™C !šGˆMØ¥¤Ð&Ð&Ø#Ð#Ø�q�˜q˜b™œ‘z¥$ q¡'¤'Ñ)Ñ*ˆEÝ˜Q˜B˜q™D‘z”zˆHØ�F˜8‘OÑ$ˆBØ�F˜8‘OÑ$ˆBÝ'¨¨F°F¸8±OÑDÔDÝ*¨B¨3°¸¸BÅÈrÐSYÐ[aÐbjÑ[jÑ@kÔ@kÑlÔlðnˆIà  2™gÐ%ˆI˜Ý# C¨°Ñ;Ô;ˆMØ˜ŠzˆzÝ  s°UÐ;Ñ;Ô;�	Ý 1°)¸VÀUÈCÐQ^Ñ _Ô _�Ý'¨	°6¸9ÀmÑTÔTˆMØ¥¤Ð'Ð'Ø$Ð$Ý  ¨F°lÀMÐ5RÐUbÕdeÔdjÐTkÐ4lÑmÔmÐmå˜) V¨V°RÑ8Ô8ˆØ�Š6ˆ6Ý% i°¸¸1¹¸fÀb¹jÈ%ÑPÔPˆEå˜Y¨°,ÅÀ1ÀaÁÄÐ1IÈEÐSWÈ=Ð0YÑZÔZÐZåˆS˜6˜(Ð#Ñ#Ô#€AØ�_Š_˜Q ! f°¡k¡/°A¸±JÑ">ÀÑ"BÑCÑDÔD€FØð Ø�q”	˜6 !œ9ˆ1ˆØŒ9ð 	ØˆFÝ�#‰JŒJˆØ˜!˜Q˜q™S™'Ñ!ˆØ—^’^ F¨A°°Q°q±S±	©MÑ:Ô:ˆ
Ý" :¨qÑ1Ô1ˆ	Øð 	Ý˜ V¨Q°¸	ÑBÔBÐBàˆFÝˆS˜6˜(Ð#Ñ#Ô#€AØ�_Š_˜a ™i¨!™m°°F¸a±K±À!ÀfÁ*Ñ0LÈqÑ0PÑQÑRÔR€FØñ BØ˜qœ	 6¨!¤9¨f°Q¬i¸À¼ÀFÈ1ÄIÐM‰ˆˆ1ˆa��AØŒ9ð 	ØˆFØ˜& !™)‘m a¨&¡jÑ0°1Ñ4ˆØ�A�a‘C‘ˆØ�Q‘3�v‘:˜a‘<ˆØ�˜‘˜Q‘ˆÝ�#‰JŒJˆÝ�i Ø˜¥n°Q¸±W¸aÑ&@Ô&@ñBô Bˆà�AŠ:ˆ:Ý% e¨F¡l°;Ñ&>ÀØ&+¨V°KÑ-?ÀñHô HˆEàŒ>ð 	ØˆLÝ˜v kÑ1°6Ñ:Ô:ˆÝ˜9 f¨u°e¨nÑ=Ô=ˆØ˜‘< Ñ+¨F°;Ñ,>Ñ>ˆÝ˜9 f¨h¸ÑAÔAÐAà
€Frq   c                óæ  ‡‡‡— | \  }}t          d|g¬¦  «        }t          d|dg¬¦  «        }dx}Šg g g }}}|                     t          ¦  «        D ]Ö}	|	j        |	j        }}
|j        s	||
j        vrŒ!|j        s dS |
                     |||z  z   ¦  «        }|sŒI||         ||         }}||z  |‰z  k    s
‰|z  j	        s dS ‰dk    s‰|z  dk    t          j        u r||c}Š|                     |
¦  «         |                     |¦  «         |                     |j        ¦  «         Œ×‰dk    rdS t          |¦  «        Š|‰|z  z   d‰z  z  }t          d¦  «        Š|                     ˆˆˆfd„t#          |||¦  «        D ¦   «         ¦  «                             |‰‰z  |z
  ‰z  ¦  «        }t%          |‰‰dz
  z  z  ‰z  ‰z  ‰¦  «        }|                     ¦   «         s’t)          ||‰||¦  «        }t+          ‰d¦  «        }|t          j        ur_|                     t,                               |d¦  «        ¦  «        }t%          ||¦  «        }t1          ||||f|t          j        fg¦  «        }|S dS )	z*
    Substitute common (a+b*x)**(1/n)
    rô   r2  rõ   r   NrR   r³   c                óv   •— i | ]5\  }}}|t           j        |z  z  |‰z  t           j        |z  z  ‰‰|z  z  z  “Œ6S rk   )r   r\  )r    r�   rõ   ÚqÚb0Úq0r³   s       €€€rn   ú
<dictcomp>z$sqrt_linear_rule.<locals>.<dictcomp>ç  s]   ø€ ð "Hð "Hð "HÙ&0 d¨A¨qð #'­¬¨q©¡/°A°b±D½A¼EÀ!¹GÑ3DÀQÈÈAÉÁYÑ3Nð "Hð "Hð "Hrq   )r   rP  r   r�   r    râ  ræ  Úis_Rationalrç  r5  r   rO  rÀ   rÐ  rW   r   r­   Úziprÿ  rt   r§   r   rø  rù  r4  )r   rf   rú   rô   rõ   Úa0ra  ÚqsÚbsÚpow_r�   r¯   rç  Úa1Úb1Úu_xrÛ  r‡   r  rN  Ú
simplifiedrK  rÑ  rÒ  r³   s                         @@@rn   rt  rt  È  sß  øøø€ ð �L€IˆqÝˆS˜1˜#ÐÑÔ€AÝˆS˜1˜a˜&Ð!Ñ!Ô!€AØ€K€BˆØ˜˜Bˆrˆ2€EØ—’�sÑ#Ô#ð ð ˆØ”Y ¤ˆdˆØŒ?ð 	˜a tÔ'8Ð8Ð8ØØÔð 	ØˆFˆFØ—
’
˜1˜Q˜q™S™5Ñ!Ô!ˆØð 	ØØ�q”˜5 œ8ˆBˆØˆb‰5�B�r‘EŠ>ˆ> " R¡%Ô!7ˆ>ØˆFˆFØ�Š7ˆ7�r˜"‘u˜q’y¥Q¤VÐ+Ð+Ø˜ˆFˆB�Ø�Š�TÑÔÐØ
�	Š	�"‰ŒˆØ
�	Š	�$”&ÑÔÐÐØ	ˆQ‚w€wØˆÝ˜2‘,”,€BØ��1‘‰9˜˜"™Ñ
€CÝˆc‰
Œ
€AØ—.’.ð "Hð "Hð "Hð "Hð "Hð "HÝ47¸¸rÀ2Ñ4FÔ4Fð"Hñ "Hô "Hñ Iô IßIMÊÈaÐRSÐUWÑRWÐXZÑRZÐ\^ÑQ^ÑI_ÔI_ð å˜[¨¨R°©T©Ñ2°2Ñ5°bÑ8¸!Ñ<Ô<€GØ×%Ò%Ñ'Ô'ð Ý˜9 a¨¨C°Ñ9Ô9ˆÝ˜"˜a‘y”yˆØ�qœvÐ%Ð%Ø"Ÿš­¯ª°b¸!Ñ(<Ô(<Ñ=Ô=ˆJÝ,¨Z¸Ñ;Ô;ˆOÝ  ¨A°°|Ð0DÀÕXYÔX^ÐF_Ð/`ÑaÔaˆDØˆðð rq   c           
     ó  ‡‡‡‡— | \  }Št          d‰g¬¦  «        Št          d‰g¬¦  «        Št          d‰dg¬¦  «        Št          d¦  «        }t          dd„ g¬	¦  «        }|                     |t          ‰‰‰z  z   ‰‰d
z  z  z   ¦  «        |z  z  ¦  «        }|sd S |‰         |‰         |‰         ||         ||         f\  ŠŠŠ}}|                     ‰¦  «        }|€d S t	          ‰d¦  «        }|r|t
          j        u rd }na‰j        r$t          |t          ‰¦  «        |z  z  ‰¦  «        }n6t          t          |t          ‰‰‰z  z   ¦  «        |z  z  ‰¦  «        ¦  «        }dˆˆˆˆfd„}	|dk    ro|‰‰‰z  z   ‰‰d
z  z  z   |dz   d
z  z  z  }
|
                     ¦   «         t          ‰‰‰z  z   ‰‰d
z  z  z   ¦  «        z  } |	|
|¦  «        }t          |‰||¦  «        }n|dk    r |	||¦  «        }nd S t          |||¦  «        S )Nrô   r2  rõ   rö   r   r¾  r
  c                ó   — | j         o| j        S rj   )râ  Úis_oddrã  s    rn   rÂ  z%sqrt_quadratic_rule.<locals>.<lambda>ú  s   € ¨¬Ð(A¸¼€ rq   rä  rø   Ú
numer_polyrY   rf   r   c                ó   •— t          ‰‰‰z  z   ‰‰dz  z  z   ¦  «        }|                      ¦   «         }|dk    �rk|dk    r|                      ¦   «         nt          j        |                      ¦   «         f\  }}|d‰z  z  }||‰z  z
  }d‰z  ‰z  ‰z   |z  }d }	d }
|dk    rzt          d¦  «        }t          dt          |¦  «        z  ||t          j         ¦  «        }t          |‰|‰‰‰z  z   ‰‰dz  z  z   |¦  «        }
|dk    rt          ||z  ‰|||
¦  «        }
|dk    rAt          t          d|z  ‰¦  «        d¬¦  «        }	|dk    rt          ||z  ‰|d|z  |	¦  «        }	|
r>|	r<t          ||z  ||z  d¬¦  «        }t          |‰|t          |‰|
|	g¦  «        ¦  «        }n-|
p|	}n(|                      ¦   «         }t!          |‰‰‰‰|¦  «        }|S )Nrø   rR   r   r³   Fr   r7  )r*   rV   Ú
all_coeffsr   ri  Úas_exprr   rŽ   ry  r§   r„   r  r	  r   r-  r™   rü   )rá  rf   rU  Údegr  r  ÚAÚBÚpre_substituteÚconstant_stepÚlinear_stepr³   Úpow_ruleÚaddr  rý   rô   rõ   rö   rú   s                   €€€€rn   Úsqrt_quadratic_denom_rulez6sqrt_quadratic_rule.<locals>.sqrt_quadratic_denom_rule  s  ø€ Ý�Q�q˜‘s‘U˜1˜Q ™T™6‘\Ñ"Ô"ˆØ×ÒÑ!Ô!ˆØ�!Š8‰8à.1°Qªh¨h�:×(Ò(Ñ*Ô*Ð*½Q¼VÀZ×EWÒEWÑEYÔEYÐ<Z‰DˆAˆqà�1�Q‘3‘ˆAØ�!�A‘#‘ˆAØ ™c !™e A™g u™_ˆNØ)-ˆMØ'+ˆKØ�AŠvˆvÝ˜#‘J”J�Ý$ Q¥t¨A¡w¤w¡Y°°1µq´v°gÑ>Ô>�Ý# N°A°q¸!¸A¸a¹C¹%ÀÀ!ÀQÁ$Á¹,ÈÑQÔQ�Ø˜’6�6Ý"3°A°nÑ4DÀaÈÈNÐ\gÑ"hÔ"h�KØ�AŠvˆvÝ 1µ,¸qÀ¹wÈÑ2JÔ2JÐW\Ð ]Ñ ]Ô ]�Ø˜’6�6Ý$5°a¸±g¸qÀ!ÀQÀuÁWÈmÑ$\Ô$\�MØð 4˜}ð 4Ý˜!˜NÑ*¨A¨e©G¸eÐDÑDÔD�Ý$/°	¸1¸cÅ7È3ÐPQÐT_ÐanÐSoÑCpÔCpÑ$qÔ$q��à"Ð3 m��à×*Ò*Ñ,Ô,ˆFÝ)¨)°Q¸¸1¸aÀÑHÔHˆDØˆrq   rR   r’   )rá  rY   rf   r   )r   rç  r*   Úas_polyr   r   rO  r  rÿ  rt  r	  rä  r-  rP  )r   r  rf   r¾  r
  rç  Úf_polyrN  rK  rí  rá  r.  r‡   rJ  rô   rõ   rö   rú   s                 @@@@rn   r  r  ô  sn  øøøø€ Ø�L€IˆqÝˆS˜1˜#ÐÑÔ€AÝˆS˜1˜#ÐÑÔ€AÝˆS˜1˜a˜&Ð!Ñ!Ô!€AÝˆS‰	Œ	€AÝˆSÐAÐAÐBÐCÑCÔC€AØ�OŠO˜A�d 1 Q q¡S¡5¨¨1¨a©4©¡<Ñ0Ô0°!Ñ3Ñ3Ñ4Ô4€EØð ØˆØ˜!”H˜e Aœh¨¨a¬°%¸´(¸EÀ!¼HÐD�M€A€qˆ!ˆQ�Ø�YŠY�q‰\Œ\€FØ€~Øˆå�a˜‘8”8€LØð N˜­¬Ð/Ð/ØˆˆØ	
Œð NÝ(¨­4°©7¬7°A©:©°qÑ9Ô9ˆˆå*­<¸½$¸qÀÀ1Á¹u¹+¼+Àq¹.Ñ8HÈ!Ñ+LÔ+LÑMÔMˆðð ð ð ð ð ð ð ð ð@ 	ˆ1‚u€uØ˜q  1¡™u Q q¨!¡t¡V™|°°!±°Q©wÑ7Ñ7ˆ
Ø×&Ò&Ñ(Ô(­¨a°°!±©e°A°a¸±d±F©lÑ);Ô);Ñ;ˆ	Ø+Ð+¨J¸	ÑBÔBˆÝ" 9¨a°¸GÑDÔDˆˆØ	
ˆbŠˆØ0Ð0°¸ÑCÔCˆˆàˆÝ ¨l¸OÑLÔLÐLrq   útuple[Expr, Symbol]c                ó¤  — | \  }}t          |t          ¦  «        �r0|j        d         |k    �r |j        t          k    rt          ||¦  «        S |j        t          k    rt          ||¦  «        S t          d¦  «        }|j        t          k    rat	          |¦  «        t          |¦  «        z  }t          |||t          |||t          |¦  «        t          d|z  ||¦  «        ¦  «        ¦  «        S |j        t          k    rat          |¦  «        t	          |¦  «        z  }t          |||t          |||t	          |¦  «        t          d|z  ||¦  «        ¦  «        ¦  «        S |                     t          ¦  «        }|j        t          k    rnt          |||t          |||t          |dz  ¦  «        t!          d|dz  dz   z  |t#          d¦  «        t"          j        t"          j        ¦  «        ¦  «        ¦  «        S |j        t&          k    rIt          |||t          |||t          |dz  ¦  «        t          d|z  ||¦  «        ¦  «        ¦  «        S d S d S d S )Nr   r³   rR   rø   )r%  r"   r»  rM  r'   rà   r$   rä   r   r(   r-  r§   rê   r%   r  r&   r]  r   r\  r#   )r   rf   rµ  r³   r.  s        rn   Úhyperbolic_rulerò  7  s?  € Ø Ñ€IˆvÝ�)Õ/Ñ0Ô0ñ 3°Y´^ÀAÔ5FÈ&Ò5PÑ5PØŒ>�TÒ!Ð!Ý˜I vÑ.Ô.Ð.ØŒ>�TÒ!Ð!Ý˜I vÑ.Ô.Ð.Ý�#‰JŒJˆØŒ>�TÒ!Ð!Ý˜V™œ¥T¨&¡\¤\Ñ1ˆIÝ˜y¨&°)Ý˜ F¨A­t°F©|¬|½^ÈAÈaÉCÐQRÐTUÑ=VÔ=VÑWÔWñYô Yð YàŒ>�TÒ!Ð!Ý˜V™œ¥T¨&¡\¤\Ñ1ˆIÝ˜y¨&°)Ý˜ F¨A­t°F©|¬|½^ÈAÈaÉCÐQRÐTUÑ=VÔ=VÑWÔWñYô Yð Yð "×)Ò)­$Ñ/Ô/ˆIØŒ~¥Ò%Ð%Ý" 9¨f°iÝ˜Y¨°µ4¸¸q¹±>´>Ý! ! Q¨¡T¨A¡X¡,°µ1°Q±4´4½¼ÅÄÑFÔFñHô HñIô Ið Ið Œ~¥Ò%Ð%Ý" 9¨f°iÝ˜Y¨°µ4¸¸q¹±>´>Ý% a¨¡c¨1¨aÑ0Ô0ñ2ô 2ñ3ô 3ð 3ð+3ð 3Ð5PÐ5Pð( &Ð%rq   c                óª   — t          d| g¬¦  «        }t          d| g¬¦  «        }t          d| gd„ g¬¦  «        }t          d| gd„ g¬¦  «        }||||fS )	Nrô   r2  rõ   r—   c                ó,   — t          | t          ¦  «        S rj   ©r%  r   rã  s    rn   rÂ  zmake_wilds.<locals>.<lambda>V  ó   € ½*ÀQÍÑ:PÔ:P€ rq   r0  r
  c                ó,   — t          | t          ¦  «        S rj   rõ  rã  s    rn   rÂ  zmake_wilds.<locals>.<lambda>W  rö  rq   )r   )rµ  rô   rõ   r—   r
  s        rn   Ú
make_wildsrø  R  sr   € åˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð0PÐ0PÐ/QÐRÑRÔR€AÝˆS˜6˜(Ð0PÐ0PÐ/QÐRÑRÔR€Aàˆa��Aˆ:Ðrq   c                óŽ   — t          | ¦  «        \  }}}}t          || z  ¦  «        |z  t          || z  ¦  «        |z  z  }|||||fS rj   )rø  r.   r-   ©rµ  rô   rõ   r—   r
  rF  s         rn   Úsincos_patternrû  [  óP   € å˜FÑ#Ô#�J€A€qˆ!ˆQÝ�!�F‘(‰mŒm˜QÑ¥ Q v¡X¡¤°Ñ!1Ñ1€Gà�A�q˜!˜QÐÐrq   c                óŽ   — t          | ¦  «        \  }}}}t          || z  ¦  «        |z  t          || z  ¦  «        |z  z  }|||||fS rj   )rø  r/   r2   rú  s         rn   Útansec_patternrþ  b  rü  rq   c                óŽ   — t          | ¦  «        \  }}}}t          || z  ¦  «        |z  t          || z  ¦  «        |z  z  }|||||fS rj   )rø  r0   r1   rú  s         rn   Úcotcsc_patternr   i  rü  rq   c                ó¤   — t          d| g¬¦  «        }t          d| g¬¦  «        }t          d¦  «        }t          || z  |z   ¦  «        |z  }||||fS )Nr—   r2  rõ   r  )r   r9   )rµ  r—   rõ   r  rF  s        rn   Úheaviside_patternr  p  s^   € åˆS˜6˜(Ð#Ñ#Ô#€AÝˆS˜6˜(Ð#Ñ#Ô#€AÝˆS‰	Œ	€AÝ˜˜&™ 1™Ñ%Ô%¨Ñ)€Gà�A�q˜!ÐÐrq   c                ó   ‡ — ˆ fd„}|S )Nc                ó   •—  ‰| Ž S rj   rk   )r»  rM  s    €rn   Ú
uncurry_rlzuncurry.<locals>.uncurry_rlz  s   ø€ Øˆt�Tˆ{Ðrq   rk   )rM  r  s   ` rn   Úuncurryr  y  s"   ø€ ðð ð ð ð àÐrq   c                ó   ‡ — ˆ fd„}|S )Nc           	     ó†   •— | \  }}}}}} ‰||||||¦  «        }||k    r t          |||t          ||¦  «        ¦  «        S d S rj   )r-  rÿ  )	r»  rô   rõ   r—   r
  rf   rµ  r.  r  s	           €rn   Útrig_rewriter_rlz'trig_rewriter.<locals>.trig_rewriter_rl  s`   ø€ Ø(,Ñ%ˆˆ1ˆa��I˜vØ�G˜A˜q ! Q¨	°6Ñ:Ô:ˆ	Ø˜	Ò!Ð!Ý˜y¨&°)½^ÈIÐW]Ñ=^Ô=^Ñ_Ô_Ð_ð "Ð!rq   rk   )r  r	  s   ` rn   Útrig_rewriterr
  ~  s)   ø€ ð`ð `ð `ð `ð `ð
 Ðrq   c                ó:   — |j         o|j         o|j        o|j        S rj   )Úis_evenr5  ©rô   rõ   r—   r
  r  r  s         rn   rÂ  rÂ  ‡  s*   € ˜QœYð *¨1¬9ð *ØÔð*ØÔ)ð rq   c                óˆ   — dt          d| z  |z  ¦  «        z
  dz  |dz  z  dt          d|z  |z  ¦  «        z   dz  |dz  z  z  S ru  )r-   ©rô   rõ   r—   r
  r  rµ  s         rn   rÂ  rÂ  ‹  sQ   €  q­3¨q°©s°6©z©?¬?Ñ':¸aÑ&?ÀQÈÁUÑ%KØ'(­3¨q°©s°6©z©?¬?Ñ':¸aÑ&?ÀQÈÁUÑ%Kñ%M€ rq   c                ó   — |j         o|dk    S ©Nrì  ©rà  r  s         rn   rÂ  rÂ  Ž  ó   € ¸1¼8Ð;NÈÈQÊ€ rq   c                ó–   — dt          | |z  ¦  «        dz  z
  |dz
  dz  z  t          | |z  ¦  «        z  t          ||z  ¦  «        |z  z  S ru  )r-   r.   r  s         rn   rÂ  rÂ  ‘  óP   €  Q­¨Q¨v©X©¬¸Ñ)9Ñ%9¸aÀ!¹eÀq¹[Ñ$IÝ$'¨¨&©¡M¤Mñ%2å$'¨¨&©¡M¤M°QÑ$6ñ%7€ rq   c                ó   — |j         o|dk    S r  r  r  s         rn   rÂ  rÂ  •  r  rq   c                ó–   — dt          ||z  ¦  «        dz  z
  |dz
  dz  z  t          ||z  ¦  «        z  t          | |z  ¦  «        |z  z  S ru  )r.   r-   r  s         rn   rÂ  rÂ  ˜  r  rq   c                ó   — |j         o|dk    S ©Nre  ©r  r  s         rn   rÂ  rÂ  œ  ó   € ¸A¼IÐ<PÈ!ÈqÊ&€ rq   c                óœ   — dt          ||z  ¦  «        dz  z   |dz  dz
  z  t          ||z  ¦  «        dz  z  t          | |z  ¦  «        |z  z  S ru  )r/   r2   r  s         rn   rÂ  rÂ  ž  óU   €  Q­¨Q¨v©X©¬¸Ñ)9Ñ%9¸qÀ¹sÀQ¹wÑ$GÝ$'¨¨&©¡M¤M°1Ñ$4ñ%5å$'¨¨&©¡M¤M°QÑ$6ñ%7€ rq   c                ó   — |j         S rj   r  r  s         rn   rÂ  rÂ  ¢  ó   € ¸1¼8€ rq   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         rn   rÂ  rÂ  ¤  sP   € ¥S¨¨6©¡]¤]°AÑ%5¸Ñ%9ÀÀAÁÈ¹{Ñ$KÝ%(¨¨6©¡]¤]ñ%3å%(¨¨6©¡]¤]°aÑ%7ñ%8€ rq   c                ó   — |dk    o|dk    S r¶  rk   r  s         rn   rÂ  rÂ  ¨  s   € ¸AÀºFÐ<MÀqÈAÂv€ rq   c                ó2   — t          | |z  ¦  «        dz  dz
  S r!  )r2   r  s         rn   rÂ  rÂ  ª  s   € ¥C¨¨&©¡M¤M°1Ñ$4°qÑ$8€ rq   c                ó   — |j         o|dk    S r  r  r  s         rn   rÂ  rÂ  ¬  r  rq   c                óœ   — dt          ||z  ¦  «        dz  z   |dz  dz
  z  t          ||z  ¦  «        dz  z  t          | |z  ¦  «        |z  z  S ru  )r0   r1   r  s         rn   rÂ  rÂ  ®  r  rq   c                ó   — |j         S rj   r  r  s         rn   rÂ  rÂ  ²  r  rq   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         rn   rÂ  rÂ  ´  sP   € ¥S¨¨6©¡]¤]°AÑ%5¸Ñ%9ÀÀAÁÈ¹{Ñ$KÝ$'¨¨&©¡M¤Mñ%2å$'¨¨&©¡M¤M°QÑ$6ñ%7€ rq   c           	     óz  ‡‡— | \  Š}t          ˆfd„t          t          fD ¦   «         ¦  «        rŒt          |¦  «        \  }}}}}‰                     |¦  «        Š‰sd S  t          t          t          t          t          t          t          i¦  «        t          ˆfd„||||fD ¦   «         ‰|gz   ¦  «        ¦  «        S d S )Nc              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S rj   rî  r’  s     €rn   r¡   z#trig_sincos_rule.<locals>.<genexpr>»  ó/   øè è € Ð
0Ð
0 ˆ9�=Š=˜ÑÔÐ
0Ð
0Ð
0Ð
0Ð
0Ð
0rq   c                óP   •— g | ]"}‰                      |t          j        ¦  «        ‘Œ#S rk   rr  rs  s     €rn   r9  z$trig_sincos_rule.<locals>.<listcomp>Æ  ó)   ø€ Ð8Ð8Ð8 aˆU�YŠY�q�!œ&Ñ!Ô!Ð8Ð8Ð8rq   )r¥   r.   r-   rû  rç  r  Úsincos_botheven_conditionÚsincos_bothevenÚsincos_sinodd_conditionÚsincos_sinoddÚsincos_cosodd_conditionÚsincos_cosoddrA  ©	r   rµ  rF  rô   rõ   r—   r
  rf   rç  s	          @@rn   Útrig_sincos_ruler4  ¸  sæ   øø€ Ø Ñ€Iˆvå
Ð
0Ð
0Ð
0Ð
0¥c­3 ZÐ
0Ñ
0Ô
0Ñ0Ô0ð "Ý,¨VÑ4Ô4Ñˆ��A�q˜!Ø—’ Ñ(Ô(ˆØð 	ØˆFð�{Ý%¥Ý#¥]Ý#¥]ð
ñ ô õ Ø8Ð8Ð8Ð8¨A¨q°!°Q¨<Ð8Ñ8Ô8Ø˜Ðñ ñ!ô !ñ	"ô "ð 	"ð"ð "rq   c           	     óâ  ‡‡— | \  Š}‰                      dt          |¦  «        z  t          |¦  «        i¦  «        Št          ˆfd„t          t          fD ¦   «         ¦  «        rŒt          |¦  «        \  }}}}}‰                     |¦  «        Š‰sd S  t          t          t          t          t          t          t          i¦  «        t          ˆfd„||||fD ¦   «         ‰|gz   ¦  «        ¦  «        S d S )NrR   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S rj   rî  r’  s     €rn   r¡   z#trig_tansec_rule.<locals>.<genexpr>Ð  r*  rq   c                óP   •— g | ]"}‰                      |t          j        ¦  «        ‘Œ#S rk   rr  rs  s     €rn   r9  z$trig_tansec_rule.<locals>.<listcomp>Û  r,  rq   )r­   r-   r2   r¥   r/   rþ  rç  r  Útansec_tanodd_conditionÚtansec_tanoddÚtansec_seceven_conditionÚtansec_secevenÚtan_tansquared_conditionÚtan_tansquaredrA  r3  s	          @@rn   Útrig_tansec_ruler>  É  s  øø€ Ø Ñ€Iˆvà—’Ø	�C�‰KŒK‰�˜V™œð ñ ô €Iõ Ð
0Ð
0Ð
0Ð
0¥c­3 ZÐ
0Ñ
0Ô
0Ñ0Ô0ð "Ý,¨VÑ4Ô4Ñˆ��A�q˜!Ø—’ Ñ(Ô(ˆØð 	ØˆFð�{Ý#¥]Ý$¥nÝ$¥nð
ñ ô õ Ø8Ð8Ð8Ð8¨A¨q°!°Q¨<Ð8Ñ8Ô8Ø˜Ðñ ñ!ô !ñ	"ô "ð 	"ð"ð "rq   c           
     ó`  ‡‡— | \  Š}‰                      dt          |¦  «        z  t          |¦  «        dt          |¦  «        z  t	          |¦  «        t          |¦  «        t          |¦  «        z  t	          |¦  «        i¦  «        Št          ˆfd„t          t          fD ¦   «         ¦  «        r€t          |¦  «        \  }}}}}‰                     |¦  «        Š‰sd S  t          t          t          t          t          i¦  «        t          ˆfd„||||fD ¦   «         ‰|gz   ¦  «        ¦  «        S d S )NrR   c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S rj   rî  r’  s     €rn   r¡   z#trig_cotcsc_rule.<locals>.<genexpr>æ  r*  rq   c                óP   •— g | ]"}‰                      |t          j        ¦  «        ‘Œ#S rk   rr  rs  s     €rn   r9  z$trig_cotcsc_rule.<locals>.<listcomp>ð  r,  rq   )r­   r.   r1   r/   r0   r-   r¥   r   rç  r  Úcotcsc_cotodd_conditionÚcotcsc_cotoddÚcotcsc_csceven_conditionÚcotcsc_cscevenrA  r3  s	          @@rn   Útrig_cotcsc_rulerF  Þ  sA  øø€ Ø Ñ€IˆvØ—’Ø	�C�‰KŒK‰�˜V™œØ	�C�‰KŒK‰�˜V™œÝˆF‰Œ•c˜&‘k”kÑ!¥3 v¡;¤;ð ñ ô €Iõ Ð
0Ð
0Ð
0Ð
0¥c­3 ZÐ
0Ñ
0Ô
0Ñ0Ô0ð "Ý,¨VÑ4Ô4Ñˆ��A�q˜!Ø—’ Ñ(Ô(ˆØð 	ØˆFð�{Ý#¥]Ý$¥nð
ñ ô õ Ø8Ð8Ð8Ð8¨A¨q°!°Q¨<Ð8Ñ8Ô8Ø˜Ðñ ñ!ô !ñ"ô "ð 	"ð"ð "rq   c                ó8  — | \  }}t          dt          d|z  ¦  «        g¬¦  «        }|                     t          d|z  ¦  «        |z  ¦  «        }|rHdt          |¦  «        z  t          |¦  «        z  t          d|z  ¦  «        z  }t	          ||z  |¦  «        S d S )Nrô   rø   r2  )r   r.   rç  r-   rÿ  )r   rf   rµ  rô   rç  Ú
sin_doubles         rn   Útrig_sindouble_rulerI  ó  s™   € Ø Ñ€IˆvÝˆS�3˜q ™x™=œ=˜/Ð*Ñ*Ô*€AØ�OŠO�C  &¡™MœM¨!™OÑ,Ô,€EØð >Ø•s˜6‘{”{‘]¥3 v¡;¤;Ñ.­s°1°V±8©}¬}Ñ<ˆ
Ý˜i¨*Ñ4°fÑ=Ô=Ð=ð>ð >rq   c           	     óÈ   —  t          t          t          ¦  «        t          t          ¦  «        t          t          ¦  «        t          t
          ¦  «        ¦  «        | ¦  «        S rj   )r_   r`   r4  r>  rF  rI  r  s    rn   Útrig_powers_products_rulerK  û  sV   € ð2�6•)Õ,Ñ-Ô-ÝÕ,Ñ-Ô-ÝÕ,Ñ-Ô-ÝÕ/Ñ0Ô0ñ2ô 2ð 3;ñ<ô <ð <rq   c           
     óÒ  — | \  }}t          dd|g¬¦  «        }t          dd|g¬¦  «        }t          d¦  «        }|||dz  z  z   }|                     |¦  «        }|D �]}|                     |¦  «        }	|	                     |t
          j        ¦  «        }
|	                     |t
          j        ¦  «        }|
j        r|
dk    p|
j        }|j        r|dk    p|j        }|
j        r|
dk     p|
j	        }|j        r|dk     p|j	        }d }|r4|r2t          |
¦  «        t          |¦  «        z  t          |¦  «        z  }d}nŸ|rN|rLt          |
¦  «        t          | ¦  «        z  }|t          |¦  «        z  }t          || k    ||k     ¦  «        }nO|rM|rKt          |
 ¦  «        t          |¦  «        z  }|t          |¦  «        z  }t          || k    ||k     ¦  «        }|�r†i }t          t          t          t          t           t"          fD ]S} ||¦  «        |t           ||¦  «        dz  ¦  «        <   d ||¦  «        z  |t           ||¦  «        d	z  ¦  «        <   ŒT|                     ||¦  «                             ¦   «         }t)          ||¦  «        }|                     |¦  «        s½|t-          ||¦  «        z  }|                     ¦   «         }|                     dt          |¦  «        z  ¦  «        }|r4|                     dt          |¦  «        z  t          |¦  «        i¦  «        }t1          ||¦  «        }|                     ¦   «         st5          |||||||¦  «        c S �Œ
d S )
Nrô   r   r2  rõ   rL  rø   TrR   rÿ   )r   r   rP  rç  r$  r   ri  Ú	is_numberrx  Úis_negativer*   r/   r.   rT   r2   r-   r1   r0   r­   rQ  rË  rï  r¸  r®  rÿ  rt   rK  )r   rf   rµ  ræ  rç  rL  Útarget_patternÚmatchesr)  rç  rô   rõ   Ú
a_positiveÚ
b_positiveÚ
a_negativeÚ
b_negativeÚx_funcrN  r…   Úsubstitutionsr¾  ÚreplacedÚsecantsr‡   s                           rn   Útrig_substitution_rulerY    s˜  € Ø Ñ€IˆvÝˆS˜1˜f˜+Ð&Ñ&Ô&€AÝˆS˜1˜f˜+Ð&Ñ&Ô&€AÝ�'‰NŒN€EØ˜˜6 1™9™‘_€Nà�nŠn˜^Ñ,Ô,€GØð 2Gñ 2GˆØ—
’
˜>Ñ*Ô*ˆØ�IŠI�a�œÑ Ô ˆØ�IŠI�a�œÑ Ô ˆà”{Ð, q¨1¢uÐ>°´ˆ
Ø”{Ð, q¨1¢uÐ>°´ˆ
Ø”{Ð, q¨1¢uÐ>°´ˆ
Ø”{Ð, q¨1¢uÐ>°´ˆ
ØˆØð 	E˜*ð 	Eå˜1‘g”g�d 1™gœg‘o­¨U©¬Ñ3ˆFð ˆKˆKØð 		E˜Jð 		Eå˜A‘w”w�t Q B™xœxÑ'ˆHØ¥ E¡
¤
Ñ*ˆFÝ˜f¨ yÒ0°&¸8Ò2CÑDÔDˆKˆKØð 	E˜Jð 	Eå˜Q˜B‘x”x¥ Q¡¤Ñ'ˆHØ¥ E¡
¤
Ñ*ˆFÝ˜f¨ yÒ0°&¸8Ò2CÑDÔDˆKØñ 	Gð ˆMÝ�3¥Ý�3¥ð%ð Að A�à34°1°U±8´8��d 1 1 U¡8¤8¨Q¡;Ñ/Ô/Ñ0Ø67¸¸¸%¹¼±j��d 1 1 U¡8¤8¨b¡>Ñ2Ô2Ñ3Ð3à —~’~ f¨fÑ5Ô5×>Ò>Ñ@Ô@ˆHÝ" 8¨]Ñ;Ô;ˆHØ—<’< Ñ'Ô'ð GØ�K¨°Ñ6Ô6Ñ6�Ø#×,Ò,Ñ.Ô.�Ø"Ÿ-š-¨­#¨e©*¬*©Ñ5Ô5�Øð Ø'×0Ò0Ø�#˜e™*œ*™¥c¨%¡j¤jð2ñ  ô  �Hõ )¨°5Ñ9Ô9�Ø×1Ò1Ñ3Ô3ð GÝ/°	¸6Ø˜v x°¸+ñGô Gð Gð Gð Gùðc2Gð 2Grq   c                ó  — | \  }}t          |¦  «        \  }}}}|                     |¦  «        }|rOd||         k    rEt          ||         |¦  «        }||         ||         }}t          ||||z  |z   | |z  |¦  «        S d S d S r  )r  rç  rÿ  r?  )	r   rf   rµ  rF  r—   rõ   r  rç  r‡   s	            rn   Úheaviside_ruler[  =  s    € Ø Ñ€IˆvÝ(¨Ñ0Ô0Ñ€GˆQ��1Ø�OŠO˜GÑ$Ô$€EØð M��e˜A”h’�å   q¤¨6Ñ2Ô2ˆØ�QŒx˜˜qœˆ1ˆÝ˜Y¨°°&±¸1±¸q¸bÀ¹dÀGÑLÔLÐLð	Mð M��rq   c                ó  — | \  }}t          |j        ¦  «        dk    rt          j        }n|j        d         }|j        r|dk     rd S t          d|g¬¦  «        t          d|dg¬¦  «        }}|j        d                              |||z  z   ¦  «        }|sd S ||         ||         }}t          |d¦  «        }|t          j        u rd }nt          t          ||¦  «        |¦  «        }t          |||||¦  «        }	t          ||	|¦  «        S )NrR   r   rô   r2  rõ   )r  r»  r   ri  râ  r   rç  r   rO  r€   r:   rE  rP  )
r   rf   rú   r
  rô   rõ   rç  rN  rK  rJ  s
             rn   Údirac_delta_ruler]  H  s  € Ø�L€IˆqÝ
ˆ9Œ>ÑÔ˜aÒÐÝŒFˆˆàŒN˜1ÔˆØŒ<ð ˜1˜qš5˜5ØˆÝ�˜a˜SÐ!Ñ!Ô!¥4¨°a¸°VÐ#<Ñ#<Ô#<€q€AØŒN˜1Ô×#Ò# A a¨¡c¡EÑ*Ô*€EØð ØˆØ�Œ8�U˜1”X€q€AÝ�a˜‘8”8€LØ•q”vÐÐØˆˆå&¥z°!°QÑ'7Ô'7¸Ñ;Ô;ˆÝ! )¨Q°°1°aÑ8Ô8€LÝ ¨l¸OÑLÔLÐLrq   c           
     óê  — | \  }}t          d¦  «        }t          |||¦  «        }d}|�rÆt          d¦  «         g }|D �]ƒ\  }}}	t          |	|¦  «        }
|dz   }t          d                     ||
¦  «        ¦  «         |
                     ¦   «         rŒTt          |dz
  ¦  «        dk    ró|                     ¦   «         \  }}|
rt          ||	z  |||	|
¦  «        }
|j	        r½g }g }t          |t          ¦  «        r|j        }n|                     |¦  «         |D ]\}t          |j        ¦  «        sFt          t!          ||d¦  «        |¦  «        }|r%|                     |t#          |d¦  «        f¦  «         Œ]|                     |
df¦  «         t%          |	||¦  «        }
|                     t'          |||||
¦  «        ¦  «         �Œ…t)          |¦  «        dk    rt+          |||¦  «        S |r
|d         S d S d S )Nr³   r   zList of Substitution RulesrR   r  T)r   rü  rc   rÿ  rÓ  rt   r\   rØ  r„   ræ  r%  r   r»  rÀ   r   r  rË  r   r4  r§   r  r  )r   rf   rµ  r¨   rV  r+  Úwaysr©   rö   rÛ  Úsubruler<  rU  Ú	piecewiseÚcould_be_zeror)  r‡   s                    rn   Úsubstitution_rulerc  ^  sJ  € Ø Ñ€Iˆvå�#‰JŒJ€EÝ& y°&¸%Ñ@Ô@€MØ€EØñ *ÝÐ*Ñ+Ô+Ð+ØˆØ&3ð "	Jñ "	JÑ"ˆF�A�{Ý$ [°%Ñ8Ô8ˆGØ˜A‘IˆEÝ�-×&Ò& u¨gÑ6Ô6Ñ7Ô7Ð7à×)Ò)Ñ+Ô+ð Øå˜˜A™‰Œ !Ò#Ð#Ø×+Ò+Ñ-Ô-‘��5Øð aÝ/°°K±ÀÈÈ;ÐX_Ñ`Ô`�GàÔ%ð LØ "�IØ$&�Må! %­Ñ-Ô-ð 4Ø(-¬
˜˜à%×,Ò,¨UÑ3Ô3Ð3à -ð #ð #˜Ý(¨¬Ñ6Ô6ð #Ý&4µ[ÀÈDÐRSÑ5TÔ5TÐV\Ñ&]Ô&]˜Gà&ð #Ø )× 0Ò 0Ø$+Ý$& t¨Q¡K¤Kð2"ñ !#ô !#ð !#øð ×$Ò$ g¨t _Ñ5Ô5Ð5Ý+¨K¸ÀÑKÔK�Gà�KŠK�˜i¨°¸ÀÑHÔHÑIÔIÐIÑIåˆt‰9Œ9�qŠ=ˆ=Ý" 9¨f°dÑ;Ô;Ð;Øð 	Ø˜”7ˆNðU*ð *ðR	ð 	rq   c                ó*   — |                       ¦   «         S rj   )rÖ  ©rf   rµ  s     rn   rÂ  rÂ  ’  s   € ˜i×<Ò<Ñ>Ô>€ rq   c                ó,   — |                       |¦  «        S rj   )Úapartre  s     rn   rÂ  rÂ  “  s   € ˜iŸošo¨fÑ5Ô5€ rq   c                ó   — dS r   rk   re  s     rn   rÂ  rÂ  ˜  s   € ˜d€ rq   c                ó*   — |                       ¦   «         S rj   )rÔ  re  s     rn   rÂ  rÂ  ™  ó   € ˜i×.Ò.Ñ0Ô0€ rq   c                ó|   ‡— t          | t          t          f¦  «        pt          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3  óP   •K  — | ] }|j         p|                     ‰¦  «        V — Œ!d S rj   )r«   rœ  r¹  s     €rn   r¡   z<lambda>.<locals>.<genexpr>�  s:   øè è € Ð0sÐ0sÐ]`°´Ð1X¸s×?PÒ?PÐQWÑ?XÔ?XÐ0sÐ0sÐ0sÐ0sÐ0sÐ0srq   )r%  r   r   rž  r»  re  s    `rn   rÂ  rÂ  œ  s?   ø€ Ý�9�s¥C˜jÑ)Ô)Ðs­SÐ0sÐ0sÐ0sÐ0sÐdmÔdrÐ0sÑ0sÔ0sÑ-sÔ-sð rq   c                ó*   — |                       ¦   «         S rj   ©Úexpandre  s     rn   rÂ  rÂ  ž  rj  rq   c                ól   — t          d„ |                      t          ¦  «        D ¦   «         ¦  «        dk    S )Nc                ó(   — h | ]}|j         d          ’ŒS )r   )r»  r›  s     rn   rZ  z<lambda>.<locals>.<setcomp>£  s   € ÐGÐGÐG˜1ˆQŒV�AŒYÐGÐGÐGrq   rR   )r  Úatomsr,   re  s     rn   rÂ  rÂ  ¢  s3   € ÝÐGÐG 	§¢Õ0EÑ FÔ FÐGÑGÔGÑHÔHÈ1ÒLð rq   c                ó.   — |                       d¬¦  «        S )NT)Útrigrn  re  s     rn   rÂ  rÂ  ¤  s   € ˜i×.Ò.°DÐ.Ñ9Ô9€ rq   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   rf   Údiff_variablesÚundifferentiated_functionÚintegrand_variabless        rn   Úderivative_rulerz  ¦  sg   € Ø˜”€IØÔ(€NØ )¤ÐØ3Ô@Ðà„Ð-Ð-Ð-ØŒ?˜nÐ,Ð,Ý! 8Ð,Ð,å 	¨8¬?Ñ;Ô;Ð;å˜XÐ&Ð&rq   c           	     ó   — | \  }}|                      dt          |¦  «        z  ¦  «        rS|                     dt          |¦  «        z  t          |¦  «        ¦  «        }t	          |||t          ||¦  «        ¦  «        S d S r$  )rç  r-   r­   r2   r-  rÿ  )r   rf   rµ  r.  s       rn   Úrewrites_ruler|  ´  sy   € Ø Ñ€Iˆvà‡‚�q�˜V™œ‘}Ñ%Ô%ð \Ø—N’N 1¥S¨¡[¤[¡=µ#°f±+´+Ñ>Ô>ˆ	Ý˜9 f¨i½È	ÐSYÑ9ZÔ9ZÑ[Ô[Ð[ð\ð \rq   c                ó   — t          | Ž S rj   )r  r  s    rn   Úfallback_ruler~  »  r  rq   zdict[Expr, Expr | None]Ú_integral_cachezdict[Expr, int]r°  Úzc                ó  ‡‡— |                       ‰t          i¦  «        }|t          v rEt          |         €t          | ‰¦  «        S t          |                               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          ¢R Ž 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          ||¦  «        r|c S Œt          |¦  «        S rj   )rf   ræ  r   r   r,   rP   r%  Útype)r   rf   r•  rµ  s      €rn   r  zintegral_steps.<locals>.key  sb   ø€ ØÔ&ˆ	à˜Ô/Ð/Ð/ÝˆMÝÕ1Õ3GÐHð 	ð 	ˆCÝ˜) SÑ)Ô)ð Ø�
�
�
ðå�I‰ŒÐrq   c                 ó   •‡ — ˆˆ fd„}|S )Nc                ó>   •—  ‰| ¦  «        }|ot          |‰¦  «        S rj   )Ú
issubclass)r   rz  r  Úklassess     €€rn   Ú_integral_is_subclasszKintegral_steps.<locals>.integral_is_subclass.<locals>._integral_is_subclass  s%   ø€ Ø��H‘”ˆAØÐ/� A wÑ/Ô/Ð/rq   rk   )r‡  rˆ  r  s   ` €rn   Úintegral_is_subclassz,integral_steps.<locals>.integral_is_subclass  s*   øø€ ð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð %Ð$rq   )3r®  r¯  r  r  r	  r_   r`   rI  r^   r   r  r  rt  rÍ  r   r    r!  r   r�  r   r„  r¹  r[  r  r   rz  r,   r·  r9   r:   r]  rP   r)  r   r  rò  r  r|  rc  ra   Úpartial_fractions_ruleÚcancel_ruler!   ró  r´  Údistribute_expand_rulerK  Útrig_expand_rulerg  rY  r~  )rf   rµ  Úoptionsr±  r   r‰  r®   r  s    `     @rn   rÿ  rÿ  Å  sô  øø€ ðZ ×!Ò! 6­<Ð"8Ñ9Ô9€HØ•?Ð"Ð"Ý˜8Ô$Ð,å 	¨6Ñ2Ô2Ð2õ $ HÔ-×6Ò6µ|ÀVÑLÔLØðð ð %)�˜Ñ!å˜I vÑ.Ô.€Hðð ð ð ð ð%ð %ð %ð %ð %ð-�VÝÕ'Ñ(Ô(Ý•&˜Ý•�	¥*Ñ-Ô-­yÕ9JÑ/KÔ/KÝ!Õ"2Ñ3Ô3Ý!Õ"6Ñ7Ô7ñ9ô 9õ •JÝ•Ý•Ý•�	¥(Ñ+Ô+­YÕ7HÑ-IÔ-IÝ!¥.Ñ1Ô1µ9Õ=QÑ3RÔ3RÝ!Õ"2Ñ3Ô3Ý!Õ"5Ñ6Ô6ñ8ô 8õ �Ý!¥9Ý•~ÝÕ(Ý Õ"6Ý•Mð!
ñ ô ñ 	ô 	õ$ 	Ý•iÑ Ô Ý•oÑ&Ô&Ý•lÝÝ!ÝØ(Ð(­­cÑ2Ô2Ý*ñ,ô ,õ Ø(Ð(­­cÑ2Ô2Ýñ!ô !õ Ø(Ð(­­cð -Ý+ð-ð -ð -åñ ô  õ Ø(Ð(­­cÑ2Ô2Ý*ñ,ô ,õ *Ý ñ#ô ñ ô õ& •iÐ 4Ð 4µS½#Ñ >Ô >ÅÑPÔPÑQÔQÝÕ,Ñ-Ô-ñ/	
ô 	
õ2 	ñ[-ô -ðZ  ñ[-!ô -!€Fõ\ 	˜Ð!Ø€Mrq   c                óä  — t          | |¦  «                             ¦   «         }t                               ¦   «          t	          |t
          ¦  «        rŸt          |j        ¦  «        dk    r‡|j        d         d         }t	          |t          ¦  «        r_|j        d         d         dk    rH| 	                    |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ÿ  ro   r°  Úclearr%  r+   r  r»  r   rM  r   )r¾  r*  r®   r8  s       rn   Úmanualintegrater‘  C  sÕ   € õb ˜A˜sÑ#Ô#×(Ò(Ñ*Ô*€Få×ÒÑÔÐå�&�)Ñ$Ô$ð +­¨V¬[Ñ)9Ô)9¸QÒ)>Ð)>ØŒ{˜1Œ~˜aÔ ˆÝ�d�BÑÔð 	+ F¤K°¤N°1Ô$5¸Ò$=Ð$=Ø—[’[Ø”˜Q” Ô"¥B¨¬	 NÐ3Ø”˜Q” Ô" DÐ)ñ+ô +ˆFð €Mrq   N)rJ  re   rK  r¶   rh   re   )r   r	  )T)rh   r…  )r   rð  (  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`   ra   Úsympy.utilities.iterablesrb   Úsympy.utilities.miscrc   re   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-  r2  r4  r?  rE  rK  r]  r`  rc  rg  rk  rp  rs  rw  rz  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*  rz   r@  r?  rI  rP  rg  r  r�  r„  r§  r´  r·  r¹  rÍ  rt  r  rò  rø  rû  rþ  r   r  r  r
  r-  r.  r/  r0  r1  r2  r:  r;  r8  r9  r<  r=  rD  rE  rB  rC  r4  r>  rF  rI  rK  rY  r[  r]  rc  rŠ  r‹  rŒ  r�  rz  r|  r~  r  Úintr°  r¯  rÿ  r‘  rk   rq   rn   ú<module>r»     s„  ððð ð ð. #Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø #Ð #Ð #Ð #Ð #Ð #Ø #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø &Ð &Ð &Ð &Ð &Ð &Ø  Ð  Ð  Ð  Ð  Ð  Ø *Ð *Ð *Ð *Ð *Ð *Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø  Ð  Ð  Ð  Ð  Ð  Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø "Ð "Ð "Ð "Ð "Ð "Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø :Ð :Ð :Ð :Ð :Ð :ðFð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fà IÐ IÐ IÐ IÐ IÐ IÐ IÐ Ið(ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (à >Ð >Ð >Ð >Ð >Ð >Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ;Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø .Ð .Ð .Ð .Ð .Ð .Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ .Ð .Ð .Ð .Ð .Ð .Ø &Ð &Ð &Ð &Ð &Ð &ð ð
ð 
ð 
ð 
ð 
ˆ3ñ 
ô 
ñ „ð
ð ðð ð ð ð ��sñ ô ñ „ðð ð.ð .ð .ð .ð .�:ñ .ô .ñ „ð.ð ð
1ð 
1ð 
1ð 
1ð 
1˜ñ 
1ô 
1ñ „ð
1ð ð	
ð 	
ð 	
ð 	
ð 	
�
ñ 	
ô 	
ñ „ð	
ð ð5ð 5ð 5ð 5ð 5�Jñ 5ô 5ñ „ð5ð ðNð Nð Nð Nð Nˆdñ Nô Nñ „ðNð ð1ð 1ð 1ð 1ð 1ˆDñ 1ô 1ñ „ð1ð& ðTð Tð Tð Tð T�ñ Tô Tñ „ðTð" ðQð Qð Qð Qð Q�dñ Qô Qñ „ðQð" ð	ð 	ð 	ð 	ð 	ˆz˜3ñ 	ô 	ñ „ð	ð ð#ð #ð #ð #ð #ˆhñ #ô #ñ „ð#ð ð"ð "ð "ð "ð "ˆhñ "ô "ñ „ð"ð ð"ð "ð "ð "ð "�ñ "ô "ñ „ð"ð ð#ð #ð #ð #ð #�ñ #ô #ñ „ð#ð ð"ð "ð "ð "ð "ˆxñ "ô "ñ „ð"ð ð#ð #ð #ð #ð #ˆxñ #ô #ñ „ð#ð ð	ð 	ð 	ð 	ð 	�Z ñ 	ô 	ñ „ð	ð ð#ð #ð #ð #ð #ˆ~ñ #ô #ñ „ð#ð ð#ð #ð #ð #ð #ˆ~ñ #ô #ñ „ð#ð ð/ð /ð /ð /ð /ˆjñ /ô /ñ „ð/ð ðð ð ð ð �Zñ ô ñ „ðð ð#ð #ð #ð #ð #�ñ #ô #ñ „ð#ð ð$ð $ð $ð $ð $�*ñ $ô $ñ „ð$ð ðAð Að Að Að A *ñ Aô Añ „ðAð ð Fð  Fð  Fð  Fð  F˜Zñ  Fô  Fñ „ð FðF ðð ð ð ð ˜
ñ ô ñ „ðð ðRð Rð Rð Rð R�dñ Rô Rñ „ðRð ðð ð ð ð �4ñ ô ñ „ðð ð	@ð 	@ð 	@ð 	@ð 	@�Zñ 	@ô 	@ñ „ð	@ð ð	1ð 	1ð 	1ð 	1ð 	1�$ñ 	1ô 	1ñ „ð	1ð ð	ð 	ð 	ð 	ð 	˜ñ 	ô 	ñ „ð	ð
 ðUð Uð Uð Uð U�Dñ Uô Uñ „ðUð ð1ð 1ð 1ð 1ð 1�Dñ 1ô 1ñ „ð1ð" ð	(ð 	(ð 	(ð 	(ð 	(�Zñ 	(ô 	(ñ „ð	(ð ð/1ð /1ð /1ð /1ð /1˜4ñ /1ô /1ñ „ð/1ðd ð3ð 3ð 3ð 3ð 3�ñ 3ô 3ñ „ð3ð ðð ð ð ð ˜ Sñ ô ñ „ðð ð	:ð 	:ð 	:ð 	:ð 	:Ð#ñ 	:ô 	:ñ „ð	:ð ðð ð ð ð Ð'ñ ô ñ „ðð ðð ð ð ð Ð'ñ ô ñ „ðð ðð ð ð ð Ð'ñ ô ñ „ðð ðBð Bð Bð Bð BÐ%ñ Bô Bñ „ðBð ð-ð -ð -ð -ð -Ð$ñ -ô -ñ „ð-ð ð3ð 3ð 3ð 3ð 3Ð%ñ 3ô 3ñ „ð3ð ðFð Fð Fð Fð FÐ*ñ Fô Fñ „ðFð ðð ð ð ð ˆJ˜ñ ô ñ „ðð
 ð/ð /ð /ð /ð /ˆUñ /ô /ñ „ð/ð ð3ð 3ð 3ð 3ð 3ˆeñ 3ô 3ñ „ð3ð ðð ð ð ð ˆUñ ô ñ „ðð ð/ð /ð /ð /ð /ˆUñ /ô /ñ „ð/ð ð3ð 3ð 3ð 3ð 3ˆeñ 3ô 3ñ „ð3ð ðð ð ð ð ˆUñ ô ñ „ðð ð.ð .ð .ð .ð .ˆjñ .ô .ñ „ð.ð" ð	Fð 	Fð 	Fð 	Fð 	F�:ñ 	Fô 	Fñ „ð	Fð ð	Fð 	Fð 	Fð 	Fð 	F�:ñ 	Fô 	Fñ „ð	Fð ð;ð ;ð ;ð ;ð ;�*ñ ;ô ;ñ „ð;ð ð?ð ?ð ?ð ?ð ?�Zñ ?ô ?ñ „ð?ð ðEð Eð Eð Eð E�Jñ Eô Eñ „ðEð ðEð Eð Eð Eð E�Jñ Eô Eñ „ðEðð ð ð ð �:ñ ô ð ð
ð ð ð20ð 0ð 0ðB   d¨D°$¸Ð=Ð ðUð Uð Uðnð ð ðð ð ðð ð ðð ð ð0#ð #ð #ðð ð ð*@ð @ð @ðjð jð jð2 OQÐ Ð PÐ PÐ PÑ PØ	€Ø
ˆ%�‰*Œ*€ð(?ð (?ð (?ðVVð Vð Vð Vð2Mð 2Mð 2Mð 2MðjIIð IIð IIð IIð IIðXLð Lð LðMð Mð Mð Mð\ð \ð \ð \ð~<ð <ð <ð~Xð Xð Xð8-ð -ð -ð -ðJð Jð JðZ)ð )ð )ð )ðX@Mð @Mð @Mð @Mð @MñF3ð 3ð 3ð 3ð6 	ðð ñ 	„ðð 	ðð ñ 	„ðð 	ðð ñ 	„ðð 	ðð ñ 	„ðð 	ðð ñ 	„ððð ð ð
ð ð ð $˜Gð*ð *ñ+ô +Ð ð  �-ðOð OñPô P€ð "˜'Ð"NÐ"NÑOÔOÐ à�ð8ð 8ñ9ô 9€ð
 "˜'Ð"NÐ"NÑOÔOÐ à�ð8ð 8ñ9ô 9€ð
 #˜7Ð#PÐ#PÑQÔQÐ Ø�ð9ð 9ñ:ô :€ð
 "˜'Ð"CÐ"CÑDÔDÐ Ø�ð:ð :ñ;ô ;€ð
 #˜7Ð#MÐ#MÑNÔNÐ Ø�Ø9Ð9ñ;ô ;€ð #˜7Ð#PÐ#PÑQÔQÐ Ø�ð9ð 9ñ:ô :€ð
 "˜'Ð"CÐ"CÑDÔDÐ Ø�ð9ð 9ñ:ô :€ð
"ð "ð "ð""ð "ð "ð*"ð "ð "ð*>ð >ð >ð<ð <ð <ð:Gð :Gð :GðxMð Mñ MðMð Mð Mñ Mð,0ð 0ñ 0ðf "˜Ø>Ð>Ø5Ð5ñ7ô 7Ñ ð ˆhð #Ð"Ø0Ð0ñ	2ô 2�ð "˜ðuð uà0Ð0ñ2ô 2Ñ ð
 �8ðNð Nà9Ð9ñ	;ô ;Ñ ð'ð 'ñ 'ð\ð \ñ \ð#ð #ñ #ð ,.�Ð -Ð -Ð -Ñ -Ø"- +©cÑ"2Ô"2�Ð 2Ð 2Ð 2Ñ 2Øˆu�S‰zŒz�ð{ð {ñ {ð|;ð ;ñ ;ð ;ð ;rq   