
    gR                       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]          ZdQd>Zezd?             Zezd@             Ze
dA             ZezdB             ZezdC             ZezdD             ZezdE             ZezdF             ZezdG             ZezdH             ZezdI             ZezdJ             ZezdK             ZezdL             Z G dM dNe]          ZdRdOZdP ZdS )Sz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                  b   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    rGd
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       S/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/integrals/laplace.pywrapzDEBUG_WRAP.<locals>.wrap1   sV   %%%%%%  	)4((((>>-cj1111tI~~t}}ddC:	 	 	 	Q	!AAA!III %E*d9n=CJOOOOT4*6**F $ET4*6**FQ	$y...&&9
KKKK>>-cj1111     )rm   ro   s   ` rn   
DEBUG_WRAPrr   0   s#        4 Krp   c                 j    ddl m} |r*t          ddt          z  | t          j                   d S d S )Nr   r[   r_   r`   r]   )rd   r\   rf   re   rg   rh   )textr\   s     rn   _debugru   N   sU    !!!!!!  ET)^^TT2DDDDDDE E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                 J    | k    rdS | j         r| j        k    r| j        S d S )Nra   )is_Powbaser'   )exss    rn   powerz_simplifyconds.<locals>.powerw   s1    7719 	A6Mtrp   c                 `   |                                r|                               rdS t          | t                    r| j        d         } t          |t                    r|j        d         }|                                r d|z  d| z            S  |          }|dS 	 |dk    r3t          |           t                    |z  k    t          j        k    rdS |dk     r3t          |           t                    |z  k    t          j        k    rdS dS dS # t          $ r Y dS 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:: 	#''!** 	4c3 	(1+Cc3 	(1+C771:: 	(6!C%3'''E#JJ94	1uu#c((c!ffai/AF::u1uu#c((c!ffai/AF::t u:: 	 	 	44	s   )7D "7D 
D-,D-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   sg     	*Q"4"4 		)3As););	ENF1aLL=5LArp   c                 H     | |          }|dv rdS t          | |          S )NTFT)r   )r   r   br   s      rn   repluez_simplifyconds.<locals>.replue   s2    F1aLL4!Qrp   c                 <    | dv rt          |           S  | j        | S )Nr   )boolreplace)rz   rj   s     rn   replz_simplifyconds.<locals>.repl   s'    88Orz4  rp   r   )collect_absc                      ||           S Nrq   )r   r   r   s     rn   <lambda>z _simplifyconds.<locals>.<lambda>   s    vva|| rp   )sympy.simplify.radsimpr   r   r   r   r   )	exprr{   r   r   r   r   r   r|   r   s	    ``   @@@rn   _simplifycondsr   V   s    B           ,             ! ! !
 322222;tD4b&!!D4b333344D4j&))DT77Nrp   c                 R    t          | |                     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4555rp   c                   t          d          |                     t                    rdS t          | t	           z            z  t
          j        t
          j        f          }|                    t                    s;t          |
                              |          t
          j        t
          j        fS |j        sdS |j        d         \  }}|                    t                    rdS fdfdt          |          D             }d |D             }|sd |D             }t!          t#          |                    }d |                    fd	
           |sdS |d         \  }}	fd}
|r"t'          ||          }t'          |	|          }	t          |
                              |           |
|          t)           |
|	                    fS )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 ]D}t          j        }g }t          |          D ]}|j        r|j        j        v r|j        }|j        r#t'          |t(          t*          f          r|j        }|D ]}|                    |          r nrG|         j        r:|         |         z  t2          dz  k    rt5          |         z              dk     }|                    |t7          |t          t          |
z                      z  |z            t          |z            |	z  z  z
  dk               sc|                    t7          |t          t          |z  |
z  |                    |z  z
            t          |z            |	z  z  dk               sp|                    |t7          t          t          t                    |z  |
z  |                    |z            t          |z            |	z  z  z
  dk               r9t9          fd||||	|
fD                       rt5                    |         k    }|                    t4          d                               t5                              }|j        r3|j        dv s*|                               s|                               s||gz  } ||          }|j        r	|j        dv r||gz  }|j!        k    r  d	S tE          |j!        |          }|t          j        urtG          ||          }-tI          |tK          |           }F||j        r|j&        n|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   2   K   | ]}|         j         V  d S r   )r   ).0wildms     rn   	<genexpr>zH_laplace_transform_integration.<locals>.process_conds.<locals>.<genexpr>   s:       - -TQtW0 - - - - - -rp   c                 Z    |                                                                  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   @@@@@@f&--((#* dQC$9 $9 $9 1b"b"b c#q2vqj//"""R'c#q2vqj//"""b(!1r6A+a-4455:!1r6A+a-4455;!:a"f#5#5"9!";R@@AABF!:a"f#5#5"9!";R@@AARGI  -	* -	*ABDq\\ &+ &+? #qAE,>'>'>
A? 'z!b"X'>'> 'A#  CA  +1) +aeAaDjBqD.@.@A"I*AGGABs3qt99~~$5b$8 9 9#ae**b. HH1LMM ,A$5aeBh$B$B C CB FFGGArE

B')*+, ,A  2C 1*Q--2CB2F J JKKBN !!R%jj"n- -/012 2A  % - - - -BB>, - - - - - %1!AYY>>@ @@DRUUA  O/0x</G/G66!99 0H,.FF1II 0HQCKD((Q//) T[L-H-HQCKD8q==444TXr**BB##AJJ#r4y))3#4=#--#==rp   c                 &    g | ]} |          S rq   rq   )r   r   r   s     rn   
<listcomp>z2_laplace_transform_integration.<locals>.<listcomp>  s#    777!]]1777rp   c                 f    g | ].}|d          t           j        k    r|d         t           j        u,|/S )ra   r   )r   falser   r   r   s     rn   r   z2_laplace_transform_integration.<locals>.<listcomp>  sH     : : :A!A$g# #A$a&888 888rp   c                 >    g | ]}|d          t           j        k    |S ra   )r   r   r   s     rn   r   z2_laplace_transform_integration.<locals>.<listcomp>  s#    666adagoo!ooorp   c                 6    | dv rdS |                                  S )Nr   r   )	count_opsr   s    rn   cntz+_laplace_transform_integration.<locals>.cnt  s"    =  1~~rp   c                 8    | d           | d                   fS Nr   ra   rq   )r   r   s    rn   r   z0_laplace_transform_integration.<locals>.<lambda>  s    qteSS1YY/ rp   keyc                 0    |                                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   listr   sortr   r   )fr   r   simplifyFcondr   conds2r   r   r   r   r   r{   s    ``        @@@rn   rb   rb      s    	c

AuuZ t!C1II+161:677A55?? N21113EqvMM> tfQiGAtuuX t=> => => => => =>~ 8777y777E: : : : :F 766U666!!E      
JJ////J000 t1XFAs            (1a##S!Q''QVVAr]]H--ss1vvz##c((7K7KKKrp   c                     t          | t                    s| S |                               x}|                                S | j        }fd| j        D             } || S )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)`.
    Nc                 0    g | ]}t          |          S rq   _laplace_deep_collect)r   r#   r   s     rn   r   z)_laplace_deep_collect.<locals>.<listcomp>7  s$    <<<c!#q))<<<rp   )r   r   as_polyas_exprrm   rj   )r   r   r   rm   rj   s    `   rn   r   r   *  sm     a YYq\\&yy{{6D<<<<QV<<<D4;rp   c                  O   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k    |dk              t          |dk     |dk                        t          j        |ft          |z  |z
            t          d          t          t          |dk     |dk              t          |dk    |dk                        t          j        |ft          |z  |z
            t          |  |z  |z            | z  t          |dk    |dk              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k    |dk              t          j        |ft          |z  |z
            dt          |dk     |dk              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k    t          j        |f|z  |z   |z  t'          |dz   ||z  | z            t          | |z  | z            z  | |dz   z  z  |z  t          |dk    t          t          ||z                      t          k               t          j        |f|z  |z   z  ||z  t%          |dz             z  t'          | || z            z  t          |dk    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k    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k    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k    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k    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k    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k    t          j        |ft/          |z            t/          t          t          j                  | z  |z             | z  |dk    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k    t          t          |                    t          k               t          j        |ft/                    t!                    z  t!          t          | z             t/          d| z  t          t          j                  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k    t          j        |ft/          |z            dz  t/          t          t          j                  | z  |z            dz  t          dz  dz  z   | z  |dk    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k    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k    t          |          |f|z  tC          |z            z  t%          |dz             dz  | |z
  | dz
  z  | |z   | dz
  z  z   z  |dk    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k    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k    t          j        |ftG          ||z            ||z  t!          | dz  |dz  z             | t!          | dz  |dz  z             z   |z  z  z  t)          |          dk    t          t7          |                    |f|z  tG          ||z            z  d|z  t!          t                    z  t%          |t          j$        z             z  ||z  z  | dz  |dz  z   | t          j$        z
  z  z  t          t)          |          t          j$         k    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k    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k    tK          ||t          j$        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k    t          t)          |                    |f|z  tM          ||z            z  d|z  t!          t                    z  t%          |t          j$        z             z  ||z  z  | dz  |dz  z
  | t          j$        z
  z  z  t          t)          |          t          j$         k    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k    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k    tK          ||t          j$        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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2222
3444y	
AaC	
	y 
AaCE		C1QKKA.	CAqAvAE16 2 2	3	3	
	S	"y 
AaCE		AaDD	CAqAvAE16 2 2	3	3	
	S	"y 
1Q3q5		3r!tAv;;q=	QUAE		AFC	)y 
1Q3q5		Ac1"Q$q&kkM1,	QUAE		AFC	)y 
1Q3q5		1Q3	QUAF		QVS	*y 
1Q3q5		1	QUAE		AFC	)y" 
AadF	
	#y& 
AaCES!Aa[[LQBqDF+A-	S1XX	QVS	*'y* 
4!A;;QrT!VS1QZZ/T!A#a%[[0A0AA!C	S1XX	QVS	*+y. A#a%AaDD57		
1!uQw<2a46QqTT!V,,S1QZZ7$tAaCE{{:K:KKAM	M	S1XX	QVS	*/y4 
a!A#RT

2d1gg:c!A#hh#6tD1II#FF	SVVr	163	(5y8 
Ad1ggIC 	!2a!A$$q&k>#ac((#:4QqS		??#J	
	9y< 
AuQqSzz!ac("	
R	=y@ A#a%!Z!QqSU++C1QKK7AaC@B	QVSQqS]]R'	(	(!&#	7AyD 
AqsQT%!**_ZAaC%8%88	QVSQ[[2%	&	&	5EyH 
QqSWsC4yy!A#	
A	IyL 
3qs3w<<cTAaC!8+	
A	MyP 
Ac!A#hhac

AaC1Q3</	ARUUC	!QyT 
aR1WtBqDF||C1QqMM1$qac{2C2CC	AAFC	!UyX 
3r!Q$w<<	
AaC488QqSAaDDFO+A-d1T!A#YY;.?.??	?	AAFC	!Yy^ 
aRTAd1Q3iiK1T!A#YY; 7 77	A!QVS	"_yb 
aaRT		
1aR1W	q4!99}	-c"T!A#YY,.?.?	?	A!QVS	"cyh 
aRT477	DAJJs2d1Q3ii<'8'88	A!QVS	"iyl 
aRTAd1ggI	RT

3r$qs))|+<+< <	AAFC	!myp 
Ac1"Q$iiAaCAaC7++GAaC4!99,E,EE	AAFC	!qyt 
RQqS		\			
RbdA1aL(QqS1DacOOC	C	SVVr	163	(uyz 
RQqS		\		477	"RTQqTT!V$4S1XX$=d4!99oo$M	SVVr	163	({y~ 
aRQBZ!qb'*Q"2"22	
	yB 
aRAYAj!Q///	AAFC	!CyF 
QqSCAL))!+A-...q0	
Q	GyJ 
QqsUc!A#hhYq[QBqD)	SVVr	163	(KyN 
QqSUc!ffS1QZZ\!^Br!tHH44a79	QUCAKK"$	%	%qvs	4OyR 
QQ$r!t**S1S->->)>%?%??	
	SyV 
Ac!ffeAaCjjaRT*GAaCLLQ,?@	AQVS	"WyZ 
QqS1s3q|,,Q.q01114RU1W<a?	
Q	[y^ 
U1Wuad5!8m,	
RYY	&_yb 
Sq\\		E1a4q=1$r!tAve|2D2DD	AFC	!cyf 
U1WaeAg	
RYY	&gyj 
U1Wq	C!E1H*QT/ 12214	
3r%yy>>!3	(kyn 
U1WqA		tAeGAI	qQqz!Q$%6!7!779	9	
3r%yy>>!3	(oyt 
QtAaCyy[		41::a<Q/QBqD		9	
	uyx 
QtAaCyy[		!	RD1II.	
	yy| 
U1Wq!Q$uax-(	
RYY	&}y@ 
U1Wq1a4%(
?QT!E1H*_=a?	
3r%yy>>!3	(AyD 
aQtAaCyy[!!	!488A:a1Q44%'l#:AacE#B3r!t99#L	
	EyH 
QtAaCyy[		$q''	!41::c1"Q$ii#7	
	IyL 
QqS#ac((	AaCE!GQT1Q3(]3QT1Q3(]C	
RUUC1JJ&	-MyP 
QqS#ac((	Aq!tAqDyA~.1acAX>1acAXN	
RUUC1JJ&	-QyT 
QqS#ac((	Aq!tAqDyA~.1acAX>1acAXN	
RUUC1JJ&	-UyX 
acAq!tAqDyM	
RUUS	"Yy\ 
acAq!tAqDyM	
RUUS	"]y` 
acAqAvq!tAadF1H}-	
3r!uu::s	$ayd 
acA1Qq!tVad1QT6!8m4	
3r!uu::s	$eyh 
ac1c1Q31+&&q(	
RUUS	"iyl 
Ad1Q3iiqsA!r!t}acaRT]'BC	
RQ	myp 
Ad1Q3iiqsA!r!t}acaRT]'BC	
RQ	qyt 
aQqS		k		DAJJqLa0QqS9	
	uyx 
aQqS		k		AaCRT

1T!WW 4S1XX =c$qs))nn LL	
	yy~ GGD4!99%%%1aLaddU1W%qs1u-!HHac^^$$%!QKB$78FAFC		!}yF 
aaQqS		k""	"B1aLaddU1W$=qs1u$Ec!A#hh$N	
	GyJ 
aQqS		k		477	"	add1fa1Q44%'l	"3qs88	+c$qs))nn	<FAFC	!KyP 
aQqS		k		477	"B1aLaddU1W$=c!A#hh$F	
	QyT 
d1Q3ii!	DGG	#R!A$$q&\!^A1aL%@#ac((1*%M	
	UyX 
d1Q3ii!	DGG	#R!A$$q&\!^A1aL%@#ac((1*%M	
	Yy\ 
QqS3q!tQqS1H}%%d1ac7mm3A5	
3s1vv;;	QVS	*]y` 
T!A#YYaac*1,	
QVbeeV$$c	+ayd 
QqS#d1Q3ii..	 $q''$q''/1Q3"7	
QVRUU##S	*eyh 
T!A#YYq[		Ac4!99*oo-q0	AAFC	!iyl 
d1Q3ii4!99T!WW,d1Q3ii79	
"Q%%	myp 
QqS$tAaCyy//	!1aQqS		k?	
	qyt 
d1Q3iik		Cac
OOA-	AAFC	!uyx 
AaC!Q$QT!Q$Y41QT	??1BQ0F FG	ASAZZ	&yy| 
Aga1oo		
Ad2hhuQqvX	&q!t	+QT!Q$Y1"QV),D	D	RUUafW_bAhh	'	'RUUS	:}yB 
Aga1oo		
QqS$r((	51Q446??	*1a4	/	11a4191Q446	2J	J	RUURZAqs	$	$c"Q%%jj#	7CyH 
Ad1Q3iiK	 	 #qbd))A+	
	IyL 
Q1T!A#YY;''	'QqS!qbd));C1II)E	RUURZAqx	)	)163	8MyP 
Ad1a4!8nn$	%	%	QqS41QT	??""	#	#DAadOO	3	SVVr	3r!uu::s	,QyV 
AaC!Q$QT!Q$Y41QT	??1BQ0F FG	ASAZZ	&WyZ 
Aga1oo		
Ad2hhuQqvX	&q!t	+QT!Q$Y1"QV),D	D	RUUafW_bAhh	'	'RUUS	:[y` 
Aga1oo		
QqS$r((	51Q446??	*1a4	/	11a4191Q446	2J	J	RUURZAqs	$	$c"Q%%jj#	7ayf 
Q1T!A#YY;''	'QqS!qbd));C!HH)D	RUURZAqx	)	)163	8gyj 
AaC"R%ac

*41QT	??:	
RUUS	"kyn 
AaC#q41QT	??2A566QT!Q$YH	
"Q%%	oyt #Aq((rp   c                    t          d|g          }t          dd          }|                     |          }|r||         j        d                             |          } |j        ||z            }|rr||         j        re||         dk    rYt          d           t          d||         z  ||                             |          z  ||||         z  d	          \  }}	}
||	|
fS d
S )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
 !fk!n$$Q''ci!nn 	3q6% 	#a&A++4555*#a&QQ'Ac!fHuF F FIAr2r2;4rp   c                    t          d|g          }t          d          }t          d          }|                     t          |          |z            x}rx||                             ||z
            x}r||         j        rht	          d           t          ||                             ||||         z             ||d          \  }}	}
t          ||          |z            |z  |	|
fS ||         j        r1t	          d           t          ||         ||d          \  }}	}
||	|
fS ||                             ||z
            x}r||         j        rMt	          d	           t          d
t          |||         z
            z
  ||         z  ||d          \  }}	}
||	|
fS ||         j        rt	          d           ddt          j
        fS dS )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llQ&'''s &a&,,q1u%%%3 
	#1v! 66777.FKK1s1v:..1uF F F	2rSVGaK((1,b"551v! #NP P P.s1vq!eLLL	2r2r{"a&,,q1u%%%3 	&1v! #9:::.1s1v:...#a&8!QP P P	2r2r{"1v! &;<<<1af~%4rp   c                    t          d|g          }t          d          }t          d          }|                     t          |          |z            }|r||                             |                              ||z            }|rPt	          d           t          ||         ||||         z
  d          \  }}	}
||	t          ||                   z   |
fS dS )	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))4rp   c                 t  
 t          dg          
t          dg          t          d          }t          d          |                     t          |          z            rE                             t                    s$|                                                           z  
z
            r)t          d           
                  z  }t          |          dk    rt          |          dk    rt          
                   z  z                     z  }|                    t          t                    r,|                    t                                                    }
fd|                                D             \  }}|dk    r%||z           z  t          j        t          j        fS d	S dt          j        t          j        fS |                                       rt'          |                   }|i k    rt)          |                                          d
hk    rgt-          |                   t/          fdt1          |                                          D              }	|	t          j        t          j        fS d	S )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   c                 Z    g | ]'}|                                       z            (S rq   r   )r   r   r   r   r	  r   s     rn   r   z'_laplace_rule_delta.<locals>.<listcomp>  s3    NNNQq#a&Q-00NNNrp   Nra   c                     g | ]o}t          |          d k    t          |          d k    (t          | z                                                   z                      |          z  pS )r   )r"   r!   r'   r   )r   r   r  r{   sloper   r  s     rn   r   z'_laplace_rule_delta.<locals>.<listcomp>  sv     M M M"Q%%1**A! 1"Q$iiAAq 1 11%**Q2B2BBAKrp   )r    r   r:   r~   r  ru   r!   r"   r'   r3   r2   rewriter5   ratsimpas_numer_denomr   r   r   is_polynomialrQ   setvaluesr   r   r   keys)r   r   r{   r   locfnr   r   ror   r   r   r  r	  r  r  s    ``       @@@@@@rn   _laplace_rule_deltar!  k  s    	S1#AS1#AS		AS		A
''*Q--/
"
"C
 73q6::j)) 7!fnnQ%%ac!e,, 	78999a&Q-C#ww!||31#a&Q)**3q6166#s## 4 D))1133BNNNNNNN":K:K:M:MNNN166aCAJ(:AFCC41-qv66q6"" 	7s1vq!!BRxxC		,,33SVQM M M M M M M M#BGGIIM M MN 1-qv664rp   c                 J   t           j        g}t           j        g}t          j        |           D ]_}|                    t
          t          t          t          t                    r|
                    |           J|
                    |           `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     UGEUGEb!!  88CdD#.. 	LLLLUAUAa4Krp   c                 0   t          d|g          }t          d|g          }t          d|g          }g }g }|                     t                                                    }t	          j        |          D ]}|                    |          s(|                    d|ddt          dt          di           @t          |                    d	          |          }|                    |t          ||z  |z             z            x}	q|                    d|	|         t          |	|                   z  d|	|         t          t          |	|                   t          t          |	|                   i           |                    |           ||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_expsumr3    st    
dQC	 	 	 B	dQC	 	 	 BS1#A	B	B	
3			 	 Bb!!  xx{{ 	IIsD#q"aQ7888$T\\%\%@%@!DDAc"Q$r'llN+++A8IIQqT#ae**_c1R5BquIIr2ae99. / / / / IIdOOOOr6Mrp   c           	      f   g }g }d fd}fd}fd}fd}d }	t          |           dk    rm|                                 }
d}d}d}t          t          |                     D ]}|
t                   | |         t                   k    }|
t                   | |         t                    k    }|
t                   | |         t                   k    }|
t                   | |         t                    k    }|r'|r%|
t                   dk    r|
t                   dk    r|}|r|r|
t                   dk    r|}|r|r|
t                   dk    r|}||||                     ||
| |         d	         | |         d	         | |         d	         |                     |                    t          t          |
d
                                        |||g}|                    d           |D ]}|                     |           n|c|                     ||
| |         d	         |                     |                    |
t                              |                     |           n!|o|                     ||
| |         d	         |                     |                    t          |
t                                        |                     |           n|o|                     ||
| |         d	         |                     |                    t          |
t                                        |                     |           n?|                     |	|
|                     |                    |
t                              t          |           dk    mt          | 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                    |                                  }t          t          |                    D ]}||                                         }|d                             t
                    r$||                             t                    ||<   `|d         t          |d         z  z                       t                    ||<   |S r   )	copyrangelenr   r~   r"   r  r2   r   )coeffsncr-  ris       rn   _simpcz"_laplace_trig_ltex.<locals>._simpc  s    [[]]s2ww 	7 	7AA##%%B!uyy}} 71c**1A2a511#661	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          fdt           |	          t          t          |	                    d d d                   D              }t          fdt          |
t          t          |
                    d d d                   D              }||z  S )	Nr   r-  r   r   r   c                 &    g | ]\  }}||z  z  S rq   rq   r   r   r   r{   s      rn   r   z9_laplace_trig_ltex.<locals>._quadpole.<locals>.<listcomp>  %    GGGAa1fGGGrp   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z9_laplace_trig_ltex.<locals>._quadpole.<locals>.<listcomp>  %    ???Aa1f???rp   )
r!   r"   r   r   r#  r   r   zipr7  r8  )t1k1k2k3r{   r   k0a_ra_ir:  dcr   r   r<  s       `        rn   	_quadpolez%_laplace_trig_ltex.<locals>._quadpole  sh   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",-.
 E161S!V8aQh.FCFQsAvXc1f_,sAv57 GGGGVVBZZs2ww"1E!F!FGGGI????Rs2ww")=!>!>???As
rp   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          fdt           |          t          t          |                    d d d                   D              }	t          fdt          |t          t          |                    d d d                   D              }
|	|
z  S )Nr   r-  r   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._ccpole.<locals>.<listcomp>  r@  rp   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._ccpole.<locals>.<listcomp>  rB  rp   	r!   r"   r   r   r#  r   rC  r7  r8  )rD  rE  r{   r   rH  rI  rJ  r:  rK  r   r   r<  s     `        rn   _ccpolez#_laplace_trig_ltex.<locals>._ccpole  s   S'2c7BrFBrF:2sC2gr"uqt|ac#gbj01eRVS!Vc1f_-GGGGVVBZZs2ww"1E!F!FGGGI????Rs2ww")=!>!>???As
rp   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          fdt           |          t          t          |                    d d d                   D              }	t          fdt          |t          t          |                    d d d                   D              }
|	|
z  S )Nr   r-  r   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._rspole.<locals>.<listcomp>  r@  rp   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._rspole.<locals>.<listcomp>	  rB  rp   rP  )rD  rF  r{   r   rH  rI  rJ  r:  rK  r   r   r<  s     `        rn   _rspolez#_laplace_trig_ltex.<locals>._rspole  s   S'2c7BrFBrF:2sC2gqtad{QqSWRZ/0eRT#XQwa/0GGGGVVBZZs2ww"1E!F!FGGGI????Rs2ww")=!>!>???As
rp   c                    | d         | d         }}||z   |||z
  z  g}t           j        t           j        |dz   g}t          fdt	           	|          t          t          |                    d d d                   D              }t          fdt	          |t          t          |                    d d d                   D              }||z  S )Nr   r-  r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._sypole.<locals>.<listcomp>  r@  rp   r   c                 &    g | ]\  }}||z  z  S rq   rq   r?  s      rn   r   z7_laplace_trig_ltex.<locals>._sypole.<locals>.<listcomp>  rB  rp   )r   r#  r   r   rC  r7  r8  )
rD  rG  r{   r   rH  r:  rK  r   r   r<  s
     `      rn   _sypolez#_laplace_trig_ltex.<locals>._sypole  s    3C22gq"r'{#eQVadU#GGGGVVBZZs2ww"1E!F!FGGGI????Rs2ww")=!>!>???As
rp   c                 :    | d         | d         }}|}||z
  }||z  S )Nr   r-  rq   )rD  r{   r   rH  r   r   s         rn   _simplepolez'_laplace_trig_ltex.<locals>._simplepole  s*    3C2Es
rp   r   Nr-  r   T)reverse)
r8  popr7  r!   r"   r%  r$   r   r   r-   )r0  r   r{   resultsplanesrL  rQ  rU  rY  r[  rD  	i_imagsym	i_realsym
i_pointsymireal_eqrealsymimag_eqimagsymindices_to_popr<  s                       @rn   _laplace_trig_ltexri    s    GF      .               b''A++VVXX		

 s2ww 
	 
	Af1b	)GfAr
*Gf1b	)GfAr
*G 7 r"v{{r"v{{

 W B1		 W B1	 %)*?*NN	"Y-,bmC.@Z.-q2 23 3 3 MM#bCkk**+++ (J?N---#  q				"NN772r)}S'91==>>>MM"R&!!!FF9"NN772r)}S'91==>>>MM#bf++&&&FF9#NN772r*~c':A>>???MM#bf++&&&FF:NN;;r1--...MM"R&!!!q b''A++t =#v,&&rp   c           
         t          dd          }|                     t          t          t          t
                    sdS t          |                     ||                    \  }}t          ||          \  }}t          |          dk    rdS |                    |          s&t          |||          \  }}	||z  |	t          j        fS g }
g }t          |||d          \  }}}|D ]h}|                    |d         |                    |||d	         z
            z             |
                    |t          |d	                   z              it!          |                     ||          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   r3  r8  ri  r   r   r  r%  r!   r   r-   )r  t_r{   r   r   r  r0  r1  r   r   r_  r^  GG_planeG_condr2  s                   rn   _laplace_rule_trigrq  Y  sd    	cA66#sD$'' trwwr1~~..DAq!!Q''FB
2ww{{t5588 
/!"a++1sAqv~ /1a%HHH7F 	/ 	/BNN2c7166!Qr#wY#7#77888MM'"RW++-....=a$$c6lF::rp   c                    t          dg          }t          dg          }t          d          }|                     |t          ||f          z            }|r||         j        rfd||         j        D             }t          |          dk    rt          d           g }t          ||                   D ]x}	|	dk    r||         	                    d          }
n,t          ||         |	f          	                    d          }
|
                    |||         |	z
  dz
  z  |
z             yt          ||         |d	
          \  }}}||         |||         z  |z  t          | z
  z  ||fS dS )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  c                 :    g | ]}|                               S rq   r~   )r   r  r   s     rn   r   z&_laplace_rule_diff.<locals>.<listcomp>  s#    +++!QUU1XX+++rp   ra   z"     rule: time derivative (4.1.8)r   Fr  N)r    r   r   r
   
is_integerrj   sumru   r7  r   r%  r  r   )r   r   r{   r   r   r  r  r   r   r-  r   r   r
  r  s    `            rn   _laplace_rule_diffrw  z  s    	S1#AS1#ASA
''!Jq1a&)))
*
*C
 =s1v  =++++s1v{+++q66Q;;7888A3q6]] , ,66AAq))AA"3q6Aq622771==ASVAXaZ*++++*3q61a%HHHIAr2FAs1vIaK#q'12R<<4rp   c           
      2   | j         rdg}dg}t          j        |           D ]B}|                    |          r|                    |           -|                    |           Ct          |          dk    r~t          |          }t          ||                                          t                    dk    r7t          |          }t          |||d          \  }}	}
|gd}	 t          d         |           }n# t          $ r d}Y nw xY w|                    t                    rFt          dz
            D ]2}                    d|dz   z  t          |||dz             z             3nV|rT                    |           t          dz
            D ],}                    t          d         |                      -|r)t!          fdt                    D              }||	|
fS t#          d|g          }t#          d	          }|                     ||z  |z            x}r^||         j        rQ||         j        rDt          ||         ||d          \  }}	}
d||         z  t          ||||         f          z  |	|
fS d
S )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   c                 >    g | ]}|z
  d z
           |         z  S r   rq   )r   r   Nderipcs     rn   r   z'_laplace_rule_sdiff.<locals>.<listcomp>  s.    BBBAb1QiQ/BBBrp   r   r   r  N)is_Mulr   r$  r  r%  r8  r   rR   
all_coeffsr  r   
ValueErrorr~   LaplaceTransformr7  r
   r   r    r   ru  r   )r   r   r{   pfacofacfacpexoexr_p_c_d1r-  r   r   r  r  rz  r{  r|  s                    @@@rn   _laplace_rule_sdiffr    s    	x 'ss=## 	! 	!C  ## !C    C    t99q==t**Cc1((**BBA1uu4jj/QEJJJ
BttBx+++BB!   BBB66*++ 8"1Q3ZZ H HR1Q3K
2q!A#0F0F$FGGGGH 8KKOOO"1Q3ZZ 8 8T$r(A%6%6$67777 'BBBBBBqBBBCAr2;& 	S1#AS		Aggad1foos >q6 	>Q!3 	>+CFAq5IIIJBBQ<R!SV 5 55r2==4s   0D DDc                    t          | d          }|j        rt          |||d          S t          |           }|j        rt          |||d          S t          |           }|j        rt          |||d          S || k    rt          |||d          S t          t	          |                     }|j        rt          |||d          S dS )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_expandr    s     	quAx ;!!QE::::1Ax ;!!QE::::q		Ax ;!!QE::::Avv!!QE::::{1~~Ax ;!!QE::::4rp   c                     t           t          t          t          t          t
          t          g}|D ]} || ||          x}|c S dS )zk
    This function applies all program rules and returns the result if one
    of them gives a result.
    N)r  r!  r  r  rq  rw  r  )r   r   r{   
prog_rulesp_ruleLs         rn   _laplace_apply_prog_rulesr    s[     *+>)+<$$&9;J
   1a A-HHH .4rp   c                    t                      \  }}}d}d}|D ]\  }}	}
}}||k    r" ||                     ||i                    }|}|                    |          }|r	 |
                    |          }n# t          $ r Y jw xY w|t
          j        k    rL|	                    |                              ||i          |                    |          t
          j        fc S dS )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_rulesrm  r   prep_oldprep_ft_doms_domcheckplaneprepmar   s                  rn   _laplace_apply_simple_rulesr    s    011L"bHF,8 4 4(ueUDtT!&&!R//**FH\\%   		4NN2&&     AF{{r**//Q88r**AF4 4 4 44s   !A77
BBc                 2   |j         sKt          dd          }t          |                     ||i          |                              ||i          S t	          |           }g }|j        D ]\  }}t          |t                    r\||j        v rSt          |t          t          f          r| c S |
                    t          |j        |j        z
            |z             wt          |t                    rft          |j                  dk    rN|j        D ]E}|j        |k    r3|
                    t          |j        |j        z
            |z             @| c c S t          |t"                    rt          |j                  dk    r|j        \  }}|j        |k    ri|j        |k    r^d|j        v r||}}|
                    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   Trk  r   >)is_realr   _piecewise_to_heavisider  r1   rj   r   r   r   r   r%  r;   gtsr   rL   r8  lhsrM   r   r   )	r   r   r   r   r  r   c2r,  r+  s	            rn   r  r    s'    9 O#D!!!&qzz1a&'9'91==FF1vNNNAA
AF    D dJ'' 	ANN$R)) <
 48dh#677:;;;;b!! 	c$)nn&9&9i  6Q;;HHYrv77:;;;;HHHHH	
 c"" 	s49~~':':YFBv{{rv{{")##Brv//rv//01345 5 5 5 HHH7Nrp   c          	         t          d          }t          d          }t          d          }t          d          }t          | t                    r4|                     t                    s|                     t
                    s| S                                 D ]\  }}|                     t	           ||          ||                    x}%||         ||         k    r |||                   c S |                     t           ||          |||                    x}	 %||         ||         k    r |||                   c S | j        }	fd| j	        D             }
 |	|
 S )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   Nc                 0    g | ]}t          |          S rq   )laplace_correspondence)r   r#   fdicts     rn   r   z*laplace_correspondence.<locals>.<listcomp>|  s$    AAA3"3..AAArp   )
r    r   r   r~   r  InverseLaplaceTransformitemsr   rm   rj   )r   r  r   r{   r   r   r   Yr   rm   rj   s    `         rn   r  r  D  sl   H 	S		AS		AS		AS		A1d##EE*++ 566  	 	1gg.qqttQ::;;;HaDAaDLL1QqT77NNNgg5aaddAq!DDEEEaDAaDLL1QqT77NNN6DAAAA!&AAAD4;rp   c                   |                                 D ]\  }}t          t          |                    D ]}|dk    r&|                      |d          |d                   } .|dk    rC|                     t	          t           ||          |          |d          |d                   } w|                     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  r7  r8  r   r   r
   )r   r   r  r   icr-  s         rn   laplace_initial_condsr    s    D  K K2s2ww 	K 	KAAvvIIaaddBqE**aIId:aaddA#6#61==r!uEEIId:aaddQF#;#;QBBBqEJJ	K Hrp   c                   t          j        |           }g }g }g }g }|D ]C}	|	                    d          \  }
}|                    t                    rft          j        |                    t                              }|D ]6}|                    d          \  }}|                    |
|z  |f           7|j        t          k    r|                    t                              s]t          j        t          |                    }|D ]6}|                    d          \  }}|                    |
|z  |f           7,|                    |
|f           E|D ]\  }
}|                    t                    r t          ||          t          j        df}n*|                    t                              rE|                    t                              s#|                    t                    d          }t!          ||          x}	 't#          ||          x}	 t%          ||          x}nt'          fd|                    t*                    D                       rt          ||          t          j        df}n5t-          |||          x}	 nt          ||          t          j        df}|\  }}}|                    |
|z             |                    |           |                    |           t          | }|r|                    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   Nc              3   B   K   | ]}|                               V  d S r   rt  )r   undefrm  s     rn   r   z%_laplace_transform.<locals>.<genexpr>  s-      GGuUYYr]]GGGGGGrp   r  doit)r   r$  as_independentr~   rC   r  r;   r%  rm   r0   r:   r  r  r   r   r   r  r  r  anyr   r	   rb   r   r-   rM   )r  rm  r   r   terms_tterms_stermsr_  
conditionsffr-  ft_terms_termrE  f1r   ri_pi_ci_rl   r  	conditions    `                     rn   r  r    s    mBGGEFJ " "!!"U!33266%&& 	"]2::i#8#899F ) )--b-??BadBZ(((() W	!!"&&B*@*@!]#:2r#B#BCCF ) )--b-??BadBZ(((() LL!R!!!!  266%&& 	M!"b"--q/A4HAAvvimm$$ /RVVJrNN-C-C / WWYr]]A..5b"bAAAQ 3BB???Q )"b"555QBGGGG0F0FGGGGG 	M &b"b1113EtL5B3 3 3 3!;?@%b"b1113Et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dS )r  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                 X    |                     dd          }t          ||||          }|S )Nr   Fr  )getrb   )selfr   r   r{   hintsrF   LTs          rn   _compute_transformz#LaplaceTransform._compute_transform  s0    IIj%00	+Aq!iHH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                    |                     dd          }|                     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   rm  r   r  r   s           rn   r  zLaplaceTransform.doit	  s     99Y--IIj%00	'$-*.*@*.*A*C 	D 	D 	D #$]r2rI>>> 	Q4KHrp   N)ri   
__module____qualname____doc___namer  r  r  rq   rp   rn   r  r    sR          E  
> > >    rp   r  Tc                                         dd          }                     dd          }t          | t                    rt          | d          r                     dd           }|r]|r[d}t	          dd|           t          t                    5  |                     fd	          cd
d
d
           S # 1 swxY w Y   njfd| D             }	|r<t          |	 \  }
}} t          |           g | j
        |
R  }|t          | t          | fS  t          |           g | j
        |	R  S t          |                               d|          \  }}}|s|||fS |S )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! E Eu E E rp   Nc                 .    g | ]}t          |fi S rq   r  )r   r  r  r{   r   s     rn   r   z%laplace_transform.<locals>.<listcomp>  sG     2 2 2(+ 0Q$ $"$ $ 2 2 2rp   r  r   )r  r   rN   hasattrrU   rW   rV   r  rC  typeshaper-   rM   r  r  )r   r   r{   legacy_matrixr  r  rF   r   adtelements_transelementsavalsr  	f_laplacer  r   r   s    `` `            rn   r  r  )  s:   N yyE**H		*e,,I!Z   9WQ%<%< 9IIi/// 	9] 	97C%
 */+.    !!899 G G{{EEEEEEG GG G G G G G G G G G G G G G G G G2 2 2 2 2 2/02 2 2N 9.1>.B+%#DGG7QW7h777	 #u+sJ/???tAww8888881a((--e7@ . B BHB1  1ax	s   B??CCc                   ddl m}m ddlm} t          dd          fd}|                               r|                               } | j        rCt          fd| j
        D              }t          |                    |                    dfS 	  || t                     d	t          j        fdd
          \  }}	n# t           $ r d	}Y nw xY w|l ||           }|d	S |j        r-|j
        d         \  }}	|                    t&                    rd	S nt          j        }	|                    t,          |          }|j        r|                    |          |	fS t          d          t          j        ffd	}
|                    t0          |
          }d }|                    t          |          }t          |                    |                    |	fS )z6 The backend function for inverse Laplace transforms. r   )meijerint_inversion_get_coeff_exp)inverse_mellin_transformr   Trk  c                  x   t          |           dk    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   )r8  r0   rj   argumentr;   r$   )rj   r#   coeffexponente1e2r  r   s         rn   pw_simpz7_inverse_laplace_transform_integration.<locals>.pw_simp  s    t99>>d##1gl1o&(.a00x!W\!_!W\!_aE

lQ[011"4akAc%jjL011"45	6rp   c           	      6    g | ]}t          |          S rq   )rc   )r   Xr  r{   r   r   s     rn   r   z:_inverse_laplace_transform_integration.<locals>.<listcomp>  s9        5Q1eXNN   rp   NF)needevalr  uc                 l    | j         t                               }|                              rt          | |          S ddlm}  ||dk              }|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    CHS!WWa  5588 	&S"%%%@@@@@@Aq))7a<<CGAQUB'''CGAq1uXr***rp   c                 :    t          t          |                     S r   )r   r'   )r#   s    rn   simp_expz8_inverse_laplace_transform_integration.<locals>.simp_exp  s    c#hh'''rp   )sympy.integrals.meijerintr  r  sympy.integrals.transformsr  r   is_rational_functionapartr  r   rj   rF   r   r'   r   r   rH   r   r~   rE   r   r   r0   r   r;   )r   r{   rm  r  r   r  r  r  r   r   r  r  r  r   r  s    ` ``       @@@rn   rc   rc     s    NMMMMMMMCCCCCC 	cA
6 
6 
6 
6 
6 
6 	a   GGAJJx 8      v    211477**1aaR4:L48%I I I44!    	y1a((94> 	fQiGAtuuX t 6DIIi))~ # vva}}d""c

A v + + + + + + + 	
		)^,,A( ( ( 	
		#x  AQVVAr]]H--t33s   !.C CCc                 $   ddl m}  ||           \  }}|                    |          rc|                    |                                          }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   r~  r8  )	r   r{   r  r   r   cfr   r   r   s	            rn   _complete_the_square_in_denomr    s    //////Xa[[FQq 4YYq\\$$&&r77a<<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                 R    	 |                      |          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;; 	 	 	HHH	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II-eAhh6FD!	 
AqDAI>	C!HHqs3qs88|3a1f=	
q	 
AqD1q1u:eAhh&a8	
AqsQhJAqs++QT%((];	
q	J q!rp   c                 D   | dk    r*t          d           t          |          t          j        fS t	                      \  }}}d}|                     ||i          }|D ]\  }}	}
}}|||fk    r |||z            }||f}|                    |          r|
}|t          j        urfd|d         D             } |d         | }|t          j        k    rHt          |          |	                                                  ||i          z  t          j        fc S dS )@
    Helper function for the class InverseLaplaceTransform.
    ra   z     rule: 1 o---o DiracDelta()r  c                 :    g | ]}|                               S rq   )r  )r   r   r  s     rn   r   z7_inverse_laplace_apply_simple_rules.<locals>.<listcomp>U  s#    5551

2555rp   r   N)	ru   r:   r   r   r  r   r   r;   r  )r   r{   r   r  r   rm  _prepfsubsr  r  r  r  r  _Fr   rj   r  s                   @rn   #_inverse_laplace_apply_simple_rulesr  @  s@   
 	Avv0111!}}af$$577JBEFFAr7OOE*4 M M&ueT3T3KeCiB3KEXXe__ 	MA5555!555AaD$KAF{{ ||ENN2$6$6$;$;RG$D$DDafLLLL4rp   c                 V   t          d|g          }t          d|g          }t          d          }|                     |t          |||f          z            }|rK||         j        r>t	          d           t          ||         |||dd          \  }}	| ||         z  |z  |	fS dS )	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
   ru  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EE)qE1a5B B B1RU{1}a4rp   c                     t          d|g          }t          d          }|                     |          s| t          |          z  t          j        fS |                     t
                    sdS |                     t          ||z                      }|r^||         j        r3t          d           t          |||         z             t          j        fS t          | |||          t          j        fS |                     t          ||z            |z            }|r^||         j        r3t          d           t          ||         ||||         z   |dd	          S t          | |||          t          j        fS dS )
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88 'A&&55:: t
''#ac((

C
 Cq6 	C?@@@aAh''//*1aE::AFBB
''#ac((1*

C
 Cq6 	CJKKK-A1SV8UUtM M M M +1aE::AFBB4rp   c                    |                      |          s| t          |          z  t          j        fS t	          | j        x}          dk    rt          d|g          }|d                             ||z
            x}rtt          ||                   j	        rZt          d           t          ||          |z            t          |                     |          |||          z  t          j        fS dS )r  ra   r   r   r   z&     rule: F(s-a) o---o exp(-a*t)*f(t)N)r~   r:   r   r   r8  rj   r    r   r!   r   ru   r'   r  rm   )r   r{   r   r  rj   r   r  s          rn   _inverse_laplace_freq_shiftr%    s    
 5588 'A&&
16>4aqc"""q'--!$$$B 	I"RU))*? 	I;<<<RUF1H'q		1a??@ABI I 4rp   c                    t          d|g          }t          d          }|                     ||z  |z            }|r||         j        r||         j        rt	          d           t          ||         |||dd          \  }}|                    t          |          d          }|                    t                    rt          ||||                   |fS t          |          t          ||||                   z  |fS d	S )
r  r   r   r  z+     rule: s**n*F(s) o---o diff(f(t), t, n)FTr  ra   N)r    r   ru  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
 6s1v  6SV%7 6<===)FAq%%DB B B1IIillA&&55()) 	61c!f%%q((Q<<Q3q6 2 22A554rp   c           	      9   t          dg          t          dg          t          dg          t          dg          d}t          j        }|                                 }fd|D             }d|v rdS t          j        }g }	g }
g }|D ]o}|         dk    r||z  }|         j        r|	                    |           7|         j        r|
                    |           Z|                    |           pt          |
fd	
          }
t          |	fd
          }	t          |          dk    rdS t          |
          dk    rt          |	          dk    r|
d                  dk    r|
d                  t          j
        k    r|
d                  |
d                  z  }d|
d                  z  |z  }|j        rr|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           n|
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           nl|
d                  t          j
         k    r|
d                  dk    rpt          |
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    rK|
d                  dk    r8|	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           nt          |
          dk    	r}t          |	          dk    	ri|
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        ra|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    r|
d                  |
d                  z  }d|
d                  z  |
d                  z  |z  |z  }|j        rJ|dt          |dz  |z            t          |t          |          z            z  z
  z  }t          d           n|
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                  t          |
d                            z  z  |z  }|j        rG|t          |dz  |z            z  t          |t          |          z            z  }t          d           n|
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        ru|dt          t                    z  |z  t          |          z  t          |dz  |z            t          |t          |          z            z  z   dz
  z  }t          d            ns|
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!           n |
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        rx|dt          t                    z  t          |          z  d|z  |z  t          |dz  |z            z  t          |t          |          z            z  z
  z  }t          d"           n|
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    r|
d                  t          j
         k    r|
d                  dk    r|
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$           
n}t          |
          dk    rt          |	          dk    r|
d                  dk    r|
d                  dk    r|
d                  dk    r|
d                  t          j
        k    r|	d                  t          j
        k    r|	d                  dk    ro|	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    rD|
d                  dk    r1|
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&           n	|
d                  dk    r|
d                  dk    rm|
d                  dk    rZ|
d                  dk    rG|
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(           nv|
d                  dk    r|
d                  dk    r|
d                  dk    r}|
d                  dk    rj|
d                  t          j
        k    rM|	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  |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    ru|
d                  dk    rb|
d                  dk    rO|
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    r|
d                  dk    r|
d                  t          j
        k    r|
d                  t          j
         k    r|
d                  dk    r|
d                  dk    rt|
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+           |dS t%          |          |z  |fS ),r  r   r   r   r   r   Nc                 R    g | ]#}|                     z  z  z   z            $S rq   )r   )r   r   r   r   r   r   r{   s     rn   r   z/_inverse_laplace_irrational.<locals>.<listcomp>  s5    	-	-	-Q!''1QT6!8a-
 
 	-	-	-rp   r   c                 :    |          |          dk    |          fS r   rq   r   r   r   s    rn   r   z-_inverse_laplace_irrational.<locals>.<lambda>      1qtqy!A$(? rp   r   c                 :    |          |          dk    |          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  sortedr8  r   r/   r   r'   r=   ru   r<   r7   r;   )r  r{   r   r  rl   r  far  	constantszerospolesrestr(  r   k_a_sqb_a_numr   r   r   r   s    `                @@@@rn   _inverse_laplace_irrationalr=    s/    	S1#AS1#AS1#AS1#AFI				 	 B	-	-	-	-	-	-	-	-"	-	-	-BrzztIEED  7a<<!$II!W  	LL!W  	LLKK 5?????@@@E5?????@@@E
4yyA~~t
5zzQ3u::??8A;"q!!6!6q!U1Xa[(B58A;y(B~ *tBxxKQ'rE#b!eAg,,&tBtAwwJ'7'778  ()))1Xa[B58A;!&#8#88A;uQx{*DqB58A;>!)+B +Ad2hhJtBxx/Q771R463r!t99,c$r((4772B.C.CA.EFG H  )***1Xa[B58A;!&#8#8q!U1Xa[(B58A;>!)+B~ +$r((
BE!GAI.tAww61SQq\\)1RU719Q;7RQZ8H8HHI J  )***1Xa[B58A;!&#8#8q!U1Xa[(B58A;>!)+A-B~ +1RU71a4<2q5
2145c"a%'llBRQZ(()$r((
2q5(QqTT!V4aAgaikBC D  )***1Xa[QVG##aq(8(8eAhqk%(1+-..B4a$$$Y.B'!RT**+F()))	UqSZZ1__ar!!eAhqkQV&;&;aqv%%%(1+*:*: q!BeAhqk""58A;.y8BAb!eGAqDL2q5*1,-c"a%'ll:RQZ  !#$T"XX:b="a%'!)#<T!WW#DE  %&&&ar!!eAhqkQ&6&6aqv%%%(1+*:*: q!U1Xa[(Bq!U1Xa[(BeAhqk""58A;.y8BCAJJtAww&tBxx/RUAJJ1"42;;tAww#67718 8 9  %&&&	UqSZZ1__ar!!eAhqkQ&6&6aw&&58A;!+;+;aq   (1+eAhqk)B4a$$$U1Xa[0:B~ *T"XX+c"Q$ii/DHHT!WW4D0E0EE()))ar!!eAhqkQ&6&658A;!;K;Kar!!eAhqkQV&;&; q!U1Xa[(B58A;uQx{*2-i7B~ *Qs2q57||DDGG,<,<<<=()))ar!!eAhqkQV&;&;aw&&58A;!+;+;aq   q!U1Xa[(BE!HQKU1Xa[ 1 1129<B~ *CAaLLbaj)9)99()))a!uQw&&58A;!+;+;aq  U1Xa[B%6%6aqv%%
 q!U1Xa[(BE!HQK!A$$q&)%(1+56r1u<YFB~ *$r((
2d1gg-c"a%'ll4477
;K;K.KKAMN ()))ar!!eAhqkQV&;&;ar!!eAhqkQ&6&6aq   8A;uQx{*DqB58A;>!%(1+-i7B +"!AbD#bd))3Db$q''9I4J4JJJ$r((
488+DGG34 5  )***ar!!eAhqkQV&;&;aw&&58A;!+;+;aq   q!U1Xa[(B58A;>!$uQx{"3"33I=B~ +$r((
477*"Qs2q57||+DDGG,<,<<= >  )***ar!!eAhqkQV&;&;aw&&58A;!+;+;aq   q!B4a,,,U1Xa[8B2q51aBE!G,T"T!WW*-=-==$r((
2a!A$$q&k)*+F %&&&&ar!!eAhqkQ&6&6aw&&58A;!+;+; q!U1Xa[(Bq!U1Xa[(B4a,,,U1Xa[8B$r"u++c2#a%jj(T"R%[[a-@)A)AACF%&&&	UqSZZ1__ar!!eAhqkQ&6&6ar!!eAhqkQV&;&;aqv%%%(1+*:*:aq   8A;uQx{*DqB(1+eAhqk)BeAhqk""58A;.uQx{:BrEB9LB *BN *s2a4yyLd2hhtAww&6!7!77HHT"XX%c"Q$ii/T"XXd1gg5E0F0FFGs2a4yyL!" ()))ar!!eAhqkQ&6&6aq  U1Xa[B%6%6aqv%%%(1+*:*:aqv%% !HQKa+Eq!U1Xa[(B%x1}}1Xa[q!,U1Xa[8Bc"a%'llN4477
#3#33A57)***ar!!eAhqkQ&6&6aq  U1Xa[B%6%6aqv%%%(1+*:*:aqv%% !HQKa+Eq!U1Xa[(B%x1}}1Xa[!^E!HQK/aQ>yH"a%	#b!eAg,,.tBtAwwJ/?/???d2hhJrM$q'')*+ )***ar!!eAhqkQ&6&6aq  U1Xa[B%6%6aqv%%%(1+*:*:aqv%% !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GG$$%%&tBxxZ]477%:Ab!eGAIaK%HIIJKL )***	UqSZZ1__ar!!eAhqkQ&6&658A;!;K;Kar!!eAhqkQ&6&6aw&&58A;!+;+; (1+eAhqk)B58A;uQx{*4a+<+<<YFB~ *!A$$qMC1II-DHHT!WW4D0E0EEbDbM$q'')*+ ()))ar!!eAhqkQ&6&6ar!!eAhqkQV&;&;aw&&58A;!+;+;aq   8A;uQx{*DqB(1+eAhqk)B%(1+eAhqk)$uQx{*;*;;b2b5!#   *BN *HHSAYY&tDHHT!WW,<'='==HHSAYY&s488DGG+;'<'<<=HHSAYY&'( ()))~t||F"I--rp   c                 H    t           g}|D ]} || |||          x}|c S dS r  N)r=  r   r{   r   r  r  r  r   s          rn   !_inverse_laplace_early_prog_rulesrA    sI    
 ..J  1a'''A4HHH 54rp   c                 x    t           t          t          t          t          g}|D ]} || |||          x}|c S dS r?  )r#  r%  r'  r!  r=  r@  s          rn   !_inverse_laplace_apply_prog_rulesrC    sY    
 ./J,.C-/J   1a'''A4HHH 54rp   c                    | j         rdS t          | d          }|j         rt          ||||dd          S t          |           }|j         rt          ||||dd          S t          |           }|j         rt          ||||dd          S |                     |          r'|                     |                                          }|j         rt          ||||dd          S dS )r  NFr  Tr  )r  r   r   r   r  r	  r  )r  r{   r   r  r   s        rn   _inverse_laplace_expandrE    s)   
 
y trAx =)q!UUt= = = 	=2Ax =)q!UUt= = = 	=r

Ax =)q!UUt= = = 	=	q!! HHQKKx =)q!UUt= = = 	=4rp   c          	         t          d          }|                     |          }t          j        |          }g }t          j        g}	|D ]V}
|
                                \  }}|                    |                                          }|d         fd|D             }fd|                    |                                          D             }t          |          dk    r.|d         t          |          z  }|                    |           t          |          dk    rI|d         t          |d          |z            z  }|                    t          |          |z             't          |          dk    r|d         dz  }|d         |dz  z
                                  }t          |          dk    rt          j        g|z   }t!          |          \  }}|dk    r'||z  |d||z  z
  z  z   t          | |z            z  }n%d}|j        r| }d	}t%          t'          |dz  |z
  |                                                    d         }t+          |                                          }|r]|t          | |z            z  t/          ||z            z  |||z  z
  |z  t          | |z            z  t1          ||z            z  z   }n\|t          | |z            z  t3          ||z            z  |||z  z
  |z  t          | |z            z  t5          ||z            z  z   }|                    t          |          |z             t7          |
||||d
          \  }}|                    |           |	                    |           Xt          | }|r|                    d          }|t9          |	 fS )r  x_r   c                     g | ]}|z  S rq   rq   r   r   dc_leads     rn   r   z-_inverse_laplace_rational.<locals>.<listcomp>4  s    $$$Aai$$$rp   c                     g | ]}|z  S rq   rq   rI  s     rn   r   z-_inverse_laplace_rational.<locals>.<listcomp>5  s    ;;;Aai;;;rp   ra   r   r   FTr  r  )r   r	  r   r$  r   r   r  r   r~  r8  r:   r%  r'   r;   r  r   tupler  r   rQ   r  r/   r   r)   r+   r2   r3   r   rM   )r  r{   r   r  r   rG  r   r  r  r  r(  r   r   rK  r:  r   r   r   lr   hypb2bsr  r   rl   rJ  s                             @rn   _inverse_laplace_rationalrQ  &  s   
 
B
AM!EG&J &$ &$$$&&AYYq\\$$&&Q%$$$$$$$;;;;1!8!8!:!:;;;r77a<<1jmm#ANN1WW\\1c2a5&(mm#ANN9Q<<>****WW\\1aAAq!t##%%A2ww!||fX]99DAqAvvqSAacE]C1II-= AC%Aa,,113344Q7!WW%%'' O#qbd))DAJJ.!AaC%2r!t992%%)"Q$ZZ20 0 A #qbd))C1II-1Q3
3r!t990DSAYY0NNANN9Q<<>****1aEHH H HHBNN2d####']F -e,,3
###rp   c                   t          j        |           }g }g }|D ]}	|	                    t                    r>|	                                                                                              }	|	                    d          \  }
}|r,|	                              rt          ||||          x}	 St          ||          x}	 ?t          |||          x}	 *t          |||          x}	 t          |||          x}	 nt          fd|                    t                    D                       rt!          |||          t"          j        f}n6t'          ||||          x}	 nt!          |||          t"          j        f}|\  }}|                    |
|z             |                    |           t          | }|r|                    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  Nc              3   B   K   | ]}|                               V  d S r   rt  )r   r  r   s     rn   r   z-_inverse_laplace_transform.<locals>.<genexpr>  s-      BB52BBBBBBrp   r  )r   r$  r~   r'   r   rS   r  r  rQ  r  rA  rE  rC  r  r   r	   r  r   r   rc   r%  r   rM   )r  r   rm  r  r   r  r  r  r  r(  r-  r   r   r  r  rl   r  s    `               rn   r   r   ^  sb    M"EGJ % %88C== 	? 99R"%%..0055b2#>>D""2e"441	D#88<<	D/r2ux9 9 9 9 :!RDDD72r5III-aR???72r5IIIBBBBAGGL,A,ABBBBB 
	D )BE::AFCAA;r2ux9 9 9 9AEF (BE::AFCA
cqu#']F -e,,Z I9rp   c                   p    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d
S )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                 J    |t           j        }t          j        | ||||fi |S r   )r  _none_sentinelrG   __new__)r   r   r{   r   r  optss         rn   rX  zInverseLaplaceTransform.__new__  s0    =+:E (aAuEEEEErp   c                 @    | j         d         }|t          j        u rd }|S )Nr   )rj   r  rW  )r  r  s     rn   fundamental_planez)InverseLaplaceTransform.fundamental_plane  s&    	!+:::Erp   c                 ,    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 6/46 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  sn    NS1XXaZ!Q)C%C"#aoaj&@"@"B C CqtVAO#%	&rp   c                    |                     dd          }|                     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   rm  r  r  r   s	            rn   r  zInverseLaplaceTransform.doit  s     99Y--IIj%00	(4=+/+A+/+B+D 	E 	E 	E #$]&&B	dD D D  	Q4KHrp   N)ri   r  r  r  r  r   rW  r_  rX  propertyr[  r  r  r  rq   rp   rn   r  r    s          EU6]]N	sBF F F
   X6 6 6& & &    rp   r  c                 F                        dd          }                     dd          }t          | t                    r+t          | d          r|                     fd          S t          |                               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LLeLL rp   r  )r  r   rN   r  r  r  r  )	r   r{   r   r  r  r  rF   r   r   s	    ````    rn   rf  rf    s    Z yyD))H		*e,,I!Z   NWQ%<%< N{{LLLLLLLN N 	N #1aE2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                     |                                s| S | j        r |           S | j        r |           S | j        r |           S t	          | t
                    r |           S t          r   )r~   r  r}  rx   r   rT   NotImplementedError)e_ilt_add_ilt_mul_ilt_pow_ilt_rootsumr{   s    rn   _iltz#_fast_inverse_laplace.<locals>._ilt	  s    uuQxx 	&HX 		&8A;;X 	&8A;;X 	&8A;;7## 	&<??"%%rp   c                 >     | j         t          | j                   S r   )rm   maprj   )rk  rp  s    rn   rl  z'_fast_inverse_laplace.<locals>._ilt_add-	  s    qvs4(())rp   c                 l    |                                \  }}|j        rt          | |          z  S r   )r  r}  rj  )rk  r  r   rp  r{   s      rn   rm  z'_fast_inverse_laplace.<locals>._ilt_mul0	  s=    &&q))t; 	&%%ttDzz!!rp   c                 J   |                      z  z   z            }|||         |         |         }}}|j        r>|dk     r8	| 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@   rj  )
rk  r   nmambmr   r   r   r{   r   s
        rn   rn  z'_fast_inverse_laplace.<locals>._ilt_pow6	  s    1q1%%q58U1XBB} GaB3q5z#2hqj//12s75"::3EFFQwwRU8A:++!!rp   c                     | j         j        }| j         j        \  }t          | j        t          |t           |                                        S r   )funr   	variablesrT   polyr   rS   )rk  r   variablerp  s      rn   ro  z+_fast_inverse_laplace.<locals>._ilt_rootsum@	  sC    uzU_
qvvhd0D0DEEFFFrp   )r   r    )rk  r{   r   rp  rl  rm  rn  ro  r   r   r   s    ``@@@@@@@@rn   _fast_inverse_laplacer~  	  s    iTA3777GAq!& & & & & & & & &* * * * *" " " " " "" " " " " " " " "G G G G G
 477Nrp   )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)  r3  ri  rq  rw  r  r  r  r  r  r  r  r  r  r  rc   r  r  r  r!  r#  r%  r'  r=  rA  rC  rE  rQ  r   r  rf  r~  rq   rp   rn   <module>r     s	     



                  $ $ $ $ $ $            & & & & & & & & & & & & & & & & & & & & & & & & % $ $ $ $ $ $ $< < < < < < < < < < < < < < < < < < < < & & & & & & 2 2 2 2 2 2 2 2 2 25 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ; ; ; ; ; ; ; ; I I I I I I I I I I I I C C C C C C C C C C$ $ $ $ $ $ $ $ I I I I I I I I I I I I M M M M M M M M M M M M I I I I I I I I A A A A A A A A A A, , , , , , , , , , , , M M M M M M / / / / / / / /: : : : : : : : : : E E E E E E E E E E E E E E 0 0 0 0 0 0 6 6 6 6 6 6 2 2 2 2 2 2 ' ' ' ' ' ' & & & & & & . . . . . . + + + + + +I I I I I I I I I I ' ' ' ' ' '	  <E E EX X Xv 6 6 6 lL lL lL^     	U) U) 	U)p   * & & &R   , ) ) )X   $   @ I' I' I'X ; ; ;@   8 / / /d   8   "   4 , , ,^9 9 9x* * *Z @$ @$ @$F5 5 5 5 5( 5 5 5pN N N Nb M4 M4 M4`    	% % 	%P   8       >       ( w. w. w.t	 	 	 	      4 4$ 4$ 4$n 5 5 5pD D D D D/ D D DN: : : :z* * * * *rp   