2
2
< html xmlns ="http://www.w3.org/1999/xhtml " lang ="en " xml:lang ="en "> < head >
3
3
4
4
< meta charset ="utf-8 ">
5
- < meta name ="generator " content ="quarto-1.7.31 ">
5
+ < meta name ="generator " content ="quarto-1.7.32 ">
6
6
7
7
< meta name ="viewport " content ="width=device-width, initial-scale=1.0, user-scalable=yes ">
8
8
74
74
< script src ="../../../site_libs/quarto-html/tippy.umd.min.js "> </ script >
75
75
< script src ="../../../site_libs/quarto-html/anchor.min.js "> </ script >
76
76
< link href ="../../../site_libs/quarto-html/tippy.css " rel ="stylesheet ">
77
- < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-e1a5c8363afafaef2c763b6775fbf3ca .css " rel ="stylesheet " class ="quarto-color-scheme " id ="quarto-text-highlighting-styles ">
78
- < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-8ef56b68f8fa1e9d2ba328e99e439f80 .css " rel ="stylesheet " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-text-highlighting-styles ">
79
- < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-e1a5c8363afafaef2c763b6775fbf3ca .css " rel ="stylesheet " class ="quarto-color-scheme-extra " id ="quarto-text-highlighting-styles ">
77
+ < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-37eea08aefeeee20ff55810ff984fec1 .css " rel ="stylesheet " class ="quarto-color-scheme " id ="quarto-text-highlighting-styles ">
78
+ < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2fef5ea3f8957b3e4ecc936fc74692ca .css " rel ="stylesheet " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-text-highlighting-styles ">
79
+ < link href ="../../../site_libs/quarto-html/quarto-syntax-highlighting-37eea08aefeeee20ff55810ff984fec1 .css " rel ="stylesheet " class ="quarto-color-scheme-extra " id ="quarto-text-highlighting-styles ">
80
80
< script src ="../../../site_libs/bootstrap/bootstrap.min.js "> </ script >
81
81
< link href ="../../../site_libs/bootstrap/bootstrap-icons.css " rel ="stylesheet ">
82
82
< link href ="../../../site_libs/bootstrap/bootstrap-18ccf09ac862cdae137f1cff9f0dff93.min.css " rel ="stylesheet " append-hash ="true " class ="quarto-color-scheme " id ="quarto-bootstrap " data-mode ="light ">
@@ -953,9 +953,33 @@ <h1>Consider a probabilistic model defined by</h1>
953
953
< span id ="cb10-5 "> < a href ="#cb10-5 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="cf "> return</ span > < span class ="cn "> nothing</ span > </ span >
954
954
< span id ="cb10-6 "> < a href ="#cb10-6 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="kw "> end</ span > ;</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
955
955
</ div >
956
- < p > We perform inference with data < code > x = 3.0 < /code > :</ p >
956
+ < p > The < code > @mini_model </ code > macro expands this into another function, < code > m </ code > , which effectively calls either < code > assume < /code > or < code > observe </ code > on each variable as needed :</ p >
957
957
< div id ="24 " class ="cell " data-execution_count ="1 ">
958
- < div class ="sourceCode cell-code " id ="cb11 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb11-1 "> < a href ="#cb11-1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="fu "> sample</ span > (< span class ="fu "> MiniModel</ span > (m, (x< span class ="op "> =</ span > < span class ="fl "> 3.0</ span > ,)), < span class ="fu "> MHSampler</ span > (), < span class ="fl "> 1_000_000</ span > ; chain_type< span class ="op "> =</ span > Chains, progress< span class ="op "> =</ span > < span class ="cn "> false</ span > )</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
958
+ < div class ="sourceCode cell-code " id ="cb11 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb11-1 "> < a href ="#cb11-1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="pp "> @macroexpand</ span > < span class ="pp "> @mini_model</ span > < span class ="kw "> function</ span > < span class ="fu "> m</ span > (x)</ span >
959
+ < span id ="cb11-2 "> < a href ="#cb11-2 " aria-hidden ="true " tabindex ="-1 "> </ a > a < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (< span class ="fl "> 0.5</ span > , < span class ="fl "> 1</ span > )</ span >
960
+ < span id ="cb11-3 "> < a href ="#cb11-3 " aria-hidden ="true " tabindex ="-1 "> </ a > b < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (a, < span class ="fl "> 2</ span > )</ span >
961
+ < span id ="cb11-4 "> < a href ="#cb11-4 " aria-hidden ="true " tabindex ="-1 "> </ a > x < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (b, < span class ="fl "> 0.5</ span > )</ span >
962
+ < span id ="cb11-5 "> < a href ="#cb11-5 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="cf "> return</ span > < span class ="cn "> nothing</ span > </ span >
963
+ < span id ="cb11-6 "> < a href ="#cb11-6 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="kw "> end</ span > </ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
964
+ < div class ="cell-output cell-output-display " data-execution_count ="1 ">
965
+ < div class ="ansi-escaped-output ">
966
+ < pre > :(function m(varinfo, context, x; )
967
+ < span class ="ansi-bright-black-fg "> #= /home/runner/work/docs/docs/developers/compiler/minituring-compiler/index.qmd:276 =#</ span >
968
+ < span class ="ansi-bright-black-fg "> #= /home/runner/work/docs/docs/developers/compiler/minituring-compiler/index.qmd:277 =#</ span >
969
+ a = (assume)(context, varinfo, Normal(0.5, 1), :a)
970
+ < span class ="ansi-bright-black-fg "> #= /home/runner/work/docs/docs/developers/compiler/minituring-compiler/index.qmd:278 =#</ span >
971
+ b = (assume)(context, varinfo, Normal(a, 2), :b)
972
+ < span class ="ansi-bright-black-fg "> #= /home/runner/work/docs/docs/developers/compiler/minituring-compiler/index.qmd:279 =#</ span >
973
+ (observe)(context, varinfo, Normal(b, 0.5), :x, x)
974
+ < span class ="ansi-bright-black-fg "> #= /home/runner/work/docs/docs/developers/compiler/minituring-compiler/index.qmd:280 =#</ span >
975
+ return nothing
976
+ end)</ pre >
977
+ </ div >
978
+ </ div >
979
+ </ div >
980
+ < p > We can use this function to construct the < code > MiniModel</ code > , and then perform inference with data < code > x = 3.0</ code > :</ p >
981
+ < div id ="26 " class ="cell " data-execution_count ="1 ">
982
+ < div class ="sourceCode cell-code " id ="cb12 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb12-1 "> < a href ="#cb12-1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="fu "> sample</ span > (< span class ="fu "> MiniModel</ span > (m, (x< span class ="op "> =</ span > < span class ="fl "> 3.0</ span > ,)), < span class ="fu "> MHSampler</ span > (), < span class ="fl "> 1_000_000</ span > ; chain_type< span class ="op "> =</ span > Chains, progress< span class ="op "> =</ span > < span class ="cn "> false</ span > )</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
959
983
< div class ="cell-output cell-output-display " data-execution_count ="1 ">
960
984
< div class ="ansi-escaped-output ">
961
985
< pre > Chains MCMC chain (1000000×2×1 Array{Float64, 3}):
@@ -969,59 +993,59 @@ <h1>Consider a probabilistic model defined by</h1>
969
993
< span class ="ansi-bold "> parameters </ span > < span class ="ansi-bold "> mean </ span > < span class ="ansi-bold "> std </ span > < span class ="ansi-bold "> mcse </ span > < span class ="ansi-bold "> ess_bulk </ span > < span class ="ansi-bold "> ess_tail </ span > < span class ="ansi-bold "> rh ⋯
970
994
</ span > < span class ="ansi-bright-black-fg ansi-bold "> Symbol </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float ⋯
971
995
972
- a 0.9753 0.8997 0.0031 81794.4341 123362.6228 1.00 ⋯
973
- b 2.8820 0.4888 0.0012 171013.4524 212508.3047 1.00 ⋯
996
+ a 0.9762 0.8982 0.0031 82592.4304 125260.8551 1.00 ⋯
997
+ b 2.8813 0.4877 0.0012 173151.2173 214241.1846 1.00 ⋯
974
998
</ span > < span class ="ansi-cyan-fg ansi-bold "> 2 columns omitted
975
999
976
1000
Quantiles
977
1001
</ span > < span class ="ansi-cyan-fg ansi-bold "> parameters </ span > < span class ="ansi-cyan-fg ansi-bold "> 2.5% </ span > < span class ="ansi-cyan-fg ansi-bold "> 25.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 50.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 75.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 97.5%
978
1002
</ span > < span class ="ansi-bright-black-fg ansi-bold "> Symbol </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64
979
1003
980
- a -0.7888 0.3693 0.9766 1.5825 2.7388
981
- b 1.9274 2.5530 2.8819 3.2096 3.8428
1004
+ a -0.7921 0.3708 0.9772 1.5827 2.7396
1005
+ b 1.9268 2.5529 2.8809 3.2104 3.8358
982
1006
</ span > </ pre >
983
1007
</ div >
984
1008
</ div >
985
1009
</ div >
986
1010
< p > We compare these results with Turing.</ p >
987
- < div id ="26 " class ="cell " data-execution_count ="1 ">
988
- < div class ="sourceCode cell-code " id ="cb12 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb12 -1 "> < a href ="#cb12 -1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="im "> using</ span > < span class ="bu "> Turing</ span > </ span >
989
- < span id ="cb12 -2 "> < a href ="#cb12 -2 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="im "> using</ span > < span class ="bu "> PDMats</ span > </ span >
990
- < span id ="cb12 -3 "> < a href ="#cb12 -3 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
991
- < span id ="cb12 -4 "> < a href ="#cb12 -4 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="pp "> @model</ span > < span class ="kw "> function</ span > < span class ="fu "> turing_m</ span > (x)</ span >
992
- < span id ="cb12 -5 "> < a href ="#cb12 -5 " aria-hidden ="true " tabindex ="-1 "> </ a > a < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (< span class ="fl "> 0.5</ span > , < span class ="fl "> 1</ span > )</ span >
993
- < span id ="cb12 -6 "> < a href ="#cb12 -6 " aria-hidden ="true " tabindex ="-1 "> </ a > b < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (a, < span class ="fl "> 2</ span > )</ span >
994
- < span id ="cb12 -7 "> < a href ="#cb12 -7 " aria-hidden ="true " tabindex ="-1 "> </ a > x < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (b, < span class ="fl "> 0.5</ span > )</ span >
995
- < span id ="cb12 -8 "> < a href ="#cb12 -8 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="cf "> return</ span > < span class ="cn "> nothing</ span > </ span >
996
- < span id ="cb12 -9 "> < a href ="#cb12 -9 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="kw "> end</ span > </ span >
997
- < span id ="cb12 -10 "> < a href ="#cb12 -10 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
998
- < span id ="cb12 -11 "> < a href ="#cb12 -11 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="fu "> sample</ span > (< span class ="fu "> turing_m</ span > (< span class ="fl "> 3.0</ span > ), < span class ="fu "> MH</ span > (< span class ="fu "> ScalMat</ span > (< span class ="fl "> 2</ span > , < span class ="fl "> 1.0</ span > )), < span class ="fl "> 1_000_000</ span > , progress< span class ="op "> =</ span > < span class ="cn "> false</ span > )</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
1011
+ < div id ="28 " class ="cell " data-execution_count ="1 ">
1012
+ < div class ="sourceCode cell-code " id ="cb13 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb13 -1 "> < a href ="#cb13 -1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="im "> using</ span > < span class ="bu "> Turing</ span > </ span >
1013
+ < span id ="cb13 -2 "> < a href ="#cb13 -2 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="im "> using</ span > < span class ="bu "> PDMats</ span > </ span >
1014
+ < span id ="cb13 -3 "> < a href ="#cb13 -3 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
1015
+ < span id ="cb13 -4 "> < a href ="#cb13 -4 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="pp "> @model</ span > < span class ="kw "> function</ span > < span class ="fu "> turing_m</ span > (x)</ span >
1016
+ < span id ="cb13 -5 "> < a href ="#cb13 -5 " aria-hidden ="true " tabindex ="-1 "> </ a > a < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (< span class ="fl "> 0.5</ span > , < span class ="fl "> 1</ span > )</ span >
1017
+ < span id ="cb13 -6 "> < a href ="#cb13 -6 " aria-hidden ="true " tabindex ="-1 "> </ a > b < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (a, < span class ="fl "> 2</ span > )</ span >
1018
+ < span id ="cb13 -7 "> < a href ="#cb13 -7 " aria-hidden ="true " tabindex ="-1 "> </ a > x < span class ="op "> ~</ span > < span class ="fu "> Normal</ span > (b, < span class ="fl "> 0.5</ span > )</ span >
1019
+ < span id ="cb13 -8 "> < a href ="#cb13 -8 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="cf "> return</ span > < span class ="cn "> nothing</ span > </ span >
1020
+ < span id ="cb13 -9 "> < a href ="#cb13 -9 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="kw "> end</ span > </ span >
1021
+ < span id ="cb13 -10 "> < a href ="#cb13 -10 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
1022
+ < span id ="cb13 -11 "> < a href ="#cb13 -11 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="fu "> sample</ span > (< span class ="fu "> turing_m</ span > (< span class ="fl "> 3.0</ span > ), < span class ="fu "> MH</ span > (< span class ="fu "> ScalMat</ span > (< span class ="fl "> 2</ span > , < span class ="fl "> 1.0</ span > )), < span class ="fl "> 1_000_000</ span > , progress< span class ="op "> =</ span > < span class ="cn "> false</ span > )</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
999
1023
< div class ="cell-output cell-output-display " data-execution_count ="1 ">
1000
1024
< div class ="ansi-escaped-output ">
1001
1025
< pre > Chains MCMC chain (1000000×3×1 Array{Float64, 3}):
1002
1026
1003
1027
Iterations = 1:1:1000000
1004
1028
Number of chains = 1
1005
1029
Samples per chain = 1000000
1006
- Wall duration = 25.89 seconds
1007
- Compute duration = 25.89 seconds
1030
+ Wall duration = 25.85 seconds
1031
+ Compute duration = 25.85 seconds
1008
1032
parameters = a, b
1009
1033
internals = lp
1010
1034
1011
1035
Summary Statistics
1012
1036
< span class ="ansi-bold "> parameters </ span > < span class ="ansi-bold "> mean </ span > < span class ="ansi-bold "> std </ span > < span class ="ansi-bold "> mcse </ span > < span class ="ansi-bold "> ess_bulk </ span > < span class ="ansi-bold "> ess_tail </ span > < span class ="ansi-bold "> rh ⋯
1013
1037
</ span > < span class ="ansi-bright-black-fg ansi-bold "> Symbol </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float ⋯
1014
1038
1015
- a 0.9766 0.8981 0.0032 81207.2184 120622.4136 1.00 ⋯
1016
- b 2.8813 0.4872 0.0012 173570.7765 217884.8911 1.00 ⋯
1039
+ a 0.9731 0.9000 0.0032 80783.6958 122202.1490 1.00 ⋯
1040
+ b 2.8804 0.4876 0.0012 171838.9228 215780.7626 1.00 ⋯
1017
1041
</ span > < span class ="ansi-cyan-fg ansi-bold "> 2 columns omitted
1018
1042
1019
1043
Quantiles
1020
1044
</ span > < span class ="ansi-cyan-fg ansi-bold "> parameters </ span > < span class ="ansi-cyan-fg ansi-bold "> 2.5% </ span > < span class ="ansi-cyan-fg ansi-bold "> 25.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 50.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 75.0% </ span > < span class ="ansi-cyan-fg ansi-bold "> 97.5%
1021
1045
</ span > < span class ="ansi-bright-black-fg ansi-bold "> Symbol </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64 </ span > < span class ="ansi-bright-black-fg ansi-bold "> Float64
1022
1046
1023
- a -0.7876 0.3724 0.9773 1.5797 2.7369
1024
- b 1.9265 2.5536 2.8827 3.2090 3.8361
1047
+ a -0.7904 0.3650 0.9716 1.5814 2.7290
1048
+ b 1.9251 2.5527 2.8809 3.2092 3.8365
1025
1049
</ span > </ pre >
1026
1050
</ div >
1027
1051
</ div >
0 commit comments