
    ]hG@                        S r SSKrSSKrSSKrSSKJrJrJrJrJ	r	J
r
Jr  SSKrSSKrSSKJrJrJr       S$S\S\S\	\   S\	\   S	\S
\	\   S\\\4   4S jjrS%S\S\S\\\4   4S jjrS%S\S\S\\\4   4S jjrS\S\\\4   4S jrS\S\\\4   4S jrS\
S\\\4   S\S\4S jrS\
S\\\4   S\S\4S jrS\
S\\\4   S\S\4S jrS\S\4S jrS\\   S\\   4S jr S\
S\\\4   S\S\4S jr!S\
S\\\4   S\S\S\4
S jr"S\S\\   4S jr#S\S\\   4S jr$S \S\	\\\\\%\RL                  4   4      4S! jr'S"\S\\\%\RL                  4   4S# jr(g)&z3
Utility functions for reading the Stan CSV format
    N)AnyDictListMutableMappingOptionalTextIOUnion)_CMDSTAN_SAMPLING_CMDSTAN_THIN_CMDSTAN_WARMUPpathis_fixed_paramiter_samplingiter_warmupsave_warmupthinreturnc                 ~   [        X5      nUc  [        nOQU[        :  aG  SU;  a  [        SR                  X5      5      eUS   U:w  a  [        SR                  XUS   5      5      eUnUc  [        nUnUc  [
        n[        [        R                  " X-  5      5      n[        [        R                  " Xu-  5      5      nUS   U:w  a  [        SR                  XUS   5      5      eU(       aP  SU;   a	  US   S;   d  [        SR                  U 5      5      eUS	   U:w  a  [        S
R                  XUS	   5      5      eU$ )z3Capture essential config, shape from stan_csv file.r   z6bad Stan CSV file {}, config error, expected thin = {}z@bad Stan CSV file {}, config error, expected thin = {}, found {}draws_samplingz1bad Stan CSV file {}, expected {} draws, found {}r   )   truez<bad Stan CSV file {}, config error, expected save_warmup = 1draws_warmupz8bad Stan CSV file {}, expected {} warmup draws, found {})	scan_sampler_csvr   
ValueErrorformatr
   r   intmathceil)	r   r   r   r   r   r   metar   r   s	            jC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\cmdstanpy/utils/stancsv.pycheck_sampler_csvr!      si    D1D|		3396$3E  <4==CVV>  #N*L&tyy!456L>#89:N/?FFd+;&<
 	

 %$}*=*L99?  </55;V^(<6  K    c                 (   0 nSn[        U S5       n [        XBU5      n[        XBU5      nU(       d  [        XBU5      n[	        XBU5      n[        XBX15      n SSS5        U$ ! [         a  n[        SU -   5      UeSnAff = f! , (       d  f       U$ = f)z2Process sampler stan_csv output file line by line.r   rzError in reading csv file: N)openscan_configscan_column_namesscan_warmup_itersscan_hmc_paramsscan_sampling_itersr   )r   r   dictlinenofdes         r    r   r   F   s    DF	dCB	J 62F&r8F!*2V<(6:(6JF 
 K  	J:TABI	J 
 Ks)   BAA!!
A?+A::A??B
B
save_itersc           	      :   0 nSn[        U S5       n[        XBU5      n[        XBU5      nSnU H  nUS-  nM
     SSS5        U(       a(  [        R                  " W[        US   5      4[        SS9n[        U S5       n[        U5       H  nUR                  5         M     [        W5       H  nUR                  5       R                  5       n[        U5      S:  a  [        SR                  XU-   5      5      eUR                  S	5      n	U(       a#  U	 V
s/ s H  n
[        U
5      PM     sn
WUSS24'   XS-
  :X  d  M  [        R                  " U	[        S
9nM     SSS5        WUS'   U(       a  WUS'   U$ ! , (       d  f       GNB= fs  sn
f ! , (       d  f       N8= f)z4Process optimizer stan_csv output file line by line.r   r$   r   Ncolumn_namesF)dtypeorderz*cannot parse CSV file {}, error at line {},)r3   mle	all_iters)r%   r&   r'   npemptylenfloatrangereadlinestripr   r   splitarray)r   r/   r+   r,   r-   itersliner7   ixsxr6   s               r    scan_optimize_csvrF   W   si   DF	dCBRv."2V4DQJE 	 
  "C^,-.e3!
	 
dCBvAKKM uA;;=&&(D4y1} @GGqj 
 CB57"8R58R"8	!Q$AI~"$((2U";  
" DK%[K? 
0 #9 
s0   )E5=BFF)F=F5
FF
Fc                     0 nSn[        U S5       n[        X1U5      n[        X1U5      nSSS5        U$ ! , (       d  f       U$ = f)z2Process laplace stan_csv output file line by line.r   r$   N)r%   r&   r'   )r   r+   r,   r-   s       r    scan_generic_csvrH   ~   sJ    DF	dCBRv."2V4 
 K 
 Ks	   4
Ac           	      4   0 nSn[        U S5       n[        X1U5      n[        X1U5      nUR                  5       R	                  S5      R                  5       nUS-  nUR                  S5      (       a  UR                  5       R	                  S5      nUS-  nUR                  S5      (       d  [        SR                  X$5      5      eUR                  S	5      u  pV[        U5      US'   UR                  5       R	                  S5      nUS-  nUR                  S
5      nU Vs/ s H  n[        U5      PM     n	n[        R                  " U	5      US'   [        R                  " U SUSSS9R                  5       US'   SSS5        U$ s  snf ! , (       d  f       U$ = f)z/Process advi stan_csv output file line by line.r   r$    #	r   zStepsize adaptation complete.z #	
etaz%line {}: expecting eta, found:
	 "{}"=r5   variational_mean#Nhigh)commentskiprowsheaderfloat_precisionvariational_sample)r%   r&   r'   r=   lstriprstrip
startswithr   r   r?   r;   r8   r@   pdread_csvto_numpy)
r   r+   r,   r-   rB   _rK   rD   rE   rM   s
             r    scan_variational_csvr\      sz   DF	dCBRv."2V4{{}##F+224!??:;;;;=''1DaKF??5)) =DD 
 ZZ_FA*DK;;=''1DaKFZZ_.01bE!Hb1#%88,<#= %'[["&
 (* 	!"+ 
8 K 2' 
8 Ks   DF F5AFF
Fr-   config_dictr,   c                    U R                  5       nU R                  5       R                  5       n[        U5      S:  Ga]  UR	                  S5      (       GaF  US-  nUR                  S5      (       a  UR                  SS5      nUR                  S5      nUR                  S5      n[        U5      S:X  a  US   R                  5       S	:X  a0  US   R                  S
5      (       d  US   R                  5       US'   OKUS   R                  5       S	:w  a4  US   R                  5       n [        U5      nXqUS   R                  5       '   U R                  5       nU R                  5       R                  5       n[        U5      S:  a  UR	                  S5      (       a  GMF  U R                  U5        U$ ! [         a8     [        U5      n N! [         a    US:X  a  Sn  NUS:X  a  Sn  NUn  Nf = ff = f)zj
Scan initial stan_csv file comments lines and
save non-default configuration information to config_dict.
r   rN   r   z	(Default) rJ   rL      filecsv	data_filer   false)tellr=   r>   r:   rW   endswithreplacerU   r?   r   r   r;   seek)r-   r]   r,   cur_posrB   key_valraw_valvals           r    r&   r&      s   
 ggiG;;= D
d)a-DOOC00!==%%<<R0D{{6"**S/w<1qz!V+GAJ4G4G4N4N+21:+;+;+=K(!!#v-!!***,*g,C 36GAJ,,./''){{}""$5 d)a-DOOC006 GGGM " 	**#Gn% *"f,"#C$/"#C")C*	*sB   &F/ /
G1:GG-G1G-$G1'G-)G1,G--G1c                    SU;  a  U$ U R                  5       nU R                  5       R                  5       nSn[        U5      S:  au  UR	                  S5      (       d_  US-  nUS-  nU R                  5       nU R                  5       R                  5       n[        U5      S:  a  UR	                  S5      (       d  M_  U R                  U5        XQS'   U$ )z"
Check warmup iterations, if any.
r   r   rN   r   r   )re   r=   r>   r:   rW   rh   )r-   r]   r,   ri   rB   draws_founds         r    r(   r(      s     K'ggiG;;= DK
d)a- 4 4!q''){{}""$	 d)a- 4 4
 GGG"-Mr"   c                     U R                  5       R                  5       nUS-  nUR                  5       US'   UR                  S5      n[        [	        U5      5      US'   U$ )z>
Process columns header, add to config_dict as 'column_names'
r   
raw_headerr5   r1   )r=   r>   r?   tuplemunge_varnames)r-   r]   r,   rB   namess        r    r'   r'      sW     ;;= D
aKF $

KJJsOE"'u(=">KMr"   namec                     SU ;  a  SU ;  a  U $ U R                  S5      n[        U5       H;  u  p#SU;  a  M  UR                  SSS5      nUR                  SS5      nUS-  nX1U'   M=     SR                  U5      $ )N.:[r   r5   ])r?   	enumeraterg   join)rt   tuple_partsrC   parts       r    munge_varnamer~      s    
$3d?**S/K[)d?||Ca(||C%A * 88K  r"   rs   c                 `    U c  [        S5      eU  Vs/ s H  n[        U5      PM     sn$ s  snf )z
Change formatting for indices of container var elements
from use of dot separator to array-like notation, e.g.,
rewrite label ``y_forecast.2.4`` to ``y_forecast[2,4]``.
zmissing argument "names")r   r~   )rs   rt   s     r    rr   rr     s2     }344,12EDM$E222s   +c                    US   nU R                  5       R                  5       nUS-  nUS:X  d  [        SR                  X$5      5      eU R                  5       R                  5       nUS-  nUR	                  S5      u  pVUR                  S5      (       d  [        SR                  X$5      5      e [        UR                  5       5        U R                  5       nU R                  5       R                  5       nUS-  nUS
:X  a.  UR                  S5      (       a  U$ U R                  U5        US-
  $ US:X  a  US:X  d&  US:X  a  US:X  d  [        SR                  U5      5      eU R                  5       R                  S5      nUS-  n[        UR	                  S5      5      n	US:X  a  U$ [        SU	5       H_  n
U R                  5       R                  S5      nUS-  n[        UR	                  S5      5      U	:w  d  MG  [        SR                  U5      5      e   U$ ! [         a   n[        SR                  X&5      5      UeS	nAff = f)z;
Scan step size, metric from  stan_csv file comment lines.
metricr   z# Adaptation terminatedz(line {}: expecting metric, found:
	 "{}"rL   z# Step sizez+line {}: expecting step size, found:
	 "{}"zline {}: invalid step size: {}Nunit_ez# No free parametersdiag_ez+# Diagonal elements of inverse mass matrix:dense_ez"# Elements of inverse mass matrix:z5line {}: invalid or missing mass matrix specificationrJ   r5   )r=   r>   r   r   r?   rW   r;   re   rh   rU   r:   r<   )r-   r]   r,   r   rB   label	step_sizer.   before_metricnum_unconstrained_paramsr[   s              r    r)   r)     s9    "F;;= D
aKF,,8??M
 	
 ;;= D
aKFzz#EM**$fV2
 	
ioo 
 GGIM;;= D
aKF??122MGGM"A: hEE iD,P$P "F6N
 	
 ;;='D
aKF"4::c?3q23A;;=''/DaKF4::c?#'?? $$*F6N 	 4 S  ,33FF
	s   0H 
I#H>>Ic                 P   Sn[        US   5      nU(       d1  US   R                  S5      nUS   R                  S5      nUS   nSn	Sn
U R                  5       nU R                  5       R	                  5       n[        U5      S:  a  UR                  S5      (       d  US-  nUS-  nUR                  S5      n[        U5      U:w  a6  [        S	R                  X%[        UR                  S5      5      5      S
-   5      eU R                  5       nU R                  5       R	                  5       nU(       d(  W	[        UW   5      -  n	[        UW   5      W:X  a  W
S-  n
[        U5      S:  a  UR                  S5      (       d  M  U R                  U5        XAS'   U(       d
  W	US'   W
US'   U$ )zy
Parse sampling iteration, save number of iterations to config_dict.
Also save number of divergences, max_treedepth hits
r   r1   divergent__treedepth__	max_depthrN   r   r5   z0line {}: bad draw, expecting {} items, found {}
zThis error could be caused by running out of disk space.
Try clearing up TEMP or setting output_dir to a path on another drive.r   ct_divergencesct_max_treedepth)r:   indexre   r=   r>   rW   r?   r   r   r   rh   )r-   r]   r,   r   rn   num_colsidx_divergentidx_treedepthmax_treedepthr   r   ri   rB   datas                 r    r*   r*   R  s    K;~./H#N399-H#N399-H#K0ggiG;;= D
d)a- 4 4!qzz#t9 CJJc$**S/&:%%  ''){{}""$c$}"566N4&'=8 A% % d)a- 4 4( GGG$/ !(6$%*:&'Mr"   c                    U R                  S5      (       ay  [        U S5       n[        R                  " U5      nSSS5        SW;   a.  [        R
                  " US   5      n[        UR                  5      $ [        SR                  U 5      5      e[        [        U 5      5      nUc  [        SR                  U 5      5      eU$ ! , (       d  f       N= f)zT
Read metric file in JSON or Rdump format.
Return dimensions of entry "inv_metric".
z.jsonr$   N
inv_metric1metric file {}, bad or missing entry "inv_metric")rf   r%   jsonloadr8   asarraylistshaper   r   read_rdump_metric)r   r-   metric_dictdims_npdimss        r    read_metricr     s    
 }}W$_))B-K ;&"$**[-F"GG&&&&,fTl 
 %d+,<&&,fTl  # _s   C
Cc                     [        U 5      nUb(  SU;   a"  [        US   [        R                  5      (       d  [	        SR                  U 5      5      e[        US   R                  5      $ )zD
Find dimensions of variable named 'inv_metric' in Rdump data file.
r   r   )rload
isinstancer8   ndarrayr   r   r   r   )r   r   s     r    r   r     sd     +K#{<0"**==?FFtL
 	
 L)//00r"   fnamec                    0 n[        U S5       nUR                  5       nSSS5        SnU[        W5      :  a&  SX4   ;  a  US-  nU[        U5      :  a
  SX4   ;  a  M  U[        U5      :X  a  gUnUS-  n U[        U5      :  a&  SX4   ;  a  US-  nU[        U5      :  a
  SX4   ;  a  M  UnSR                  X5U 5      R	                  SS5      nUR                  S5       Vs/ s H  oR                  5       PM     snu  pU	R	                  SS5      n	U
R	                  S	S5      n
[        U
5      X'   U[        U5      :X  a   U$ UnUS-  nM  ! , (       d  f       GN5= fs  snf )
zParse data and parameter variable values from an R dump format file.
This parser only supports the subset of R dump data as described
in the "Dump Data Format" section of the CmdStan manual, i.e.,
scalar, vector, matrix, and array data types.
r$   Nr   z<-r   r_   
"L)r%   	readlinesr:   r{   rg   r?   r>   parse_rdump_value)r   	data_dictr-   linesidx	start_idxnext_varvar_dataitemlhsrhss              r    r   r     sf    I	eS	R 
 C
E

t5:5q E

t5:5
c%jI1HC
CJ4uz#91HC CJ4uz#9775845==dBG-5^^D-AB-ATJJL-ABkk#r"kk#r"*3/	#e*  	q  
	 Cs   E$E 
Er   c                    [         R                  " S5      n U R                  S5      (       a  UR                  U 5      nUb  UR	                  S5      c  [        U 5      eUR	                  S5      R                  S5       Vs/ s H  n[        U5      PM     nn[        R                  " USS9nUR	                  S5      b]  UR	                  S5      R                  S5       Vs/ s H  n[        U5      PM     nn[        R                  " U5      R                  USS9nU$ U R                  S	5      (       aZ  U R                  S
5      (       aD  [        R                  " U SS R                  S5       Vs/ s H  n[        U5      PM     sn5      nU$ SU ;   d  SU ;   a  [        U 5      nU$ [        U 5      n U$ s  snf s  snf s  snf ! [         a   n[        SR                  U 5      5      UeSnAff = f)zProcess right hand side of Rdump variable assignment statement.
Value is either scalar, vector, or multi-dim structure.
Use regex to capture structure values, dimensions.
zQstructure\(\s*c\((?P<vals>[^)]*)\)(,\s*\.Dim\s*=\s*c\s*\((?P<dims>[^)]*)\s*\))?\)	structureNvalsr5   r2   )r4   r   zc()r`   rv   r.   zbad value in Rdump file: {})recompilerW   matchgroupr   r?   r;   r8   r@   r   reshaperf   	TypeErrorr   )	r   patparsevr   rl   r   r   r.   s	            r    r   r     s   
 **	;C
K>>+&&IIcNE}F 3 ; o%&+kk&&9&?&?&DE&DE!H&DDE((4s+C{{6".(-F(;(A(A#(FG(F1A(FGhhtn,,T,= J ^^D!!cll3&7&7((C"IOOC4HI4HDE$K4HIJC J CZ3#:*C
 J c(C J F H J
  K6==cBCJKsV   A)G F5AG !F:6&G AG 0F?G G 'G 5G 
G.G))G.)FNNFN)F))__doc__r   r   r   typingr   r   r   r   r   r   r	   numpyr8   pandasrX   	cmdstanpyr
   r   r   strboolr   r!   r   rF   rH   r\   r&   r(   r'   r~   rr   r)   r*   r   r   r;   r   r   r    r"   r    <module>r      s     	 K K K   G G
 !#'!%4
44 C=4 #	4
 4 3-4 
#s(^4n3  c3h "$C $T $d38n $N3 4S>  s  tCH~  F#F #c3h # # #L!#s(^58*+CH5?B! ! ! 3$s) 3S	 3@@!#s(^@58@@F++!#s(^+58+JN++\c d3i 41C 1DI 1 $sE#ubjj2H,I'I"JK B3 5eRZZ)?#@ r"   