U
    ZÊ¹jþj  ã                   @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ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„ Zdd„ Zd)dd„Zdd„ Zd*dd„Zd+dd„Z dd„ Z!dd„ Z"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&d,d%d&„Z'd'd(„ Z(dS )-aô  
Algorithms for solving the Risch differential equation.

Given a differential field K of characteristic 0 that is a simple
monomial extension of a base field k and f, g in K, the Risch
Differential Equation problem is to decide if there exist y in K such
that Dy + f*y == g and to find one if there are some.  If t is a
monomial over k and the coefficients of f and g are in k(t), then y is
in k(t), and the outline of the algorithm here is given as:

1. Compute the normal part n of the denominator of y.  The problem is
then reduced to finding y' in k<t>, where y == y'/n.
2. Compute the special part s of the denominator of y.   The problem is
then reduced to finding y'' in k[t], where y == y''/(n*s)
3. Bound the degree of y''.
4. Reduce the equation Dy + f*y == g to a similar equation with f, g in
k[t].
5. Find the solutions in k[t] of bounded degree of the reduced equation.

See Chapter 6 of "Symbolic Integration I: Transcendental Functions" by
Manuel Bronstein.  See also the docstring of risch.py.
é    )Úmul)Úreduce)Úoo)ÚDummy)ÚPolyÚgcdÚZZÚcancel)ÚimÚre)Úsqrt)Úgcdex_diophantineÚfrac_inÚ
derivationÚsplitfactorÚNonElementaryIntegralExceptionÚDecrementLevelÚrecognize_log_derivativec                 C   sÈ   | j r
tS |t||ƒkr.|  |¡ ¡ d d S g }|}|  |¡}d}|j rt| ||f¡ || }|d9 }|  |¡}qDd}td|ƒ}t|ƒdkrÄ| ¡ }	||	d  }
|  |
¡}|j r‚||	d 7 }|
}q‚|S )aY  
    Computes the order of a at p, with respect to t.

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

    For a, p in k[t], the order of a at p is defined as nu_p(a) = max({n
    in Z+ such that p**n|a}), where a != 0.  If a == 0, nu_p(a) = +oo.

    To compute the order at a rational function, a/b, use the fact that
    nu_p(a/b) == nu_p(a) - nu_p(b).
    r   é   é   )	Úis_zeror   r   Úas_polyÚETÚremÚappendÚlenÚpop)ÚaÚpÚtZ
power_listÚp1ÚrZtracks_powerÚnÚproductÚfinalZproductf© r%   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/integrals/rde.pyÚorder_at)   s.    


r'   c                 C   s   | j r
tS | |¡|  |¡ S )z¤
    Computes the order of a/d at oo (infinity), with respect to t.

    For f in k(t), the order or f at oo is defined as deg(d) - deg(a), where
    f == a/d.
    )r   r   Údegree)r   Údr   r%   r%   r&   Úorder_at_ooT   s    r*   Nc                    sF  |p
t dƒ}t|ˆ ƒ\}}t|| ˆ j¡ƒ}| |¡}| t||ƒ¡‰t| ˆ¡ ˆ j¡ˆ ˆ j¡ˆ ˆ j¡ƒ\}}	ˆt|ˆ jƒt	ˆˆ ƒ   ˆ j¡ 
ˆ ˆ j¡¡}
t|
|ƒ}
|
j |¡sÎtdˆ jƒˆ|ffS dd„ |
 ¡ D ƒ}tt‡ ‡‡fdd„|D ƒtdˆ jƒƒ}t	|ˆ ƒ}|ˆ ||  }|| }|j|dd�\}}|||ffS )aˆ  
    Weak normalization.

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

    Given a derivation D on k[t] and f == a/d in k(t), return q in k[t]
    such that f - Dq/q is weakly normalized with respect to t.

    f in k(t) is said to be "weakly normalized" with respect to t if
    residue_p(f) is not a positive integer for any normal irreducible p
    in k[t] such that f is in R_p (Definition 6.1.1).  If f has an
    elementary integral, this is equivalent to no logarithm of
    integral(f) whose argument depends on t has a positive integer
    coefficient, where the arguments of the logarithms not in k(t) are
    in k[t].

    Returns (q, f - Dq/q)
    Úzr   c                 S   s    g | ]}|t kr|d kr|‘qS )r   )r   ©Ú.0Úir%   r%   r&   Ú
<listcomp>†   s       z#weak_normalizer.<locals>.<listcomp>c                    s,   g | ]$}t ˆt|ˆ jƒtˆˆ ƒ  ˆƒ‘qS r%   )r   r   r   r   )r-   r"   ©ÚDEr   Zd1r%   r&   r/   ˆ   s     T©Úinclude)r   r   r   Údiffr   Úquor   r   r   r   Z	resultantÚexprÚhasZ
real_rootsr   r   r	   )r   r)   r1   r+   ÚdnÚdsÚgZ
d_sqf_partÚa1Úbr!   ÚNÚqZdqZsnÚsdr%   r0   r&   Úweak_normalizer`   s.    

ÿ"
ÿ

ÿ
r@   c                 C   sÈ   t ||ƒ\}}t ||ƒ\}}| |¡}	| | |j¡¡ |	 |	 |j¡¡¡}
||
 }||
 }| |¡d rnt‚|| }|j|dd�\}}||  |t|
|ƒ |  }|j|dd�\}}|||f||f|
fS )a  
    Normal part of the denominator.

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

    Given a derivation D on k[t] and f, g in k(t) with f weakly
    normalized with respect to t, either raise NonElementaryIntegralException,
    in which case the equation Dy + f*y == g has no solution in k(t), or the
    quadruplet (a, b, c, h) such that a, h in k[t], b, c in k<t>, and for any
    solution y in k(t) of Dy + f*y == g, q = y*h in k<t> satisfies
    a*Dq + b*q == c.

    This constitutes step 1 in the outline given in the rde.py docstring.
    r   Tr2   )	r   r   r4   r   r5   Údivr   r	   r   )ÚfaÚfdÚgaÚgdr1   r8   r9   ÚenÚesr   Úhr   ÚcÚcaÚcdÚbaÚbdr%   r%   r&   Únormal_denom“   s    
&rN   Úautoc              	   C   sL  |dkr|j }|dkr&t|j|jƒ}nd|dkrFt|jd d |jƒ}nD|dkr~| ¡  |¡}| ¡  |¡}	| ||	td|jƒfS td| ƒ‚t|||jƒt|||jƒ }
t|||jƒt|||jƒ }td|td|
ƒ ƒ}|
�sÌdd	lm	} |dk�r”|j
 t|j|jƒ¡}t|ƒ�z t| d¡ | d¡ |  d¡ |jƒ\}}t||jƒ\}}||||||ƒ}|d
k	�r†|\}}}|dk�r†t||ƒ}W 5 Q R X �n8|dk�rÌ|j
 t|jd d |jƒ¡}t|ƒ��  tt| tdƒ¡ | tdƒ¡ |  tdƒ¡ ƒ|jƒ\}}tt| tdƒ¡ | tdƒ¡ |  tdƒ¡ ƒ|jƒ\}}t||jƒ\}}ttd|jƒ| ||ƒ�rÂ||ttdƒ|jƒ | ||  || |||ƒ}|d
k	�rÂ|\}}}|dk�rÂt||ƒ}W 5 Q R X td|
 || ƒ}|| }||  }| | }|| |¡ t||jƒ|  t||ƒ |¡ |  }|| |  |¡}	|}|||	|fS )a  
    Special part of the denominator.

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

    case is one of {'exp', 'tan', 'primitive'} for the hyperexponential,
    hypertangent, and primitive cases, respectively.  For the
    hyperexponential (resp. hypertangent) case, given a derivation D on
    k[t] and a in k[t], b, c, in k<t> with Dt/t in k (resp. Dt/(t**2 + 1) in
    k, sqrt(-1) not in k), a != 0, and gcd(a, t) == 1 (resp.
    gcd(a, t**2 + 1) == 1), return the quadruplet (A, B, C, 1/h) such that
    A, B, C, h in k[t] and for any solution q in k<t> of a*Dq + b*q == c,
    r = qh in k[t] satisfies A*Dr + B*r == C.

    For ``case == 'primitive'``, k<t> == k[t], so it returns (a, b, c, 1) in
    this case.

    This constitutes step 2 of the outline given in the rde.py docstring.
    rO   ÚexpÚtanr   r   )Ú	primitiveÚbasez@case must be one of {'exp', 'tan', 'primitive', 'base'}, not %s.r   ©Úparametric_log_derivNéÿÿÿÿ)Úcaser   r   Úto_fieldr5   Ú
ValueErrorr'   ÚminÚprderU   r)   r   r   Úevalr
   r   r   r   Úmaxr   )r   rL   rM   rJ   rK   r1   rW   r   ÚBÚCÚnbÚncr"   rU   ZdcoeffÚalphaaÚalphadÚetaaÚetadÚAÚQÚmr+   ÚbetaaÚbetadr=   ZpNZpnrH   r%   r%   r&   Úspecial_denom¸   s`    ÿ

,



<<0



2rk   Fc              	      sð  |dkrˆ j }|  ˆ j¡}| ˆ j¡}|rBt‡ fdd„|D ƒƒ}n| ˆ j¡}t| ˆ j¡ ¡  ¡  |  ˆ j¡ ¡  ¡  ƒ}	|dkrÂtd|t||d ƒ ƒ}
||d kr¾|	jr¾td|	|| ƒ}
�n*|dk�r¬||krätd|| ƒ}
ntd|| d ƒ}
t	ˆ j
ˆ jˆ jd  ƒ\}}ˆ j}tˆ ƒ��€ t	|	ˆ jƒ\}}||d k�r¬ddlm} z |||||fgˆ ƒ\\}}}W n tk
�r„   Y n&X t|ƒdk�rœtd	ƒ‚t|
|d ƒ}
nò||k�rždd
lm} |||ˆ ƒ}|dk	�rž|\}}|dk�rž| t|ˆ ƒ |¡ || |¡   ¡  | ¡ |  ¡   }t	|ˆ jƒ\}}ddlm} z |||||fgˆ ƒ\\}}}W n tk
�rt   Y n*X t|ƒdk�rŒtd	ƒ‚t|
|d  ¡ ƒ}
W 5 Q R X �n@|dk�rjddlm} td|t||ƒ ƒ}
||k�rìt	ˆ j
 tˆ jˆ jƒ¡ˆ jˆ jd  ƒ\}}tˆ ƒ�N t	|	ˆ jƒ\}}|||||ˆ ƒ}|dk	�r^|\} }}| dk�r^t|
|ƒ}
W 5 Q R X n‚|dk�ràˆ j
 ˆ j¡}ˆ j
 ¡ }t|	| ƒ}	td|t|| d |ƒ ƒ}
||| d k�rì|	j�rìtd|	|| ƒ}
ntd| ƒ‚|
S )am  
    Bound on polynomial solutions.

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

    Given a derivation D on k[t] and ``a``, ``b``, ``c`` in k[t] with ``a != 0``, return
    n in ZZ such that deg(q) <= n for any solution q in k[t] of
    a*Dq + b*q == c, when parametric=False, or deg(q) <= n for any solution
    c1, ..., cm in Const(k) and q in k[t] of a*Dq + b*q == Sum(ci*gi, (i, 1, m))
    when parametric=True.

    For ``parametric=False``, ``cQ`` is ``c``, a ``Poly``; for ``parametric=True``, ``cQ`` is Q ==
    [q1, ..., qm], a list of Polys.

    This constitutes step 3 of the outline given in the rde.py docstring.
    rO   c                 3   s   | ]}|  ˆ j¡V  qd S )N)r(   r   r,   ©r1   r%   r&   Ú	<genexpr>(  s     zbound_degree.<locals>.<genexpr>rS   r   r   rR   )Úlimited_integratezLength of m should be 1©Ú!is_log_deriv_k_t_radical_in_fieldNrP   rT   )rQ   Zother_nonlinearzScase must be one of {'exp', 'tan', 'primitive', 'other_nonlinear', 'base'}, not %s.)rW   r(   r   r]   r	   r   ÚLCÚas_exprÚ
is_Integerr   r)   ÚTÚlevelr   r[   rn   r   r   rY   rp   r   rU   r5   r   )r   r<   ÚcQr1   rW   Ú
parametricÚdaÚdbZdcÚalphar"   rd   re   Út1rb   rc   rn   ZzaÚzdrh   rp   rf   Zaar+   Úbetari   rj   rU   ÚdeltaZlamr%   rl   r&   Úbound_degree  sž    ÿ
ÿ


ÿÿ ÿ 

,





ÿr   c                 C   s  t d|jƒ}t d|jƒ}t d|jƒ}|jr8||d||fS |dk dkrHt‚|  |¡}| |¡jsbt‚|  |¡| |¡| |¡  } }}|  |j¡dkr¾| ¡  | ¡}| ¡  | ¡}|||||fS t	|| |ƒ\}	}
|t
| |ƒ7 }|
t
|	|ƒ }||  |j¡8 }|||	 7 }|| 9 }q$dS )aª  
    Rothstein's Special Polynomial Differential Equation algorithm.

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

    Given a derivation D on k[t], an integer n and ``a``,``b``,``c`` in k[t] with
    ``a != 0``, either raise NonElementaryIntegralException, in which case the
    equation a*Dq + b*q == c has no solution of degree at most ``n`` in
    k[t], or return the tuple (B, C, m, alpha, beta) such that B, C,
    alpha, beta in k[t], m in ZZ, and any solution q in k[t] of degree
    at most n of a*Dq + b*q == c must be of the form
    q == alpha*h + beta, where h in k[t], deg(h) <= m, and Dh + B*h == C.

    This constitutes step 4 of the outline given in the rde.py docstring.
    r   r   TN)r   r   r   r   r   r   r5   r(   rX   r   r   )r   r<   rI   r"   r1   Úzerorz   r}   r:   r!   r+   r%   r%   r&   Úspdeƒ  s*    
"r�   c                 C   s¦   t d|jƒ}|js¢| |j¡|  |j¡ }d|  kr>|ksDn t‚t | |j¡ ¡ |  |j¡ ¡  |j|  |jdd�}|| }|d }|t||ƒ | |  }q|S )aì  
    Poly Risch Differential Equation - No cancellation: deg(b) large enough.

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

    Given a derivation D on k[t], ``n`` either an integer or +oo, and ``b``,``c``
    in k[t] with ``b != 0`` and either D == d/dt or
    deg(b) > max(0, deg(D) - 1), either raise NonElementaryIntegralException, in
    which case the equation ``Dq + b*q == c`` has no solution of degree at
    most n in k[t], or a solution q in k[t] of this equation with
    ``deg(q) < n``.
    r   F©Úexpandr   )r   r   r   r(   r   r   rq   r   ©r<   rI   r"   r1   r>   rh   r   r%   r%   r&   Úno_cancel_b_large²  s    .ÿr…   c                 C   sR  t d|jƒ}|j�sN|dkr"d}n| |j¡|j |j¡ d }d|  krT|ksZn t‚|dkr t | |j¡ ¡ ||j |j¡ ¡   |j|  |jdd�}n†|  |j¡| |j¡kr¼t‚|  |j¡dkrú||  |j|j	d  ¡| |j|j	d  ¡fS t | |j¡ ¡ |  |j¡ ¡  |jdd�}|| }|d }|t
||ƒ | |  }q|S )a˜  
    Poly Risch Differential Equation - No cancellation: deg(b) small enough.

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

    Given a derivation D on k[t], ``n`` either an integer or +oo, and ``b``,``c``
    in k[t] with deg(b) < deg(D) - 1 and either D == d/dt or
    deg(D) >= 2, either raise NonElementaryIntegralException, in which case the
    equation Dq + b*q == c has no solution of degree at most n in k[t],
    or a solution q in k[t] of this equation with deg(q) <= n, or the
    tuple (h, b0, c0) such that h in k[t], b0, c0, in k, and for any
    solution q in k[t] of degree at most n of Dq + bq == c, y == q - h
    is a solution in k of Dy + b0*y == c0.
    r   r   Fr‚   )r   r   r   r(   r)   r   r   rq   rt   ru   r   r„   r%   r%   r&   Úno_cancel_b_smallÐ  s2    0 ÿÿ$ÿr†   c           
      C   sp  t d|jƒ}t|  |j¡ ¡  |j |j¡ ¡  ƒ}|jrF|jrF|}nd}|j�slt	|| 
|j¡|j 
|j¡ d ƒ}d|  krŠ|ks�n t‚t||j |j¡ ¡  |  |j¡ ¡  ƒ}|jrÊ|||fS |dkrþt | |j¡ ¡ | |j|  |jdd�}	nF| 
|j¡|j 
|j¡d k�r$t‚n | |j¡ ¡ |  |j¡ ¡  }	||	 }|d }|t|	|ƒ | |	  }qJ|S )a™  
    Poly Risch Differential Equation - No cancellation: deg(b) == deg(D) - 1

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

    Given a derivation D on k[t] with deg(D) >= 2, n either an integer
    or +oo, and b, c in k[t] with deg(b) == deg(D) - 1, either raise
    NonElementaryIntegralException, in which case the equation Dq + b*q == c has
    no solution of degree at most n in k[t], or a solution q in k[t] of
    this equation with deg(q) <= n, or the tuple (h, m, C) such that h
    in k[t], m in ZZ, and C in k[t], and for any solution q in k[t] of
    degree at most n of Dq + b*q == c, y == q - h is a solution in k[t]
    of degree at most m of Dy + b*y == C.
    r   rV   r   Fr‚   )r   r   r	   r   rq   r)   rs   Zis_positiver   r]   r(   r   r   )
r<   rI   r"   r1   r>   ÚlcÚMrh   Úur   r%   r%   r&   Úno_cancel_equalÿ  s*    ($*
,  rŠ   c              	   C   s4  ddl m} t|ƒ�B t| |jƒ\}}||||ƒ}|dk	rR|\}}|dkrRtdƒ‚W 5 Q R X |jrf|S || |j¡k rzt‚t	d|jƒ}	|j�s0| |j¡}
||
k r¦t‚t|ƒ�. t| 
¡ |jƒ\}}t|||||ƒ\}}W 5 Q R X t	| ¡ | ¡  |j|
  |jdd�}|	|7 }	|
d }|| | t||ƒ 8 }q†|	S )a³  
    Poly Risch Differential Equation - Cancellation: Primitive case.

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

    Given a derivation D on k[t], n either an integer or +oo, ``b`` in k, and
    ``c`` in k[t] with Dt in k and ``b != 0``, either raise
    NonElementaryIntegralException, in which case the equation Dq + b*q == c
    has no solution of degree at most n in k[t], or a solution q in k[t] of
    this equation with deg(q) <= n.
    r   ro   Nz7is_deriv_in_field() is required to  solve this problem.r   Fr‚   )r[   rp   r   r   r   ÚNotImplementedErrorr   r(   r   r   rq   ÚrischDErr   r   )r<   rI   r"   r1   rp   rL   rM   rf   r+   r>   rh   Úa2aÚa2dÚsar?   Ústmr%   r%   r&   Úcancel_primitive.  s2    

&r‘   c              	   C   s   ddl m} |j t|j|jƒ¡ ¡ }t|ƒ�X t||jƒ\}}t| |jƒ\}}	|||	|||ƒ}
|
dk	r‚|
\}}}|dkr‚t	dƒ‚W 5 Q R X |j
r–|S || |j¡k rªt‚td|jƒ}|j
�sœ| |j¡}||k rÖt‚|  ¡ }t|ƒ�b t||jƒ\}}|| || t||jƒ  }|| }t| ¡ |jƒ\}}t|||||ƒ\}}W 5 Q R X t| ¡ | ¡  |j|  |jdd�}||7 }|d }|| | t||ƒ 8 }q¶|S )a¼  
    Poly Risch Differential Equation - Cancellation: Hyperexponential case.

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

    Given a derivation D on k[t], n either an integer or +oo, ``b`` in k, and
    ``c`` in k[t] with Dt/t in k and ``b != 0``, either raise
    NonElementaryIntegralException, in which case the equation Dq + b*q == c
    has no solution of degree at most n in k[t], or a solution q in k[t] of
    this equation with deg(q) <= n.
    r   rT   Nz6is_deriv_in_field() is required to solve this problem.r   Fr‚   )r[   rU   r)   r5   r   r   rr   r   r   r‹   r   r(   r   rq   rŒ   r   )r<   rI   r"   r1   rU   Úetard   re   rL   rM   rf   r   rh   r+   r>   r;   Za1aZa1dr�   rŽ   r�   r?   r�   r%   r%   r&   Ú
cancel_exp`  s>    


&r“   c              	   C   s®  | j s`|jdks4|  |j¡td|j |j¡d ƒkr`|rRddlm} || |||ƒS t| |||ƒS | j s†|  |j¡|j |j¡d k �r\|jdks¤|j |j¡dk�r\|rÂddlm	} || |||ƒS t
| |||ƒ}t|tƒrÞ|S |\}}	}
t|ƒ�Z |	 |j¡|
 |j¡ }	}
|	dk�rtdƒ‚|
dk�r0td	ƒ‚t|	|
||ƒ |j¡}W 5 Q R X || S �nN|j |j¡dk�r$|  |j¡|j |j¡d k�r$||  |j¡ ¡  |j |j¡ ¡  k�r$|  |j¡ ¡ j�sÖtd
ƒ‚|�rätdƒ‚t| |||ƒ}t|tƒ�r|S |\}}}t| |||ƒ}|| S n†| j �r6tdƒ‚n^|jdk�r^|�rPtdƒ‚t| |||ƒS |jdk�r†|�rxtdƒ‚t| |||ƒS td|j ƒ‚|�r¢tdƒ‚tdƒ‚dS )a  
    Solve a Polynomial Risch Differential Equation with degree bound ``n``.

    This constitutes step 4 of the outline given in the rde.py docstring.

    For parametric=False, cQ is c, a Poly; for parametric=True, cQ is Q ==
    [q1, ..., qm], a list of Polys.
    rS   r   r   )Úprde_no_cancel_b_larger   )Úprde_no_cancel_b_smallNzb0 should be a non-Null valuezc0 should be a non-Null valuezResult should be a numberz0prde_no_cancel_b_equal() is not yet implemented.zWRemaining cases for Poly (P)RDE are not yet implemented (is_deriv_in_field() required).rP   zIParametric RDE cancellation hyperexponential case is not yet implemented.rR   zBParametric RDE cancellation primitive case is not yet implemented.zBOther Poly (P)RDE cancellation cases are not yet implemented (%s).z2Remaining cases for Poly PRDE not yet implemented.z1Remaining cases for Poly RDE not yet implemented.)r   rW   r(   r   r]   r)   r[   r”   r…   r•   r†   Ú
isinstancer   r   r   rY   Úsolve_poly_rderq   Z	is_numberÚ	TypeErrorr‹   rŠ   r“   r‘   )r<   rv   r"   r1   rw   r”   r•   ÚRrH   Zb0Zc0Úyrh   r_   r%   r%   r&   r—   œ  sp    
"ÿ&ÿÿ




 4&ÿ


ÿr—   c                 C   sÂ   t | ||ƒ\}\} }t| ||||ƒ\}\}}\}	}
}t||||	|
|ƒ\}}}}zt||||ƒ}W n tk
rx   t}Y nX t|||||ƒ\}}}}}|jr |}nt||||ƒ}|| | || fS )a  
    Solve a Risch Differential Equation: Dy + f*y == g.

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

    See the outline in the docstring of rde.py for more information
    about the procedure used.  Either raise NonElementaryIntegralException, in
    which case there is no solution y in the given differential field,
    or return y in k(t) satisfying Dy + f*y == g, or raise
    NotImplementedError, in which case, the algorithms necessary to
    solve the given Risch Differential Equation have not yet been
    implemented.
    )	r@   rN   rk   r   r‹   r   r�   r   r—   )rB   rC   rD   rE   r1   Ú_r   rL   rM   rJ   rK   Zhnrf   r^   r_   Úhsr"   rh   rz   r}   rš   r%   r%   r&   rŒ   ù  s     
rŒ   )N)rO   )rO   F)F))Ú__doc__Úoperatorr   Ú	functoolsr   Z
sympy.corer   Zsympy.core.symbolr   Zsympy.polysr   r   r   r	   Z$sympy.functions.elementary.complexesr
   r   Z(sympy.functions.elementary.miscellaneousr   Zsympy.integrals.rischr   r   r   r   r   r   r   r'   r*   r@   rN   rk   r   r�   r…   r†   rŠ   r‘   r“   r—   rŒ   r%   r%   r%   r&   Ú<module>   s,   $+
3%
T
w///2<
]