@@ -20,24 +20,26 @@ function PythonCall.Py(d::PSISLOOResult)
2020 return arviz. stats. ELPDData (; data, index)
2121end
2222
23- function PythonCall. Py (d:: WAICResult )
24- estimates = elpd_estimates (d)
25- pointwise = elpd_estimates (d; pointwise= true )
26- ds = convert_to_dataset ((waic_i= pointwise. elpd,))
27- pyds = PythonCall. Py (ds)
28- entries = (
29- elpd_waic= estimates. elpd,
30- se= estimates. se_elpd,
31- p_waic= estimates. p,
32- n_samples= " unknown" ,
33- n_data_points= length (pointwise. elpd),
34- warning= false ,
35- waic_i= pyds. waic_i,
36- scale= " log" ,
37- )
38- data = pylist (values (entries))
39- index = pylist (map (pystr, keys (entries)))
40- return arviz. stats. ELPDData (; data, index)
23+ @static if isdefined (PosteriorStats, :WAICResult )
24+ function PythonCall. Py (d:: WAICResult )
25+ estimates = elpd_estimates (d)
26+ pointwise = elpd_estimates (d; pointwise= true )
27+ ds = convert_to_dataset ((waic_i= pointwise. elpd,))
28+ pyds = PythonCall. Py (ds)
29+ entries = (
30+ elpd_waic= estimates. elpd,
31+ se= estimates. se_elpd,
32+ p_waic= estimates. p,
33+ n_samples= " unknown" ,
34+ n_data_points= length (pointwise. elpd),
35+ warning= false ,
36+ waic_i= pyds. waic_i,
37+ scale= " log" ,
38+ )
39+ data = pylist (values (entries))
40+ index = pylist (map (pystr, keys (entries)))
41+ return arviz. stats. ELPDData (; data, index)
42+ end
4143end
4244
4345function rekey (nt:: NamedTuple , old_new_keys:: Pair... )
4850function PythonCall. Py (mc:: ModelComparisonResult )
4951 table = Tables. columntable (mc)
5052 se_pairs = (:se_elpd => :se , :se_elpd_diff => :dse )
51- est_pairs = if eltype (mc. elpd_result) <: PSISLOOResult
52- (:elpd => :elpd_loo , :p => :p_loo )
53- elseif eltype (mc. elpd_result) <: WAICResult
54- (:elpd => :elpd_waic , :p => :p_waic )
55- end
53+ est_pairs = _estimate_name_map (eltype (mc. elpd_result))
5654 nrows = Tables. rowcount (table)
5755 new_cols = (warning= fill (false , nrows), scale= fill (" log" , nrows))
5856 table_new = merge (rekey (table, est_pairs... , se_pairs... ), new_cols)
5957 pdf = topandas (Val (:DataFrame ), table_new; index_name= " name" )
6058 return pdf
6159end
60+
61+ _estimate_name_map (:: Type{<:PSISLOOResult} ) = (:elpd => :elpd_loo , :p => :p_loo )
62+
63+ @static if isdefined (PosteriorStats, :WAICResult )
64+ _estimate_name_map (:: Type{<:WAICResult} ) = (:elpd => :elpd_waic , :p => :p_waic )
65+ end
0 commit comments