Ë
    7^(h&Ê  ã                   óÞ  — d Z ddlmZ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mZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZAmBZB ddlCmDZD ddlEmFZFmGZGmHZHmIZImJZJ ddlKmLZL ddlMmNZNmOZO ddlPmQZQ ddlRmSZS ddlTmUZU  G d „ d!eV«      ZW G d"„ d#e«      ZXd$„ ZYd%„ ZZ eZd&«      Z[d'„ Z\e[e\d(fd)„«       Z] G d*„ d+eX«      Z^d,„ Z_d-„ Z` G d.„ d/ea«      Zbd0„ Zc eZd(«      dWd1„«       Zdd2ae G d3„ d4eX«      Zfd5„ Zg eZd(«      dXd6„«       Zh G d7„ d8eX«      Zi G d9„ d:ei«      Zjd;„ Zk G d<„ d=ei«      Zld>„ Zm eZd(«      dXd?„«       Zn G d@„ dAeX«      Zo G dB„ dCeo«      ZpdD„ Zq G dE„ dFeo«      ZrdG„ Zs G dH„ dIeo«      ZtdJ„ Zu G dK„ dLeo«      ZvdM„ Zw eZd(«      dXdN„«       Zx G dO„ dPeX«      Zy G dQ„ dRey«      ZzdS„ Z{ G dT„ dUey«      Z|dV„ Z}dd2l~mc m€Z� e��j                  Z‚e��j                  Zƒe��j                  Z„e��j
                  Z…e��j                  Z†e��j                  Z‡y2)Yz Integral Transforms é    )ÚreduceÚwraps)Úrepeat)ÚSÚpi)ÚAdd)ÚAppliedUndefÚ	count_opsÚexpandÚ
expand_mulÚFunction)ÚMul)ÚigcdÚilcm)Údefault_sort_key)ÚDummy)Úpostorder_traversal)Ú	factorialÚrf)ÚreÚargÚAbs)ÚexpÚ	exp_polar)ÚcoshÚcothÚsinhÚtanh)Úceiling)ÚMaxÚMinÚsqrt)Úpiecewise_fold)ÚcosÚcotÚsinÚtan)Úbesselj)Ú	Heaviside)Úgamma)Úmeijerg)Ú	integrateÚIntegral)Ú_dummy)Úto_cnfÚ	conjunctsÚ	disjunctsÚOrÚAnd)Úroots)ÚfactorÚPoly)ÚCRootOf)Úiterable)Údebugc                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚIntegralTransformErroraš  
    Exception raised in relation to problems computing transforms.

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

    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                 ó>   •— t         ‰| �  |›d|›d�«       || _        y )Nz" Transform could not be computed: ú.)ÚsuperÚ__init__Úfunction)ÚselfÚ	transformr@   ÚmsgÚ	__class__s       €úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/integrals/transforms.pyr?   zIntegralTransformError.__init__6   s    ø€ Ü‰ÑÚ9BÂCÐHô	Jà ˆ�ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   Ú__classcell__)rD   s   @rE   r;   r;   (   s   ø„ ñ÷!ð !rF   r;   c                   ó„   — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zed„ «       Zd„ Zy)ÚIntegralTransforma}  
    Base class for integral transforms.

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

    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 :obj:`IntegralTransformError`.

    Also set ``cls._name``. For instance,

    >>> from sympy import LaplaceTransform
    >>> LaplaceTransform._name
    'Laplace'

    Implement ``self._collapse_extra`` if your function returns more than just a
    number and possibly a convergence condition.
    c                 ó    — | j                   d   S )z! The function to be transformed. r   ©Úargs©rA   s    rE   r@   zIntegralTransform.functionS   ó   € ð �y‰y˜‰|ÐrF   c                 ó    — | j                   d   S )z; The dependent variable of the function to be transformed. é   rO   rQ   s    rE   Úfunction_variablez#IntegralTransform.function_variableX   rR   rF   c                 ó    — | j                   d   S )z% The independent transform variable. é   rO   rQ   s    rE   Útransform_variablez$IntegralTransform.transform_variable]   rR   rF   c                 ó~   — | j                   j                  j                  | j                  h«      | j                  hz
  S )zj
        This method returns the symbols that will exist when the transform
        is evaluated.
        )r@   Úfree_symbolsÚunionrX   rU   rQ   s    rE   rZ   zIntegralTransform.free_symbolsb   s;   € ð �}‰}×)Ñ)×/Ñ/°×1HÑ1HÐ0IÓJØ×%Ñ%Ð&ñ'ð 	'rF   c                 ó   — t         ‚©N©ÚNotImplementedError©rA   ÚfÚxÚsÚhintss        rE   Ú_compute_transformz$IntegralTransform._compute_transformk   ó   € Ü!Ð!rF   c                 ó   — t         ‚r]   r^   ©rA   ra   rb   rc   s       rE   Ú_as_integralzIntegralTransform._as_integraln   rf   rF   c                 ób   — t        |Ž }|dk(  r!t        | j                  j                  d d«      ‚|S )NFÚ )r3   r;   rD   Úname)rA   ÚextraÚconds      rE   Ú_collapse_extraz!IntegralTransform._collapse_extraq   s0   € Ü�Eˆ{ˆØ�5Š=Ü(¨¯©×)<Ñ)<¸dÀBÓGÐGØˆrF   c                 ó^  ‡ — d }t        ˆ fd„‰ j                  j                  t        «      D «       «       }|r4	  ‰ j                  ‰ j                  ‰ j
                  ‰ j                  fi |¤Ž}‰ j                  }|j                  st        |«      }||fS # t        $ r t        d«       d }Y Œ?w xY w)Nc              3   óT   •K  — | ]  }|j                  ‰j                  «      –— Œ! y ­wr]   )ÚhasrU   )Ú.0ÚfuncrA   s     €rE   ú	<genexpr>z2IntegralTransform._try_directly.<locals>.<genexpr>y   s*   øè ø€ ò NØ#'ð  $Ÿx™x¨×(>Ñ(>×?ñ Nùs   ƒ%(z6[IT _try ] Caught IntegralTransformError, returns None)Úanyr@   Úatomsr	   re   rU   rX   r;   r9   Úis_Addr   )rA   rd   ÚTÚtry_directlyÚfns   `    rE   Ú_try_directlyzIntegralTransform._try_directlyw   sµ   ø€ ØˆÜó NØ+/¯=©=×+>Ñ+>¼|Ó+LôNó Nð NˆáðØ+�D×+Ñ+¨D¯M©MØ×*Ñ*¨D×,CÑ,CñNØGLñN�ð �]‰]ˆØ�yŠyÜ˜B“ˆBØ�1ˆuˆøô *ò ÜÐNÔOØ’ðús   ¹3B ÂB,Â+B,c                 óö  — |j                  dd«      }|j                  dd«      }||d<    | j                  d	i |¤Ž\  }}|�|S |j                  �r||d<   |j                  D �cg c];  }  | j                  |gt        | j                  dd «      z   Ž j                  d	i |¤Ž‘Œ= }}g }g }	|D ]d  }t        |t        «      s|g}|	j                  |d   «       t        |«      dk(  r|j                  |d   «       ŒMt        |«      dkD  sŒ\||dd gz  }Œf |dk(  rt        |	Ž j                  «       }nt        |	Ž }|s|S 	 | j                  |«      }t        |«      r|ft        |«      z   S ||fS |r+t        | j                  j                   | j"                  d«      ‚|j%                  | j&                  «      \  }
}|
 | j                  t)        |Ž gt        | j                  dd «      z   Ž z  S c c}w # t        $ r Y Œ�w xY w)
aÍ  
        Try to evaluate the transform in closed form.

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

        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, do not 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)``.
        ÚneedevalFÚsimplifyTNrT   r   rW   © )Úpopr|   rx   rP   rD   ÚlistÚdoitÚ
isinstanceÚtupleÚappendÚlenr   r   ro   r8   r;   Ú_namer@   Úas_coeff_mulrU   r   )rA   rd   r~   r   r{   ry   rb   Úresrm   ÚressÚcoeffÚrests               rE   rƒ   zIntegralTransform.doitˆ   s  € ð* —9‘9˜Z¨Ó/ˆØ—9‘9˜Z¨Ó.ˆØ$ˆˆjÑà"�×"Ñ"Ñ+ UÑ+‰ˆˆAàˆ=ØˆHà�9‹9Ø (ˆE�*ÑàŸG™Gö%Øð E�>�4—>‘> Q C¬$¨t¯y©y¸¸¨}Ó*=Ñ$=Ð?×DÑDÑMÀuÓMð %ˆCð %àˆEØˆDØò 	%�Ü! !¤UÔ+Ø˜�AØ—‘˜A˜a™DÔ!Ü�q“6˜Q’;à—L‘L  1¡Õ&Ü˜“V˜a“Zà˜a  ˜e˜WÑ$‘Eð	%ð ˜Š~Ü˜4�j×)Ñ)Ó+‘ä˜4�j�ÙØ�
ðØ×,Ñ,¨UÓ3�Ü˜E”?Ø˜6¤E¨%£LÑ0Ð0à ˜<Ð'ñ Ü(Ø—‘×$Ñ$ d§m¡m°ZóAð Að —o‘o d×&<Ñ&<Ó=‰ˆˆtØ�^�T—^‘^¤s¨D z l´T¸$¿)¹)ÀAÀB¸-Ó5HÑ&HÐJÑJÐJùòK%øô4 *ò Ùðús   Á#A G'Ä;*G, Å&G, Ç,	G8Ç7G8c                 ód   — | j                  | j                  | j                  | j                  «      S r]   )ri   r@   rU   rX   rQ   s    rE   Úas_integralzIntegralTransform.as_integralÏ   s,   € à× Ñ  §¡°×0FÑ0FØ!%×!8Ñ!8ó:ð 	:rF   c                 ó   — | j                   S r]   )r�   )rA   rP   Úkwargss      rE   Ú_eval_rewrite_as_Integralz+IntegralTransform._eval_rewrite_as_IntegralÔ   s   € Ø×ÑÐrF   N)rG   rH   rI   rJ   Úpropertyr@   rU   rX   rZ   re   ri   ro   r|   rƒ   r�   r’   r€   rF   rE   rM   rM   <   sŒ   „ ñð, ñó ðð ñó ðð ñó ðð ñ'ó ð'ò"ò"òòò"EKðN ñ:ó ð:ó rF   rM   c                 óT   — |r%ddl m} ddlm}  | |t	        | «      d¬«      «      S | S )Nr   )r   )Ú	powdenestT)Úpolar)Úsympy.simplifyr   Úsympy.simplify.powsimpr•   r#   )Úexprrƒ   r   r•   s       rE   Ú	_simplifyrš   Ø   s'   € ÙÝ+Ý4Ù™	¤.°Ó"6¸dÔCÓDÐDØ€KrF   c                 ó   ‡ — ˆ fd„}|S )aV  
    This is a decorator generator for dropping convergence conditions.

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

    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                 ó6   •‡ — t        ‰ «      ‰dœˆ fd„
«       }|S )N©Únocondsc                 ó&   •—  ‰|i |¤Ž}| r|d   S |S ©Nr   r€   )rž   rP   r‘   rŠ   rt   s       €rE   Úwrapperz0_noconds_.<locals>.make_wrapper.<locals>.wrapperó   s#   ø€ á˜Ð' Ñ'ˆCÙØ˜1‘v�ØˆJrF   )r   )rt   r¡   Údefaults   ` €rE   Úmake_wrapperz_noconds_.<locals>.make_wrapperò   s#   ù€ Ü	ˆt‹Ø#*õ 	ó 
ð	ð
 ˆrF   r€   )r¢   r£   s   ` rE   Ú	_noconds_r¤   à   s   ø€ ô$ð ÐrF   Fc                 óX   — t        | |t        j                  t        j                  f«      S r]   )r,   r   ÚZeroÚInfinity)ra   rb   s     rE   Ú_default_integratorr¨     s   € Ü�Q˜œAŸF™F¤A§J¡JÐ/Ó0Ð0rF   Tc                 ó¾  ‡— t        dd| «      Š ||‰dz
  z  | z  |«      }|j                  t        «      sKt        |j	                  ‰|«      |«      t
        j                  t
        j                  ft
        j                  fS |j                  st        d| d«      ‚|j                  d   \  }}|j                  t        «      rt        d| d«      ‚ˆfd„}t        |«      D �cg c]
  } ||«      ‘Œ }	}|	D �cg c]  }|d	   d
k7  sŒ|‘Œ }	}|	j                  d„ ¬«       |	st        d| d«      ‚|	d   \  }
}}t        |j	                  ‰|«      |«      |
|f|fS c c}w c c}w )z0 Backend function to compute Mellin transforms. rc   zmellin-transformrT   ÚMellinúcould not compute integralr   úintegral in unexpected formc                 óœ  •— ddl m} t        j                  }t        j                  }t        j
                  }t        t        | «      «      }t        dd¬«      }|D �]j  }t        j                  }t        j                  }	g }
t        |«      D ]Û  }|j                  t        d„ «      j                  t        ‰«      |«      }|j                  r0|j                  dv s"|j                  ‰«      s|j                  |«      s|
|gz  }
Œv |||«      }|j                  r|j                  dv r|
|gz  }
Œ |j                   |k(  rt#        |j$                  |	«      }	ŒÆt'        |j                   |«      }ŒÝ |t        j                  ur||k7  rt#        ||«      }�Œ4|	t        j                  ur|	|k7  rt'        |	|«      }�ŒYt)        |t+        |
Ž «      }�Œm |||fS )zN
        Turn ``cond`` into a strip (a, b), and auxiliary conditions.
        r   )Ú_solve_inequalityÚtT)Úrealc                 ó(   — | j                  «       d   S r    )Úas_real_imag©rb   s    rE   ú<lambda>z:_mellin_transform.<locals>.process_conds.<locals>.<lambda>)  s   €  !§.¡.Ó"2°1Ñ"5€ rF   )z==z!=)Úsympy.solvers.inequalitiesr®   r   ÚNegativeInfinityr§   Útruer0   r/   r   r1   Úreplacer   ÚsubsÚis_RelationalÚrel_oprr   Últsr    Úgtsr!   r3   r2   )rn   r®   ÚaÚbÚauxÚcondsr¯   ÚcÚa_Úb_Úaux_ÚdÚd_Úsolnrc   s                 €rE   Úprocess_condsz(_mellin_transform.<locals>.process_conds  s�  ø€ õ 	AÜ×ÑˆÜ�J‰JˆÜ�f‰fˆÜœ& ›,Ó'ˆÜ�#˜DÔ!ˆØó 	*ˆAÜ—‘ˆBÜ×#Ñ#ˆBØˆDÜ˜q“\ò +�Ø—Y‘YÜÑ5ó7ß7;±t¼B¸q»EÀ1³~ð à—’Ø—H‘H Ñ,ØŸ6™6 !œ9¨B¯F©F°1¬IØ˜Q˜C‘K�DØÙ(¨¨QÓ/�Ø×)Ò)ØŸ™ |Ñ3Ø˜Q˜C‘K�DØØ—8‘8˜q’=Ü˜TŸX™X rÓ*‘Bä˜TŸX™X rÓ*‘Bð!+ð" œŸ™Ñ#¨¨aªÜ˜˜A“J’Øœ1×-Ñ-Ñ-°"¸²'Ü˜˜A“J’ä˜#œr 4˜yÓ)’ð5	*ð6 �!�SˆyÐrF   rW   Fc                 ó4   — | d   | d   z
  t        | d   «      fS )Nr   rT   rW   )r
   r³   s    rE   r´   z#_mellin_transform.<locals>.<lambda>B  s   € ˜a ™d Q q¡T™k¬9°Q°q±T«?Ð;€ rF   ©Úkeyzno convergence found)r.   rr   r-   rš   r¹   r   r¶   r§   r·   Úis_Piecewiser;   rP   r1   Úsort)ra   rb   Ús_Ú
integratorr   ÚFrn   rÉ   rÂ   rÁ   r¾   r¿   rÀ   rc   s                @rE   Ú_mellin_transformrÒ     sO  ø€ ô
 	ˆsÐ&¨Ó*€AÙ�1�q˜1‘u‘: ‘> 1Ó%€Aà�5‰5”Œ?Ü˜Ÿ™  2›¨Ó1´A×4FÑ4FÌÏ
É
Ð3SÔUV×U[ÑU[Ð[Ð[à�>Š>Ü$ X¨qÐ2NÓOÐOà�f‰f�Q‰i�G€A€tØ‡u�uŒX„Ü$Ø�aÐ6ó8ð 	8ô%ôN (1°£Ö7 !‰]˜1ÕÐ7€EÐ7ØÖ/�1  1¡¨£ŠQÐ/€EÐ/Ø	‡J�JÑ;€JÔ<áÜ$ X¨qÐ2HÓIÐIà�a‘�I€A€qˆ#Ü�Q—V‘V˜A˜r“] HÓ-°°1¨v°sÐ:Ð:ùò 8ùÚ/s   Ã EÃ5EÄEc                   ó&   — e Zd ZdZdZd„ Zd„ Zd„ Zy)ÚMellinTransformzâ
    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.
    rª   c                 ó   — t        |||fi |¤ŽS r]   )rÒ   r`   s        rE   re   z"MellinTransform._compute_transformW  s   € Ü   A qÑ2¨EÑ2Ð2rF   c                 ój   — t        |||dz
  z  z  |t        j                  t        j                  f«      S ©NrT   )r-   r   r¦   r§   rh   s       rE   ri   zMellinTransform._as_integralZ  s*   € Ü˜˜!˜a !™e™*™ q¬!¯&©&´!·*±*Ð&=Ó>Ð>rF   c                 óÒ   — g }g }g }|D ]  \  \  }}}||gz  }||gz  }||gz  }Œ t        |Ž t        |Ž ft        |Ž f}|d   d   |d   d   k\  dk(  s|d   dk(  rt        dd d«      ‚|S )Nr   rT   TFrª   zno combined convergence.)r    r!   r3   r;   )	rA   rm   r¾   r¿   rn   ÚsaÚsbrÂ   rŠ   s	            rE   ro   zMellinTransform._collapse_extra]  s§   € ØˆØˆØˆØ ò 	‰K‰HˆR��aØ�"�‰IˆAØ�"�‰IˆAØ�Q�C‰K‰Dð	ô �Aˆwœ˜Q˜Ð ¤# t *Ð,ˆØ�‰F�1‰I˜˜Q™ ™Ñ" tÒ+¨s°1©v¸ªÜ(Ø˜$Ð :ó<ð <àˆ
rF   N)rG   rH   rI   rJ   rˆ   re   ri   ro   r€   rF   rE   rÔ   rÔ   K  s   „ ñð €Eò3ò?órF   rÔ   c                 ó<   —  t        | ||«      j                  di |¤ŽS )a  
    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`.

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

    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)``).

    Examples
    ========

    >>> from sympy import mellin_transform, 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€   )rÔ   rƒ   )ra   rb   rc   rd   s       rE   Úmellin_transformrÜ   l  s$   € ðR )Œ?˜1˜a Ó#×(Ñ(Ñ1¨5Ñ1Ð1rF   c                 ó  — | \  }}t        |t        z  «      }t        |t        z  «      }t        | |z  |j                  «       d   z
  «      }t	        ||z  |z   |z   «      t	        d|z
  |z
  ||z  z
  «      d|z  t        z  fS )aˆ  
    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)``.

    Examples
    ========

    >>> 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)
    r   rT   éÿÿÿÿ)r   r   r   r²   r*   )Úm_nrc   r¾   r¿   ÚmÚnÚrs          rE   Ú_rewrite_sinrã   ˜  s†   € ðJ �D€A€qä�1”R‘4Ó€AÜ�1”R‘4Ó€AÜ���1‘�q—~‘~Ó'¨Ñ*Ñ*Ó+€AÜ��1‘�q‘˜1‘Óœu Q¨¡U¨Q¡Y°°1±¡_Ó5¸¸Q±w¼r±zÐAÐArF   c                   ó   — e Zd ZdZy)ÚMellinTransformStripErrorzF
    Exception raised by _rewrite_gamma. Mainly for internal use.
    N)rG   rH   rI   rJ   r€   rF   rE   rå   rå   Å  s   „ ñð 	rF   rå   c           
      ó®  ‡ ‡‡/‡0‡1‡2— t        ||g«      \  Š/Š0ˆ/ˆ0fd„}g }‰ j                  t        «      D ]_  }|j                  ‰«      sŒ|j                  d   }|j
                  r |j                  ‰«      d   } |j                  ‰«      \  }}	||gz  }Œa ‰ j                  t        t        t        t        «      D ]f  }|j                  ‰«      sŒ|j                  d   }|j
                  r |j                  ‰«      d   } |j                  ‰«      \  }}	||t        z  gz  }Œh |D �
cg c]  }
|
j                  rt        |
«      n|
‘Œ }}
t         j                  }|D ]  }
|
j                   rŒ|
} n |D �
cg c]  }
|
|z  ‘Œ	 }}
t#        d„ |D «       «      r|j                  st%        ddd«      ‚|t'        t(        |D �
cg c]  }
t        |
j*                  «      ‘Œ c}
t         j                  «      z  }||k(  rEt-        |«      dk(  r|}n4|t'        t.        |D �
cg c]  }
t        |
j0                  «      ‘Œ c}
«      z  }‰ j3                  ‰‰|z  «      Š t         j                  |z  }t         j                  |z  }‰/�‰/|z  Š/‰0�‰0|z  Š0‰ j5                  «       \  }}t7        j8                  |«      }t7        j8                  |«      }t;        t=        |t?        d«      «      «      t;        t=        |t?        d	«      «      «      z   }g }g }g }g }g }ˆ fd
„Š1|�rü|jA                  «       \  Š2}|r||}}|}n||}}|}ˆ1ˆ2ˆfd„}‰2j                  ‰«      s|‰2gz  }�n¶‰2jB                  stE        ‰2tF        «      r¦‰2jB                  r‰2jH                  }‰2jF                  }ntK        d«      }‰2jF                  }|jL                  r|}|dk  r| }|||fgt        |«      z  z  }ŒÈ|j                  ‰«      s& ||«      \  }}|sd|z  }|||z  gz  }|||z  gz  }�nü ‰1‰2«      ‚‰2jO                  ‰«      �r!tQ        ‰2‰«      }|jS                  «       dk7  rp|jU                  «       d   }tW        |‰«      } t-        | «      |jS                  «       k7  rtY        jZ                  |«      } ||gz  }|| D �!cg c]	  }!‰|!z
  |f‘Œ c}!z  }�Œ¨|j]                  «       \  }}!||gz  }|!| z  }! ||!|«      r3|t         j                  |! dz   fgz  }|t         j                  |! fgz  }�nø|dgz  }|t         j^                  |!dz   fgz  }|t         j^                  |!fgz  }�nÁtE        ‰2t        «      rY |‰2j                  d   «      \  }}|r5|dkD  r || |z  |«      d	k(  s|dk  r || |z  |«      dk(  rta        d«      ‚|||fgz  }�nXtE        ‰2t        «      rk‰2j                  d   }|r.t        |t        z  «      t        d|t        z  z
  «      t        }$}#}"ntc         ||«      ‰‰/‰0«      \  }"}#}$||"| f|#| fgz  }||$gz  }nÝtE        ‰2t        «      r<‰2j                  d   }|t        |d	¬«      |ft        t        dz  |z
  d	¬«      | fgz  }n‘tE        ‰2t        «      r-‰2j                  d   }|t        t        dz  |z
  d	¬«      |fgz  }nTtE        ‰2t        «      r<‰2j                  d   }|t        t        dz  |z
  d	¬«      |ft        |d	¬«      | fgz  }n ‰1‰2«      ‚|r�Œü|t7        |Ž t7        |Ž z  z  }g g g g f\  }%}&}'}(||%|'df||(|&d	ffD �]  \  })}*}+}|)sŒ|)jA                  «       \  }}!|dk7  rÇ|dk7  rÂt        t        |«      «      }||z  },|!|z  }-|jL                  ste        d«      ‚tg        |«      D ]  }.|)|,|-|.|z  z   fgz  })Œ |r6|dt        z  d|z
  dz  z  ||!t         jh                  z
  z  z  z  }|||z  gz  }n6|dt        z  d|z
  dz  z  ||!t         jh                  z
  z  z  z  }||| z  gz  }Œâ|dk(  r|*jk                  d|!z
  «       n|+jk                  |!«       |)r�Œ�Œ t7        |Ž }|%jm                  tn        ¬«       |&jm                  tn        ¬«       |'jm                  tn        ¬«       |(jm                  tn        ¬«       |%|&f|'|(f|||fS c c}
w c c}
w c c}
w c c}
w c c}!w )aØ  
    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.

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

    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.

    Examples
    ========

    >>> 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)
    c                 óü   •— t        t        | «      «      } ‰€‰t        j                  u ry‰€| ‰k  S ‰€| ‰k  S | ‰k\  dk(  ry| ‰k  dk(  ry|ry‰j                  s‰j                  s| j                  ryt        d«      ‚)zU
        Decide whether pole at c lies to the left of the fundamental strip.
        NTFzPole inside critical strip?)r   r   r   r§   rZ   rå   )rÂ   Úis_numerrÃ   rÄ   s     €€rE   Úleftz_rewrite_gamma.<locals>.left  s‰   ø€ ô
 ”2�a“5‹MˆØˆ:˜"¤§
¡
Ñ*ØØˆ:Ø�r‘6ˆMØˆ:Ø˜‘7ˆNØ�‰G˜ÒØØ�‰G˜ÒØÙØØ�?Š?˜bŸošo°·²Øô (Ð(EÓFÐFrF   r   rT   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr]   )Úis_Rational)rs   rb   s     rE   ru   z!_rewrite_gamma.<locals>.<genexpr>?  s   è ø€ Ò5 !�—•Ñ5ùs   ‚ÚGammaNzNonrational multiplierTFc                 ó$   •— t        d‰d| z  «      S )NúInverse MellinzUnrecognised form '%s'.)r;   )Úfactra   s    €rE   Ú	exceptionz!_rewrite_gamma.<locals>.exceptiona  s   ø€ Ü%Ð&6¸Ð;TÐW[Ñ;[Ó\Ð\rF   c                 ó¦   •—  | j                   ‰«      s ‰‰«      ‚t        | ‰«      }|j                  «       dk7  r ‰‰«      ‚|j                  «       S )z7 Test if arg is of form a*s+b, raise exception if not. rT   )Úis_polynomialr6   ÚdegreeÚ
all_coeffs)r   Úprð   rï   rc   s     €€€rE   Ú
linear_argz"_rewrite_gamma.<locals>.linear_argl  sK   ø€ à$�3×$Ñ$ QÔ'Ù “oÐ%Ü�S˜!“ˆAØ�x‰x‹z˜QŠÙ “oÐ%Ø—<‘<“>Ð!rF   rÞ   z Gammas partially over the strip.)ÚevaluaterW   za is not an integerrË   )8r   rw   r*   rr   rP   rx   Úas_independentr‰   r&   r$   r'   r%   r   Úis_extended_realr   ÚOnerë   Úallr;   r   r   Úqr‡   r   rõ   r¹   Úas_numer_denomr   Ú	make_argsr‚   Úzipr   r�   Úis_Powr„   r   Úbaser   Ú
is_Integerrò   r6   ró   ÚLTr4   r7   Ú	all_rootsrô   ÚNegativeOner_   rã   Ú	TypeErrorÚrangeÚHalfr†   rÎ   r   )3ra   rc   r¾   r¿   ré   Ús_multipliersÚgr   rŒ   Ú_rb   Úcommon_coefficientÚs_multiplierÚfacÚexponentÚnumerÚdenomrP   ÚfacsÚdfacsÚnumer_gammasÚdenom_gammasÚexponentialsrè   ÚugammasÚlgammasÚufacsrö   r  Úexp_rn   rõ   ÚrsrÂ   Úgamma1Úgamma2Úfac_ÚanÚapÚbmÚbqÚgammasÚplusÚminusÚnewaÚnewcÚkrÃ   rÄ   rð   rï   s3   ``                                             @@@@rE   Ú_rewrite_gammar)  Ì  s	  ý€ ô~ ��1ˆv‹Y�F€BˆõGð4 €MØ�W‰W”U‹^ò !ˆØ�u‰u�QŒxØØ�f‰f�Q‰iˆØ�:Š:Ø$�#×$Ñ$ QÓ'¨Ñ*ˆCØ#�3×#Ñ# AÓ&‰ˆˆqØ˜%˜Ñ ‰ð!ð �W‰W”Sœ#œs¤CÓ(ò $ˆØ�u‰u�QŒxØØ�f‰f�Q‰iˆØ�:Š:Ø$�#×$Ñ$ QÓ'¨Ñ*ˆCØ#�3×#Ñ# AÓ&‰ˆˆqØ˜%¤™(˜Ñ#‰ð$ð CPÖP¸Q˜q×1Ò1”S˜”V°qÑ8ÐP€MÐPÜŸ™ÐØò ˆØ�}‹}Ø!"ÐÙðð 4AÖA¨a�QÐ)Ó)ÐA€MÐAÜÑ5 }Ô5Ô5Ø×/Ò/Ü$ W¨dÐ4LÓMÐMØ%¤f¬TØ6Cö4EØ12ô 56°a·c±cµFò 4EÜFGÇeÁeó'Mñ M€LàÐ)Ò)Üˆ}Ó Ò"Ø-‰Là-Üœ¨}Ö=¨!œq §¡�vÒ=Ó>ñ?ˆLð 	
�‰ˆq�!�L‘.Ó!€AÜ
�%‰%�Ñ
€CÜ�u‰u�\Ñ!€HØ	€~Ø
ˆlÑˆØ	€~Ø
ˆlÑˆð ×#Ñ#Ó%�L€Eˆ5Ü�M‰M˜%Ó €EÜ�M‰M˜%Ó €EÜ”�Eœ6 $›<Ó(Ó)¬D´°U¼FÀ5»MÓ1JÓ,KÑK€Dà€DØ€Eà€LØ€Là€Lô]â
ØŸ™›‰ˆˆhÙØ+¨\�WˆGØ‰Eà+¨\�WˆGØˆEö	"ð �x‰x˜Œ{Ø�d�V‰OŠEà�[Š[œJ t¬SÔ1Ø�{Š{Ø—y‘y�Ø—x‘x‘ä  “|�Ø—x‘x�Ø�ŠØ�Ø˜!’8Ø#˜8�DØ˜$ ˜˜¤s¨4£yÑ0Ñ0�ØØ—X‘X˜a”[Ù! $Ó'‘��1ÙØ˜T™6�DØ  q¡ 	Ñ)�Ø˜˜q™˜	Ñ!’á “oÐ%à×Ñ Õ"Ü�T˜1“ˆAØ�x‰x‹z˜QŠð Ÿ™›˜q™	�Ü˜1˜a“[�Ü�r“7˜aŸh™h›jÒ(Ü ×*Ñ*¨1Ó-�BØ˜%˜Ñ �Ø°BÖ7¨q˜!˜a™% Ò*Ò7Ñ7�ÙØ—<‘<“>‰DˆAˆqØ�a�S‰LˆEØ�!�‰GˆAá�A�xÔ ØœQŸU™U Q B¨¡F˜OÐ,Ñ,�ØœQŸU™U Q B˜K˜=Ñ(’à˜"˜‘�ØœQŸ]™]¨A°©EÐ2Ð3Ñ3�ØœQŸ]™]¨AÐ.Ð/Ñ/’Ü˜œeÔ$Ù˜dŸi™i¨™lÓ+‰DˆAˆqÙØ˜’E™t Q B q¡D¨(Ó3°uÒ<Ø˜’E™t Q B q¡D¨(Ó3°tÒ;Ü-Ø:ó<ð <à˜˜A˜�xÑŠGÜ˜œcÔ"ð —	‘	˜!‘ˆAÙä',¨Q¬r©T£{´E¸!¸aÄ¹d¹(³OÄR ˜‘ä'3±J¸q³MÀ1ÀbÈ"Ó'MÑ$�˜ Ø�f (˜lÐ+¨f¸(°lÐ-CÐDÑDˆDØ�d�V‰O‰EÜ˜œcÔ"Ø—	‘	˜!‘ˆAØ”c˜! eÔ,¨hÐ7Üœ"˜Q™$ ™(¨UÔ3¸°\ÐBðDñ D‰Dä˜œcÔ"Ø—	‘	˜!‘ˆAØ”cœ"˜Q™$ ™(¨UÔ3°XÐ>Ð?Ñ?‰DÜ˜œcÔ"Ø—	‘	˜!‘ˆAØ”cœ"˜Q™$ ™(¨UÔ3°XÐ>Ü˜! eÔ,°(¨lÐ;ð=ñ =‰Dñ ˜D“/Ð!óM ðP Œ3�ˆ:”c˜5�kÑ!Ñ!€Cð ˜˜R �^�N€BˆˆB�Ø+7¸¸RÀÐ*FØ+7¸¸RÀÐ*Gð*Ió  Ñ%ˆ��e˜XâØ—:‘:“<‰DˆAˆqØ�BŠw˜1 š7äœ˜!›“I�Ø˜‘s�Ø˜‘s�Ø—|’|Ü#Ð$9Ó:Ð:Ü˜q›ò 3�AØ  d¨Q¨q©S¡jÐ1Ð2Ñ2‘Fð3áØ˜Aœb™D Q¨¡U¨A¡IÑ.°°Q¼¿¹±Z±Ñ@Ñ@�CØ  Q¨¡T FÑ*‘Là˜Aœb™D Q¨¡U¨A¡IÑ.°°Q¼¿¹±Z±Ñ@Ñ@�CØ  Q¨!¨¡W IÑ-�LØØ�BŠwØ—‘˜A ™EÕ"à—‘˜Q”õ+ ð ô: ˆ|Ð
€Cð ‡G�GÔ €GÔ!Ø‡G�GÔ €GÔ!Ø‡G�GÔ €GÔ!Ø‡G�GÔ €GÔ!à�ˆ8�b˜"�X˜s H¨cÐ1Ð1ùòy Qùò Bùò4Eùò >ùòb 8s   Ä' b>Å4cÆ<cÈcÒcc                 ó   — t        dd| d¬«      }| j                  t        «      } t        | «      t	        | «      t        | «      fD �]a  }|j                  r’|j                  D �cg c]  }t        |||||d¬«      ‘Œ }}|D �	cg c]  }	|	d   ‘Œ	 }
}	|D �	cg c]  }	|	d   ‘Œ	 }}	t        |Ž }|s t        ||j                  t        «      ¬	«      }|j                  ||«      t        |
Ž fc S 	 t        |||d   |d   «      \  }}}}}	 t!        |||||z  z  «      }|r|}nœ	 dd
lm}  ||«      }|j*                  r�t-        |j                  «      dk(  rit        |t/        |«      z
  «      |j                  d   j                  d   z  t        t/        |«      |z
  «      |j                  d   j                  d   z  z   }t/        t1        |j2                  «      «      |j4                  t6        z  k  g}|t        t9        t-        |j:                  «      t-        |j<                  «      k7  dt?        |j@                  «      dz   k\  «      t/        t1        |j2                  «      «      |j4                  t6        z  k(  «      gz  }t9        |Ž }|dk(  rt        d| d«      ‚||z  j                  ||«      |fc S  t        d| d«      ‚c c}w c c}	w c c}	w # t        $ r Y �Œ�w xY w# t"        $ r Y �Œ�w xY w# t(        $ r t        d| d«      ‚w xY w)zs A helper for the real inverse_mellin_transform function, this one here
        assumes x to be real and positive. r¯   zinverse-mellin-transformT)ÚpositiveFr�   rT   r   )Úgens)Úhyperexpandrî   zCould not calculate integralé   zdoes not convergerk   )!r.   Úrewriter*   r5   r   r   rx   rP   Ú_inverse_mellin_transformr   rw   r)   r¹   r3   r)  r;   r+   Ú
ValueErrorr—   r-  r_   rÍ   r‡   r   r   ÚargumentÚdeltar   r2   r   r"  r   Únu)rÑ   rc   Úx_ÚstripÚ
as_meijergrb   r
  ÚGr‹   rõ   rÁ   rŠ   r¾   r¿   ÚCÚer  Úhr-  rn   s                       rE   r0  r0  ÷  sï  € ô 	ˆsÐ.°¸DÔA€Að 	
�	‰	”%Ó€AÜ�Q‹iœ A›¬¨q«	Ð2ó /)ˆØ�8Š8ð ŸV™Vö%àô .¨a°°A°u¸jØ6;ö=ð %ˆDð %ð $(Ö(˜a�Q�q“TÐ(ˆEÐ(Ø"&Ö'˜Q�A�a“DÐ'ˆDÐ'Ü�t�*ˆCÙÜ˜S s§y¡y´Ó';Ô<�Ø—8‘8˜A˜r“?¤C¨ KÐ/Ò/ð	Ü,¨Q°°5¸±8¸UÀ1¹XÓF‰OˆAˆq�!�Q˜ð	Ü˜˜1˜a  1¡™fÓ%ˆAñ Ø‰AðIÝ6Ù “N�ð
 �~Š~¤# a§f¡f£+°Ò"2ä˜a¤# a£&™jÓ)¨!¯&©&°©)¯.©.¸Ñ*;Ñ;Ü¤ A£¨¡
Ó+¨A¯F©F°1©I¯N©N¸1Ñ,=Ñ=ñ>�ô
 ”C˜Ÿ
™
“OÓ$ q§w¡w¬r¡zÑ1Ð2ˆð 	””Rœ˜AŸD™D›	¤S¨¯©£YÑ.°´R¸¿¹³XÀ±\Ñ0AÓBÜœ˜QŸZ™Z›Ó)¨Q¯W©W´R©ZÑ7ó9ð :ñ 	:ˆä�4ˆyˆØ�5Š=Ü(Ø  !Ð%8ó:ð :à�#‘�|‰|˜A˜rÓ" DÐ(Ò(ð_/)ôb !Ð!1°1°bÓ
9Ð9ùò]%ùò )ùÚ'øô &ò 	Úð	ûô ò 	Úð	ûô 'ò IÜ,Ø$ aÐ)GóIð IðIúsB   Á#J7ÂJ<ÂKÃ(KÄKÄK&Ë	KËKË	K#Ë"K#Ë&K=Nc                   óV   — e Zd ZdZdZ ed«      Z ed«      Zd„ Ze	d„ «       Z
d„ Zd„ Zy	)
ÚInverseMellinTransformzú
    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.
    rî   ÚNonerÂ   c                 ó€   — |€t         j                  }|€t         j                  }t        j                  | |||||fi |¤ŽS r]   )r=  Ú_none_sentinelrM   Ú__new__)ÚclsrÑ   rc   rb   r¾   r¿   Úoptss          rE   rA  zInverseMellinTransform.__new__C  sB   € Øˆ9Ü&×5Ñ5ˆAØˆ9Ü&×5Ñ5ˆAÜ ×(Ñ(¨¨a°°A°q¸!ÑD¸tÑDÐDrF   c                 ó–   — | j                   d   | j                   d   }}|t        j                  u rd }|t        j                  u rd }||fS )Nr.  é   )rP   r=  r@  )rA   r¾   r¿   s      rE   Úfundamental_stripz(InverseMellinTransform.fundamental_stripJ  sL   € à�y‰y˜‰|˜TŸY™Y q™\ˆ1ˆØÔ&×5Ñ5Ñ5ØˆAØÔ&×5Ñ5Ñ5ØˆAØ�!ˆtˆrF   c                 ó†  — |j                  dd«       t        €>t        t        t        t
        t        t        t        t        t        t        t        t        hat        |«      D ]C  }|j                  sŒ|j!                  |«      sŒ"|j"                  t        vsŒ5t%        d|d|z  «      ‚ | j&                  }t)        ||||fi |¤ŽS )Nr   Trî   zComponent %s not recognised.)r�   Ú_allowedr   r*   r&   r$   r'   r%   r   r   r   r   r   r   r   Úis_Functionrr   rt   r;   rF  r0  )rA   rÑ   rc   rb   rd   ra   r6  s          rE   re   z)InverseMellinTransform._compute_transformS  s¬   € ð 	�	‰	�*˜dÔ#äÐä”UœC¤¤c¬3´´d¼DÄ$Üœ2ðˆHô % QÓ'ò 	IˆAØ�}‹} §¡ q¥¨a¯f©f¼HÒ.DÜ,Ð-=¸qØ%CÀaÑ%GóIð Ið	Ið ×&Ñ&ˆÜ(¨¨A¨q°%ÑA¸5ÑAÐArF   c                 ó,  — | j                   j                  }t        ||| z  z  ||t        j                  t        j
                  z  z
  |t        j                  t        j
                  z  z   f«      dt        j                  z  t        j                  z  z  S ©NrW   )rD   Ú_cr-   r   ÚImaginaryUnitr§   ÚPi)rA   rÑ   rc   rb   rÂ   s        rE   ri   z#InverseMellinTransform._as_integralc  sz   € Ø�N‰N×ÑˆÜ˜˜!˜q˜b™'™	 A q¬1¯?©?¼1¿:¹:Ñ+EÑ'EÀqÜ$%§O¡O´A·J±JÑ$>ñH?ð $@ó AØBCÄAÇDÁDÁ&ÌÏÉÑBXñZð 	ZrF   N)rG   rH   rI   rJ   rˆ   r   r@  rL  rA  r“   rF  re   ri   r€   rF   rE   r=  r=  5  sF   „ ñð €EÙ˜6“]€NÙ	ˆs‹€BòEð ñó ðòBó ZrF   r=  c           	      óL   —  t        | |||d   |d   «      j                  di |¤ŽS )a"  
    Compute the inverse Mellin transform of `F(s)` over the fundamental
    strip given by ``strip=(a, b)``.

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

    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`.

    Examples
    ========

    >>> from sympy import inverse_mellin_transform, 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*(1 - 1/x**2)*Heaviside(x - 1)/2
    >>> 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))
    (1/2 - x**2/2)*Heaviside(1 - x)/x

    See Also
    ========

    mellin_transform
    hankel_transform, inverse_hankel_transform
    r   rT   r€   )r=  rƒ   )rÑ   rc   rb   r6  rd   s        rE   Úinverse_mellin_transformrP  i  s2   € ðj DÔ! ! Q¨¨5°©8°U¸1±XÓ>×CÑCÑLÀeÑLÐLrF   c                 ó¸  — t        || z  t        |t        j                  z  |z  |z  «      z  |t        j                  t        j
                  f«      }|j                  t        «      st        ||«      t        j                  fS t        | |t        j                  t        j
                  f«      }|t        j                  t        j
                  t        j                  fv s|j                  t        «      rt        || d«      ‚|j                  st        || d«      ‚|j                  d   \  }}	|j                  t        «      rt        || d«      ‚t        ||«      |	fS )zñ
    Compute a general Fourier-type transform

    .. math::

        F(k) = a \int_{-\infty}^{\infty} e^{bixk} f(x)\, dx.

    For suitable choice of *a* and *b*, this reduces to the standard Fourier
    and inverse Fourier transforms.
    z$function not integrable on real axisr«   r   r¬   )r,   r   r   rM  r¶   r§   rr   r-   rš   r·   ÚNaNr;   rÍ   rP   )
ra   rb   r(  r¾   r¿   rl   r   rÑ   Ú
integral_frn   s
             rE   Ú_fourier_transformrT  ¥  s  € ô 	�!�A‘#”c˜!œAŸO™OÑ+¨AÑ-¨aÑ/Ó0Ñ0°1´a×6HÑ6HÌ!Ï*É*Ð2UÓV€Aà�5‰5”Œ?Ü˜˜HÓ%¤q§v¡vÐ-Ð-ä˜1˜q¤!×"4Ñ"4´a·j±jÐAÓB€JØ”a×(Ñ(¬!¯*©*´a·e±eÐ<Ñ<À
ÇÁÌxÔ@XÜ$ T¨1Ð.TÓUÐUà�>Š>Ü$ T¨1Ð.JÓKÐKà�f‰f�Q‰i�G€A€tØ‡u�uŒX„Ü$ T¨1Ð.KÓLÐLä�Q˜Ó! 4Ð'Ð'rF   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚFourierTypeTransformz# Base class for Fourier transforms.c                 ó2   — t        d| j                  z  «      ‚©Nz,Class %s must implement a(self) but does not©r_   rD   rQ   s    rE   r¾   zFourierTypeTransform.aÇ  ó   € Ü!Ø:¸T¿^¹^ÑKóMð 	MrF   c                 ó2   — t        d| j                  z  «      ‚©Nz,Class %s must implement b(self) but does notrY  rQ   s    rE   r¿   zFourierTypeTransform.bË  rZ  rF   c                 ó„   — t        |||| j                  «       | j                  «       | j                  j                  fi |¤ŽS r]   )rT  r¾   r¿   rD   rˆ   ©rA   ra   rb   r(  rd   s        rE   re   z'FourierTypeTransform._compute_transformÏ  s>   € Ü! ! Q¨Ø"&§&¡&£(¨D¯F©F«HØ"&§.¡.×"6Ñ"6ñAà:?ñAð 	ArF   c                 óä   — | j                  «       }| j                  «       }t        ||z  t        |t        j
                  z  |z  |z  «      z  |t        j                  t        j                  f«      S r]   )r¾   r¿   r-   r   r   rM  r¶   r§   )rA   ra   rb   r(  r¾   r¿   s         rE   ri   z!FourierTypeTransform._as_integralÔ  sZ   € Ø�F‰F‹HˆØ�F‰F‹HˆÜ˜˜!™œC ¤!§/¡/Ñ 1°!Ñ 3°AÑ 5Ó6Ñ6¸¼A×<NÑ<NÔPQ×PZÑPZÐ8[Ó\Ð\rF   N©rG   rH   rI   rJ   r¾   r¿   re   ri   r€   rF   rE   rV  rV  Ä  s   „ Ù-òMòMòAó
]rF   rV  c                   ó    — e Zd ZdZdZd„ Zd„ Zy)ÚFourierTransformzå
    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.
    ÚFourierc                  ó   — yr×   r€   rQ   s    rE   r¾   zFourierTransform.aæ  ó   € ØrF   c                 ó(   — dt         j                  z  S )Néþÿÿÿ©r   rN  rQ   s    rE   r¿   zFourierTransform.bé  s   € Ø”!—$‘$‰wˆrF   N©rG   rH   rI   rJ   rˆ   r¾   r¿   r€   rF   rE   rb  rb  Ú  s   „ ñð €EòórF   rb  c                 ó<   —  t        | ||«      j                  di |¤ŽS )a’  
    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.

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

    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``.

    Examples
    ========

    >>> 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
    r€   )rb  rƒ   ©ra   rb   r(  rd   s       rE   Úfourier_transformrl  í  s%   € ðN *Ô˜A˜q !Ó$×)Ñ)Ñ2¨EÑ2Ð2rF   c                   ó    — e Zd ZdZdZd„ Zd„ Zy)ÚInverseFourierTransformzý
    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.
    zInverse Fourierc                  ó   — yr×   r€   rQ   s    rE   r¾   zInverseFourierTransform.a#  re  rF   c                 ó(   — dt         j                  z  S rK  rh  rQ   s    rE   r¿   zInverseFourierTransform.b&  s   € Ø”—‘‰vˆrF   Nri  r€   rF   rE   rn  rn    s   „ ñð €EòórF   rn  c                 ó<   —  t        | ||«      j                  di |¤ŽS )a¶  
    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.

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

    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``.

    Examples
    ========

    >>> 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
    r€   )rn  rƒ   ©rÑ   r(  rb   rd   s       rE   Úinverse_fourier_transformrs  *  s%   € ðN 1Ô" 1 a¨Ó+×0Ñ0Ñ9°5Ñ9Ð9rF   c                 ó”  — t        || z   |||z  |z  «      z  |t        j                  t        j                  f«      }|j	                  t
        «      st        ||«      t        j                  fS |j                  st        || d«      ‚|j                  d   \  }}	|j	                  t
        «      rt        || d«      ‚t        ||«      |	fS )a  
    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.
    r«   r   r¬   )r,   r   r¦   r§   rr   r-   rš   r·   rÍ   r;   rP   )
ra   rb   r(  r¾   r¿   ÚKrl   r   rÑ   rn   s
             rE   Ú_sine_cosine_transformrv  X  s©   € ô 	�!�A‘#‘a˜˜!™˜A™“h‘, ¤A§F¡F¬A¯J©JÐ 7Ó8€Aà�5‰5”Œ?Ü˜˜HÓ%¤q§v¡vÐ-Ð-à�>Š>Ü$ T¨1Ð.JÓKÐKà�f‰f�Q‰i�G€A€tØ‡u�uŒX„Ü$ T¨1Ð.KÓLÐLä�Q˜Ó! 4Ð'Ð'rF   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚSineCosineTypeTransformzK
    Base class for sine and cosine transforms.
    Specify cls._kern.
    c                 ó2   — t        d| j                  z  «      ‚rX  rY  rQ   s    rE   r¾   zSineCosineTypeTransform.aw  rZ  rF   c                 ó2   — t        d| j                  z  «      ‚r\  rY  rQ   s    rE   r¿   zSineCosineTypeTransform.b{  rZ  rF   c           	      ó®   — t        |||| j                  «       | j                  «       | j                  j                  | j                  j
                  fi |¤ŽS r]   )rv  r¾   r¿   rD   Ú_kernrˆ   r^  s        rE   re   z*SineCosineTypeTransform._compute_transform€  sN   € Ü% a¨¨AØ&*§f¡f£h°·±³Ø&*§n¡n×&:Ñ&:Ø&*§n¡n×&:Ñ&:ñEð ?DñEð 	ErF   c                 óè   — | j                  «       }| j                  «       }| j                  j                  }t	        ||z   |||z  |z  «      z  |t
        j                  t
        j                  f«      S r]   )r¾   r¿   rD   r|  r-   r   r¦   r§   )rA   ra   rb   r(  r¾   r¿   ru  s          rE   ri   z$SineCosineTypeTransform._as_integral†  sW   € Ø�F‰F‹HˆØ�F‰F‹HˆØ�N‰N× Ñ ˆÜ˜˜!™™A˜a ™c !™e›H™ q¬!¯&©&´!·*±*Ð&=Ó>Ð>rF   Nr`  r€   rF   rE   rx  rx  q  s   „ ñò
MòMò
Eó?rF   rx  c                   ó$   — e Zd ZdZdZeZd„ Zd„ Zy)ÚSineTransformzÜ
    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.
    ÚSinec                 ó8   — t        d«      t        t        «      z  S rK  ©r"   r   rQ   s    rE   r¾   zSineTransform.aš  ó   € Ü�A‹w”tœB“xÑÐrF   c                 ó"   — t         j                  S r]   ©r   rú   rQ   s    rE   r¿   zSineTransform.b�  ó   € Ü�u‰uˆrF   N©	rG   rH   rI   rJ   rˆ   r&   r|  r¾   r¿   r€   rF   rE   r  r  �  s   „ ñð €EØ€Eò órF   r  c                 ó<   —  t        | ||«      j                  di |¤ŽS )a1  
    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.

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

    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``.

    Examples
    ========

    >>> 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
    r€   )r  rƒ   rk  s       rE   Úsine_transformr‰  ¡  s$   € ðH 'Œ=˜˜A˜qÓ!×&Ñ&Ñ/¨Ñ/Ð/rF   c                   ó$   — e Zd ZdZdZeZd„ Zd„ Zy)ÚInverseSineTransformzô
    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.
    zInverse Sinec                 ó8   — t        d«      t        t        «      z  S rK  r‚  rQ   s    rE   r¾   zInverseSineTransform.aÕ  rƒ  rF   c                 ó"   — t         j                  S r]   r…  rQ   s    rE   r¿   zInverseSineTransform.bØ  r†  rF   Nr‡  r€   rF   rE   r‹  r‹  È  s   „ ñð €EØ€Eò órF   r‹  c                 ó<   —  t        | ||«      j                  di |¤ŽS )am  
    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.

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

    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``.

    Examples
    ========

    >>> from sympy import inverse_sine_transform, exp, sqrt, gamma
    >>> 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€   )r‹  rƒ   rr  s       rE   Úinverse_sine_transformr�  Ü  s%   € ðJ .Ô  1 aÓ(×-Ñ-Ñ6°Ñ6Ð6rF   c                   ó$   — e Zd ZdZdZeZd„ Zd„ Zy)ÚCosineTransformzâ
    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.
    ÚCosinec                 ó8   — t        d«      t        t        «      z  S rK  r‚  rQ   s    rE   r¾   zCosineTransform.a  rƒ  rF   c                 ó"   — t         j                  S r]   r…  rQ   s    rE   r¿   zCosineTransform.b  r†  rF   N©	rG   rH   rI   rJ   rˆ   r$   r|  r¾   r¿   r€   rF   rE   r‘  r‘    s   „ ñð €EØ€Eò órF   r‘  c                 ó<   —  t        | ||«      j                  di |¤ŽS )a:  
    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.

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

    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``.

    Examples
    ========

    >>> 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€   )r‘  rƒ   rk  s       rE   Úcosine_transformr—    s$   € ðH )Œ?˜1˜a Ó#×(Ñ(Ñ1¨5Ñ1Ð1rF   c                   ó$   — e Zd ZdZdZeZd„ Zd„ Zy)ÚInverseCosineTransformzú
    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.
    zInverse Cosinec                 ó8   — t        d«      t        t        «      z  S rK  r‚  rQ   s    rE   r¾   zInverseCosineTransform.aL  rƒ  rF   c                 ó"   — t         j                  S r]   r…  rQ   s    rE   r¿   zInverseCosineTransform.bO  r†  rF   Nr•  r€   rF   rE   r™  r™  ?  s   „ ñð €EØ€Eò órF   r™  c                 ó<   —  t        | ||«      j                  di |¤ŽS )a(  
    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.

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

    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``.

    Examples
    ========

    >>> from sympy import inverse_cosine_transform, 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€   )r™  rƒ   rr  s       rE   Úinverse_cosine_transformr�  S  s%   € ðH 0Ô! ! Q¨Ó*×/Ñ/Ñ8°%Ñ8Ð8rF   c                 ó–  — t        | t        |||z  «      z  |z  |t        j                  t        j                  f«      }|j                  t        «      st        ||«      t        j                  fS |j                  st        || d«      ‚|j                  d   \  }}|j                  t        «      rt        || d«      ‚t        ||«      |fS )zv
    Compute a general Hankel transform

    .. math:: F_\nu(k) = \int_{0}^\infty f(r) J_\nu(k r) r \mathrm{d} r.
    r«   r   r¬   )r,   r(   r   r¦   r§   rr   r-   rš   r·   rÍ   r;   rP   )ra   râ   r(  r4  rl   r   rÑ   rn   s           rE   Ú_hankel_transformrŸ  ~  sª   € ô 	�!”G˜B  !¡Ó$Ñ$ QÑ&¨¬A¯F©F´A·J±JÐ(?Ó@€Aà�5‰5”Œ?Ü˜˜HÓ%¤q§v¡vÐ-Ð-à�>Š>Ü$ T¨1Ð.JÓKÐKà�f‰f�Q‰i�G€A€tØ‡u�uŒX„Ü$ T¨1Ð.KÓLÐLä�Q˜Ó! 4Ð'Ð'rF   c                   ó2   — e Zd ZdZd„ Zd„ Zd„ Zed„ «       Zy)ÚHankelTypeTransformz+
    Base class for Hankel transforms.
    c                 ó„   —  | j                   | j                  | j                  | j                  | j                  d   fi |¤ŽS ©Nr.  )re   r@   rU   rX   rP   )rA   rd   s     rE   rƒ   zHankelTypeTransform.doit™  sD   € Ø&ˆt×&Ñ& t§}¡}Ø'+×'=Ñ'=Ø'+×'>Ñ'>Ø'+§y¡y°¡|ñ0ð */ñ	0ð 	0rF   c                 ó6   — t        ||||| j                  fi |¤ŽS r]   )rŸ  rˆ   )rA   ra   râ   r(  r4  rd   s         rE   re   z&HankelTypeTransform._compute_transform   s   € Ü   A q¨"¨d¯j©jÑB¸EÑBÐBrF   c                 ó~   — t        |t        |||z  «      z  |z  |t        j                  t        j                  f«      S r]   )r-   r(   r   r¦   r§   )rA   ra   râ   r(  r4  s        rE   ri   z HankelTypeTransform._as_integral£  s3   € Ü˜œ' " a¨¡cÓ*Ñ*¨1Ñ,¨q´!·&±&¼!¿*¹*Ð.EÓFÐFrF   c                 ó€   — | j                  | j                  | j                  | j                  | j                  d   «      S r£  )ri   r@   rU   rX   rP   rQ   s    rE   r�   zHankelTypeTransform.as_integral¦  s8   € à× Ñ  §¡Ø!%×!7Ñ!7Ø!%×!8Ñ!8Ø!%§¡¨1¡ó/ð 	/rF   N)	rG   rH   rI   rJ   rƒ   re   ri   r“   r�   r€   rF   rE   r¡  r¡  ”  s,   „ ñò0òCòGð ñ/ó ñ/rF   r¡  c                   ó   — e Zd ZdZdZy)ÚHankelTransformzâ
    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.
    ÚHankelN©rG   rH   rI   rJ   rˆ   r€   rF   rE   r¨  r¨  ®  s   „ ñð �ErF   r¨  c                 ó>   —  t        | |||«      j                  di |¤ŽS )aÙ  
    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.

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

    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``.

    Examples
    ========

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

    >>> ht = hankel_transform(1/r**m, r, k, nu)
    >>> ht
    2*k**(m - 2)*gamma(-m/2 + nu/2 + 1)/(2**m*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
    r€   )r¨  rƒ   )ra   râ   r(  r4  rd   s        rE   Úhankel_transformr¬  »  s&   € ð\ -Œ?˜1˜a  BÓ'×,Ñ,Ñ5¨uÑ5Ð5rF   c                   ó   — e Zd ZdZdZy)ÚInverseHankelTransformzú
    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.
    zInverse HankelNrª  r€   rF   rE   r®  r®  ì  s   „ ñð �ErF   r®  c                 ó>   —  t        | |||«      j                  di |¤ŽS )aß  
    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.

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

    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``.

    Examples
    ========

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

    >>> ht = hankel_transform(1/r**m, r, k, nu)
    >>> ht
    2*k**(m - 2)*gamma(-m/2 + nu/2 + 1)/(2**m*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
    r€   )r®  rƒ   )rÑ   r(  râ   r4  rd   s        rE   Úinverse_hankel_transformr°  ù  s'   € ð\ 4Ô! ! Q¨¨2Ó.×3Ñ3Ñ<°eÑ<Ð<rF   )F)T)ˆrJ   Ú	functoolsr   r   Ú	itertoolsr   Ú
sympy.corer   r   Úsympy.core.addr   Úsympy.core.functionr	   r
   r   r   r   Úsympy.core.mulr   Úsympy.core.intfuncr   r   Úsympy.core.sortingr   Úsympy.core.symbolr   Úsympy.core.traversalr   Ú(sympy.functions.combinatorial.factorialsr   r   Ú$sympy.functions.elementary.complexesr   r   r   Ú&sympy.functions.elementary.exponentialr   r   Ú%sympy.functions.elementary.hyperbolicr   r   r   r   Ú#sympy.functions.elementary.integersr   Ú(sympy.functions.elementary.miscellaneousr    r!   r"   Ú$sympy.functions.elementary.piecewiser#   Ú(sympy.functions.elementary.trigonometricr$   r%   r&   r'   Úsympy.functions.special.besselr(   Ú'sympy.functions.special.delta_functionsr)   Ú'sympy.functions.special.gamma_functionsr*   Úsympy.functions.special.hyperr+   Úsympy.integralsr,   r-   Úsympy.integrals.meijerintr.   Úsympy.logic.boolalgr/   r0   r1   r2   r3   Úsympy.polys.polyrootsr4   Úsympy.polys.polytoolsr5   r6   Úsympy.polys.rootoftoolsr7   Úsympy.utilities.iterablesr8   Úsympy.utilities.miscr9   r_   r;   rM   rš   r¤   Ú_nocondsr¨   rÒ   rÔ   rÜ   rã   r1  rå   r)  r0  rH  r=  rP  rT  rV  rb  rl  rn  rs  rv  rx  r  r‰  r‹  r�  r‘  r—  r™  r�  rŸ  r¡  r¨  r¬  r®  r°  Úsympy.integrals.laplaceÚ	integralsÚlaplaceÚ_laplaceÚLaplaceTransformÚlaplace_transformÚlaplace_correspondenceÚlaplace_initial_condsÚInverseLaplaceTransformÚinverse_laplace_transformr€   rF   rE   ú<module>rÚ     s‰  ðÙ ß #Ý ß Ý ÷;õ ;å ß )Ý /Ý #Ý 4ß Bß =Ñ =ß Aß HÓ HÝ 7ß CÑ CÝ ?ß GÓ GÝ 2Ý =Ý 9Ý 1ß /Ý ,ß EÕ EÝ 'ß .Ý +Ý .Ý &ô!Ð0ô !ô(Y ˜ô Y òxòñ6 �UÓ€ò1ð 
Ø+>Èò A;ó 
ðA;ôHÐ'ô òB)2òX*BôZ	 
ô 	òh2ñV	 ˆ4ƒò8:ó ð8:ðt €ô1ZÐ.ô 1Zòh5Mñx ˆ4ƒò(ó ð(ô<]Ð,ô ]ô,Ð+ô ò&'3ôTÐ2ô ò&':ñ\ ˆ4ƒò(ó ð(ô0?Ð/ô ?ô8Ð+ô ò($0ôNÐ2ô ò(%7ôPÐ-ô ò($2ôNÐ4ô ò($9ñV ˆ4ƒò(ó ð(ô*/Ð+ô /ô4
Ð)ô 
ò.6ôb
Ð0ô 
ò.=÷l +Ð *à×,Ò,Ð Ø×.Ò.Ð Ø!×8Ò8Ð Ø ×6Ò6Ð Ø"×:Ò:Ð Ø$×>Ò>Ñ rF   