+
    i'                     a  0 t $ R t^ RIHt ^ RIHtHtHtHt ^ RI	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t!H"t"H#t# ^ RI$H%t% ^ RI&H't'H(t(H)t) ^ RI*H+t+ ^ RI,H-t-H.t.H/t/ ^ RI0H1t1 ^ RI2H3t3H4t4 ^ RI5H6t6H7t7H8t8H9t9H:t:H;t;H<t<H=t= ^ RI>H?t? ^ RI@HAtA ^ RIBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtO ^ RIPHQtQHRtR ^ RISHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[H\t\H]t] ^ RI^H_t_ ^ RI`HataHbtb ^ RIcHdtdHeteHftfHgtgHhthHitiHjtjHktkHltl ^ RImHntn ^RIoHptp ^ R IqHrtr ^ R!IsHttt ^ R"IuHvtvHwtwHxtxHyty ^ R#IzH{t{ ^ R$I|H}t} ^ R%I~Ht ^ R&IHtHtHtHt ^ R'IHt ^ R(IHt ] ! R) R*]
4      4       t] ! R+ R,]]
4      4       t] ! R- R.]4      4       t] ! R/ R0]4      4       t] ! R1 R2]4      4       t] ! R3 R4]4      4       t] ! R5 R6]4      4       t] ! R7 R8]4      4       t] ! R9 R:]4      4       t] ! R; R<]4      4       t] ! R= R>]]
4      4       t] ! R? R@]4      4       t] ! RA RB]4      4       t] ! RC RD]4      4       t] ! RE RF]4      4       t] ! RG RH]4      4       t] ! RI RJ]4      4       t] ! RK RL]]
4      4       t] ! RM RN]4      4       t] ! RO RP]4      4       t] ! RQ RR]4      4       t] ! RS RT]4      4       t] ! RU RV]4      4       t] ! RW RX]4      4       t] ! RY RZ]4      4       t] ! R[ R\]4      4       t] ! R] R^]4      4       t] ! R_ R`]4      4       t] ! Ra Rb]4      4       t] ! Rc Rd]4      4       t] ! Re Rf]4      4       t] ! Rg Rh]4      4       t] ! Ri Rj]4      4       t] ! Rk Rl]4      4       t] ! Rm Rn]4      4       t] ! Ro Rp]4      4       t] ! Rq Rr]4      4       t] ! Rs Rt]]
4      4       t] ! Ru Rv]4      4       t] ! Rw Rx]4      4       t] ! Ry Rz]4      4       t] ! R{ R|]4      4       t] ! R} R~]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]]
4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t ! R R]4      tR tR t]L]K]J]M]N]O3tR tR tR tR tR tR tR tR tR t. tR]R&   . t]-! R4      tR tR R ltR R ltRR R lltR tR R ltR R ltR tR tR R ltR tR R ltRR R lltR R lt]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tR tR t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      t]! R 4      tR tR tR tR tR tR Et R EtR R lEtR Et]! R R 4      Et]! R R 4      Et]! R R 4      Et]! R R 4      EtR EtR Et	R Et
/ EtR]R&   ]! E]4      EtR]R&   ]-! R4      EtR EtR EtR# )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                  X    ] tR t^Ht$ R]R&   R]R&   ]R R l4       t]R R l4       tR	tR
# )Ruler   	integrandr   variablec                   V ^8  d   QhRR/#    returnr    )formats   "/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/sympy/integrals/manualintegrate.py__annotate__Rule.__annotate__N   s      d     c                	    R # Nri   selfs   &rk   eval	Rule.evalM       rn   c                   V ^8  d   QhRR/# rg   rh   boolri   )rj   s   "rk   rl   rm   R   s      D rn   c                	    R # rp   ri   rq   s   &rk   contains_dont_knowRule.contains_dont_knowQ   ru   rn   ri   N)	__name__
__module____qualname____firstlineno____annotations__r   rs   rz   __static_attributes__ri   rn   rk   rb   rb   H   s3    O   rn   rb   c                  &    ] tR t^VtRtR R ltRtR# )
AtomicRulez1A simple rule that does not depend on other rulesc                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   AtomicRule.__annotate__Y   s      D rn   c                	    R # )Fri   rq   s   &rk   rz   AtomicRule.contains_dont_knowY   s    rn   ri   N)r|   r}   r~   r   __doc__rz   r   ri   rn   rk   r   r   V   s    ; rn   r   c                  &    ] tR t^]tRtR R ltRtR# )ConstantRulezintegrate(a, x)  ->  a*xc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ConstantRule.__annotate__`   s     . .d .rn   c                	<    V P                   V P                  ,          # rp   )rc   rd   rq   s   &rk   rs   ConstantRule.eval`   s    ~~--rn   ri   Nr|   r}   r~   r   r   rs   r   ri   rn   rk   r   r   ]   s    ". .rn   r   c                  R    ] tR t^dt$ RtR]R&   R]R&   R]R&   R R ltR	 R
 ltRtR# )ConstantTimesRulez.integrate(a*f(x), x)  ->  a*integrate(f(x), x)r   constantotherrb   substepc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ConstantTimesRule.__annotate__k   s     3 3d 3rn   c                	X    V P                   V P                  P                  4       ,          # rp   )r   r   rs   rq   s   &rk   rs   ConstantTimesRule.evalk   s    }}t||00222rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r   n        1 1D 1rn   c                	6    V P                   P                  4       # rp   r   rz   rq   s   &rk   rz   $ConstantTimesRule.contains_dont_known       ||..00rn   ri   N	r|   r}   r~   r   r   r   rs   rz   r   ri   rn   rk   r   r   d   s#    8NKM31 1rn   r   c                  <    ] tR t^rt$ RtR]R&   R]R&   R R ltRtR# )		PowerRulezintegrate(x**a, x)r   baser   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   PowerRule.__annotate__x   s     
 
d 
rn   c                	    \        V P                  V P                  ^,           ,          V P                  ^,           ,          \        V P                  R4      3\	        V P                  4      R34      #    T)r*   r   r   r   r    rq   s   &rk   rs   PowerRule.evalx   sP    ii$((Q,'$((Q,7DHHb9IJ^T"
 	
rn   ri   Nr|   r}   r~   r   r   r   rs   r   ri   rn   rk   r   r   r   s    
J	I
 
rn   r   c                  <    ] tR t^t$ RtR]R&   R]R&   R R ltRtR# )	NestedPowRulezintegrate((x**a)**b, x)r   r   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   NestedPowRule.__annotate__   s     5 5d 5rn   c                	    V P                   V P                  ,          p\        WP                  ^,           ,          \	        V P                  R4      3V\        V P                   4      ,          R34      # r   )r   rc   r*   r   r   r    )rr   ms   & rk   rs   NestedPowRule.eval   sS    II&!xx!|,b2.>?c$))n,d35 	5rn   ri   Nr   ri   rn   rk   r   r      s    !
J	I5 5rn   r   c                  >    ] tR t^t$ RtR]R&   R R ltR R ltRtR	# )
AddRulezDintegrate(f(x) + g(x), x) -> integrate(f(x), x) + integrate(g(x), x)
list[Rule]substepsc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   AddRule.__annotate__   s     C Cd Crn   c                	6    \        R  V P                   4       !  # )c              3  @   "   T F  qP                  4       x  K  	  R # 5irp   )rs   .0r   s   & rk   	<genexpr>AddRule.eval.<locals>.<genexpr>   s     A=\\^^=   )r   r   rq   s   &rk   rs   AddRule.eval   s    A4==ABBrn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r      s     N ND Nrn   c                	    \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  @   "   T F  qP                  4       x  K  	  R # 5irp   rz   r   s   & rk   r   -AddRule.contains_dont_know.<locals>.<genexpr>   s     M}G--//}r   TF)anyr   rq   s   &rk   rz   AddRule.contains_dont_know   s3    sMt}}MssMsMsMt}}MMMrn   ri   Nr   ri   rn   rk   r   r      s    NCN Nrn   r   c                  R    ] tR t^t$ RtR]R&   R]R&   R]R&   R R	 ltR
 R ltRtR# )URulez;integrate(f(g(x))*g'(x), x) -> integrate(f(u), u), u = g(x)r   u_varr   u_funcrb   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   URule.__annotate__   s     4 4d 4rn   c                	^   V P                   P                  4       pV P                  P                  '       dS   V P                  P	                  4       w  r#VR8X  d0   VP                  \        V P                  4      \        V4      ) 4      pVP                  V P                  V P                  4      # r   r   )r   rs   r   is_Powas_base_expsubsr    r   )rr   resultr   exp_s   &   rk   rs   
URule.eval   sv    ""$;;002JDrzS_s4yjA{{4::t{{33rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r      r   rn   c                	6    V P                   P                  4       # rp   r   rq   s   &rk   rz   URule.contains_dont_know   r   rn   ri   Nr   ri   rn   rk   r   r      s#    EMLM41 1rn   r   c                  \    ] tR t^t$ RtR]R&   R]R&   R]R&   R]R	&   R
 R ltR R ltRtR# )	PartsRulez@integrate(u(x)*v'(x), x) -> u(x)*v(x) - integrate(u'(x)*v(x), x)r   ur   dvrb   v_stepRule | Nonesecond_stepc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   PartsRule.__annotate__   s     4 4d 4rn   c                	    V P                   f   Q hV P                  P                  4       pV P                  V,          V P                   P                  4       ,
          # rp   )r   r   rs   r   )rr   vs   & rk   rs   PartsRule.eval   sH    +++KKvvzD,,11333rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r      s     T TD Trn   c                	    V P                   P                  4       ;'       g1    V P                  R J;'       d    V P                  P                  4       # rp   )r   rz   r   rq   s   &rk   rz   PartsRule.contains_dont_know   sI    {{--/ T TD(RRT-=-=-P-P-R	Trn   ri   Nr   ri   rn   rk   r   r      s+    JIHL4
T Trn   r   c                  H    ] tR t^t$ RtR]R&   R]R&   R R ltR R	 ltR
tR# )CyclicPartsRulez9Apply PartsRule multiple times to integrate exp(x)*sin(x)zlist[PartsRule]parts_rulesr   coefficientc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   CyclicPartsRule.__annotate__   s     5 5d 5rn   c                	   . p^pV P                    FL  pVP                  W#P                  ,          VP                  P	                  4       ,          4       VR,          pKN  	  \        V!  ^V P                  ,
          ,          # r   )r   appendr   r   rs   r   r   )rr   r   signrules   &   rk   rs   CyclicPartsRule.eval   se    $$DMM$-$++*:*:*<<=BJD % F|q4#3#3344rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r      s     Q QD Qrn   c                	    \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  @   "   T F  qP                  4       x  K  	  R # 5irp   r   r   s   & rk   r   5CyclicPartsRule.contains_dont_know.<locals>.<genexpr>   s     P?OG--//?Or   TF)r   r   rq   s   &rk   rz   "CyclicPartsRule.contains_dont_know   s7    sPt?O?OPssPsPsPt?O?OPPPrn   ri   Nr   ri   rn   rk   r   r      s"    C  5Q Qrn   r   c                      ] tR t^tRtR# )TrigRuleri   Nr|   r}   r~   r   r   ri   rn   rk   r   r          rn   r   c                  &    ] tR t^tRtR R ltRtR# )SinRulezintegrate(sin(x), x) -> -cos(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   SinRule.__annotate__        # #d #rn   c                	.    \        V P                  4      ) # rp   )r,   rd   rq   s   &rk   rs   SinRule.eval       DMM"""rn   ri   Nr   ri   rn   rk   r   r      s    )# #rn   r   c                  &    ] tR t^tRtR R ltRtR# )CosRulezintegrate(cos(x), x) -> sin(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   CosRule.__annotate__        " "d "rn   c                	,    \        V P                  4      # rp   )r-   rd   rq   s   &rk   rs   CosRule.eval       4==!!rn   ri   Nr   ri   rn   rk   r  r     s    (" "rn   r  c                  &    ] tR t^tRtR R ltRtR# )
SecTanRulez%integrate(sec(x)*tan(x), x) -> sec(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   SecTanRule.__annotate__   r  rn   c                	,    \        V P                  4      # rp   )r1   rd   rq   s   &rk   rs   SecTanRule.eval   r
  rn   ri   Nr   ri   rn   rk   r  r     s    /" "rn   r  c                  &    ] tR t^tRtR R ltRtR# )
CscCotRulez&integrate(csc(x)*cot(x), x) -> -csc(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   CscCotRule.__annotate__   r   rn   c                	.    \        V P                  4      ) # rp   )r0   rd   rq   s   &rk   rs   CscCotRule.eval   r  rn   ri   Nr   ri   rn   rk   r  r     s    0# #rn   r  c                  &    ] tR t^tRtR R ltRtR# )Sec2Rulez!integrate(sec(x)**2, x) -> tan(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   Sec2Rule.__annotate__   r  rn   c                	,    \        V P                  4      # rp   )r.   rd   rq   s   &rk   rs   Sec2Rule.eval   r
  rn   ri   Nr   ri   rn   rk   r  r     s    +" "rn   r  c                  &    ] tR t^tRtR R ltRtR# )Csc2Rulez"integrate(csc(x)**2, x) -> -cot(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   Csc2Rule.__annotate__   r   rn   c                	.    \        V P                  4      ) # rp   )r/   rd   rq   s   &rk   rs   Csc2Rule.eval   r  rn   ri   Nr   ri   rn   rk   r  r     s    ,# #rn   r  c                      ] tR t^tRtR# )HyperbolicRuleri   Nr   ri   rn   rk   r$  r$     r   rn   r$  c                  &    ] tR tRtRtR R ltRtR# )SinhRulei  z integrate(sinh(x), x) -> cosh(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   SinhRule.__annotate__  r   rn   c                	,    \        V P                  4      # rp   )r#   rd   rq   s   &rk   rs   SinhRule.eval      DMM""rn   ri   Nr   ri   rn   rk   r&  r&    s    *# #rn   r&  c                       ] tR tRtRtR tRtR# )CoshRulei
  z integrate(cosh(x), x) -> sinh(x)c                	,    \        V P                  4      # rp   )r&   rd   rq   s   &rk   rs   CoshRule.eval  r+  rn   ri   Nr   ri   rn   rk   r-  r-  
  s
    *#rn   r-  c                  <    ] tR tRt$ RtR]R&   R]R&   R R ltRtR	# )
ExpRulei  z integrate(a**x, x) -> a**x/ln(a)r   r   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ExpRule.__annotate__  s     / /d /rn   c                	N    V P                   \        V P                  4      ,          # rp   )rc   r    r   rq   s   &rk   rs   ExpRule.eval  s    ~~DII..rn   ri   Nr   ri   rn   rk   r1  r1    s    *
J	I/ /rn   r1  c                  2    ] tR tRt$ RtR]R&   R R ltRtR# )	ReciprocalRulei  zintegrate(1/x, x) -> ln(x)r   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ReciprocalRule.__annotate__   s      d rn   c                	,    \        V P                  4      # rp   )r    r   rq   s   &rk   rs   ReciprocalRule.eval   s    499~rn   ri   Nr   ri   rn   rk   r7  r7    s    $
J rn   r7  c                  &    ] tR tRtRtR R ltRtR# )
ArcsinRulei$  z'integrate(1/sqrt(1-x**2), x) -> asin(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ArcsinRule.__annotate__'  r   rn   c                	,    \        V P                  4      # rp   )r3   rd   rq   s   &rk   rs   ArcsinRule.eval'  r+  rn   ri   Nr   ri   rn   rk   r=  r=  $  s    1# #rn   r=  c                  &    ] tR tRtRtR R ltRtR# )ArcsinhRulei+  z'integrate(1/sqrt(1+x**2), x) -> asin(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ArcsinhRule.__annotate__.  s     $ $d $rn   c                	,    \        V P                  4      # rp   )r(   rd   rq   s   &rk   rs   ArcsinhRule.eval.  s    T]]##rn   ri   Nr   ri   rn   rk   rC  rC  +  s    1$ $rn   rC  c                  F    ] tR tRt$ RtR]R&   R]R&   R]R&   R R ltR	tR
# )ReciprocalSqrtQuadraticRulei2  zWintegrate(1/sqrt(a+b*x+c*x**2), x) -> log(2*sqrt(c)*sqrt(a+b*x+c*x**2)+b+2*c*x)/sqrt(c)r   abcc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   (ReciprocalSqrtQuadraticRule.__annotate__9  s     A Ad Arn   c           	     	T   V P                   V P                  V P                  V P                  3w  rr4\	        ^\        V4      ,          \        WV,          ,           W4^,          ,          ,           4      ,          V,           ^V,          V,          ,           4      \        V4      ,          # rg   )rJ  rK  rL  rd   r    r)   rr   rJ  rK  rL  xs   &    rk   rs    ReciprocalSqrtQuadraticRule.eval9  sl    VVTVVTVVT]]:
a1T!W9T!aC%Q$,//1!A#a%78a@@rn   ri   Nr   ri   rn   rk   rI  rI  2  s     aGGGA Arn   rI  c                  P    ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	 R
 ltRtR# )SqrtQuadraticDenomRulei>  z(integrate(poly(x)/sqrt(a+b*x+c*x**2), x)r   rJ  rK  rL  z
list[Expr]coeffsc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   #SqrtQuadraticDenomRule.__annotate__F  s     F Fd Frn   c           	     	  aaa V P                   V P                  V P                  V P                  P	                  4       V P
                  3w  rpoo. oSP	                  4       o\        \        S4      ^,
          4       F  p\        S4      ^,
          V,
          pSV,          W5,          ,          pSP                  V4       SV^,           ;;,          ^V,          ^,
          V,          ^,          V,          ,          uu&   SV^,           ;;,          V^,
          V,          V,          ,          uu&   K  	  SR,          SR,          r\        WS,          ,           VS^,          ,          ,           4      p	WrV,          ^V,          ,          ,
          p
V
^ 8X  d   ^ pM4\        \        ^V	,          S4      RR7      pWP                  4       ,          p\        . VVV3R l\        \        S4      4       4       OW,          N5!  V	,          V,           # )rg   F
degeneratec              3     <"   T F3  pSV,          S\        S4      ^,
          V,
          ,          ,          x  K5  	  R# 5irg   N)len)r   irV  result_coeffsrR  s   & rk   r   .SqrtQuadraticDenomRule.eval.<locals>.<genexpr>^  s6      97 #1%a#f+a-/&:::7s   ;>r   )rJ  rK  rL  rV  copyrd   ranger^  r   r)   inverse_trig_ruleIntegralInfors   r   )rr   rJ  rK  rL  r_  ncoeffdesr   I0steprV  r`  rR  s   &            @@@rk   rs   SqrtQuadraticDenomRule.evalF  s   !VVTVVTVVT[[5E5E5GVa s6{1}%AFAaA1IqsOE  '1Q3KAaCE19Q;u,,K1Q3KAaC75=(K & bz6":1Q3qAvqS!A#Y;q=B$\!A#q%9eLD))+%B ? 9#C$679 ?:;#??@ACEF 	Frn   ri   Nr   ri   rn   rk   rU  rU  >  s&    2GGGF Frn   rU  c                  F    ] tR tRt$ RtR]R&   R]R&   R]R&   R R ltR	tR
# )SqrtQuadraticRuleib  z integrate(sqrt(a+b*x+c*x**2), x)r   rJ  rK  rL  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   SqrtQuadraticRule.__annotate__i  s      d rn   c                	x    \        \        V P                  V P                  4      R R7      pVP	                  4       # )FrZ  )sqrt_quadratic_rulerf  rc   rd   rs   )rr   rm  s   & rk   rs   SqrtQuadraticRule.evali  s*    "<#N[`ayy{rn   ri   Nr   ri   rn   rk   rp  rp  b  s    *GGG rn   rp  c                  >    ] tR tRt$ RtR]R&   R R ltR R ltR	tR
# )AlternativeRulein  z Multiple ways to do integration.r   alternativesc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   AlternativeRule.__annotate__s  s     + +d +rn   c                	D    V P                   ^ ,          P                  4       #     )rx  rs   rq   s   &rk   rs   AlternativeRule.evals  s      #((**rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   rz  v  s     R RD Rrn   c                	    \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  @   "   T F  qP                  4       x  K  	  R # 5irp   r   r   s   & rk   r   5AlternativeRule.contains_dont_know.<locals>.<genexpr>w  s     Q?PG--//?Pr   TF)r   rx  rq   s   &rk   rz   "AlternativeRule.contains_dont_knowv  s7    sQt?P?PQssQsQsQt?P?PQQQrn   ri   Nr   ri   rn   rk   rw  rw  n  s    *+R Rrn   rw  c                  2    ] tR tRtRtR R ltR R ltRtR# )	DontKnowRuleiz  zLeave the integral as is.c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   DontKnowRule.__annotate__}  s     7 7d 7rn   c                	B    \        V P                  V P                  4      # rp   )rQ   rc   rd   rq   s   &rk   rs   DontKnowRule.eval}  s    66rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r    s      D rn   c                	    R # Tri   rq   s   &rk   rz   DontKnowRule.contains_dont_know  s    rn   ri   N)r|   r}   r~   r   r   rs   rz   r   ri   rn   rk   r  r  z  s    #7 rn   r  c                  &    ] tR tRtRtR R ltRtR# )DerivativeRulei  zintegrate(f'(x), x) -> f(x)c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   DerivativeRule.__annotate__  s     @ @d @rn   c                	0   \        V P                  \        4      '       g   Q h\        V P                  P                  4      p\        V4       F&  w  pw  r4W0P                  8X  g   K  W4^,
          3W&    M	  \        V P                  P                  .VO5!  # r   )
isinstancerc   r   listvariable_count	enumeraterd   expr)rr   r  r_  varcounts   &    rk   rs   DerivativeRule.eval  sz    $..*5555dnn;;<(8OA|mm#%(!)$4!  9 $..--???rn   ri   Nr   ri   rn   rk   r  r    s    %@ @rn   r  c                  H    ] tR tRt$ RtR]R&   R]R&   R R ltR	 R
 ltRtR# )RewriteRulei  z;Rewrite integrand to another form that is easier to handle.r   	rewrittenrb   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   RewriteRule.__annotate__  r   rn   c                	6    V P                   P                  4       # rp   )r   rs   rq   s   &rk   rs   RewriteRule.eval  s    ||  ""rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r    r   rn   c                	6    V P                   P                  4       # rp   r   rq   s   &rk   rz   RewriteRule.contains_dont_know  r   rn   ri   Nr   ri   rn   rk   r  r    s    EOM#1 1rn   r  c                      ] tR tRtRtRtR# )CompleteSquareRulei  z7Rewrite a+b*x+c*x**2 to a-b**2/(4*c) + c*(x+b/(2*c))**2ri   N)r|   r}   r~   r   r   r   ri   rn   rk   r  r    s    Arn   r  c                  :    ] tR tRt$ R]R&   R R ltR R ltRtR	# )
PiecewiseRulei  z%Sequence[tuple[Rule, bool | Boolean]]subfunctionsc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   PiecewiseRule.__annotate__  s     D Dd Drn   c                	|    \        V P                   UUu. uF  w  rVP                  4       V3NK  	  upp!  # u uppi rp   )r*   r  rs   )rr   r   conds   &  rk   rs   PiecewiseRule.eval  sG    040A0AC0A}w $LLND10AC D 	D Cs   8
c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r    s     U UD Urn   c                	    \         ;QJ d&    R  V P                   4       F  '       g   K   R# 	  R# ! R  V P                   4       4      # )c              3  F   "   T F  w  rVP                  4       x  K  	  R # 5irp   r   )r   r   _s   &  rk   r   3PiecewiseRule.contains_dont_know.<locals>.<genexpr>  s      TBSJG7--//BSs   !TF)r   r  rq   s   &rk   rz    PiecewiseRule.contains_dont_know  s7    sT$BSBSTssTsTsT$BSBSTTTrn   ri   Nr|   r}   r~   r   r   rs   rz   r   ri   rn   rk   r  r    s    77DU Urn   r  c                  N    ] tR tRt$ R]R&   R]R&   R]R&   R R ltR	 R
 ltRtR# )HeavisideRulei  r   hargibndrb   r   c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   HeavisideRule.__annotate__  s     W Wd Wrn   c                	    V P                   P                  4       p\        V P                  4      WP	                  V P
                  V P                  4      ,
          ,          # rp   )r   rs   r8   r  r   rd   r  )rr   r   s   & rk   rs   HeavisideRule.eval  s@    
 ""$#vDMM4990U'UVVrn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r    r   rn   c                	6    V P                   P                  4       # rp   r   rq   s   &rk   rz    HeavisideRule.contains_dont_know  r   rn   ri   Nr  ri   rn   rk   r  r    s!    
J
JMW1 1rn   r  c                  B    ] tR tRt$ R]R&   R]R&   R]R&   R R ltRtR	# )
DiracDeltaRulei  r   rg  rJ  rK  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   DiracDeltaRule.__annotate__  s     ( (d (rn   c                	    V P                   V P                  V P                  V P                  3w  rr4V^ 8X  d    \	        W#V,          ,           4      V,          # \        W#V,          ,           V^,
          4      V,          # r|  )rg  rJ  rK  rd   r8   r9   rr   rg  rJ  rK  rR  s   &    rk   rs   DiracDeltaRule.eval  s]    VVTVVTVVT]]:
a6QsU#A%%!aC%1%a''rn   ri   Nr|   r}   r~   r   r   rs   r   ri   rn   rk   r  r    s    GGG( (rn   r  c                  b    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R	&   R
 R ltR R ltRtR# )TrigSubstitutionRulei  r   thetafuncr  rb   r   zbool | Booleanrestrictionc                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   !TrigSubstitutionRule.__annotate__  s     %
 %
d %
rn   c                	   V P                   V P                  V P                  r2pVP                  \	        V4      ^\        V4      ,          4      pVP                  \        V4      ^\        V4      ,          4      pVP                  \        V4      ^\        V4      ,          4      p\        VP                  \        4      4      p\        V4      ^8X  g   Q hV^ ,          p\        W2,
          V4      p\        V4      ^8X  g   Q h\        V^ ,          4      w  rg\!        V\        4      '       d8   TpTp	\#        V^,          V^,          ,
          4      p
\%        V^ ,          4      pM\!        V\
        4      '       d8   Tp
Tp	\#        V^,          V^,          ,
          4      p\'        V^ ,          4      pM6TpTp
\#        V^,          V^,          ,           4      p	\)        V^ ,          4      p\        V4      W,          3\        V4      W,          3\        V4      W,          3W3.p\+        V P,                  P/                  4       P                  V4      P1                  4       V P2                  34      # r  )r  r  rd   r   r1   r,   r0   r-   r/   r.   r  findr+   r^  rZ   rX   r  r)   r3   r2   r4   r*   r   rs   trigsimpr  )rr   r  r  rR  trig_functionrelationnumerdenomopposite
hypotenuseadjacentinversesubstitutions   &            rk   rs   TrigSubstitutionRule.eval  s   TYYQyyUQs5z\2yyUQs5z\2yyUQs5z\2TYY'<=>=!Q&&&%a(=18}!!!,mS))HJE1Huax/0H8A;'Gs++HJE1Huax/0H8A;'GHHeQh12J8A;'G Z,-Z,-Z*+	
 ""$)),7@@BDDTDTU
 	
rn   c                   V ^8  d   QhRR/# rw   ri   )rj   s   "rk   rl   r    r   rn   c                	6    V P                   P                  4       # rp   r   rq   s   &rk   rz   'TrigSubstitutionRule.contains_dont_know  r   rn   ri   Nr  ri   rn   rk   r  r    s,    K
JOM%
N1 1rn   r  c                  F    ] tR tRt$ RtR]R&   R]R&   R]R&   R R ltR	tR
# )
ArctanRulei  zAintegrate(a/(b*x**2+c), x) -> a/b / sqrt(c/b) * atan(x/sqrt(c/b))r   rJ  rK  rL  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ArctanRule.__annotate__	       3 3d 3rn   c                	    V P                   V P                  V P                  V P                  3w  rr4W,          \	        W2,          4      ,          \        V\	        W2,          4      ,          4      ,          # rp   )rJ  rK  rL  rd   r)   r4   rQ  s   &    rk   rs   ArctanRule.eval	  sJ    VVTVVTVVT]]:
asT!#YaQS	k!222rn   ri   Nr   ri   rn   rk   r  r    s    KGGG3 3rn   r  c                  "    ] tR tRt$ R]R&   RtR# )OrthogonalPolyRulei  r   rg  ri   Nr|   r}   r~   r   r   r   ri   rn   rk   r  r    s    Grn   r  c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR# )	
JacobiRulei  r   rJ  rK  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   JacobiRule.__annotate__  s     : :d :rn   c           	     	   V P                   V P                  V P                  V P                  3w  rr4\	        ^\        V^,           V^,
          V^,
          V4      ,          W,           V,           ,          \        W,           V,           ^ 4      3V\        V^ 4      3W#,           ^,           V^,          ,          ^,          W#,
          V,          ^,          ,           \        V^4      34      # rP  )rg  rJ  rK  rd   r*   rN   r   r   r  s   &    rk   rs   JacobiRule.eval  s    VVTVVTVVT]]:
ava!eQUAE1--quqy92aeai;KL1aMeaiAa15!)A+-r!Qx8: 	:rn   ri   Nr  ri   rn   rk   r  r    s    GG: :rn   r  c                  .    ] tR tRt$ R]R&   R R ltRtR# )GegenbauerRulei   r   rJ  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   GegenbauerRule.__annotate__$        d rn   c                	L   V P                   V P                  V P                  r2p\        \	        V^,           V^,
          V4      ^V^,
          ,          ,          \        V^4      3\        V^,           V4      V^,           ,          \        VR4      3\        P                  R34      # r   )	rg  rJ  rd   r*   rM   r   rG   r   Zero)rr   rg  rJ  rR  s   &   rk   rs   GegenbauerRule.eval$  s    &&$&&$--aAq1ua(!QU)4bAh?Aq!1q5)2a95VVTN 	rn   ri   Nr  ri   rn   rk   r  r     s    G rn   r  c                  "    ] tR tRtR R ltRtR# )ChebyshevTRulei,  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ChebyshevTRule.__annotate__.  r  rn   c                	*   V P                   V P                  r!\        \        V^,           V4      V^,           ,          \        V^,
          V4      V^,
          ,          ,
          ^,          \	        \        V4      ^4      3V^,          ^,          R34      # )r   T)rg  rd   r*   rG   r   r   rr   rg  rR  s   &  rk   rs   ChebyshevTRule.eval.  sz    vvt}}1Q"AE*Q"AE*+,-./1#a&!}>T!VTN 	rn   ri   Nr|   r}   r~   r   rs   r   ri   rn   rk   r  r  ,  s     rn   r  c                  "    ] tR tRtR R ltRtR# )ChebyshevURulei6  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ChebyshevURule.__annotate__8  s      d rn   c                	    V P                   V P                  r!\        \        V^,           V4      V^,           ,          \	        VR4      3\
        P                  R34      # r   )rg  rd   r*   rG   r   r   r  r  s   &  rk   rs   ChebyshevURule.eval8  sK    vvt}}1Aq!1q5)2a95VVTN 	rn   ri   Nr   ri   rn   rk   r  r  6  s     rn   r  c                  "    ] tR tRtR R ltRtR# )LegendreRulei?  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   LegendreRule.__annotate__A  s     B Bd Brn   c                	    V P                   V P                  r!\        V^,           V4      \        V^,
          V4      ,
          ^V,          ^,           ,          # r  )rg  rd   rI   r  s   &  rk   rs   LegendreRule.evalA  s?    vvt}}1Aq!HQUA$661qAArn   ri   Nr   ri   rn   rk   r  r  ?  s    B Brn   r  c                  "    ] tR tRtR R ltRtR# )HermiteRuleiF  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   HermiteRule.__annotate__H  s     - -d -rn   c                	    V P                   V P                  r!\        V^,           V4      ^V^,           ,          ,          # r  )rg  rd   rJ   r  s   &  rk   rs   HermiteRule.evalH  s/    vvt}}1q1ua !QU),,rn   ri   Nr   ri   rn   rk   r  r  F  s    - -rn   r  c                  "    ] tR tRtR R ltRtR# )LaguerreRuleiM  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   LaguerreRule.__annotate__O  r  rn   c                	v    V P                   V P                  r!\        W4      \        V^,           V4      ,
          # r  )rg  rd   rK   r  s   &  rk   rs   LaguerreRule.evalO  s+    vvt}}1~Q 222rn   ri   Nr   ri   rn   rk   r  r  M      3 3rn   r  c                  .    ] tR tRt$ R]R&   R R ltRtR# )AssocLaguerreRuleiT  r   rJ  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   AssocLaguerreRule.__annotate__X  s     F Fd Frn   c                	v    \        V P                  ^,           V P                  ^,
          V P                  4      ) # r  )rL   rg  rJ  rd   rq   s   &rk   rs   AssocLaguerreRule.evalX  s(    tvvz466A:t}}EEErn   ri   Nr  ri   rn   rk   r  r  T  s    GF Frn   r  c                  ,    ] tR tRt$ R]R&   R]R&   RtR# )IRulei\  r   rJ  rK  ri   Nr  ri   rn   rk   r!  r!  \  s    GGrn   r!  c                  "    ] tR tRtR R ltRtR# )CiRuleib  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   CiRule.__annotate__d       / /d /rn   c                	    V P                   V P                  V P                  r2p\        V4      \	        W,          4      ,          \        V4      \        W,          4      ,          ,
          # rp   )rJ  rK  rd   r,   r>   r-   r@   rr   rJ  rK  rR  s   &   rk   rs   CiRule.evald  @    &&$&&$--a1vbg~Ar!#w..rn   ri   Nr   ri   rn   rk   r#  r#  b      / /rn   r#  c                  "    ] tR tRtR R ltRtR# )ChiRuleii  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ChiRule.__annotate__k  r  rn   c                	    V P                   V P                  V P                  r2p\        V4      \	        W,          4      ,          \        V4      \        W,          4      ,          ,           # rp   )rJ  rK  rd   r#   r?   r&   rA   r(  s   &   rk   rs   ChiRule.evalk  B    &&$&&$--aAws13x$q'#ac("222rn   ri   Nr   ri   rn   rk   r-  r-  i  r  rn   r-  c                  "    ] tR tRtR R ltRtR# )EiRuleip  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   EiRule.__annotate__r  s      d rn   c                	    V P                   V P                  V P                  r2p\        V4      \	        W,          4      ,          # rp   )rJ  rK  rd   r   rB   r(  s   &   rk   rs   EiRule.evalr  s-    &&$&&$--a1vbg~rn   ri   Nr   ri   rn   rk   r4  r4  p  s     rn   r4  c                  "    ] tR tRtR R ltRtR# )SiRuleiw  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   SiRule.__annotate__y  r&  rn   c                	    V P                   V P                  V P                  r2p\        V4      \	        W,          4      ,          \        V4      \        W,          4      ,          ,           # rp   )rJ  rK  rd   r-   r>   r,   r@   r(  s   &   rk   rs   SiRule.evaly  r*  rn   ri   Nr   ri   rn   rk   r:  r:  w  r+  rn   r:  c                  "    ] tR tRtR R ltRtR# )ShiRulei~  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ShiRule.__annotate__  r  rn   c                	    V P                   V P                  V P                  r2p\        V4      \	        W,          4      ,          \        V4      \        W,          4      ,          ,           # rp   )rJ  rK  rd   r&   r?   r#   rA   r(  s   &   rk   rs   ShiRule.eval  r2  rn   ri   Nr   ri   rn   rk   r@  r@  ~  r  rn   r@  c                  "    ] tR tRtR R ltRtR# )LiRulei  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   LiRule.__annotate__  s      d rn   c                	    V P                   V P                  V P                  r2p\        W,          V,           4      V,          # rp   )rJ  rK  rd   rC   r(  s   &   rk   rs   LiRule.eval  s-    &&$&&$--a!#'{1}rn   ri   Nr   ri   rn   rk   rF  rF    s     rn   rF  c                  B    ] tR tRt$ R]R&   R]R&   R]R&   R R ltRtR	# )
ErfRulei  r   rJ  rK  rL  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   ErfRule.__annotate__  s     	. 	.d 	.rn   c                	6   V P                   V P                  V P                  V P                  3w  rr4VP                  '       Ed@   \        \        \        P                  4      \        V) 4      ,          ^,          \        W2^,          ^V,          ,          ,
          4      ,          \        RV,          V,          V,
          ^\        V) 4      ,          ,          4      ,          V^ 8  3\        \        P                  4      \        V4      ,          ^,          \        W2^,          ^V,          ,          ,
          4      ,          \        ^V,          V,          V,           ^\        V4      ,          ,          4      ,          R34      # \        \        P                  4      \        V4      ,          ^,          \        W2^,          ^V,          ,          ,
          4      ,          \        ^V,          V,          V,           ^\        V4      ,          ,          4      ,          # )rg   Trb  )rJ  rK  rL  rd   is_extended_realr*   r)   r   Pir   r:   r;   rQ  s   &    rk   rs   ErfRule.eval  sa   VVTVVTVVT]]:
aaddD!H$Q&QAqs^)<<Aa!aaRj12345E;addDG#A%A1ac
N(;;!A#a%!)aQi012379: :
 ADDz$q'!!#c!dAaCj.&99ac!eai!DG),-. 	.rn   ri   Nr  ri   rn   rk   rL  rL    s    GGG	. 	.rn   rL  c                  B    ] tR tRt$ R]R&   R]R&   R]R&   R R ltRtR	# )
FresnelCRulei  r   rJ  rK  rL  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   FresnelCRule.__annotate__       F Fd Frn   c           
     	   V P                   V P                  V P                  V P                  3w  rr4\	        \
        P                  4      \	        ^V,          4      ,          \        V^,          ^V,          ,          V,
          4      \        ^V,          V,          V,           \	        ^V,          \
        P                  ,          4      ,          4      ,          \        V^,          ^V,          ,          V,
          4      \        ^V,          V,          V,           \	        ^V,          \
        P                  ,          4      ,          4      ,          ,           ,          # rP  )rJ  rK  rL  rd   r)   r   rQ  r,   r<   r-   r=   rQ  s   &    rk   rs   FresnelCRule.eval      VVTVVTVVT]]:
aADDz$qs)#1ac
Q!A#a%!)T!A#add(^)C DD1ac
Q!A#a%!)T!A#add(^)C DDEF 	Frn   ri   Nr  ri   rn   rk   rT  rT        GGGF Frn   rT  c                  B    ] tR tRt$ R]R&   R]R&   R]R&   R R ltRtR	# )
FresnelSRulei  r   rJ  rK  rL  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   FresnelSRule.__annotate__  rW  rn   c           
     	   V P                   V P                  V P                  V P                  3w  rr4\	        \
        P                  4      \	        ^V,          4      ,          \        V^,          ^V,          ,          V,
          4      \        ^V,          V,          V,           \	        ^V,          \
        P                  ,          4      ,          4      ,          \        V^,          ^V,          ,          V,
          4      \        ^V,          V,          V,           \	        ^V,          \
        P                  ,          4      ,          4      ,          ,
          ,          # rP  )rJ  rK  rL  rd   r)   r   rQ  r,   r=   r-   r<   rQ  s   &    rk   rs   FresnelSRule.eval  rZ  rn   ri   Nr  ri   rn   rk   r]  r]    r[  rn   r]  c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR# )	PolylogRulei  r   rJ  rK  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   PolylogRule.__annotate__  s     ; ;d ;rn   c                	r    \        V P                  ^,           V P                  V P                  ,          4      # r  )rP   rK  rJ  rd   rq   s   &rk   rs   PolylogRule.eval  s$    tvvz466DMM#9::rn   ri   Nr  ri   rn   rk   rc  rc    s    GG; ;rn   rc  c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR# )	UpperGammaRulei  r   rJ  rj  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   UpperGammaRule.__annotate__  s     ? ?d ?rn   c                	    V P                   V P                  V P                  r2pW2,          V) V,          V) ,          ,          \        V^,           V) V,          4      ,          V,          # r  )rJ  rj  rd   rD   )rr   rJ  rj  rR  s   &   rk   rs   UpperGammaRule.eval  sM    &&$&&$--atr!trl"ZAr!t%<<Q>>rn   ri   Nr  ri   rn   rk   ri  ri    s    GG? ?rn   ri  c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR# )	EllipticFRulei  r   rJ  ri  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   EllipticFRule.__annotate__       E Ed Ern   c                	    \        V P                  V P                  V P                  ,          4      \	        V P                  4      ,          # rp   )rF   rd   ri  rJ  r)   rq   s   &rk   rs   EllipticFRule.eval  ,    $--7TVVDDrn   ri   Nr  ri   rn   rk   ro  ro        GGE Ern   ro  c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR# )	EllipticERulei  r   rJ  ri  c                   V ^8  d   QhRR/# rf   ri   )rj   s   "rk   rl   EllipticERule.__annotate__  rr  rn   c                	    \        V P                  V P                  V P                  ,          4      \	        V P                  4      ,          # rp   )rE   rd   ri  rJ  r)   rq   s   &rk   rs   EllipticERule.eval  ru  rn   ri   Nr  ri   rn   rk   rx  rx    rv  rn   rx  c                  ,    ] tR tRt$ R]R&   R]R&   RtR# )rf  i  r   rc   r   symbolri   Nr  ri   rn   rk   rf  rf    s    ONrn   rf  c                  a V P                   '       Ed   V P                   ^ ,          p\        V \        4      '       d)   VP                  S4      \	        V4      ^,          ,          # \        V \
        4      '       d*   VP                  S4      ) \        V4      ^,          ,          # \        V \        4      '       d2   VP                  S4      \	        V4      ,          \        V4      ,          # \        V \        4      '       d3   VP                  S4      ) \        V4      ,          \        V4      ,          # \        V \        4      '       d    \        V3R lV P                    4       4      # \        V \        4      '       dw   \        V P                   4      ^8X  d]   \        V P                   ^ ,          \        4      '       d6   V P                   ^ ,          \        V P                   ^,          S4      ,          # V P                  S4      # )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.

c              3  <   <"   T F  p\        VS4      x  K  	  R # 5irp   )manual_diffr   argr~  s   & rk   r   manual_diff.<locals>.<genexpr>  s     B6C{3//6   )argsr  r.   diffr1   r/   r0   r   sumr   r^  r   r  )fr~  r  s   &f rk   r  r    sR    	vvvffQia88F#c#hk113HHV$$s3x{22388F#c#h.S993HHV$$s3x/#c(::3B166BBB3166{aJqvvay&$A$Avvay;qvvay&#AAA66&>rn   c                *  aa \        V4      ^8X  dT   V^ ,          p\        V\        \        34      '       d   VP	                  4       pM<\        V4      '       g   \        R4      hM\        V4      ^8X  d   V.pM\        R4      h. pV Fg  w  po\        V\        4      '       g   K  VP                  ^ ,          oV P                  V3R lV3R l4      p VP                  S\        S4      34       Ki  	  V P                  \        V4      V,           4      # )zb
A wrapper for `expr.subs(*args)` with additional logic for substitution
of invertible functions.
z(Expected an iterable of (old, new) pairsz$subs accepts either 1 or 2 argumentsc                J   < V P                   ;'       d    V P                  S8H  # rp   )r   r   )rR  x0s   &rk   <lambda>manual_subs.<locals>.<lambda>  s    !((*C*Cqvv|*Crn   c                <   < \        V P                   S,          4      # rp   )r   )rR  news   &rk   r  r    s    #aeeCi.rn   )r^  r  r   r   itemsr_   
ValueErrorr    r  replacer   r   r   r  )r  r  sequencenew_subsoldr  r  s   &*   @@rk   manual_subsr    s    
 4yA~7hw00~~'H(##GHH $	Ta6?@@HSc3
 !B<< C(*DOORSN+  99T(^h.//rn   c                p  a aaa . pV VV3R  lpR V3R llpVV3R lo\        \        P                  S! S 4      V! S 4      ,           4      4       Fb  pVS8X  d   K  \        VS4      pV! Wg4      pVRJg   K(  Vw  rVS P	                  SS4      8X  d   KE  WiV3p
W9  g   KQ  VP                  V
4       Kd  	  V# )c                  < V^ 8X  d   R# SV,          p\        RP                  W S4      4       \        W S4      P                  4       pVP	                  S4      '       d   R# SP                  S4      '       df   VP                  S4      '       dO   \        V3R lSP                  4        4       4      p\        V3R lVP                  4        4       4      pWC8  d   R# VP                  SRR7      # )r}  Fz!substituted: {}, u: {}, u_var: {}c              3  <   <"   T F  p\        VS4      x  K  	  R # 5irp   rT   )r   tr~  s   & rk   r   ;find_substitutions.<locals>.test_subterm.<locals>.<genexpr>-  s     S8R1VAv..8Rr  c              3  <   <"   T F  p\        VS4      x  K  	  R # 5irp   r  )r   r  r   s   & rk   r   r  .  s     S6RF1e,,6Rr  )as_Add)	r`   rj   r  cancelhas_freeis_rational_functionmaxas_numer_denomas_independent)r   u_diffsubstituted
deg_before	deg_afterrc   r~  r   s   &&   rk   test_subterm(find_substitutions.<locals>.test_subterm"  s    Q;&(188OP!+%8??A''))&11k6V6VW\6]6]S	8P8P8RSSJSk6P6P6RSSI%))%)>>rn   c                   V ^8  d   QhRR/# )rg   termr   ri   )rj   s   "rk   rl   (find_substitutions.<locals>.__annotate__3  s      4 rn   c                  < . p. p\        R R .R7      pV P                  \        4       Fs  pVP                  ^ ,          pSVP                  9  d   K)  VP                  VS,          4      pV'       d   VP                  Wc,          4       Kb  VP                  V4       Ku  	  V'       d+   VP                  \        \        V4      S,          4      4       V# )rg  c                    V P                   # rp   )
is_Integerrg  s   &rk   r  :find_substitutions.<locals>.exp_subterms.<locals>.<lambda>6  s    ALLrn   
properties)r   r  r   r  free_symbolsmatchr   rV   )r  linear_coeffstermsrg  r   r  r  r~  s   &      rk   exp_subterms(find_substitutions.<locals>.exp_subterms3  s    "8!9:IIcND))A,CS---IIah'E$$UX.T" # LLXm4V;<=rn   c           
       < \        V \        \        .\        O\        N\
        N\        N54      '       d   V P                  ^ ,          .# \        V \        \        \        \        \        34      '       d   V P                  ^,          .# \        V \        \        34      '       d   V P                  ^,          .# \        V \        4      '       d   V P                  ^,          .# \        V \         4      '       d@   . pV P                   F+  pVP#                  V4       VP%                  S! V4      4       K-  	  V# \        V \&        4      '       Ed'   V P                   Uu. uF  q3P)                  S4      '       g   K  VNK  	  ppV P                  P*                  '       d   TP%                  \-        V P                  4       Uu. uFE  p^Tu;8  d$   \/        V P                  ^,          4      8  g   K.  M K2  V P0                  V,          NKG  	  up4       V P0                  P2                  '       dF   TP%                  S! V P0                  4       Uu. uF  pVP4                  '       g   K  VNK  	  up4       V# \        V \6        4      '       d@   . pV P                   F+  pVP#                  V4       VP%                  S! V4      4       K-  	  V# . # u upi u upi u upi r|  )r  r+   r!   inverse_trig_functionsr   r    r8   r  rG   rH   rI   rJ   rK   rM   rL   rN   r   r   extendr   hasr  rS   absr   is_Addr   r   )r  rr   r  ri  r  possible_subtermsr~  s   &     rk   r  -find_substitutions.<locals>.possible_subtermsD  sC   d24F 242 2"%2'02 3 3 IIaL>!z: '85 6 6IIaL>!z>:;;IIaL>!f%%IIaL>!c""AYY*1-.  Hc"" $		=	WWV_	A=xx"""TXX0F 20F110s499Q<00 '0 '$))Q,,0F 2 399###HH):499)E %)EA88  a)E % &Hc""Ayy*3/0 ! H	 >2%s*   K;K+K1K5KK'KF)r  dictfromkeysr  r   r   )rc   r~  r   resultsr  r  r   r  new_integrandr   r  r  s   fff        @rk   find_substitutionsr    s    G?" "!F $-- 1) <|I?V VWX;Q'$Q/%&3#H	vu ==7L*|, Y Nrn   c                   a a V V3R lpV# )z$Strategy that rewrites an integrand.c                   < V w  r\        R P                  VSV4      4       S! V !  '       dH   S! V !  pW18w  d:   \        W24      p\        V\        4      '       g   V'       d   \        WW44      # R# R# R# R# )z/Integral: {} is rewritten with {} on symbol: {}N)r`   rj   integral_stepsr  r  r  )integralrc   r~  r  r   r^   rewrites   &    rk   	_rewriterrewriter.<locals>._rewriterx  sy    $	?FFyRY[abch*I%(;!'<88W&y)MM >E8 &  rn   ri   )r^   r  r  s   ff rk   rewriterr  v  s    N rn   c                   a a V V3R lpV# )zAStrategy that rewrites an integrand based on some other criteria.c           	        < V w  rVw  r#\        R P                  VSW04      4       V \        V4      ,           pS! V!  '       d%   S! V!  pWR8w  d   \        W#V\	        WS4      4      # R# R# )z@Integral: {} is rewritten with {} on symbol: {} and criteria: {}N)r`   rj   r  r  r  )criteriar  rc   r~  r  r  r^   r  s   &     rk   _proxy_rewriter'proxy_rewriter.<locals>._proxy_rewriter  su    %$	PWWXacjlr}~$x.(dI%"9iPYAbcc & rn   ri   )r^   r  r  s   ff rk   proxy_rewriterr    s    d rn   c                   a  V 3R lpV# )z4Apply the rule that matches the condition, else Nonec                j   < SP                  4        F  w  rV! V 4      '       g   K  V! V 4      u # 	  R # rp   )r  )r  keyr   
conditionss   &  rk   multiplexer_rl#multiplexer.<locals>.multiplexer_rl  s+    #))+IC4yyDz! ,rn   ri   )r  r  s   f rk   multiplexerr    s    " rn   c                    a  V 3R lpV# )zHStrategy that makes an AlternativeRule out of multiple possible results.c                  < . p^ p\        R4       S Fq  pV^,           p\        RP                  W#4      4       V! V 4      pV'       g   K8  \        V\        4      '       d   KP  W@8w  g   KX  WA9  g   K`  VP	                  V4       Ks  	  \        V4      ^8X  d
   V^ ,          # V'       dM   V Uu. uF  q3P                  4       '       d   K  VNK  	  ppV'       d   \        . V OVN5!  # \        . V OVN5!  # R# u upi )r}  zList of Alternative RulesRule {}: {}N)r`   rj   r  r  r   r^  rz   rw  )r  altsr  r   r   doableruless   &     rk   _alternatives#alternatives.<locals>._alternatives  s    )*DAIE-&&u34(^Fz&,??"v'9F#  t9>7N'+Mtt3J3J3LddtFM&99&99&77$77 Ms   -C7	C7ri   )r  r  s   j rk   rx  rx    s    8( rn   c                    \        V !  # rp   )r   r  s   &rk   constant_ruler        ""rn   c           
     <   V w  rVP                  4       w  r4W$P                  9  dF   \        V\        4      '       d0   \	        V^,           4      ^ 8X  d   \        WV4      # \        WW44      # W#P                  9  d   \        V\        4      '       d   \        WW44      p\        \        V4      P                  4      '       d   V# \        V4      P                  '       d   \        ^V4      # \        WV\        \        V4      ^ 4      3\        ^V4      R3.4      # R# R# )r   TN)r   r  r  r   rY   r7  r   r1  r   r    is_zeror   r  r   )r  rc   r~  r   exptr   s   &     rk   
power_ruler    s     I&&(JD&&&:dF+C+CD1H"!)T::D77	((	(Zf-E-Ey$5SY&&''KY6**Y2c$i#$!V$d+1
  	 .F	(rn   c                    V w  r\        VP                  ^ ,          \        4      '       d#   \        W\        VP                  ^ ,          4      # R# r}  N)r  r  r   r1  r   r  rc   r~  s   &  rk   exp_ruler    s=     I)..#V,,y!Y^^A->?? -rn   c                `  a \         \        \        \        \        \
        \        \        \        \        \        \        \        \        \        \        /p\         ^\        ^\        ^/pV w  poV F  p\!        W44      '       g   K  VP#                  V^4      pVP$                  V,          SJ g   KA  \&        ;QJ d,    V3R lVP$                  RV  4       F  '       g   K   RM!	  RM! V3R lVP$                  RV  4       4      '       d   K  W,          ! VS.VP$                  RV O5!  u # 	  R# )   c              3  D   <"   T F  qP                  S4      x  K  	  R # 5irp   r  )r   r   r~  s   & rk   r   'orthogonal_poly_rule.<locals>.<genexpr>  s     F+EaEE&MM+Es    NTF)rN   r  rM   r  rG   r  rH   r  rI   r  rJ   r  rK   r  rL   r  r  getr  r   )r  orthogonal_poly_classesorthogonal_poly_var_indexrc   klass	var_indexr~  s   &     @rk   orthogonal_poly_ruler    s    
NNN,,)	
 	A!

 !Iv(i''155eQ?Iy)V3F9>>*9+EFF9>>*9+EFFF29)Viinn]g^gNhii )rn   z/list[tuple[Type, Expr, Callable | None, tuple]]_special_function_patternsrR  c                  a V w  r\         '       Eg   \        R \        .R .R7      p\        R\        .R7      p\        R\        .R7      p\        R\        .R .R7      p\        R\        .R	 .R7      p\        P	                  W4WVV34       V\        ,          V,           pV\        ^,          ,          V\        ,          ,           V,           p	\         P	                  \
        \        VR
R7      \        ,          R\        3\
        \        VR
R7      \        ,          R\        3\
        \        VR
R7      \        ,          R\        3\
        \        VR
R7      \        ,          R\        3\
        \        VR
R7      \        ,          R\        3\         ^\#        VR
R7      ,          R\$        3\        \        V	R
R7      R\&        3\        \        V	R
R7      R\(        3\        \        V	R
R7      R\*        3\
        \        V,          \        V\        ,          R
R7      ,          R\,        3\
        \/        WC\        ,          R
R7      \        ,          R\0        3\         ^\3        W6\        \        R
R7      ^,          ,          ,
          4      ,          R \4        3\         \3        W6\        \        R
R7      ^,          ,          ,
          4      R \6        334       VP9                  V\        4      p
\          F  w  rr\;        W4      '       g   K  V
P=                  V4      oS'       g   K4  \>        ;QJ d    . V3R l\         4       F  NK  	  5M! V3R l\         4       4      pVe   V! V!  '       g   K  V! W.VO5!  u # 	  R# )rJ  c                $    V P                   '       * # rp   r  rR  s   &rk   r  'special_function_rule.<locals>.<lambda>  
    199}rn   excluder  rK  r  rL  ri  c                $    V P                   '       * # rp   r  r  s   &rk   r  r    r  rn   rj  c                L    V P                   ;'       d    V P                  '       * # rp   )is_nonnegative
is_integerr  s   &rk   r  r    s    1++<<=rn   FevaluateNc                
    W8g  # rp   ri   rJ  ri  s   &&rk   r  r        QVrn   c                
    W8g  # rp   ri   r  s   &&rk   r  r  
  r  rn   c              3  p   <"   T F+  pSP                  V4      f   K  SP                  V4      x  K-  	  R # 5irp   )r  )r   wr  s   & rk   r   (special_function_rule.<locals>.<genexpr>  s-      "?1%*YYq\ #/%))A,,s   66) r  r   _symbol_wildsr  r   r   r4  r,   r#  r#   r-  r-   r:  r&   r@  r   r    rF  rL  r]  rT  ri  rP   rc  r)   ro  rx  r   r  r  tuple)r  rc   r~  rJ  rK  rL  ri  rj  linear_patternquadratic_pattern
_integrandtype_pattern
constraintr   	wild_valsr  s   &               @rk   special_function_ruler    s    I%%wi5L4MNwi(wi(wi5L4MNwi=5? @qQ1o& 7QgqjL1W94q8"))#nu5g=tVL#nu5g=tVL$~6w>gN#nu5g=tVL$~6w>gN!C77vF#'%8$H#'%8$M#'%8$M'1*S7U;;T>R'!wY7?{S!Ds7U;Q>>>??#]4$qS591<<<=#]4+
 	" 0J,F(
j(($$W-Eu!E "? "?EE "? "? ?	%Y)?)?	>I>> -Grn   c               $    V ^8  d   QhRRRRRR/# )rg   generic_steprb   degenerate_stepr   rh   ri   )rj   s   "rk   rl   rl     s'     V VT VK V\` Vrn   c                   Vf   V# \        V\        4      '       d7   VP                   UUu. uF  w  r4W4V ,          P                  4       3NK  	  pppMW3.p\        V\        4      '       d   WRP                  ,          pM!VP	                  V\
        P                  34       \        VP                  VP                  V4      # u uppi rp   )	r  r  r  rY   r   r   truerc   rd   )generic_condr!  r"  r   r  r  s   &&&   rk   _add_degenerate_stepr&    s    ,..-9-F-FH-FMG !,#6"@"@"BC-F 	 H &45/=11444_aff56//1F1FUUHs   #Cc                   V ^8  d   QhRR/# rg   r  rf  ri   )rj   s   "rk   rl   rl   &  s     2M 2Ml 2Mrn   c                  aaaa	a
aa V w  po\        R S.R7      o\        RS^ .R7      o	SS	S,          ,           o\        P                  o
 ! R R\        4      oR VVVV	V
VV3R llo S! V4      w  r#S
\        P                  J d   RpM\	        TP                  S^ 4      S4      p\        TSY#4      p\        S
YT4      #   S d     R# i ; i)rJ  r  rK  c                      ] tR tRtRtR# ) nested_pow_rule.<locals>.NoMatchi/  ri   Nr   ri   rn   rk   NoMatchr+  /  s    rn   r,  c                    V ^8  d   QhRRRR/# )rg   r  r   rh   ztuple[Expr, Expr]ri   )rj   s   "rk   rl   %nested_pow_rule.<locals>.__annotate__2  s      D %6 rn   c                x  < V P                  S4      '       g!   \        P                  \        P                  3# V P                  '       d   V P                  4       w  rV'       g!   \        P                  \        P                  3# V Uu. uF  pS! V4      NK  	  ppV UUu0 uF  w  rQVkK	  	  pppVP                  \        P                  4       \        V4      ^8X  d!   VP                  4       \        R V 4       !  3# ShV P                  '       dE   V P                  V P                  ruVP                  S4      '       d   ShS! V4      w  rWV,          3# V P                  S4      p
V
'       d?   V
S,          V
S,          r[SW,          ,           p\        V^ 4      oV\        P                  3# Shu upi u uppi )r   c              3  *   "   T F	  w  rVx  K  	  R # 5irp   ri   )r   r  rj  s   &  rk   r   9nested_pow_rule.<locals>._get_base_exp.<locals>.<genexpr>=  s     )@!s   )r  r   Oner  is_Mulas_coeff_muldiscardr^  popr   r   r   r   r  r   )r  r  r  r  r  rK  basesrj  base_sub_expr  rJ  r,  _get_base_expa_b_r%  r  rR  s   &           rk   r:  &nested_pow_rule.<locals>._get_base_exp2  sQ   }}Q55!&&= ;;;((*HAuuaff}$7<=ut}T*uG=#*+741Q7E+MM!%% 5zQyy{C)@)@$AAAM;;;99dhhqzz!}}*1-NEA+%%

7#9eBiqGEa8L!%%<' >+s   	F1!F6N)r   r   r$  	Exceptionr   r   r   r&  )r  rc   r   r   r"  r!  r,  r:  r;  r<  r%  r  rR  s   &     @@@@@@@rk   nested_pow_ruler?  &  s    LIq	cA3	B	cAq6	"BAgG66L)  8"9-
 qvv 'y~~a';Q? At:LlLL  s   )
B? ?C
	C
c                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl   [  s     II II IIrn   c                  aa V w  ooSP                  4       w  r#\        RS.R7      p\        RS.R7      p\        RS^ .R7      pVP                  WES,          ,           VS^,          ,          ,           4      pV'       g   R# R VV3R llpWEV3 U	u. uF"  qP                  V	\        P
                  4      NK$  	  up	w  rEp\        V^ 4      p
V'       d   V
\        P                  J d   RpMNVP                  '       d   \        WC,          S4      pM)\        \        WES,          ,           V,          S4      4      p\        ^V,          ^,           4      ^ 8X  Ed   V) ^V,          ,          WE^,          ^V,          ,          ,
          r\        V^ 4      pRpV\        P                  JdI   \        ^\        VSV,
          ^,          ,          4      ,          SSV,
          \        P                  4      pV\        P                   J d   V# \#        SSWEV4      p\%        VVV4      pVP&                  '       d   VP&                  '       d   . p\(        V^V) RV3\+        V^ 8  V^ 8  4      3\,        V^V^V3\+        V^ 8  V^ 8  4      33 FO  w  ppV\        P                  J d	   V! V!  u # V\        P                   Jg   K8  VP/                  V! V!  V34       KQ  	  V'       dB   VP0                  '       g"   VP/                  V\        P                  34       \3        SSV4      pMTp\%        V
VV4      # V\        P4                  8X  d   \7        SSWEV4      p\%        V
VV4      # R# u up	i )	za
Set degenerate=False on recursive call where coefficient of quadratic term
is assumed non-zero.
rJ  r  rK  rL  Nc                   V ^8  d   QhRR/# )rg   rh   rb   ri   )rj   s   "rk   rl   'inverse_trig_rule.<locals>.__annotate__j  s       rn   c                  < \        R 4      p^\        W!,          WC,          SV,
          ^,          ,          ,           4      ,          p\        W1,          4      SV,
          ,          p^\        V4      ,          p	Rp
VSJd   Tp
Tp^\        W$V^,          ,          ,           4      ,          pV ! W4      pV	^8w  d   \        W,          SWV4      pV
e   \        VSWjV4      pV^ 8w  d   \	        SSW|4      pV# )r   N)r   r)   r   r   r  )	RuleClassrJ  sign_arL  sign_chr   r  quadratic_baser   r   standard_formr   rc   r~  s   &&&&&&       rk   make_inverse_trig,inverse_trig_rule.<locals>.make_inverse_trigj  s    c
d68fhq1}&<<==	acF1H-T!W9'#F"N$v~q/@(@@AAM:q='(>ahiGIvugFG6(FIOGrn   r   )r   r   r  r  r   r  r   r$  r  r   sqrt_linear_rulerf  rY   r   r)   NegativeOnefalserI  r&  is_realr=  rR   rC  r   is_positiver  Halfrp  )r  r[  r   r   rJ  rK  rL  r  rK  r_  r%  r"  rH  knon_square_condsquare_stepr!  rm  r  r  r  rc   r~  s   &&                   @@rk   re  re  [  s   
 !Iv%%'IDS6(#AS6(#AS61+&AJJqV8|a	k12E & /0AY7YyyAFF#Y7GA!a8L/	
&qx8*<ZC8OQW+XY#	ar1Q3xT1Q3Z1Q(!&&('$q&(Q*?(?PQSTS`S`aKagg%29faAN#O\;O999EaQBA.AE1q50ABq!Q1-s1q5!a%/@A
d 166>,d33qww&LL"3T":D!AB }}}LL,!78$Y>##L$HH
aff} FA!<#L$HH K 8s   (M c                    V w  rVP                  4        Uu. uF  p\        W24      NK  	  ppR V9   d   R # \        WV4      # u upi rp   )as_ordered_termsr  r   )r  rc   r~  gr  s   &    rk   add_rulerY    sU     I 11353! a(3  57?4K	7(KK5s   Ac                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl     s     M M| Mrn   c                ~    V w  rVP                  V4      w  r4V^8w  d   \        WB4      pVe   \        WW4V4      # R# R# r   N)r  r  r   )r  rc   r~  rh  r  	next_steps   &     rk   mul_ruler^    sN     I ''/HEz"1-	 $Y)LL ! rn   c                   V ^8  d   QhRR/# )rg   rh   z*tuple[Expr, Expr, Expr, Expr, Rule] | Noneri   )rj   s   "rk   rl   rl     s     \ \&P \rn   c                *  a V3R  lpR R lpV! \         4      V! \         W#! \        \        4      V! \        4      .p\        R4      p\        V \         .\        O54      '       d	   WP,          p \        V4       EF  w  rgV! V 4      pV'       g   K  Vw  rSV	P                  9  d   V	P                  V4      '       g    R# V	P                  V^4      p	V
P                  V^4      p
Wr8X  d   V	P                  S4      '       g    R# \        V	\         4      '       d5   ^V
,          pVP                  S4      '       d   \        VS4      ^8X  d    R# Wr8X  d   V
P                  '       g2   V
P                  \        4      '       g   \        V
\        4      '       dN   \!        V
S4      pVP#                  4       '       d    R# V	P%                  S4      pVP'                  4       pWWV3u # RpV^8  d   RpMWr8X  dd   V
P(                  '       dR   \*        ;QJ d&    R V
P(                   4       F  '       d   K   RM	  RM! R V
P(                   4       4      '       d   RpMVWF^,           R  FG  pV! V 4      pV'       g   K  V^ ,          P                  V^4      P-                  V
4      '       g   KE  Rp M	  V'       g   EKA  V	P%                  S4      p\!        \/        V
4      S4      pVP#                  4       '       d   EK  VP'                  4       pWWV3u # 	  R# )c                ^  < V P                  4       P                  4       p \        V \        4      '       g   V P                  '       g   . M3V P
                   Uu. uF  qP                  S4      '       g   K  VNK  	  uppV'       d#   \        V!  pW,          P                  4       pW43# R # u upi rp   )r  togetherr  r*   r3  r  is_algebraic_exprr   )rc   r  	algebraicr   r   r~  s   &    rk   pull_out_algebraic'_parts_rule.<locals>.pull_out_algebraic  s    $$&//1	%i;;9CSCSCSR!*Q#3H3H3P##Q 	YA-'')B5L  Rs   B*5B*c                   V ^8  d   QhRR/# )rg   rh   z*Callable[[Expr], tuple[Expr, Expr] | None]ri   )rj   s   "rk   rl   !_parts_rule.<locals>.__annotate__  s      "L rn   c                    a  R  V 3R llpV# )c                    V ^8  d   QhRRRR/# )rg   rc   r   rh   ztuple[Expr, Expr] | Noneri   )rj   s   "rk   rl   5_parts_rule.<locals>.pull_out_u.<locals>.__annotate__  s     	 	T 	.F 	rn   c                  <a a \         ;QJ d    V 3R  lS 4       F  '       g   K   RM	  RM! V 3R  lS 4       4      '       d|   S P                   Uau. uFG  o\         ;QJ d    V3R lS 4       F  '       g   K   RM	  RM! V3R lS 4       4      '       g   KE  SNKI  	  ppV'       d   \        V!  pS V,          pW43# R# u upi )c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irp   r  r   r  rc   s   & rk   r   I_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl.<locals>.<genexpr>  s     7Y9==##Y   !TFc              3  <   <"   T F  p\        SV4      x  K  	  R # 5irp   )r  )r   clsr  s   & rk   r   ro    s     Iyz#s33yr  N)r   r  r   )rc   r  r  r   r   	functionss   f`   rk   pull_out_u_rl6_parts_rule.<locals>.pull_out_u.<locals>.pull_out_u_rl  s    s7Y7sss7Y777'0~~ K~3IyI333IyII ~ KT
A"QB5LKs   C#C:CCri   )rs  rt  s   j rk   
pull_out_u_parts_rule.<locals>.pull_out_u  s    	 	 rn   	temporaryNFTc              3  X   "   T F   p\        V\        \        \        34      x  K"  	  R # 5irp   )r  r-   r,   r   )r   rJ  s   & rk   r   _parts_rule.<locals>.<genexpr>  s'      " A q3S/22 s   (*)r    r  r-   r,   r   r   r  r  r  r  r   is_polynomialrT   is_Derivativer+   rO   r  rz   r  rs   r  allequalsrY   )rc   r~  re  rv  liate_rulesdummyindexr   r   r   r   rec_dvr   dur   acceptlruler  s   &f                rk   _parts_ruler    s    c?J0F$G%z#s';c?$K
 +E)c;$:;<<%	 -i6EA Q^^+AEE%LLua A"B )!//&2I2I!S!!2((0066*a/ )###rvv.C'D'D"2';<<+B7F0022#VVF^"KKM aV33 Fqy, "" "" " "!F(4Ei(AqQqTYYua077;;!%	 5 vVVF^'f=0022A!//o .p rn   c                  aa V w  poVP                  4       w  r!\        VS4      p. pV'       Ed   Vw  rVrxp	\        R P                  WVWxV	4      4       VP	                  V4       \        V\        4      '       d   R# \        V\        \        \        \        \        34      '       dE   VP                  S\        /4      p
\        V
,          ^8  d   R# \        V
;;,          ^,          uu&   \        ^4       EF#  p\        RP                  WW4      4       Wx,          V,          P!                  4       pV^8X  d    MSVP"                  9  dv   \%        TSV UUUUU	u. uF  w  rVrxp	\'        RRWVV	R4      NK  	  up	ppppR\)        V4      ,          V,          4      pV^8w  d   V'       d   \+        W!,          SW!V4      pVu # Wx,          P                  4       w  r\        VS4      pV'       d.   Vw  rVrxp	W^,          pW,          pVP	                  WVWxV	34       EK$   M	  VV3R loV'       dV   V^ ,          w  rVrxp	\'        VSWVV	S! VR,          Wx,          4      4      pV^8w  d   V'       d   \+        W!,          SW!V4      pV# R# u up	ppppi )z,u : {}, dv : {}, v : {}, du : {}, v_step: {}Nz7Cyclic integration {} with v: {}, du: {}, integrand: {}c                   < V '       d1   V ^ ,          w  r#rEp\        VSW#VS! V R,          WE,          4      4      # \        VS4      # )r}  r   NN)r   r  )	stepsrc   r   r   r   r  r   make_second_stepr~  s	   &&     rk   r  $parts_rule.<locals>.make_second_stepI  sI    #(8 A1&Yv?OPUVXPY[\[a?bcci00rn   r  r   )as_coeff_Mulr  r`   rj   r   r  rQ   r-   r,   r   r&   r#   xreplace_cache_dummy_parts_u_cacherd  r  r  r   r   r^  r   )r  rc   r   r   r  r   r   r   r  r   cachekeyr  r   r   next_constantnext_integrandr  r~  s   &               @@rk   
parts_ruler    sI    Iv#002HF+FEv%qf<CCA1RXYZVa"" a#sCt455zz6<"89Hh'!+8$)$ qAKRRSTY[ghFi/779Ka[555&y&38:38/! tT1&$?38:CJ&46 Mt,X-A68`deD ./V,A,A,C)M 8F'-$qf"#aQF341 41 $QxqfFA6;KERTIWXW];^_Mt$X%968X\]D 3:s   Jc           	     (   V w  rV\        V4      8X  d   \        W4      # V\        V4      8X  d   \        W4      # V\	        V4      ^,          8X  d   \        W4      # V\        V4      ^,          8X  d   \        W4      # \        V\        4      '       d.   \        VP                  !  \        VP                  !  ,          pEM<\        V\        4      '       d-   \        VP                  !  \        VP                  !  ,          pM\        V\        4      '       dg   VP                  ^ ,          p\	        V4      ^,          \        V4      \	        V4      ,          ,           \	        V4      \        V4      ,           ,          pM~\        V\        4      '       dg   VP                  ^ ,          p\        V4      ^,          \        V4      \        V4      ,          ,           \        V4      \        V4      ,           ,          pMR# \        WV\        W24      4      # r]  )r-   r   r,   r  r1   r  r0   r  r  r.   r  r/   r  r  )r  rc   r~  r  r  s   &    rk   	trig_ruler  W  sw    ICKy))CKy))CKN"	**CKN"	**)S!!(3	+??		Is	#	#(3	+??		Is	#	#nnQ#hkCHs3x$77#hS)+		Is	#	#nnQ#hkCHs3x$77#hS)+	 	y)^I5VWWrn   c                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl   s  s     - - -rn   c                    V w  rV\        V4      \        V4      ,          8X  d   \        W4      # V\        V4      \	        V4      ,          8X  d   \        W4      # R # rp   )r1   r.   r  r0   r/   r  r  s   &  rk   trig_product_ruler  s  sO     ICK#f+--),,CK#f+--),, .rn   c                j	   V w  r\        R V.R7      p\        RV.R7      p\        RV.R7      pVP                  W4V^,          ,          V,           ,          4      pV'       Ed   Wc,          Wd,          We,          rTp\        WW4V4      pVP                  '       Ed:   VP                  '       Ed'   WT,          ^ 8  pV\        P
                  J d   V# V^\        V) 4      ,          \        V4      ,          ,          p	\        V) V,          4      p
^W*,
          ,          p^W*,           ,          p\        WW*,
          4      \        V) VRV\        WW*,           4      4      .pW,
          ;r\        WV4      pV	^8w  d   \        WRR7      p\        WWV4      p\        WVV4      pV\        P                  J d   V# \        WWx3V\        P
                  3.4      # \        WVR4      pV^8w  d   \        W^V,          VR,          V4      p\        WV\        V^ 4      3VR3.4      # \        RV.R7      pVP                  W4V^,          ,          WR,          ,           V,           ,          4      pV'       d   VV,          VV,          rTVP                   '       d   R# \#        R	4      pW%^V,          ,          ,           pVP%                  VVV^V,          ,          ,
          4      p\'        VV4      pV'       d   \)        VVVVV4      # R# \        R
V.R7      pVP                  W2,          V,           WR^,          ,          VV,          ,           V,           ,          4      pV'       EdU   VV,          VV,          VV,          VV,          VV,          3w  r4pppVP                   '       d   R# WR^,          ,          VV,          ,           V,           pV^V,          ,          p^V,          V,          V,           pV) V,          V,           p\#        R	4      p\)        WVV\'        VR,          V4      4      pV^8w  d%   \        VV,          V,          VVVV,          V4      pVP                   '       d   V# \'        VV,          V4      p\        WVV.4      p VV,          V,          VV,          ,           p!\        WV!V 4      # R# )rJ  r  rK  rL  Fr  Tri  Nr   rj  r   rb  )r   r  r  rP  r   r$  r)   r7  r   r   r   r  rO  r  r   r   r  r   r   r  r   )"r  rc   r~  rJ  rK  rL  r  general_rulepositive_condrh  r   r1r2	log_stepsr  subnegative_steppowerri  match2r   r   
integrand2r]  rj  match3denominatorconstnumer1numer2step1step2r   rewritens"   &                                 rk   quadratic_denom_ruler  {  s    IS6(#AS6(#AS6(#AOOAVq[1!456Eu(EHeha!)Q1=!"4"4"4C!GM&##qqbz$q')*EQBqDzHFO$BFO$B'FOD*B3Br[a[j@klnI g%I#C;MzU;	 1)UQ^ _'	9mTM'$$ l5RUbdedjdjTk4lmm)VR86%i1fbj%PEY,1a1IESW=0YZZS6(#A__Qfk/AJ">"BCDFq	6!91999#JQqS'!^^FAQqS	M:
":q1	VQ	BBS6(#A__ai!maK!f*0Lq0PQRFvq	6!9fQiF1IMaA999!)ma&j014AaCQ3v:a<Q#JinQWa&@BA:%eFl;&>&+VK-?HE>>>Lvk16:9uen=<+F;,>>9hAA
rn   c                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl     s     ) )| )rn   c                ,   V w  r\        RV.R7      p\        RV^ .R7      p^ ;rV. . . rpVP                  \        4       EF  p
V
P                  V
P                  rVP
                  '       g   W+P                  9  d   K?  VP                  '       g    R# VP                  W4V,          ,           4      pV'       g   K|  W,          W,          rW_,          W,          8w  g   Wo,          P                  '       g    R# V^ 8X  g   Wo,          ^8  \        P                  J d   YreVP                  V4       V	P                  V4       VP                  VP                  4       EK  	  V^ 8X  d   R# \        V4      pWVV,          ,           ^V,          ,          p\        R4      pTP!                  \#        WyV4       UUUu/ uF\  w  rpV\        P$                  V,          ,          WF,          \        P$                  V,          ,          VVV,          ,          ,          bK^  	  uppp4      P!                  VVV,          V,
          V,          4      p\'        VVV^,
          ,          ,          V,          V,          V4      pVP)                  4       '       g   \+        WVVV4      p\-        V^ 4      pV\        P                  JdR   VP!                  \.        P1                  V	^ 4      4      p\'        VV4      p\3        WVV3V\        P                  3.4      pV# R# u upppi )z"
Substitute common (a+b*x)**(1/n)
rJ  r  rK  Nr   )r   r  r   r   r   r  r  is_Rationalr  r
  r   r$  r   qrU   r   r   zipr2  r  rz   r   r   r  r  r  )r  rc   rR  rJ  rK  a0b0r7  qsbspow_r   r   r  a1b1q0u_xr   r  r  r   rm  r%  
simplifiedr"  s   &                         rk   rM  rM    so    LIS1#AS1a&!AKBBrEs#YYd???a'8'88

1qS5!58B5BE>"%!7!7!77ruqyQVV+T
		"
		$&&! $" 
Qw2,B19"
Cc
A..4724F"H4Fjdq #'q/ADAEE!G3DQAY3N"N4F"H IIMaRSUWRWXZRZ\^Q^I_ [RT225b8!<G%%''9C9"ayqvv%"b!(<=J,Z;O |0DXYX^X^F_/`aD ("Hs   7A"Lc                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl     s     @M @M, @Mrn   c           
       aaaa V w  po\        R S.R7      o\        RS.R7      o\        RS^ .R7      o\        R4      p\        RR .R7      pVP                  V\        SSS,          ,           SS^,          ,          ,           4      V,          ,          4      pV'       g   R# VS,          VS,          VS,          WS,          WT,          3w  ooor4VP                  S4      pVf   R# \	        S^ 4      pV'       d   V\
        P                  J d   RpMpSP                  '       d%   \        V\        S4      V,          ,          S4      pM:\        \        V\        SSS,          ,           4      V,          ,          S4      4      pR	 VVVV3R
 llp	V^ 8  d   VSSS,          ,           SS^,          ,          ,           V^,           ^,          ,          ,          p
V
P                  4       \        SSS,          ,           SS^,          ,          ,           4      ,          pV	! W4      p\        VSW4      pMVR8X  d
   V	! Wb4      pMR# \        W}V4      # )rJ  r  rK  rL  r  rg  c                B    V P                   ;'       d    V P                  # rp   )r  is_oddr  s   &rk   r  %sqrt_quadratic_rule.<locals>.<lambda>  s    (A(A(Arn   r  Nc                    V ^8  d   QhRRRR/# )rg   
numer_polyrW   rc   r   ri   )rj   s   "rk   rl   )sqrt_quadratic_rule.<locals>.__annotate__  s      d t rn   c                  < \        SSS,          ,           SS^,          ,          ,           4      pV P                  4       pV^8:  Ed   V^8X  d   V P                  4       M\        P                  V P                  4       3w  rEV^S,          ,          pWVS,          ,
          p^S,          S,          S,           V,          pRp	Rp
V^ 8w  d   \        R4      p\        ^\        V4      ,          W\        P                  ) 4      p\        VSVSSS,          ,           SS^,          ,          ,           V4      p
V^8w  d   \        Wh,          SWhV
4      p
V^ 8w  dB   \        \        ^V,          S4      RR7      p	V^8w  d   \        Wr,          SV^V,          V	4      p	V
'       d?   V	'       d7   \        Wh,          Wr,          RR7      p\        VSV\        VSW.4      4      pV# T
;'       g    T	p V# V P                  4       p\!        VSSSSV4      pV# )rg   Nr   FrZ  r  )r)   rT   
all_coeffsr   r  as_exprr   r   rR  r   r   re  rf  r   r  r   rU  )r  rc   r  degrj  ri  ABpre_substituteconstant_steplinear_stepr   pow_ruleaddrm  rV  rJ  rK  rL  rR  s   &&              rk   sqrt_quadratic_denom_rule6sqrt_quadratic_rule.<locals>.sqrt_quadratic_denom_rule  s   QqsU1QT6\"!!8.1Qh:((*QVVZEWEWEY<ZDA1Q3AA#Ac!eAgu_N)-M'+KAv#J$QtAwYqvvg>#NAq!AaC%!Q$,Q6"3A4Da\g"hKAv 1,qw2JW\ ]6$5agq!QuWm$\M}!*AGeD$/	1c73PQT_SoCp$q 	 #33m   **,F))Q1aHDrn   r   )r   r  r)   as_polyr   r   r$  r  r  rM  rf  r  r  r&  )r  r[  rc   r  rg  r  f_polyr%  r"  r  r  r  r   r!  rJ  rK  rL  rR  s   &&            @@@@rk   rt  rt    s   LIqS1#AS1#AS1a&!AS	ASABCAOOAd1QqS51a4<0!334E!HeAha%(EHDMAq!QYYq\F~a8L/	
(47A:q9*<$q1u+q.8H!+LM @ 	1uq1uQq!tV|!Qw77
&&(a!eAadFl);;	+JB"9aD	
b0COLLrn   c                   V ^8  d   QhRR/# )rg   r  ztuple[Expr, Symbol]ri   )rj   s   "rk   rl   rl   7  s     3 31 3rn   c                j   V w  r\        V\        4      '       Ed   VP                  ^ ,          V8X  Ed   VP                  \        8X  d   \        W4      # VP                  \        8X  d   \        W4      # \        R4      pVP                  \        8X  dO   \	        V4      \        V4      ,          p\        WV\        WBV\        V4      \        ^V,          W34      4      4      # VP                  \        8X  dO   \        V4      \	        V4      ,          p\        WV\        WBV\	        V4      \        ^V,          W34      4      4      # VP                  \        4      pVP                  \        8X  dq   \        WV\        WBV\        V^,          4      \!        ^V^,          ^,           ,          V\#        ^4      \"        P$                  \"        P$                  4      4      4      # VP                  \&        8X  d;   \        WV\        WBV\        V^,          4      \        ^V,          W34      4      4      # R# R# R# )r}  r   N)r  r!   r  r  r&   r&  r#   r-  r   r'   r  r   r7  r$   r  r%   r  r   r2  r"   )r  rc   r~  r   r  s   &    rk   hyperbolic_ruler  7  s    I)/00Y^^A5F&5P>>T!I..>>T!I..#J>>T!VT&\1Iy)AtF|^AaCQR=VWY Y>>T!VT&\1Iy)AtF|^AaCQR=VWY Y "))$/I~~%"9iY4q>!!QTAX,1Q4FHI I ~~%"9iY4q>%ac1023 3 &) 6Q0rn   c                    \        R V .R7      p\        RV .R7      p\        RV .R .R7      p\        RV .R .R7      pWW43# )rJ  r  rK  r   c                "    \        V \        4      # rp   r  r   r  s   &rk   r  make_wilds.<locals>.<lambda>V      *Q:Prn   r  rg  c                "    \        V \        4      # rp   r  r  s   &rk   r  r  W  r  rn   )r   )r~  rJ  rK  r   rg  s   &    rk   
make_wildsr  R  sP    S6(#AS6(#AS6(0P/QRAS6(0P/QRA:rn   c                    \        V 4      w  rr4\        W,          4      V,          \        W ,          4      V,          ,          pWQW#V3# rp   )r  r-   r,   r~  rJ  rK  r   rg  r  s   &     rk   sincos_patternr  [  =    F#JA!!(mQQX!11GqQrn   c                    \        V 4      w  rr4\        W,          4      V,          \        W ,          4      V,          ,          pWQW#V3# rp   )r  r.   r1   r  s   &     rk   tansec_patternr  b  r  rn   c                    \        V 4      w  rr4\        W,          4      V,          \        W ,          4      V,          ,          pWQW#V3# rp   )r  r/   r0   r  s   &     rk   cotcsc_patternr  i  r  rn   c                    \        R V .R7      p\        RV .R7      p\        R4      p\        W,          V,           4      V,          pWAW#3# )r   r  rK  rX  )r   r8   )r~  r   rK  rX  r  s   &    rk   heaviside_patternr  p  sG    S6(#AS6(#AS	A1%)Gqrn   c                   a  V 3R  lpV# )c                   < S! V !  # rp   ri   )r  r  s   &rk   
uncurry_rluncurry.<locals>.uncurry_rlz  s    T{rn   ri   )r  r  s   f rk   uncurryr  y  s    rn   c                   a  V 3R  lpV# )c           	     `   < V w  rr4rVS! WW4WV4      pWu8w  d   \        WVV\        Wv4      4      # R # rp   )r  r  )	r  rJ  rK  r   rg  rc   r~  r  r  s	   &       rk   trig_rewriter_rl'trig_rewriter.<locals>.trig_rewriter_rl  s<    (,%aIA!	:	!y)^I=^__ "rn   ri   )r  r  s   f rk   trig_rewriterr  ~  s    `
 rn   c                    VP                   ;'       d5    VP                   ;'       d!    VP                  ;'       d    VP                  # rp   )is_evenr
  rJ  rK  r   rg  r_  rk  s   &&&&&&rk   r  r    sC    QYY * *199 * ** *))*rn   c                    ^\        ^V ,          V,          4      ,
          ^,          V^,          ,          ^\        ^V,          V,          4      ,           ^,          V^,          ,          ,          # r  )r,   rJ  rK  r   rg  r_  r~  s   &&&&&&rk   r  r    sK    q3qs6z?':a&?QU%K'(3qs6z?':a&?QU%K%Mrn   c                4    VP                   ;'       d    V^8  # r  r  r  s   &&&&&&rk   r  r        188;N;NQ;Nrn   c                    ^\        W,          4      ^,          ,
          V^,
          ^,          ,          \        W,          4      ,          \        W,          4      V,          ,          # r  )r,   r-   r  s   &&&&&&rk   r  r    B    QQX)9%9a!eq[$I$'M%2$'MQ$6%7rn   c                4    VP                   ;'       d    V^8  # r  r  r  s   &&&&&&rk   r  r    r  rn   c                    ^\        W,          4      ^,          ,
          V^,
          ^,          ,          \        W,          4      ,          \        W,          4      V,          ,          # r  )r-   r,   r  s   &&&&&&rk   r  r    r  rn   c                4    VP                   ;'       d    V^8  #    r  r  s   &&&&&&rk   r  r        AII<P<P!q&<Prn   c                    ^\        W,          4      ^,          ,           V^,          ^,
          ,          \        W,          4      ^,          ,          \        W,          4      V,          ,          # r  )r.   r1   r  s   &&&&&&rk   r  r    G    QQX)9%9qsQw$G$'M1$4%5$'MQ$6%7rn   c                    VP                   # rp   r  r  s   &&&&&&rk   r  r        188rn   c                    \        W,          4      ^,          ^,
          V^,
          ^,          ,          \        W,          4      ,          \        W,          4      V,          ,          # rP  )r1   r.   r  s   &&&&&&rk   r  r    sB    S]A%5%9A{$K%(]%3%(]a%7%8rn   c                &    V^8H  ;'       d    V^ 8H  # rP  ri   r  s   &&&&&&rk   r  r    s    AF<M<MqAv<Mrn   c                @    \        W,          4      ^,          ^,
          # rP  )r1   r  s   &&&&&&rk   r  r    s    CM1$4q$8rn   c                4    VP                   ;'       d    V^8  # r   r  r  s   &&&&&&rk   r  r    r  rn   c                    ^\        W,          4      ^,          ,           V^,          ^,
          ,          \        W,          4      ^,          ,          \        W,          4      V,          ,          # r  )r/   r0   r  s   &&&&&&rk   r  r    r  rn   c                    VP                   # rp   r  r  s   &&&&&&rk   r  r    r  rn   c                    \        W,          4      ^,          ^,
          V^,
          ^,          ,          \        W,          4      ,          \        W,          4      V,          ,          # rP  )r0   r/   r  s   &&&&&&rk   r  r    sB    S]A%5%9A{$K$'M%2$'MQ$6%7rn   c                  a	 V w  o	p\         ;QJ d)    V	3R  l\        \        3 4       F  '       g   K   RM	  RM! V	3R  l\        \        3 4       4      '       d   \        V4      w  r#rEpS	P	                  V4      pV'       g   R# \        \        \        \        \        \        \        /4      ! \        W4WV3 Uu. uF"  qP                  V\        P                  4      NK$  	  upS	V.,           4      4      # R# u upi )c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irp   r  rn  s   & rk   r   #trig_sincos_rule.<locals>.<genexpr>       
0Z9==Zrp  TFN)r   r-   r,   r  r  r  sincos_botheven_conditionsincos_bothevensincos_sinodd_conditionsincos_sinoddsincos_cosodd_conditionsincos_cosoddr  r  r   r  
r  r~  r  rJ  rK  r   rg  r  r_  rc   s
   &        @rk   trig_sincos_ruler    s     Iv
s
0c3Z
0sss
0c3Z
000,V4A!(%#]#]
  ,-!<8<aYYq!&&!<8 !	" 	" 1 9s   9(C7c                P  a	 V w  o	pS	P                  ^\        V4      ,          \        V4      /4      o	\        ;QJ d)    V	3R l\        \        3 4       F  '       g   K   RM	  RM! V	3R l\        \        3 4       4      '       d   \        V4      w  r#rEpS	P                  V4      pV'       g   R# \        \        \        \        \        \        \        /4      ! \        W4WV3 Uu. uF"  qP                  V\         P"                  4      NK$  	  upS	V.,           4      4      # R# u upi )r   c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irp   r  rn  s   & rk   r   #trig_tansec_rule.<locals>.<genexpr>  r  rp  TFN)r   r,   r1   r   r.   r  r  r  tansec_tanodd_conditiontansec_tanoddtansec_seceven_conditiontansec_seceventan_tansquared_conditiontan_tansquaredr  r  r   r  r  s
   &        @rk   trig_tansec_ruler$    s     Iv	CKV  I s
0c3Z
0sss
0c3Z
000,V4A!(#]$n$n
  ,-!<8<aYYq!&&!<8 !	" 	" 1 9s   %(D#c                  a	 V w  o	pS	P                  ^\        V4      ,          \        V4      ^\        V4      ,          \	        V4      \        V4      \        V4      ,          \	        V4      /4      o	\        ;QJ d)    V	3R l\        \        3 4       F  '       g   K   RM	  RM! V	3R l\        \        3 4       4      '       d   \        V4      w  r#rEpS	P                  V4      pV'       g   R# \        \        \        \        \        /4      ! \        W4WV3 Uu. uF"  qP                  V\         P"                  4      NK$  	  upS	V.,           4      4      # R# u upi )r   c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5irp   r  rn  s   & rk   r   #trig_cotcsc_rule.<locals>.<genexpr>  r  rp  TFN)r   r-   r0   r.   r/   r,   r   r  r  r  cotcsc_cotodd_conditioncotcsc_cotoddcotcsc_csceven_conditioncotcsc_cscevenr  r  r   r  r  s
   &        @rk   trig_cotcsc_ruler,    s    Iv	CKV	CKVFc&k!3v;  I s
0c3Z
0sss
0c3Z
000,V4A!(#]$n
  ,-!<8<aYYq!&&!<8 !" 	" 1 9s   (Ec                @   V w  r\        R \        ^V,          4      .R7      pVP                  \        ^V,          4      V,          4      pV'       dL   ^\        V4      ,          \        V4      ,          \        ^V,          4      ,          p\	        W,          V4      # R# )rJ  r  N)r   r-   r  r,   r  )r  rc   r~  rJ  r  
sin_doubles   &     rk   trig_sindouble_ruler/    su     IS3qx=/*AOOC&M!O,Es6{]3v;.s1V8}<
i4f== rn   c                    \        \        \        4      \        \        4      \        \        4      \        \
        4      4      ! V 4      # rp   )r\   r]   r  r$  r,  r/  r  s   &rk   trig_powers_products_ruler1    s<    ),-,-,-/02 3;< <rn   c           
     r   V w  r\        R ^ V.R7      p\        R^ V.R7      p\        R4      pW4V^,          ,          ,           pVP                  V4      pV EF[  pVP                  V4      p	V	P	                  V\
        P                  4      p
V	P	                  V\
        P                  4      pV
P                  ;'       d    V
^ 8  ;'       g    V
P                  pVP                  ;'       d    V^ 8  ;'       g    VP                  pV
P                  ;'       d    V
^ 8  ;'       g    V
P                  pVP                  ;'       d    V^ 8  ;'       g    VP                  pRpV'       d7   V'       d/   \        V
4      \        V4      ,          \        V4      ,          pRpMV'       dK   V'       dC   \        V
4      \        V) 4      ,          pV\        V4      ,          p\        VV) 8  VV8  4      pMQV'       dJ   V'       dB   \        V
) 4      \        V4      ,          pV\        V4      ,          p\        VV) 8  VV8  4      pV'       g   EK  / p\        \        \        \        \         \"        3 FL  pV! V4      V\        V! V4      ^,          4      &   ^V! V4      ,          V\        V! V4      R,          4      &   KN  	  VP%                  VV4      P'                  4       p\)        VV4      pVP+                  V4      '       d   EK  V\-        VV4      ,          pVP'                  4       pVP                  ^\        V4      ,          4      pV'       d-   VP/                  ^\        V4      ,          \        V4      /4      p\1        VV4      pVP3                  4       '       d   EKL  \5        WVVVVX4      u # 	  R# )rJ  r  rK  r  NTrb  )r   r   r  r  r  r   r  	is_numberrQ  is_negativer)   r.   r-   rR   r1   r,   r0   r/   r   r  r  r  r  r  r  rz   r  )r  rc   r~  r  r  r  target_patternmatchesr  r  rJ  rK  
a_positive
b_positive
a_negative
b_negativex_funcr  r   substitutionsr  replacedsecantsr   s   &                       rk   trig_substitution_ruler?    s    IS1f+&AS1f+&A'NE619_Nnn^,G

>*IIa IIa {{,,q1u>>
{{,,q1u>>
{{,,q1u>>
{{,,q1u>>
*1gd1goU3F KJAwtQBx'HE
*Ffy0&82CDKJQBxQ'HE
*Ffy0&82CDK6 M33%34U8d1U8Q;/067%jd1U8b>23%
 !~~ff5>>@H"8];H<<''K66#,,."--#e*5'00#e*c%j2  H )591133/	vx+G Gc rn   c                   V w  r\        V4      w  r4rVVP                  V4      pV'       dT   ^ Wv,          8w  dE   \        Wv,          V4      pWt,          Wu,          rT\        WWB,          V,           V) V,          V4      # R# R# r  )r  r  r  r  )	r  rc   r~  r  r   rK  rX  r  r   s	   &        rk   heaviside_rulerA  =  so     I(0GOOG$Eeh 62x1Y1qbdGLL	 urn   c                   V ^8  d   QhRR/# r(  ri   )rj   s   "rk   rl   rl   H  s     M M| Mrn   c                &   V w  r\        VP                  4      ^8X  d   \        P                  pMVP                  ^,          pVP                  '       d   V^ 8  d   R# \        RV.R7      \        RV^ .R7      rTVP                  ^ ,          P                  WEV,          ,           4      pV'       g   R# Wd,          We,          rT\        V^ 4      pV\        P                  J d   RpM\        \        WC4      V4      p\        WW4V4      p	\        WyV4      # )r   NrJ  r  rK  )r^  r  r   r  r  r   r  r   r$  r   r9   r  r&  )
r  rc   rR  rg  rJ  rK  r  r%  r"  r!  s
   &         rk   dirac_delta_rulerD  H  s    LI
9>>aFFNN1<<<1q5aS!4aV#<qNN1##AcE*E8UXqa8Lqvv&z!'7;!)a8LOLLrn   c           
        V w  r\        R 4      p\        WV4      p^ pV'       Ed   \        R4       . pV EFy  w  rxp	\        W4      p
V^,           p\        RP	                  WZ4      4       V
P                  4       '       d   KM  \        V^,
          4      ^ 8w  d   VP                  4       w  rV
'       d   \        W,          W8W4      p
VP                  '       d   . p. p\        V\        4      '       d   VP                  pMVP                  V4       V F]  p\        VP                  4      '       d   K   \        \!        W^ 4      V4      pV'       g   K@  VP                  V\#        V^ 4      34       K_  	  VP                  V
R34       \%        WV4      p
VP                  \'        WW7V
4      4       EK|  	  \)        V4      ^8  d   \+        WV4      # V'       d
   V^ ,          # R# R# )r   zList of Substitution Rulesr  TN)r   r  r`   r  rj   rz   rY   r  r   r  r  r   r  r   r   r  r  r   r  r   r^  rw  )r  rc   r~  r   r<  r  waysr   rL  r  subruler  r  	piecewisecould_be_zeror  r   s   &                rk   substitution_rulerJ  ^  s    I#JE&y%@ME}*+&3"F{$[8GAIE-&&u67))++A!#++-/;`G%%% "I$&M!%--(-

%,,U3 -(66&4[RS5TV\&]G&w ) 0 0$+$&tQK2" !# !. $$gt_5+KKGKKiHIE '4H t9q="9d;;7N S rn   c                "    V P                  4       # rp   )r  rc   r~  s   &&rk   r  r    s    i<<>rn   c                $    V P                  V4      # rp   )apartrL  s   &&rk   r  r    s    ioof5rn   c                    R # r  ri   rL  s   &&rk   r  r    s    drn   c                "    V P                  4       # rp   )r  rL  s   &&rk   r  r        i..0rn   c                   a \        V \        \        34      ;'       gO    \        ;QJ d)    V3R  lV P                   4       F  '       d   K   R# 	  R# ! V3R  lV P                   4       4      # )c              3  l   <"   T F)  qP                   ;'       g    VP                  S4      x  K+  	  R # 5irp   )r   r{  r  s   & rk   r   <lambda>.<locals>.<genexpr>  s-     0sdr]`1X1Xs?P?PQW?X1Xdrs   44FT)r  r   r   r}  r  rL  s   &frk   r  r    sM    9sCj)ssSS0sdmdrdr0sSSsSsS0sdmdrdr0s-ssrn   c                "    V P                  4       # rp   expandrL  s   &&rk   r  r    rQ  rn   c                    \        V P                  \        4       Uu0 uF  q"P                  ^ ,          kK  	  up4      ^8  # u upi r|  )r^  atomsr+   r  )rc   r~  rJ  s   && rk   r  r    s5    	0E FG F1VVAYY FGH1LGs   Ac                &    V P                  R R7      # )T)trigrV  rL  s   &&rk   r  r    s    i..D.9rn   c                    V ^ ,          pVP                   pVP                  pVP                  pV P                  V9   d0   V P                  V9   d
   \	        V !  # \        WP                  4      # \        V !  # r|  )	variablesr  r  r~  r  r  r   )r  rc   diff_variablesundifferentiated_functionintegrand_variabless   &    rk   derivative_rulera    sj    I((N )3@@--??n,!8,,	??;;X&&rn   c           	         V w  rVP                  ^\        V4      ,          4      '       dB   VP                  ^\        V4      ,          \        V4      4      p\	        WV\        W24      4      # R# r\  )r  r,   r   r1   r  r  )r  rc   r~  r  s   &   rk   rewrites_rulerc    sV     IqV}%%NN1S[=#f+>	9i	9Z[[ &rn   c                    \        V !  # rp   )r  r  s   &rk   fallback_rulere    r  rn   zdict[Expr, Expr | None]_integral_cachezdict[Expr, int]r  zc                  aa V P                  S\        /4      pV\        9   d?   \        V,          f   \        V S4      # \        V,          P                  \        S4      S3# R\        V&   \	        V S4      pV3R loV3R lp\        \        \        4      \        \        S\        \        \        \        4      \        \        4      \        \        4      \        \        4      4      \        \        \        \         \"        \$        \&        \        \        \(        4      \        \*        4      \        \,        4      \        \        4      \        \        4      \        \.        4      4      \0        \2        \4        \6        \8        \,        \:        \<        \>        \@        \B        \D        /4      4      \        \        \6        4      \        \F        4      \        \I        \J        \L        \O        V! \&        \        4      \P        4      \O        V! \&        \        4      \R        4      \O        V! \&        \T        .\V        O5!  \X        4      \O        V! \&        \        4      \Z        4      \\        \^        4      4      \        \O        V! \&        \        4      \`        4      4      \        \b        4      4      \d        4      ! V4      p\        V V# )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                   < V P                   pSVP                  9  d   \        # \        \        \
        3 F  p\        W4      '       g   K  Vu # 	  \        V4      # rp   )rc   r  r   r   r+   rO   r  type)r  rc   rr  r~  s   &  rk   r  integral_steps.<locals>.key  sQ    &&	///M13GHC)))
 I Irn   c                    <a  VV 3R  lpV# )c                @   < S! V 4      pT;'       d    \        VS4      # rp   )
issubclass)r  rS  r  klassess   & rk   _integral_is_subclassKintegral_steps.<locals>.integral_is_subclass.<locals>._integral_is_subclass  s!    HA//Aw//rn   ri   )ro  rp  r  s   j rk   integral_is_subclass,integral_steps.<locals>.integral_is_subclass  s    	0 %$rn   )3r  r  rf  r  rf  r\   r]   r  r[   r   r  re  rM  r  r   r   r  r   rY  r   r^  r  rA  rt  r   ra  r+   r  r8   r9   rD  rO   r  r   r  r  rx  rc  rJ  r^   partial_fractions_rulecancel_ruler    r  r  distribute_expand_ruler1  trig_expand_ruler?  r?  re  )rc   r~  optionsr  r  rr  r   r  s   &f,    @rk   r  r    s$   Z !!6<"89H?"8$,	622 $H-66|VL  %)!Iv.H% '(&	*-y9J/K!"23!"679 J	(+Y7H-I!.19=Q3R!"23!"568 !9~( "6M!
  	$ 	i o&l!(c2*, (c2! (c -+-  (c2*, * # & i 4S# >PQ,-/	
2 	[-Z  [-!F\ 	!Mrn   c                   \        W4      P                  4       p\        P                  4        \	        V\
        4      '       d   \        VP                  4      ^8X  d   VP                  ^ ,          ^,          p\	        V\        4      '       dw   VP                  ^,          ^,          R8X  dX   VP                  VP                  ^,          ^ ,          \        VP                  !  3VP                  ^ ,          ^ ,          R34      pV# )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
T)r  rs   r  clearr  r*   r^  r  r   r  r   )r  r  r   r  s   &&  rk   manualintegrater{  C  s    b A#((*F&)$$V[[)9Q)>{{1~a dBFKKN1$5$=[[Q"B		N3Q"D)+F Mrn   Nr  (  __conditional_annotations__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.   r/   r0   r1   r2   r3   r4   r5   r6   r7   'sympy.functions.special.delta_functionsr8   r9   'sympy.functions.special.error_functionsr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   'sympy.functions.special.gamma_functionsrD   *sympy.functions.special.elliptic_integralsrE   rF   #sympy.functions.special.polynomialsrG   rH   rI   rJ   rK   rL   rM   rN   rO   &sympy.functions.special.zeta_functionsrP   	integralsrQ   sympy.logic.boolalgrR   sympy.ntheory.factor_rS   sympy.polys.polytoolsrT   rU   rV   rW   sympy.simplify.radsimprX   sympy.simplify.simplifyrY   sympy.solvers.solversrZ   sympy.strategies.corer[   r\   r]   r^   sympy.utilities.iterablesr_   sympy.utilities.miscr`   rb   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$  r&  r-  r1  r7  r=  rC  rI  rU  rp  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r-  r4  r:  r@  rF  rL  rT  r]  rc  ri  ro  rx  rf  r  r  r  r  r  r  r  rx  r  r  r  r  r  r   r  r  r  r&  r?  re  rY  r^  r  r  r  r  r  rM  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r  r  r"  r#  r*  r+  r(  r)  r  r$  r,  r/  r1  r?  rA  rD  rJ  rt  ru  rv  rw  ra  rc  re  rf  intr  r  r  r{  )r|  s   @rk   <module>r     sZ
  . # 7 7 # ! # #  $ &   * &  1 1   1 1 " 1 1 4 ;) ) ) 9 :F F F F I( ( ( > M   ;  # . B B + , ' F F . & 
3 
 
 s   .: . . 
1 
1 
1 	

 	
 	
 5J 5 5 Nd N N 1D 1 1& T T T" Qd Q Q" 	z3 	 	 #h # # "h " " " " " # # # "x " " #x # # 	Z 	 	 #~ # # #~ # # /j / / Z   # # # $* $ $ A* A A  FZ  F  FF 
   Rd R R 4   	@Z 	@ 	@ 	1$ 	1 	1 	 	 	
 UD U U 1D 1 1" 	(Z 	( 	( /14 /1 /1d 3 3 3 S   	:# 	: 	: '   '   '   B% B B -$ - - 3% 3 3 F* F F J  
 /U / / 3e 3 3 U   /U / / 3e 3 3 U   .j . ." 	F: 	F 	F 	F: 	F 	F ;* ; ; ?Z ? ? EJ E E EJ E E: 
20B dD$= Un0#*@j2 OQ K P	
*(?VV2MjIIXLM\~<~X8-JZ)X@MF36 	 	 	 	 	 	 	 	 	 	
 $*+   OP ""NO 89
 ""NO 89
 ##PQ 9:
 ""CD :;
 ##MN 9; ##PQ 9:
 ""CD 9:
"""*"*><:GxMM,0f ">57   #0	2 "u02 
 N9	; '\# ,.( -"-c"2 2Sz{|;rn   