a
    d/                     @   s  d dl Z d dlZd dlZd dlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ g dgdd	gg d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dgZg dgddgg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-gZg d.Zd/d0 eeeD Zd1d0 eeeD Zd2Zd3Zd2Zd4d5 ZG d6d7 d7eZG d8d9 d9eZdS ):    N   )FixedGridODESolver)_compute_error_ratio
_linf_norm)Perturb)rk4_alt_step_func      )   i   )7   i%   i)im  i*i8
  i   )i  ii&  i~i=  i%)iA i,i
 iic6 iJ  )iA iWkiR! iWi  iiW iAp)	i_ i*mi2ܰibi`;9iАiNPilS )
iiiipii iP}ii`iK>i?8)ilZ l   F| l{y* l   NI+; l U0k: l   2dc) lh0e l   C=Ht i|ϧ)l   ; lh l   i@39 lUNQ"~ l   @f7 lj] l   2eM l,z l   Q6 lONv l   x iV)l   ^/lZ~_ l   d l~~<u l   n7A lU|A# l    im" l<ho l   C-#4 l>r` l   sCOH l66S!   f)$)l   k,dlE	  l   NIq'~" lry
) l   7SYZQ l'Yx l   R l<@w l   evtj	4O l+W OL' l   pdO/ lLK l   j4XFlnc)l   -K"8v l$ l   9?]]p l@J=NwJl   U 'lPB	r_l   Xv^l `^.l   c:- l-}yul   tk>>lU/R}i l   )5 l(=    ?#<)l   -c&
 lggb7= l   I:<lyBtel   JS3lMVKOl   *%l%FKsQl   cZivlUnajll   [2!lk5CDl   =2u!r lE-Ov}6 l   /XBS) l?Rt:)l   ?t#mln._, l   5| l>6~/1< l   \fA'o, l[k2Y l   nA!|aA lv# l    6CfAT l,=+gc l   31?W l:JkWV+ l   [ wc lxRNd l    !'+Shzl5d;I   MKE )l   ?68_,l,h/ l   Tnz
 l${>*c., l   0(#]z l,`-Kkl   4m&N4hl|z?|gl   v!(A="lN5CAdl   {0Z6Gl:{ql   H+U(w lO =}G* l   H*>+ l9xw l   SEliYlM)l   1jYWD!lOc	*l   N[v3\~1,lvA"- l   CTyB7 lmv[&:$	 l   N(c4R lh#XDpN l   FRl:d l vnb l   EF%5 l\J-u l   ,Q!yazw	 lhR\7#ur l   |WJj% l	Mu)l   q}D2Ol, !;d    QPhv
 )l   1jMT[vWl>W7gl   c.XUy/~flxc 7Q, l   9M{]/I
 lqZd!}K5 l   l|q_LJ#4 l<RK;T l   u75}%#p lFJ{AXx{ l   5__Aco lR
i]QXS l   -Fot473 ly1fhPW l   |%}ZS!
 lF]<;* l   i^4apn`lQ*>Jl   AkYgCl%=N )r      r
   )	      r   )r   i  ij   i)i  i  ii  iS   )r   iX  iJi  ii  i)i  iI" i;$i ii  ii_  )	r   i)D iNi`U i`3ib0 i2Li* i_{)
i i0 ixTi- iEi% i-ix) ii  )r   i4'iiV3Vi2yRi YeiN:ih!ii̩)if)i4isQiO Gl   JnH lH l   QqP l2iO l   vf iUv(i2i:iV )r   l   Z)@@l<l   ~qa}0lW||{Ol   7i{cl 7IYT_l   <J(UEl)1!%l   Am"l$l   1> l` )l   ncl   E \lNK/7l   rjn{l"3^ l   nK9 llRfW l   <qg# lea;= l   +-\4]lrAg!l   4(@lO]Al   ^d )r   l   8 l9!Kv l   @	 lU[AKW l   P,{x l+=;1 l    `_mH lcgR0 l   #D_r l9GJ#* l   ay` l0i4U3l   >El?tW{ )l   ?Rt:l   	{~ lIZXH l   yPji&5 l
[% l   wey@ l
e%xX l   KZ)|a lcZ@/'T l   {rm{9 l[0 l   k_s1j l}>Gt l   S
VLjl/8l   ?t[ )r   l   nJ{&l_^Gl   >`~*Y)l${Aral   gufT7 lnqk l   vcS49uO l z>G l   p\G l>^u! l   :$y4Ol#kXEhl   |,e:lpJAsl   QVi26 lgK )l   Ml   >M]7lThH;W? l   $Mubl0(|]y l   Dt}h| l4Mg'=D l   $.Dy[ lv	u.RP;	 l   v1'W. l[
1V l   28O{: lH;AI4J l   Wc GlhRo*l   qW%lSA]#fi l   M{}l )r   l   W\HE@Q lj l   &s&ePlSf\Ml   ]s Ql~IJ~l   hU	+{+lFJU>n3l    H&iF3lMMCiD/)l   l5k$"l,!fl#8wl   hb=[s%ll7{!ml   Y63 lqalAZ l   ,Xbv=jA lt)l   %=N l   6BdytR lc(fIl   bK7rl9G</_l   q[2g,ll|-@Q'Ul   <$\g lu[>W)-0 l   FzW]5B> luLV0~* l   R:IE^~l-x)Y{Ll   C|N-&l|B*8,)l   F\(+li6 l   ilHQd. l!A2ns l   {xB)Nr            i  i  i@  i i _7 i n i i 9l    0]	l    `;l    @`f,rl     LYd l     ~hjl     PTl     qt;(, l     ciwPX c                    s.   g | ]&\} t j fd d|D t jdqS )c                    s   g | ]}|  qS  r    ).0bZdivisorr    f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torchdiffeq/_impl/fixed_adams.py
<listcomp>       <listcomp>.<listcomp>dtypetorchZtensorfloat64)r!   	bashforthr    r#   r$   r%      s   r%   c                    s.   g | ]&\} t j fd d|D t jdqS )c                    s   g | ]}|  qS r    r    )r!   mr#   r    r$   r%      r&   r'   r(   r*   )r!   moultonr    r#   r$   r%      s      r   c                 C   s   t dd t| |D S )Nc                 s   s   | ]\}}|| V  qd S Nr    )r!   xiyir    r    r$   	<genexpr>   r&   z_dot_product.<locals>.<genexpr>)sumzip)xyr    r    r$   _dot_product   s    r9   c                       sD   e Zd ZdZdddeef fdd	Zdd Zd	d
 Zdd Z	  Z
S )AdamsBashforthMoultonr0   gMbP?g-C6?Tc           	         s   t t| j| f||d| |tks6J dt|tk rNtdt tj	| j
 jd| _tj	| j
 jd| _|| _|| _t|| _tj| jd d| _d | _ fddtD | _ fd	dtD | _d S )
N)rtolatolzmax_order must be at most {}z6max_order is below {}, so the solver reduces to `rk4`.)r)   devicer   )maxlenc                    s   g | ]}|  jqS r    tor=   r!   r7   y0r    r$   r%      r&   z2AdamsBashforthMoulton.__init__.<locals>.<listcomp>c                    s   g | ]}|  jqS r    r?   rA   rB   r    r$   r%      r&   )superr:   __init__
_MAX_ORDERformat
_MIN_ORDERwarningswarnr+   Z	as_tensorr)   r=   r;   r<   implicit	max_itersint	max_ordercollectionsdequeprev_fprev_t_BASHFORTH_DIVISORr-   _MOULTON_DIVISORr/   )	selffuncrC   r;   r<   rK   rL   rN   kwargs	__class__rB   r$   rE      s     
zAdamsBashforthMoulton.__init__c                 C   s*   | j d u s| j |kr&| j| || _ d S r1   )rR   rQ   
appendleft)rU   tfr    r    r$   _update_history   s    z%AdamsBashforthMoulton._update_historyc                 C   s(   t t|| | j| j||t}|dk S )z7Checks that each element is within the error tolerance.r   )r   r+   absr;   r<   r   )rU   rC   y1Zerror_ratior    r    r$   _has_converged   s     z$AdamsBashforthMoulton._has_convergedc              	   C   sZ  |||| j rtjntjd}| || tt| j| jd }|t	d k rlt
|||||| jd | j d|fS | j| }t|| | j|}	| jrN| j|d  }
|t|
dd  | j| }d}t| jD ]X}|	}||||	 | j rtjntjd}||
d  | || }	| ||	}|r q(q|sBtd | j  | || |	|fS d S )N)perturbr   r   )f0ra   FzAFunctional iteration did not converge. Solution may be incorrect.)ra   r   ZNEXTNONEr]   minlenrQ   rN   rH   r   r-   r9   Ztype_asrK   r/   rangerL   ZPREVr`   rI   rJ   pop)rU   rV   t0dtt1rC   rb   orderZbashforth_coeffsZdyZmoulton_coeffsdeltaZ	converged_Zdy_oldr\   r    r    r$   
_step_func   s.    "
 

z AdamsBashforthMoulton._step_func)__name__
__module____qualname__rk   
_MAX_ITERSrF   rE   r]   r`   rn   __classcell__r    r    rX   r$   r:      s
   r:   c                       s   e Zd Z fddZ  ZS )AdamsBashforthc                    s"   t t| j||fddi| d S )NrK   F)rD   rt   rE   )rU   rV   rC   rW   rX   r    r$   rE      s    zAdamsBashforth.__init__)ro   rp   rq   rE   rs   r    r    rX   r$   rt      s   rt   )rO   sysr+   rI   Zsolversr   miscr   r   r   Z	rk_commonr   Z_BASHFORTH_COEFFICIENTSZ_MOULTON_COEFFICIENTSZ_DIVISORr6   rS   rT   rH   rF   rr   r9   r:   rt   r    r    r    r$   <module>   s   EB>