@@ -117,6 +117,14 @@ def __repr__(self) -> str:
117117 # TODO - hamiltonian, profiling files
118118 return repr
119119
120+ def __getattr__ (self , attr : str ) -> np .ndarray :
121+ """Synonymous with ``fit.stan_variable(attr)"""
122+ try :
123+ return self .stan_variable (attr )
124+ except ValueError as e :
125+ # pylint: disable=raise-missing-from
126+ raise AttributeError (* e .args )
127+
120128 @property
121129 def chains (self ) -> int :
122130 """Number of chains."""
@@ -619,7 +627,7 @@ def draws_xr(
619627
620628 def stan_variable (
621629 self ,
622- var : Optional [ str ] = None ,
630+ var : str ,
623631 inc_warmup : bool = False ,
624632 ) -> np .ndarray :
625633 """
@@ -647,6 +655,9 @@ def stan_variable(
647655 and the sample consists of 4 chains with 1000 post-warmup draws,
648656 this function will return a numpy.ndarray with shape (4000,3,3).
649657
658+ This functionaltiy is also available via a shortcut using ``.`` -
659+ writing ``fit.a`` is a synonym for ``fit.stan_variable("a")``
660+
650661 :param var: variable name
651662
652663 :param inc_warmup: When ``True`` and the warmup draws are present in
@@ -660,10 +671,12 @@ def stan_variable(
660671 CmdStanVB.stan_variable
661672 CmdStanGQ.stan_variable
662673 """
663- if var is None :
664- raise ValueError ('No variable name specified.' )
665674 if var not in self ._metadata .stan_vars_dims :
666- raise ValueError ('Unknown variable name: {}' .format (var ))
675+ raise ValueError (
676+ f'Unknown variable name: { var } \n '
677+ 'Available variables are '
678+ + ", " .join (self ._metadata .stan_vars_dims )
679+ )
667680 if self ._draws .shape == (0 ,):
668681 self ._assemble_draws ()
669682 draw1 = 0
@@ -767,6 +780,14 @@ def __repr__(self) -> str:
767780 )
768781 return repr
769782
783+ def __getattr__ (self , attr : str ) -> np .ndarray :
784+ """Synonymous with ``fit.stan_variable(attr)"""
785+ try :
786+ return self .stan_variable (attr )
787+ except ValueError as e :
788+ # pylint: disable=raise-missing-from
789+ raise AttributeError (* e .args )
790+
770791 def _validate_csv_files (self ) -> Dict [str , Any ]:
771792 """
772793 Checks that Stan CSV output files for all chains are consistent
@@ -1130,7 +1151,7 @@ def draws_xr(
11301151
11311152 def stan_variable (
11321153 self ,
1133- var : Optional [ str ] = None ,
1154+ var : str ,
11341155 inc_warmup : bool = False ,
11351156 ) -> np .ndarray :
11361157 """
@@ -1158,6 +1179,9 @@ def stan_variable(
11581179 and the sample consists of 4 chains with 1000 post-warmup draws,
11591180 this function will return a numpy.ndarray with shape (4000,3,3).
11601181
1182+ This functionaltiy is also available via a shortcut using ``.`` -
1183+ writing ``fit.a`` is a synonym for ``fit.stan_variable("a")``
1184+
11611185 :param var: variable name
11621186
11631187 :param inc_warmup: When ``True`` and the warmup draws are present in
@@ -1171,12 +1195,14 @@ def stan_variable(
11711195 CmdStanMLE.stan_variable
11721196 CmdStanVB.stan_variable
11731197 """
1174- if var is None :
1175- raise ValueError ('No variable name specified.' )
11761198 model_var_names = self .mcmc_sample .metadata .stan_vars_cols .keys ()
11771199 gq_var_names = self .metadata .stan_vars_cols .keys ()
11781200 if not (var in model_var_names or var in gq_var_names ):
1179- raise ValueError ('Unknown variable name: {}' .format (var ))
1201+ raise ValueError (
1202+ f'Unknown variable name: { var } \n '
1203+ 'Available variables are '
1204+ + ", " .join (model_var_names | gq_var_names )
1205+ )
11801206 if var not in gq_var_names :
11811207 return self .mcmc_sample .stan_variable (var , inc_warmup = inc_warmup )
11821208 else : # is gq variable
0 commit comments