
    ]hH                     ~   S r SSKrSSKJrJr  SSKJr  SSKJrJrJ	r	J
r
JrJr  SSKrSSKJr  SSKJr  SSKJrJrJrJrJrJr  \\\R6                  S4   r " S	 S
\5      rS\S\SS4S jrS\S\SS4S jr " S S5      r  " S S5      r! " S S5      r" " S S5      r# " S S5      r$ " S S5      r% " S S5      r&g)z
CmdStan arguments
    N)Enumauto)time)AnyDictListMappingOptionalUnion)default_rng)_TMPDIR)cmdstan_pathcmdstan_version_beforecreate_named_text_file
get_loggerread_metricwrite_stan_jsonc                   z    \ rS rSrSr\" 5       r\" 5       r\" 5       r\" 5       r	\" 5       r
\" 5       rS\4S jrSrg)Method   zSupported CmdStan method names.returnc                 T    SU R                   R                  < SU R                  < S3$ )N<.>)	__class____name__name)selfs    iC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\cmdstanpy/cmdstan_args.py__repr__Method.__repr__#   s     NN33TYY??     N)r   
__module____qualname____firstlineno____doc__r   SAMPLEOPTIMIZEGENERATE_QUANTITIESVARIATIONALLAPLACE
PATHFINDERstrr!   __static_attributes__r$   r#   r    r   r      s>    )VFvH&&KfGJ@# @r#   r   valuer   r   c                     U bH  [        U [        [        R                  45      (       a  U S::  a  [	        U S35      eg [	        U S35      eg )Nr    must be greater than 0z must be of type int)
isinstanceintnpinteger
ValueErrorr1   r   s     r    positive_intr:   '   sW    ec2::.//z D6)@!ABB  v%9:;; r#   c                     U bM  [        U [        [        [        R                  45      (       a  U S::  a  [        U S35      eg [        U S35      eg )Nr   r3   z must be of type float)r4   r5   floatr6   floatingr8   r9   s     r    positive_floatr>   0   sY    ec5"++677z D6)@!ABB  v%;<== r#   c                   *   \ rS rSrSr              SS\\   S\\   S\S\\   S\\   S	\\	\
\	\4   \\	   \\
\	\4      S4   S
\\\\   S4   S\S\\   S\\   S\\   S\\   S\S\SS4S jjrS\\   SS4S jrS\S\\	   S\\	   4S jrSrg)SamplerArgs9   z(Arguments for the NUTS adaptive sampler.Niter_warmupiter_samplingsave_warmupthinmax_treedepthmetric	step_sizeadapt_engagedadapt_deltaadapt_init_phaseadapt_metric_windowadapt_step_sizefixed_param
num_chainsr   c                     Xl         X l        X0l        X@l        XPl        X`l        SU l        SU l        Xpl        Xl	        Xl
        Xl        Xl        Xl        Xl        SU l        Xl        gInitialize object.N)rB   rC   rD   rE   rF   rG   metric_typemetric_filerH   rI   rJ   rK   rL   rM   rN   diagnostic_filerO   )r   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   s                  r    __init__SamplerArgs.__init__<   sl    ( '*&	**.8<"*& 0#6 .&#$r#   chainsc                 z   [        U[        [        R                  45      (       a  US:  a  [	        S5      eU R
                  c'  U R                  c  U R                  c  U R                  b  U R                  SL a  SnU R
                  b  SR                  X R
                  5      nU R                  b  SR                  X R                  5      nU R                  b  SR                  X R                  5      nU R                  b  S	R                  X R                  5      n[	        U5      eU R                  b  U R                  S
:  d/  [        U R                  [        [        R                  45      (       d$  [	        SR                  U R                  5      5      eU R                  S
:X  a  U R                  (       a  [	        S5      eU R                  bc  U R                  S
:  d/  [        U R                  [        [        R                  45      (       d$  [	        SR                  U R                  5      5      e[        U R                  S5        [        U R                  S5        U R                   Gb  [        U R                   ["        [        [        R                  [        R$                  45      (       a5  U R                   S
::  a$  [	        SR                  U R                   5      5      eO['        U R                   5      U:w  a.  [	        SR                  U['        U R                   5      5      5      e[)        U R                   5       H)  u  p4US
:  d  M  [	        SR                  US-   U5      5      e   U R*                  Gb  [        U R*                  [,        5      (       a  U R*                  S;   a	  SU l        GOU R*                  S;   a	  SU l        GOU R*                  S;   a	  SU l        GO[0        R2                  R5                  U R*                  5      (       d$  [	        SR                  U R*                  5      5      e[7        U R*                  5      n['        U5      S:X  a  SU l        OSU l        U R*                  U l        GO[        U R*                  [:        5      (       a  SU R*                  ;  a  [	        S5      e[=        [        R>                  " U R*                  S   5      R@                  5      n['        U5      S:X  a  SU l        OSU l        [C        [D        SSS9n[G        X`R*                  5        X`l        GO\[        U R*                  [<        [H        45      (       Ga	  ['        U R*                  5      U:w  a.  [	        SR                  ['        U R*                  5      U5      5      e[K        S  U R*                   5       5      (       Ga  / n[)        U R*                  5       H  u  p8Un	SU	;  a  [	        S!R                  US-   5      5      eUS
:X  a-  [=        [        R>                  " U	S   5      R@                  5      nOP[=        [        R>                  " U	S   5      R@                  5      n
WU
:w  a  [	        S"R                  US-   XZ5      5      e[C        [D        SSS9n[G        Xi5        URM                  U5        M     ['        W5      S:X  a  SU l        OSU l        Xpl        GO[K        S# U R*                   5       5      (       Ga5  / n[)        U R*                  5       H  u  p8[        U[,        5      (       d   e[0        R2                  R5                  U5      (       d  [	        SR                  U5      5      eUS
:X  a  [7        U5      nOx[7        U5      n
['        W5      ['        U
5      :w  a(  [	        S$R                  U R*                  S
   U5      5      eXZ:w  a(  [	        S$R                  U R*                  S
   U5      5      eURM                  U5        M     ['        W5      S:X  a  SU l        OSU l        Xpl        O][	        S%R                  [O        U R*                  S
   5      5      5      e[	        S&R                  [O        U R*                  5      5      5      eU R
                  b=  S
U R
                  s=:  a  S:  d&  O  [	        S'R                  U R
                  5      5      eU R                  bc  U R                  S
:  d/  [        U R                  [        [        R                  45      (       d$  [	        S(R                  U R                  5      5      eU R                  bc  U R                  S
:  d/  [        U R                  [        [        R                  45      (       d$  [	        S)R                  U R                  5      5      eU R                  bc  U R                  S
:  d/  [        U R                  [        [        R                  45      (       d$  [	        S*R                  U R                  5      5      e[        U RP                  S+5        U RR                  (       ag  U R                  cN  U R*                  cA  U R                   c4  U R
                  c'  U R                  c  U R                  c  U R                  b  [	        S,5      egg)-z
Check arguments correctness and consistency.

* adaptation and warmup args are consistent
* if file(s) for metric are supplied, check contents.
* length of per-chain lists equals specified # of chains
   z6Sampler expects number of chains to be greater than 0.NFz+Conflicting arguments: adapt_engaged: Falsez{}, adapt_delta: {}z{}, adapt_init_phase: {}z{}, adapt_metric_window: {}z{}, adapt_step_size: {}r   z?Value for iter_warmup must be a non-negative integer, found {}.z5Must specify iter_warmup > 0 when adapt_engaged=True.zBArgument "iter_sampling" must be a non-negative integer, found {}.rE   rF   z+Argument "step_size" must be > 0, found {}.z;Expecting {} per-chain step_size specifications,  found {}.z5Argument "step_size" must be > 0, chain {}, found {}.)diagdiag_er\   )densedense_er^   )unitunit_er`   no such file {}
inv_metricz,Entry "inv_metric" not found in metric dict.rG   z.json)dirprefixsuffixzXNumber of metric files must match number of chains, found {} metric files for {} chains.c              3   B   #    U  H  n[        U[        5      v   M     g 7fN)r4   dict.0elems     r    	<genexpr>'SamplerArgs.validate.<locals>.<genexpr>   s     F+$z$--+   z9Entry "inv_metric" not found in metric dict for chain {}.zSFound inconsistent "inv_metric" entry for chain {}: entry has dims {}, expected {}.c              3   B   #    U  H  n[        U[        5      v   M     g 7frg   )r4   r/   ri   s     r    rl   rm      s     G;4D#..;rn   z*Metrics files {}, {}, inconsistent metricszPArgument "metric" must be a list of pathnames or Python dicts, found list of {}.zInvalid metric specified, not a recognized metric type, must be either a metric type name, a filepath, dict, or list of per-chain filepaths or dicts.  Found an object of type {}.z8Argument "adapt_delta" must be between 0 and 1, found {}zDArgument "adapt_init_phase" must be a non-negative integer, found {}zHArgument "adapt_metric_window" must be a non-negative  integer, found {}zBArgument "adapt_step_size" must be a non-negative integer,found {}rO   z<When fixed_param=True, cannot specify adaptation parameters.)*r4   r5   r6   r7   r8   rJ   rK   rL   rM   rI   formatrB   rC   r:   rE   rF   rH   r<   r=   len	enumeraterG   r/   rS   ospathexistsr   rT   rh   listasarrayshaper   r   r   tupleallappendtyperO   rN   )r   rX   msgirH   dims	dict_filemetric_filesrG   metric_dictdims2s              r    validateSamplerArgs.validateb   s&	    &3

"344
H  $%%-((0$$,!!U*C##//66s<L<LMC((44;;22C ++77>>55C ''33::11C !o%'!#:  3

"3, , !!!'(8(8!9  1$);); K  )!!A%Z""S"**$5. . !!!'(:(:!; 
 	TYY'T''9>>%RZZ E  >>Q&$$$*F4>>$:  ' t~~&&0$%%+VFC4G%H  %.dnn$=LA 1}(228&Q	2J  %> ;;"$++s++;;"44'/D$[[$88'0D$[[$66'/D$77>>$++66():)A)A$++)NOO&t{{3D4yA~+3(+4('+{{D$DKK..t{{2$F  BJJt{{<'@AGGHt9>'/D$'0D$2	  	;;7#, DKK$77t{{#v-$@@F,fA  F$++FFF.0L%.t{{%;	6<'{:",!006q1u#  6#' "

;|+D E K K$D %) "

;|+D E K K%E  $u}&0%77=v()At8&'" !" %; '%	 (	?$++I67 &<8 4yA~+3(+4('3$G4;;GGG#%L%.t{{%;	)&#6666!ww~~f55",->-E-Ef-M"NN6#.v#6D$/$7E"4yCJ6&0%<<BF(,A=&'" !"  $}&0%<<BF(,A=&'" !" %++F3- &<. 4yA~+3(+4('3$$::@& Q0;  !, -3F43D,E	  't''+!+   &t'7'7 8    ,$$q(
%%RZZ'81 1 !((.t/D/D(E  ##/''!+:((3

*;4 4 !))/0H0H)I  +##a'z$$sBJJ&70 0 !%vd&:&:;  	T__l3*{{&~~)  ())1,,4((0 N  1 r#   idxcmdc                    UR                  S5        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  (       a  UR                  S5        U R                  b  UR                  SU R                   35        U R
                  (       a  UR                  S5        U$ UR                  S5        U R                  b/  UR                  S5        UR                  S	U R                   35        U R                  b_  [        U R                  [        5      (       d  UR                  S
U R                   35        O!UR                  S
U R                  U    35        U R                  b  UR                  SU R                   35        U R                  b_  [        U R                  [        5      (       d  UR                  SU R                   35        O!UR                  SU R                  U    35        UR                  S5        U R                  (       a  UR                  S5        OUR                  S5        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                   b  UR                  SU R                    35        U R"                  b*  UR                  SR%                  U R"                  5      5        U R&                  S:  a*  UR                  SR%                  U R&                  5      5        U$ )D
Compose CmdStan command for method-specific non-default arguments.
zmethod=sampleznum_samples=znum_warmup=zsave_warmup=1zthin=zalgorithm=fixed_paramzalgorithm=hmczengine=nutsz
max_depth=z	stepsize=zmetric=zmetric_file=adapt	engaged=1	engaged=0zdelta=zinit_buffer=zwindow=zterm_buffer={}rZ   znum_chains={})r{   rC   rB   rD   rE   rN   rF   rH   r4   rv   rG   rS   rT   rI   rJ   rK   rL   rM   rp   rO   r   r   r   s      r    composeSamplerArgs.composeZ  s    	

?#)JJd&8&8%9:;'JJT%5%5$678JJ'99 JJtyyk*+JJ./JJJ')JJ}%JJD$6$6#789>>%dnnd33

Yt~~&678

Yt~~c':&;<=;;"JJ!1!1 234'd..55

\$*:*:);<=

\$*:*:3*?)@AB

7JJ{#JJ{#'JJ 0 0123  ,JJd&;&;%<=>##/JJ!9!9 :;<+JJ'..t/C/CDE??QJJ--doo>?
r#   )rJ   rI   rK   rL   rM   rU   rN   rC   rB   rF   rG   rT   rS   rO   rD   rH   rE   )NNFNNNNTNNNNFrZ   )r   r%   r&   r'   r(   r
   r5   boolr   r/   r   r   r   r<   rV   r   r   r0   r$   r#   r    r@   r@   9   sf   2 &*'+!"'+ 59"'+*.-1)-!#$%c]$%  }$% 	$%
 sm$%  }$% c3hcDc3h,@$F
$% UT12$% $% e_$% #3-$% &c]$% "#$%  !$%" #$%$ 
%$%Lvx} v vp13 1T#Y 149 1r#   r@   c                       \ rS rSrSr1 Skr1 Skr           SS\\   S\\	   S\\
   S	\S
\\	   S\\	   S\\	   S\\	   S\\	   S\\
   S\SS4S jjrSS\\
   SS4S jjrS\
S\\   S\\   4S jrSrg)OptimizeArgsi  z*Container for arguments for the optimizer.>   BFGSbfgsLBFGSlbfgsNewtonnewton>   tol_objtol_grad	tol_param
init_alphatol_rel_objhistory_sizetol_rel_gradN	algorithmr   itersave_iterationsr   r   r   r   r   r   jacobianr   c                     U=(       d    SU l         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        g )N )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   s               r    rV   OptimizeArgs.__init__  sE     #b$	.& ("( r#   _chainsc                 "   U R                   (       aM  U R                   U R                  ;  a3  [        SR                  SR	                  U R                  5      5      5      eU R                   R                  5       S;  a-  U R                   H  n[        X5      c  M  [        U S35      e   U R                   R                  5       S:w  a  U R                  b  [        S5      e[        U R                  S5        [        U R                  S	5        [        U R                  S
5        [        U R                  S5        [        U R                  S5        [        U R                   S5        [        U R"                  S5        [        U R                  S5        g).
Check arguments correctness and consistency.
z2Please specify optimizer algorithms as one of [{}], >   r   r   Nz0 requires that algorithm be set to bfgs or lbfgsr   z4history_size requires that algorithm be set to lbfgsr   r   r   r   r   r   r   r   )r   OPTIMIZE_ALGOSr8   rp   joinlower	bfgs_onlygetattrr   r>   r   r:   r   r   r   r   r   r   )r   r   args      r    r   OptimizeArgs.validate  s=    >>dnnD4G4GGDKKIId112  >>!)::~~4%1$%OP  &
 >>!W,  , J  	t5TYY't||Y/t''7t}}j1t((.9t~~{3T&&7r#   _idxr   c                    UR                  S5        U R                  (       a,  UR                  SU R                  R                  5        35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R
                  b  UR                  SU R
                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  S	U R                   35        U R                  b  UR                  S
U R                   35        U R                  (       a  UR                  S5        U R                  (       a  UR                  S5        U$ )>compose command string for CmdStan for non-default arg values.zmethod=optimize
algorithm=init_alpha=tol_obj=tol_rel_obj=	tol_grad=tol_rel_grad=
tol_param=history_size=iter=zsave_iterations=1z
jacobian=1)r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r    r   OptimizeArgs.compose  s~   

$%>>JJDNN$8$8$:#;<=??&JJT__$567<<#JJ$,,01'JJd&6&6%789==$JJ4==/23(JJt'8'8&9:;>>%JJDNN#345(JJt'8'8&9:;99 JJtyyk*+JJ*+==JJ|$
r#   )r   r   r   r   r   r   r   r   r   r   r   )NNNFNNNNNNFrg   )r   r%   r&   r'   r(   r   r   r
   r/   r<   r5   r   rV   r   r   r   r0   r$   r#   r    r   r     s   4KNI $(&*" %#''+$((,%)&*!C=! UO! sm	!
 ! %! e_! 5/! uo! E?! sm! ! 
!48 8 8@C d3i DI r#   r   c            	       |    \ rS rSrSr SS\S\\   S\SS4S jjr	SS	\\   SS4S
 jjr
S\S\\   S\\   4S jrSrg)LaplaceArgsi  z$Arguments needed for laplace method.Nmodedrawsr   r   c                 (    Xl         X0l        X l        g rg   )r   r   r   )r   r   r   r   s       r    rV   LaplaceArgs.__init__  s     	 
r#   r   c                     [         R                  R                  U R                  5      (       d  [	        SU R                   35      e[        U R                  S5        g)z,Check arguments correctness and consistency.zInvalid path for mode file: r   N)rs   rt   ru   r   r8   r:   r   r   r   s     r    r   LaplaceArgs.validate  s>    ww~~dii((;DII;GHHTZZ)r#   r   r   c                    UR                  S5        UR                  SU R                   35        U R                  (       a  UR                  SU R                   35        U R                  (       d  UR                  S5        U$ )r   zmethod=laplacezmode=zdraws=z
jacobian=0)r{   r   r   r   r   s      r    r   LaplaceArgs.compose  s\    

#$

U499+&'::JJ

|,-}}JJ|$
r#   )r   r   r   )NTrg   )r   r%   r&   r'   r(   r/   r
   r5   r   rV   r   r   r   r0   r$   r#   r    r   r     sn    . HL (@D	* * *C d3i DI r#   r   c            !       
   \ rS rSrSr               SS\\   S\\   S\\   S\\   S\\   S	\\   S
\\   S\\   S\\   S\\   S\\   S\\   S\S\S\SS4 S jjr	SS\\   SS4S jjr
S\S\\   S\\   4S jrSrg)PathfinderArgsi  z'Container for arguments for Pathfinder.Nr   r   r   r   r   r   r   num_psis_draws	num_pathsmax_lbfgs_iters	num_drawsnum_elbo_drawssave_single_pathspsis_resamplecalculate_lpr   c                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        Xl        Xl        Xl        g rg   )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   r   r   r   r   r   s                   r    rV   PathfinderArgs.__init__  sX    $ %& ("(,".",!2*(r#   r   c                    [        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R
                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S	5        [        U R                  S
5        [        U R                  S5        [        U R                  S5        g)r   r   r   r   r   r   r   r   r   r   r   r   r   N)r>   r   r   r   r   r   r   r:   r   r   r   r   r   r   r   s     r    r   PathfinderArgs.validate4  s     	t5t||Y/t''7t}}j1t((.9t~~{3T&&7T((*:;T^^[1T))+<=T^^[1T((*:;r#   r   r   c                    UR                  S5        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R
                  b  UR                  SU R
                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  S	U R                   35        U R                  b  UR                  S
U R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  (       a  UR                  S5        U R                  (       d  UR                  S5        U R                  (       d  UR                  S5        U$ )r   zmethod=pathfinderr   r   r   r   r   r   r   znum_psis_draws=z
num_paths=zmax_lbfgs_iters=z
num_draws=znum_elbo_draws=zsave_single_paths=1zpsis_resample=0zcalculate_lp=0)r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r    r   PathfinderArgs.composeF  s   

&'??&JJT__$567<<#JJ$,,01'JJd&6&6%789==$JJ4==/23(JJt'8'8&9:;>>%JJDNN#345(JJt'8'8&9:;*JJ)<)<(=>?>>%JJDNN#345+JJ)$*>*>)?@A>>%JJDNN#345*JJ)<)<(=>?!!JJ,-!!JJ()  JJ'(
r#   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNNNNNNNNNNNFTTrg   )r   r%   r&   r'   r(   r
   r<   r5   r   rV   r   r   r/   r   r0   r$   r#   r    r   r     sA   1 '+#''+$((,%)&*(,#')-#'(,"'"!!")UO") %") e_	")
 5/") uo") E?") sm") !") C=") "#") C=") !")  ") ")  !")" 
#")H< < <$'C 'd3i 'DI 'r#   r   c                   p    \ rS rSrSrS\\   SS4S jr SS\\	   SS4S jjr
S	\	S
\\   S\\   4S jrSrg)GenerateQuantitiesArgsip  z0Arguments needed for generate_quantities method.	csv_filesr   Nc                     Xl         grQ   sample_csv_files)r   r   s     r    rV   GenerateQuantitiesArgs.__init__s  s     )r#   rX   c                     U R                    HA  n[        R                  R                  U5      (       a  M)  [	        SR                  U5      5      e   g)zS
Check arguments correctness and consistency.

* check that sample csv files exist
z$Invalid path for sample csv file: {}N)r   rs   rt   ru   r8   rp   )r   rX   csvs      r    r   GenerateQuantitiesArgs.validatew  sB     ((C77>>#&& :AA#F  )r#   r   r   c                 j    UR                  S5        UR                  SU R                  U    35        U$ )r   zmethod=generate_quantitieszfitted_params=)r{   r   r   s      r    r   GenerateQuantitiesArgs.compose  s5     	

/0

^D$9$9#$>#?@A
r#   r   rg   )r   r%   r&   r'   r(   r   r/   rV   r
   r5   r   r   r0   r$   r#   r    r   r   p  s\    :*$s) * *
 '+sm	3 T#Y 49 r#   r   c                       \ rS rSrSrSS1r          SS\\   S\\   S\\   S	\\   S
\\	   S\\   S\
S\\	   S\\   S\\   SS4S jjr SS\\   SS4S jjrS\S\\   S\\   4S jrSrg)VariationalArgsi  z(Arguments needed for variational method.	meanfieldfullrankNr   r   grad_sampleselbo_sampleseta
adapt_iterrI   r   	eval_elbooutput_samplesr   c                 |    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        g rg   )
r   r   r   r   r   r   rI   r   r   r   )r   r   r   r   r   r   r   rI   r   r   r   s              r    rV   VariationalArgs.__init__  s;     #	(($*&",r#   rX   c                    U R                   bM  U R                   U R                  ;  a3  [        SR                  SR	                  U R                  5      5      5      e[        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S5        [        U R                  S	5        [        U R                  S
5        [        U R                  S5        g)r   Nz4Please specify variational algorithms as one of [{}]r   r   r   r   r   r   r   r   r   )r   VARIATIONAL_ALGOSr8   rp   r   r:   r   r   r   r>   r   r   r   r   r   )r   rX   s     r    r   VariationalArgs.validate  s     NN&d&<&<<FMMIId445 
 	TYY'T&&7T&&7txx'T__l3t''7T^^[1T((*:;r#   r   r   c                    UR                  S5        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U R
                  b  UR                  SU R
                   35        UR                  S5        U R                  (       a=  UR                  S5        U R                  b  UR                  SU R                   35        OUR                  S	5        U R                  b  UR                  S
U R                   35        U R                  b  UR                  SU R                   35        U R                  b  UR                  SU R                   35        U$ )r   zmethod=variationalr   r   zgrad_samples=zelbo_samples=zeta=r   r   r   r   z
eval_elbo=zoutput_samples=)r{   r   r   r   r   r   rI   r   r   r   r   r   s      r    r   VariationalArgs.compose  s    	

'(>>%JJDNN#34599 JJtyyk*+(JJt'8'8&9:;(JJt'8'8&9:;88JJdhhZ()

7JJ{#*

U4??"345JJ{#'JJd&6&6%789>>%JJDNN#345*JJ)<)<(=>?
r#   )
rI   r   r   r   r   r   r   r   r   r   )
NNNNNNTNNNrg   )r   r%   r&   r'   r(   r   r
   r/   r5   r<   r   rV   r   r   r   r0   r$   r#   r    r   r     s   2$j1 $("&*&*#$("'+#'(,-C=- sm- sm	-
 sm- e_- SM- - e_- C=- !- 
-2 '+<sm<	<23 T#Y 49 r#   r   c                      \ rS rSrSr        SS\S\S\\\	      S\
\\\\\\4   S\
\\\4   \S4   S	\
\	\\	   S4   S
\
\	\\\\   S4   S\S\\	   S\S\S\\	   SS4S jjrSS jrSSS.S\	S\S\\   S\\   S\\   4
S jjrSrg)CmdStanArgsi  z
Container for CmdStan command line arguments.
Consists of arguments common to all methods and
and an object which contains the method-specific arguments.
N
model_name	model_exe	chain_idsmethod_argsdataseedinits
output_dirsig_figssave_latent_dynamicssave_profilerefreshr   c                 X   Xl         X l        X0l        XPl        X`l        Xpl        Xl        Xl        Xl        Xl	        Xl
        X@l        [        U[        5      (       a  [        R                  U l        O[        U["        5      (       a  [        R$                  U l        O[        U[&        5      (       a  [        R(                  U l        O[        U[*        5      (       a  [        R,                  U l        Oy[        U[.        5      (       a  [        R0                  U l        ON[        U[2        5      (       a  [        R4                  U l        O#[7        SR9                  [;        U5      5      5      eU R                  R=                  U(       a  [?        U5      OS5        U R=                  5         g)rR   z Unsupported method args type: {}N) r   r   r   r   r   r   r  r  r  r  r  r   r4   r@   r   r)   methodr   r*   r   r+   r   r,   r   r-   r   r.   r8   rp   r|   r   rq   )r   r   r   r   r   r   r   r   r  r  r  r  r  s                r    rV   CmdStanArgs.__init__  s!   . %""		
$ $8!(&k;// --DK\22 //DK%;<< 44DK_55 ,,DK[11 ..DK^44 ++DK299${:KL  	!!I#i.4Hr#   c                 T   U R                   c  [        S5      eU R                  c  [        S5      eU R                  b3  U R                   H#  nUS:  d  M  [        SR	                  U5      5      e   U R
                  Gbx  [        R                  R                  [        R                  R                  U R
                  5      5      U l        [        R                  R                  U R
                  5      (       dE   [        R                  " U R
                  5        [        5       R                  SU R
                  5        [        R                  R!                  U R
                  5      (       d$  [        SR	                  U R
                  5      5      e [        R                  R#                  U R
                  [%        ['        5       5      5      n[)        US	5          SSS5        [        R*                  " U5        U R.                  bc  [1        U R.                  [2        [4        R6                  45      (       a  U R.                  S:  a$  [        SR	                  U R.                  5      5      eU R8                  b  [1        U R8                  [2        [4        R6                  45      (       a   U R8                  S:  d  U R8                  S:  a$  [        SR	                  U R8                  5      5      e[;        SS5      (       al  SU l        [        5       R=                  S[        R                  R?                  [A        5       5      [        R                  RC                  [A        5       5      5        U RD                  c0  [G        5       nURI                  SSSS9RK                  5       U l"        GO[1        U RD                  [2        [L        [4        R6                  45      (       d$  [        SR	                  U RD                  5      5      e[1        U RD                  [2        [4        R6                  45      (       aE  U RD                  S:  d  U RD                  S:  a$  [        SR	                  U RD                  5      5      eOU R                  c  [        S5      e[O        U RD                  5      [O        U R                  5      :w  aA  [        SR	                  [O        U RD                  5      [O        U R                  5      5      5      eU RD                   H)  nUS:  d  US:  d  M  [        SR	                  U5      5      e   [1        U RP                  [$        5      (       aS  [        R                  R                  U RP                  5      (       d$  [        SR	                  U RP                  5      5      eO=U RP                  b0  [1        U RP                  [$        [R        45      (       d  [        S5      eU RT                  Gb;  [1        U RT                  [V        [2        [4        RX                  [4        R6                  45      (       a5  U RT                  S:  a$  [        SR	                  U RT                  5      5      eg[1        U RT                  [$        5      (       a  [1        U RZ                  [\        5      (       a  U RZ                  R^                  S:  ds  [1        U RZ                  [`        5      (       dS  [        R                  R                  U RT                  5      (       d$  [        SR	                  U RT                  5      5      eggg[1        U RT                  [L        5      (       a  U R                  c  [        S5      e[O        U RT                  5      [O        U R                  5      :w  aA  [        SR	                  [O        U RT                  5      [O        U R                  5      5      5      eU RT                   HA  n[        R                  R                  U5      (       a  M)  [        SR	                  U5      5      e   ggg! [        [        4 a*  n[        SR	                  U R
                  5      5      UeSnAff = f! , (       d  f       GN= f! [,         a*  n[        S
R	                  U R
                  5      5      UeSnAff = f)z
Check arguments correctness and consistency.

* input files must exist
* output files must be in a writeable directory
* if no seed specified, set random seed.
* length of per-chain lists equals specified # of chains
Nzno stan model specifiedzmodel not compiledrZ   zinvalid chain_id {}zcreated output directory: %sz/Invalid path for output files, no such dir: {}.z,Specified output_dir is not a directory: {}.zw+z7Invalid path for output files, cannot write to dir: {}.z>Argument "refresh" must be a positive integer value, found {}.   zAArgument "sig_figs" must be an integer between 1 and 18, found {}   r   zYArgument "sig_figs" invalid for CmdStan versions < 2.25, using version %s in directory %si )lowhighsizezCArgument "seed" must be an integer between 0 and 2**32-1, found {}.r   l    zTList of per-chain seeds cannot be evaluated without corresponding list of chain_ids.zINumber of seeds must match number of chains, found {} seed for {} chains.zHArgument "seed" must be an integer value between 0 and 2**32-1, found {}ra   z&Argument "data" must be string or dictz&Argument "inits" must be > 0, found {}zPList of inits files cannot be evaluated without corresponding list of chain_ids.zVNumber of inits files must match number of chains, found {} inits files for {} chains.)1r   r8   r   r   rp   r  rs   rt   realpath
expanduserru   makedirsr   infoRuntimeErrorPermissionErrorisdirr   r/   r   openremove	Exceptionr  r4   r5   r6   r7   r  r   warningbasenamer   dirnamer   r   integersitemrv   rq   r   rh   r   r<   r=   r   r@   rO   r   )r   chain_idexctestpathrngr   r   s          r    r   CmdStanArgs.validate   si    ??"677>>!122>>% NNa<$%:%A%A(%KLL + ??& gg..""4??3DO 77>>$//22	KK0L%%6 77==11 BII 
	77<<TVE(D) *		(# <<#t||c2::->??<<!#   &t|| 4 
 ==$t}}sBJJ.?@@==1$==2%   &t}} 5 
 &a,, $$$7GG$$\^4GGOOLN3	 99-CQ?DDFDIdii#tRZZ)@AA //5vdii/@  $))c2::%67799q=DII	$9$3396$))3D  %: >>)$;  tyy>S%88$88>		NC,?9  !IIDax4)#3(((.t  & dii%%77>>$)),, !2!9!9$))!DEE -YY":dii#t+M+MEFF::!$**uc2;;

&KLL::>$@GG JJ  " DJJ,,t//==((33a7!$"2"2NCC77>>$**55():)A)A$**)MNN 6 D 8
 DJJ-->>)$; 
 tzz?c$..&99$??Ev

OS-@@  "ZZE77>>%00():)A)A%)HII ( .! "{ %o6 $++16$//+B  *)   006t0G sJ   9A`$ Aa3 a!a3 $a4%aa!
a0+a3 3
b'=%b""b')rU   profile_filer   csv_filerU   r#  c                ~   / nUb  U R                   b  US:  d  U[        U R                   5      S-
  :  a.  [        SR                  U[        U R                   5      5      5      eUR	                  U R
                  5        UR	                  SU R                   U    35        OUR	                  U R
                  5        U R                  b  [        U R                  [        5      (       d0  UR	                  S5        UR	                  SU R                   35        O2UR	                  S5        UR	                  SU R                  U    35        U R                  b/  UR	                  S5        UR	                  SU R                   35        U R                  b_  [        U R                  [        5      (       d  UR	                  S	U R                   35        O!UR	                  S	U R                  U    35        UR	                  S
5        UR	                  SU 35        U(       a  UR	                  SU 35        U(       a  UR	                  SU 35        U R                  b  UR	                  SU R                   35        U R                  b  UR	                  SU R                   35        U R                  R                  X5      nU$ )z4
Compose CmdStan command for non-default arguments.
r   rZ   z(index ({}) exceeds number of chains ({})zid=randomzseed=r   zfile=zinit=outputzdiagnostic_file=zprofile_file=zrefresh=z	sig_figs=)r   rq   r8   rp   r{   r   r   r4   rv   r   r   r  r  r   r   )r   r   r$  rU   r#  r   s         r    compose_commandCmdStanArgs.compose_command  s&    ?t~~9Qw#DNN 3a 77 >EES0 
 JJt~~&JJT^^C0123JJt~~&99 dii..

8$

U499+./

8$

U499S>"23499 JJvJJtyyk*+::!djj$//

U4::,/0

U4::c?"345

8

U8*%&JJ)/):;<JJ|n56<<#JJ$,,01==$JJ4==/23&&s0
r#   )r   r   r   r  r   r   r   r  r  r  r  r   r  )NNNNNFFN)r   N)r   r%   r&   r'   r(   r/   OptionalPathr
   r   r5   r   r@   r   r   r   r   r   r	   r   r<   r   rV   r   r(  r0   r$   r#   r    r   r     sc   & 59,09=#'"&%*"!%)44  4 DI&	4
 "
4 GCH%sD014 CcD()4 S%d3i564  !!4" 3-#4$ #%4& '4( #)4* 
+4lYJ@ *.&*22 2
 "#2 sm2 
c2 2r#   r   )'r(   rs   enumr   r   r   typingr   r   r   r	   r
   r   numpyr6   numpy.randomr   	cmdstanpyr   cmdstanpy.utilsr   r   r   r   r   r   r/   PathLiker*  r   r:   r>   r@   r   r   r   r   r   r   r$   r#   r    <module>r2     s    
   < <  $   S"++t+,@T @< <3 <4 <># >S >T >R Rj
a aH 6` `F <R RjJ Jr#   