§
    OŠtj&Ê  ã                   ó4  — 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‡d2S )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                 ód   •— t          ¦   «                              |›d|›d�¦  «         || _        d S )Nz" Transform could not be computed: ú.)ÚsuperÚ__init__Úfunction)ÚselfÚ	transformr@   ÚmsgÚ	__class__s       €úX/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/integrals/transforms.pyr?   zIntegralTransformError.__init__6   s=   ø€ Ý‰Œ×ÒØ9B¸¸ÀCÀCÀCÐHñ	Jô 	Jð 	Jà ˆŒˆˆó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   Ú__classcell__)rD   s   @rE   r;   r;   (   sB   ø€ € € € € ðð ð!ð !ð !ð !ð !ð !ð !ð !ð !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dS )Ú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˜Œ|Ð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        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   s3   € ð Œ}Ô)×/Ò/°Ô1HÐ0IÑJÔ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                 óZ   — 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ÐGØˆrF   c                 óD  ‡ — d }t          ˆ fd„‰ j                             t          ¦  «        D ¦   «         ¦  «         }|rB	  ‰ j        ‰ j        ‰ j        ‰ j        fi |¤Ž}n!# t          $ r t          d¦  «         d }Y nw xY w‰ j        }|j	        st          |¦  «        }||fS )Nc              3   óL   •K  — | ]}|                      ‰j        ¦  «        V — Œd S r]   )ÚhasrU   )Ú.0ÚfuncrA   s     €rE   ú	<genexpr>z2IntegralTransform._try_directly.<locals>.<genexpr>y   sN   øè è € ð Nð NØ#'ð  $Ÿxšx¨Ô(>Ñ?Ô?ð Nð Nð Nð Nð Nð NrF   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ð Nð Nð NØ+/¬=×+>Ò+>½|Ñ+LÔ+LðNñ Nô Nñ Nô Nð Nˆàð 	ðØ+�DÔ+¨D¬MØÔ*¨DÔ,CðNð NØGLðNð N��øå)ð ð ð ÝÐNÑOÔOÐOØ���ðøøøð Œ]ˆØŒyð 	 Ý˜B‘”ˆBØ�1ˆuˆs   Á A  Á A>Á=A>c           	      óÂ  ‡ ‡— ‰                      dd¦  «        }‰                      dd¦  «        }|‰d<    ‰ j        d
i ‰¤Ž\  }}|�|S |j        �r |‰d<   ˆˆ fd„|j        D ¦   «         }g }g }|D ]…}	t	          |	t
          ¦  «        s|	g}	|                     |	d         ¦  «         t          |	¦  «        dk    r|                     |	d	         ¦  «         Œdt          |	¦  «        dk    r||	d	d…         gz  }Œ†|dk    rt          |Ž  	                    ¦   «         }n	t          |Ž }|s|S 	 ‰  
                    |¦  «        }t          |¦  «        r|ft          |¦  «        z   S ||fS # t          $ r Y nw xY w|r t          ‰ j        j        ‰ j        d¦  «        ‚|                     ‰ j        ¦  «        \  }
}|
 ‰ j        t%          |Ž gt'          ‰ j        d	d…         ¦  «        z   Ž z  S )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ÚsimplifyTNc                 óv   •— g | ]5}  ‰j         |gt          ‰j        d d…         ¦  «        z   Ž j        di ‰¤Ž‘Œ6S )rT   N© )rD   ÚlistrP   Údoit)rs   rb   rd   rA   s     €€rE   ú
<listcomp>z*IntegralTransform.doit.<locals>.<listcomp>¨   s_   ø€ ð %ð %ð %Øð E�>�4”> Q C­$¨t¬y¸¸¸¬}Ñ*=Ô*=Ñ$=Ð?ÔDÐMÐMÀuÐMÐMð %ð %ð %rF   r   rW   rT   r�   )Úpopr|   rx   rP   Ú
isinstanceÚtupleÚappendÚlenr   r   ro   r8   r;   rD   Ú_namer@   Úas_coeff_mulrU   r   r‚   )rA   rd   r~   r   r{   ry   Úresrm   Úressrb   ÚcoeffÚrests   ``          rE   rƒ   zIntegralTransform.doitˆ   sE  øø€ ð* —9’9˜Z¨Ñ/Ô/ˆØ—9’9˜Z¨Ñ.Ô.ˆØ$ˆˆjÑà"�Ô"Ð+Ð+ UÐ+Ð+‰ˆˆAàˆ=ØˆHàŒ9ñ 	Ø (ˆE�*Ñð%ð %ð %ð %ð %ØœGð%ñ %ô %ˆCàˆEØˆDØð 	%ð 	%�Ý! !¥UÑ+Ô+ð Ø˜�AØ—’˜A˜aœDÑ!Ô!Ð!Ý�q‘6”6˜Q’;�;à—L’L  1¤Ñ&Ô&Ð&Ð&Ý˜‘V”V˜a’Z�Zà˜a   œe˜WÑ$�EøØ˜Š~ˆ~Ý˜4�j×)Ò)Ñ+Ô+��å˜4�j�Øð Ø�
ðØ×,Ò,¨UÑ3Ô3�Ý˜E‘?”?ð (Ø˜6¥E¨%¡L¤LÑ0Ð0à ˜<Ð'øÝ)ð ð ð Ø�ðøøøð ð 	AÝ(Ø”Ô$ d¤m°ZñAô Að Að —o’o dÔ&<Ñ=Ô=‰ˆˆtØ�^�T”^¥s¨D z lµT¸$¼)ÀAÀBÀB¼-Ñ5HÔ5HÑ&HÐJÑJÐJs   Ä%6E  ÅE  Å 
E-Å,E-c                 óN   — |                       | j        | j        | j        ¦  «        S r]   )ri   r@   rU   rX   rQ   s    rE   Úas_integralzIntegralTransform.as_integralÏ   s)   € à× Ò  ¤°Ô0FØ!%Ô!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  € € € € € ðð ð, ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xðð ð'ð 'ñ „Xð'ð"ð "ð "ð"ð "ð "ðð ð ðð ð ð"EKð EKð EKðN ð:ð :ñ „Xð:ð ð  ð  ð  ð  rF   rM   c                 óh   — |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[   € Øð EØ+Ð+Ð+Ð+Ð+Ð+Ø4Ð4Ð4Ð4Ð4Ð4Øˆx˜	˜	¥.°Ñ"6Ô"6¸dÐCÑCÔCÑDÔ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                 óD   •‡ — 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ò   sA   øø€ Ý	ˆt‰ŒØ#*ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Œð	ð
 ˆrF   r�   )r¤   r¥   s   ` rE   Ú	_noconds_r¦   à   s$   ø€ ð$ð ð ð ð ð ÐrF   Fc                 óP   — t          | |t          j        t          j        f¦  «        S r]   )r,   r   ÚZeroÚInfinity)ra   rb   s     rE   Ú_default_integratorrª     s   € Ý�Q˜�AœF¥A¤JÐ/Ñ0Ô0Ð0rF   Tc                 óÐ  ‡‡— t          dd| ¦  «        Š ||‰dz
  z  | z  |¦  «        }|                     t          ¦  «        sGt          |                     ‰|¦  «        |¦  «        t
          j        t
          j        ft
          j        fS |j	        st          d| d¦  «        ‚|j        d         \  }}|                     t          ¦  «        rt          d| d¦  «        ‚ˆfd„Šˆfd	„t          |¦  «        D ¦   «         }d
„ |D ¦   «         }|                     d„ ¬¦  «         |st          d| d¦  «        ‚|d         \  }}	}
t          |                     ‰|¦  «        |¦  «        ||	f|
fS )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 �]i}t          j        }t          j        }	g }
t          |¦  «        D ]Ù}| 
                    t          d„ ¦  «                             t          ‰¦  «        |¦  «        }|j        r3|j        dv s*|                     ‰¦  «        s|                     |¦  «        s|
|gz  }
Œ€ |||¦  «        }|j        r	|j        dv r|
|gz  }
Œ£|j        |k    rt#          |j        |	¦  «        }	ŒÄt'          |j        |¦  «        }ŒÚ|t          j        ur||k    rt#          ||¦  «        }�Œ,|	t          j        ur|	|k    rt'          |	|¦  «        }�ŒRt)          |t+          |
Ž ¦  «        }�Œk|||fS )zN
        Turn ``cond`` into a strip (a, b), and auxiliary conditions.
        r   )Ú_solve_inequalityÚtT)Úrealc                 ó6   — |                       ¦   «         d         S r¢   )Úas_real_imag©rb   s    rE   ú<lambda>z:_mellin_transform.<locals>.process_conds.<locals>.<lambda>)  s   €  !§.¢.Ñ"2Ô"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ˆÝŒfˆÝ�& ™,œ,Ñ'Ô'ˆÝ�#˜DÐ!Ñ!Ô!ˆØð 	*ñ 	*ˆAÝ”ˆBÝÔ#ˆBØˆDÝ˜q‘\”\ð +ð +�Ø—Y’YÝÐ5Ð5ñ7ô 7ß7;²t½B¸q¹E¼EÀ1±~´~ð à”ð Ø”H Ð,Ð,ØŸ6š6 !™9œ9ð -Ø,.¯FªF°1©I¬Ið -à˜Q˜C‘K�DØØ(Ð(¨¨QÑ/Ô/�ØÔ)ð Øœ |Ð3Ð3Ø˜Q˜C‘K�DØØ”8˜q’=�=Ý˜TœX rÑ*Ô*�B�Bå˜TœX rÑ*Ô*�B�BØ�œÐ#Ð#¨¨aª¨Ý˜˜A‘J”J�‘Ø�1Ô-Ð-Ð-°"¸²'°'Ý˜˜A‘J”J�‘å˜#�r 4˜yÑ)Ô)�‘Ø�!�SˆyÐrF   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r�   r�   )rs   rÄ   rË   s     €rE   r„   z%_mellin_transform.<locals>.<listcomp>@  s#   ø€ Ð7Ð7Ð7 !ˆ]ˆ]˜1ÑÔÐ7Ð7Ð7rF   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS )rW   Fr�   ©rs   rb   s     rE   r„   z%_mellin_transform.<locals>.<listcomp>A  s!   € Ð/Ð/Ð/�1  1¤¨¢ ˆQ   rF   c                 óN   — | 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Ë   rc   s              @@rE   Ú_mellin_transformr×     sŠ  øø€ õ
 	ˆsÐ&¨Ñ*Ô*€AØˆ
�1�q˜1‘u‘: ‘> 1Ñ%Ô%€Aà�5Š5•‰?Œ?ð \Ý˜Ÿš  2™œ¨Ñ1Ô1µAÔ4FÍÌ
Ð3SÕUVÔU[Ð[Ð[àŒ>ð PÝ$ X¨qÐ2NÑOÔOÐOàŒf�QŒi�G€A€tØ‡u‚u�X�„ð 8Ý$Ø�aÐ6ñ8ô 8ð 	8ð%ð %ð %ð %ð %ðN 8Ð7Ð7Ð7¥y°¡¤Ð7Ñ7Ô7€EØ/Ð/˜Ð/Ñ/Ô/€EØ	‡J‚JÐ;Ð;€JÑ<Ô<Ð<àð JÝ$ X¨qÐ2HÑIÔIÐIà�a”�I€A€qˆ#Ý�Q—V’V˜A˜r‘]”] HÑ-Ô-°°1¨v°sÐ:Ð:rF   c                   ó(   — e Zd ZdZdZd„ Zd„ Zd„ ZdS )Ú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Ð2¨EÐ2Ð2Ð2rF   c                 ób   — 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ˆ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  sR   € € € € € ðð ð €Eð3ð 3ð 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Ð1¨5Ð1Ð1Ð1rF   c                 óB  — | \  }}t          |t          z  ¦  «        }t          |t          z  ¦  «        }t          | |z  |                     ¦   «         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Ô5¸¸Q±w½r±zÐAÐArF   c                   ó   — e Zd ZdZdS )ÚMellinTransformStripErrorzF
    Exception raised by _rewrite_gamma. Mainly for internal use.
    N)rG   rH   rI   rJ   r�   rF   rE   rê   rê   Å  s   € € € € € ðð ð 	€DrF   rê   c           	      ó8  ‡ ‡‡-‡.‡/‡0‡1‡2— t          ||g¦  «        \  Š-Š.ˆ-ˆ.fd„}g }‰                      t          ¦  «        D ][}|                     ‰¦  «        sŒ|j        d         }|j        r |j        ‰¦  «        d         } |j        ‰¦  «        \  }}	||gz  }Œ\‰                      t          t          t          t          ¦  «        D ]c}|                     ‰¦  «        sŒ|j        d         }|j        r |j        ‰¦  «        d         } |j        ‰¦  «        \  }}	||t          z  gz  }Œdd„ |D ¦   «         }t           j        Š/|D ]}
|
j        s|
Š/ nŒˆ/fd„|D ¦   «         }t          d„ |D ¦   «         ¦  «        r‰/j        st#          ddd	¦  «        ‚‰/t%          t&          d
„ |D ¦   «         t           j        ¦  «        z  }|‰/k    r8t)          |¦  «        dk    r‰/}n"‰/t%          t*          d„ |D ¦   «         ¦  «        z  }‰                      ‰‰|z  ¦  «        Š t           j        |z  }t           j        |z  }‰-�‰-|z  Š-‰.�‰.|z  Š.‰                      ¦   «         \  }}t1          j        |¦  «        }t1          j        |¦  «        }t5          t7          |t9          d¦  «        ¦  «        ¦  «        t5          t7          |t9          d¦  «        ¦  «        ¦  «        z   }g }g }g }g }g }ˆ fd„Š0|�r[|                     ¦   «         \  Š1Š2‰2r||}}|}n||}}|}ˆ0ˆ1ˆfd„}‰1                     ‰¦  «        s|‰1gz  }�n‰1j        st?          ‰1t@          ¦  «        r ‰1j        r‰1j!        }‰1j         }ntE          d¦  «        }‰1j         }|j#        r$‰2}|dk     r| }|||fgtI          |¦  «        z  z  }ŒÀ|                     ‰¦  «        s) ||¦  «        \  }}‰2sd|z  }|||z  gz  }|||z  gz  }�n] ‰0‰1¦  «        ‚‰1 %                    ‰¦  «        �r.tM          ‰1‰¦  «        }| '                    ¦   «         dk    r}| (                    ¦   «         d         }tS          |‰¦  «        }t)          |¦  «        | '                    ¦   «         k    rtU          j+        |¦  «        }||gz  }|ˆ2ˆfd„|D ¦   «         z  }�ŒÄ| ,                    ¦   «         \  }}||gz  }|| z  } ||‰2¦  «        r+|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t?          ‰1t          ¦  «        rh |‰1j        d         ¦  «        \  }}‰2rC|dk    r || |z  ‰2¦  «        dk    s|dk     r# || |z  ‰2¦  «        dk    rt]          d¦  «        ‚|||fgz  }�n‘t?          ‰1t          ¦  «        r|‰1j        d         }‰2r9t          |t          z  ¦  «        t          d|t          z  z
  ¦  «        t          }"}!} nt_           ||¦  «        ‰‰-‰.¦  «        \  } }!}"|| ‰2 f|!‰2 fgz  }||"gz  }�n t?          ‰1t          ¦  «        rC‰1j        d         }|t          |d¬¦  «        ‰2ft          t          dz  |z
  d¬¦  «        ‰2 fgz  }n¨t?          ‰1t          ¦  «        r0‰1j        d         }|t          t          dz  |z
  d¬¦  «        ‰2fgz  }nct?          ‰1t          ¦  «        rC‰1j        d         }|t          t          dz  |z
  d¬¦  «        ‰2ft          |d¬¦  «        ‰2 fgz  }n ‰0‰1¦  «        ‚|�°[|t1          |Ž t1          |Ž z  z  }g g g g f\  }#}$}%}&||#|%df||&|$dffD �]*\  }'}(})Š2|'�r|'                     ¦   «         \  }}|dk    rË|dk    rÅtI          t          |¦  «        ¦  «        }||z  }*||z  }+|j#        sta          d¦  «        ‚tc          |¦  «        D ]},|'|*|+|,|z  z   fgz  }'Œ‰2r3|dt          z  d|z
  dz  z  ||t           j2        z
  z  z  z  }|||z  gz  }n3|dt          z  d|z
  dz  z  ||t           j2        z
  z  z  z  }||| z  gz  }Œë|dk    r|( 3                    d|z
  ¦  «         n|) 3                    |¦  «         |'�°�Œ,t1          |Ž }|# 4                    tj          ¬¦  «         |$ 4                    tj          ¬¦  «         |% 4                    tj          ¬¦  «         |& 4                    tj          ¬¦  «         |#|$f|%|&f|||fS )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dS ‰€| ‰k     S ‰€| ‰k    S | ‰k    dk    rdS | ‰k    dk    rdS |rdS ‰j        s‰j        s| j        rdS 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”5‰MŒMˆØˆ:˜"¥¤
Ð*Ð*Ø�4Øˆ:Ø�r’6ˆMØˆ:Ø˜’7ˆNØ�ŠG˜ÒÐØ�5Ø�ŠG˜ÒÐØ�4Øð 	Ø�4ØŒ?ð 	˜bœoð 	°´ð 	Ø�4õ (Ð(EÑFÔFÐFrF   r   rT   c                 ó>   — g | ]}|j         rt          |¦  «        n|‘ŒS r�   )Úis_extended_realr   rÎ   s     rE   r„   z"_rewrite_gamma.<locals>.<listcomp>8  s*   € ÐPÐPÐP¸Q˜qÔ1Ð8•S˜‘V”V�V°qÐPÐPÐPrF   c                 ó   •— g | ]}|‰z  ‘ŒS r�   r�   )rs   rb   Úcommon_coefficients     €rE   r„   z"_rewrite_gamma.<locals>.<listcomp>>  s   ø€ ÐAÐAÐA¨a�QÐ)Ñ)ÐAÐAÐArF   c              3   ó$   K  — | ]}|j         V — Œd S r]   )Úis_RationalrÎ   s     rE   ru   z!_rewrite_gamma.<locals>.<genexpr>?  s$   è è € Ð5Ð5 !�”Ð5Ð5Ð5Ð5Ð5Ð5rF   ÚGammaNzNonrational multiplierc                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS r�   )r   ÚqrÎ   s     rE   r„   z"_rewrite_gamma.<locals>.<listcomp>B  s6   € ð 4Eð 4Eð 4EØ12õ 56°a´c±F´Fð 4Eð 4Eð 4ErF   c                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS r�   )r   ÚprÎ   s     rE   r„   z"_rewrite_gamma.<locals>.<listcomp>I  s    € Ð=Ð=Ð=¨!�q ¤™vœvÐ=Ð=Ð=rF   TFc                 ó,   •— 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          | ‰¦  «        }|                     ¦   «         dk    r ‰‰¦  «        ‚|                     ¦   «         S )z7 Test if arg is of form a*s+b, raise exception if not. rT   )Úis_polynomialr6   ÚdegreeÚ
all_coeffs)r   rù   rý   rü   rc   s     €€€rE   Ú
linear_argz"_rewrite_gamma.<locals>.linear_argl  s`   ø€ à$�3Ô$ QÑ'Ô'ð &Ø�i ‘o”oÐ%Ý�S˜!‘”ˆAØ�xŠx‰zŒz˜QŠˆØ�i ‘o”oÐ%Ø—<’<‘>”>Ð!rF   c                 ó   •— g | ]	}‰|z
  ‰f‘Œ
S r�   r�   )rs   rÄ   rí   rc   s     €€rE   r„   z"_rewrite_gamma.<locals>.<listcomp>š  s"   ø€ Ð7Ð7Ð7¨q˜!˜a™% Ð*Ð7Ð7Ð7rF   rã   z Gammas partially over the strip.)ÚevaluaterW   za is not an integerrÐ   )6r   rw   r*   rr   rP   rx   Úas_independentr‹   r&   r$   r'   r%   r   ÚOnerô   Úallrð   r;   r   r   r‰   r   r»   Úas_numer_denomr   Ú	make_argsr‚   Úzipr   r…   Úis_Powr†   r   Úbaser   Ú
is_Integerr   rÿ   r6   r   ÚLTr4   r7   Ú	all_rootsr  ÚNegativeOner_   rè   Ú	TypeErrorÚrangeÚHalfrˆ   rÓ   r   )3ra   rc   rÀ   rÁ   rî   Ús_multipliersÚgr   rŽ   Ú_rb   Ús_multiplierÚfacÚexponentÚnumerÚdenomrP   ÚfacsÚdfacsÚnumer_gammasÚdenom_gammasÚexponentialsÚugammasÚlgammasÚufacsr  r  Úexp_rn   rù   ÚrsrÄ   Úgamma1Úgamma2Úfac_ÚanÚapÚbmÚbqÚgammasÚplusÚminusÚnewaÚnewcÚkrÅ   rÆ   rò   rý   rü   rí   s3   ``                                           @@@@@@rE   Ú_rewrite_gammar3  Ì  sÐ
  øøøøøøøø€ õ~ ��1ˆv‰YŒY�F€BˆðGð Gð Gð Gð Gð Gð4 €MØ�WŠW•U‰^Œ^ð !ð !ˆØ�uŠu�Q‰xŒxð 	ØØŒf�QŒiˆØŒ:ð 	+Ø$�#Ô$ QÑ'Ô'¨Ô*ˆCØ#�3Ô# AÑ&Ô&‰ˆˆqØ˜%˜Ñ ˆˆØ�WŠW•S�#�s¥CÑ(Ô(ð $ð $ˆØ�uŠu�Q‰xŒxð 	ØØŒf�QŒiˆØŒ:ð 	+Ø$�#Ô$ QÑ'Ô'¨Ô*ˆCØ#�3Ô# AÑ&Ô&‰ˆˆqØ˜%¥™(˜Ñ#ˆˆØPÐPÀ-ÐPÑPÔP€MÝœÐØð ð ˆØŒ}ð 	Ø!"ÐØˆEð	ð BÐAÐAÐA°=ÐAÑAÔA€MÝÐ5Ð5 }Ð5Ñ5Ô5Ñ5Ô5ð NØÔ/ðNå$ W¨dÐ4LÑMÔMÐMØ%¥f­Tð 4Eð 4EØ6Cð4Eñ 4Eô 4EÝFGÄeñ'Mô 'Mñ M€LàÐ)Ò)Ð)Ýˆ}ÑÔ Ò"Ð"Ø-ˆLˆLà-Ý�Ð=Ð=¨}Ð=Ñ=Ô=Ñ>Ô>ñ?ˆLð 	
�Šˆq�!�L‘.Ñ!Ô!€AÝ
Œ%�Ñ
€CÝŒu�\Ñ!€HØ	€~Ø
ˆlÑˆØ	€~Ø
ˆlÑˆð ×#Ò#Ñ%Ô%�L€Eˆ5ÝŒM˜%Ñ Ô €EÝŒM˜%Ñ Ô €EÝ•�E�6 $™<œ<Ñ(Ô(Ñ)Ô)­Dµ°U½FÀ5¹M¼MÑ1JÔ1JÑ,KÔ,KÑK€Dà€DØ€Eà€LØ€Là€Lð]ð ]ð ]ð ]ð ]à
ñ f"ØŸš™œ‰ˆˆhØð 	Ø+¨\�WˆGØˆEˆEà+¨\�WˆGØˆEð	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð �xŠx˜‰{Œ{ð S	"Ø�d�V‰OˆE‰EàŒ[ð P	"�J t­SÑ1Ô1ð P	"ØŒ{ð  Ø”y�Ø”x��å  ‘|”|�Ø”x�ØŒð &Ø�Ø˜!’8�8Ø#˜8�DØ˜$ ˜˜¥s¨4¡y¤yÑ0Ñ0�ØØ—X’X˜a‘[”[ð &Ø!�z $Ñ'Ô'‘��1Øð "Ø˜T™6�DØ  q¡ 	Ñ)�Ø˜˜q™˜	Ñ!�‘à�i ‘o”oÐ%à×Ò Ñ"Ô"ñ :	"Ý�T˜1‘”ˆAØ�xŠx‰zŒz˜QŠˆð Ÿš™œ˜qœ	�Ý˜1˜a‘[”[�Ý�r‘7”7˜aŸhšh™jœjÒ(Ð(Ý Ô*¨1Ñ-Ô-�BØ˜%˜Ñ �ØÐ7Ð7Ð7Ð7Ð7°BÐ7Ñ7Ô7Ñ7�ÙØ—<’<‘>”>‰DˆAˆqØ�a�S‰LˆEØ�!�‰GˆAàˆt�A�xÑ Ô ð 0Ø�QœU Q B¨¡F˜OÐ,Ñ,�Ø�QœU Q B˜K˜=Ñ(�‘à˜"˜‘�Ø�Qœ]¨A°©EÐ2Ð3Ñ3�Ø�Qœ]¨AÐ.Ð/Ñ/�‘Ý˜�eÑ$Ô$ð "	"Ø�:˜dœi¨œlÑ+Ô+‰DˆAˆqØð <Ø˜’E�E˜t˜t Q B q¡D¨(Ñ3Ô3°uÒ<Ð<Ø˜’E�E˜t˜t Q B q¡D¨(Ñ3Ô3°tÒ;Ð;Ý-Ø:ñ<ô <ð <à˜˜A˜�xÑˆG‰GÝ˜�cÑ"Ô"ð 	"ð ”	˜!”ˆAØð Nå',¨Q­r©T¡{¤{µE¸!¸aÅ¹d¹(±O´OÅR ˜��å'3°J°J¸q±M´MÀ1ÀbÈ"Ñ'MÔ'MÑ$�˜ Ø�f (˜lÐ+¨f¸(°lÐ-CÐDÑDˆDØ�d�V‰OˆE‰EÝ˜�cÑ"Ô"ð 	"Ø”	˜!”ˆAØ•c˜! eÐ,Ñ,Ô,¨hÐ7Ý�"˜Q™$ ™(¨UÐ3Ñ3Ô3¸°\ÐBðDñ DˆDˆDå˜�cÑ"Ô"ð 	"Ø”	˜!”ˆAØ•c�"˜Q™$ ™(¨UÐ3Ñ3Ô3°XÐ>Ð?Ñ?ˆDˆDÝ˜�cÑ"Ô"ð 	"Ø”	˜!”ˆAØ•c�"˜Q™$ ™(¨UÐ3Ñ3Ô3°XÐ>Ý˜! eÐ,Ñ,Ô,°(¨lÐ;ð=ñ =ˆDˆDð �)˜D‘/”/Ð!ðM ñ f"ðP �3�ˆ:•c˜5�kÑ!Ñ!€Cð ˜˜R �^�N€BˆˆB�Ø+7¸¸RÀÐ*FØ+7¸¸RÀÐ*Gð*Ið  ñ  Ñ%ˆ��e˜Xàñ 	 Ø—:’:‘<”<‰DˆAˆqØ�BŠwˆw˜1 š7˜7å�˜!™œ‘I”I�Ø˜‘s�Ø˜‘s�Ø”|ð ;Ý#Ð$9Ñ:Ô:Ð:Ý˜q™œð 3ð 3�AØ  d¨Q¨q©S¡jÐ1Ð2Ñ2�F�FØð .Ø˜A�b™D Q¨¡U¨A¡IÑ.°°Q½¼±Z±Ñ@Ñ@�CØ  Q¨¡T FÑ*�L�Là˜A�b™D Q¨¡U¨A¡IÑ.°°Q½¼±Z±Ñ@Ñ@�CØ  Q¨!¨¡W IÑ-�LØØ�BŠwˆwØ—’˜A ™EÑ"Ô"Ð"Ð"à—’˜Q‘”�ð+ ñ 	 ùõ6 ˆ|Ð
€Cð ‡G‚GÕ €GÑ!Ô!Ð!Ø‡G‚GÕ €GÑ!Ô!Ð!Ø‡G‚GÕ €GÑ!Ô!Ð!Ø‡G‚GÕ €GÑ!Ô!Ð!à�ˆ8�b˜"�X˜s H¨cÐ1Ð1rF   c                 óJ  ‡‡‡‡— t          dd| d¬¦  «        Š|                      t          ¦  «        } t          | ¦  «        t	          | ¦  «        t          | ¦  «        fD �]´}|j        rƒˆˆˆˆfd„|j        D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }t          |Ž }‰s)t          || 	                    t          ¦  «        ¬¦  «        }|                     ‰|¦  «        t          |Ž fc S 	 t          |‰‰d	         ‰d
         ¦  «        \  }	}
}}}n# t          $ r Y Œ¿w xY w	 t          |	|
|‰|z  z  ¦  «        }n# t           $ r Y Œèw xY w‰r|}nÂ	 d	dlm}  ||¦  «        }n# t&          $ r t          d| d¦  «        ‚w xY w|j        r‰t+          |j        ¦  «        dk    rqt          ‰t-          |¦  «        z
  ¦  «        |j        d	         j        d	         z  t          t-          |¦  «        ‰z
  ¦  «        |j        d
         j        d	         z  z   }t-          t/          |j        ¦  «        ¦  «        |j        t4          z  k     g}|t          t7          t+          |j        ¦  «        t+          |j        ¦  «        k    d	t=          |j        ¦  «        d
z   k    ¦  «        t-          t/          |j        ¦  «        ¦  «        |j        t4          z  k    ¦  «        gz  }t7          |Ž }|dk    rt          d| d¦  «        ‚||z                       ‰|¦  «        |fc S t          d| d¦  «        ‚)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)Úpositivec           
      ó:   •— g | ]}t          |‰‰‰‰d ¬¦  «        ‘ŒS )FrŸ   )Ú_inverse_mellin_transform)rs   ÚGÚ
as_meijergrc   Ústriprb   s     €€€€rE   r„   z-_inverse_mellin_transform.<locals>.<listcomp>  sE   ø€ ð %ð %ð %àõ .¨a°°A°u¸jØ6;ð=ñ =ô =ð %ð %ð %rF   c                 ó   — g | ]
}|d          ‘ŒS )rT   r�   ©rs   rù   s     rE   r„   z-_inverse_mellin_transform.<locals>.<listcomp>  s   € Ð(Ð(Ð(˜a�Q�q”TÐ(Ð(Ð(rF   c                 ó   — g | ]
}|d          ‘ŒS )r   r�   r<  s     rE   r„   z-_inverse_mellin_transform.<locals>.<listcomp>  s   € Ð'Ð'Ð'˜Q�A�a”DÐ'Ð'Ð'rF   )Úgensr   rT   )Úhyperexpandrû   zCould not calculate integralé   Fzdoes not convergerk   ) r.   Úrewriter*   r5   r   r   rx   rP   r   rw   r)   r»   r3   r3  r;   r+   Ú
ValueErrorr™   r?  r_   rÒ   r‰   r   r   ÚargumentÚdeltar   r2   r*  r,  r   Únu)rÖ   rc   Úx_r:  r9  r  r�   rÃ   rŒ   rÀ   rÁ   ÚCÚer  r8  Úhr?  rn   rb   s    ` ``             @rE   r7  r7  ÷  sz  øøøø€ õ 	ˆsÐ.°¸DÐAÑAÔA€Að 	
�	Š	•%ÑÔ€AÝ�Q‰iŒi� A™œ­¨q©	¬	Ð2ð /)ñ /)ˆØŒ8ð 
	0ð%ð %ð %ð %ð %ð %ð %àœVð%ñ %ô %ˆDð )Ð( 4Ð(Ñ(Ô(ˆEØ'Ð' $Ð'Ñ'Ô'ˆDÝ�t�*ˆCØð =Ý˜S s§y¢yµÑ';Ô';Ð<Ñ<Ô<�Ø—8’8˜A˜r‘?”?¥C¨ KÐ/Ð/Ð/Ð/ð	Ý,¨Q°°5¸´8¸UÀ1¼XÑFÔF‰OˆAˆq�!�Q˜˜øÝ%ð 	ð 	ð 	ØˆHð	øøøð	Ý˜˜1˜a  1¡™fÑ%Ô%ˆAˆAøÝð 	ð 	ð 	ØˆHð	øøøàð 	>ØˆAˆAðIØ6Ð6Ð6Ð6Ð6Ð6Ø�K ‘N”N��øÝ&ð Ið Ið IÝ,Ø$ aÐ)GñIô Ið IðIøøøð Œ~ð >¥# a¤f¡+¤+°Ò"2Ð"2å˜a¥# a¡&¤&™jÑ)Ô)¨!¬&°¬)¬.¸Ô*;Ñ;Ý¥ A¡¤¨¡
Ñ+Ô+¨A¬F°1¬I¬N¸1Ô,=Ñ=ñ>�õ
 •C˜œ
‘O”OÑ$Ô$ q¤w­r¡zÒ1Ð2ˆð 	••R�˜AœD™	œ	¥S¨¬¡Y¤YÒ.°µR¸¼±X´XÀ±\Ò0AÑBÔBÝ�˜QœZ™œÑ)Ô)¨Q¬WµR©ZÒ7ñ9ô 9ð :ñ 	:ˆå�4ˆyˆØ�5Š=ˆ=Ý(Ø  !Ð%8ñ:ô :ð :à�#‘�|Š|˜A˜rÑ"Ô" DÐ(Ð(Ð(Ð(å
 Ð!1°1°bÑ
9Ô
9Ð9s0   Ã,$DÄ
DÄDÄ"D:Ä:
EÅEÅE"Å"E>Nc                   ój   — e Zd ZdZdZ ed¦  «        Z ed¦  «        Zd„ Ze	d„ ¦   «         Z
d„ Zd„ Zd	S )
Ú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                 óh   — |€t           j        }|€t           j        }t          j        | |||||fi |¤ŽS r]   )rK  Ú_none_sentinelrM   Ú__new__)ÚclsrÖ   rc   rb   rÀ   rÁ   Úoptss          rE   rO  zInverseMellinTransform.__new__C  s?   € Øˆ9Ý&Ô5ˆAØˆ9Ý&Ô5ˆAÝ Ô(¨¨a°°A°q¸!ÐDÐD¸tÐDÐDÐDrF   c                 ó~   — | j         d         | j         d         }}|t          j        u rd }|t          j        u rd }||fS )Nr@  é   )rP   rK  rN  )rA   rÀ   rÁ   s      rE   Úfundamental_stripz(InverseMellinTransform.fundamental_stripJ  sH   € àŒy˜Œ|˜TœY qœ\ˆ1ˆØÕ&Ô5Ð5Ð5ØˆAØÕ&Ô5Ð5Ð5ØˆAØ�!ˆtˆrF   c                 óž  — |                      dd¦  «         t          €Jt          t          t          t
          t          t          t          t          t          t          t          t          hat          |¦  «        D ]@}|j        r7|                     |¦  «        r"|j        t          vrt%          d|d|z  ¦  «        ‚ŒA| 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;   rT  r7  )rA   rÖ   rc   rb   rd   ra   r:  s          rE   re   z)InverseMellinTransform._compute_transformS  sÊ   € ð 	�	Š	�*˜dÑ#Ô#Ð#åÐå•U�C¥¥c­3µµd½DÅ$Ý�2ðˆHõ % QÑ'Ô'ð 	Ið 	IˆAØŒ}ð I §¢ q¡¤ð I¨a¬f½HÐ.DÐ.DÝ,Ð-=¸qØ%CÀaÑ%GñIô Ið IøàÔ&ˆÝ(¨¨A¨q°%ÐAÐA¸5ÐAÐ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  so   € ØŒNÔˆÝ˜˜!˜q˜b™'™	 A q­1¬?½1¼:Ñ+EÑ'EÀqÝ$%¤OµA´JÑ$>ñH?ð $@ñ Aô AØBCÅAÄDÁ&ÍÌÑBXñZð 	ZrF   N)rG   rH   rI   rJ   rŠ   r   rN  rZ  rO  r•   rT  re   ri   r�   rF   rE   rK  rK  5  s’   € € € € € ðð ð €EØ�U˜6‘]”]€NØ	ˆˆs‰Œ€BðEð Eð Eð ðð ñ „XððBð Bð Bð Zð Zð Zð Zð ZrF   rK  c           	      óV   —  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�   )rK  rƒ   )rÖ   rc   rb   r:  rd   s        rE   Úinverse_mellin_transformr^  i  s8   € ðj DÕ! ! Q¨¨5°¬8°U¸1´XÑ>Ô>ÔCÐLÐLÀeÐLÐLÐLrF   c                 óÀ  — t          || z  t          |t          j        z  |z  |z  ¦  «        z  |t          j        t          j        f¦  «        }|                     t          ¦  «        st          ||¦  «        t          j	        fS t          | |t          j        t          j        f¦  «        }|t          j        t          j        t          j
        fv s|                     t          ¦  «        rt          || d¦  «        ‚|j        st          || d¦  «        ‚|j        d         \  }}	|                     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   r[  r¸   r©   rr   r-   rœ   r¹   ÚNaNr;   rÒ   rP   )
ra   rb   r2  rÀ   rÁ   rl   r   rÖ   Ú
integral_frn   s
             rE   Ú_fourier_transformrb  ¥  s*  € õ 	�!�A‘#•c˜!�AœOÑ+¨AÑ-¨aÑ/Ñ0Ô0Ñ0°1µaÔ6HÍ!Ì*Ð2UÑVÔV€Aà�5Š5•‰?Œ?ð .Ý˜˜HÑ%Ô%¥q¤vÐ-Ð-å˜1˜q¥!Ô"4µa´jÐAÑBÔB€JØ•aÔ(­!¬*µa´eÐ<Ð<Ð<À
ÇÂÍxÑ@XÔ@XÐ<Ý$ T¨1Ð.TÑUÔUÐUàŒ>ð LÝ$ T¨1Ð.JÑKÔKÐKàŒf�QŒi�G€A€tØ‡u‚u�X�„ð MÝ$ T¨1Ð.KÑLÔLÐLå�Q˜Ñ!Ô! 4Ð'Ð'rF   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFourierTypeTransformz# Base class for Fourier transforms.c                 ó0   — 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ð 	MrF   c                 ó0   — t          d| j        z  ¦  «        ‚©Nz,Class %s must implement b(self) but does notrg  rQ   s    rE   rÁ   zFourierTypeTransform.bË  rh  rF   c                 ó‚   — t          ||||                      ¦   «         |                      ¦   «         | j        j        fi |¤ŽS r]   )rb  rÀ   rÁ   rD   rŠ   ©rA   ra   rb   r2  rd   s        rE   re   z'FourierTypeTransform._compute_transformÏ  sI   € Ý! ! Q¨Ø"&§&¢&¡(¤(¨D¯FªF©H¬HØ"&¤.Ô"6ðAð Aà:?ðAð Að 	ArF   c                 óì   — |                       ¦   «         }|                      ¦   «         }t          ||z  t          |t          j        z  |z  |z  ¦  «        z  |t          j        t          j        f¦  «        S r]   )rÀ   rÁ   r-   r   r   r[  r¸   r©   )rA   ra   rb   r2  rÀ   rÁ   s         rE   ri   z!FourierTypeTransform._as_integralÔ  s\   € Ø�FŠF‰HŒHˆØ�FŠF‰HŒHˆÝ˜˜!™�C ¥!¤/Ñ 1°!Ñ 3°AÑ 5Ñ6Ô6Ñ6¸½AÔ<NÕPQÔPZÐ8[Ñ\Ô\Ð\rF   N©rG   rH   rI   rJ   rÀ   rÁ   re   ri   r�   rF   rE   rd  rd  Ä  sd   € € € € € Ø-Ð-ðMð Mð MðMð Mð MðAð Að Að
]ð ]ð ]ð ]ð ]rF   rd  c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )Ú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                 ó   — dS rÜ   r�   rQ   s    rE   rÀ   zFourierTransform.aæ  ó   € ØˆqrF   c                 ó    — dt           j        z  S )Néþÿÿÿ©r   r\  rQ   s    rE   rÁ   zFourierTransform.bé  s   € Ø•!”$‰wˆrF   N©rG   rH   rI   rJ   rŠ   rÀ   rÁ   r�   rF   rE   rp  rp  Ú  sC   € € € € € ðð ð €Eðð ð ðð ð ð ð rF   rp  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�   )rp  rƒ   ©ra   rb   r2  rd   s       rE   Úfourier_transformrz  í  s+   € ðN *Õ˜A˜q !Ñ$Ô$Ô)Ð2Ð2¨EÐ2Ð2Ð2rF   c                   ó"   — e Zd ZdZdZd„ Zd„ ZdS )Ú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                 ó   — dS rÜ   r�   rQ   s    rE   rÀ   zInverseFourierTransform.a#  rs  rF   c                 ó    — dt           j        z  S rY  rv  rQ   s    rE   rÁ   zInverseFourierTransform.b&  s   € Ø•”‰vˆrF   Nrw  r�   rF   rE   r|  r|    sC   € € € € € ðð ð €Eðð ð ðð ð ð ð rF   r|  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�   )r|  rƒ   ©rÖ   r2  rb   rd   s       rE   Úinverse_fourier_transformr�  *  s+   € ðN 1Õ" 1 a¨Ñ+Ô+Ô0Ð9Ð9°5Ð9Ð9Ð9rF   c                 ó°  — t          || z   |||z  |z  ¦  «        z  |t          j        t          j        f¦  «        }|                     t
          ¦  «        st          ||¦  «        t          j        fS |j        st          || d¦  «        ‚|j
        d         \  }}	|                     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   r2  rÀ   rÁ   ÚKrl   r   rÖ   rn   s
             rE   Ú_sine_cosine_transformr„  X  sÇ   € õ 	�!�A‘#�a�a˜˜!™˜A™‘h”h‘, ¥A¤F­A¬JÐ 7Ñ8Ô8€Aà�5Š5•‰?Œ?ð .Ý˜˜HÑ%Ô%¥q¤vÐ-Ð-àŒ>ð LÝ$ T¨1Ð.JÑKÔKÐKàŒf�QŒi�G€A€tØ‡u‚u�X�„ð MÝ$ T¨1Ð.KÑLÔLÐLå�Q˜Ñ!Ô! 4Ð'Ð'rF   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚSineCosineTypeTransformzK
    Base class for sine and cosine transforms.
    Specify cls._kern.
    c                 ó0   — t          d| j        z  ¦  «        ‚rf  rg  rQ   s    rE   rÀ   zSineCosineTypeTransform.aw  rh  rF   c                 ó0   — t          d| j        z  ¦  «        ‚rj  rg  rQ   s    rE   rÁ   zSineCosineTypeTransform.b{  rh  rF   c           	      ó˜   — t          ||||                      ¦   «         |                      ¦   «         | j        j        | j        j        fi |¤ŽS r]   )r„  rÀ   rÁ   rD   Ú_kernrŠ   rl  s        rE   re   z*SineCosineTypeTransform._compute_transform€  sT   € Ý% a¨¨AØ&*§f¢f¡h¤h°·²±´Ø&*¤nÔ&:Ø&*¤nÔ&:ðEð Eð ?DðEð Eð 	ErF   c                 óâ   — |                       ¦   «         }|                      ¦   «         }| 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   r2  rÀ   rÁ   rƒ  s          rE   ri   z$SineCosineTypeTransform._as_integral†  sY   € Ø�FŠF‰HŒHˆØ�FŠF‰HŒHˆØŒNÔ ˆÝ˜˜!™˜A˜A˜a ™c !™e™HœH™ q­!¬&µ!´*Ð&=Ñ>Ô>Ð>rF   Nrn  r�   rF   rE   r†  r†  q  sc   € € € € € ðð ð
Mð Mð MðMð Mð Mð
Eð Eð Eð?ð ?ð ?ð ?ð ?rF   r†  c                   ó&   — e Zd ZdZdZeZd„ Zd„ ZdS )Ú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                 óJ   — t          d¦  «        t          t          ¦  «        z  S rY  ©r"   r   rQ   s    rE   rÀ   zSineTransform.aš  ó   € Ý�A‰wŒw•t�B‘x”xÑÐrF   c                 ó   — t           j        S r]   ©r   r  rQ   s    rE   rÁ   zSineTransform.b�  ó	   € ÝŒuˆrF   N©	rG   rH   rI   rJ   rŠ   r&   rŠ  rÀ   rÁ   r�   rF   rE   r�  r�  �  sH   € € € € € ðð ð €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ƒ   ry  s       rE   Úsine_transformr—  ¡  s*   € ðH '�=˜˜A˜qÑ!Ô!Ô&Ð/Ð/¨Ð/Ð/Ð/rF   c                   ó&   — e Zd ZdZdZeZd„ Zd„ ZdS )Ú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                 óJ   — t          d¦  «        t          t          ¦  «        z  S rY  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™  È  sH   € € € € € ðð ð €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ƒ   r€  s       rE   Úinverse_sine_transformr�  Ü  s+   € ðJ .Õ  1 aÑ(Ô(Ô-Ð6Ð6°Ð6Ð6Ð6rF   c                   ó&   — e Zd ZdZdZeZd„ Zd„ ZdS )Ú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                 óJ   — t          d¦  «        t          t          ¦  «        z  S rY  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Ÿ    sH   € € € € € ðð ð €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ƒ   ry  s       rE   Úcosine_transformr¥    s*   € ðH )�?˜1˜a Ñ#Ô#Ô(Ð1Ð1¨5Ð1Ð1Ð1rF   c                   ó&   — e Zd ZdZdZeZd„ Zd„ ZdS )Ú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                 óJ   — t          d¦  «        t          t          ¦  «        z  S rY  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§  ?  sH   € € € € € ðð ð €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ƒ   r€  s       rE   Úinverse_cosine_transformr«  S  s+   € ðH 0Õ! ! Q¨Ñ*Ô*Ô/Ð8Ð8°%Ð8Ð8Ð8rF   c                 ó´  — t          | t          |||z  ¦  «        z  |z  |t          j        t          j        f¦  «        }|                     t          ¦  «        st          ||¦  «        t          j        fS |j	        st          || d¦  «        ‚|j        d         \  }}|                     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ç   r2  rE  rl   r   rÖ   rn   s           rE   Ú_hankel_transformr­  ~  sÇ   € õ 	�!•G˜B  !¡Ñ$Ô$Ñ$ QÑ&¨­A¬FµA´JÐ(?Ñ@Ô@€Aà�5Š5•‰?Œ?ð .Ý˜˜HÑ%Ô%¥q¤vÐ-Ð-àŒ>ð LÝ$ T¨1Ð.JÑKÔKÐKàŒf�QŒi�G€A€tØ‡u‚u�X�„ð MÝ$ T¨1Ð.KÑLÔLÐLå�Q˜Ñ!Ô! 4Ð'Ð'rF   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zed„ ¦   «         ZdS )ÚHankelTypeTransformz+
    Base class for Hankel transforms.
    c                 óX   —  | j         | j        | j        | j        | j        d         fi |¤ŽS ©Nr@  )re   r@   rU   rX   rP   )rA   rd   s     rE   rƒ   zHankelTypeTransform.doit™  sA   € Ø&ˆtÔ& t¤}Ø'+Ô'=Ø'+Ô'>Ø'+¤y°¤|ð0ð 0ð */ð	0ð 0ð 	0rF   c                 ó.   — t          ||||| j        fi |¤ŽS r]   )r­  rŠ   )rA   ra   rç   r2  rE  rd   s         rE   re   z&HankelTypeTransform._compute_transform   s"   € Ý   A q¨"¨d¬jÐBÐB¸EÐBÐBÐBrF   c                 ó~   — t          |t          |||z  ¦  «        z  |z  |t          j        t          j        f¦  «        S r]   )r-   r(   r   r¨   r©   )rA   ra   rç   r2  rE  s        rE   ri   z HankelTypeTransform._as_integral£  s5   € Ý˜�' " a¨¡cÑ*Ô*Ñ*¨1Ñ,¨qµ!´&½!¼*Ð.EÑFÔFÐFrF   c                 óf   — |                       | j        | j        | j        | j        d         ¦  «        S r±  )ri   r@   rU   rX   rP   rQ   s    rE   r‘   zHankelTypeTransform.as_integral¦  s3   € à× Ò  ¤Ø!%Ô!7Ø!%Ô!8Ø!%¤¨1¤ñ/ô /ð 	/rF   N)	rG   rH   rI   rJ   rƒ   re   ri   r•   r‘   r�   rF   rE   r¯  r¯  ”  sl   € € € € € ðð ð0ð 0ð 0ðCð Cð CðGð Gð Gð ð/ð /ñ „Xð/ð /ð /rF   r¯  c                   ó   — e Zd ZdZdZdS )Ú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   € € € € € ðð ð €E€E€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ç   r2  rE  rd   s        rE   Úhankel_transformrº  »  s,   € ð\ -�?˜1˜a  BÑ'Ô'Ô,Ð5Ð5¨uÐ5Ð5Ð5rF   c                   ó   — e Zd ZdZdZdS )Ú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   € € € € € ðð ð €E€E€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Ö   r2  rç   rE  rd   s        rE   Úinverse_hankel_transformr¾  ù  s-   € ð\ 4Õ! ! Q¨¨2Ñ.Ô.Ô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è   rB  rê   r3  r7  rV  rK  r^  rb  rd  rp  rz  r|  r�  r„  r†  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Ð 4Ð 4Ð 4Ð 4Ð 4Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø =Ð =Ð =Ð =Ð =Ð =Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø +Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .Ø &Ð &Ð &Ð &Ð &Ð &ð!ð !ð !ð !ð !Ð0ñ !ô !ð !ð(Y ð Y ð Y ð Y ð Y ˜ñ Y ô Y ð Y ðxð ð ðð ð ð6 ˆ9�UÑÔ€ð1ð 1ð 1ð 
Ø+>Èð A;ð A;ð A;ñ 
„ðA;ðHð ð ð ð Ð'ñ ô ð ðB)2ð )2ð )2ðX*Bð *Bð *BðZ	ð 	ð 	ð 	ð 	 
ñ 	ô 	ð 	ðh2ð h2ð h2ðV	 €ˆ4�„ð8:ð 8:ð 8:ñ „ð8:ðt €ð1Zð 1Zð 1Zð 1Zð 1ZÐ.ñ 1Zô 1Zð 1Zðh5Mð 5Mð 5Mðx €ˆ4�„ð(ð (ð (ñ „ð(ð<]ð ]ð ]ð ]ð ]Ð,ñ ]ô ]ð ]ð,ð ð ð ð Ð+ñ ô ð ð&'3ð '3ð '3ðTð ð ð ð Ð2ñ ô ð ð&':ð ':ð ':ð\ €ˆ4�„ð(ð (ð (ñ „ð(ð0?ð ?ð ?ð ?ð ?Ð/ñ ?ô ?ð ?ð8ð ð ð ð Ð+ñ ô ð ð($0ð $0ð $0ðNð ð ð ð Ð2ñ ô ð ð(%7ð %7ð %7ðPð ð ð ð Ð-ñ ô ð ð($2ð $2ð $2ðNð ð ð ð Ð4ñ ô ð ð($9ð $9ð $9ðV €ˆ4�„ð(ð (ð (ñ „ð(ð*/ð /ð /ð /ð /Ð+ñ /ô /ð /ð4
ð 
ð 
ð 
ð 
Ð)ñ 
ô 
ð 
ð.6ð .6ð .6ðb
ð 
ð 
ð 
ð 
Ð0ñ 
ô 
ð 
ð.=ð .=ð .=ðl +Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *àÔ,Ð ØÔ.Ð Ø!Ô8Ð Ø Ô6Ð Ø"Ô:Ð Ø$Ô>Ð Ð Ð rF   