
    wgR                       d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZ dd	lmZmZmZmZm Z m!Z!m"Z"m#Z# dd
l$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z< ddl=m>Z>m?Z? ddl@mAZAmBZBmCZCmDZD ddlEmFZFmGZGmHZHmIZI ddlJmKZKmLZL ddlMmNZNmOZOmPZP ddlQmRZRmSZSmTZTmUZU ddlVmWZW ddlXmYZYmZZZ ddl[m\Z\m]Z]m^Z^ ddl_m`Z`maZambZbmcZcmdZd ddlemfZf ddlgmhZh ddlimjZj ddlkmlZl ddlmmnZn ddlompZp dd lqmrZr dd!lsmtZtmuZumvZv dd"lwmxZx dayd# Zzd$ Z{d% Z|ezd&        Z}ezd'        Z~ezd(        Ze
d)        Zezd*        Zezd+        Zezd,        Zezd-        Zezd.        Zezd/        Zezd0        Zezd1        Zezd2        Zezd3        Zezd4        Zezd5        Zezd6        Zezd7        Zd8 Zd9 Zezd:        Z G d; d<e]      ZdPd=Zezd>        Zezd?        Ze
d@        ZezdA        ZezdB        ZezdC        ZezdD        ZezdE        ZezdF        ZezdG        ZezdH        ZezdI        ZezdJ        ZezdK        Z G dL dMe]      ZdQdNZdO Zy)RzLaplace Transforms    N)SpiI)Add)cacheit)Expr)
AppliedUndef
Derivativeexpandexpand_complex
expand_mulexpand_trigLambdaWildFunctiondiffSubs)Mulprod)
_canonicalGeGtLt
UnequalityEqNe
Relational)ordered)DummysymbolsWild)reimargAbs
polar_liftperiodic_argument)explog)coshcothsinhasinh)MaxMinsqrt)	Piecewisepiecewise_exclusive)cossinatansinc)besselibesseljbesselkbessely)
DiracDelta	Heaviside)erferfcEi)digammagamma
lowergamma
uppergamma)SingularityFunction)	integrateIntegral)	_simplifyIntegralTransformIntegralTransformError)to_cnf	conjuncts	disjunctsOrAnd)
MatrixBase)_lin_eq2dict)PolynomialError)roots)Poly)together)RootSum)sympy_deprecation_warningSymPyDeprecationWarningignore_warnings)debugfc                       fd}|S )Nc                  f   ddl m} |s | i |S t        dk(  rt        dt        j
                         t        ddt        z  j                  | t        j
                         t        dz  aj                  dk(  sj                  d	k(  rDd
t         _        t        ddt        z  z  t        j
                          | i |}dt         _        n | i |}t        dz  at        ddt        z  d|t        j
                         t        dk(  rt        dt        j
                         |S )Nr   SYMPY_DEBUGzO
------------------------------------------------------------------------------file-LT-      _laplace_transform_integration&_inverse_laplace_transform_integrationFz**** %sIntegrating ...Tz---> zO------------------------------------------------------------------------------
)sympyr\   	_LT_levelprintsysstderr__name__)argskwargsr\   resultfuncs       \/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/integrals/laplace.pywrapzDEBUG_WRAP.<locals>.wrap1   s    % (((>-cjj1tI~t}}dC::	Q	!AA!II %E*d9n=CJJO4*6*F $E4*6*FQ	$y.&9

K>-cjj1     )rm   ro   s   ` rn   
DEBUG_WRAPrr   0   s    4 Krp   c                 d    ddl m} |r(t        ddt        z  | t        j
                         y y )Nr   r[   r_   r`   r]   )rd   r\   rf   re   rg   rh   )textr\   s     rn   _debugru   N   s&    ! T)^T2D rp   c                     fdfdfdfd}d }ddl m}  ||       }  || t              }  || t        fd      }  || t        |      } t        |       S )	a  
    Naively simplify some conditions occurring in ``expr``,
    given that `\operatorname{Re}(s) > a`.

    Examples
    ========

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

    >>> from sympy import Ne
    >>> _simplifyconds(Ne(1, x**3), x, 1)
    True
    >>> _simplifyconds(Ne(1, x**3), x, 2)
    True
    >>> _simplifyconds(Ne(1, x**3), x, 0)
    Ne(1, x**3)
    c                 `    | k(  ry| j                   r| j                  k(  r| j                  S y )Nra   )is_Powbaser'   )exss    rn   powerz_simplifyconds.<locals>.powerw   s*    799A66Mrp   c                    | j                        r|j                        ryt        | t              r| j                  d   } t        |t              r|j                  d   }| j                        r d|z  d| z        S  |      }|y	 |dkD  r,t        |       t              |z  k  t        j
                  k(  ry|dk  r-t        |       t              |z  k\  t        j
                  k(  ryyy# t        $ r Y yw xY w)z_ Return True only if |ex1| > |ex2|, False only if |ex1| < |ex2|.
            Else return None. Nr   ra   FT)has
isinstancer$   rj   r   true	TypeError)ex1ex2nabiggerr|   r{   s      rn   r   z_simplifyconds.<locals>.bigger~   s     771:#''!*c3((1+Cc3((1+C771:!C%3''#J9	1u#c(c!fai/AFF:1u#c(c!fai/AFF: ;u 		s   0C3  0C3 3	C?>C?c                     | j                   st        | t              r|j                   st        |t              s| |k  S  | |      }|| S | |k  S )z simplify x < y )is_positiver   r$   )xyrr   s      rn   repliez_simplifyconds.<locals>.replie   sL    *Q"4As);EN1aL=5LArp   c                 8     | |      }|dv ryt        | |      S )NTFT)r   )r   r   br   s      rn   repluez_simplifyconds.<locals>.replue   s&    1aL!Qrp   c                 >    | dv rt        |       S  | j                  | S )Nr   )boolreplace)rz   rj   s     rn   replz_simplifyconds.<locals>.repl   s$    8Orzz4  rp   r   )collect_absc                      ||       S Nrq   )r   r   r   s     rn   <lambda>z _simplifyconds.<locals>.<lambda>   s    va| rp   )sympy.simplify.radsimpr   r   r   r   r   )	exprr{   r   r   r   r   r   r|   r   s	    ``   @@@rn   _simplifycondsr   V   s`    B, !
 3tDb&!Db34Dj&)DT7Nrp   c                 @    t        | | j                  t                    S )zs
    Expand an expression involving DiractDelta to get it as a linear
    combination of DiracDelta functions.
    )rO   atomsr:   r   s    rn   expand_dirac_deltar      s     djj455rp   c                   t        d      | j                  t              ryt        | t	         z        z  t
        j                  t
        j                  f      }|j                  t              s;t        |j                        |      t
        j                  t
        j                  fS |j                  sy|j                  d   \  }}|j                  t              ryfd}t        |      D cg c]
  } ||       }}|D 	cg c]0  }	|	d   t
        j                   k7  s|	d   t
        j                  ur|	2 }
}	|
s&|D 	cg c]  }	|	d   t
        j                   k7  s|	 }
}	t#        t%        |
            }d |j'                  fd       |sy|d   \  }}fd	}|rt)        ||      }t)        ||      }t        |j                        |       ||      t+         ||            fS c c}w c c}	w c c}	w )
z The backend function for doing Laplace transforms by integration.

    This backend assumes that the frontend has already split sums
    such that `f` is to an addition anymore.
    r{   Nr   c                    ddl m} t        j                  }t        j                  }t        t        |             } t        dt        g      \  }}}}}}	}
|t        t        |z   |z              z  |k  |t        t        |z   |z              z  |k  t        t        |z   |z  |z  |            |k  t        t        |z   |z  |z  |            |k  t        t        t        |z         |z  |z  |            |k  t        t        t        |z         |z  |z  |            |k  f}| D ]  }t        j                  }g }t        |      D ]  }|j                  r$|j                   j"                  v r|j$                  }|j                  r"t'        |t(        t*        f      r|j,                  }|D ]  }|j/                  |      s n r9|   j0                  r*|   |   z  t2        dz  k(  rt5        |   z          dk  }|j/                  |t7        |t        t        |
z              z  |z        t        |z        |	z  z  z
  dk        sN|j/                  t7        |t        t        |z  |
z  |            |z  z
        t        |z        |	z  z  dk        sW|j/                  |t7        t        t        t              |z  |
z  |            |z        t        |z        |	z  z  z
  dk        r*t9        fd||||	|
fD              rt5              |   kD  }|j;                  t4        d       j=                  t5                    }|j                  r0|j>                  dv s"|jA                        s|jA                        s||gz  }O ||      }|j                  r|j>                  dv r||gz  }z|jB                  k(  r  y	tE        |jB                  |      } |t        j                  urtG        ||      }tI        |tK        |       } ||j                  r|jL                  fS |fS )
z7 Turn ``conds`` into a strip and auxiliary conditions. r   _solve_inequalityzp q w1 w2 w3 w4 w5clsexclude   c              3   <   K   | ]  }|   j                     y wr   )r   ).0wildms     rn   	<genexpr>zH_laplace_transform_integration.<locals>.process_conds.<locals>.<genexpr>   s      -TQtW00 -s   c                 D    | j                         j                         d   S Nr   )r   as_real_imag)r   s    rn   r   zG_laplace_transform_integration.<locals>.process_conds.<locals>.<lambda>   s    !((*"9"9";A"> rp   )z==z!=N)'sympy.solvers.inequalitiesr   r   NegativeInfinityr   rJ   rI   r   r    r$   r#   r&   r%   InfinityrK   is_Relationalrhsfree_symbolsreversedr   r   r   reversedsignmatchr   r   r!   r2   allr   subsrel_opr~   ltsr.   r-   rM   rL   	canonical)condsr   r   auxpqw1w2w3w4w5patternsca_aux_dpatd_solnr   r{   ts                      @rn   process_condsz5_laplace_transform_integration.<locals>.process_conds   s   @ff&-(#* dQC$9 1b"b"b c#q2vqj/""R'c#q2vqj/""b(!1r6A+a-45:!1r6A+a-45;!:a"f#5"9!";R@ABF!:a"f#5"9!";R@ARGI  -	*ABDq\ &+??qAEE,>,>'>

A??z!b"X'>A# CA 1))aeAaDjBqD.@A"I*AGGABs3qt9~$5b$8 9#ae*b. HH1LMA$5aeBh$B CB FFGArE
B')*+,A C 1*Q-2CB2F JKBN!!R%j"n- -/012A  -BB>, - -1!AYY>@@DRUA  OOqxx</G66!9BFF1IQCKD(Q/))T[[L-HQCKD88q=TXXr*BM&+N #AJ#r4y)[-	*\ 3#4#4#--==#==rp   ra   c                 ,    | dv ry| j                         S )Nr   r   )	count_opsr   s    rn   cntz+_laplace_transform_integration.<locals>.cnt  s    = ~~rp   c                 &    | d     | d         fS Nr   ra   rq   )r   r   s    rn   r   z0_laplace_transform_integration.<locals>.<lambda>  s    qteS1Y/ rp   keyc                 (    | j                        S r   )r   )r   r{   s_s    rn   sbsz+_laplace_transform_integration.<locals>.sbs"  s    yyBrp   )r   r~   r:   rD   r'   r   Zeror   rE   rF   r   r   r   is_Piecewiserj   rK   falselistr   sortr   r   )fr   r   simplifyFcondr   r   r   r   conds2r   r   r   r   r{   s    ``           @@rn   rb   rb      s    	c
AuuZ!C1I+1661::67A55?2113E3EqvvMM>>ffQiGAtuuX=>~ (17!]17E7 :A!A$gg#A$a&8&88  :F :"6adaggo!66!E  
JJ/J01XFAs 1a#S!Q'QVVAr]H-s1vz#c(7KKK- 8: 7s   9G:G?*G?H'Hc                     t        | t              s| S | j                  |      x}|j                         S | j                  }| j
                  D cg c]  }t        ||       }} || S c c}w )a  
    This is an internal helper function that traverses through the epression
    tree of `f(t)` and collects arguments. The purpose of it is that
    anything like `f(w*t-1*t-c)` will be written as `f((w-1)*t-c)` such that
    it can match `f(a*t+b)`.
    )r   r   as_polyas_exprrm   rj   _laplace_deep_collect)r   r   r   rm   r#   rj   s         rn   r   r   *  si     aYYq\&yy{66D56VV<c!#q)<D<; =s   A*c                  D   t        d      t        d      } t        dg      }t        dg      }t        dg      }t        dg      }t        dg      }fd	}t        d
       g ||| z  t        j                  t        j
                  |ft        |z  |z
        t        |  |z  |z        t        |      z  t        t        |dkD  |dk\        t        |dk  |dk              t        j                  |ft        |z  |z
        t        d      t        t        |dk  |dk\        t        |dkD  |dk              t        j                  |ft        |z  |z
        t        |  |z  |z        | z  t        |dkD  |dkD        t        j
                  |ft        |z  |z
        dt        |  |z  |z        z
  | z  t        |dk  |dk        t        j
                  |ft        |z  |z
        d| z  t        |dkD  |dk        t        j
                  |ft        |z  |z
        dt        |dk  |dkD        t        j
                  |fd| dz  z  t        j                  t        j
                  |fd|z  |z   z  t        | |z  | z         t        | |z  | z        z  |z  t        t        ||z              t        k  t        j
                  |fdt!        |z  |z         z  t!        |t        z  | z        t        ||z  | z        z  t#        t!        ||z  | z              z  |z  t        t        ||z              t        k  t        j
                  |f|z  |z   t        d       dz  z  d|t        d       dz  z  z  dt        | z  |z  t        d      dz  z  z  t        ||z  | z        z  t#        t!        ||z  | z              z  |z  z
  t        t        ||z              t        k  t        j
                  |ft!              |z   z  t!        t        | z        t        t!        |      z  t        || z        z  t#        t!        || z              z  z
  t        t        |            t        k  t        j
                  |fd|t!              z  dz  z   z  t        |t        d      dz  z  z  t        || z        z  t#        t!        || z              z  t        j                  t        j
                  |f|z  t%        |dz         | |dz   z  z  |dkD  t        j
                  |f|z  |z   |z  t'        |dz   ||z  | z        t        | |z  | z        z  | |dz   z  z  |z  t        |dkD  t        t        ||z              t        k        t        j
                  |f|z  |z   z  ||z  t%        |dz         z  t'        | || z        z  t        |dkD  t        t        |            t        k        t        j
                  |ft        |z  |z
        t        |       | |z
  z  t        j                  t)        |      |ft        |z  |z
        z  t        |       | |z
  dz  z  t        j                  t)        |      |f|z  t        |z        z  t%        |dz         | |z
  |dz   z  z  t)        |      dkD  t)        |      |ft        | dz  z        t!        t        dz  |z        t        | dz  dz  |z        z  t#        | t!        d|z        z        z  t)        |      dkD  t        j
                  |ft        | dz  z        z  dd|z  z  dt!        t              z  d|z  t        d      dz  z  z  | z  t#        | t!        d|z        z        z  z
  t)        |      dkD  t        j
                  |ft        | z        dt!        || z        z  t+        ddt!        || z        z        z  t)        |      dk\  t        j
                  |ft!              t        | z        z  t        d      dz  t!        t        | dz  z        z  ddt!        || z        z  z   z  t        dt!        || z        z        z  t)        |      dk\  t        j
                  |ft        | z        t!              z  t!        t        | z        t        dt!        || z        z        z  t)        |      dk\  t        j
                  |ft        | z        t!              z  z  t!        t        |z        t        dt!        || z        z        z  t)        |      dkD  t        j
                  |f|z  t        | z        z  d|| z  |dz   dz  z  z  t+        |dz   dt!        || z        z        z  t)        |      dkD  t        j
                  |ft        dt!        |z        z        | dz  t!        t        |z        | t        d       dz  z  z  t        || z        z  t#        t!        || z              z  z
  t        t        |            t        k  t        j
                  |ft        dt!        |z        z        t!              z  t        | z  t        d      dz  z  t        || z        z  t#        t!        || z              z  t        t        |            t        k  t        j
                  |ft        | t               z        ||  z  t-        | |      z  t        j                  t        j
                  |ft        | t              z        || z  t'        |  |      z  t)        |      dkD  t        j
                  |ft/        |z        t/        t        t        j0                        | z  |z         | z  |dkD  t        j
                  |ft/        d|z  z         t        | |z         | z  t        |  |z        z  t        t        |            t        k  t        j
                  |ft/        |z  |z         t/        |      t        | |z  |z        | z  |z  t        |  |z        z  z
  | z  |z  t        |dkD  t        t        |            t        k        t        j
                  |ft/              t!              z  t!        t        | z         t/        d| z  t        t        j0                        z        z  t        j                  t        j
                  |f|z  t/              z  t%        |dz         | | dz
  z  z  t3        |dz         t/        |       z
  z  t)        |      dkD  t        j
                  |ft/        |z        dz  t/        t        t        j0                        | z  |z        dz  t        dz  dz  z   | z  |dkD  t        j
                  |ft5        |z        || dz  |dz  z   z  t        j                  t        t7        |            |ft        t5        |z              || dz  |dz  z   z  t9        t        | z  dz  |z        z  |dkD  t        j
                  |ft5        |z        z  t;        || z        t        j                  t        t7        |            |ft5        |z        dz  z  t/        dd|dz  z  | dz  z  z         dz  t        j                  dt        t7        |            z  |ft5        |z        dz  dz  z  |t;        d|z  | z        z  | t/        dd|dz  z  | dz  z  z         z  dz  z
  t        j                  dt        t7        |            z  |ft5        dt!        |z        z        t!        t        |z        | z  t!        |       z  t        | | z        z  t        j                  t        j
                  |ft5        dt!        |z        z        z  t        t=        t!        || z              z  t        j                  t        j
                  |ft?        |z        | | dz  |dz  z   z  t        j                  t        t7        |            |ft?        |z        dz  | dz  d|dz  z  z   | dz  d|dz  z  z   z  | z  t        j                  dt        t7        |            z  |ft!              t?        dt!        |z        z        z  t!        t              dz  | t        d       dz  z  z  | d|z  z
  z  t        | | z        z  t        j                  t        j
                  |ft?        dt!        |z        z        t!              z  t!        t        | z        t        | | z        z  t        j                  t        j
                  |ft5        |z        t5        |z        z  d|z  |z  | z  | dz  ||z   dz  z   z  | dz  ||z
  dz  z   z  t        j                  t        t7        |            t        t7        |            z   |ft?        |z        t5        |z        z  || dz  |dz  z
  |dz  z   z  | dz  ||z   dz  z   z  | dz  ||z
  dz  z   z  t        j                  t        t7        |            t        t7        |            z   |ft?        |z        t?        |z        z  | | dz  |dz  z   |dz  z   z  | dz  ||z   dz  z   z  | dz  ||z
  dz  z   z  t        j                  t        t7        |            t        t7        |            z   |ftA        |z        || dz  |dz  z
  z  t        j                  t        t)        |            |ftC        |z        | | dz  |dz  z
  z  t        j                  t        t)        |            |ftA        |z        dz  d|dz  z  | dz  d|dz  z  | z  z
  z  t        j                  dt        t)        |            z  |ftC        |z        dz  | dz  d|dz  z  z
  | dz  d|dz  z  | z  z
  z  t        j                  dt        t)        |            z  |ftA        |z        z  t/        | |z   | |z
  z        dz  t        j                  t        t)        |            |f|z  tA        |z        z  t%        |dz         dz  | |z
  | dz
  z  | |z   | dz
  z  z
  z  |dkD  t        |      |f|z  tC        |z        z  t%        |dz         dz  | |z
  | dz
  z  | |z   | dz
  z  z   z  |dkD  t        |      |ftA        dt!        |z        z        t!        t        |z        | z  t!        |       z  t        || z        z  t        j                  t        j
                  |ftC        dt!        |z        z        d| z  t!        t        |z        | z  t!        |       z  t        || z        z  t=        t!        || z              z  z   t        j                  t        j
                  |ft!              tA        dt!        |z        z        z  t        t        d      dz  z  | t        d       dz  z  z  | dz  |z   z  t        || z        z  t=        t!        || z              z  |t        d      dz  z  | dz  z  z
  t        j                  t        j
                  |ft!              tC        dt!        |z        z        z  t        t        d      dz  z  | t        d       dz  z  z  | dz  |z   z  t        || z        z  t        j                  t        j
                  |ftA        dt!        |z        z        t!              z  t        t        d      dz  z  | t        d       dz  z  z  t        || z        z  t=        t!        || z              z  t        j                  t        j
                  |ftC        dt!        |z        z        t!              z  t        t        d      dz  z  | t        d       dz  z  z  t        || z        z  t        j                  t        j
                  |ftA        t!        |z              dz  t!              z  t        t        d      dz  z  dz  | t        d       dz  z  z  t        || z        dz
  z  t        j                  t        j
                  |ftC        t!        |z              dz  t!              z  t        t        d      dz  z  dz  | t        d       dz  z  z  t        || z        dz   z  t        j                  t        j
                  |ft=        |z        t        | dz  d|z  dz  z        t#        | d|z  z        z  | z  dt        t        |            z  t        k  t        j
                  |ft=        t!        |z              t!        |      t!        | |z         z  | z  t        j                  tE        t        j
                  t)        |             |ft        |z        t=        t!        |z              z  t!        |      t!        |       z  | |z
  z  t        j                  tE        t        j
                  t)        |            |ft=        t!        |z        dz        dt        t!        || z               z
  | z  t)        |      dkD  t        j
                  |ft#        t!        |z              t!        | |z         t!        |      z
  t!        | |z         z  | z  t        j                  t)        |       |ft        |z        t#        t!        |z              z  d| t!        || z        z   z  t        j                  t        j
                  |ft#        t!        |z        dz        t        t!        || z               | z  t)        |      dkD  t        j
                  |ftG        ||z        ||z  t!        | dz  |dz  z         | t!        | dz  |dz  z         z   |z  z  z  t)        |      dkD  t        t7        |            |f|z  tG        ||z        z  d|z  t!        t              z  t%        |t        jH                  z         z  ||z  z  | dz  |dz  z   | t        jH                  z
  z  z  t        t)        |      t        jH                   kD  tK        ||            t        t7        |            |f|z  tG        ||z        z  d|dz   z  t!        t              z  t%        |t        d      dz  z         z  ||z  z  | z  | dz  |dz  z   | t        d      dz  z
  z  z  t        t)        |      dkD  tK        ||dz               t        t7        |            |ftG        ddt!        |z        z        t        | | z        | z  t        j                  t        j
                  |f|z  tG        |dt!        |z        z        z  ||dz  z  | | dz
  z  z  t        | | z        z  t        t)        |      dkD  tK        ||t        jH                  z              t        j
                  |ftG        d|t!        dz  |z  z         z        t        || z  |t!        | dz  |dz  z         z  z
        t!        | dz  |dz  z         z  t        t        |            t        k  t        t7        |            |ftM        ||z        ||z  t!        | dz  |dz  z
        | t!        | dz  |dz  z
        z   |z  z  z  t)        |      dkD  t        t)        |            |f|z  tM        ||z        z  d|z  t!        t              z  t%        |t        jH                  z         z  ||z  z  | dz  |dz  z
  | t        jH                  z
  z  z  t        t)        |      t        jH                   kD  tK        ||            t        t)        |            |f|z  tM        ||z        z  d|dz   z  t!        t              z  t%        |t        d      dz  z         z  ||z  z  | z  | dz  |dz  z
  | t        d      dz  z
  z  z  t        t)        |      dkD  tK        ||dz               t        t)        |            |f|z  tM        |dt!        |z        z        z  ||dz  z  | | dz
  z  z  t        || z        z  t        t)        |      dkD  tK        ||t        jH                  z              t        j
                  |ftO        d|z        dt        z  tQ        | |z        z  t!        | dz  |dz  z         z  t        j                  t        t7        |            |ft+        d|z        t/        | t!        | dz  |dz  z
        z   |z        t!        | dz  |dz  z
        z  t        j                  t)        |       |f}|| fS )aY  
    This is an internal helper function that returns the table of Laplace
    transform rules in terms of the time variable `t` and the frequency
    variable `s`.  It is used by ``_laplace_apply_rules``.  Each entry is a
    tuple containing:

        (time domain pattern,
         frequency-domain replacement,
         condition for the rule to be applied,
         convergence plane,
         preparation function)

    The preparation function is a function with one argument that is applied
    to the expression before matching. For most rules it should be
    ``_laplace_deep_collect``.
    r   r{   r   r   r   r   tauomegac                     t        |       S r   )r   )r   r   s    rn   dcoz!_laplace_build_rules.<locals>.dcoT  s    ,Q22rp   z&_laplace_build_rules is building rulesr   ra   r      g      ?         ))r   r    ru   r   r   r   r:   r'   r$   rL   rM   r   r;   r>   r#   r   r/   r=   r@   rB   r!   r8   rA   r(   
EulerGammar?   r3   r"   r*   r4   r<   r2   r+   r)   r-   r7   Halfr   r6   r9   r,   )	r{   r   r   r   r   r   r   laplace_transform_rulesr   s	           @rn   _laplace_build_rulesr   ;  s    $ 	c
Ac
AS1#AS1#AS1#A
uqc
"C1#&E2
34y	
AaC	
	y 
AaCE	C1QKA.	CAqAvAE16 2	3	
		S	"y 
AaCE	AaD	CAqAvAE16 2	3	
		S	"y 
1Q3q5	3r!tAv;q=	QUAE	AFFC	)y 
1Q3q5	Ac1"Q$q&kM1,	QUAE	AFFC	)y 
1Q3q5	1Q3	QUAF	QVVS	*y 
1Q3q5	1	QUAE	AFFC	)y" 
AadF	
	#y& 
AaCES!Aa[LQBqDF+A-	S1X	QVVS	*'y* 
4!A;QrT!VS1QZ/T!A#a%[0AA!C	S1X	QVVS	*+y. A#a%AaD57		
1!uQw<2a46QqT!V,,S1QZ7$tAaCE{:KKAM	M	S1X	QVVS	*/y4 
a!A#RT
2d1g:c!A#h#6tD1I#FF	SVr	1663	(5y8 
Ad1gIC 	!2a!A$q&k>#ac(#:4QqS	?#J	
	9y< 
AuQqSz!ac("	
R	=y@ A#a%!Z!QqSU+C1QK7AaC@B	QVSQqS]R'	(!&&#	7AyD 
AqsQT%!*_ZAaC%88	QVSQ[2%	&	5EyH 
QqSWsC4y!A#	
A	IyL 
3qs3w<cTAaC!8+	
A	MyP 
Ac!A#hac
AaC1Q3</	ARUC	!QyT 
aR1WtBqDF|C1QqM1$qac{2CC	AAFFC	!UyX 
3r!Q$w<	
AaC48QqSAaDFO+A-d1T!A#Y;.??	?	AAFFC	!Yy^ 
aRTAd1Q3iK1T!A#Y; 77	A!QVVS	"_yb 
aaRT		
1aR1W	q4!9}	-c"T!A#Y,.?	?	A!QVVS	"cyh 
aRT47	DAJs2d1Q3i<'88	A!QVVS	"iyl 
aRTAd1gI	RT
3r$qs)|+< <	AAFFC	!myp 
Ac1"Q$iAaCAaC7++GAaC4!9,EE	AAFFC	!qyt 
RQqS	\		
RbdA1aL(QqS1DacOC	C	SVr	1663	(uyz 
RQqS	\	47	"RTQqT!V$4S1X$=d4!9o$M	SVr	1663	({y~ 
aRQBZ!qb'*Q"22	
	yB 
aRAYAj!Q//	AAFFC	!CyF 
QqSCALL)!+A-..q0	
Q	GyJ 
QqsUc!A#hYq[QBqD)	SVr	1663	(KyN 
QqSUc!fS1QZ\!^Br!tH44a79	QUCAK"$	%qvvs	4OyR 
QQ$r!t*S1S->)>%??	
	SyV 
Ac!feAaCjaRT*GAaCLQ,?@	AQVVS	"WyZ 
QqS1s3q||,Q.q0114RU1W<a?	
Q	[y^ 
U1Wuad5!8m,	
RY	&_yb 
Sq\	E1a4q=1$r!tAve|2DD	AFFC	!cyf 
U1WaeAg	
RY	&gyj 
U1Wq	C!E1H*QT/ 1214	
3r%y>!3	(kyn 
U1WqA		tAeGAI	qQqz!Q$%6!779	9	
3r%y>!3	(oyt 
QtAaCy[	41:a<Q/QBqD	9	
	uyx 
QtAaCy[	!	RD1I.	
	yy| 
U1Wq!Q$uax-(	
RY	&}y@ 
U1Wq1a4%(
?QT!E1H*_=a?	
3r%y>!3	(AyD 
aQtAaCy[!	!48A:a1Q4%'l#:AacE#B3r!t9#L	
	EyH 
QtAaCy[	$q'	!41:c1"Q$i#7	
	IyL 
QqS#ac(	AaCE!GQT1Q3(]3QT1Q3(]C	
RUC1J&	-MyP 
QqS#ac(	Aq!tAqDyA~.1acAX>1acAXN	
RUC1J&	-QyT 
QqS#ac(	Aq!tAqDyA~.1acAX>1acAXN	
RUC1J&	-UyX 
acAq!tAqDyM	
RUS	"Yy\ 
acAq!tAqDyM	
RUS	"]y` 
acAqAvq!tAadF1H}-	
3r!u:s	$ayd 
acA1Qq!tVad1QT6!8m4	
3r!u:s	$eyh 
ac1c1Q31+&q(	
RUS	"iyl 
Ad1Q3iqsA!r!t}acaRT]'BC	
RQ	myp 
Ad1Q3iqsA!r!t}acaRT]'BC	
RQ	qyt 
aQqS	k	DAJqLa0QqS9	
	uyx 
aQqS	k	AaCRT
1T!W 4S1X =c$qs)n LL	
	yy~ GD4!9%%1aLadU1W%qs1u-!Hac^$$%!QKB$78FFAFFC		!}yF 
aaQqS	k"	"B1aLadU1W$=qs1u$Ec!A#h$N	
	GyJ 
aQqS	k	47	"	ad1fa1Q4%'l	"3qs8	+c$qs)n	<FFAFFC	!KyP 
aQqS	k	47	"B1aLadU1W$=c!A#h$F	
	QyT 
d1Q3i!	DG	#R!A$q&\!^A1aL%@#ac(1*%M	
	UyX 
d1Q3i!	DG	#R!A$q&\!^A1aL%@#ac(1*%M	
	Yy\ 
QqS3q!tQqS1H}%d1ac7m3A5	
3s1v;	QVVS	*]y` 
T!A#Yaac*1,	
QVVbeV$c	+ayd 
QqS#d1Q3i.	 $q'$q'/1Q3"7	
QVVRU#S	*eyh 
T!A#Yq[	Ac4!9*o-q0	AAFFC	!iyl 
d1Q3i4!9T!W,d1Q3i79	
"Q%	myp 
QqS$tAaCy/	!1aQqS	k?	
	qyt 
d1Q3ik	Cac
OA-	AAFFC	!uyx 
AaC!Q$QT!Q$Y41QT	?1BQ0F FG	ASAZ	&yy| 
Aga1o		
Ad2huQqvvX	&q!t	+QT!Q$Y1"QVV),D	D	RUaffW_bAh	'RUS	:}yB 
Aga1o		
QqS$r(	51Q46?	*1a4	/	11a4191Q46	2J	J	RURZAqs	$c"Q%j#	7CyH 
Ad1Q3iK	 #qbd)A+	
	IyL 
Q1T!A#Y;'	'QqS!qbd));C1I)E	RURZAqx	)1663	8MyP 
Ad1a4!8n$	%	QqS41QT	?""	#DAadO	3	SVr	3r!u:s	,QyV 
AaC!Q$QT!Q$Y41QT	?1BQ0F FG	ASAZ	&WyZ 
Aga1o		
Ad2huQqvvX	&q!t	+QT!Q$Y1"QVV),D	D	RUaffW_bAh	'RUS	:[y` 
Aga1o		
QqS$r(	51Q46?	*1a4	/	11a4191Q46	2J	J	RURZAqs	$c"Q%j#	7ayf 
Q1T!A#Y;'	'QqS!qbd));C!H)D	RURZAqx	)1663	8gyj 
AaC"R%ac
*41QT	?:	
RUS	"kyn 
AaC#q41QT	?2A56QT!Q$YH	
"Q%	oyt #Aq((rp   c                    t        d|g      }t        dd      }| j                  |      }|r||   j                  d   j	                  |      } |j                  ||z        }|r[||   j
                  rL||   dk7  rDt        d       t        d||   z  ||   j                  |      z  ||||   z  d	      \  }}	}
||	|
fS y
)z
    This function applies the time-scaling rule of the Laplace transform in
    a straight-forward way. For example, if it gets ``(f(a*t), t, s)``, it will
    compute ``LaplaceTransform(f(t)/a, t, s/a)`` if ``a>0``.
    r   r   gra   )nargsr   z     rule: time scaling (4.1.4)Fr   N)	r    r   r   rj   collectr   ru   _laplace_transformrm   )r   r   r{   r   r   ma1r#   ma2r   prcrs              rn   _laplace_rule_timescaler    s     	S1#AS"A
''!*C
!fkk!n$$Q'cii!n3q6%%#a&A+45*#a&QQ'Ac!fHuFIAr2r2;rp   c                    t        d|g      }t        d      }t        d      }| j                  t        |      |z        x}r<||   j                  ||z
        x}r||   j                  rOt	        d       t        ||   j                  ||||   z         ||d      \  }}	}
t        ||    |z        |z  |	|
fS ||   j                  r&t	        d       t        ||   ||d      \  }}	}
||	|
fS ||   j                  ||z
        x}rw||   j                  r;t	        d	       t        d
t        |||   z
        z
  ||   z  ||d      \  }}	}
||	|
fS ||   j                  rt	        d       ddt        j                  fS y)a  
    This function deals with time-shifted Heaviside step functions. If the time
    shift is positive, it applies the time-shift rule of the Laplace transform.
    For example, if it gets ``(Heaviside(t-a)*f(t), t, s)``, it will compute
    ``exp(-a*s)*LaplaceTransform(f(t+a), t, s)``.

    If the time shift is negative, the Heaviside function is simply removed
    as it means nothing to the Laplace transform.

    The function does not remove a factor ``Heaviside(t)``; this is done by
    the simple rules.
    r   r   r   r   z     rule: time shift (4.1.4)Fr   z8     rule: Heaviside factor; negative time shift (4.1.4)z      rule: Heaviside window openra   z"     rule: Heaviside window closedr   N)r    r   r;   r   ru   r   r   r'   is_negativer   r   )r   r   r{   r   r   r   r   r   r   r  r  s              rn   _laplace_rule_heavisider  *  s    	S1#AS	AS	AggilQ&''s'a&,,q1u%%3%1v!!67.FKK1s1v:.1uF	2rSVGaK(1,b"551v!!NP.s1vq!eL	2r2r{"a&,,q1u%%3%1v!!9:.1s1v:..#a&8!QP	2r2r{"1v!!;<1aff~%rp   c                 P   t        d|g      }t        d      }t        d      }| j                  t        |      |z        }|rc||   j                  |      j                  ||z        }|r;t	        d       t        ||   ||||   z
  d      \  }}	}
||	t        ||         z   |
fS y)	a  
    If this function finds a factor ``exp(a*t)``, it applies the
    frequency-shift rule of the Laplace transform and adjusts the convergence
    plane accordingly.  For example, if it gets ``(exp(-a*t)*f(t), t, s)``, it
    will compute ``LaplaceTransform(f(t), t, s+a)``.
    r   r   r   zz$     rule: multiply with exp (4.1.5)Fr   N)r    r   r'   r   ru   r   r!   )r   r   r{   r   r   r  r   r   r   r  r  s              rn   _laplace_rule_expr	  T  s     	S1#AS	AS	A
''#a&(
C
!fnnQ%%ac*9:*3q61aAh49;IAr2r"SV*}b))rp   c           
      ^   t        d|g      }t        d|g      }t        d      }t        d      }| j                  t        |      |z        }|rQ||   j                  t              s8||   j	                  |      j                  ||z  |z
        }|rt        d       ||   ||   z  }	t        |	      dk\  rt        |	      dk(  rt        ||    ||   z  |z        ||   z  }
|
j                  t        t              r#|
j                  t              j                         }
|
j                         D cg c]  }|j                  |||   ||   z         c}\  }}|dk7  r*||z  ||   z  t         j"                  t         j$                  fS ydt         j"                  t         j$                  fS ||   j'                  |      rt)        ||   |      }|i k7  rt+        |j-                               d	hk(  rt/        ||   |      }t1        t3        |j5                               D cg c]V  }t        |      dk(  rFt        |      dk\  r8t        | |z        ||   j                  ||      z  |j                  ||      z  X c} }|t         j"                  t         j$                  fS yc c}w c c}w )
z
    If this function finds a factor ``DiracDelta(b*t-a)``, it applies the
    masking property of the delta distribution. For example, if it gets
    ``(DiracDelta(t-a)*f(t), t, s)``, it will return
    ``(f(a)*exp(-a*s), -a, True)``.
    r   r   r   r   r  z#     rule: multiply with DiracDeltar   Nra   )r    r   r:   r~   r   ru   r!   r"   r'   r3   r2   rewriter5   ratsimpas_numer_denomr   r   r   r   is_polynomialrQ   setvaluesr   r   r   keys)r   r   r{   r   r   r   r  r   r   locfnr   r   r   rosloper   s                    rn   _laplace_rule_deltar  k  sY    	S1#AS1#AS	AS	A
''*Q-/
"C
3q6::j)!fnnQ%%ac!e,89a&Q-C#w!|31#a&Q)*3q6166#s# D)113B:<:K:K:MNQq#a&Q-0N16aCAJ(:(:AFFCC1--qvv66q6"s1vq!BRxC		,3SVQ#BGGIM"Q%1*A! 1"Q$iAAq 11%**Q2BB MN 1--qvv66 OMs   7"J%$AJ*c                 :   t         j                  g}t         j                  g}t        j                  |       D ]N  }|j	                  t
        t        t        t        t              r|j                  |       >|j                  |       P t        | }t        | }||fS )z
    Helper function for `_laplace_rule_trig`.  This function returns two terms
    `f` and `g`.  `f` contains all product terms with sin, cos, sinh, cosh in
    them; `g` contains everything else.
    )r   Oner   	make_argsr~   r3   r2   r+   r)   r'   append)r  trigsothertermr   r   s         rn   _laplace_trig_splitr    s{     UUGEUUGEb! 88CdD#.LLLL	
 	UAUAa4Krp   c                    t        d|g      }t        d|g      }t        d|g      }g }g }| j                  t              j                         }t	        j
                  |      D ]  }|j                  |      s"|j                  d|ddt        dt        di       6t        |j                  d	      |      }|j                  |t        ||z  |z         z        x}	O|j                  d|	|   t        |	|         z  d|	|   t        t        |	|         t        t        |	|         i       |j                  |        ||fS )
a  
    Helper function for `_laplace_rule_trig`.  This function expects the `f`
    from `_laplace_trig_split`.  It returns two lists `xm` and `xn`.  `xm` is
    a list of dictionaries with keys `k` and `a` representing a function
    `k*exp(a*t)`.  `xn` is a list of all terms that cannot be brought into
    that form, which may happen, e.g., when a trigonometric function has
    another function in its argument.
    c1r   c0r   kr   r   r'   )combine)r    r  r'   r   r   r  r~   r  r!   r"   r   powsimpr   )
r   r   r   r!  r   xmxnx1r  r   s
             rn   _laplace_trig_expsumr(    s+    
dQC	 B	dQC	 BS1#A	B	B	
3			 Bb! xx{IIsD#q"aQ78$T\\%\%@!DAc"Q$r'lN++A8IIQqT#ae*_c1R5BquIr2ae9. / IIdO r6Mrp   c           	         g }g }d fd}fd}fd}fd}d }	t        |       dkD  r| j                         }
d}d}d}t        t        |             D ]  }|
t           | |   t           k(  }|
t           | |   t            k(  }|
t           | |   t           k(  }|
t           | |   t            k(  }|r|r|
t           dk7  r|
t           dk7  r|}||r|r|
t           dk7  r|}|s|s|
t           dk7  s|} ||||j                   ||
| |   d	   | |   d	   | |   d	   |             |j                  t        t        |
d
                      |||g}|j                  d       |D ]  }| j                  |        n#|I|j                   ||
| |   d	   |             |j                  |
t                  | j                  |       n|R|j                   ||
| |   d	   |             |j                  t        |
t                        | j                  |       n|R|j                   ||
| |   d	   |             |j                  t        |
t                        | j                  |       n0|j                   |	|
|             |j                  |
t                  t        |       dkD  rt        | t        | fS )a  
    Helper function for `_laplace_rule_trig`.  This function takes the list of
    exponentials `xm` from `_laplace_trig_expsum` and simplifies complex
    conjugate and real symmetric poles.  It returns the result as a sum and
    the convergence plane.
    c                 6   | j                         }t        t        |            D ]q  }||   j                         }|d   j	                  t
              r||   j                  t              ||<   J|d   t        |d   z  z   j                  t              ||<   s |S r   )	copyrangelenr   r~   r"   r  r2   r   )coeffsncr"  ris       rn   _simpcz"_laplace_trig_ltex.<locals>._simpc  s    [[]s2w 	7AA##%B!uyy}1c*1A2a511#61	7 	rp   c           
         | d   | d   | t            | t           f\  }}}}||z   |z   |z   |||z   |z
  |z
  z  dt        z  |z  |z  z
  dt        z  |z  |z  z   |dz  | |z
  |z
  |z
  z  |dt        z  |z  |z  dt        z  |z  |z  z   z  z   d|dz  z  |z  z   d|dz  z  |z  z   |dz  | |z
  |z   |z   z  |dz  dt        z  |z  |z  dt        z  |z  |z  z   dt        z  |z  |z  z
  dt        z  |z  |z  z
  z  z   |d|dz  z  |z  d|dz  z  |z  z
  z  z   g}	t        j                  t        j
                  d|dz  z  d|dz  z  z
  t        j
                  |dz  d|dz  z  |dz  z  z   |dz  z   g}
t        t         |	      t        t        |	            d d d         D cg c]  \  }}|||z  z   c}} }t        t        |
t        t        |
            d d d         D cg c]  \  }}|||z  z   c}} }||z  S c c}}w c c}}w )Nr   r"  r   r   r   r   )
r!   r"   r   r   r  r   r   zipr,  r-  )t1k1k2k3r{   r   k0a_ra_ir/  dcr   r   r   r   r1  s                  rn   	_quadpolez%_laplace_trig_ltex.<locals>._quadpole  sf   S'2c7BrFBrF:2sCGbL2rBw|b !AaCGBJ.1S;1rcBhmb()1Q3s72:!C
*+,#q&Qhrk* 1rcBhmb()1ac#gbj1Q3s72:-!C
:QqSWRZGHI1S!V8B;36",-.
 EE1661S!V8aQh.FFCFQsAvXc1f_,sAv57 !$VBZs2w"1E!FGAa1fGI!$Rs2w")=!>?Aa1f?As
 H?s   "H
%H
c           
         | d   | d   | t            | t           f\  }}}}||z   | |z  ||z  z
  dt        z  |z  |z  z   g}t        j                  d|z  |dz  |dz  z   g}t        t         |      t        t        |            d d d         D 	
cg c]  \  }	}
|	||
z  z   c}
}	 }t        t        |t        t        |            d d d         D 	
cg c]  \  }	}
|	||
z  z   c}
}	 }||z  S c c}
}	w c c}
}	w Nr   r"  r   r   r   	r!   r"   r   r   r  r   r3  r,  r-  )r4  r5  r{   r   r8  r9  r:  r/  r;  r   r   r   r   r1  s                rn   _ccpolez#_laplace_trig_ltex.<locals>._ccpole  s   S'2c7BrFBrF:2sC2gr"uqt|ac#gbj01eeRVS!Vc1f_-!$VBZs2w"1E!FGAa1fGI!$Rs2w")=!>?Aa1f?As
 H?s   C2
C8
c           
      
   | d   | d   | t            | t           f\  }}}}||z   ||z  ||z  z
  dt        z  |z  |z  z
  g}t        j                  dt        z  |z  |dz   |dz  z
  g}t        t         |      t        t        |            d d d         D 	
cg c]  \  }	}
|	||
z  z   c}
}	 }t        t        |t        t        |            d d d         D 	
cg c]  \  }	}
|	||
z  z   c}
}	 }||z  S c c}
}	w c c}
}	w r>  r?  )r4  r6  r{   r   r8  r9  r:  r/  r;  r   r   r   r   r1  s                rn   _rspolez#_laplace_trig_ltex.<locals>._rspole  s   S'2c7BrFBrF:2sC2gqtad{QqSWRZ/0eeRT#XQwa/0!$VBZs2w"1E!FGAa1fGI!$Rs2w")=!>?Aa1f?As
 H?s   C9
C?
c           
         | d   | d   }}||z   |||z
  z  g}t         j                  t         j                  |dz   g}t        t	         |      t        t        |            d d d         D cg c]  \  }}|||z  z   c}} }	t        t	        |t        t        |            d d d         D cg c]  \  }}|||z  z   c}} }
|	|
z  S c c}}w c c}}w )Nr   r"  r   r   )r   r  r   r   r3  r,  r-  )r4  r7  r{   r   r8  r/  r;  r   r   r   r   r1  s              rn   _sypolez#_laplace_trig_ltex.<locals>._sypole  s    3C22gq"r'{#eeQVVadU#!$VBZs2w"1E!FGAa1fGI!$Rs2w")=!>?Aa1f?As
 H?s   0C
3C
c                 .    | d   | d   }}|}||z
  }||z  S )Nr   r"  rq   )r4  r{   r   r8  r   r   s         rn   _simplepolez'_laplace_trig_ltex.<locals>._simplepole  s*    3C2Es
rp   r   Nr"  r   T)reverse)
r-  popr,  r!   r"   r  r$   r   r   r-   )r%  r   r{   resultsplanesr<  r@  rB  rD  rF  r4  	i_imagsym	i_realsym
i_pointsymireal_eqrealsymimag_eqimagsymindices_to_popr1  s                       @rn   _laplace_trig_ltexrT    s    GF. b'A+VVX		

 s2w 
	Af1b	)GfAr
*Gf1b	)GfAr
*G7r"v{r"v{
WB1	WB1	
	( %)*?*NN"Y-,bmC.@Z.-q23 MM#bCk*+ (J?N-# q	"NN72r)}S'91=>MM"R&!FF9"NN72r)}S'91=>MM#bf+&FF9#NN72r*~c':A>?MM#bf+&FF:NN;r1-.MM"R&!q b'A+t =#v,&&rp   c           
      d   t        dd      }| j                  t        t        t        t
              syt        | j                  ||            \  }}t        ||      \  }}t        |      dkD  ry|j                  |      s&t        |||      \  }}	||z  |	t        j                  fS g }
g }t        |||d      \  }}}|D ]O  }|j                  |d   |j                  |||d	   z
        z         |
j                  |t        |d	         z          Q t!        | j                  ||      t#        |
 |fS )
z
    This rule covers trigonometric factors by splitting everything into a
    sum of exponential functions and collecting complex conjugate poles and
    real symmetric poles.
    r   TrealNr   Fr   r"  r   )r   r~   r3   r2   r+   r)   r  r   r(  r-  rT  r   r   r   r  r!   r   r-   )r  t_r{   r   r   r   r%  r&  r   r   rJ  rI  GG_planeG_condr'  s                   rn   _laplace_rule_trigr\  Y  s#    	cA66#sD$'rwwr1~.DAq!!Q'FB
2w{558!"a+1sAqvv~ /1a%H7F 	/BNN2c7166!Qr#wY#778MM'"RW+-.	/ =a$c6lF::rp   c                    t        d|g      }t        d|g      }t        d      }| j                  |t        |||f      z        }|r||   j                  r||   j
                  D cg c]  }|j                  |       }}t        |      dk(  rt        d       g }	t        ||         D ]^  }
|
dk(  r||   j                  |d      }n!t        ||   ||
f      j                  |d      }|	j                  |||   |
z
  dz
  z  |z         ` t        ||   ||d	      \  }}}||   |||   z  |z  t        |	 z
  z  ||fS y
c c}w )a  
    This function looks for derivatives in the time domain and replaces it
    by factors of `s` and initial conditions in the frequency domain. For
    example, if it gets ``(diff(f(t), t), t, s)``, it will compute
    ``s*LaplaceTransform(f(t), t, s) - f(0)``.
    r   r   r   r   ra   z"     rule: time derivative (4.1.8)r   Fr   N)r    r   r   r
   
is_integerrj   r~   sumru   r,  r   r  r   r   )r   r   r{   r   r   r   r   r  r   r   r"  r   r   r  r  s                  rn   _laplace_rule_diffr`  z  sV    	S1#AS1#ASA
''!Jq1a&))
*C
s1v  "1v{{+!QUU1X++q6Q;78A3q6] ,6AAq)A"3q6Aq62771=ASVAXaZ*+, +3q61a%HIAr2FAs1vIaK#q'12R<< ,s   *Ec           
         | j                   rdg}dg}t        j                  |       D ]6  }|j                  |      r|j	                  |       &|j	                  |       8 t        |      dkD  r4t        |      }t        ||      j                         }t        |      }|dkD  rt        |      }	t        |	||d      \  }
}}|
g}d}	 t        |d   |       }|
j                  t              r<t        |dz
        D ]*  }|j	                  d|dz   z  t        |
||dz         z         , nE|rC|j	                  |       t        |dz
        D ]!  }|j	                  t        |d   |              # |r3t!        t        |      D cg c]  }|||z
  dz
     ||   z   c} }|||fS t#        d|g      }t#        d      }| j%                  ||z  |z        x}rQ||   j&                  rB||   j(                  r3t        ||   ||d      \  }
}}d||   z  t        |
|||   f      z  ||fS y	# t        $ r d}Y ]w xY wc c}w )
a  
    This function looks for multiplications with polynoimials in `t` as they
    correspond to differentiation in the frequency domain. For example, if it
    gets ``(t*f(t), t, s)``, it will compute
    ``-Derivative(LaplaceTransform(f(t), t, s), s)``.
    ra   Fr   r   r   r   r   r   N)is_Mulr   r  r  r  r-  r   rR   
all_coeffsr   r   
ValueErrorr~   LaplaceTransformr,  r
   r   r    r   r^  r   )r   r   r{   pfacofacfacpexpcNoexr_p_c_derid1r"  r   r   r   r   s                       rn   _laplace_rule_sdiffrr    sL    	xxss==# 	!C  #C C 		!
 t9q=t*Cc1((*BBA1u4j/QEJ
BttBx++B 66*+"1Q3Z HR1Q3K
2q!A#0F$FGHKKO"1Q3Z 8T$r(A%6$678qBAb1QiQ/BCAr2;& 	S1#AS	Aggad1fosq6Q!3!3+CFAq5IJBBQ<R!SV 55r2==) " B Cs   
H) H;)H87H8c                 r   t        | d      }|j                  rt        |||d      S t        |       }|j                  rt        |||d      S t        |       }|j                  rt        |||d      S || k7  rt        |||d      S t        t	        |             }|j                  rt        |||d      S y)a  
    This function tries to expand its argument with successively stronger
    methods: first it will expand on the top level, then it will expand any
    multiplications in depth, then it will try all avilable expansion methods,
    and finally it will try to expand trigonometric functions.

    If it can expand, it will then compute the Laplace transform of the
    expanded term.
    Fdeepr   N)r   is_Addr   r   r   )r   r   r{   r   s       rn   _laplace_expandrw    s     	quAxx!!QE::1Axx!!QE::q	Axx!!QE::Av!!QE::{1~Axx!!QE::rp   c                 |    t         t        t        t        t        t
        t        g}|D ]  } || ||      x}|c S  y)zk
    This function applies all program rules and returns the result if one
    of them gives a result.
    N)r  r  r  r	  r\  r`  rr  )r   r   r{   
prog_rulesp_ruleLs         rn   _laplace_apply_prog_rulesr|    sN     *+>)+<$$&9;J
  1a A-H rp   c                    t               \  }}}d}d}|D ]  \  }}	}
}}||k7  r || j                  ||i            }|}|j                  |      }|s=	 |
j                  |      }|t
        j                  k(  sc|	j                  |      j                  ||i      |j                  |      t
        j                  fc S  y# t        $ r Y w xY w)zj
    This function applies all simple rules and returns the result if one
    of them gives a result.
     N)r   r   r   xreplacer   r   r   )r   r   r{   simple_rulesrX  r   prep_oldprep_ft_doms_domcheckplaneprepmar   s                  rn   _laplace_apply_simple_rulesr    s     01L"bHF,8 4(ueUDt!&&!R/*FH\\% NN2&
 AFF{r*//Q8r*AFF4 44    s   B>>	C
	C
c                 R   |j                   s;t        dd      }t        | j                  ||i      |      j                  ||i      S t	        |       }g }|j
                  D ]  \  }}t        |t              r]||j
                  v rOt        |t        t        f      r| c S |j                  t        |j                  |j                  z
        |z         tt        |t              rst        |j
                        dk(  r[|j
                  D ]K  }|j                   |k(  r5|j                  t        |j                  |j                  z
        |z         G| c c S  t        |t"              rt        |j
                        dk(  r|j
                  \  }}|j                   |k(  rz|j                   |k(  rkd|j$                  v r||}}|j                  t        |j                  |j                  z
        t        |j                  |j                  z
        z
  |z         | c S | c S  t'        | S )z
    This function converts a Piecewise expression to an expression written
    with Heaviside. It is not exact, but valid in the context of the Laplace
    transform.
    r   TrV  r   >)is_realr   _piecewise_to_heavisider  r1   rj   r   r   r   r   r  r;   gtsr   rL   r-  lhsrM   r   r   )	r   r   r   r   r  r   c2r!  r   s	            rn   r  r    s    99#D!&qzz1a&'91=FF1vNNAA
AFF  D dJ'AN$R)
 488dhh#67:;b!c$))n&9ii 66Q;HHYrvv7:;H	
 c"s499~':YYFBvv{rvv{"))#Brvv/rvv/01345 HA B 7Nrp   c          	      j   t        d      }t        d      }t        d      }t        d      }t        | t              r*| j                  t              s| j                  t
              s| S |j                         D ]  \  }}| j                  t	         ||      ||            x}||   ||   k(  r |||         c S | j                  t         ||      |||            x}	 i||   ||   k(  su |||         c S  | j                  }	| j                  D 
cg c]  }
t        |
|       }}
 |	| S c c}
w )a  
    This helper function takes a function `f` that is the result of a
    ``laplace_transform`` or an ``inverse_laplace_transform``.  It replaces all
    unevaluated ``LaplaceTransform(y(t), t, s)`` by `Y(s)` for any `s` and
    all ``InverseLaplaceTransform(Y(s), s, t)`` by `y(t)` for any `t` if
    ``fdict`` contains a correspondence ``{y: Y}``.

    Parameters
    ==========

    f : sympy expression
        Expression containing unevaluated ``LaplaceTransform`` or
        ``LaplaceTransform`` objects.
    fdict : dictionary
        Dictionary containing one or more function correspondences,
        e.g., ``{x: X, y: Y}`` meaning that ``X`` and ``Y`` are the
        Laplace transforms of ``x`` and ``y``, respectively.

    Examples
    ========

    >>> from sympy import laplace_transform, diff, Function
    >>> from sympy import laplace_correspondence, inverse_laplace_transform
    >>> from sympy.abc import t, s
    >>> y = Function("y")
    >>> Y = Function("Y")
    >>> z = Function("z")
    >>> Z = Function("Z")
    >>> f = laplace_transform(diff(y(t), t, 1) + z(t), t, s, noconds=True)
    >>> laplace_correspondence(f, {y: Y, z: Z})
    s*Y(s) + Z(s) - y(0)
    >>> f = inverse_laplace_transform(Y(s), s, t)
    >>> laplace_correspondence(f, {y: Y})
    y(t)
    r   r{   r   r   )r    r   r   r~   re  InverseLaplaceTransformitemsr   rm   rj   laplace_correspondence)r   fdictr   r{   r   r   r   Yr   rm   r#   rj   s               rn   r  r  D  s(   H 	S	AS	AS	AS	A1d#EE*+56 	1gg.qtQ:;;HaDAaDLQqT7Ngg5adAq!DEEaDAaDLQqT7N	 66D:;&&A3"3.ADA; Bs   D0c                z   |j                         D ]  \  }}t        t        |            D ]  }|dk(  r| j                   |d      |d         } $|dk(  r1| j                  t	        t         ||      |      |d      |d         } Z| j                  t	        t         ||      ||f      |d      ||         }   | S )a  
    This helper function takes a function `f` that is the result of a
    ``laplace_transform``.  It takes an fdict of the form ``{y: [1, 4, 2]}``,
    where the values in the list are the initial value, the initial slope, the
    initial second derivative, etc., of the function `y(t)`, and replaces all
    unevaluated initial conditions.

    Parameters
    ==========

    f : sympy expression
        Expression containing initial conditions of unevaluated functions.
    t : sympy expression
        Variable for which the initial conditions are to be applied.
    fdict : dictionary
        Dictionary containing a list of initial conditions for every
        function, e.g., ``{y: [0, 1, 2], x: [3, 4, 5]}``. The order
        of derivatives is ascending, so `0`, `1`, `2` are `y(0)`, `y'(0)`,
        and `y''(0)`, respectively.

    Examples
    ========

    >>> from sympy import laplace_transform, diff, Function
    >>> from sympy import laplace_correspondence, laplace_initial_conds
    >>> from sympy.abc import t, s
    >>> y = Function("y")
    >>> Y = Function("Y")
    >>> f = laplace_transform(diff(y(t), t, 3), t, s, noconds=True)
    >>> g = laplace_correspondence(f, {y: Y})
    >>> laplace_initial_conds(g, t, {y: [2, 4, 8, 16, 32]})
    s**3*Y(s) - 2*s**2 - 4*s - 8
    r   ra   )r  r,  r-  r   r   r
   )r   r   r  r   icr"  s         rn   laplace_initial_condsr    s    D  K2s2w 	KAAvIIadBqE*aIId:adA#61=r!uEIId:adQF#;QBBqEJ	KK Hrp   c                   t        j                  |       }g }g }g }g }|D ]  }	|	j                  d      \  }
}|j                  t              r\t        j                  |j                  t                    }|D ].  }|j                  d      \  }}|j                  |
|z  |f       0 |j                  t        k(  rn|j                  t                    sTt        j                  t        |            }|D ].  }|j                  d      \  }}|j                  |
|z  |f       0 |j                  |
|f       ! |D ]l  \  }
}|j                  t              rt        ||      t        j                  df}n|j                  t                    r5|j                  t                    s|j                  t              d      }t!        ||      x}	 t#        ||      x}	 t%        ||      x}nwt'        fd|j)                  t*              D              rt        ||      t        j                  df}n1t-        |||      x}	 nt        ||      t        j                  df}|\  }}}|j                  |
|z         |j                  |       |j                  |       o t        | }|r|j/                  d      }t1        | }t3        | }|||fS )z
    Front-end function of the Laplace transform. It tries to apply all known
    rules recursively, and if everything else fails, it tries to integrate.
    Fas_AddTra   c              3   @   K   | ]  }|j                          y wr   r~   )r   undefrX  s     rn   r   z%_laplace_transform.<locals>.<genexpr>  s     GuUYYr]G   r   doit)r   r  as_independentr~   rC   r  r;   r  rm   r0   r:   r  re  r   r   r   r  r|  rw  anyr   r	   rb   r   r-   rM   )r  rX  r   r   terms_tterms_stermsrJ  
conditionsffr"  ft_terms_termr5  f1r   ri_pi_ci_rl   r  	conditions    `                     rn   r   r     s    mmBGGEFJ "!!"U!3266%&]]2::i#89F )--b-?BadBZ() WW	!"&&B*@]]#:2r#BCF )--b-?BadBZ() LL!R!"  266%&!"b"-q/A/A4HAvvim$RVVJrN-C WWYr]A.5b"bAAQ 3BB??Q )"b"55QBG0FGG &b"b113E3EtL5B3 3!;?@%b"b113E3EtLc3quc#;> ']Fe,LEZ I5)##rp   c                   &    e Zd ZdZdZd Zd Zd Zy)re  a  
    Class representing unevaluated Laplace transforms.

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

    For how to compute Laplace transforms, see the :func:`laplace_transform`
    docstring.

    If this is called with ``.doit()``, it returns the Laplace transform as an
    expression. If it is called with ``.doit(noconds=False)``, it returns a
    tuple containing the same expression, a convergence plane, and conditions.
    Laplacec                 H    |j                  dd      }t        ||||      }|S )Nr   Fr   )getrb   )selfr   r   r{   hintsrF   LTs          rn   _compute_transformz#LaplaceTransform._compute_transform  s'    IIj%0	+Aq!iH	rp   c                 x    t        |t        | |z        z  |t        j                  t        j                  f      S r   )rE   r'   r   r   r   )r  r   r   r{   s       rn   _as_integralzLaplaceTransform._as_integral  s,    #qbd)a%<==rp   c                    |j                  dd      }|j                  dd      }t        d| j                  | j                  | j                  f       | j                  }| j                  }| j                  }t        ||||      }|r|d   S |S )j  
        Try to evaluate the transform in closed form.

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

        Standard hints are the following:
        - ``noconds``:  if True, do not return convergence conditions. The
        default setting is `True`.
        - ``simplify``: if True, it simplifies the final result. The
        default setting is `False`.
        nocondsTr   Fz[LT doit] (%s, %s, %s)r   r   )r  rX   functionfunction_variabletransform_variabler   )r  r  _nocondsrF   rX  r   r  r   s           rn   r  zLaplaceTransform.doit	  s     99Y-IIj%0	'$--*.*@*@*.*A*A*C 	D ##$$]]r2rI>Q4KHrp   N)ri   
__module____qualname____doc___namer  r  r  rq   rp   rn   re  re    s     E
>rp   re  c                    j                  dd      }j                  dd      }t        | t              rt        | d      rʉj                  dd       }|rA|r?d}t	        dd|       t        t              5  | j                  fd	      cd
d
d
       S | D 	cg c]  }	t        |	fi  }
}	|r:t        |
 \  }}} t        |       g | j                  | }|t        | t        | fS  t        |       g | j                  |
 S t        |       j                  d|      \  }}}|s|||fS |S # 1 sw Y   4xY wc c}	w )a  
    Compute the Laplace Transform `F(s)` of `f(t)`,

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

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

    For all sensible functions, this converges absolutely in a
    half-plane

    .. math :: a < \operatorname{Re}(s)

    This function returns ``(F, a, cond)`` where ``F`` is the Laplace
    transform of ``f``, `a` is the half-plane of convergence, and `cond` are
    auxiliary convergence conditions.

    The implementation is rule-based, and if you are interested in which
    rules are applied, and whether integration is attempted, you can switch
    debug information on by setting ``sympy.SYMPY_DEBUG=True``. The numbers
    of the rules in the debug information (and the code) refer to Bateman's
    Tables of Integral Transforms [1].

    The lower bound is `0-`, meaning that this bound should be approached
    from the lower side. This is only necessary if distributions are involved.
    At present, it is only done if `f(t)` contains ``DiracDelta``, in which
    case the Laplace transform is computed implicitly as

    .. math ::
        F(s) = \lim_{\tau\to 0^{-}} \int_{\tau}^\infty e^{-st}
        f(t) \mathrm{d}t

    by applying rules.

    If the Laplace transform cannot be fully computed in closed form, this
    function returns expressions containing unevaluated
    :class:`LaplaceTransform` objects.

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

    .. deprecated:: 1.9
        Legacy behavior for matrices where ``laplace_transform`` with
        ``noconds=False`` (the default) returns a Matrix whose elements are
        tuples. The behavior of ``laplace_transform`` for matrices will change
        in a future release of SymPy to return a tuple of the transformed
        Matrix and the convergence conditions for the matrix as a whole. Use
        ``legacy_matrix=False`` to enable the new behavior.

    Examples
    ========

    >>> from sympy import DiracDelta, exp, laplace_transform
    >>> from sympy.abc import t, s, a
    >>> laplace_transform(t**4, t, s)
    (24/s**5, 0, True)
    >>> laplace_transform(t**a, t, s)
    (gamma(a + 1)/(s*s**a), 0, re(a) > -1)
    >>> laplace_transform(DiracDelta(t)-a*exp(-a*t), t, s, simplify=True)
    (s/(a + s), -re(a), True)

    There are also helper functions that make it easy to solve differential
    equations by Laplace transform. For example, to solve

    .. math :: m x''(t) + d x'(t) + k x(t) = 0

    with initial value `0` and initial derivative `v`:

    >>> from sympy import Function, laplace_correspondence, diff, solve
    >>> from sympy import laplace_initial_conds, inverse_laplace_transform
    >>> from sympy.abc import d, k, m, v
    >>> x = Function('x')
    >>> X = Function('X')
    >>> f = m*diff(x(t), t, 2) + d*diff(x(t), t) + k*x(t)
    >>> F = laplace_transform(f, t, s, noconds=True)
    >>> F = laplace_correspondence(F, {x: X})
    >>> F = laplace_initial_conds(F, t, {x: [0, v]})
    >>> F
    d*s*X(s) + k*X(s) + m*(s**2*X(s) - v)
    >>> Xs = solve(F, X(s))[0]
    >>> Xs
    m*v/(d*s + k + m*s**2)
    >>> inverse_laplace_transform(Xs, s, t)
    2*v*exp(-d*t/(2*m))*sin(t*sqrt((-d**2 + 4*k*m)/m**2)/2)*Heaviside(t)/sqrt((-d**2 + 4*k*m)/m**2)

    References
    ==========

    .. [1] Erdelyi, A. (ed.), Tables of Integral Transforms, Volume 1,
           Bateman Manuscript Prooject, McGraw-Hill (1954), available:
           https://resolver.caltech.edu/CaltechAUTHORS:20140123-101456353

    See Also
    ========

    inverse_laplace_transform, mellin_transform, fourier_transform
    hankel_transform, inverse_hankel_transform

    r  Fr   	applyfuncz#deprecated-laplace-transform-matrixz
Calling laplace_transform() on a Matrix with noconds=False (the default) is
deprecated. Either noconds=True or use legacy_matrix=False to get the new
behavior.
                z1.9)deprecated_since_versionactive_deprecations_targetc                      t        | fi S r   )laplace_transform)fijr  r{   r   s    rn   r   z#laplace_transform.<locals>.<lambda>  s     1#q! Eu E rp   Nr  r   )r  r   rN   hasattrrU   rW   rV   r  r  r3  typeshaper-   rM   re  r  )r   r   r{   legacy_matrixr  r  rF   r   adtr  elements_transelementsavalsr  	f_laplacer  r   r   s    `` `             rn   r  r  )  s~   N yyE*H		*e,I!Z WQ%<IIi//]7C%
 */+. !!89 G{{EGG G
 012(+ 0Q$"$ 2N 2.1>.B+%#DG7QWW7h7	 #u+sJ/???tAw88881a(--e7@ . BHB1 1ax	'G G2s   :D9E9Ec                   ddl m}m ddlm} t        dd      fd}| j                  |      r| j                  |      } | j                  rKt        | j                  D cg c]  }t        ||||       c} }	t        |	j                  |      |      dfS 	  || |t               dt        j                   fdd	
      \  }	}
|	g || |      }	|	y|	j$                  r(|	j                  d   \  }	}
|	j'                  t(              ryt        j*                  }
|	j-                  t.        |      }	|	j$                  r|	j                  |      
fS t        d      t        j0                  ffd	}|	j-                  t2        |      }	d }|	j-                  t        |      }	t        |	j                  |      |      
fS c c}w # t"        $ r d}	Y 
w xY w)z6 The backend function for inverse Laplace transforms. r   )meijerint_inversion_get_coeff_exp)inverse_mellin_transformr   TrV  c                  J   t        |       dk7  rt        |  S | d   j                  d   j                  } |      \  }}| d   j                  d   }| d   j                  d   }t	        dt        |      z  |z  z
        |z  t	        |z  dt        |      z  z
        |z  z   S )z3 Simplify a piecewise expression from hyperexpand. r   r   r   ra   )r-  r0   rj   argumentr;   r$   )rj   r#   coeffexponente1e2r  r   s         rn   pw_simpz7_inverse_laplace_transform_integration.<locals>.pw_simp  s    t9>d##1gll1o&&(a0x!W\\!_!W\\!_aE
lQ[01"4akAc%jL01"45	6rp   NF)needevalr  uc                 L    | j                   t                     }|j                        rt        | |      S ddlm}  ||dkD        }|j                  k(  r$t        |j                        }t        |z   |      S t        |j                        }t        |z    |      S )Nr   r   )	r   r'   r~   r;   r   r   r   r(   r  )r#   H0r   r   relr"  r   r  s         rn   simp_heavisidez>_inverse_laplace_transform_integration.<locals>.simp_heaviside  s    CHHS!Wa 558S"%%@Aq)77a<CGGAQUB''CGGAq1uXr**rp   c                 *    t        t        |             S r   )r   r'   )r#   s    rn   simp_expz8_inverse_laplace_transform_integration.<locals>.simp_exp  s    c#h''rp   )sympy.integrals.meijerintr  r  sympy.integrals.transformsr  r   is_rational_functionapartrv  r   rj   rc   rF   r   r'   r   r   rH   r   r~   rE   r   r   r0   r   r;   )r   r{   rX  r  r   r  r  r  Xr   r   r  r  r  r   r  s                @@@rn   rc   rc     s    NC 	cA
6 	a GGAJxxvv 5Q1eXN   21477*1aaR4:L48%I4
 	y1a(9>>ffQiGAtuuX66DIIi)~~ vva}d""c
A vv + 	
		)^,A( 	
		#x AQVVAr]H-t33c " s   &G+G GGc                     ddl m}  ||       \  }}|j                  |      rV|j                  |      j	                         }t        |      dk(  r)|\  }}}|||d|z  z  z   dz  ||z  z   |d|z  z  dz  z
  z  }||z  S )Nr   )fractionr   r   )r   r  r  r   rc  r-  )	r   r{   r  r   r   cfr   r   r   s	            rn   _complete_the_square_in_denomr    s    /a[FQqYYq\$$&r7a<GAq!Aa1gI>!A#%q!A#wl23AQ3Jrp   c            
         t        d      } t        d      }t        d| g      }t        d| g      }t        d| g      }t        d       d }d	 }|| z  |t        j                  |d
f|| |z   | z  z  ||d
z
  z  t        | |z        z  t        |      z  t        j                  |d
fd
| dz  |dz  z   dz  z  t        ||z        ||z  t        ||z        z  z
  d|dz  z  z  t        j                  |d
fd
| |z  z  ||d
z
  z  t        |      z  t        j                  |d
fd
| | |z   |z  z  z  t        |||z        ||z  t        |      z  z  t        j                  |d
fg}|| |fS )z
    This is an internal helper function that returns the table of inverse
    Laplace transform rules in terms of the time variable `t` and the
    frequency variable `s`.  It is used by `_inverse_laplace_apply_rules`.
    r{   r   r   r   r   r   z._inverse_laplace_build_rules is building rulesc                 H    	 | j                  |      S # t        $ r | cY S w xY wr   )factorrP   )r   r{   s     rn   _fracz+_inverse_laplace_build_rules.<locals>._frac&  s)    	88A; 	H	s    !!c                     | S r   rq   )r   s    rn   samez*_inverse_laplace_build_rules.<locals>.same,  s    rp   ra   r   r   )
r   r    ru   r   r   r'   r@   r3   r2   rA   )r{   r   r   r   r   r  r  
_ILT_ruless           rn   _inverse_laplace_build_rulesr    s    	c
Ac
AS1#AS1#AS1#A
;<  
1aq!qsqbkM1qs8C1I-eAh6FFD!	 
AqDAI>	C!Hqs3qs8|3a1f=	
q	 
AqD1q1u:eAh&a8	
AqsQhJAqs+QT%(];	
q	J q!rp   c                 8   | dk(  r&t        d       t        |      t        j                  fS t	               \  }}}d}| j                  ||i      }|D ]  \  }}	}
}}|||fk7  r |||z        }||f}j                  |      }|s3|
}|t        j                  ur)|d   D cg c]  }|j                  |       }} |d   | }|t        j                  k(  st        |      |	j                  |      j                  ||i      z  t        j                  fc S  yc c}w )@
    Helper function for the class InverseLaplaceTransform.
    ra   z     rule: 1 o---o DiracDelta()r~  r   N)	ru   r:   r   r   r  r   r   r  r;   )r   r{   r   r  r   rX  _prepfsubsr  r  r  r  rh  _Fr  r   r   rj   s                     rn   #_inverse_laplace_apply_simple_rulesr  @  s   
 	Av01!}aff$$57JBEFFAr7OE*4 M&ueT3T3KeCiB3KEXXe_A01!51

255AaD$KAFF{ |ENN2$6$;$;RG$DDaffLLM  6s   Dc                    t        d|g      }t        d|g      }t        d      }| j                  |t        |||f      z        }|r?||   j                  r0t	        d       t        ||   |||dd      \  }}	| ||   z  |z  |	fS y)	r  r   r   r   r   z3     rule: t**n*f(t) o---o (-1)**n*diff(F(s), s, n)Fr   
dorationalN)r    r   r
   r^  ru   _inverse_laplace_transform)
r   r{   r   r  r   r   r   r  r   r   s
             rn   _inverse_laplace_diffr  ]  s    
 	S1#AS1#AS	A	
:a!Q((	)B	beDE)qE1a5B1RU{1}arp   c                    t        d|g      }t        d      }| j                  |      s| t        |      z  t        j                  fS | j                  t
              sy| j                  t        ||z              }|rY||   j                  r,t        d       t        |||   z         t        j                  fS t        | |||      t        j                  fS | j                  t        ||z        |z        }|rR||   j                  r%t        d       t        ||   ||||   z   |dd	      S t        | |||      t        j                  fS y)
r  r   r   r   Nz*     rule: exp(-a*s) o---o DiracDelta(t-a)z5     rule: exp(-a*s)*F(s) o---o Heaviside(t-a)*f(t-a)FTr  )r    r~   r:   r   r   r'   r   r  ru   r  r  )r   r{   r   r  r   r   r   s          rn   _inverse_laplace_time_shiftr  n  s*   
 	S1#AS	A558A&&55:
''#ac(
C
q6?@aAh'//*1aE:AFFBB
''#ac(1*
C
q6JK-A1SV8UUtM M +1aE:AFFBBrp   c                    | j                  |      s| t        |      z  t        j                  fS t	        | j
                  x}      dk(  rt        d|g      }|d   j                  ||z
        x}rct        ||         j                  rKt        d       t        ||    |z        t        | j                  |      |||      z  t        j                  fS y)r  ra   r   r   r   z&     rule: F(s-a) o---o exp(-a*t)*f(t)N)r~   r:   r   r   r-  rj   r    r   r!   r   ru   r'   r  rm   )r   r{   r   r  rj   r   r  s          rn   _inverse_laplace_freq_shiftr
    s    
 558A&&
166>4aqc"q'--!$$B$"RU)*?*?;<RUF1H'q	1a?@ABI I rp   c                    t        d|g      }t        d      }| j                  ||z  |z        }|r||   j                  r||   j                  rt	        d       t        ||   |||dd      \  }}|j                  t        |      d      }|j                  t              rt        ||||         |fS t        |      t        ||||         z  |fS y	)
r  r   r   r   z+     rule: s**n*F(s) o---o diff(f(t), t, n)FTr  ra   N)r    r   r^  r   ru   r  r   r;   r~   r  r   )	r   r{   r   r  r   r   r   r   r   s	            rn   _inverse_laplace_time_diffr    s    
 	S1#AS	A
''!Q$q&/C
s1v  SV%7%7<=)FAq%%DB1IIilA&55()1c!f%q((Q<Q3q6 22A55rp   c           	      +   t        d|g      }t        d|g      t        d|g      }t        d|g      d}t        j                  }| j                         }|D 	cg c]  }	|	j	                  |||z  z  z   z        ! }
}	d|
v ryt        j
                  }g }g }g }|
D ]c  }||   dk(  r||z  }|   j                  r|j                  |       2|   j                  r|j                  |       S|j                  |       e t        |fd	      }t        |fd
	      }t        |      dk7  ryt        |      dk(  rt        |      dk(  r|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }d|d   |   z  |z  }|j                  r=|t        t              z  t        |      z  ||z  t        |dz  |z        z  t        |t        |      z        z  z
  }t!        d       n|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }|dz  }d|d   |   dz  z  |z  }|j                  r|ddt        t              z  t        |      z  t        |      z  z
  dd|z  |z  z
  t        ||z        z  t#        t        |      t        |      z        dz
  z  z   z  }t!        d       n|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }d|d   |   dz  z  |z  }|j                  r|dt        t              z  |dz  |z  dz   z  t        |      z  ||z  t        |dz  |z        z  d|dz  z  |z  dz   z  t        |t        |      z        z  z
  z  }t!        d       nB|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }d|d   |   dz  z  |z  dz  }|j                  r||d|dz  z  |dz  z  d|dz  z  |z  z   dz   z  t        |dz  |z        z  t        |t        |      z        z  dt        t              z  |dz  z  |t        d      dz  z  z  d|dz  z  |z  dz   z  z
  z  }t!        d       nX|d      t        j                   k(  r=|d   |   dk(  r1t        |d      |d   |   z        }dt        |d   |         z  |z  }|t%        d||z        z  }t!        d       nt        |      dk(  rt        |      dk(  r|d      dk(  r|d   |   t        j                  k(  r|d      t        j                  k(  r|d      dk(  r|d      }t        |d   |         |d   |   z  |z  }|d|dz  z  |dz  z  d|dz  z  |z  z   dz   z  t        |dz  |z        z  t        |t        |      z        z  dt        t              z  |z  |dz  |z  dz   z  t        |      z  z
  }t!        d       |d      dk(  r|d   |   dk(  r|d      t        j                  k(  r|d   |   dk(  r|d      |d   |   z  }|d      |d   |   z  }t        |d   |         |d   |   z  |z  }|t        | |z        t        |      z  t        t              z  t        ||z
        t        | |z        z  t#        t        ||z
        t        |      z        z  z   z  }t!        d       nt        |      dk(  rt        |      dk(  r|d      dk(  r|d   |   dk(  r|d      t        j                   k(  r|d   |   dk(  r|d      dk(  r|d       |d   |   z  }dt        |d   |         z  |d   |   z  |z  }|j                  r5|t        |      z  t        ||z        z  t#        t        |      t        |      z        z  }t!        d       n|d      dk(  r|d   |   dk(  r|d      dk(  r|d      dk(  r|d   |   t        j                  k(  rt|d      |d   |   z  }d|d   |   z  |d   |   z  |z  |z  }|j                  rm|dt        |dz  |z        t        |t        |      z        z  z
  z  }t!        d       n1|d      dk(  r|d   |   t        j                  k(  r|d      t        j                   k(  r|d   |   dk(  r|d      dk(  rw|d      |d   |   z  }d|d   |   t        |d   |         z  z  |z  }|j                  r|t        |dz  |z        z  t        |t        |      z        z  }t!        d       nf|d      t        d       dz  k(  r|d   |   dk(  r|d      dk(  r|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }d|d   |   t        d      dz  z  |d   |   z  z  |dz  z  |z  }|j                  r|dt        t              z  |z  t        |      z  t        |dz  |z        t        |t        |      z        z  z   dz
  z  }t!        d       nl|d      dk(  r|d   |   t        j                  k(  r|d      dk(  r|d   |   dk(  r|d      dk(  r|d      |d   |   z  }|dz  }d|d   |   dz  z  |d   |   z  |z  }|j                  
r|d|z  d|z  d|z  z
  t        ||z        z  t        t        |      t        |      z        z  z   dt        t              z  t        |      z  t        |      z  z
  z  }t!        d        
nn|d      dk(  r|d   |   t        j                  k(  r|d      t        j                   k(  r|d   |   dk(  r|d      dk(  r|d      |d   |   z  }d|d   |   dz  z  t        |d   |         z  |z  }|j                  	r|dt        t              z  t        |      z  d|z  |z  t        |dz  |z        z  t        |t        |      z        z  z
  z  }t!        d!       	nx|d      dk(  r|d   |   t        j                  k(  r|d      t        j                   k(  r|d   |   dk(  r|d      dk(  r|d      }|t        |d   |         z  |d   |   z  }|d|dz  z  |z  dz   |z  t        |dz  |z        z  t        |t        |      z        z  dt        t              z  |z  |t        d      dz  z  z  z
  z  }t!        d"       n|d      dk(  r|d   |   dk(  rt|d      t        j                   k(  rY|d   |   dk(  rM|d      |d   |   z  }|d      |d   |   z  }|t        |d   |         z  |d   |   z  }|dt        ||z
        z  t        | |z        z  t#        t        ||z
        t        |      z        z  z  }t!        d#       nt        |      dk(  rt        |      dk(  r|d      dk(  rn|d   |   dk(  rb|d      dk(  rV|d   |   t        j                  k(  r<|d      t        j                  k(  r"|d   |   dk(  r|d      dk(  r
|d      |d   |   z  }|dz  }|d       |d   |   z  }t        |d   |         |d   |   z  |d   |   z  ||z
  z  |z  }|j                  r|j                  r||t        ||z        z  t        t        |      t        |      z        z  t        |      t        |      z  t        ||z        z  t        t        |      t        |      z        z  z   |t        ||z        z  z
  z  }t!        d$       n!|d      dk(  r|d   |   dk(  r|d      dk(  r|d      dk(  r|d   |   t        j                  k(  r|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }|d      |d   |   z  }||z   dk(  r|d   |   |d   |   z  |d   |   z  |z  }|dt        |dz  |z        z  t        |t        |      z        z  dz
  z  }t!        d%       n1|d      dk(  r|d   |   dk(  r|d      dk(  r |d      dk(  r|d   |   t        j                  k(  r|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }|d      |d   |   z  }||z   dk(  r|d   |   dz  |d   |   z  |d   |   dz  z  |z  }|dd&|dz  z  |z  t        |dz  |z        z  t        |t        |      z        z  z   d&t        t              z  |z  t        |      z  z
  z  }t!        d'       n|d      dk(  r|d   |   dk(  r|d      dk(  r|d      dk(  r|d   |   t        j                  k(  r|d      dk(  r|d   |   t        j                  k(  r|d      |d   |   z  }|d      |d   |   z  }||z   dk(  rr|d   |   dz  |d   |   z  |d   |   dz  z  |z  }|dd&|dz  z  |dz  z  d&|dz  z  |z  z   dz   z  t        |dz  |z        z  t        |t        |      z        z  d&t        t              z  |z  t        |      z  d|dz  z  |z  dz   z  z
  dz
  z  }t!        d(       nt        |      dk(  rt        |      dk(  r|d      dk(  r|d      dk(  r|d   |   dk(  r|d      dk(  r|d   |   dk(  r|d      t        j                   k(  r|d   |   dk(  r|d       |d   |   z  }d|d   |   z  |d   |   z  t        |d   |         z  |z  }|j                  r||t        d       dz  z  t        ||z        z  t#        t        |      t        |      z        z  d|z  t        t              z  t        |      z  z
  z  }t!        d)       n|d      dk(  r}|d   |   dk(  rq|d      dk(  re|d   |   t        j                  k(  rK|d      t        j                   k(  r0|d   |   dk(  r$|d      dk(  r|d      |d   |   z  }|dz  }|d       |d   |   z  }d|d   |   z  |d   |   z  t        |d   |         z  t        |      ||z
  z  z  }|j                  r|j                  r|t        |      t        ||z        z  t        t        |      t        |      z        z  t        |      t        ||z        z  t#        t        |      t        |      z        z  z   t        |      t        ||z        z  z
  z  }t!        d*       |yt'        |      |z  |fS c c}	w )+r  r   r   r   r   r   Nr   c                 &    |    |    dk7  |    fS r   rq   r   r   r   s    rn   r   z-_inverse_laplace_irrational.<locals>.<lambda>      1qtqy!A$(? rp   r   c                 &    |    |    dk7  |    fS r   rq   r  s    rn   r   z-_inverse_laplace_irrational.<locals>.<lambda>  r  rp   ra   r   r   z     rule 5.3.4r   z     rule 5.3.10r   z     rule 5.3.13r      r   z     rule 5.3.16z     rule 5.3.35/44z     rule 5.3.14z     rule 5.3.22z     rule 5.3.1z     rule 5.3.5z     rule 5.3.7z     rule 5.3.8z     rule 5.3.11z     rule 5.3.12z     rule 5.3.15z     rule 5.3.23z     rule 5.3.6z     rule 5.3.17   z     rule 5.3.18z     rule 5.3.19z     rule 5.3.2z     rule 5.3.9)r    r   r   as_ordered_factorsr   r  r   r  r  sortedr-  r   r/   r   r'   r=   ru   r<   r7   r;   )r  r{   r   r  r   r   rl   r  far   r  	constantszerospolesrestr  r   k_a_sqb_a_numr   r   s                        @@rn   _inverse_laplace_irrationalr!    s    	S1#AS1#AS1#AS1#AFI				 B*,	-Q!''1QT6!8a-
 	-B	-rzIEED 7a<!$I!W  LL!W  LLKK 5?@E5?@E
4yA~
5zQ3u:?8A;"q!!6q!U1Xa[(B58A;y(B~~tBxKQ'rE#b!eAg,&tBtAwJ'778  ()1Xa[B58A;!&&#88A;uQx{*DqB58A;>!)+BAd2hJtBx/Q771R463r!t9,c$r(472B.CA.EFG H  )*1Xa[B58A;!&&#8q!U1Xa[(B58A;>!)+B~~$r(
BE!GAI.tAw61SQq\)1RU719Q;7RQZ8HHI J  )*1Xa[B58A;!&&#8q!U1Xa[(B58A;>!)+A-B~~1RU71a4<2q5
2145c"a%'lBRQZ()$r(
2q5(QqT!V4aAgaikBC D  )*1Xa[QVVG#aq(8eAhqk%(1+-.B4a$$Y.B'!RT*+F()	UqSZ1_ar!eAhqkQVV&;aqvv%%(1+*: q!BeAhqk"58A;.y8BAb!eGAqDL2q5*1,-c"a%'l:RQZ !#$T"X:b="a%'!)#<T!W#DE  %&ar!eAhqkQ&6aqvv%%(1+*: q!U1Xa[(Bq!U1Xa[(BeAhqk"58A;.y8BCAJtAw&tBx/RUAJ1"42;tAw#6718 8 9  %&	UqSZ1_ar!eAhqkQ&6aw&58A;!+;aq  (1+eAhqk)B4a$$U1Xa[0:B~~T"X+c"Q$i/DHT!W4D0EE()ar!eAhqkQ&658A;!;Kar!eAhqkQVV&; q!U1Xa[(B58A;uQx{*2-i7B~~Qs2q57|DDG,<<<=()ar!eAhqkQVV&;aw&58A;!+;aq  q!U1Xa[(BE!HQKU1Xa[ 1129<B~~CAaLbaj)99()a!uQw&58A;!+;aq U1Xa[B%6aqvv%
 q!U1Xa[(BE!HQK!A$q&)%(1+56r1u<YFB~~$r(
2d1g-c"a%'l447
;K.KKAMN ()ar!eAhqkQVV&;ar!eAhqkQ&6aq  8A;uQx{*DqB58A;>!%(1+-i7B"!AbD#bd)3Db$q'9I4JJJ$r(
48+DG34 5  )*ar!eAhqkQVV&;aw&58A;!+;aq  q!U1Xa[(B58A;>!$uQx{"33I=B~~$r(
47*"Qs2q57|+DDG,<<= >  )*ar!eAhqkQVV&;aw&58A;!+;aq  q!B4a,,U1Xa[8B2q51aBE!G,T"T!W*-==$r(
2a!A$q&k)*+F %&ar!eAhqkQ&6aw&58A;!+; q!U1Xa[(Bq!U1Xa[(B4a,,U1Xa[8B$r"u+c2#a%j(T"R%[a-@)AACF%&	UqSZ1_ar!eAhqkQ&6ar!eAhqkQVV&;aqvv%%(1+*:aq  8A;uQx{*DqB(1+eAhqk)BeAhqk"58A;.uQx{:BrEB9LBBNNs2a4yLd2htAw&6!77HT"X%c"Q$i/T"Xd1g5E0FFGs2a4yL!" ()ar!eAhqkQ&6aq U1Xa[B%6aqvv%%(1+*:aqvv% !HQKa+Eq!U1Xa[(B%x1}1Xa[q!,U1Xa[8Bc"a%'lN447
#33A57)*ar!eAhqkQ&6aq U1Xa[B%6aqvv%%(1+*:aqvv% !HQKa+Eq!U1Xa[(B%x1}1Xa[!^E!HQK/aQ>yH"a%	#b!eAg,.tBtAwJ/???d2hJrM$q')*+ )*ar!eAhqkQ&6aq U1Xa[B%6aqvv%%(1+*:aqvv% !HQKa+Eq!U1Xa[(B%x1}1Xa[!^E!HQK/aQ>yHqQwq!t|Ab!eGAI-a/0RU1W=DG$%%&tBxZ]47%:Ab!eGAIaK%HIIJKL )*	UqSZ1_ar!eAhqkQ&658A;!;Kar!eAhqkQ&6aw&58A;!+; (1+eAhqk)B58A;uQx{*4a+<<YFB~~!A$qMC1I-DHT!W4D0EEbDbM$q')*+ ()ar!eAhqkQ&6ar!eAhqkQVV&;aw&58A;!+;aq  8A;uQx{*DqB(1+eAhqk)B%(1+eAhqk)$uQx{*;;b2b5!#  BNNHSAY&tDHT!W,<'==HSAY&s48DG+;'<<=HSAY&'( ()~|F"I--Q	 
.s   !$AW9c                 B    t         g}|D ]  } || |||      x}|c S  yr  N)r!  r   r{   r   r  ry  rz  r   s          rn   !_inverse_laplace_early_prog_rulesr%    s;    
 ..J 1a''A4H rp   c                 j    t         t        t        t        t        g}|D ]  } || |||      x}|c S  yr#  )r  r
  r  r  r!  r$  s          rn   !_inverse_laplace_apply_prog_rulesr'    sK    
 ./J,.C-/J  1a''A4H rp   c                    | j                   ryt        | d      }|j                   rt        ||||dd      S t        |       }|j                   rt        ||||dd      S t        |       }|j                   rt        ||||dd      S | j	                  |      r| j                  |      j                         }|j                   rt        ||||dd      S y)r  NFrt  Tr  )rv  r   r  r   r  r  r  )r  r{   r   r  r   s        rn   _inverse_laplace_expandr)    s    
 
yyrAxx)q!UUt= 	=2Axx)q!UUt= 	=r
Axx)q!UUt= 	=	q!HHQKxx)q!UUt= 	=rp   c          	      t   t        d      }| j                  |      }t        j                  |      }g }t        j
                  g}	|D ]  }
|
j                         \  }}|j                  |      j                         }|d   }|D cg c]  }||z  	 }}|j                  |      j                         D cg c]  }||z  	 }}t        |      dk(  r#|d   t        |      z  }|j                  |       t        |      dk(  r6|d   t        |d    |z        z  }|j                  t        |      |z         t        |      dk(  r|d   dz  }|d   |dz  z
  j                         }t        |      dk(  rt        j                  g|z   }t!        |      \  }}|dk(  r"||z  |d||z  z
  z  z   t        | |z        z  }nd}|j"                  r| }d}t%        t'        |dz  |z
  |      j)                               d   }t+        |      j-                         }|rM|t        | |z        z  t/        ||z        z  |||z  z
  |z  t        | |z        z  t1        ||z        z  z   }nL|t        | |z        z  t3        ||z        z  |||z  z
  |z  t        | |z        z  t5        ||z        z  z   }|j                  t        |      |z         t7        |
||||d      \  }}|j                  |       |	j                  |        t        | }|r|j-                  d	      }|t9        |	 fS c c}w c c}w )
r  x_r   ra   r   r   FTr  r  )r   r  r   r  r   r   r  r   rc  r-  r:   r  r'   r;   r  r   tupler  r   rQ   r  r/   r   r)   r+   r2   r3   r  rM   )r  r{   r   r  r   r+  r   r  r  r  r  r   r   r;  dc_leadr   r/  r   r   r   lr   hypb2bsr  r   rl   s                               rn   _inverse_laplace_rationalr2  &  s%   
 
B
AMM!EG&&J &$$$&AYYq\$$&Q%!#$Aai$$!"1!8!8!:;Aai;;r7a<1jm#ANN1W\1c2a5&(m#ANN9Q<>*W\1aAAq!t##%A2w!|ffX]9DAqAvqSAacE]C1I-==AC%Aa,1134Q7!W%%'#qbd)DAJ.!AaC%2r!t92%%)"Q$Z20 0  #qbd)C1I-1Q3
3r!t90DSAY0NNANN9Q<>*1aEHHHBNN2d#M&$P ']Fe,3
###O %;s   L05L5c                j   t        j                  |       }g }g }|D ]l  }	|	j                  t              r2|	j	                         j                         j	                         }	|	j                  d      \  }
}|r$|	j                        rt        ||||      x}	 Ct        ||      x}	 3t        |||      x}	 "t        |||      x}	 t        |||      x}	 nxt        fd|j                  t              D              rt!        |||      t"        j$                  f}n2t'        ||||      x}	 nt!        |||      t"        j$                  f}|\  }}|j)                  |
|z         |j)                  |       o t        | }|r|j+                  d      }t-        | }||fS )z
    Front-end function of the inverse Laplace transform. It tries to apply all
    known rules recursively.  If everything else fails, it tries to integrate.
    Fr  r   c              3   @   K   | ]  }|j                          y wr   r  )r   r  r   s     rn   r   z-_inverse_laplace_transform.<locals>.<genexpr>  s     B52Br  r  )r   r  r~   r'   r   rS   r  r  r2  r  r%  r)  r'  r  r   r	   r  r   r   rc   r  r   rM   )r  r   rX  r  r   r  r  r  r  r  r"  r   r   r  r  rl   r  s    `               rn   r  r  ^  s    MM"EGJ %88C= 99R"%..055b2#>D""2e"41t88</r2ux9 9 :!RDD72r5II-aR??72r5IIBAGGL,ABB )BE:AFFCA;r2ux9 9AEF (BE:AFFCA
cqu#K%N ']Fe,Z I9rp   c                   \    e Zd ZdZdZ ed      Z ed      Zd Ze	d        Z
d Zd Zd	 Zy
)r  z
    Class representing unevaluated inverse Laplace transforms.

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

    For how to compute inverse Laplace transforms, see the
    :func:`inverse_laplace_transform` docstring.
    zInverse LaplaceNoner   c                 Z    |t         j                  }t        j                  | ||||fi |S r   )r  _none_sentinelrG   __new__)r   r   r{   r   r  optss         rn   r9  zInverseLaplaceTransform.__new__  s0    =+::E ((aAuEEErp   c                 L    | j                   d   }|t        j                  u rd }|S )Nr   )rj   r  r8  )r  r  s     rn   fundamental_planez)InverseLaplaceTransform.fundamental_plane  s(    		!+:::Erp   c                 4    t        |||| j                  fi |S r   )rc   r<  )r  r   r{   r   r  s        rn   r  z*InverseLaplaceTransform._compute_transform  s&    5q!T++6/46 	6rp   c                 <   | j                   j                  }t        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 )Nr   )	__class___crE   r'   r   ImaginaryUnitr   Pi)r  r   r{   r   r   s        rn   r  z$InverseLaplaceTransform._as_integral  sw    NNS1XaZ!Q)C%C"#aooajj&@"@"B CqttVAOO#%	&rp   c                 8   |j                  dd      }|j                  dd      }t        d| j                  | j                  | j                  f       | j                  }| j                  }| j                  }| j
                  }t        |||||d      }|r|d   S |S )r  r  Tr   Fz[ILT doit] (%s, %s, %s)r  r   )r  rX   r  r  r  r<  r  )	r  r  r  rF   r   rX  r  r  r   s	            rn   r  zInverseLaplaceTransform.doit  s     99Y-IIj%0	(4==+/+A+A+/+B+B+D 	E ##$$]]&&&B	dD Q4KHrp   N)ri   r  r  r  r  r   r8  r@  r9  propertyr<  r  r  r  rq   rp   rn   r  r    sI     E6]N	sBF
  6&rp   r  c                    j                  dd      }j                  dd      }t        | t              r#t        | d      r| j	                  fd      S t        |       j                  d|      \  }}|r|S ||fS )a  
    Compute the inverse Laplace transform of `F(s)`, defined as

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

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

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

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

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

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

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

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

    Examples
    ========

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

    See Also
    ========

    laplace_transform
    hankel_transform, inverse_hankel_transform
    r  Tr   Fr  c                 "    t        | fi S r   )inverse_laplace_transform)Fijr  r  r{   r   s    rn   r   z+inverse_laplace_transform.<locals>.<lambda>	  s    1#q!ULeL rp   r  )r  r   rN   r  r  r  r  )	r   r{   r   r  r  r  rF   r   r   s	    ````    rn   rG  rG    s    Z yyD)H		*e,I!Z WQ%<{{LN 	N #1aE277	 8 +DAq !trp   c                    	
 t        dt        g      \  	
fdfdfd	
fdfd |       S )zEFast inverse Laplace transform of rational function including RootSumza, b, nr   c                     | j                        s| S | j                  r |       S | j                  r |       S | j                  r |       S t	        | t
              r |       S t        r   )r~   rv  rb  rx   r   rT   NotImplementedError)e_ilt_add_ilt_mul_ilt_pow_ilt_rootsumr{   s    rn   _iltz#_fast_inverse_laplace.<locals>._ilt	  s`    uuQxHXXA;XXA;XXA;7#?"%%rp   c                 J     | j                   t        | j                         S r   )rm   maprj   )rL  rQ  s    rn   rM  z'_fast_inverse_laplace.<locals>._ilt_add-	  s    qvvs4())rp   c                 f    | j                        \  }}|j                  rt        | |      z  S r   )r  rb  rK  )rL  r  r   rQ  r{   s      rn   rN  z'_fast_inverse_laplace.<locals>._ilt_mul0	  s3    &&q)t;;%%tDz!!rp   c                    | j                  z  z   z        }|j|   |   |   }}}|j                  r5|dk  r0	| dz
  z  t        ||z   	z        z  || z  t        |       z  z  S |dk(  rt        ||z   	z        |z  S t        r   )r   
is_Integerr'   r@   rK  )
rL  r   nmambmr   r   r   r{   r   s
        rn   rO  z'_fast_inverse_laplace.<locals>._ilt_pow6	  s    1q1%q58U1XBB}}aB3q5z#2hqj/12s75":3EFFQwRU8A:++!!rp   c                     | j                   j                  }| j                   j                  \  }t        | j                  t        |t         |                        S r   )funr   	variablesrT   polyr   rS   )rL  r   variablerQ  s      rn   rP  z+_fast_inverse_laplace.<locals>._ilt_rootsum@	  s@    uuzzUU__
qvvvhd0DEFFrp   )r   r    )rL  r{   r   rQ  rM  rN  rO  rP  r   r   r   s    ``@@@@@@@@rn   _fast_inverse_laplacer_  	  sI    iTA37GAq!& &*"" "G
 7Nrp   )Tr   )r  rg   rd   
sympy.corer   r   r   sympy.core.addr   sympy.core.cacher   sympy.core.exprr   sympy.core.functionr	   r
   r   r   r   r   r   r   r   r   sympy.core.mulr   r   sympy.core.relationalr   r   r   r   r   r   r   r   sympy.core.sortingr   sympy.core.symbolr   r   r    $sympy.functions.elementary.complexesr!   r"   r#   r$   r%   r&   &sympy.functions.elementary.exponentialr'   r(   %sympy.functions.elementary.hyperbolicr)   r*   r+   r,   (sympy.functions.elementary.miscellaneousr-   r.   r/   $sympy.functions.elementary.piecewiser0   r1   (sympy.functions.elementary.trigonometricr2   r3   r4   r5   sympy.functions.special.besselr6   r7   r8   r9   'sympy.functions.special.delta_functionsr:   r;   'sympy.functions.special.error_functionsr<   r=   r>   'sympy.functions.special.gamma_functionsr?   r@   rA   rB   -sympy.functions.special.singularity_functionsrC   sympy.integralsrD   rE   r  rF   rG   rH   sympy.logic.boolalgrI   rJ   rK   rL   rM   sympy.matrices.matrixbaserN   sympy.polys.matrices.linsolverO   sympy.polys.polyerrorsrP   sympy.polys.polyrootsrQ   sympy.polys.polytoolsrR   sympy.polys.rationaltoolsrS   sympy.polys.rootoftoolsrT   sympy.utilities.exceptionsrU   rV   rW   sympy.utilities.miscrX   re   rr   ru   r   r   rb   r   r   r  r  r	  r  r  r(  rT  r\  r`  rr  rw  r|  r  r  r  r  r   re  r  rc   r  r  r  r  r  r
  r  r!  r%  r'  r)  r2  r  r  rG  r_  rq   rp   rn   <module>r     s    
     $  & & & %< < < & 2 25 5 ; I I C C$ I I M M I A A, , M /: : E E 0 6 2 ' & . +I I '	<EXv 6 6 lL lL^    	U) 	U)p  * & &R  , ) )X  $  @ I' I'X ; ;@  8 / /d  8  "  4 , ,^9x*Z @$ @$F5( 5pNb M4 M4`   	% 	%P  8     >     ( w. w.t	 	 	    4 4$ 4$n 5 5pD/ DN:z*rp   