
    %gg                      t   d dl mZmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlZd dlZd dlZ ej&                  d      Z ej"                         j+                  d	      rd
ndZ G d de      Ze G d d             Ze G d d             Z G d de      Z G d de      Z G d de      Zy)    )absolute_importdivisionprint_function)abstractmethodABC)	dataclass)SequenceTuple)OrderedDict)EnumNzprophet.modelsWinwinunixc                       e Zd ZdZdZdZy)TrendIndicatorr         N)__name__
__module____qualname__LINEARLOGISTICFLAT     K/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/prophet/models.pyr   r      s    FHDr   r   c                       e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   ee   ed<   ee   ed<   ee   ed	<   ee   ed
<   ee   ed<   eee      ed<   ee   ed<   y)ModelInputDataTSKtautrend_indicatorytcapt_changes_as_mXsigmasN)r   r   r   int__annotations__floatr	   r   r   r   r   r      sq    
F
F
F	J	%uo	#	#  UOr   r   c                   L    e Zd ZU eed<   eed<   ee   ed<   ee   ed<   eed<   y)ModelParamskmdeltabeta	sigma_obsN)r   r   r   r.   r-   r	   r   r   r   r0   r0   *   s&    HHE?
5/r   r0   c                   n    e Zd Zd Zd Zeed               Zed        Zede	fd       Z
ede	fd       Zy)	IStanBackendc                 J    | j                         | _        d | _        d| _        y )NT)
load_modelmodelstan_fitnewton_fallbackselfs    r   __init__zIStanBackend.__init__4   s    __&
#r   c                 h    |j                         D ]  \  }}|dk(  r|| _        t        d|        y)z
        Specify model options as kwargs.
         * newton_fallback [bool]: whether to fallback to Newton if L-BFGS fails
        r<   zUnknown option N)itemsr<   
ValueError)r>   kwargsr1   vs       r   set_optionszIStanBackend.set_options9   s@    
 LLN 	8DAq%%'($ ?1#!677		8r   c                       y Nr   r   r   r   get_typezIStanBackend.get_typeE   s     	r   c                      y rG   r   r=   s    r   r9   zIStanBackend.load_modelJ       r   returnc                      y rG   r   )r>   	stan_init	stan_datarC   s       r   fitzIStanBackend.fitN   rJ   r   c                      y rG   r   )r>   rM   rN   samplesrC   s        r   samplingzIStanBackend.samplingR   rJ   r   N)r   r   r   r?   rE   staticmethodr   rH   r9   dictrO   rR   r   r   r   r7   r7   3   sr    $
	8      T   4  r   r7   c                        e Zd ZdZ fdZed        Zd Zd Zde	fdZ
ed        Zedee	e	f   fd	       Zed
eedf   ddfd       Z xZS )CmdStanPyBackendz2.33.1c                     dd l }t        j                  d      dz  d| j                   z  }|j	                         r|j                  t        |             t        | !          y )Nr   prophet
stan_modelzcmdstan-)		cmdstanpyimportlib_resourcesfilesCMDSTAN_VERSIONexistsset_cmdstan_pathstrsuperr?   )r>   rZ   local_cmdstan	__class__s      r   r?   zCmdStanPyBackend.__init__Y   sZ    +11)<|KPXY]YmYmXnNoo!&&s='9:r   c                  6    t         j                  j                  S rG   )StanBackendEnum	CMDSTANPYnamer   r   r   rH   zCmdStanPyBackend.get_typea   s    ((---r   c                 v    dd l }t        j                  d      dz  dz  }|j                  t	        |            S )Nr   rX   rY   zprophet_model.bin)exe_file)rZ   r[   r\   CmdStanModelr`   )r>   rZ   
model_files      r   r9   zCmdStanPyBackend.load_modele   s8    (..y9LHK^^
%%s:%??r   c                    d|vrd|v r| j                  ||d         }|d= | j                  ||      \  }}t        |||d   dk  rdndt        d            }|j	                  |       	  | j
                  j                  di || _        | j                  | j                  j                  | j                  j                        }|D ]  }	||	   j                  d      ||	<    |S # t        $ r[}| j                  r|d	   dk(  r|t        j                  d
       d|d	<    | j
                  j                  di || _        Y d }~d }~ww xY w)Ninitsinitr   d   NewtonLBFGSg     @)datarm   	algorithmiterrs   z;Optimization terminated abnormally. Falling back to Newton.)r   r   )sanitize_custom_initsprepare_datarT   r,   updater:   optimizer;   RuntimeErrorr<   loggerwarningstan_to_dict_numpycolumn_namesoptimized_params_npreshape)
r>   rM   rN   rC   
inits_list	data_listargseparamspars
             r   rO   zCmdStanPyBackend.fitj   sR   & Vv%5229fVnMIv $ 1 1)Y G
I"+C.3"6hGS	
 	F	8/DJJ//7$7DM ((MM&&(I(IK 	7C +--g6F3K	7  	8''4+<+HNNXY (D/DJJ//7$7DMM	8s   *!C% %	E	.AEE	rK   c                    d|vrd|v r| j                  ||d         }|d= | j                  ||      \  }}t        ||      }d|vrd|d<   |dz  }||d<   d|vr||d<   |j                  |        | j                  j
                  di || _        | j                  j                         }	|	j                  \  }}
}|	j                  ||
z  |f      }	| j                  | j                  j                  |	      }|D ]_  }||   j                  }|d	   d	k(  r||   j                  |d
   f      ||<   |dv s:t        |      dk  sI||   j                  d      ||<   a |S )Nrm   rn   )rr   rm   chains   r   iter_samplingiter_warmupr   r   r3   r4   )ru   r   r   )rv   rw   rT   rx   r:   sampler;   drawsshaper   r}   r~   len)r>   rM   rN   rQ   rC   r   r   r   	iter_halfresccolumnsr   r   ss                  r   rR   zCmdStanPyBackend.sampling   s   & Vv%5229fVnMIv $ 1 1)Y G
I
 6! F8qL	"+&$-F=!F)

))1D1mm!!# #		!Wkk7Q;01(()C)CSI 	;Cs!!Atqy$Sk111Q4':s''CFQJ$Sk11':s	; r   c                     i }dD ]   }	 t        |j                  |            ||<   " dD ]2  }| |   j                  ||   j                  k(  r	||   ||<   +| |   ||<   4 |S # t        $ r | |   ||<   Y ow xY w)zSValidate that custom inits have the correct type and shape, otherwise use defaults.)r1   r2   r5   r   )r.   get	Exceptionr   )default_initscustom_inits	sanitizedparams       r   rv   z&CmdStanPyBackend.sanitize_custom_inits   s     	, 	8E8#()9)9%)@#A	% 	8
 ' 	8EU#))\%-@-F-FF#/#6	% #0#7	% 		8
   8#0#7	% 8s   A!!A54A5c                    |d   |d   |d   |d   |d   |d   j                         |d   j                         |d   j                         |d	   j                         |d
   j                         |d   j                         |d   j                         j                         |d   d}| d   | d   | d   j                         | d   j                         | d   d}||fS )z<Converts np.ndarrays to lists that can be read by cmdstanpy.r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   )r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r1   r2   r3   r4   r5   )r1   r2   r3   r4   r5   )tolistto_numpy)rn   rr   cmdstanpy_datacmdstanpy_inits       r   rw   zCmdStanPyBackend.prepare_data   s     ccc;#$56c!!#c!!#;%%'Z(//1;%%';%%'c##%,,.8n
" cc']))+L'')k*
 //r   r~   .rr   znp.arrayc                     dd l }t               }d }d}d}t        |j                        dkD  }| D ]  }d|v r|j	                  d      n|j	                  d      }	|	d   }
||
}|
|k7  rJ||v rt        d      |r|j                  |d d ||f         ||<   n|j                  |||       ||<   |
}|}|dz  } ||v rt        d      |r|j                  |d d ||f         ||<   |S |j                  |||       ||<   |S )Nr   r   .[zFound repeated column name)numpyr   r   r   splitrz   array)r~   rr   npoutputprevstartendtwo_dimscnameparsedcurrs              r   r}   z#CmdStanPyBackend.stan_to_dict_numpy   s>   tzz?Q&! 	E),U[[%5;;s;KF!9D|t|6>&4  #%88DE#I,>#?F4L#%88DsO#<F4L1HC#	$ 6>,  88DE#I$67F4L  88DsO4F4Lr   )r   r   r   r]   r?   rS   rH   r9   rO   rT   rR   rv   r
   rw   r`   r}   __classcell__)rc   s   @r   rV   rV   W   s    O . .@
: 4  D   0E$*$5 0 06 $sCx $
 $ $r   rV   c                   *    e Zd ZeZededefd       Zy)re   rg   rK   c                 j    	 t         |    j                  S # t        $ r}t        d|        |d }~ww xY w)NzUnknown stan backend: )re   valueKeyErrorrB   )rg   r   s     r   get_backend_classz!StanBackendEnum.get_backend_class  s@    	E"4(... 	E5dV<=1D	Es    	2-2N)	r   r   r   rV   rf   rS   r`   r7   r   r   r   r   re   re      s+     IE E E Er   re   )
__future__r   r   r   abcr   r   dataclassesr   typingr	   r
   collectionsr   enumr   r[   platformlogging	getLoggerr{   
startswithPLATFORMr   r   r0   r7   rV   re   r   r   r   <module>r      s    A @ # ! " #    			+	,%H%%'22595vT 
      !3 !Hc| cPEd Er   