I have a file which can not be pickled. I reduced it to just a few lines, and still have problems.
functions {
real iLogLikelihood_lpmf(int[,] visit_C_array, int T, real[,] xi, vector[,] beta, row_vector[] x_array, real[] alpha_array, vector[] gamma_array, row_vector[] z_array, real[] eta_array){ // x is ad stock
real L_i;
row_vector[3] one_vector = [1, 1, 1];
vector[3] pi_t = [1.0, 0.0, 0.0]'; // all users starts from state 1
return L_i;
}
}
Its giving
sm = StanModel(file=filename+’.stan’, model_name=model_name)
File “/Users/bruceho/anaconda/envs/adtech/lib/python2.7/site-packages/pystan/model.py”, line 211, in init
obfuscate_model_name=obfuscate_model_name)
File “/Users/bruceho/anaconda/envs/adtech/lib/python2.7/site-packages/pystan/api.py”, line 129, in stanc
raise ValueError(error_msg)
ValueError: Failed to parse Stan model ‘AdAttribEP_sg_350f8cce03e9fb95bcdc7bb7a71138f7’. Error message:
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
ERROR at line 8
6: real L_i;
7:
8: row_vector[3] one_vector = [1, 1, 1];
^
9: vector[3] pi_t = [1.0, 0.0, 0.0]’; // all users starts from state 1
PARSER EXPECTED:
line 8 looks perfectly ok to me.
Hi,
I could not replicate the error. Try to remove the extra whitespace from the file and run it through pystan.stanc
.
I’m not sure if pickle has anything to do with this problem.
I already compiled successfully only happens during pickle. Used code from util.py to pickle
In the first message you give a stan function and then describe that it can not be compiled?
sm = StanModel(file=filename+’.stan’, ...
....
I had no problem compiling this model, and apparently you managed to compile it too.
How are you pickling the model?
Like this?
Dumping
import pickle
with open("...", "wb") as f:
pickle.dump(sm, f, protocol=-1)
And then loading
with open("...", "rb") as f:
sm = pickle.load(f)
The util.py
file not part of the PyStan. So I take a guess it is the util.py
file in ep-stan?
I don’t understand this. I used command line to compile the stan file (using the make command) and it compiles just fine. But using the same code you have
sm = StanModel(file=filename+'.stan', model_name=model_name)
it fails with the that error message point to the perfectly good line
row_vector[3] one_vector = [1, 1, 1];
This appears to be a bug in the lib. I tested this out thoroughly, and it is not working as expected.
row_vector[3] one_vector = [1, 1, 1];
generates an error PARSER EXPECTED:
finally, I changed the code to
row_vector[3] one_vector ;
one_vector[1] = 1.0;
one_vector[2] = 1.0;
one_vector[3] = 1.0;
That got me thru. Someone should be able to reproduce this. This is all in the function {} block.