Skip to content

Commit f7ffa6f

Browse files
committed
Improve error message when a stanvariable is not found
1 parent ee3692e commit f7ffa6f

3 files changed

Lines changed: 24 additions & 16 deletions

File tree

cmdstanpy/stanfit/mcmc.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ def draws_xr(
619619

620620
def stan_variable(
621621
self,
622-
var: Optional[str] = None,
622+
var: str,
623623
inc_warmup: bool = False,
624624
) -> np.ndarray:
625625
"""
@@ -660,10 +660,12 @@ def stan_variable(
660660
CmdStanVB.stan_variable
661661
CmdStanGQ.stan_variable
662662
"""
663-
if var is None:
664-
raise ValueError('No variable name specified.')
665663
if var not in self._metadata.stan_vars_dims:
666-
raise ValueError('Unknown variable name: {}'.format(var))
664+
raise ValueError(
665+
f'Unknown variable name: {var}\n'
666+
'Available variables are '
667+
+ ", ".join(self._metadata.stan_vars_dims)
668+
)
667669
if self._draws.shape == (0,):
668670
self._assemble_draws()
669671
draw1 = 0
@@ -1130,7 +1132,7 @@ def draws_xr(
11301132

11311133
def stan_variable(
11321134
self,
1133-
var: Optional[str] = None,
1135+
var: str,
11341136
inc_warmup: bool = False,
11351137
) -> np.ndarray:
11361138
"""
@@ -1171,12 +1173,14 @@ def stan_variable(
11711173
CmdStanMLE.stan_variable
11721174
CmdStanVB.stan_variable
11731175
"""
1174-
if var is None:
1175-
raise ValueError('No variable name specified.')
11761176
model_var_names = self.mcmc_sample.metadata.stan_vars_cols.keys()
11771177
gq_var_names = self.metadata.stan_vars_cols.keys()
11781178
if not (var in model_var_names or var in gq_var_names):
1179-
raise ValueError('Unknown variable name: {}'.format(var))
1179+
raise ValueError(
1180+
f'Unknown variable name: {var}\n'
1181+
'Available variables are '
1182+
+ ", ".join(model_var_names | gq_var_names)
1183+
)
11801184
if var not in gq_var_names:
11811185
return self.mcmc_sample.stan_variable(var, inc_warmup=inc_warmup)
11821186
else: # is gq variable

cmdstanpy/stanfit/mle.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def optimized_params_dict(self) -> Dict[str, float]:
155155

156156
def stan_variable(
157157
self,
158-
var: Optional[str] = None,
158+
var: str,
159159
*,
160160
inc_iterations: bool = False,
161161
warn: bool = True,
@@ -179,10 +179,12 @@ def stan_variable(
179179
CmdStanVB.stan_variable
180180
CmdStanGQ.stan_variable
181181
"""
182-
if var is None:
183-
raise ValueError('no variable name specified.')
184182
if var not in self._metadata.stan_vars_dims:
185-
raise ValueError('unknown variable name: {}'.format(var))
183+
raise ValueError(
184+
f'Unknown variable name: {var}\n'
185+
'Available variables are '
186+
+ ", ".join(self._metadata.stan_vars_dims)
187+
)
186188
if warn and inc_iterations and not self._save_iterations:
187189
get_logger().warning(
188190
'Intermediate iterations not saved to CSV output file. '

cmdstanpy/stanfit/vb.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,7 @@ def metadata(self) -> InferenceMetadata:
103103
"""
104104
return self._metadata
105105

106-
def stan_variable(
107-
self, var: Optional[str] = None
108-
) -> Union[np.ndarray, float]:
106+
def stan_variable(self, var: str) -> Union[np.ndarray, float]:
109107
"""
110108
Return a numpy.ndarray which contains the estimates for the
111109
for the named Stan program variable where the dimensions of the
@@ -123,7 +121,11 @@ def stan_variable(
123121
if var is None:
124122
raise ValueError('No variable name specified.')
125123
if var not in self._metadata.stan_vars_dims:
126-
raise ValueError('Unknown variable name: {}'.format(var))
124+
raise ValueError(
125+
f'Unknown variable name: {var}\n'
126+
'Available variables are '
127+
+ ", ".join(self._metadata.stan_vars_dims)
128+
)
127129
col_idxs = list(self._metadata.stan_vars_cols[var])
128130
shape: Tuple[int, ...] = ()
129131
if len(col_idxs) > 1:

0 commit comments

Comments
 (0)