ó
¡¼™\c           @  s*  d  Z  d d l m Z m Z d d l m Z d d l m Z m Z m	 Z	 d d l
 m Z d d l m Z m Z m Z d d l m Z d d l 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 d d l m  Z  d d l! m" Z" d d l# m$ Z$ d e% f d „  ƒ  YZ& d e f d „  ƒ  YZ' d d l( m) Z) d „  Z* d „  Z+ e+ e, ƒ Z- d „  Z. e- e. e/ d „ ƒ Z0 d e' f d „  ƒ  YZ1 d „  Z2 d „  Z3 d e4 f d „  ƒ  YZ5 d „  Z6 e+ e/ ƒ e, d „ ƒ Z7 e8 a9 d  e' f d! „  ƒ  YZ: d" „  Z; d# „  Z< e- e/ d$ „ ƒ Z= d% e' f d& „  ƒ  YZ> d' „  Z? e+ e/ ƒ e/ d( „ ƒ Z@ d) e' f d* „  ƒ  YZA e8 d+ „ ZB e+ e/ ƒ e/ d, „ ƒ ZC d- e' f d. „  ƒ  YZD d/ eD f d0 „  ƒ  YZE d1 „  ZF d2 eD f d3 „  ƒ  YZG d4 „  ZH d d5 lI mJ ZJ mK ZK mL ZL mM ZM e+ e/ ƒ e/ d6 „ ƒ ZN d7 e' f d8 „  ƒ  YZO d9 eO f d: „  ƒ  YZP d; „  ZQ d< eO f d= „  ƒ  YZR d> „  ZS d? eO f d@ „  ƒ  YZT dA „  ZU dB eO f dC „  ƒ  YZV dD „  ZW e+ e/ ƒ e/ dE „ ƒ ZX dF e' f dG „  ƒ  YZY dH eY f dI „  ƒ  YZZ dJ „  Z[ dK eY f dL „  ƒ  YZ\ dM „  Z] dN S(O   s    Integral Transforms iÿÿÿÿ(   t   print_functiont   division(   t   S(   t   reducet   ranget   iterable(   t   Function(   t
   _canonicalt   Get   Gt(   t   oo(   t   Dummy(   t	   integratet   Integral(   t   _dummy(   t   to_cnft	   conjunctst	   disjunctst   Ort   And(   t   simplify(   t   default_sort_key(   t
   MatrixBaset   IntegralTransformErrorc           B  s   e  Z d  Z d „  Z RS(   sy  
    Exception raised in relation to problems computing transforms.

    This class is mostly used internally; if integrals cannot be computed
    objects representing unevaluated transforms are usually returned.

    The hint ``needeval=True`` can be used to disable returning transform
    objects, and instead raise this exception if an integral cannot be
    computed.
    c         C  s-   t  t |  ƒ j d | | f ƒ | |  _ d  S(   Ns'   %s Transform could not be computed: %s.(   t   superR   t   __init__t   function(   t   selft	   transformR   t   msg(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR   #   s    (   t   __name__t
   __module__t   __doc__R   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR      s   
t   IntegralTransformc           B  s†   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z e d	 „  ƒ Z d
 „  Z RS(   sÞ  
    Base class for integral transforms.

    This class represents unevaluated transforms.

    To implement a concrete transform, derive from this class and implement
    the _compute_transform(f, x, s, **hints) and _as_integral(f, x, s)
    functions. If the transform cannot be computed, raise IntegralTransformError.

    Also set cls._name.

    Implement self._collapse_extra if your function returns more than just a
    number and possibly a convergence condition.
    c         C  s   |  j  d S(   s!    The function to be transformed. i    (   t   args(   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR   9   s    c         C  s   |  j  d S(   s;    The dependent variable of the function to be transformed. i   (   R"   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   function_variable>   s    c         C  s   |  j  d S(   s%    The independent transform variable. i   (   R"   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   transform_variableC   s    c         C  s#   |  j  j j |  j h ƒ |  j h S(   sj   
        This method returns the symbols that will exist when the transform
        is evaluated.
        (   R   t   free_symbolst   unionR$   R#   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR%   H   s    c         K  s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   t   ft   xt   st   hints(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _compute_transformQ   s    c         C  s
   t  ‚ d  S(   N(   R'   (   R   R(   R)   R*   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _as_integralT   s    c         C  s7   t  | Œ  } | t k r3 t |  j j d  d ƒ ‚ n  | S(   Nt    (   R   t   FalseR   t	   __class__t   namet   None(   R   t   extrat   cond(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _collapse_extraW   s    c           s†  d d l  m } m } m } d d l m } | j d t ƒ } t ‡  f d †  ˆ  j	 j
 | ƒ Dƒ ƒ } | r§ y# ˆ  j ˆ  j	 ˆ  j ˆ  j |  SWq§ t k
 r£ q§ Xn  ˆ  j	 } | j sÈ | | ƒ } n  | j r| | d <g  | j D]2 }	 ˆ  j |	 g t ˆ  j d ƒ Œ  j |   ^ qå }
 g  } g  } x† |
 D]~ }	 t |	 t ƒ sQ|	 g }	 n  | j |	 d ƒ t |	 ƒ d k rˆ| j |	 d ƒ q0t |	 ƒ d k r0| |	 d g 7} q0q0W| | Œ  }
 | sÈ|
 Sy@ ˆ  j | ƒ } t | ƒ rýt |
 g ƒ t | ƒ S|
 | f SWqt k
 rqXn  | rCt ˆ  j j ˆ  j	 d ƒ ‚ n  | j ˆ  j ƒ \ } } | ˆ  j | | Œ  g t ˆ  j d ƒ Œ  S(	   s£  
        Try to evaluate the transform in closed form.

        This general function handles linearity, but apart from that leaves
        pretty much everything to _compute_transform.

        Standard hints are the following:

        - ``simplify``: whether or not to simplify the result
        - ``noconds``: if True, don't return convergence conditions
        - ``needeval``: if True, raise IntegralTransformError instead of
                        returning IntegralTransform objects

        The default values of these hints depend on the concrete transform,
        usually the default is
        ``(simplify, noconds, needeval) = (True, False, False)``.
        iÿÿÿÿ(   t   Addt
   expand_mult   Mul(   t   AppliedUndeft   needevalc         3  s!   |  ] } | j  ˆ  j ƒ Vq d  S(   N(   t   hasR#   (   t   .0t   func(   R   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pys	   <genexpr>r   s   i   i    i   (   t   sympyR6   R7   R8   t   sympy.core.functionR9   t   popR/   t   anyR   t   atomsR,   R#   R$   R   t   is_AddR"   R0   t   listt   doitt
   isinstancet   tuplet   appendt   lenR5   R   t   _namet   as_coeff_mul(   R   R+   R6   R7   R8   R9   R:   t   try_directlyt   fnR)   t   resR3   t   resst   coefft   rest(    (   R   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRE   ]   sV    			
?c         C  s   |  j  |  j |  j |  j ƒ S(   N(   R-   R   R#   R$   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   as_integral¥   s    c         O  s   |  j  S(   N(   RR   (   R   R"   t   kwargs(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _eval_rewrite_as_Integralª   s    (   R   R   R    t   propertyR   R#   R$   R%   R,   R-   R5   RE   RR   RT   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR!   )   s   					H(   t   _solve_inequalityc         C  s<   d d l  m } m } | r8 t | | |  ƒ d t ƒƒ S|  S(   Niÿÿÿÿ(   t	   powdenestt   piecewise_foldt   polar(   R>   RW   RX   R   t   True(   t   exprRE   RW   RX   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt	   _simplify°   s    c           s   ‡  f d †  } | S(   s5  
    This is a decorator generator for dropping convergence conditions.

    Suppose you define a function ``transform(*args)`` which returns a tuple of
    the form ``(result, cond1, cond2, ...)``.

    Decorating it ``@_noconds_(default)`` will add a new keyword argument
    ``noconds`` to it. If ``noconds=True``, the return value will be altered to
    be only ``result``, whereas if ``noconds=False`` the return value will not
    be altered.

    The default value of the ``noconds`` keyword will be ``default`` (i.e. the
    argument of this function).
    c           s2   d d l  m } | ˆ  ƒ ‡ ‡  f d †  ƒ } | S(   Niÿÿÿÿ(   t   wrapsc            s3   | j  d ˆ  ƒ } ˆ |  | Ž  } | r/ | d S| S(   Nt   nocondsi    (   R@   (   R"   RS   R^   RN   (   t   defaultR=   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   wrapperÉ   s
    (   t   sympy.core.decoratorsR]   (   R=   R]   R`   (   R_   (   R=   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   make_wrapperÆ   s    (    (   R_   Rb   (    (   R_   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt	   _noconds_·   s    c         C  s   t  |  | d t f ƒ S(   Ni    (   R   R
   (   R(   R)   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _default_integratorÙ   s    c           s´  d d l  m ‰ m ‰  m ‰ m ‰ t d d |  ƒ ‰ | | ˆ d |  | ƒ } | j t ƒ sŠ t | j	 ˆ | ƒ | ƒ t
 t
 f t j f S| j s¨ t d |  d ƒ ‚ n  | j d \ } } | j t ƒ rß t d |  d	 ƒ ‚ n  ‡  ‡ ‡ ‡ f d
 †  } g  t | ƒ D] } | | ƒ ^ q}	 g  |	 D] } | d t k r#| ^ q#}	 |	 j d ‡ f d †  ƒ |	 syt d |  d ƒ ‚ n  |	 d \ }
 } } t | j	 ˆ | ƒ | ƒ |
 | f | f S(   s0    Backend function to compute Mellin transforms. iÿÿÿÿ(   t   ret   Maxt   Mint	   count_opsR*   s   mellin-transformi   t   Mellins   could not compute integrali    s   integral in unexpected formc           sÏ  t  } t  } t j } t t |  ƒ ƒ } t d d t ƒ} x…| D]}} t  } t  } g  }	 x÷ t | ƒ D]é }
 |
 j ˆ d „  ƒ j	 ˆ ˆ ƒ | ƒ } |
 j
 sÌ |
 j d k sÌ | j ˆ ƒ sÌ | j | ƒ rß |	 |
 g 7}	 qg n  t | | ƒ } | j
 s| j d k r|	 |
 g 7}	 qg n  | j | k r>ˆ  | j | ƒ } qg ˆ | j | ƒ } qg W| t  k r~| | k r~ˆ  | | ƒ } qA | t  k r©| | k r©ˆ | | ƒ } qA t | t |	 Œ  ƒ } qA W| | | f S(   sN   
        Turn ``cond`` into a strip (a, b), and auxiliary conditions.
        t   tt   realc         S  s   |  j  ƒ  d S(   Ni    (   t   as_real_imag(   R)   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   <lambda>   R.   s   ==s   !=(   s   ==s   !=(   s   ==s   !=(   R
   R   t   trueR   R   R   RZ   R   t   replacet   subst   is_Relationalt   rel_opR;   RV   t   ltst   gtsR   R   (   R4   t   at   bt   auxt   condsRj   t   ct   a_t   b_t   aux_t   dt   d_t   soln(   Rf   Rg   Re   R*   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   process_condsñ   s>    	!

i   t   keyc           s    |  d |  d ˆ  |  d ƒ f S(   Ni    i   i   (    (   R)   (   Rh   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm     R.   s   no convergence found(   R>   Re   Rf   Rg   Rh   R   R;   R   R\   Rp   R
   R   Rn   t   is_PiecewiseR   R"   R   R/   t   sort(   R(   R)   t   s_t
   integratorR   t   FR4   R€   Ry   Rx   Ru   Rv   Rw   (    (   Rf   Rg   Rh   Re   R*   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _mellin_transformÝ   s&    ",	&%)t   MellinTransformc           B  s/   e  Z d  Z d Z d „  Z d „  Z d „  Z RS(   sâ   
    Class representing unevaluated Mellin transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute Mellin transforms, see the :func:`mellin_transform`
    docstring.
    Ri   c         K  s   t  | | | |  S(   N(   R‡   (   R   R(   R)   R*   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   .  s    c         C  s"   t  | | | d | d t f ƒ S(   Ni   i    (   R   R
   (   R   R(   R)   R*   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   1  s    c         C  sÛ   d d l  m } m } g  } g  } g  } xA | D]9 \ \ } } }	 | | g 7} | | g 7} | |	 g 7} q/ W| | Œ  | | Œ  f t | Œ  f }
 |
 d d |
 d d k t k sÂ |
 d t k r× t d d  d ƒ ‚ n  |
 S(   Niÿÿÿÿ(   Rf   Rg   i    i   Ri   s   no combined convergence.(   R>   Rf   Rg   R   RZ   R/   R   R2   (   R   R3   Rf   Rg   Ru   Rv   R4   t   sat   sbRy   RN   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR5   4  s    $2(   R   R   R    RJ   R,   R-   R5   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRˆ   "  s
   		c         K  s   t  |  | | ƒ j |   S(   s	  
    Compute the Mellin transform `F(s)` of `f(x)`,

    .. math :: F(s) = \int_0^\infty x^{s-1} f(x) \mathrm{d}x.

    For all "sensible" functions, this converges absolutely in a strip
      `a < \operatorname{Re}(s) < b`.

    The Mellin transform is related via change of variables to the Fourier
    transform, and also to the (bilateral) Laplace transform.

    This function returns ``(F, (a, b), cond)``
    where ``F`` is the Mellin transform of ``f``, ``(a, b)`` is the fundamental strip
    (as above), and ``cond`` are auxiliary convergence conditions.

    If the integral cannot be computed in closed form, this function returns
    an unevaluated :class:`MellinTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`. If ``noconds=False``,
    then only `F` will be returned (i.e. not ``cond``, and also not the strip
    ``(a, b)``).

    >>> from sympy.integrals.transforms import mellin_transform
    >>> from sympy import exp
    >>> from sympy.abc import x, s
    >>> mellin_transform(exp(-x), x, s)
    (gamma(s), (0, oo), True)

    See Also
    ========

    inverse_mellin_transform, laplace_transform, fourier_transform
    hankel_transform, inverse_hankel_transform
    (   Rˆ   RE   (   R(   R)   R*   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   mellin_transformD  s    $c         C  sª   d d l  m } m } m } m } |  \ } }	 | | | ƒ } | |	 | ƒ }	 | | | |	 j ƒ  d ƒ }
 | | | |	 |
 ƒ | d |	 |
 | | ƒ d |
 | f S(   sm  
    Re-write the sine function ``sin(m*s + n)`` as gamma functions, compatible
    with the strip (a, b).

    Return ``(gamma1, gamma2, fac)`` so that ``f == fac/(gamma1 * gamma2)``.

    >>> from sympy.integrals.transforms import _rewrite_sin
    >>> from sympy import pi, S
    >>> from sympy.abc import s
    >>> _rewrite_sin((pi, 0), s, 0, 1)
    (gamma(s), gamma(1 - s), pi)
    >>> _rewrite_sin((pi, 0), s, 1, 0)
    (gamma(s - 1), gamma(2 - s), -pi)
    >>> _rewrite_sin((pi, 0), s, -1, 0)
    (gamma(s + 1), gamma(-s), -pi)
    >>> _rewrite_sin((pi, pi/2), s, S(1)/2, S(3)/2)
    (gamma(s - 1/2), gamma(3/2 - s), -pi)
    >>> _rewrite_sin((pi, pi), s, 0, 1)
    (gamma(s), gamma(1 - s), -pi)
    >>> _rewrite_sin((2*pi, 0), s, 0, S(1)/2)
    (gamma(2*s), gamma(1 - 2*s), pi)
    >>> _rewrite_sin((2*pi, 0), s, S(1)/2, 1)
    (gamma(2*s - 1), gamma(2 - 2*s), -pi)
    iÿÿÿÿ(   R7   t   pit   ceilingt   gammai    i   (   R>   R7   RŒ   R   RŽ   Rl   (   t   m_nR*   Ru   Rv   R7   RŒ   R   RŽ   t   mt   nt   r(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _rewrite_sink  s    ""t   MellinTransformStripErrorc           B  s   e  Z d  Z RS(   sF   
    Exception raised by _rewrite_gamma. Mainly for internal use.
    (   R   R   R    (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR”   –  s   c   >        s…  d d l  m } d d l m ‰  m } m } m ‰ m } m } m	 ‰ m
 }	 m }
 m } m } m } m } m } m } m } t | | g ƒ \ ‰ ‰ ‡ ‡ ‡ ‡ f d †  } g  } xz ˆ j | ƒ D]i } | j ˆ ƒ sÛ qÀ n  | j d } | j r| j ˆ ƒ d } n  | j ˆ ƒ \ } } | | g 7} qÀ Wx‡ ˆ j | | | | ƒ D]m } | j ˆ ƒ saqFn  | j d } | j r| j ˆ ƒ d } n  | j ˆ ƒ \ } } | | | g 7} qFWg  | D]! } | j rÙt | ƒ n | ^ q¾} t d ƒ } x! | D] } | j sø| } PqøqøWg  | D] } | | ^ q} t d „  | Dƒ ƒ sR| j rgt d d d	 ƒ ‚ n  | t  |
 g  | D] } t | j! ƒ ^ qwt d ƒ ƒ } | | k røt" | ƒ d k rÆ| } qø| t  | g  | D] } t | j# ƒ ^ qÖƒ } n  ˆ j$ ˆ ˆ | ƒ ‰ t d ƒ | } t d ƒ | } ˆ d k	 rGˆ | 9‰ n  ˆ d k	 r`ˆ | 9‰ n  ˆ j% ƒ  \ } } | j& | ƒ } | j& | ƒ } t' t( | | t) ƒ ƒ ƒ t' t( | | t* ƒ ƒ ƒ } g  }  g  }! g  }" g  }# g  }$ ‡ f d
 †  ‰ xK| r>	| j+ ƒ  \ ‰ }% |% r/|" |# }& }' |  |! }( }) n |# |" }& }' |! |  }( }) ‡  ‡ ‡ ‡ f d †  }* ˆ j ˆ ƒ s€|( ˆ g 7}( qôˆ j, s˜t- ˆ | ƒ rˆ j, r¶ˆ j. }+ ˆ j }, n | d ƒ }+ ˆ j d }, |, j/ r|% }- |, d k  rô|- }- n  | |+ |- f g t |, ƒ 7} qôq;	|+ j ˆ ƒ sp|* |, ƒ \ } } |% sKd |+ }+ n  |$ |+ | g 7}$ |  |+ | g 7}  q;	ˆ ˆ ƒ ‚ qôˆ j0 ˆ ƒ rìˆ  ˆ ˆ ƒ }. |. j1 ƒ  d k r2|. j2 ƒ  d } |	 |. ˆ ƒ }/ t" |/ ƒ |. j1 ƒ  k rø| j3 |. ƒ }/ n  |( | g 7}( | g  |/ D] }0 ˆ |0 |% f ^ q7} qôn  |. j4 ƒ  \ } }0 |( | g 7}( |0 | }0 | |0 |% ƒ r¦|& t d ƒ |0 d f g 7}& |' t d ƒ |0 f g 7}' q;	|( d g 7}( |& t d ƒ |0 d f g 7}& |' t d ƒ |0 f g 7}' qôt- ˆ | ƒ rŽ|* ˆ j d ƒ \ } } |% rx| d k r@| | | |% ƒ t* k sf| d k  rx| | | |% ƒ t) k rxt5 d ƒ ‚ qxn  |& | | f g 7}& qôt- ˆ | ƒ r1ˆ j d } |% rß| | | ƒ | d | | ƒ | }1 }2 }3 n$ t6 |* | ƒ ˆ ˆ ˆ ƒ \ }1 }2 }3 | |1 |% f |2 |% f g 7} |( |3 g 7}( qôt- ˆ | ƒ rˆ j d } | | | d t* ƒ|% f | | d | d t* ƒ|% f g 7} qôt- ˆ | ƒ rÓˆ j d } | | | d | d t* ƒ|% f g 7} qôt- ˆ | ƒ r/	ˆ j d } | | | d | d t* ƒ|% f | | d t* ƒ|% f g 7} qôˆ ˆ ƒ ‚ qôW| | |  Œ  | |! Œ  9} g  g  g  g  f \ }4 }5 }6 }7 x |" |4 |6 t) f |# |7 |5 t* f g D]z\ }8 }9 }: }% xe|8 r|8 j+ ƒ  \ } }0 | d k rä
| d 
k rä
t t | ƒ ƒ }. | |. }; |0 |. }< | j/ s 
t7 d ƒ ‚ n  x/ t8 |. ƒ D]! }= |8 |; |< |= |. f g 7}8 q-
W|% rœ
| d | d |. d |. |0 t d ƒ d 9} |$ |. | g 7}$ q±	| d | d |. d |. |0 t d ƒ d } |$ |. | g 7}$ q±	n  | d 
k r|9 j9 d |0 ƒ q±	|: j9 |0 ƒ q±	Wqœ	W| |$ Œ  } |4 j: d t; ƒ |5 j: d t; ƒ |6 j: d t; ƒ |7 j: d t; ƒ |4 |5 f |6 |7 f | | | f S(   sœ  
    Try to rewrite the product f(s) as a product of gamma functions,
    so that the inverse Mellin transform of f can be expressed as a meijer
    G function.

    Return (an, ap), (bm, bq), arg, exp, fac such that
    G((an, ap), (bm, bq), arg/z**exp)*fac is the inverse Mellin transform of f(s).

    Raises IntegralTransformError or MellinTransformStripError on failure.

    It is asserted that f has no poles in the fundamental strip designated by
    (a, b). One of a and b is allowed to be None. The fundamental strip is
    important, because it determines the inversion contour.

    This function can handle exponentials, linear factors, trigonometric
    functions.

    This is a helper function for inverse_mellin_transform that will not
    attempt any transformations on f.

    >>> from sympy.integrals.transforms import _rewrite_gamma
    >>> from sympy.abc import s
    >>> from sympy import oo
    >>> _rewrite_gamma(s*(s+3)*(s-1), s, -oo, oo)
    (([], [-3, 0, 1]), ([-2, 1, 2], []), 1, 1, -1)
    >>> _rewrite_gamma((s-1)**2, s, -oo, oo)
    (([], [1, 1]), ([2, 2], []), 1, 1, 1)

    Importance of the fundamental strip:

    >>> _rewrite_gamma(1/s, s, 0, oo)
    (([1], []), ([], [0]), 1, 1, 1)
    >>> _rewrite_gamma(1/s, s, None, oo)
    (([1], []), ([], [0]), 1, 1, 1)
    >>> _rewrite_gamma(1/s, s, 0, None)
    (([1], []), ([], [0]), 1, 1, 1)
    >>> _rewrite_gamma(1/s, s, -oo, 0)
    (([], [1]), ([0], []), 1, 1, -1)
    >>> _rewrite_gamma(1/s, s, None, 0)
    (([], [1]), ([0], []), 1, 1, -1)
    >>> _rewrite_gamma(1/s, s, -oo, None)
    (([], [1]), ([0], []), 1, 1, -1)

    >>> _rewrite_gamma(2**(-s+3), s, -oo, oo)
    (([], []), ([], []), 1/2, 1, 8)
    iÿÿÿÿ(   t   repeat(   t   PolyRŽ   R8   Re   t   CRootOft   expt   expandt   rootst   ilcmRŒ   t   sint   cost   tant   cott   igcdt	   exp_polarc           s¿   ˆ ˆ |  ƒ ƒ }  ˆ  d k r. ˆ t k r. t Sˆ  d k rD |  ˆ k  Sˆ d k rZ |  ˆ  k S|  ˆ k t k rp t S|  ˆ  k t k r† t S| r d Sˆ  j s« ˆ j s« |  j r¯ d St d ƒ ‚ d S(   sU   
        Decide whether pole at c lies to the left of the fundamental strip.
        s   Pole inside critical strip?N(   R2   R
   RZ   R/   R%   R”   (   Ry   t   is_numer(   Rz   R{   R™   Re   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   leftÛ  s     

i    i   c         s  s   |  ] } | j  Vq d  S(   N(   t   is_Rational(   R<   R)   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pys	   <genexpr>  s    t   Gammas   Nonrational multiplierc           s   t  d ˆ  d |  ƒ S(   Ns   Inverse Mellins   Unrecognised form '%s'.(   R   (   t   fact(   R(   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt	   exception/  s    c           sX   |  j  ˆ ƒ s ˆ ˆ ƒ ‚ n  ˆ  |  ˆ ƒ } | j ƒ  d k rN ˆ ˆ ƒ ‚ n  | j ƒ  S(   s7    Test if arg is of form a*s+b, raise exception if not. i   (   t   is_polynomialt   degreet
   all_coeffs(   t   argt   p(   R–   R§   R¦   R*   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt
   linear_arg:  s    s    Gammas partially over the strip.t   evaluatei   s   a is not an integerR   N(<   t	   itertoolsR•   R>   R–   RŽ   R8   Re   R—   R˜   R™   Rš   R›   RŒ   Rœ   R   Rž   RŸ   R    R¡   R   RB   R;   R"   RC   t   as_independentRK   t   is_realt   absR¤   RA   R   R2   R   t   qRI   R¬   Rp   t   as_numer_denomt	   make_argsRD   t   zipRZ   R/   R@   t   is_PowRF   t   baset
   is_IntegerR¨   R©   t   LTt	   all_rootsRª   R'   R“   t	   TypeErrorR   RH   Rƒ   R   (>   R(   R*   Ru   Rv   R•   RŽ   R8   R—   t   exp_Rš   R›   RŒ   Rœ   R   Rž   RŸ   R    R¡   R£   t   s_multiplierst   gR«   RP   t   _R)   t   common_coefficientt   s_multipliert   fact   exponentt   numert   denomR"   t   facst   dfacst   numer_gammast   denom_gammast   exponentialsR¢   t   ugammast   lgammast   ufacst   lfacsR­   R¸   R˜   R4   R¬   t   rsRy   t   gamma1t   gamma2t   fac_t   ant   apt   bmt   bqt   gammast   plust   minust   newat   newct   k(    (	   R–   Rz   R{   R§   R™   R(   R¦   Re   R*   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _rewrite_gamma  s>   /j		.	
,	/4	
			
'&&/$(*  %	

	00c         C  s^  d d l  m } m } m } m } m }	 m }
 m } m } m	 } m
 } m } t d d |  d t ƒ} |  j | ƒ }  xÒ| |  ƒ | |  ƒ | |  ƒ g D]¯} | j r^g  | j D]$ } t | | | | | d t ƒ^ q® } g  | D] } | d ^ qß } g  | D] } | d ^ qü } | | Œ  } | sB| | d	 | j | ƒ ƒ} n  | j | | ƒ t | Œ  f Sy0 t | | | d | d ƒ \ } } } } } Wn t k
 r¤q• n X| | | | | | ƒ } | rÎ| } n§ y | | ƒ } Wn% t k
 r} t d
 |  d ƒ ‚ n X| j rut | j ƒ d k ru| | t | ƒ ƒ | j d j d | t | ƒ | ƒ | j d j d } n  t |	 | j ƒ ƒ | j |
 k  g } | t t t | j ƒ t | j  ƒ k d | | j! ƒ d k ƒ t |	 | j ƒ ƒ | j |
 k ƒ g 7} t | Œ  } | t k r-t d
 |  d ƒ ‚ n  | | j | | ƒ | f SWt d
 |  d ƒ ‚ d S(   ss    A helper for the real inverse_mellin_transform function, this one here
        assumes x to be real and positive. iÿÿÿÿ(   R™   R7   t   hyperexpandt   meijergR«   RŒ   Re   t   factort	   HeavisideRŽ   R6   Rj   s   inverse-mellin-transformt   positiveR^   i   i    t   genss   Inverse Mellins   Could not calculate integrali   s   does not convergeR.   N("   R>   R™   R7   Rß   Rà   R«   RŒ   Re   Rá   Râ   RŽ   R6   R   RZ   t   rewriteRC   R"   t   _inverse_mellin_transformR/   RB   Rp   R   RÞ   R   R'   R‚   RI   R²   t   argumentt   deltaR   RÕ   R×   t   nu(   R†   R*   t   x_t   stript
   as_meijergR™   R7   Rß   Rà   R«   RŒ   Re   Rá   Râ   RŽ   R6   R)   R¿   t   GRO   R¬   Rx   RN   Ru   Rv   t   Ct   eRÃ   t   ht   detailR4   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRæ   Å  sJ    L(	10	%,%=)t   InverseMellinTransformc           B  sV   e  Z d  Z d Z e d ƒ Z e d ƒ Z d „  Z e d „  ƒ Z	 d „  Z
 d „  Z RS(   sú   
    Class representing unevaluated inverse Mellin transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse Mellin transforms, see the
    :func:`inverse_mellin_transform` docstring.
    s   Inverse MellinR2   Ry   c         K  sO   | d  k r t j } n  | d  k r0 t j } n  t j |  | | | | | |  S(   N(   R2   Rò   t   _none_sentinelR!   t   __new__(   t   clsR†   R*   R)   Ru   Rv   t   opts(    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRô     s
    c         C  sU   |  j  d |  j  d } } | t j k r3 d  } n  | t j k rK d  } n  | | f S(   Ni   i   (   R"   Rò   Ró   R2   (   R   Ru   Rv   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   fundamental_strip  s    		c         K  s  d d l  m } t d  k r¡ d d l  m } m } m } m }	 m }
 m	 } m
 } m } m } m } m } m } t | | | |	 |
 | | | | | | | g ƒ a n  xT | | ƒ D]F } | j r® | j | ƒ r® | j t k r® t d | d | ƒ ‚ q® q® W|  j } t | | | | |  S(   Niÿÿÿÿ(   t   postorder_traversal(   R˜   RŽ   Rœ   R   Rž   RŸ   t   cosht   sinht   tanht   cotht	   factorialt   rfs   Inverse Mellins   Component %s not recognised.(   R>   Rø   t   _allowedR2   R˜   RŽ   Rœ   R   Rž   RŸ   Rù   Rú   Rû   Rü   Rý   Rþ   t   sett   is_FunctionR;   R=   R   R÷   Ræ   (   R   R†   R*   R)   R+   Rø   R˜   RŽ   Rœ   R   Rž   RŸ   Rù   Rú   Rû   Rü   Rý   Rþ   R(   Rë   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,     s    R'		c         C  s]   d d l  m } |  j j } t | | | | | | t | | t f ƒ d t j t j S(   Niÿÿÿÿ(   t   Ii   (	   R>   R  R0   t   _cR   R
   R   t   Pit   ImaginaryUnit(   R   R†   R*   R)   R  Ry   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   0  s    (   R   R   R    RJ   R   Ró   R  Rô   RU   R÷   R,   R-   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRò     s   			c         K  s'   t  |  | | | d | d ƒ j |   S(   s  
    Compute the inverse Mellin transform of `F(s)` over the fundamental
    strip given by ``strip=(a, b)``.

    This can be defined as

    .. math:: f(x) = \frac{1}{2\pi i} \int_{c - i\infty}^{c + i\infty} x^{-s} F(s) \mathrm{d}s,

    for any `c` in the fundamental strip. Under certain regularity
    conditions on `F` and/or `f`,
    this recovers `f` from its Mellin transform `F`
    (and vice versa), for positive real `x`.

    One of `a` or `b` may be passed as ``None``; a suitable `c` will be
    inferred.

    If the integral cannot be computed in closed form, this function returns
    an unevaluated :class:`InverseMellinTransform` object.

    Note that this function will assume x to be positive and real, regardless
    of the sympy assumptions!

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.

    >>> from sympy.integrals.transforms import inverse_mellin_transform
    >>> from sympy import oo, gamma
    >>> from sympy.abc import x, s
    >>> inverse_mellin_transform(gamma(s), s, x, (0, oo))
    exp(-x)

    The fundamental strip matters:

    >>> f = 1/(s**2 - 1)
    >>> inverse_mellin_transform(f, s, x, (-oo, -1))
    (x/2 - 1/(2*x))*Heaviside(x - 1)
    >>> inverse_mellin_transform(f, s, x, (-1, 1))
    -x*Heaviside(1 - x)/2 - Heaviside(x - 1)/(2*x)
    >>> inverse_mellin_transform(f, s, x, (1, oo))
    (-x/2 + 1/(2*x))*Heaviside(1 - x)

    See Also
    ========

    mellin_transform
    hankel_transform, inverse_hankel_transform
    i    i   (   Rò   RE   (   R†   R*   R)   Rë   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   inverse_mellin_transform6  s    0c           sÌ   d d l  m } m } m ‰ d d l m ‰  ‡ f d †  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ ‡  ‡ f d †  ‰ ‡ ‡ f d †  } d „  } | |  | ˆ ƒ }  | |  | ‡ f d	 †  ƒ }  | |  ˆ | ƒ }  t |  ƒ S(
   s¨  
    Naively simplify some conditions occurring in ``expr``, given that `\operatorname{Re}(s) > a`.

    >>> from sympy.integrals.transforms import _simplifyconds as simp
    >>> from sympy.abc import x
    >>> from sympy import sympify as S
    >>> simp(abs(x**2) < 1, x, 1)
    False
    >>> simp(abs(x**2) < 1, x, 2)
    False
    >>> simp(abs(x**2) < 1, x, 0)
    Abs(x**2) < 1
    >>> simp(abs(1/x**2) < 1, x, 1)
    True
    >>> simp(S(1) < abs(x), x, 1)
    True
    >>> simp(S(1) < abs(1/x), x, 1)
    False

    >>> from sympy import Ne
    >>> simp(Ne(1, x**3), x, 1)
    True
    >>> simp(Ne(1, x**3), x, 2)
    True
    >>> simp(Ne(1, x**3), x, 0)
    Ne(1, x**3)
    iÿÿÿÿ(   t   StrictGreaterThant   StrictLessThant
   Unequality(   t   Absc           s3   |  ˆ  k r d S|  j  r/ |  j ˆ  k r/ |  j Sd  S(   Ni   (   R·   R¸   R˜   R2   (   t   ex(   R*   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   power  s
    c           s   |  j  ˆ ƒ r" | j  ˆ ƒ r" d St |  ˆ  ƒ rA |  j d }  n  t | ˆ  ƒ r` | j d } n  |  j  ˆ ƒ r„ ˆ d | d |  ƒ Sˆ | ƒ } | d k r  d Syh | d k rÕ t |  ƒ t ˆ ƒ | k t k rÕ t S| d k  rt |  ƒ t ˆ ƒ | k t k rt SWn t k
 rn Xd S(   s_    Return True only if |ex1| > |ex2|, False only if |ex1| < |ex2|.
            Else return None. i    i   N(   R;   R2   RF   R"   R²   RZ   R/   R¼   (   t   ex1t   ex2R‘   (   R
  Ru   t   biggerR  R*   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR  ”  s$    ..c           sf   |  j  p t |  ˆ  ƒ s2 | j  p. t | ˆ  ƒ r< |  | k  Sˆ |  | ƒ } | d k	 r\ | S|  | k  S(   s    simplify x < y N(   t   is_positiveRF   R2   (   R)   t   yR’   (   R
  R  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   replieª  s    
c           s8   ˆ |  | ƒ } | t  k s' | t k r+ t  Sˆ  |  | ƒ S(   N(   RZ   R/   (   R)   R  Rv   (   R	  R  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   replue´  s    c         W  s/   |  t  k s |  t k r" t |  ƒ S|  j | Œ  S(   N(   RZ   R/   t   boolRo   (   R  R"   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   replº  s    
c           s   ˆ  | |  ƒ S(   N(    (   R)   R  (   R  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm   ¿  R.   (   t   sympy.core.relationalR  R  R	  R>   R
  R   (   R[   R*   Ru   R  R  R  R  (    (   R
  R	  Ru   R  R  R  R*   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _simplifycondsm  s    
	c           s“  d d l  m ‰
 m ‰  m } m ‰ m ‰ m ‰ m ‰ m ‰ m	 ‰ m
 ‰ m ‰	 t d ƒ ‰ t | ˆ ˆ ƒ ˆ ˆ d t f ƒ } | j t ƒ s´ t | j ˆ ˆ ƒ | ƒ t t j f S| j sÒ t d ˆ d ƒ ‚ n  | j d \ } } | j t ƒ r	t d ˆ d ƒ ‚ n  ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡	 ‡
 ‡ ‡ ‡ f d †  } g  t | ƒ D] } | | ƒ ^ qI}	 g  |	 D]- }
 |
 d	 t k rh|
 d t k rh|
 ^ qh} | sÍg  |	 D] }
 |
 d	 t k r¨|
 ^ q¨} n  | }	 d
 „  ‰ |	 j d ‡ f d †  ƒ |	 st d ˆ d ƒ ‚ n  |	 d \ } } ‡ ‡ f d †  } | r_t | ˆ | ƒ } t | ˆ | ƒ } n  t | j ˆ ˆ ƒ | ƒ | | ƒ t | | ƒ ƒ f S(   s.    The backend function for Laplace transforms. iÿÿÿÿ(   Re   Rf   R˜   RŒ   Rg   t   periodic_argumentR«   R   t   Wildt   symbolst
   polar_liftR*   i    t   Laplaces   could not compute integrals   integral in unexpected formc      
     s˜  t  } t j } t t |  ƒ ƒ }  ˆ d d ˆ d ˆ g ƒ\ } } } } } } }	 | t ˆ ˆ | | ƒ ƒ | k  | t ˆ ˆ | | ƒ ƒ | k t ˆ ˆ | | | | ƒ ƒ | k  t ˆ ˆ | | | | ƒ ƒ | k t ˆ ˆ	 ˆ | ƒ | | | ƒ ƒ | k  t ˆ ˆ	 ˆ | ƒ | | | ƒ ƒ | k f }
 xU|  D]M} t  } g  } xt | ƒ D]÷} | j r‰ˆ | j j	 k r‰| j
 } n  | j r³t | t t f ƒ r³| j } n  x' |
 D] } | j | ƒ ‰  ˆ  rºPqºqºWˆ  r-ˆ  | j r-ˆ  | ˆ  | ˆ d k r-ˆ
 ˆ ˆ  | ƒ d k  } q-n  | j | ˆ | t ˆ ˆ |	 ƒ ƒ | ƒ t ˆ | ƒ | d k  ƒ ‰  ˆ  sË| j ˆ | t ˆ ˆ | |	 | ƒ ƒ | ƒ t ˆ | ƒ | d k  ƒ ‰  n  ˆ  s&| j | ˆ t ˆ ˆ	 ˆ ƒ | |	 | ƒ ƒ | ƒ t ˆ | ƒ | d k  ƒ ‰  n  ˆ  rpt ‡  f d †  | | | | |	 g Dƒ ƒ rpˆ
 ˆ ƒ ˆ  | k } n  | j ˆ
 d „  ƒ j ˆ
 ˆ ƒ ˆ ƒ } | j sÏ| j d k sÏ| j ˆ ƒ sÏ| j ˆ ƒ râ| | g 7} q\n  t | ˆ ƒ } | j s
| j d k r| | g 7} q\n  | j ˆ k rAt d
 ˆ d ƒ ‚ q\ˆ | j | ƒ } q\W| t  k ruˆ | | ƒ } q=t | t | Œ  ƒ } q=W| | f S(   s7    Turn ``conds`` into a strip and auxiliary conditions. s   p q w1 w2 w3 w4 w5Rõ   t   excludei   i    c         3  s   |  ] } ˆ  | j  Vq d  S(   N(   R  (   R<   t   wild(   R   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pys	   <genexpr>ý  s    c         S  s   |  j  ƒ  j ƒ  d S(   Ni    (   R™   Rl   (   R)   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm      R.   s   ==s   !=R  s   convergence not in half-plane?(   s   ==s   !=(   s   ==s   !=(   R
   R   Rn   R   R   R²   R   Rq   t   rhsR%   t   reversedRF   R   R	   t   reversedsignt   matchR  t   allRo   Rp   Rr   R;   RV   Rs   R   R   R   (   Rx   Ru   Rw   R¬   R³   t   w1t   w2t   w3t   w4t   w5t   patternsRy   Rz   R|   R}   t   patR~   R   (   Rf   Rg   R  R«   t   arg_R   R(   RŒ   R  Re   R*   R  Rj   (   R   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR€   Ø  sp    	-!!$$*0)!II-"1!

	i   c         S  s&   |  t  k s |  t k r d S|  j ƒ  S(   Ni    (   RZ   R/   Rh   (   R[   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   cnt  s    R   c           s   |  d ˆ  |  d ƒ f S(   Ni    i   (    (   R)   (   R,  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm      R.   s   no convergence foundc           s   |  j  ˆ  ˆ ƒ S(   N(   Rp   (   R[   (   R*   R„   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   sbs&  s    (   R>   Re   Rf   R˜   RŒ   Rg   R  R«   R   R  R  R  R   R   R
   R;   R   R\   Rp   R   Rn   R‚   R   R"   R   R/   Rƒ   R  R   (   R(   Rj   R„   R   R˜   R†   R4   R€   Ry   Rx   R)   t   conds2Ru   Rw   R-  (    (   Rf   Rg   R  R«   R+  R,  R   R(   RŒ   R  Re   R*   R„   R  Rj   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _laplace_transformÄ  s8    L'&	3>%:,	t   LaplaceTransformc           B  s/   e  Z d  Z d Z d „  Z d „  Z d „  Z RS(   så   
    Class representing unevaluated Laplace transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute Laplace transforms, see the :func:`laplace_transform`
    docstring.
    R  c         K  s   t  | | | |  S(   N(   R/  (   R   R(   Rj   R*   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   :  s    c         C  s5   d d l  m } t | | | | ƒ | d t f ƒ S(   Niÿÿÿÿ(   R˜   i    (   R>   R˜   R   R
   (   R   R(   Rj   R*   R˜   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   =  s    c         C  s   d d l  m } g  } g  } x. | D]& \ } } | j | ƒ | j | ƒ q# Wt | Œ  } | | Œ  } | t k r† t d d  d ƒ ‚ n  | | f S(   Niÿÿÿÿ(   Rf   R  s   No combined convergence.(   R>   Rf   RH   R   R/   R   R2   (   R   R3   Rf   Rx   t   planest   planeR4   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR5   A  s    (   R   R   R    RJ   R,   R-   R5   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR0  .  s
   		c           sS   t  |  t ƒ r: t |  d ƒ r: |  j ‡  ‡ ‡ f d †  ƒ St |  ˆ ˆ ƒ j ˆ    S(   sb  
    Compute the Laplace Transform `F(s)` of `f(t)`,

    .. math :: F(s) = \int_0^\infty e^{-st} f(t) \mathrm{d}t.

    For all "sensible" functions, this converges absolutely in a
    half plane  `a < \operatorname{Re}(s)`.

    This function returns ``(F, a, cond)``
    where ``F`` is the Laplace transform of ``f``, `\operatorname{Re}(s) > a` is the half-plane
    of convergence, and ``cond`` are auxiliary convergence conditions.

    If the integral cannot be computed in closed form, this function returns
    an unevaluated :class:`LaplaceTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`. If ``noconds=True``,
    only `F` will be returned (i.e. not ``cond``, and also not the plane ``a``).

    >>> from sympy.integrals import laplace_transform
    >>> from sympy.abc import t, s, a
    >>> laplace_transform(t**a, t, s)
    (s**(-a)*gamma(a + 1)/s, 0, re(a) > -1)

    See Also
    ========

    inverse_laplace_transform, mellin_transform, fourier_transform
    hankel_transform, inverse_hankel_transform
    t	   applyfuncc           s   t  |  ˆ ˆ ˆ   S(   N(   t   laplace_transform(   t   fij(   R+   R*   Rj   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm   p  R.   (   RF   R   t   hasattrR3  R0  RE   (   R(   Rj   R*   R+   (    (   R+   R*   Rj   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR4  P  s    c      	     sû  d d l  m ‰ m ‰  m ‰ m ‰ m } m ‰ d d l m } m	 ‰ t
 d d t ƒ‰ ‡  ‡ ‡ ‡ f d †  } y8 t |  | ˆ ˆ ƒ d t f d t d t ƒ\ } }	 Wn t k
 r¿ d } n X| d k r`| |  | ˆ ƒ } | d k rÿ t d	 | d
 ƒ ‚ n  | j rB| j d \ } }	 | j | ƒ rKt d	 | d ƒ ‚ qKn	 t j }	 | j ˆ | ƒ } n  | j r| j ˆ | ƒ |	 f St
 d ƒ ‰ ‡  ‡ ‡ ‡ ‡ f d †  }
 | j ˆ  |
 ƒ } ‡ ‡ f d †  } | j ˆ | ƒ } t | j ˆ | ƒ | ƒ |	 f S(   s6    The backend function for inverse Laplace transforms. iÿÿÿÿ(   R˜   Râ   t   logt   expand_complexR   t	   Piecewise(   t   meijerint_inversiont   _get_coeff_expRj   Rk   c            s§   t  |  ƒ d k r ˆ |  Œ  S|  d j d j } ˆ | ˆ ƒ \ } } |  d j d } |  d j d } ˆ  d t | ƒ ˆ | ƒ | ˆ  ˆ | d t | ƒ ƒ | S(   s3    Simplify a piecewise expression from hyperexpand. i   i   i    i   (   RI   R"   Rç   R²   (   R"   R«   RP   RÄ   t   e1t   e2(   Râ   R9  R;  Rj   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   pw_simp  s    
R:   R^   s   Inverse LaplaceR.   i    s(   inversion integral of unrecognised form.t   uc           s•   |  j  ˆ ˆ ƒ ˆ ƒ } | j ˆ ƒ r2 ˆ  |  ƒ St | d k ˆ ƒ } | j ˆ k rs ˆ | j ƒ } ˆ  ˆ | ƒ Sˆ | j ƒ } ˆ  ˆ | ƒ Sd  S(   Ni    (   Rp   R;   RV   Rs   Rt   (   R«   Ru   t   relRÝ   (   Râ   R˜   R7  Rj   R?  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   simp_heaviside¤  s    
c           s   ˆ ˆ  |  ƒ ƒ S(   N(    (   R«   (   R˜   R8  (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   simp_exp±  s    N(   R>   R˜   Râ   R7  R8  R   R9  t   sympy.integrals.meijerintR:  R;  R   RZ   R  R2   R
   R/   R   R‚   R"   R;   R   Rn   Ro   Rp   R\   (   R†   R*   t   t_R2  R   R   R:  R>  R(   R4   RA  RB  (    (   Râ   R9  R;  R˜   R8  R7  Rj   R?  s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _inverse_laplace_transformt  s8    .
				t   InverseLaplaceTransformc           B  sV   e  Z d  Z d Z e d ƒ Z e d ƒ Z d „  Z e d „  ƒ Z	 d „  Z
 d „  Z RS(   sý   
    Class representing unevaluated inverse Laplace transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse Laplace transforms, see the
    :func:`inverse_laplace_transform` docstring.
    s   Inverse LaplaceR2   Ry   c         K  s4   | d  k r t j } n  t j |  | | | | |  S(   N(   R2   RF  Ró   R!   Rô   (   Rõ   R†   R*   R)   R2  Rö   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRô   É  s    c         C  s)   |  j  d } | t j k r% d  } n  | S(   Ni   (   R"   RF  Ró   R2   (   R   R2  (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   fundamental_planeÎ  s    	c         K  s   t  | | | |  j |  S(   N(   RE  RG  (   R   R†   R*   Rj   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   Õ  s    c         C  sh   d d l  m } m } |  j j } t | | | ƒ | | | | t | | t f ƒ d t j t j	 S(   Niÿÿÿÿ(   R  R˜   i   (
   R>   R  R˜   R0   R  R   R
   R   R  R  (   R   R†   R*   Rj   R  R˜   Ry   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   Ø  s    (   R   R   R    RJ   R   Ró   R  Rô   RU   RG  R,   R-   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRF  »  s   		c           sY   t  |  t ƒ r= t |  d ƒ r= |  j ‡  ‡ ‡ ‡ f d †  ƒ St |  ˆ ˆ ˆ ƒ j ˆ    S(   sé  
    Compute the inverse Laplace transform of `F(s)`, defined as

    .. math :: f(t) = \frac{1}{2\pi i} \int_{c-i\infty}^{c+i\infty} e^{st} F(s) \mathrm{d}s,

    for `c` so large that `F(s)` has no singularites in the
    half-plane `\operatorname{Re}(s) > c-\epsilon`.

    The plane can be specified by
    argument ``plane``, but will be inferred if passed as None.

    Under certain regularity conditions, this recovers `f(t)` from its
    Laplace Transform `F(s)`, for non-negative `t`, and vice
    versa.

    If the integral cannot be computed in closed form, this function returns
    an unevaluated :class:`InverseLaplaceTransform` object.

    Note that this function will always assume `t` to be real,
    regardless of the sympy assumption on `t`.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.

    >>> from sympy.integrals.transforms import inverse_laplace_transform
    >>> from sympy import exp, Symbol
    >>> from sympy.abc import s, t
    >>> a = Symbol('a', positive=True)
    >>> inverse_laplace_transform(exp(-a*s)/s, s, t)
    Heaviside(-a + t)

    See Also
    ========

    laplace_transform
    hankel_transform, inverse_hankel_transform
    R3  c           s   t  |  ˆ ˆ ˆ ˆ   S(   N(   t   inverse_laplace_transform(   t   Fij(   R+   R2  R*   Rj   (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRm     R.   (   RF   R   R6  R3  RF  RE   (   R†   R*   Rj   R2  R+   (    (   R+   R2  R*   Rj   s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRH  Þ  s    &c         C  s,  d d l  m } m } t | |  | | | | | ƒ | t t f ƒ }	 |	 j t ƒ sn t |	 | ƒ t j	 f St |  | t t f ƒ }
 |
 t t t j
 f k s¯ |
 j t ƒ rÄ t | |  d ƒ ‚ n  |	 j sâ t | |  d ƒ ‚ n  |	 j d \ }	 } |	 j t ƒ rt | |  d ƒ ‚ n  t |	 | ƒ | f S(   sÒ   
    Compute a general Fourier-type transform
        F(k) = a int_-oo^oo exp(b*I*x*k) f(x) dx.

    For suitable choice of a and b, this reduces to the standard Fourier
    and inverse Fourier transforms.
    iÿÿÿÿ(   R˜   R  s$   function not integrable on real axiss   could not compute integrali    s   integral in unexpected form(   R>   R˜   R  R   R
   R;   R   R\   R   Rn   t   NaNR   R‚   R"   (   R(   R)   RÝ   Ru   Rv   R1   R   R˜   R  R†   t
   integral_fR4   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _fourier_transform  s    	3(	t   FourierTypeTransformc           B  s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s#    Base class for Fourier transforms.c         C  s   t  d |  j ƒ ‚ d  S(   Ns,   Class %s must implement a(self) but does not(   R'   R0   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   -  s    c         C  s   t  d |  j ƒ ‚ d  S(   Ns,   Class %s must implement b(self) but does not(   R'   R0   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   1  s    c         K  s.   t  | | | |  j ƒ  |  j ƒ  |  j j |  S(   N(   RL  Ru   Rv   R0   RJ   (   R   R(   R)   RÝ   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   5  s    c         C  s_   d d l  m } m } |  j ƒ  } |  j ƒ  } t | | | | | | | ƒ | t t f ƒ S(   Niÿÿÿÿ(   R˜   R  (   R>   R˜   R  Ru   Rv   R   R
   (   R   R(   R)   RÝ   R˜   R  Ru   Rv   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   :  s    (   R   R   R    Ru   Rv   R,   R-   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRM  *  s
   			t   FourierTransformc           B  s&   e  Z d  Z d Z d „  Z d „  Z RS(   så   
    Class representing unevaluated Fourier transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute Fourier transforms, see the :func:`fourier_transform`
    docstring.
    t   Fourierc         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   M  s    c         C  s   d t  j S(   Niþÿÿÿ(   R   R  (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   P  s    (   R   R   R    RJ   Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRN  A  s   	c         K  s   t  |  | | ƒ j |   S(   sT  
    Compute the unitary, ordinary-frequency Fourier transform of `f`, defined
    as

    .. math:: F(k) = \int_{-\infty}^\infty f(x) e^{-2\pi i x k} \mathrm{d} x.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`FourierTransform` object.

    For other Fourier transform conventions, see the function
    :func:`sympy.integrals.transforms._fourier_transform`.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import fourier_transform, exp
    >>> from sympy.abc import x, k
    >>> fourier_transform(exp(-x**2), x, k)
    sqrt(pi)*exp(-pi**2*k**2)
    >>> fourier_transform(exp(-x**2), x, k, noconds=False)
    (sqrt(pi)*exp(-pi**2*k**2), True)

    See Also
    ========

    inverse_fourier_transform
    sine_transform, inverse_sine_transform
    cosine_transform, inverse_cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   RN  RE   (   R(   R)   RÝ   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   fourier_transformT  s    !t   InverseFourierTransformc           B  s&   e  Z d  Z d Z d „  Z d „  Z RS(   sý   
    Class representing unevaluated inverse Fourier transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse Fourier transforms, see the
    :func:`inverse_fourier_transform` docstring.
    s   Inverse Fourierc         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   „  s    c         C  s   d t  j S(   Ni   (   R   R  (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   ‡  s    (   R   R   R    RJ   Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRQ  x  s   	c         K  s   t  |  | | ƒ j |   S(   sz  
    Compute the unitary, ordinary-frequency inverse Fourier transform of `F`,
    defined as

    .. math:: f(x) = \int_{-\infty}^\infty F(k) e^{2\pi i x k} \mathrm{d} k.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`InverseFourierTransform` object.

    For other Fourier transform conventions, see the function
    :func:`sympy.integrals.transforms._fourier_transform`.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import inverse_fourier_transform, exp, sqrt, pi
    >>> from sympy.abc import x, k
    >>> inverse_fourier_transform(sqrt(pi)*exp(-(pi*k)**2), k, x)
    exp(-x**2)
    >>> inverse_fourier_transform(sqrt(pi)*exp(-(pi*k)**2), k, x, noconds=False)
    (exp(-x**2), True)

    See Also
    ========

    fourier_transform
    sine_transform, inverse_sine_transform
    cosine_transform, inverse_cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   RQ  RE   (   R†   RÝ   R)   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   inverse_fourier_transform‹  s    !(   Rœ   R   t   sqrtRŒ   c   
      C  s»   t  | |  | | | | ƒ | d t f ƒ } | j t ƒ sS t | | ƒ t j f S| j sq t | |  d ƒ ‚ n  | j	 d \ } }	 | j t ƒ r¨ t | |  d ƒ ‚ n  t | | ƒ |	 f S(   s  
    Compute a general sine or cosine-type transform
        F(k) = a int_0^oo b*sin(x*k) f(x) dx.
        F(k) = a int_0^oo b*cos(x*k) f(x) dx.

    For suitable choice of a and b, this reduces to the standard sine/cosine
    and inverse sine/cosine transforms.
    i    s   could not compute integrals   integral in unexpected form(
   R   R
   R;   R   R\   R   Rn   R‚   R   R"   (
   R(   R)   RÝ   Ru   Rv   t   KR1   R   R†   R4   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _sine_cosine_transform¶  s    
.	t   SineCosineTypeTransformc           B  s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sK   
    Base class for sine and cosine transforms.
    Specify cls._kern.
    c         C  s   t  d |  j ƒ ‚ d  S(   Ns,   Class %s must implement a(self) but does not(   R'   R0   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   Õ  s    c         C  s   t  d |  j ƒ ‚ d  S(   Ns,   Class %s must implement b(self) but does not(   R'   R0   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   Ù  s    c      	   K  s7   t  | | | |  j ƒ  |  j ƒ  |  j j |  j j |  S(   N(   RU  Ru   Rv   R0   t   _kernRJ   (   R   R(   R)   RÝ   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   Þ  s    	c         C  sP   |  j  ƒ  } |  j ƒ  } |  j j } t | | | | | | ƒ | d t f ƒ S(   Ni    (   Ru   Rv   R0   RW  R   R
   (   R   R(   R)   RÝ   Ru   Rv   RT  (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   ä  s    (   R   R   R    Ru   Rv   R,   R-   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRV  Ï  s
   			t   SineTransformc           B  s,   e  Z d  Z d Z e Z d „  Z d „  Z RS(   sÜ   
    Class representing unevaluated sine transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute sine transforms, see the :func:`sine_transform`
    docstring.
    t   Sinec         C  s   t  d ƒ t  t ƒ S(   Ni   (   RS  RŒ   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   ø  s    c         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   û  s    (   R   R   R    RJ   Rœ   RW  Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRX  ë  s
   	c         K  s   t  |  | | ƒ j |   S(   sõ  
    Compute the unitary, ordinary-frequency sine transform of `f`, defined
    as

    .. math:: F(k) = \sqrt{\frac{2}{\pi}} \int_{0}^\infty f(x) \sin(2\pi x k) \mathrm{d} x.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`SineTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import sine_transform, exp
    >>> from sympy.abc import x, k, a
    >>> sine_transform(x*exp(-a*x**2), x, k)
    sqrt(2)*k*exp(-k**2/(4*a))/(4*a**(3/2))
    >>> sine_transform(x**(-a), x, k)
    2**(1/2 - a)*k**(a - 1)*gamma(1 - a/2)/gamma(a/2 + 1/2)

    See Also
    ========

    fourier_transform, inverse_fourier_transform
    inverse_sine_transform
    cosine_transform, inverse_cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   RX  RE   (   R(   R)   RÝ   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   sine_transformÿ  s    t   InverseSineTransformc           B  s,   e  Z d  Z d Z e Z d „  Z d „  Z RS(   sô   
    Class representing unevaluated inverse sine transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse sine transforms, see the
    :func:`inverse_sine_transform` docstring.
    s   Inverse Sinec         C  s   t  d ƒ t  t ƒ S(   Ni   (   RS  RŒ   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   -  s    c         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   0  s    (   R   R   R    RJ   Rœ   RW  Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR[     s
   	c         K  s   t  |  | | ƒ j |   S(   s5  
    Compute the unitary, ordinary-frequency inverse sine transform of `F`,
    defined as

    .. math:: f(x) = \sqrt{\frac{2}{\pi}} \int_{0}^\infty F(k) \sin(2\pi x k) \mathrm{d} k.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`InverseSineTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import inverse_sine_transform, exp, sqrt, gamma, pi
    >>> from sympy.abc import x, k, a
    >>> inverse_sine_transform(2**((1-2*a)/2)*k**(a - 1)*
    ...     gamma(-a/2 + 1)/gamma((a+1)/2), k, x)
    x**(-a)
    >>> inverse_sine_transform(sqrt(2)*k*exp(-k**2/(4*a))/(4*sqrt(a)**3), k, x)
    x*exp(-a*x**2)

    See Also
    ========

    fourier_transform, inverse_fourier_transform
    sine_transform
    cosine_transform, inverse_cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   R[  RE   (   R†   RÝ   R)   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   inverse_sine_transform4  s    t   CosineTransformc           B  s,   e  Z d  Z d Z e Z d „  Z d „  Z RS(   sâ   
    Class representing unevaluated cosine transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute cosine transforms, see the :func:`cosine_transform`
    docstring.
    t   Cosinec         C  s   t  d ƒ t  t ƒ S(   Ni   (   RS  RŒ   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   c  s    c         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   f  s    (   R   R   R    RJ   R   RW  Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR]  V  s
   	c         K  s   t  |  | | ƒ j |   S(   sþ  
    Compute the unitary, ordinary-frequency cosine transform of `f`, defined
    as

    .. math:: F(k) = \sqrt{\frac{2}{\pi}} \int_{0}^\infty f(x) \cos(2\pi x k) \mathrm{d} x.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`CosineTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import cosine_transform, exp, sqrt, cos
    >>> from sympy.abc import x, k, a
    >>> cosine_transform(exp(-a*x), x, k)
    sqrt(2)*a/(sqrt(pi)*(a**2 + k**2))
    >>> cosine_transform(exp(-a*sqrt(x))*cos(a*sqrt(x)), x, k)
    a*exp(-a**2/(2*k))/(2*k**(3/2))

    See Also
    ========

    fourier_transform, inverse_fourier_transform,
    sine_transform, inverse_sine_transform
    inverse_cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   R]  RE   (   R(   R)   RÝ   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   cosine_transformj  s    t   InverseCosineTransformc           B  s,   e  Z d  Z d Z e Z d „  Z d „  Z RS(   sú   
    Class representing unevaluated inverse cosine transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse cosine transforms, see the
    :func:`inverse_cosine_transform` docstring.
    s   Inverse Cosinec         C  s   t  d ƒ t  t ƒ S(   Ni   (   RS  RŒ   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRu   ˜  s    c         C  s   d S(   Ni   (    (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRv   ›  s    (   R   R   R    RJ   R   RW  Ru   Rv   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR`  ‹  s
   	c         K  s   t  |  | | ƒ j |   S(   sñ  
    Compute the unitary, ordinary-frequency inverse cosine transform of `F`,
    defined as

    .. math:: f(x) = \sqrt{\frac{2}{\pi}} \int_{0}^\infty F(k) \cos(2\pi x k) \mathrm{d} k.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`InverseCosineTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import inverse_cosine_transform, exp, sqrt, pi
    >>> from sympy.abc import x, k, a
    >>> inverse_cosine_transform(sqrt(2)*a/(sqrt(pi)*(a**2 + k**2)), k, x)
    exp(-a*x)
    >>> inverse_cosine_transform(1/sqrt(k), k, x)
    1/sqrt(x)

    See Also
    ========

    fourier_transform, inverse_fourier_transform,
    sine_transform, inverse_sine_transform
    cosine_transform
    hankel_transform, inverse_hankel_transform
    mellin_transform, laplace_transform
    (   R`  RE   (   R†   RÝ   R)   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   inverse_cosine_transformŸ  s    c   	      C  sÊ   d d l  m } t |  | | | | ƒ | | d t f ƒ } | j t ƒ sb t | | ƒ t j f S| j	 s€ t
 | |  d ƒ ‚ n  | j d \ } } | j t ƒ r· t
 | |  d ƒ ‚ n  t | | ƒ | f S(   sv   
    Compute a general Hankel transform

    .. math:: F_\nu(k) = \int_{0}^\infty f(r) J_\nu(k r) r \mathrm{d} r.
    iÿÿÿÿ(   t   besselji    s   could not compute integrals   integral in unexpected form(   R>   Rb  R   R
   R;   R   R\   R   Rn   R‚   R   R"   (	   R(   R’   RÝ   Ré   R1   R   Rb  R†   R4   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   _hankel_transformÄ  s    -	t   HankelTypeTransformc           B  s8   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s+   
    Base class for Hankel transforms.
    c         K  s)   |  j  |  j |  j |  j |  j d |  S(   Ni   (   R,   R   R#   R$   R"   (   R   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRE   à  s
    
c         K  s   t  | | | | |  j |  S(   N(   Rc  RJ   (   R   R(   R’   RÝ   Ré   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR,   ç  s    c         C  s;   d d l  m } t | | | | | ƒ | | d t f ƒ S(   Niÿÿÿÿ(   Rb  i    (   R>   Rb  R   R
   (   R   R(   R’   RÝ   Ré   Rb  (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyR-   ê  s    c         C  s&   |  j  |  j |  j |  j |  j d ƒ S(   Ni   (   R-   R   R#   R$   R"   (   R   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRR   î  s    (   R   R   R    RE   R,   R-   RU   RR   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRd  Û  s
   			t   HankelTransformc           B  s   e  Z d  Z d Z RS(   sâ   
    Class representing unevaluated Hankel transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute Hankel transforms, see the :func:`hankel_transform`
    docstring.
    t   Hankel(   R   R   R    RJ   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRe  ö  s   c         K  s   t  |  | | | ƒ j |   S(   s±  
    Compute the Hankel transform of `f`, defined as

    .. math:: F_\nu(k) = \int_{0}^\infty f(r) J_\nu(k r) r \mathrm{d} r.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`HankelTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import hankel_transform, inverse_hankel_transform
    >>> from sympy import gamma, exp, sinh, cosh
    >>> from sympy.abc import r, k, m, nu, a

    >>> ht = hankel_transform(1/r**m, r, k, nu)
    >>> ht
    2*2**(-m)*k**(m - 2)*gamma(-m/2 + nu/2 + 1)/gamma(m/2 + nu/2)

    >>> inverse_hankel_transform(ht, k, r, nu)
    r**(-m)

    >>> ht = hankel_transform(exp(-a*r), r, k, 0)
    >>> ht
    a/(k**3*(a**2/k**2 + 1)**(3/2))

    >>> inverse_hankel_transform(ht, k, r, 0)
    exp(-a*r)

    See Also
    ========

    fourier_transform, inverse_fourier_transform
    sine_transform, inverse_sine_transform
    cosine_transform, inverse_cosine_transform
    inverse_hankel_transform
    mellin_transform, laplace_transform
    (   Re  RE   (   R(   R’   RÝ   Ré   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   hankel_transform  s    (t   InverseHankelTransformc           B  s   e  Z d  Z d Z RS(   sú   
    Class representing unevaluated inverse Hankel transforms.

    For usage of this class, see the :class:`IntegralTransform` docstring.

    For how to compute inverse Hankel transforms, see the
    :func:`inverse_hankel_transform` docstring.
    s   Inverse Hankel(   R   R   R    RJ   (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyRh  .  s   c         K  s   t  |  | | | ƒ j |   S(   s¾  
    Compute the inverse Hankel transform of `F` defined as

    .. math:: f(r) = \int_{0}^\infty F_\nu(k) J_\nu(k r) k \mathrm{d} k.

    If the transform cannot be computed in closed form, this
    function returns an unevaluated :class:`InverseHankelTransform` object.

    For a description of possible hints, refer to the docstring of
    :func:`sympy.integrals.transforms.IntegralTransform.doit`.
    Note that for this transform, by default ``noconds=True``.

    >>> from sympy import hankel_transform, inverse_hankel_transform, gamma
    >>> from sympy import gamma, exp, sinh, cosh
    >>> from sympy.abc import r, k, m, nu, a

    >>> ht = hankel_transform(1/r**m, r, k, nu)
    >>> ht
    2*2**(-m)*k**(m - 2)*gamma(-m/2 + nu/2 + 1)/gamma(m/2 + nu/2)

    >>> inverse_hankel_transform(ht, k, r, nu)
    r**(-m)

    >>> ht = hankel_transform(exp(-a*r), r, k, 0)
    >>> ht
    a/(k**3*(a**2/k**2 + 1)**(3/2))

    >>> inverse_hankel_transform(ht, k, r, 0)
    exp(-a*r)

    See Also
    ========

    fourier_transform, inverse_fourier_transform
    sine_transform, inverse_sine_transform
    cosine_transform, inverse_cosine_transform
    hankel_transform
    mellin_transform, laplace_transform
    (   Rh  RE   (   R†   RÝ   R’   Ré   R+   (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   inverse_hankel_transform;  s    (N(^   R    t
   __future__R    R   t
   sympy.coreR   t   sympy.core.compatibilityR   R   R   R?   R   R  R   R   R	   t   sympy.core.numbersR
   t   sympy.core.symbolR   t   sympy.integralsR   R   RC  R   t   sympy.logic.boolalgR   R   R   R   R   t   sympy.simplifyR   t   sympy.utilitiesR   t   sympy.matrices.matricesR   R'   R   R!   t   sympy.solvers.inequalitiesRV   R\   Rc   R/   t   _nocondsRd   RZ   R‡   Rˆ   R‹   R“   t
   ValueErrorR”   RÞ   Ræ   R2   Rÿ   Rò   R  R  R/  R0  R4  RE  RF  RH  RL  RM  RN  RP  RQ  RR  R>   Rœ   R   RS  RŒ   RU  RV  RX  RZ  R[  R\  R]  R_  R`  Ra  Rc  Rd  Re  Rg  Rh  Ri  (    (    (    s9   lib/python2.7/site-packages/sympy/integrals/transforms.pyt   <module>   sˆ   („			D"	'	+	ÿ )	85	7	Wi"	$	F#/		$	("		!	"	!	%		+