B
    ˜‘[0	  ã               @   sH   d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 dd„ ZdS )é    )Úprint_functionÚdivision)ÚSingularityFunctionÚ
DiracDeltaÚ	Heaviside)Úsympify)Ú	integratec             C   s´   |   t¡sdS | jtkr†t| jd ƒ}t| jd ƒ}t| jd ƒ}|jsN|jrft|||d ƒ|d  S |dksv|dkr†t|||d ƒS | js’| jr°|  	t
¡}t||ƒ}| 	t¡S dS )a'  
    This function handles the indefinite integrations of Singularity functions.
    The ``integrate`` function calls this function internally whenever an
    instance of SingularityFunction is passed as argument.

    The idea for integration is the following:

    - If we are dealing with a SingularityFunction expression,
      i.e. ``SingularityFunction(x, a, n)``, we just return
      ``SingularityFunction(x, a, n + 1)/(n + 1)`` if ``n >= 0`` and
      ``SingularityFunction(x, a, n + 1)`` if ``n < 0``.

    - If the node is a multiplication or power node having a
      SingularityFunction term we rewrite the whole expression in terms of
      Heaviside and DiracDelta and then integrate the output. Lastly, we
      rewrite the output of integration back in terms of SingularityFunction.

    - If none of the above case arises, we return None.

    Examples
    ========
    >>> from sympy.integrals.singularityfunctions import singularityintegrate
    >>> from sympy import SingularityFunction, symbols, Function
    >>> x, a, n, y = symbols('x a n y')
    >>> f = Function('f')
    >>> singularityintegrate(SingularityFunction(x, a, 3), x)
    SingularityFunction(x, a, 4)/4
    >>> singularityintegrate(5*SingularityFunction(x, 5, -2), x)
    5*SingularityFunction(x, 5, -1)
    >>> singularityintegrate(6*SingularityFunction(x, 5, -1), x)
    6*SingularityFunction(x, 5, 0)
    >>> singularityintegrate(x*SingularityFunction(x, 0, -1), x)
    0
    >>> singularityintegrate(SingularityFunction(x, 1, -1) * f(x), x)
    f(1)*SingularityFunction(x, 1, 0)

    Nr   é   é   éÿÿÿÿéþÿÿÿ)Zhasr   Úfuncr   ÚargsZis_positiveZis_zeroZis_MulZis_PowZrewriter   r   )ÚfÚxÚaÚnÚexpr© r   úClib/python3.7/site-packages/sympy/integrals/singularityfunctions.pyÚsingularityintegrate   s    '




r   N)Z
__future__r   r   Zsympy.functionsr   r   r   Z
sympy.corer   Zsympy.integralsr   r   r   r   r   r   Ú<module>   s   