
    wgFh                       U d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZ d d	l
mZ d d
lmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl m(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl m.Z.m/Z/m0Z0m1Z1m2Z2 d dl m3Z3m4Z4m5Z5m6Z6 d dl m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZImJZJ d dlKmLZL d dlMmNZNmOZO d dlPmQZQ d dlRmSZSmTZTmUZUmVZVmWZWmXZX d dlYmZZZ d dl[m\Z\ d dl]m^Z^ d d l_m`Z` d d!lambZb d d"lcmdZd d# Zei Zfd$egd%<   d& Zh	 	 	 d.d(Zi G d) d*      Zjd'ak G d+ d,      Zl	 	 	 d.d-Zmy')/    )annotations)defaultdict)reducepermutations)Add)Basic)Mul)WildDummySymbol)sympify)RationalpiI)EqNe)S)ordered)iterfreeargs)expsincostancotasinatan)logsinhcoshtanhcothasinh)sqrterferfiliEi)besseljbesselybesselibesselk)hankel1hankel2jnyn)Absreimsignarg)LambertW)floorceiling)	Piecewise)	Heaviside
DiracDelta)collect)AndOr)uniq)quogcdlcmfactor_listcancelPolynomialError)itermonomials)root_factors)PolyRing)solve_lin_sys)construct_domain)	integratec                   t               }| j                  |      rD| j                  r| j                  r|j	                  |        |S | j
                  s| j                  r3| j                  D ]  }|t        ||      z  } |j	                  |        |S | j                  r|t        | j                  |      z  }| j                  j                  sq| j                  j                  r>|j	                  | j                  t        d| j                  j                        z         |S |t        | j                  |      | hz  z  }|S | j                  D ]  }|t        ||      z  } |S )a  
    Returns a set of all functional components of the given expression
    which includes symbols, function applications and compositions and
    non-integer powers. Fractional powers are collected with
    minimal, positive exponents.

    Examples
    ========

    >>> from sympy import cos, sin
    >>> from sympy.abc import x
    >>> from sympy.integrals.heurisch import components

    >>> components(sin(x)*cos(x)**2, x)
    {x, sin(x), cos(x)}

    See Also
    ========

    heurisch
       )sethas_free	is_symbolis_commutativeaddis_Functionis_Derivativeargs
componentsis_Powbaser   
is_Integeris_Rationalr   q)fxresultgs       ]/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/integrals/heurisch.pyrV   rV   -   s3   , UFzz!};;1++JJqM$ M# ]]aooVV +*Q**+ JJqM M XXj++F55##55$$JJqvvx15577';;< M j2aS88F
 M VV +*Q**+ M    zdict[str, list[Dummy]]_symbols_cachec           	         	 t         |    }t        |      |k  r7|j                  t	        d| t        |      fz               t        |      |k  r7|d| S # t        $ r g }|t         | <   Y `w xY w)z*get vector of symbols local to this modulez%s%iN)rb   KeyErrorlenappendr   )namenlsymss      r`   _symbolsrj   `   sx    %t$
 e*q.eFdCJ%778: e*q. !9  %$t%s   	A A,+A,Nc	                   ddl m}	m}
 t        |       } | j	                  |      s| |z  S t        | ||||||||	      }t        |t              s|S g }t         |
|            D ]  }	 | |	|gd|f      z  } |s|S t        t        |            }g } |
|       D ]  }	 | |	|gd|f      z  } |D cg c]	  }||vs| }}|s|S t        |      dkD  rTg }|D ]>  }|j                  |j                         D cg c]  \  }}t        ||       c}}       @  |	|d|f      |z   }g }|D ]  }t        | j!                  |      ||||||||	      }t#        |j                         D cg c]  \  }}t        ||       c}} }t%        |j                         D cg c]  \  }}t'        ||       c}} }|t)        | j!                  |      |      }|j+                  ||f        t        |      dk(  r't        | ||||||||	      f|d   d   dfg}t-        | S |j+                  t        | ||||||||	      df       t-        | S # t        $ r Y w xY w# t        $ r Y w xY wc c}w c c}}w c c}}w c c}}w )a  
    A wrapper around the heurisch integration algorithm.

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

    This method takes the result from heurisch and checks for poles in the
    denominator. For each of these poles, the integral is reevaluated, and
    the final integration result is given in terms of a Piecewise.

    Examples
    ========

    >>> from sympy import cos, symbols
    >>> from sympy.integrals.heurisch import heurisch, heurisch_wrapper
    >>> n, x = symbols('n x')
    >>> heurisch(cos(n*x), x)
    sin(n*x)/n
    >>> heurisch_wrapper(cos(n*x), x)
    Piecewise((sin(n*x)/n, Ne(n, 0)), (x, True))

    See Also
    ========

    heurisch
    r   )solvedenomsT)dictexcluderM   )sympy.solvers.solversrl   rm   r   rO   heurisch
isinstancer	   r   NotImplementedErrorlistr?   re   extenditemsr   subsr=   r>   r   rK   rf   r9   )r\   r]   rewritehintsmappingsretriesdegree_offsetunnecessary_permutations_try_heurischrl   rm   resslnsdslns0seqssub_dictkeyvaluepairsexprcondgenerics                           r`   heurisch_wrapperr   n   s   : 4
A::a=s

1a%7M+]<Cc5!
 DVC[! 	E1#D1$77D
 
T
DEAY 	UA3TA488E
 .!q~A.D.

4y1} 	LHJJ9IJ:33JK	LStaT2T9E #x(!WeXw%'?%' hnn6FG
URU^GH8HI*#ur#u~IJ<QVVH-a0DdD\"# 5zQ1a%7+-E+- &' (1+t$	& e	 	hq!WeXw+-E+- #$ 	% eY # 		 # 		. K HIsB   &II4	I,>I,;I1+I7I=	II	I)(I)c                  (    e Zd ZdZd Zd Zd Zd Zy)BesselTablez~
    Derivatives of Bessel functions of orders n and n-1
    in terms of each other.

    See the docstring of DiffCache.
    c                r    i | _         t        d      | _        t        d      | _        | j	                          y )Nrh   z)tabler   rh   r   _create_table)selfs    r`   __init__zBesselTable.__init__   s+    
ssra   c                   | j                   | j                  | j                  }}}t        t        t
        t        fD ]@  } ||dz
  |      | |||      z  |z  z
  |dz
   ||dz
  |      z  |z   |||      z
  f||<   B t        } ||dz
  |      | |||      z  |z  z
  |dz
   ||dz
  |      z  |z   |||      z   f||<   t        } ||dz
  |       | |||      z  |z  z
  |dz
   ||dz
  |      z  |z   |||      z
  f||<   t        t        fD ]C  } ||dz
  |      |dz    |||      z  |z  z
  |dz
   ||dz
  |      z  |z   |||      z
  f||<   E y )NrM   )r   rh   r   r)   r*   r-   r.   r+   r,   r/   r0   )tr   rh   r   r\   s        r`   r   zBesselTable._create_table   s   ggqssACC!q7GW5 	5A!A#q	Aa1gIaK/1a!Qi)AaG35E!H	5 ac1I!Aq'	!+qS!AaC)OA%!Q/1aqsAYJ1Q71,qS!AaC)OA%!Q/1a b 	5A!A#q	QqS!Aq'M!O31a!Qi)AaG35E!H	5ra   c                    || j                   v rP| j                   |   \  }}| j                  |f| j                  |fg}|j                  |      |j                  |      fS y N)r   rh   r   rw   )r   r\   rh   r   diff0diff1repls          r`   diffszBesselTable.diffs   sZ    <771:LE5SS!HqssAh'DJJt$ejj&677 ra   c                    || j                   v S r   )r   )r   r\   s     r`   haszBesselTable.has   s    AGG|ra   N)__name__
__module____qualname____doc__r   r   r   r    ra   r`   r   r      s    5"8ra   r   c                      e Zd ZdZd Zd Zy)	DiffCacheau  
    Store for derivatives of expressions.

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

    The standard form of the derivative of a Bessel function of order n
    contains two Bessel functions of orders n-1 and n+1, respectively.
    Such forms cannot be used in parallel Risch algorithm, because
    there is a linear recurrence relation between the three functions
    while the algorithm expects that functions and derivatives are
    represented in terms of algebraically independent transcendentals.

    The solution is to take two of the functions, e.g., those of orders
    n and n-1, and to express the derivatives in terms of the pair.
    To guarantee that the proper form is used the two derivatives are
    cached as soon as one is encountered.

    Derivatives of other functions are also cached at no extra cost.
    All derivatives are with respect to the same variable `x`.
    c                B    i | _         || _        t        st               ay y r   )cacher]   _bessel_tabler   )r   r]   s     r`   r   zDiffCache.__init__  s!    
 'MM ra   c                   | j                   }||v r	 ||   S t        |d      rt        j                  |j                        s,t        |j                  | j                              ||<   ||   S |j                  \  }}t        j                  |j                  ||      \  }}| j                  |      }||z  ||<   ||z  ||j	                  |dz
  |      <   ||   S )NfuncrM   )r   hasattrr   r   r   rD   diffr]   rU   r   get_diff)r   r\   r   rh   r   d0d1dzs           r`   r   zDiffCache.get_diff  s    

: Qx !V$!!!&&)affTVVn-E!H Qx 66DAq"((A6FBq!B"uE!H$&rEE!&&1a.!Qxra   N)r   r   r   r   r   r   r   ra   r`   r   r      s    ,*ra   r   c	                D  56789:;<=>?@A t        |       } |dur>| j                  t        t        t        t
        t        t        t        t        t        	      ry| j                  |      s| |z  S | j                  s| j                  |      \  }	} nt        j                  }	t         t"        t$        ft&        t(        t*        t,        ft.        i}
|r+|
j1                         D ]  \  }}| j3                  ||      }  n(|
j5                         D ]  } | j                  | s n d}t7        | |      }t9        |      }||st;        d|g      }t;        d|g      }t;        d|g      }t=        |      D ]  }|j>                  rotA        |tB              r|jD                  d   jG                  |||z  z        }|H|jI                  |tC        ||   |||   z  z        ||   |||   z  z  d||   z  z  tK        ||   d	z   tM        ||   |||   z  z        z  ||   z        z  z
  z         tA        |tN              s|jD                  d   jG                  ||d
z  z        }|c||   jP                  r*|jI                  tS        tU        ||         |z               n*|jI                  tW        tU        ||          |z               |jD                  d   jG                  ||d
z  z  ||z  z   |z         }|||   jP                  r}|jI                  tU        tX        dz  ||    z        tO        ||   ||   d
z  d||   z  z  z
        z  tS        tU        ||         |z  ||   d
tU        ||         z  z  z         z         n||   jZ                  r~|jI                  tU        tX        dz  ||    z        tO        ||   ||   d
z  d||   z  z  z
        z  tW        tU        ||          |z  ||   d
tU        ||          z  z  z
        z         |jD                  d   jG                  |tM        |      d
z  z        }|||   jP                  rG|jI                  tS        tU        ||         tM        |      z  d	d
tU        ||         z  z  z                ||   jZ                  s5|jI                  tW        tU        ||          tM        |      z  d	d
tU        ||          z  z  z
               |j\                  s|jN                  j^                  s|jN                  j`                  d
k(  s|jb                  jG                  ||d
z  z  |z         }|||   jP                  r~||   jP                  r0|jI                  te        tU        ||   ||   z        |z               n?||   jZ                  r0|jI                  tg        tU        ||    ||   z        |z               |jb                  jG                  ||d
z  z  |z
        }|||   jP                  s||   jP                  rd	tU        ||   |d
z  z  ||   z
        z  }tM        d
tU        ||         z  tU        ||   |d
z  z  ||   z
        z  d
||   z  |z  z         tU        ||         z  5||jh                  5<   |jI                  5       K||   jZ                  s\|jI                  ||    d
z  tU        ||          z  tk        tU        ||          |z  tU        ||   |d
z  z  ||   z
        z        z          n|t=        |      z  }t=        |      D ]   }|t7        |jm                  |      |      z  }" to        dtq        |            6ts        tu        ts        tw        ty        tw        |6      D cg c]  }|d   j                  |      d	   |f c}             d	               <<D ci c]  \  }}||
 }}}|r<d   d   |k(  sJ <j{                  d      g}t}        tr              }<D ]  }|t        |         j                  |       ! |D cg c]  }||   	 c}<<fd} |       }n|xs g }<fd}|D ]  <ts        <      <<|z   <|D cg c]  } ||jm                  |             }}|D cg c]  }|j                         d	    }}t        6fd|D              sl  ||       j                  6 st        6fd|      ; n |st        | |d||      }||	|z  S y|D cg c]  }t        ;|z         c}=6=fd8678fd768:fd:i }|D ]z  } | j>                  stA        | t&              rd|d	 ||       d
z  z   <   2tA        | t.              rd|d	 ||       z   <   d|d	 ||       z
  <   _tA        | t              spd| ||       <   |  ||       55j                         \  }!}" :;      }# :|"      }$t=        ts        |$      |#d   gz   ts        |j5                               z         }%|#d   t        |j1                         D cg c]
  \  }}|s	| c}} z  }&|&|!|"fD 'cg c]  }' |'j                  6  }(}'d|(v ry|(D 'cg c]  }'|'j                          c}'\  }}}|&|$d   z   7|$d	         z  j                         ?9fd9 9|       |t        ||      z   }*})|)d	kD  r-|*d	kD  r(t        ty        t        6|)|*z   d	z
  |z                     }+n$t        ty        t        6|)|*z   |z                     }+to        dtq        |+            >t        t        |+      D ,cg c]  \  }},>|   |,z   c},} @t=               Aty        |%      D ]:  }-t        |-g6 \  }.}/AjI                  |.       Aj                  d |/D               < d568;>?@Afd	}0t        d 6D              r5j                  t=        6      z
  }1nR5j                         }2|2j                  t        tw        6d 6D                          j                  |2j                  z  }1|1s |0d      }3|3 |0       }3n |0       }3|3O|3j                  |      }4t        |4      j                         }4|4j                  r|4j                  |      d	   }4|	|4z  S |dk\  rt        | |||||d	z
  |      }||	|z  S yc c}w c c}}w c c}w c c}w c c}w c c}w c c}}w c c}'w c c}'w c c},}w )a-
  
    Compute indefinite integral using heuristic Risch algorithm.

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

    This is a heuristic approach to indefinite integration in finite
    terms using the extended heuristic (parallel) Risch algorithm, based
    on Manuel Bronstein's "Poor Man's Integrator".

    The algorithm supports various classes of functions including
    transcendental elementary or special functions like Airy,
    Bessel, Whittaker and Lambert.

    Note that this algorithm is not a decision procedure. If it isn't
    able to compute the antiderivative for a given function, then this is
    not a proof that such a functions does not exist.  One should use
    recursive Risch algorithm in such case.  It's an open question if
    this algorithm can be made a full decision procedure.

    This is an internal integrator procedure. You should use top level
    'integrate' function in most cases, as this procedure needs some
    preprocessing steps and otherwise may fail.

    Specification
    =============

     heurisch(f, x, rewrite=False, hints=None)

       where
         f : expression
         x : symbol

         rewrite -> force rewrite 'f' in terms of 'tan' and 'tanh'
         hints   -> a list of functions that may appear in anti-derivate

          - hints = None          --> no suggestions at all
          - hints = [ ]           --> try to figure out
          - hints = [f1, ..., fn] --> we know better

    Examples
    ========

    >>> from sympy import tan
    >>> from sympy.integrals.heurisch import heurisch
    >>> from sympy.abc import x, y

    >>> heurisch(y*tan(x), x)
    y*log(tan(x)**2 + 1)/2

    See Manuel Bronstein's "Poor Man's Integrator":

    References
    ==========

    .. [1] https://www-sop.inria.fr/cafe/Manuel.Bronstein/pmint/index.html

    For more information on the implemented algorithm refer to:

    .. [2] K. Geddes, L. Stefanus, On the Risch-Norman Integration
       Method and its Implementation in Maple, Proceedings of
       ISSAC'89, ACM Press, 212-217.

    .. [3] J. H. Davenport, On the Parallel Risch Algorithm (I),
       Proceedings of EUROCAM'82, LNCS 144, Springer, 144-157.

    .. [4] J. H. Davenport, On the Parallel Risch Algorithm (III):
       Use of Tangents, SIGSAM Bulletin 16 (1982), 3-6.

    .. [5] J. H. Davenport, B. M. Trager, On the Parallel Risch
       Algorithm (II), ACM Transactions on Mathematical
       Software 11 (1985), 356-362.

    See Also
    ========

    sympy.integrals.integrals.Integral.doit
    sympy.integrals.integrals.Integral
    sympy.integrals.heurisch.components
    TNa)ro   bcr   rM         r]   c               3  p   K   t              D ]  } | D  cg c]  } | D ]  }|  c}}   y c c}} w wr   r   )ijmappings     r`   _iter_mappingsz heurisch.<locals>._iter_mappings  s;     !'* 0"#/QQ/q/q//0/s   606c                &    | j                        S r   )rw   )r   r   s    r`   _substitutezheurisch.<locals>._substitute  s    yy!!ra   c              3  <   K   | ]  } |j                      y wr   )is_polynomial).0hVs     r`   	<genexpr>zheurisch.<locals>.<genexpr>  s     3qq"3s   c                    t        | |g S r   )rB   )pr[   r   s     r`   <lambda>zheurisch.<locals>.<lambda>  s    Aq1 ra   )rx   ry   r}   c           
     ~    t        t              D cg c]  \  }}|| j                  |      z   c}} S c c}}w r   )r   zipr   )r   r   vr   numerss      r`   _derivationzheurisch.<locals>._derivation  s2    FA@1a!&&)m@AA@s   9
c                   D ]  }| j                  |      s |       t        j                  us.| j                  |      j	                         \  }} |      t        ||j                  |            j                         z  c S  | S r   )r   r   Zeroas_poly	primitiverA   r   as_expr)r   yr   r[   r   
_deflationr   s       r`   r   zheurisch.<locals>._deflation   sz     	AA5581~QVV+yy|--/1!!}SAFF1I%6%>%>%@@@	A ra   c           
     4   D ]   }| j                  |      s 	|      t        j                  us/| j                  |      j	                         \  }}|j                         }t        | 	|      |      }t        |t        ||j                  |      |      |      } 
|      }|j                  |      j                         dk(  r|d   ||d   z  fc S  
t        ||z              }|d   |d   z  |z  |d   |d   z  fc S  t        j                  | fS )Nr   rM   )r   r   r   r   r   r   rA   r@   r   degreerD   One)r   r   r   r[   r   r   c_splitq_splitr   r   	_splitters           r`   r   zheurisch.<locals>._splitter+  s    	HA5581~QVV+yy|--/1IIK;q>1-3q!&&)Q/3#A,99Q<&&(A-#AJGAJ77#F1q5M2
71:-a/GAJ1FGG'	H* qzra   Fc                   | j                   r| j                  j                  r| j                  j                  dk7  r| j                  j                  dkD  r0| j                  j                  | j                  j                  z   dz
  S t        | j                  j                  | j                  j                  z         S y| j                  s*| j                  rt        fd| j                  D              S y)NrM   r   c              3  .   K   | ]  } |        y wr   r   )r   r   	_exponents     r`   r   z.heurisch.<locals>._exponent.<locals>.<genexpr>m  s     4y|4s   )	rW   r   rZ   r[   r   absis_AtomrU   max)r_   r   s    r`   r   zheurisch.<locals>._exponentc  s    88uu  QUUWW\5577Q;5577QUUWW,q00quuww011qvv4QVV444ra   Ac              3  &   K   | ]	  \  }}|  y wr   r   )r   factmuls      r`   r   zheurisch.<locals>.<genexpr>  s     894$8s   c                F   t               }t               }| dk(  rt        %      }nit              }t               }t        %      D ]F  }|t        t        |            z  }t        |      D ]  }t        t        |||             }||z  } F H g g }
}	t        |      D ]  }t	        |t
        d      }|j                  t
        t        j                        }|s<|j                  t        j                  t        j                        }|j                  t
              s|j                  t
              r|j                  ||f       |j                  |        |r|j                         \  }}|| f|v r_|j                  || f       |j                         r| }|j                  ||z  ||z  z          |j                  t        ||z               n|j                  |t
        |z  z          |rt!        dt#        |            }t!        dt#        |            }t%        t'        t)        t        |      |                  D ]C  \  }} |j                   s"j+                  |       |	j+                  |t-        |      z         E t%        t'        t)        t        |      |                  D ]:  \  }} |j                   s"j+                  |       |
j+                  ||z         < $#z  t/        |	 z   t/        |
 z   }  |      !z  z
  }|j1                         d   }t        "      t              z  t               fd	  |       t3        d	
      \  }}t7        "|      }t7        |      }	 |j9                  |      }t=        |j?                         |d      }|y |jA                  |      jA                  tC        t)        "t        j                  gt#        "      z                    S # t4        $ r Y y w xY w# t:        $ r t4        w xY w)NQ)filterF)evaluateBCr   c                   | j                   s| j                  ry | v ry  | j                   sj                  |        y | j                  s| j
                  s| j                  r t        t        | j                               y t        r   )rY   rZ   rO   rR   is_Addis_MulrW   rt   maprU   rE   )r   find_non_symsnon_symssymss    r`   r   z3heurisch.<locals>._integrate.<locals>.find_non_syms  sg    $"2"2"T]]D)T"t{{S		23 &%ra   T)field)_raw)"rN   r   r   rG   r<   r   getr   r   r   r   rR   removepopcould_extract_minus_signr   rj   re   reversedrt   r   rf   r   r   as_numer_denomrJ   rE   rH   	from_expr
ValueErrorrI   coeffsxreplacern   )&r   atansr   irreduciblessetVpolyzVr   r   log_part	atan_partmr   r]   r   r   r   r   	candidater   	raw_numerground_
coeff_ringringnumersolutionr   r   r   Fr   r   denompoly_coeffs
poly_denom	poly_part
reducibless&                              @@@r`   
_integratezheurisch.<locals>._integrate  s   C<z?Lq6D5L
+ CT 233  ALq?@A A%L !")L) 	*Da%0Aa AEE!%%(558quuQx		1a&!##D)	* 99;DAqA2w%a!W%--/A  1qs+		$qs)$  QqS)  S#l+,S#e*%  S)>%B CD 	/GD!txx|""1%CI.	/
  S%; <= 	+GD!txx|""1%  T*	+ j(3>9COK	I&..$$&q)	 ;#a&(5	&	?)$ )>IFAk62
:&	"NN9-E !%H%%h/88Sqvvhs;/?&?@AC C!  		  	"!!	"s   P P 	PPP c              3  <   K   | ]  }t        |t                y wr   )rr   r   r   r  s     r`   r   zheurisch.<locals>.<genexpr>  s     
,Q:a 
,s   c              3  0   K   | ]  }t                 y wr   )r   r  s     r`   r   zheurisch.<locals>.<genexpr>  s     ,@UW,@s   r   )rz   rx   ry   r{   r}   r   )Yr   r   r1   r2   r3   r4   r:   r;   r7   r8   r5   rO   r   as_independentr   r   r   r   r   r   r   r    r"   r!   rv   rx   keysrV   r   r   rN   rS   rr   r'   rU   matchrR   r(   r   r   is_positiver&   r$   r%   r   is_negativerW   rZ   r[   rX   r#   r   r   r   r   rj   re   rt   r   r   r   r   r   typerf   r   allis_rational_functionr   rq   rD   r6   r
   r   total_degreer   r   tuplerF   r   	enumeraterC   updatefree_symbolsas_dummyr   rn   rw   expand)Br\   r]   rx   ry   rz   r{   r|   r}   r~   indeprewritables
candidatesruletermsdcacher   r   r   r_   MdFkr   rev_mappingtypesr   r   r   r   rm   r^   specialtermPr   u_splitv_splitpolysr   r   polifiedr   r   monomsmonomialr   coefffactorsr  	more_freeFdr  	antiderivr  r   r   r   r   r   r  r   r   r  r  r  r  sB                                                        @@@@@@@@@@@@@r`   rq   rq   (  s   f 	
A
 D 55b"dIz5'3O::a=s
88##A&q 
c3	tTDK
  + 1 1 3 	,J		*d+A	, &**, 	Jquuj!	 Gq!Eq\FS1#&AS1#&AS1#&AZ :W==!!R(FF1IOOAadF3=!IIq"QqT!QqT'\*:ad1ad7lbQRSTQUg=VWY[\]^[_`a[acfghijgklmopqroslsgsctZtuvwxuyZyWz=z*z'{}
 $As+FF1IOOAadF3= t// %		$tAaDz!|*< = %		#dAaD5k!m*< =FF1IOOAadFQqSL1,<== t// %		$r!tadU|*<S1!aQRSTUVSWQWHXAX=Y*Y*.tAaDz!|adAd1Q4jL>Q/Q*R+S !T!"1!1!1 %		$r!tadU|*<S1!aQRSTUVSWQWHXAX=Y*Y*-dAaD5k!madAdAaD5kM>R.R*S+T !U FF1IOOAc!faiK8= t// %		$tAaDz#a&/@1aQqT
lCS/S*T U t// %		#dAaD5k#a&.@1aaPQdUmCT.T*U VXXuu((QUUWW\FFLL1a4!4=QqT-=-= t// %		%QqT!A$Y0A*B C!"1!1!1 %		$tQqTE!A$J/?/A*B CFFLL1a4!4=QqT-=-= t//%&tAaDAI!,<'=%=$'$qt*T!A$q!t)ad:J5K(KaPQRSPTfUVh(V$WX\]^_`]aXb$b24Q %		!!"1!1!1 %		1Q4%'$!u+*=+/adUAd1Q419qQRtCS>T0T+U+V !Ws:Wz SZEZ 3FOOA.223 	c%j!A 8Dg14UA?A!A$

a
 
#Q	'?'A "B CCDF G HG$+,DAq1a4,K,r{1~"""$+KKO#4  D! 	%A$q'N!!!$	%%*+58+	0 "##;#Ar "  w-44;@Ba+fooa01BB279Q1##%a(993F338[A8[8[]^8_5v>E aD)ACF !V|#(-/1veAg/FB	0 G 2$$49K-q001D$'16K--.16K--.D(+-1D)*2 	AADAqGlGW'!*.glln1EEFE
S'--/@$!QQA@AAA)*Aq	31A3H3x +34Q 4GAq!gaj.:gaj#99BBDJ Q<SAYqA1uQw}QA	M0IJKLw}QA0EFGH3F,K$V,/Ax #1~h. / 0I J 9$T.A.wu8889
hC hCT 
,!
,,NNSV+	ZZ\KKS,@a,@%A B lR__-	c?!|H<MM+.	9%,,.	!003A6IYa<aXwe]dgh]h  D\  ]F!V|#o 	@, , C9 0x A3 56/sB   , s-(s2s8s=4t+t
tt1tt,t
)FNN   r   NN)n
__future__r   collectionsr   	functoolsr   	itertoolsr   sympy.core.addr   sympy.core.basicr	   sympy.core.mulr
   sympy.core.symbolr   r   r   r   sympy.core.numbersr   r   r   sympy.core.relationalr   r   sympy.core.singletonr   sympy.core.sortingr   sympy.core.traversalr   sympy.functionsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   $sympy.functions.elementary.complexesr1   r2   r3   r4   r5   &sympy.functions.elementary.exponentialr6   #sympy.functions.elementary.integersr7   r8   $sympy.functions.elementary.piecewiser9   'sympy.functions.special.delta_functionsr:   r;   sympy.simplify.radsimpr<   sympy.logic.boolalgr=   r>   sympy.utilities.iterablesr?   sympy.polysr@   rA   rB   rC   rD   rE   sympy.polys.monomialsrF   sympy.polys.polyrootsrG   sympy.polys.ringsrH   sympy.polys.solversrI   sympy.polys.constructorrJ   sympy.integrals.integralsrK   rV   rb   __annotations__rj   r   r   r   r   rq   r   ra   r`   <module>r^     s    " #  "  "  1 1 $ . . ( " & - ? ? ? > > 3 3 > > 4 4 G G ; > : I * ' * K K / . & - 4 /,^ *,& + NO?C#'^@& &P . .` FG7;dra   